From 4b933466f43fcf16288359e87eae31cbdb915f1b Mon Sep 17 00:00:00 2001 From: EYHN Date: Wed, 17 Apr 2024 17:27:33 +0800 Subject: [PATCH] fix(storybook): remove storybook testing (#6595) remove tests/storybook @affine/components storybook still exists --- .eslintrc.js | 1 - .github/workflows/publish-storybook.yml | 51 --- .github/workflows/publish-ui-storybook.yml | 51 --- README.md | 2 +- docs/contributing/tutorial.md | 6 - package.json | 2 - tests/storybook/.storybook/main.ts | 71 ---- tests/storybook/.storybook/polyfill.ts | 2 - tests/storybook/.storybook/preview-head.html | 3 - tests/storybook/.storybook/preview.tsx | 193 ---------- tests/storybook/README.md | 1 - tests/storybook/package.json | 63 ---- tests/storybook/project.json | 49 --- .../src/stories/affine-banner.stories.tsx | 40 -- .../src/stories/app-sidebar.stories.tsx | 146 -------- .../stories/app-updater-button.stories.tsx | 59 --- .../src/stories/blocksuite-editor.stories.tsx | 57 --- tests/storybook/src/stories/card.stories.tsx | 67 ---- .../src/stories/checkbox.stories.tsx | 64 ---- tests/storybook/src/stories/core.stories.tsx | 227 ------------ .../stories/image-preview-modal.stories.tsx | 96 ----- .../src/stories/import-page.stories.tsx | 22 -- tests/storybook/src/stories/input.stories.tsx | 42 --- .../src/stories/introduction.stories.mdx | 18 - .../stories/notification-center.stories.tsx | 249 ------------- .../src/stories/onboarding.stories.tsx | 14 - .../stories/page-detail-skeleton.stories.tsx | 14 - .../stories/page-info-properties.stories.tsx | 64 ---- .../src/stories/page-list.stories.tsx | 349 ------------------ .../quick-search-main.stories.tsx | 104 ------ .../quick-search-modal.stories.tsx | 42 --- .../src/stories/share-menu.stories.tsx | 113 ------ .../storybook/src/stories/switch.stories.tsx | 15 - .../src/stories/workspace-list.stories.tsx | 32 -- tests/storybook/tsconfig.json | 31 -- tests/storybook/tsconfig.node.json | 25 -- tsconfig.json | 3 - yarn.lock | 213 +---------- 38 files changed, 8 insertions(+), 2593 deletions(-) delete mode 100644 .github/workflows/publish-storybook.yml delete mode 100644 .github/workflows/publish-ui-storybook.yml delete mode 100644 tests/storybook/.storybook/main.ts delete mode 100644 tests/storybook/.storybook/polyfill.ts delete mode 100644 tests/storybook/.storybook/preview-head.html delete mode 100644 tests/storybook/.storybook/preview.tsx delete mode 100644 tests/storybook/README.md delete mode 100644 tests/storybook/package.json delete mode 100644 tests/storybook/project.json delete mode 100644 tests/storybook/src/stories/affine-banner.stories.tsx delete mode 100644 tests/storybook/src/stories/app-sidebar.stories.tsx delete mode 100644 tests/storybook/src/stories/app-updater-button.stories.tsx delete mode 100644 tests/storybook/src/stories/blocksuite-editor.stories.tsx delete mode 100644 tests/storybook/src/stories/card.stories.tsx delete mode 100644 tests/storybook/src/stories/checkbox.stories.tsx delete mode 100644 tests/storybook/src/stories/core.stories.tsx delete mode 100644 tests/storybook/src/stories/image-preview-modal.stories.tsx delete mode 100644 tests/storybook/src/stories/import-page.stories.tsx delete mode 100644 tests/storybook/src/stories/input.stories.tsx delete mode 100644 tests/storybook/src/stories/introduction.stories.mdx delete mode 100644 tests/storybook/src/stories/notification-center.stories.tsx delete mode 100644 tests/storybook/src/stories/onboarding.stories.tsx delete mode 100644 tests/storybook/src/stories/page-detail-skeleton.stories.tsx delete mode 100644 tests/storybook/src/stories/page-info-properties.stories.tsx delete mode 100644 tests/storybook/src/stories/page-list.stories.tsx delete mode 100644 tests/storybook/src/stories/quick-search/quick-search-main.stories.tsx delete mode 100644 tests/storybook/src/stories/quick-search/quick-search-modal.stories.tsx delete mode 100644 tests/storybook/src/stories/share-menu.stories.tsx delete mode 100644 tests/storybook/src/stories/switch.stories.tsx delete mode 100644 tests/storybook/src/stories/workspace-list.stories.tsx delete mode 100644 tests/storybook/tsconfig.json delete mode 100644 tests/storybook/tsconfig.node.json diff --git a/.eslintrc.js b/.eslintrc.js index e1bf84d8a0..09c560f3f5 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -54,7 +54,6 @@ const allPackages = [ 'packages/common/theme', 'packages/common/y-indexeddb', 'tools/cli', - 'tests/storybook', ]; /** diff --git a/.github/workflows/publish-storybook.yml b/.github/workflows/publish-storybook.yml deleted file mode 100644 index 5ad11dc9c6..0000000000 --- a/.github/workflows/publish-storybook.yml +++ /dev/null @@ -1,51 +0,0 @@ -name: Publish Storybook - -env: - NODE_OPTIONS: --max-old-space-size=4096 - -on: - workflow_dispatch: - push: - branches: - - canary - pull_request: - branches: - - canary - paths-ignore: - - README.md - - .github/** - - packages/backend/server - - packages/frontend/electron - - '!.github/workflows/publish-storybook.yml' - -jobs: - publish-storybook: - name: Publish Storybook - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.merge_commit_sha }} - # This is required to fetch all commits for chromatic - fetch-depth: 0 - - name: Setup Node.js - uses: ./.github/actions/setup-node - with: - electron-install: false - - uses: chromaui/action-next@v1 - with: - workingDir: tests/storybook - buildScriptName: build - exitOnceUploaded: true - onlyChanged: false - diagnostics: true - env: - CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} - NODE_OPTIONS: ${{ env.NODE_OPTIONS }} - - uses: actions/upload-artifact@v4 - if: always() - with: - name: chromatic-build-artifacts-${{ github.run_id }} - path: | - chromatic-diagnostics.json - **/build-storybook.log diff --git a/.github/workflows/publish-ui-storybook.yml b/.github/workflows/publish-ui-storybook.yml deleted file mode 100644 index af19f68546..0000000000 --- a/.github/workflows/publish-ui-storybook.yml +++ /dev/null @@ -1,51 +0,0 @@ -name: Publish UI Storybook - -env: - NODE_OPTIONS: --max-old-space-size=4096 - -on: - workflow_dispatch: - push: - branches: - - canary - pull_request: - branches: - - canary - paths-ignore: - - README.md - - .github/** - - packages/backend/server - - packages/frontend/electron - - '!.github/workflows/publish-storybook.yml' - -jobs: - publish-ui-storybook: - name: Publish UI Storybook - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.merge_commit_sha }} - # This is required to fetch all commits for chromatic - fetch-depth: 0 - - name: Setup Node.js - uses: ./.github/actions/setup-node - with: - electron-install: false - - uses: chromaui/action-next@v1 - with: - workingDir: packages/frontend/component - buildScriptName: build:storybook - exitOnceUploaded: true - onlyChanged: false - diagnostics: true - env: - CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_UI_PROJECT_TOKEN }} - NODE_OPTIONS: ${{ env.NODE_OPTIONS }} - - uses: actions/upload-artifact@v4 - if: always() - with: - name: chromatic-build-artifacts-${{ github.run_id }} - path: | - chromatic-diagnostics.json - **/build-storybook.log diff --git a/README.md b/README.md index ffd5ff03f4..615a2a5b86 100644 --- a/README.md +++ b/README.md @@ -112,7 +112,7 @@ If you have questions, you are welcome to contact us. One of the best places to | Name | | | | -------------------------------------------------------- | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | -| [@affine/component](packages/frontend/component) | AFFiNE Component Resources | [![](https://img.shields.io/codecov/c/github/toeverything/affine?style=flat-square)](https://affine-storybook.vercel.app/) | +| [@affine/component](packages/frontend/component) | AFFiNE Component Resources | ![](https://img.shields.io/codecov/c/github/toeverything/affine?style=flat-square) | | [@toeverything/y-indexeddb](packages/common/y-indexeddb) | IndexedDB database adapter for Yjs | [![](https://img.shields.io/npm/dm/@toeverything/y-indexeddb?style=flat-square&color=eee)](https://www.npmjs.com/package/@toeverything/y-indexeddb) | | [@toeverything/theme](packages/common/theme) | AFFiNE theme | [![](https://img.shields.io/npm/dm/@toeverything/theme?style=flat-square&color=eee)](https://www.npmjs.com/package/@toeverything/theme) | diff --git a/docs/contributing/tutorial.md b/docs/contributing/tutorial.md index 854dadaae6..4eba50ff10 100644 --- a/docs/contributing/tutorial.md +++ b/docs/contributing/tutorial.md @@ -54,12 +54,6 @@ yarn dev See [building desktop client app](../building-desktop-client-app.md). -### `@affine/storybook` - -```shell -yarn workspace @affine/storybook storybook -``` - ## What's next? - [Behind the code](./behind-the-code.md) diff --git a/package.json b/package.json index fbfebaa872..9f765c1cce 100644 --- a/package.json +++ b/package.json @@ -22,9 +22,7 @@ "build": "yarn nx build @affine/web", "build:electron": "yarn nx build @affine/electron", "build:storage": "yarn nx run-many -t build -p @affine/storage", - "build:storybook": "yarn nx build @affine/storybook", "start:web-static": "yarn workspace @affine/web static-server", - "start:storybook": "yarn exec serve tests/storybook/storybook-static -l 6006", "serve:test-static": "yarn exec serve tests/fixtures --cors -p 8081", "lint:eslint": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" eslint . --ext .js,mjs,.ts,.tsx --cache", "lint:eslint:fix": "yarn lint:eslint --fix", diff --git a/tests/storybook/.storybook/main.ts b/tests/storybook/.storybook/main.ts deleted file mode 100644 index d78d024592..0000000000 --- a/tests/storybook/.storybook/main.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { runCli } from '@magic-works/i18n-codegen'; -import type { StorybookConfig } from '@storybook/react-vite'; -import { fileURLToPath } from 'node:url'; -import { mergeConfig, type InlineConfig } from 'vite'; -import { vanillaExtractPlugin } from '@vanilla-extract/vite-plugin'; -import { getRuntimeConfig } from '@affine/cli/src/webpack/runtime-config'; - -runCli( - { - config: fileURLToPath( - new URL('../../../.i18n-codegen.json', import.meta.url) - ), - watch: false, - }, - error => { - console.error(error); - process.exit(1); - } -); - -export default { - stories: ['../src/**/*.stories.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'], - staticDirs: ['../../../packages/frontend/core/public'], - addons: [ - '@storybook/addon-links', - '@storybook/addon-essentials', - '@storybook/addon-interactions', - 'storybook-dark-mode', - 'storybook-addon-react-router-v6', - ], - framework: { - name: '@storybook/react-vite', - }, - async viteFinal(config, _options) { - const runtimeConfig = getRuntimeConfig({ - distribution: 'browser', - mode: 'development', - channel: 'canary', - coverage: false, - }); - // disable for storybook build - runtimeConfig.enableCloud = false; - return mergeConfig(config, { - assetsInclude: ['**/*.md', '**/*.zip'], - resolve: { - alias: { - // workaround for https://github.com/vitejs/vite/issues/9731 - // it seems vite does not resolve self reference correctly? - '@affine/core': fileURLToPath( - new URL('../../../packages/frontend/core/src', import.meta.url) - ), - }, - }, - esbuild: { - target: 'ES2022', - }, - plugins: [vanillaExtractPlugin()], - define: { - 'process.on': 'undefined', - 'process.env': {}, - 'process.env.COVERAGE': JSON.stringify(!!process.env.COVERAGE), - 'process.env.SHOULD_REPORT_TRACE': `${Boolean( - process.env.SHOULD_REPORT_TRACE === 'true' - )}`, - 'process.env.TRACE_REPORT_ENDPOINT': `"${process.env.TRACE_REPORT_ENDPOINT}"`, - 'process.env.CAPTCHA_SITE_KEY': `"${process.env.CAPTCHA_SITE_KEY}"`, - runtimeConfig: runtimeConfig, - }, - }); - }, -} as StorybookConfig; diff --git a/tests/storybook/.storybook/polyfill.ts b/tests/storybook/.storybook/polyfill.ts deleted file mode 100644 index 615ed233c7..0000000000 --- a/tests/storybook/.storybook/polyfill.ts +++ /dev/null @@ -1,2 +0,0 @@ -import 'core-js/modules/esnext.symbol.async-dispose'; -import 'core-js/modules/esnext.symbol.dispose'; diff --git a/tests/storybook/.storybook/preview-head.html b/tests/storybook/.storybook/preview-head.html deleted file mode 100644 index e551040105..0000000000 --- a/tests/storybook/.storybook/preview-head.html +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/tests/storybook/.storybook/preview.tsx b/tests/storybook/.storybook/preview.tsx deleted file mode 100644 index 217c215784..0000000000 --- a/tests/storybook/.storybook/preview.tsx +++ /dev/null @@ -1,193 +0,0 @@ -import './polyfill'; -import '@affine/component/theme/global.css'; -import '@affine/component/theme/theme.css'; -import '@affine/core/bootstrap/preload'; -import { createI18n } from '@affine/i18n'; -import { ThemeProvider, useTheme } from 'next-themes'; -import { useDarkMode } from 'storybook-dark-mode'; -import { AffineContext } from '@affine/component/context'; -import useSWR from 'swr'; -import type { Decorator } from '@storybook/react'; -import { - FrameworkRoot, - FrameworkScope, - GlobalContextService, - LifecycleService, - WorkspacesService, - _setCurrentStore, - configureTestingInfraModules, - useLiveData, -} from '@toeverything/infra'; -import { setupGlobal, type Environment } from '@affine/env/global'; - -import type { Preview } from '@storybook/react'; -import { useLayoutEffect, useMemo, useRef } from 'react'; -import { WorkspaceFlavour } from '@affine/env/workspace'; -import { Framework } from '@toeverything/infra'; -import { configureCommonModules } from '@affine/core/modules'; -import { createStore } from 'jotai'; - -setupGlobal(); -export const parameters = { - backgrounds: { disable: true }, - actions: { argTypesRegex: '^on[A-Z].*' }, - controls: { - matchers: { - color: /(background|color)$/i, - date: /Date$/, - }, - }, -}; - -const i18n = createI18n(); -const withI18n: Decorator = (Story, context) => { - const locale = context.globals.locale; - useSWR( - locale, - async () => { - await i18n.changeLanguage(locale); - }, - { - suspense: true, - } - ); - return ; -}; - -const ThemeChange = () => { - const isDark = useDarkMode(); - const theme = useTheme(); - if (theme.resolvedTheme === 'dark' && !isDark) { - theme.setTheme('light'); - } else if (theme.resolvedTheme === 'light' && isDark) { - theme.setTheme('dark'); - } - return null; -}; - -localStorage.clear(); - -// do not show onboarding for storybook -window.localStorage.setItem('app_config', '{"onBoarding":false}'); -window.localStorage.setItem('dismissAiOnboarding', 'true'); -window.localStorage.setItem('dismissAiOnboardingEdgeless', 'true'); -window.localStorage.setItem('dismissAiOnboardingLocal', 'true'); - -const framework = new Framework(); - -configureCommonModules(framework); -configureTestingInfraModules(framework); - -const frameworkProvider = framework.provider(); - -frameworkProvider.get(LifecycleService).applicationStart(); -const globalContextService = frameworkProvider.get(GlobalContextService); - -const store = createStore(); -_setCurrentStore(store); - -frameworkProvider - .get(WorkspacesService) - .create(WorkspaceFlavour.LOCAL, async w => { - w.meta.setName('test-workspace'); - w.meta.writeVersion(w); - }) - .then(meta => { - globalContextService.globalContext.workspaceId.set(meta.id); - }); - -const withContextDecorator: Decorator = (Story, context) => { - const workspaceId = useLiveData( - globalContextService.globalContext.workspaceId.$ - ); - - const { workspace } = - useMemo(() => { - if (!workspaceId) { - return null; - } - return frameworkProvider.get(WorkspacesService).open({ - metadata: { flavour: WorkspaceFlavour.LOCAL, id: workspaceId }, - }); - }, []) ?? {}; - - if (!workspace) { - return <>loading..; - } - - return ( - - - - - - - - - - - ); -}; - -const platforms = ['web', 'desktop-macos', 'desktop-windows'] as const; - -const withPlatformSelectionDecorator: Decorator = (Story, context) => { - const setupCounterRef = useRef(0); - useLayoutEffect(() => { - if (setupCounterRef.current++ === 0) { - return; - } - switch (context.globals.platform) { - case 'desktop-macos': - environment = { - ...environment, - isBrowser: true, - isDesktop: true, - isMacOs: true, - isWindows: false, - } as Environment; - break; - case 'desktop-windows': - environment = { - ...environment, - isBrowser: true, - isDesktop: true, - isMacOs: false, - isWindows: true, - } as Environment; - break; - default: - globalThis.$AFFINE_SETUP = false; - setupGlobal(); - break; - } - }, [context.globals.platform]); - - return ; -}; - -const decorators = [ - withContextDecorator, - withI18n, - withPlatformSelectionDecorator, -]; - -const preview: Preview = { - decorators, - globalTypes: { - platform: { - description: 'Rendering platform target', - defaultValue: 'web', - toolbar: { - // The label to show for this toolbar item - title: 'platform', - // Array of plain string values or MenuItem shape (see below) - items: platforms, - // Change title based on selected value - dynamicTitle: true, - }, - }, - }, -}; - -export default preview; diff --git a/tests/storybook/README.md b/tests/storybook/README.md deleted file mode 100644 index b9895ba12a..0000000000 --- a/tests/storybook/README.md +++ /dev/null @@ -1 +0,0 @@ -# Storybook diff --git a/tests/storybook/package.json b/tests/storybook/package.json deleted file mode 100644 index 122267ec08..0000000000 --- a/tests/storybook/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "name": "@affine/storybook", - "private": true, - "scripts": { - "dev": "storybook dev -p 6006", - "build": "storybook build", - "test": "test-storybook" - }, - "dependencies": { - "@affine/cli": "workspace:*", - "@affine/component": "workspace:*", - "@affine/i18n": "workspace:*", - "@dnd-kit/sortable": "^8.0.0", - "@storybook/jest": "^0.2.3", - "@storybook/testing-library": "^0.2.2", - "foxact": "^0.2.33", - "jotai": "^2.8.0", - "lodash-es": "^4.17.21", - "nanoid": "^5.0.7", - "react-router-dom": "^6.22.3", - "ses": "^1.4.1", - "storybook-addon-react-router-v6": "^2.0.15" - }, - "devDependencies": { - "@blocksuite/block-std": "0.14.0-canary-202404151235-655ec84", - "@blocksuite/blocks": "0.14.0-canary-202404151235-655ec84", - "@blocksuite/global": "0.14.0-canary-202404151235-655ec84", - "@blocksuite/icons": "2.1.46", - "@blocksuite/inline": "0.14.0-canary-202404151235-655ec84", - "@blocksuite/presets": "0.14.0-canary-202404151235-655ec84", - "@blocksuite/store": "0.14.0-canary-202404151235-655ec84", - "@storybook/addon-actions": "^7.6.17", - "@storybook/addon-essentials": "^7.6.17", - "@storybook/addon-interactions": "^7.6.17", - "@storybook/addon-links": "^7.6.17", - "@storybook/addon-storysource": "^7.6.17", - "@storybook/blocks": "^7.6.17", - "@storybook/builder-vite": "^7.6.17", - "@storybook/react": "^7.6.17", - "@storybook/react-vite": "^7.6.17", - "@storybook/test-runner": "^0.17.0", - "@vanilla-extract/esbuild-plugin": "^2.3.5", - "@vitejs/plugin-react": "^4.2.1", - "chromatic": "^11.3.0", - "concurrently": "^8.2.2", - "jest-mock": "^29.7.0", - "react": "18.2.0", - "react-dom": "18.2.0", - "serve": "^14.2.1", - "storybook": "^7.6.17", - "storybook-dark-mode": "^3.0.3", - "storybook-mock-date-decorator": "^1.0.2", - "wait-on": "^7.2.0" - }, - "peerDependencies": { - "@blocksuite/blocks": "*", - "@blocksuite/global": "*", - "@blocksuite/icons": "2.1.34", - "@blocksuite/presets": "*", - "@blocksuite/store": "*" - }, - "version": "0.14.0" -} diff --git a/tests/storybook/project.json b/tests/storybook/project.json deleted file mode 100644 index 9415509751..0000000000 --- a/tests/storybook/project.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "@affine/storybook", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "targets": { - "build": { - "executor": "nx:run-script", - "dependsOn": ["^build"], - "inputs": [ - "default", - "^production", - "{projectRoot}/.storybook/**/*", - "{workspaceRoot}/packages/frontend/components/src/**/*", - "{workspaceRoot}/packages/frontend/core/src/**/*", - "{workspaceRoot}/packages/common/infra/**/*", - { - "runtime": "node -v" - }, - { - "env": "BUILD_TYPE" - }, - { - "env": "PERFSEE_TOKEN" - }, - { - "env": "SENTRY_ORG" - }, - { - "env": "SENTRY_PROJECT" - }, - { - "env": "SENTRY_AUTH_TOKEN" - }, - { - "env": "SENTRY_DSN" - }, - { - "env": "DISTRIBUTION" - }, - { - "env": "COVERAGE" - } - ], - "options": { - "script": "build" - }, - "outputs": ["{projectRoot}/storybook-static"] - } - } -} diff --git a/tests/storybook/src/stories/affine-banner.stories.tsx b/tests/storybook/src/stories/affine-banner.stories.tsx deleted file mode 100644 index 27f95e66a2..0000000000 --- a/tests/storybook/src/stories/affine-banner.stories.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { BrowserWarning, LocalDemoTips } from '@affine/component/affine-banner'; -import type { StoryFn } from '@storybook/react'; -import { useState } from 'react'; - -export default { - title: 'AFFiNE/Banner', - component: BrowserWarning, -}; - -export const Default: StoryFn = () => { - const [closed, setIsClosed] = useState(true); - return ( -
- test} - show={closed} - onClose={() => { - setIsClosed(false); - }} - /> -
- ); -}; - -export const Download: StoryFn = () => { - const [, setIsClosed] = useState(true); - const [isLoggedIn, setIsLoggedIn] = useState(false); - return ( -
- setIsLoggedIn(true)} - onEnableCloud={() => {}} - onClose={() => { - setIsClosed(false); - }} - /> -
- ); -}; diff --git a/tests/storybook/src/stories/app-sidebar.stories.tsx b/tests/storybook/src/stories/app-sidebar.stories.tsx deleted file mode 100644 index dad8ffb4b8..0000000000 --- a/tests/storybook/src/stories/app-sidebar.stories.tsx +++ /dev/null @@ -1,146 +0,0 @@ -import { - AddPageButton, - AppSidebar, - AppSidebarFallback, - appSidebarOpenAtom, - CategoryDivider, - MenuLinkItem, - navHeaderStyle, - QuickSearchInput, - SidebarContainer, - SidebarScrollableContainer, - SidebarSwitch, -} from '@affine/core/components/app-sidebar'; -import { DeleteTemporarilyIcon, SettingsIcon } from '@blocksuite/icons'; -import type { Meta, StoryFn } from '@storybook/react'; -import { useAtom } from 'jotai'; -import type { PropsWithChildren } from 'react'; -import { useState } from 'react'; -import { MemoryRouter } from 'react-router-dom'; - -export default { - title: 'AFFiNE/AppSidebar', - component: AppSidebar, -} satisfies Meta; - -const Container = ({ children }: PropsWithChildren) => ( - -
- {children} -
-
-); -const Main = () => { - const [open] = useAtom(appSidebarOpenAtom); - return ( -
-
- -
-
- ); -}; - -export const Default: StoryFn = () => { - return ( - - -
- - ); -}; - -export const Fallback = () => { - return ( - - -
- - ); -}; - -export const WithItems: StoryFn = () => { - const [collapsed, setCollapsed] = useState(false); - return ( - - - - -
- } - to="/test" - onClick={() => alert('opened')} - > - Settings - - } - to="/test" - onClick={() => alert('opened')} - > - Settings - - } - to="/test" - onClick={() => alert('opened')} - > - Settings - - - - - - } - to="/test" - onClick={() => alert('opened')} - > - Collapsible Item - - } - to="/test" - onClick={() => alert('opened')} - > - Collapsible Item - - } - to="/test" - onClick={() => alert('opened')} - > - Settings - - - - } - to="/test" - onClick={() => alert('opened')} - > - Trash - - - - - - -
- - ); -}; diff --git a/tests/storybook/src/stories/app-updater-button.stories.tsx b/tests/storybook/src/stories/app-updater-button.stories.tsx deleted file mode 100644 index 50e217784b..0000000000 --- a/tests/storybook/src/stories/app-updater-button.stories.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import type { AddPageButtonProps } from '@affine/core/components/app-sidebar'; -import { AppUpdaterButton } from '@affine/core/components/app-sidebar'; -import type { Meta, StoryFn } from '@storybook/react'; -import type { PropsWithChildren } from 'react'; - -export default { - title: 'AFFiNE/AppUpdaterButton', - component: AppUpdaterButton, - parameters: { - chromatic: { disableSnapshot: true }, - }, -} satisfies Meta; - -const Container = ({ children }: PropsWithChildren) => ( -
- {children} -
-); - -export const Default: StoryFn = props => { - return ( - - - - ); -}; - -Default.args = { - appQuitting: false, - updateReady: true, - updateAvailable: { - version: '1.0.0-beta.1', - allowAutoUpdate: true, - }, - downloadProgress: 42, - changelogUnread: true, - autoDownload: false, -}; - -export const Updated: StoryFn = props => { - return ( - - - - ); -}; - -Updated.args = { - changelogUnread: true, -}; diff --git a/tests/storybook/src/stories/blocksuite-editor.stories.tsx b/tests/storybook/src/stories/blocksuite-editor.stories.tsx deleted file mode 100644 index cf71e295a7..0000000000 --- a/tests/storybook/src/stories/blocksuite-editor.stories.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { BlockSuiteEditor } from '@affine/core/components/blocksuite/block-suite-editor'; -import { AffineSchemas } from '@blocksuite/blocks/schemas'; -import { DocCollection, Schema } from '@blocksuite/store'; -import type { StoryFn } from '@storybook/react'; -import { initEmptyPage } from '@toeverything/infra'; - -const schema = new Schema(); -schema.register(AffineSchemas); - -async function createAndInitPage( - docCollection: DocCollection, - title: string, - preview: string -) { - const doc = docCollection.createDoc(); - initEmptyPage(doc, title); - doc.getBlockByFlavour('affine:paragraph').at(0)?.text?.insert(preview, 0); - return doc; -} - -export default { - title: 'AFFiNE/BlocksuiteEditor/DocEditor', -}; - -export const DocEditor: StoryFn = (_, { loaded }) => { - return ( -
- -
- ); -}; - -DocEditor.loaders = [ - async () => { - const docCollection = new DocCollection({ - id: 'test-workspace-id', - schema, - }); - docCollection.doc.emit('sync', [true, docCollection.doc]); - docCollection.meta.setProperties({ - tags: { - options: [], - }, - }); - - const page = await createAndInitPage( - docCollection, - 'This is page 1', - 'Hello World from page 1' - ); - - return { - page, - workspace: docCollection, - }; - }, -]; diff --git a/tests/storybook/src/stories/card.stories.tsx b/tests/storybook/src/stories/card.stories.tsx deleted file mode 100644 index 85928ae7cb..0000000000 --- a/tests/storybook/src/stories/card.stories.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import { toast } from '@affine/component'; -import { BlockCard } from '@affine/component/card/block-card'; -import { WorkspaceCard } from '@affine/component/card/workspace-card'; -import { Tooltip } from '@affine/component/ui/tooltip'; -import { WorkspaceFlavour } from '@affine/env/workspace'; -import { - EdgelessIcon, - ExportToHtmlIcon, - HelpIcon, - PageIcon, -} from '@blocksuite/icons'; -import type { Meta } from '@storybook/react'; - -export default { - title: 'AFFiNE/Card', - component: WorkspaceCard, - parameters: { - chromatic: { disableSnapshot: true }, - }, -} satisfies Meta; - -export const AffineWorkspaceCard = () => { - return ( - {}} - onSettingClick={() => {}} - currentWorkspaceId={null} - isOwner={true} - /> - ); -}; - -export const AffineBlockCard = () => { - return ( -
- toast('clicked')} /> - } - onClick={() => toast('clicked page')} - /> - } - right={} - onClick={() => toast('clicked edgeless')} - /> - } - title="HTML" - disabled - right={ - - - - } - onClick={() => toast('click HTML')} - /> -
- ); -}; diff --git a/tests/storybook/src/stories/checkbox.stories.tsx b/tests/storybook/src/stories/checkbox.stories.tsx deleted file mode 100644 index 3616cb6529..0000000000 --- a/tests/storybook/src/stories/checkbox.stories.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import { Checkbox } from '@affine/component'; -import type { Meta, StoryFn } from '@storybook/react'; -import { useState } from 'react'; - -export default { - title: 'AFFiNE/Checkbox', - component: Checkbox, - parameters: { - chromatic: { disableSnapshot: true }, - }, -} satisfies Meta; - -export const Basic: StoryFn = props => { - const [checked, setChecked] = useState(props.checked); - const handleChange = ( - _event: React.ChangeEvent, - checked: boolean - ) => { - setChecked(checked); - props.onChange?.(_event, checked); - }; - return ( -
- - - - -
- ); -}; - -Basic.args = { - checked: true, - disabled: false, - indeterminate: false, - onChange: console.log, -}; diff --git a/tests/storybook/src/stories/core.stories.tsx b/tests/storybook/src/stories/core.stories.tsx deleted file mode 100644 index 784a475890..0000000000 --- a/tests/storybook/src/stories/core.stories.tsx +++ /dev/null @@ -1,227 +0,0 @@ -import { NavigateContext, topLevelRoutes } from '@affine/core/router'; -import { assertExists } from '@blocksuite/global/utils'; -import type { StoryFn } from '@storybook/react'; -import { screen, userEvent, waitFor, within } from '@storybook/testing-library'; -import { Outlet, useLocation, useNavigate } from 'react-router-dom'; -import { - reactRouterOutlets, - reactRouterParameters, - withRouter, -} from 'storybook-addon-react-router-v6'; -import { mockDateDecorator } from 'storybook-mock-date-decorator'; - -const FakeApp = () => { - const location = useLocation(); - const navigate = useNavigate(); - // fixme: `key` is a hack to force the storybook to re-render the outlet - return ( - - - - ); -}; - -export default { - title: 'Preview/Core', - parameters: { - chromatic: { disableSnapshot: false }, - }, -}; - -export const Index: StoryFn = () => { - return ; -}; -Index.decorators = [withRouter]; -Index.parameters = { - reactRouter: reactRouterParameters({ - routing: reactRouterOutlets( - topLevelRoutes[0].children /* skip root wrapper */ - ), - }), -}; - -export const SettingPage: StoryFn = () => { - return ; -}; -SettingPage.play = async ({ canvasElement, step }) => { - const canvas = within(canvasElement); - await waitFor( - async () => { - assertExists( - document.body.querySelector( - '[data-testid="slider-bar-workspace-setting-button"]' - ) - ); - }, - { - timeout: 10000, - } - ); - await step('click setting modal button', async () => { - await userEvent.click( - canvas.getByTestId('slider-bar-workspace-setting-button') - ); - }); - await waitFor(async () => { - assertExists( - document.body.querySelector('[data-testid="language-menu-button"]') - ); - }); - - // Menu button may have "pointer-events: none" style, await 100ms to avoid this weird situation. - await new Promise(resolve => window.setTimeout(resolve, 100)); - - await step('click language menu button', async () => { - await userEvent.click( - document.body.querySelector( - '[data-testid="language-menu-button"]' - ) as HTMLElement - ); - }); -}; -SettingPage.decorators = [withRouter]; -SettingPage.parameters = { - reactRouter: reactRouterParameters({ - routing: reactRouterOutlets(topLevelRoutes), - }), -}; - -export const NotFoundPage: StoryFn = () => { - return ; -}; -NotFoundPage.decorators = [withRouter]; -NotFoundPage.parameters = { - reactRouter: reactRouterParameters({ - routing: reactRouterOutlets(topLevelRoutes), - location: { - path: '/404', - }, - }), -}; - -export const WorkspaceList: StoryFn = () => { - return ; -}; -WorkspaceList.play = async ({ canvasElement }) => { - const canvas = within(canvasElement); - // click current-workspace - const currentWorkspace = await waitFor( - () => { - assertExists(canvas.getByTestId('current-workspace')); - return canvas.getByTestId('current-workspace'); - }, - { - timeout: 5000, - } - ); - - // todo: figure out why userEvent cannot click this element? - // await userEvent.click(currentWorkspace); - currentWorkspace.click(); -}; -WorkspaceList.decorators = [withRouter]; -WorkspaceList.parameters = { - reactRouter: reactRouterParameters({ - routing: reactRouterOutlets(topLevelRoutes), - location: { - path: '/', - }, - }), -}; - -export const SearchPage: StoryFn = () => { - return ; -}; -SearchPage.play = async ({ canvasElement }) => { - const canvas = within(canvasElement); - await waitFor( - async () => { - assertExists( - document.body.querySelector( - '[data-testid="slider-bar-quick-search-button"]' - ) - ); - }, - { - timeout: 3000, - } - ); - await userEvent.click(canvas.getByTestId('slider-bar-quick-search-button')); - await waitFor( - () => { - assertExists(screen.getByTestId('cmdk-quick-search')); - }, - { - timeout: 3000, - } - ); -}; -SearchPage.decorators = [withRouter]; -SearchPage.parameters = { - reactRouter: reactRouterParameters({ - routing: reactRouterOutlets(topLevelRoutes), - location: { - path: '/', - }, - }), -}; - -export const ImportPage: StoryFn = () => { - return ; -}; -ImportPage.play = async ({ canvasElement }) => { - const canvas = within(canvasElement); - await waitFor( - async () => { - assertExists( - document.body.querySelector('[data-testid="sidebar-new-page-button"]') - ); - }, - { - timeout: 10000, - } - ); - await userEvent.click(canvas.getByTestId('sidebar-new-page-button')); - await waitFor(() => { - assertExists(canvasElement.querySelector('v-line')); - }); - await waitFor(() => { - assertExists( - canvasElement.querySelector('[data-testid="header-dropDownButton"]') - ); - }); - await userEvent.click(canvas.getByTestId('header-dropDownButton')); - await waitFor(() => { - assertExists( - document.body.querySelector('[data-testid="editor-option-menu-import"]') - ); - }); - await userEvent.click(screen.getByTestId('editor-option-menu-import')); -}; -ImportPage.decorators = [withRouter, mockDateDecorator]; -ImportPage.parameters = { - reactRouter: reactRouterParameters({ - routing: reactRouterOutlets(topLevelRoutes), - location: { - path: '/', - }, - }), - date: new Date('Mon, 25 Mar 2024 08:39:07 GMT'), -}; - -export const OpenAppPage: StoryFn = () => { - return ; -}; -OpenAppPage.decorators = [withRouter]; -OpenAppPage.parameters = { - reactRouter: reactRouterParameters({ - routing: reactRouterOutlets(topLevelRoutes), - location: { - path: '/open-app/url', - searchParams: { - url: 'affine-beta://foo-bar.com', - open: 'false', - }, - }, - }), -}; diff --git a/tests/storybook/src/stories/image-preview-modal.stories.tsx b/tests/storybook/src/stories/image-preview-modal.stories.tsx deleted file mode 100644 index 059ac12702..0000000000 --- a/tests/storybook/src/stories/image-preview-modal.stories.tsx +++ /dev/null @@ -1,96 +0,0 @@ -import { BlockSuiteEditor } from '@affine/core/components/blocksuite/block-suite-editor'; -import { ImagePreviewModal } from '@affine/core/components/image-preview'; -import type { Meta, StoryFn } from '@storybook/react'; -import type { Doc } from '@toeverything/infra'; -import { - DocsService, - FrameworkScope, - initEmptyPage, - useService, - WorkspaceService, -} from '@toeverything/infra'; -import { useEffect, useState } from 'react'; -import { createPortal } from 'react-dom'; -import { mockDateDecorator } from 'storybook-mock-date-decorator'; - -export default { - title: 'Component/ImagePreviewModal', - component: ImagePreviewModal, -} satisfies Meta; - -export const Default: StoryFn = () => { - const workspace = useService(WorkspaceService).workspace; - const docsService = useService(DocsService); - - const [doc, setDoc] = useState(null); - - useEffect(() => { - const bsDoc = workspace.docCollection.createDoc({ id: 'page0' }); - initEmptyPage(bsDoc); - - const { doc, release } = docsService.open(bsDoc.meta!.id); - - fetch(new URL('@affine-test/fixtures/large-image.png', import.meta.url)) - .then(res => res.arrayBuffer()) - .then(async buffer => { - const id = await workspace.docCollection.blob.set( - new Blob([buffer], { type: 'image/png' }) - ); - const frameId = bsDoc.getBlockByFlavour('affine:note')[0].id; - bsDoc.addBlock( - 'affine:paragraph', - { - text: new bsDoc.Text( - 'Please double click the image to preview it.' - ), - }, - frameId - ); - bsDoc.addBlock( - 'affine:image', - { - sourceId: id, - }, - frameId - ); - }) - .catch(err => { - console.error('Failed to load large-image.png', err); - }); - setDoc(doc); - - return () => { - release(); - }; - }, [docsService, workspace]); - - if (!doc) { - return
; - } - - return ( - -
- - {createPortal( - , - document.body - )} -
-
- ); -}; - -Default.decorators = [mockDateDecorator]; -Default.parameters = { - date: new Date('Mon, 25 Mar 2024 08:39:07 GMT'), -}; diff --git a/tests/storybook/src/stories/import-page.stories.tsx b/tests/storybook/src/stories/import-page.stories.tsx deleted file mode 100644 index 6202e9e711..0000000000 --- a/tests/storybook/src/stories/import-page.stories.tsx +++ /dev/null @@ -1,22 +0,0 @@ -/* deepscan-disable USELESS_ARROW_FUNC_BIND */ -import { toast } from '@affine/component'; -import { ImportPage } from '@affine/component/import-page'; -import type { Meta, StoryFn } from '@storybook/react'; - -export default { - title: 'AFFiNE/ImportPage', - component: ImportPage, - parameters: { - chromatic: { disableSnapshot: true }, - }, -} satisfies Meta; - -const Template: StoryFn = args => ; - -export const Basic = Template.bind(undefined); -Basic.args = { - importHtml: () => toast('Click importHtml'), - importMarkdown: () => toast('Click importMarkdown'), - importNotion: () => toast('Click importNotion'), - onClose: () => toast('Click onClose'), -}; diff --git a/tests/storybook/src/stories/input.stories.tsx b/tests/storybook/src/stories/input.stories.tsx deleted file mode 100644 index 27edf768a7..0000000000 --- a/tests/storybook/src/stories/input.stories.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { Input } from '@affine/component'; -import { expect } from '@storybook/jest'; -import type { Meta, StoryFn } from '@storybook/react'; -import { userEvent, within } from '@storybook/testing-library'; - -export default { - title: 'AFFiNE/Input', - component: Input, - parameters: { - chromatic: { disableSnapshot: true }, - }, -} satisfies Meta; - -export const Basic: StoryFn = () => { - return ; -}; - -Basic.play = async ({ canvasElement }) => { - const element = within(canvasElement); - const item = element.getByTestId('test-input') as HTMLInputElement; - expect(item).toBeTruthy(); - expect(item.value).toBe('test'); - await userEvent.clear(item); - await userEvent.type(item, 'test 2'); - expect(item.value).toBe('test 2'); -}; - -export const DynamicHeight: StoryFn = () => { - return ; -}; - -DynamicHeight.play = async ({ canvasElement }) => { - const element = within(canvasElement); - const item = element.getByTestId('test-input') as HTMLInputElement; - expect(item).toBeTruthy(); - // FIXME: the following is not correct - // expect(item.getBoundingClientRect().width).toBe(200); -}; - -export const NoBorder: StoryFn = () => { - return ; -}; diff --git a/tests/storybook/src/stories/introduction.stories.mdx b/tests/storybook/src/stories/introduction.stories.mdx deleted file mode 100644 index 3dba2ebe1c..0000000000 --- a/tests/storybook/src/stories/introduction.stories.mdx +++ /dev/null @@ -1,18 +0,0 @@ -import { Meta } from '@storybook/blocks'; - - - -# AFFiNE UI Storybook - -This is a UI component dev environment for AFFiNE UI. -It allows you to browse the AFFiNE UI components, -view the different states of each component, -and interactively develop and test components. - -## Bug Reporting - -If you find a bug, please file an issue on [GitHub](https://github.com/toeverything/AFFiNE/issues) - -## Contributing - -We welcome contributions from the community! [Get started here](https://github.com/toeverything/AFFiNE/blob/canary/docs/BUILDING.md) diff --git a/tests/storybook/src/stories/notification-center.stories.tsx b/tests/storybook/src/stories/notification-center.stories.tsx deleted file mode 100644 index 8547e9d5f3..0000000000 --- a/tests/storybook/src/stories/notification-center.stories.tsx +++ /dev/null @@ -1,249 +0,0 @@ -import { - expandNotificationCenterAtom, - NotificationCenter, - pushNotificationAtom, -} from '@affine/component/notification-center'; -import type { Meta } from '@storybook/react'; -import { useAtomValue, useSetAtom } from 'jotai'; - -export default { - title: 'AFFiNE/NotificationCenter', - component: NotificationCenter, - parameters: { - chromatic: { disableSnapshot: true }, - }, -} satisfies Meta; - -let id = 0; -const image = ( - -); -export const Basic = () => { - const push = useSetAtom(pushNotificationAtom); - const expand = useAtomValue(expandNotificationCenterAtom); - return ( - <> -
{expand ? 'expanded' : 'collapsed'}
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
- - - ); -}; diff --git a/tests/storybook/src/stories/onboarding.stories.tsx b/tests/storybook/src/stories/onboarding.stories.tsx deleted file mode 100644 index 4b75b6851f..0000000000 --- a/tests/storybook/src/stories/onboarding.stories.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import type { Input } from '@affine/component'; -import { Onboarding } from '@affine/core/components/affine/onboarding/onboarding'; -import type { Meta, StoryFn } from '@storybook/react'; - -export default { - title: 'Preview/Onboarding', - parameters: { - chromatic: { disableSnapshot: true }, - }, -} satisfies Meta; - -export const Preview: StoryFn = () => { - return ; -}; diff --git a/tests/storybook/src/stories/page-detail-skeleton.stories.tsx b/tests/storybook/src/stories/page-detail-skeleton.stories.tsx deleted file mode 100644 index dd9c3238b9..0000000000 --- a/tests/storybook/src/stories/page-detail-skeleton.stories.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { PageDetailSkeleton } from '@affine/component/page-detail-skeleton'; -import type { Meta } from '@storybook/react'; - -export default { - title: 'AFFiNE/PageDetailSkeleton', - component: PageDetailSkeleton, - parameters: { - chromatic: { disableSnapshot: true }, - }, -} satisfies Meta; - -export const Basic = () => { - return ; -}; diff --git a/tests/storybook/src/stories/page-info-properties.stories.tsx b/tests/storybook/src/stories/page-info-properties.stories.tsx deleted file mode 100644 index 751a7adf08..0000000000 --- a/tests/storybook/src/stories/page-info-properties.stories.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import { PagePropertiesTable } from '@affine/core/components/affine/page-properties'; -import { AffineSchemas } from '@blocksuite/blocks/schemas'; -import { DocCollection, Schema } from '@blocksuite/store'; -import type { StoryFn } from '@storybook/react'; -import { initEmptyPage } from '@toeverything/infra'; - -const schema = new Schema(); -schema.register(AffineSchemas); - -async function createAndInitPage( - docCollection: DocCollection, - title: string, - preview: string -) { - const page = docCollection.createDoc(); - initEmptyPage(page, title); - page.getBlockByFlavour('affine:paragraph').at(0)?.text?.insert(preview, 0); - return page; -} - -export default { - title: 'AFFiNE/PageInfoProperties', -}; - -export const PageInfoProperties: StoryFn = ( - _, - { loaded } -) => { - return ( -
- -
- ); -}; - -PageInfoProperties.loaders = [ - async () => { - const docCollection = new DocCollection({ - id: 'test-workspace-id', - schema, - }); - docCollection.doc.emit('sync', [true, docCollection.doc]); - docCollection.meta.setProperties({ - tags: { - options: [], - }, - }); - - const page = await createAndInitPage( - docCollection, - 'This is page 1', - 'Hello World from page 1' - ); - - if (page.meta) { - page.meta.updatedDate = Date.now(); - } - - return { - page, - workspace: docCollection, - }; - }, -]; diff --git a/tests/storybook/src/stories/page-list.stories.tsx b/tests/storybook/src/stories/page-list.stories.tsx deleted file mode 100644 index 20f91b3e58..0000000000 --- a/tests/storybook/src/stories/page-list.stories.tsx +++ /dev/null @@ -1,349 +0,0 @@ -import { toast } from '@affine/component'; -import type { - ListItem, - ListProps, - PageListItemProps, - PageOperationCellProps, - PageTagsProps, -} from '@affine/core/components/page-list'; -import { - FloatingToolbar, - List, - ListScrollContainer, - NewPageButton, - PageListItem, - PageOperationCell, - PageTags, -} from '@affine/core/components/page-list'; -import { topLevelRoutes } from '@affine/core/router'; -import { AffineSchemas } from '@blocksuite/blocks/schemas'; -import { PageIcon, TagsIcon } from '@blocksuite/icons'; -import { DocCollection, Schema } from '@blocksuite/store'; -import { expect } from '@storybook/jest'; -import type { Meta, StoryFn } from '@storybook/react'; -import { userEvent } from '@storybook/testing-library'; -import { initEmptyPage } from '@toeverything/infra'; -import { useState } from 'react'; -import { - reactRouterOutlets, - reactRouterParameters, - withRouter, -} from 'storybook-addon-react-router-v6'; - -export default { - title: 'AFFiNE/PageList', - parameters: { - layout: 'fullscreen', - chromatic: { disableSnapshot: true }, - }, -} satisfies Meta; - -export const AffineOperationCell: StoryFn = ({ - ...props -}) => ; - -AffineOperationCell.args = { - page: { - id: '123', - title: 'Test Page Title', - tags: ['tag1', 'tag2'], - createDate: new Date('2021-01-01').getTime(), - }, -}; -AffineOperationCell.parameters = { - reactRouter: reactRouterParameters({ - routing: reactRouterOutlets(topLevelRoutes), - }), -}; -AffineOperationCell.play = async ({ canvasElement }) => { - { - const button = canvasElement.querySelector( - '[data-testid="page-list-operation-button"]' - ) as HTMLButtonElement; - expect(button).not.toBeNull(); - await userEvent.click(button); - } -}; - -export const AffineNewPageButton: StoryFn = ({ - ...props -}) => ; -AffineNewPageButton.args = { - createNewPage: () => toast('Create new page'), - createNewEdgeless: () => toast('Create new edgeless'), -}; - -AffineNewPageButton.play = async ({ canvasElement }) => { - const button = canvasElement.querySelector('button') as HTMLButtonElement; - expect(button).not.toBeNull(); - const dropdown = button.querySelector('svg') as SVGSVGElement; - expect(dropdown).not.toBeNull(); - await userEvent.click(dropdown); -}; - -const testTags = [ - { - color: 'red', - id: 'test-tag-id-cccc', - value: 'cccccccccccccccc', - }, - { - color: 'red', - id: 'test-tag-id-a', - value: 'a', - }, - { - color: 'red', - id: 'test-tag-id-b', - value: 'b', - }, - { - color: 'red', - id: 'test-tag-id-c', - value: 'c', - }, - { - color: 'red', - id: 'test-tag-id-d', - value: 'd', - }, - { - color: 'red', - id: 'test-tag-id-0', - value: 'foo', - }, - { - color: 'pink', - id: 'test-tag-id-1', - value: 'bar', - }, - { - color: 'purple', - id: 'test-tag-id-2', - value: 'foobar', - }, - { - color: 'black', - id: 'test-tag-id-3', - value: 'affine', - }, - { - color: 'orange', - id: 'test-tag-id-4', - value: 'blocksuite', - }, - { - color: 'yellow', - id: 'test-tag-id-5', - value: 'toeverything', - }, - { - color: 'green', - id: 'test-tag-id-6', - value: 'toeverything', - }, - { - color: 'blue', - id: 'test-tag-id-7', - value: 'toeverything', - }, - { - color: 'indigo', - id: 'test-tag-id-8', - value: 'toeverything', - }, - { - color: 'teal', - id: 'test-tag-id-9', - value: 'toeverything', - }, - { - color: 'cyan', - id: 'test-tag-id-10', - value: 'toeverything', - }, - { - color: 'gray', - id: 'test-tag-id-11', - value: 'toeverything', - }, - { - color: 'red', - id: 'test-tag-id-12', - value: 'toeverything', - }, -]; - -export const PageListItemComponent: StoryFn = props => ( - -); - -PageListItemComponent.args = { - pageId: 'test-page-id', - title: 'Test Page Title', - preview: - 'this is page preview and it is very long and will be truncated because it is too long and it is very long and will be truncated because it is too long', - icon: , - to: '/hello', - selectable: true, - createDate: new Date('2021-01-01'), - updatedDate: new Date('2023-08-15'), - draggable: true, - tags: testTags, - selected: true, -}; - -PageListItemComponent.decorators = [withRouter]; - -export const ListItemTags: StoryFn = props => ( -
-
- -
-
-); - -ListItemTags.args = { - // FIXME: this is a hack to make the storybook work - // tags: testTags, - hoverExpandDirection: 'left', - widthOnHover: 600, - maxItems: 5, -}; - -export const PageListStory: StoryFn> = ( - props, - { loaded } -) => { - return ( - - - - ); -}; - -PageListStory.args = { - groupBy: [ - { - id: 'all', - label: count => `All Pages (${count})`, - match: () => true, - }, - ], -}; - -PageListStory.argTypes = { - selectable: { - control: 'radio', - options: [true, 'toggle', false], - }, - hideHeader: { - type: 'boolean', - }, -}; - -async function createAndInitPage( - docCollection: DocCollection, - title: string, - preview: string -) { - const doc = docCollection.createDoc(); - initEmptyPage(doc, title); - doc.getBlockByFlavour('affine:paragraph').at(0)?.text?.insert(preview, 0); - return doc; -} - -PageListStory.loaders = [ - async () => { - const schema = new Schema(); - schema.register(AffineSchemas); - const docCollection = new DocCollection({ - id: 'test-workspace-id', - schema, - }); - - docCollection.meta.setProperties({ - tags: { - options: structuredClone(testTags), - }, - }); - - const page1 = await createAndInitPage( - docCollection, - 'This is page 1', - 'Hello World from page 1' - ); - const page2 = await createAndInitPage( - docCollection, - 'This is page 2', - 'Hello World from page 2' - ); - const page3 = await createAndInitPage( - docCollection, - 'This is page 3', - 'Hello World from page 3Hello World from page 3Hello World from page 3Hello World from page 3Hello World from page 3' - ); - - await createAndInitPage( - docCollection, - 'This is page 4', - 'Hello World from page 3Hello World from page 3Hello World from page 3Hello World from page 3Hello World from page 3' - ); - - page1.meta!.createDate = new Date('2021-01-01').getTime(); - page2.meta!.createDate = page2.meta!.createDate - 3600 * 1000 * 24; - page3.meta!.createDate = page3.meta!.createDate - 3600 * 1000 * 24 * 7; - - docCollection.meta.docMetas[3].tags = testTags.slice(0, 3).map(t => t.id); - docCollection.meta.docMetas[2].tags = testTags.slice(0, 12).map(t => t.id); - - return { - blockSuiteWorkspace: docCollection, - pages: docCollection.meta.docs, - }; - }, -]; - -export const FloatingToolbarStory: StoryFn = props => { - const [open, setOpen] = useState(false); - return ( -
- - - 10 Selected - - } - label="Add Tags" - onClick={console.log} - /> - } - label="Add Tags" - onClick={console.log} - /> - -
- ); -}; diff --git a/tests/storybook/src/stories/quick-search/quick-search-main.stories.tsx b/tests/storybook/src/stories/quick-search/quick-search-main.stories.tsx deleted file mode 100644 index b953e1c5f7..0000000000 --- a/tests/storybook/src/stories/quick-search/quick-search-main.stories.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import { - registerAffineCreationCommands, - registerAffineLayoutCommands, - registerAffineSettingsCommands, -} from '@affine/core/commands'; -import { CMDKQuickSearchModal } from '@affine/core/components/pure/cmdk'; -import { HighlightLabel } from '@affine/core/components/pure/cmdk/highlight'; -import { useAFFiNEI18N } from '@affine/i18n/hooks'; -import type { Doc } from '@blocksuite/store'; -import type { Meta, StoryFn } from '@storybook/react'; -import { useStore } from 'jotai'; -import { useEffect, useState } from 'react'; -import { withRouter } from 'storybook-addon-react-router-v6'; - -export default { - title: 'AFFiNE/QuickSearch', - parameters: { - chromatic: { disableSnapshot: true }, - }, -} satisfies Meta; - -const createMockedPage = () => { - return { - id: 'test-page', - waitForLoaded: () => Promise.resolve(), - } as any as Doc; -}; - -function useRegisterCommands() { - const t = useAFFiNEI18N(); - const store = useStore(); - useEffect(() => { - const unsubs = [ - registerAffineSettingsCommands({ - t, - store, - theme: { - setTheme: () => {}, - theme: 'auto', - themes: ['auto', 'dark', 'light'], - }, - languageHelper: { - onLanguageChange: () => {}, - languagesList: [ - { - tag: 'en', - name: 'English', - originalName: 'English', - Completeness: 1, - }, - { - tag: 'zh-Hans', - name: 'Simplified Chinese', - originalName: '简体中文', - Completeness: 1, - }, - ], - currentLanguage: undefined, - }, - editor: null, - }), - registerAffineCreationCommands({ - t, - store, - pageHelper: { - createEdgeless: createMockedPage, - createPage: createMockedPage, - importFile: () => Promise.resolve(), - isPreferredEdgeless: () => false, - createLinkedPage: createMockedPage, - }, - }), - registerAffineLayoutCommands({ - t, - store, - }), - ]; - - return () => { - unsubs.forEach(unsub => unsub()); - }; - }, [store, t]); -} - -export const CMDKStoryWithCommands: StoryFn = () => { - useRegisterCommands(); - - return ; -}; - -CMDKStoryWithCommands.decorators = [withRouter]; - -export const HighlightStory: StoryFn = () => { - const [query, setQuery] = useState(''); - const label = { - title: 'title', - }; - return ( - <> - setQuery(e.target.value)} /> - - - ); -}; diff --git a/tests/storybook/src/stories/quick-search/quick-search-modal.stories.tsx b/tests/storybook/src/stories/quick-search/quick-search-modal.stories.tsx deleted file mode 100644 index ec6b2257c4..0000000000 --- a/tests/storybook/src/stories/quick-search/quick-search-modal.stories.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { Button } from '@affine/component/ui/button'; -import { CMDKContainer, CMDKModal } from '@affine/core/components/pure/cmdk'; -import { useCMDKCommandGroups } from '@affine/core/components/pure/cmdk/data-hooks'; -import type { Meta, StoryFn } from '@storybook/react'; -import { useState } from 'react'; - -export default { - title: 'AFFiNE/QuickSearch', - parameters: { - chromatic: { disableSnapshot: true }, - }, -} satisfies Meta; - -export const CMDKModalStory: StoryFn = () => { - const [open, setOpen] = useState(false); - const [counter, setCounter] = useState(0); - return ( - <> - - - - - - ); -}; - -export const CMDKPanelStory: StoryFn = () => { - const [query, setQuery] = useState(''); - const groups = useCMDKCommandGroups(); - return ( - - - - ); -}; diff --git a/tests/storybook/src/stories/share-menu.stories.tsx b/tests/storybook/src/stories/share-menu.stories.tsx deleted file mode 100644 index 0f1d52dcad..0000000000 --- a/tests/storybook/src/stories/share-menu.stories.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import { toast } from '@affine/component'; -import { PublicLinkDisableModal } from '@affine/component/disable-public-link'; -import { ShareMenu } from '@affine/core/components/affine/share-page-modal/share-menu'; -import { WorkspaceFlavour } from '@affine/env/workspace'; -import type { Doc } from '@blocksuite/store'; -import { expect } from '@storybook/jest'; -import type { Meta, StoryFn } from '@storybook/react'; -import { - initEmptyPage, - useService, - WorkspaceService, -} from '@toeverything/infra'; -import { nanoid } from 'nanoid'; -import { useEffect, useState } from 'react'; - -export default { - title: 'AFFiNE/ShareMenu', - component: ShareMenu, - parameters: { - chromatic: { disableSnapshot: true }, - }, -} satisfies Meta; - -async function unimplemented() { - toast('work in progress'); -} - -export const Basic: StoryFn = () => { - const workspace = useService(WorkspaceService).workspace; - - const [page, setPage] = useState(null); - - useEffect(() => { - const page = workspace.docCollection.createDoc({ id: nanoid() }); - initEmptyPage(page); - - setPage(page); - }, [workspace]); - - if (!page) { - return
; - } - - return ( - - ); -}; - -Basic.play = async ({ canvasElement }) => { - { - const button = canvasElement.querySelector( - '[data-testid="share-menu-button"]' - ) as HTMLButtonElement; - expect(button).not.toBeNull(); - button.click(); - } - await new Promise(resolve => window.setTimeout(resolve, 100)); - { - const button = canvasElement.querySelector( - '[data-testid="share-menu-enable-affine-cloud-button"]' - ); - expect(button).not.toBeNull(); - } -}; - -export const AffineBasic: StoryFn = () => { - const workspace = useService(WorkspaceService).workspace; - - const [page, setPage] = useState(null); - - useEffect(() => { - const page = workspace.docCollection.createDoc({ id: nanoid() }); - initEmptyPage(page); - - setPage(page); - }, [workspace]); - - if (!page) { - return
; - } - - return ( - - ); -}; - -export const DisableModal: StoryFn = () => { - const [open, setOpen] = useState(false); - return ( - <> -
setOpen(!open)}>Disable Public Link
- { - toast('Disabled'); - setOpen(false); - }} - onOpenChange={setOpen} - /> - - ); -}; diff --git a/tests/storybook/src/stories/switch.stories.tsx b/tests/storybook/src/stories/switch.stories.tsx deleted file mode 100644 index ebad9bb6aa..0000000000 --- a/tests/storybook/src/stories/switch.stories.tsx +++ /dev/null @@ -1,15 +0,0 @@ -/* deepscan-disable USELESS_ARROW_FUNC_BIND */ -import { Switch } from '@affine/component'; -import type { Meta, StoryFn } from '@storybook/react'; - -export default { - title: 'AFFiNE/Switch', - component: Switch, - parameters: { - chromatic: { disableSnapshot: true }, - }, -} satisfies Meta; - -export const Basic: StoryFn = () => { - return Switch; -}; diff --git a/tests/storybook/src/stories/workspace-list.stories.tsx b/tests/storybook/src/stories/workspace-list.stories.tsx deleted file mode 100644 index b234e0a298..0000000000 --- a/tests/storybook/src/stories/workspace-list.stories.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import type { WorkspaceListProps } from '@affine/component/workspace-list'; -import { WorkspaceList } from '@affine/component/workspace-list'; -import type { Meta } from '@storybook/react'; -import { - useLiveData, - useService, - WorkspacesService, -} from '@toeverything/infra'; - -export default { - title: 'AFFiNE/WorkspaceList', - component: WorkspaceList, - parameters: { - chromatic: { disableSnapshot: true }, - }, -} satisfies Meta; - -export const Default = () => { - const list = useLiveData(useService(WorkspacesService).list.workspaces$); - return ( - {}} - onSettingClick={() => {}} - onDragEnd={_ => {}} - useWorkspaceAvatar={() => undefined} - useWorkspaceName={() => undefined} - useIsWorkspaceOwner={() => false} - /> - ); -}; diff --git a/tests/storybook/tsconfig.json b/tests/storybook/tsconfig.json deleted file mode 100644 index e6760b1f9d..0000000000 --- a/tests/storybook/tsconfig.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "include": ["./src/**/*", "./.storybook/**/*"], - "compilerOptions": { - // Workaround for storybook build - "baseUrl": "../..", - "composite": true, - "noEmit": false, - "outDir": "lib" - }, - "references": [ - { - "path": "../../packages/frontend/core" - }, - { - "path": "../../packages/frontend/component" - }, - { - "path": "../../tools/cli" - }, - { - "path": "../../packages/common/env" - }, - { - "path": "../../packages/common/infra" - }, - { - "path": "./tsconfig.node.json" - } - ] -} diff --git a/tests/storybook/tsconfig.node.json b/tests/storybook/tsconfig.node.json deleted file mode 100644 index 83cd6a693a..0000000000 --- a/tests/storybook/tsconfig.node.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "composite": true, - "module": "ESNext", - "jsx": "react-jsx", - "moduleResolution": "bundler", - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "noEmit": false, - "outDir": "lib/.storybook" - }, - "include": [".storybook"], - "exclude": ["lib"], - "references": [ - { "path": "../../packages/frontend/core" }, - { "path": "../../packages/frontend/i18n" }, - { - "path": "../../packages/common/env" - }, - { - "path": "../../packages/frontend/core/tsconfig.node.json" - } - ] -} diff --git a/tsconfig.json b/tsconfig.json index c463099672..07d47f5bcf 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -126,9 +126,6 @@ { "path": "./tests/kit" }, - { - "path": "./tests/storybook" - }, { "path": "./tests/affine-local" }, diff --git a/yarn.lock b/yarn.lock index a42183134c..f496a7b6dd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -764,61 +764,6 @@ __metadata: languageName: unknown linkType: soft -"@affine/storybook@workspace:tests/storybook": - version: 0.0.0-use.local - resolution: "@affine/storybook@workspace:tests/storybook" - dependencies: - "@affine/cli": "workspace:*" - "@affine/component": "workspace:*" - "@affine/i18n": "workspace:*" - "@blocksuite/block-std": "npm:0.14.0-canary-202404151235-655ec84" - "@blocksuite/blocks": "npm:0.14.0-canary-202404151235-655ec84" - "@blocksuite/global": "npm:0.14.0-canary-202404151235-655ec84" - "@blocksuite/icons": "npm:2.1.46" - "@blocksuite/inline": "npm:0.14.0-canary-202404151235-655ec84" - "@blocksuite/presets": "npm:0.14.0-canary-202404151235-655ec84" - "@blocksuite/store": "npm:0.14.0-canary-202404151235-655ec84" - "@dnd-kit/sortable": "npm:^8.0.0" - "@storybook/addon-actions": "npm:^7.6.17" - "@storybook/addon-essentials": "npm:^7.6.17" - "@storybook/addon-interactions": "npm:^7.6.17" - "@storybook/addon-links": "npm:^7.6.17" - "@storybook/addon-storysource": "npm:^7.6.17" - "@storybook/blocks": "npm:^7.6.17" - "@storybook/builder-vite": "npm:^7.6.17" - "@storybook/jest": "npm:^0.2.3" - "@storybook/react": "npm:^7.6.17" - "@storybook/react-vite": "npm:^7.6.17" - "@storybook/test-runner": "npm:^0.17.0" - "@storybook/testing-library": "npm:^0.2.2" - "@vanilla-extract/esbuild-plugin": "npm:^2.3.5" - "@vitejs/plugin-react": "npm:^4.2.1" - chromatic: "npm:^11.3.0" - concurrently: "npm:^8.2.2" - foxact: "npm:^0.2.33" - jest-mock: "npm:^29.7.0" - jotai: "npm:^2.8.0" - lodash-es: "npm:^4.17.21" - nanoid: "npm:^5.0.7" - react: "npm:18.2.0" - react-dom: "npm:18.2.0" - react-router-dom: "npm:^6.22.3" - serve: "npm:^14.2.1" - ses: "npm:^1.4.1" - storybook: "npm:^7.6.17" - storybook-addon-react-router-v6: "npm:^2.0.15" - storybook-dark-mode: "npm:^3.0.3" - storybook-mock-date-decorator: "npm:^1.0.2" - wait-on: "npm:^7.2.0" - peerDependencies: - "@blocksuite/blocks": "*" - "@blocksuite/global": "*" - "@blocksuite/icons": 2.1.34 - "@blocksuite/presets": "*" - "@blocksuite/store": "*" - languageName: unknown - linkType: soft - "@affine/templates@workspace:*, @affine/templates@workspace:packages/frontend/templates": version: 0.0.0-use.local resolution: "@affine/templates@workspace:packages/frontend/templates" @@ -2245,7 +2190,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.14.0, @babel/core@npm:^7.18.5, @babel/core@npm:^7.18.9, @babel/core@npm:^7.20.12, @babel/core@npm:^7.22.5, @babel/core@npm:^7.22.9, @babel/core@npm:^7.23.0, @babel/core@npm:^7.23.2, @babel/core@npm:^7.23.5, @babel/core@npm:^7.23.9, @babel/core@npm:^7.7.5": +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.14.0, @babel/core@npm:^7.18.5, @babel/core@npm:^7.18.9, @babel/core@npm:^7.20.12, @babel/core@npm:^7.22.5, @babel/core@npm:^7.22.9, @babel/core@npm:^7.23.0, @babel/core@npm:^7.23.2, @babel/core@npm:^7.23.9, @babel/core@npm:^7.7.5": version: 7.24.3 resolution: "@babel/core@npm:7.24.3" dependencies: @@ -3368,7 +3313,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-self@npm:^7.18.6, @babel/plugin-transform-react-jsx-self@npm:^7.23.3": +"@babel/plugin-transform-react-jsx-self@npm:^7.18.6": version: 7.23.3 resolution: "@babel/plugin-transform-react-jsx-self@npm:7.23.3" dependencies: @@ -3379,7 +3324,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-source@npm:^7.19.6, @babel/plugin-transform-react-jsx-source@npm:^7.23.3": +"@babel/plugin-transform-react-jsx-source@npm:^7.19.6": version: 7.23.3 resolution: "@babel/plugin-transform-react-jsx-source@npm:7.23.3" dependencies: @@ -3714,7 +3659,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.16.7, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.22.6, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.16.7, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.22.6, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2": version: 7.23.9 resolution: "@babel/runtime@npm:7.23.9" dependencies: @@ -14437,7 +14382,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.18.0, @types/babel__core@npm:^7.20.5": +"@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.18.0": version: 7.20.5 resolution: "@types/babel__core@npm:7.20.5" dependencies: @@ -15747,20 +15692,6 @@ __metadata: languageName: node linkType: hard -"@vanilla-extract/esbuild-plugin@npm:^2.3.5": - version: 2.3.5 - resolution: "@vanilla-extract/esbuild-plugin@npm:2.3.5" - dependencies: - "@vanilla-extract/integration": "npm:^7.0.0" - peerDependencies: - esbuild: ">=0.17.6" - peerDependenciesMeta: - esbuild: - optional: true - checksum: 10/5ef46dc86a3121a2f1bfa6758511cc16a1dda434d6faa0d4cae278bcd83c9d1f577abc476dfa75442ffcadd477af30d58ce1f3582ddf4ba2198eecff828cada6 - languageName: node - linkType: hard - "@vanilla-extract/integration@npm:^7.0.0, @vanilla-extract/integration@npm:^7.1.2": version: 7.1.2 resolution: "@vanilla-extract/integration@npm:7.1.2" @@ -15862,21 +15793,6 @@ __metadata: languageName: node linkType: hard -"@vitejs/plugin-react@npm:^4.2.1": - version: 4.2.1 - resolution: "@vitejs/plugin-react@npm:4.2.1" - dependencies: - "@babel/core": "npm:^7.23.5" - "@babel/plugin-transform-react-jsx-self": "npm:^7.23.3" - "@babel/plugin-transform-react-jsx-source": "npm:^7.23.3" - "@types/babel__core": "npm:^7.20.5" - react-refresh: "npm:^0.14.0" - peerDependencies: - vite: ^4.2.0 || ^5.0.0 - checksum: 10/d7fa6dacd3c246bcee482ff4b7037b2978b6ca002b79780ad4921e91ae4bc85ab234cfb94f8d4d825fed8488a0acdda2ff02b47c27b3055187c0727b18fc725e - languageName: node - linkType: hard - "@vitest/coverage-istanbul@npm:1.4.0": version: 1.4.0 resolution: "@vitest/coverage-istanbul@npm:1.4.0" @@ -18446,25 +18362,6 @@ __metadata: languageName: node linkType: hard -"chromatic@npm:^11.3.0": - version: 11.3.0 - resolution: "chromatic@npm:11.3.0" - peerDependencies: - "@chromatic-com/cypress": ^0.*.* || ^1.0.0 - "@chromatic-com/playwright": ^0.*.* || ^1.0.0 - peerDependenciesMeta: - "@chromatic-com/cypress": - optional: true - "@chromatic-com/playwright": - optional: true - bin: - chroma: dist/bin.js - chromatic: dist/bin.js - chromatic-cli: dist/bin.js - checksum: 10/fd8d0678c93bebe45cf087496a8b4c44967d06003bc26f18d7b5ce25db00962efd7fbb700f098f3196f1d65b037050ca785da0e07bfc1766ed81b2f9bbbad23f - languageName: node - linkType: hard - "chrome-trace-event@npm:^1.0.2, chrome-trace-event@npm:^1.0.3": version: 1.0.3 resolution: "chrome-trace-event@npm:1.0.3" @@ -19023,13 +18920,6 @@ __metadata: languageName: node linkType: hard -"compare-versions@npm:^6.0.0": - version: 6.1.0 - resolution: "compare-versions@npm:6.1.0" - checksum: 10/20f349e7f8ad784704c68265f4e660e2abbe2c3d5c75793184fccb85f0c5c0263260e01fdd4488376f6b74b0f069e16c9684463f7316b075716fb1581eb36b77 - languageName: node - linkType: hard - "component-emitter@npm:^1.3.0": version: 1.3.1 resolution: "component-emitter@npm:1.3.1" @@ -19103,26 +18993,6 @@ __metadata: languageName: node linkType: hard -"concurrently@npm:^8.2.2": - version: 8.2.2 - resolution: "concurrently@npm:8.2.2" - dependencies: - chalk: "npm:^4.1.2" - date-fns: "npm:^2.30.0" - lodash: "npm:^4.17.21" - rxjs: "npm:^7.8.1" - shell-quote: "npm:^1.8.1" - spawn-command: "npm:0.0.2" - supports-color: "npm:^8.1.1" - tree-kill: "npm:^1.2.2" - yargs: "npm:^17.7.2" - bin: - conc: dist/bin/concurrently.js - concurrently: dist/bin/concurrently.js - checksum: 10/dcb1aa69d9c611a7bda9d4fc0fe1e388f971d1744acec7e0d52dffa2ef55743f1266ec9292f414c5789b9f61734b3fce772bd005d4de9564a949fb121b97bae1 - languageName: node - linkType: hard - "config-file-ts@npm:^0.2.4": version: 0.2.6 resolution: "config-file-ts@npm:0.2.6" @@ -19842,15 +19712,6 @@ __metadata: languageName: node linkType: hard -"date-fns@npm:^2.30.0": - version: 2.30.0 - resolution: "date-fns@npm:2.30.0" - dependencies: - "@babel/runtime": "npm:^7.21.0" - checksum: 10/70b3e8ea7aaaaeaa2cd80bd889622a4bcb5d8028b4de9162cbcda359db06e16ff6e9309e54eead5341e71031818497f19aaf9839c87d1aba1e27bb4796e758a9 - languageName: node - linkType: hard - "date-fns@npm:^3.6.0": version: 3.6.0 resolution: "date-fns@npm:3.6.0" @@ -29012,13 +28873,6 @@ __metadata: languageName: node linkType: hard -"mockdate@npm:^3.0.5": - version: 3.0.5 - resolution: "mockdate@npm:3.0.5" - checksum: 10/ff74f43f56a12e1339e838aee623e37b6e4c378173905697f2a006a5c581eea9c71da54fcea76c27e7e744422e49395c668932bf09e67f024841240ffef91fd2 - languageName: node - linkType: hard - "modern-ahocorasick@npm:^1.0.0": version: 1.0.1 resolution: "modern-ahocorasick@npm:1.0.1" @@ -31864,15 +31718,6 @@ __metadata: languageName: node linkType: hard -"react-inspector@npm:6.0.2": - version: 6.0.2 - resolution: "react-inspector@npm:6.0.2" - peerDependencies: - react: ^16.8.4 || ^17.0.0 || ^18.0.0 - checksum: 10/5d23ad0f6f920458abd4c01af1b3cbdbe8846c254762fd6cfff4df119c54e08dd98ce8e91acacafb8173c19f07de2066df5b8e6cb19425751c1929a2620cbe77 - languageName: node - linkType: hard - "react-is@npm:18.1.0": version: 18.1.0 resolution: "react-is@npm:18.1.0" @@ -33873,13 +33718,6 @@ __metadata: languageName: node linkType: hard -"spawn-command@npm:0.0.2": - version: 0.0.2 - resolution: "spawn-command@npm:0.0.2" - checksum: 10/f13e8c3c63abd4a0b52fb567eba5f7940d480c5ed3ec61781d38a1850f179b1196c39e6efa2bbd301f82c1bf1cd7807abc8fbd8fc8e44bcaa3975a124c0d1657 - languageName: node - linkType: hard - "spawn-wrap@npm:^2.0.0": version: 2.0.0 resolution: "spawn-wrap@npm:2.0.0" @@ -34134,32 +33972,6 @@ __metadata: languageName: node linkType: hard -"storybook-addon-react-router-v6@npm:^2.0.15": - version: 2.0.15 - resolution: "storybook-addon-react-router-v6@npm:2.0.15" - dependencies: - compare-versions: "npm:^6.0.0" - react-inspector: "npm:6.0.2" - peerDependencies: - "@storybook/blocks": ^7.0.0 - "@storybook/channels": ^7.0.0 - "@storybook/components": ^7.0.0 - "@storybook/core-events": ^7.0.0 - "@storybook/manager-api": ^7.0.0 - "@storybook/preview-api": ^7.0.0 - "@storybook/theming": ^7.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-router-dom: ^6.4.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - checksum: 10/a6fbebd0f9b44b2866920c61d40e591adf6dc1fcd058814f349a78cded41c239e8f08448edec747b660476d55c44623caadef2b2de90321279debe60bafba4b9 - languageName: node - linkType: hard - "storybook-dark-mode@npm:^3.0.3": version: 3.0.3 resolution: "storybook-dark-mode@npm:3.0.3" @@ -34184,17 +33996,6 @@ __metadata: languageName: node linkType: hard -"storybook-mock-date-decorator@npm:^1.0.2": - version: 1.0.2 - resolution: "storybook-mock-date-decorator@npm:1.0.2" - dependencies: - mockdate: "npm:^3.0.5" - peerDependencies: - "@storybook/addons": ">=6" - checksum: 10/c8e8b6966b58bd830c4837e6940328b9d32776c216bfcbc9f55bb38c5c192ab511670ff77505577737589bf83a7ad98538da1e62a2aa9c628e42e5998f2f6147 - languageName: node - linkType: hard - "storybook@npm:^7.6.17": version: 7.6.17 resolution: "storybook@npm:7.6.17" @@ -34650,7 +34451,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^8.0.0, supports-color@npm:^8.1.1, supports-color@npm:~8.1.1": +"supports-color@npm:^8.0.0, supports-color@npm:~8.1.1": version: 8.1.1 resolution: "supports-color@npm:8.1.1" dependencies: @@ -36735,7 +36536,7 @@ __metadata: languageName: node linkType: hard -"wait-on@npm:^7.0.0, wait-on@npm:^7.2.0": +"wait-on@npm:^7.0.0": version: 7.2.0 resolution: "wait-on@npm:7.2.0" dependencies: