diff --git a/.eslintrc.js b/.eslintrc.js
index 1b313b14f6..63b0a7288f 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -95,7 +95,7 @@ const config = {
'@typescript-eslint',
'simple-import-sort',
'sonarjs',
- 'i',
+ 'import-x',
'unused-imports',
'unicorn',
'rxjs',
@@ -131,6 +131,7 @@ const config = {
'unused-imports/no-unused-imports': 'error',
'simple-import-sort/imports': 'error',
'simple-import-sort/exports': 'error',
+ 'import-x/no-duplicates': 'error',
'@typescript-eslint/ban-ts-comment': [
'error',
{
@@ -253,7 +254,7 @@ const config = {
],
'@typescript-eslint/no-misused-promises': ['error'],
'@typescript-eslint/prefer-readonly': 'error',
- 'i/no-extraneous-dependencies': ['error'],
+ 'import-x/no-extraneous-dependencies': ['error'],
'react-hooks/exhaustive-deps': [
'warn',
{
diff --git a/package.json b/package.json
index f8ff5950fc..b131fa1645 100644
--- a/package.json
+++ b/package.json
@@ -79,7 +79,7 @@
"electron": "^29.0.1",
"eslint": "^8.56.0",
"eslint-config-prettier": "^9.1.0",
- "eslint-plugin-i": "^2.29.1",
+ "eslint-plugin-import-x": "^0.4.1",
"eslint-plugin-react": "^7.33.2",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-rxjs": "^5.0.3",
diff --git a/packages/backend/server/src/app.module.ts b/packages/backend/server/src/app.module.ts
index 3e03605c18..2af316e0ca 100644
--- a/packages/backend/server/src/app.module.ts
+++ b/packages/backend/server/src/app.module.ts
@@ -18,11 +18,8 @@ import { UserModule } from './core/user';
import { WorkspaceModule } from './core/workspaces';
import { getOptionalModuleMetadata } from './fundamentals';
import { CacheInterceptor, CacheModule } from './fundamentals/cache';
-import {
- type AvailablePlugins,
- Config,
- ConfigModule,
-} from './fundamentals/config';
+import type { AvailablePlugins } from './fundamentals/config';
+import { Config, ConfigModule } from './fundamentals/config';
import { EventModule } from './fundamentals/event';
import { GqlModule } from './fundamentals/graphql';
import { HelpersModule } from './fundamentals/helpers';
diff --git a/packages/backend/server/src/core/auth/service.ts b/packages/backend/server/src/core/auth/service.ts
index 2159550864..75246f4e77 100644
--- a/packages/backend/server/src/core/auth/service.ts
+++ b/packages/backend/server/src/core/auth/service.ts
@@ -5,7 +5,8 @@ import {
NotFoundException,
OnApplicationBootstrap,
} from '@nestjs/common';
-import { PrismaClient, type User } from '@prisma/client';
+import type { User } from '@prisma/client';
+import { PrismaClient } from '@prisma/client';
import type { CookieOptions, Request, Response } from 'express';
import { assign, omit } from 'lodash-es';
diff --git a/packages/backend/server/src/core/doc/history.ts b/packages/backend/server/src/core/doc/history.ts
index 5a65c3bea5..c0b64d7857 100644
--- a/packages/backend/server/src/core/doc/history.ts
+++ b/packages/backend/server/src/core/doc/history.ts
@@ -4,12 +4,8 @@ import { Injectable, Logger } from '@nestjs/common';
import { Cron, CronExpression } from '@nestjs/schedule';
import { PrismaClient } from '@prisma/client';
-import {
- Config,
- type EventPayload,
- metrics,
- OnEvent,
-} from '../../fundamentals';
+import type { EventPayload } from '../../fundamentals';
+import { Config, metrics, OnEvent } from '../../fundamentals';
import { QuotaService } from '../quota';
import { Permission } from '../workspaces/types';
import { isEmptyBuffer } from './manager';
diff --git a/packages/backend/server/src/core/doc/manager.ts b/packages/backend/server/src/core/doc/manager.ts
index cce9c9cdb9..59691a75ee 100644
--- a/packages/backend/server/src/core/doc/manager.ts
+++ b/packages/backend/server/src/core/doc/manager.ts
@@ -16,12 +16,12 @@ import {
transact,
} from 'yjs';
+import type { EventPayload } from '../../fundamentals';
import {
Cache,
CallTimer,
Config,
EventEmitter,
- type EventPayload,
mergeUpdatesInApplyWay as jwstMergeUpdates,
metrics,
OnEvent,
diff --git a/packages/backend/server/src/core/quota/service.ts b/packages/backend/server/src/core/quota/service.ts
index fcff2d7da4..d25aa1ae50 100644
--- a/packages/backend/server/src/core/quota/service.ts
+++ b/packages/backend/server/src/core/quota/service.ts
@@ -1,11 +1,8 @@
import { Injectable } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
-import {
- type EventPayload,
- OnEvent,
- PrismaTransaction,
-} from '../../fundamentals';
+import type { EventPayload } from '../../fundamentals';
+import { OnEvent, PrismaTransaction } from '../../fundamentals';
import { FeatureKind } from '../features';
import { QuotaConfig } from './quota';
import { QuotaType } from './types';
diff --git a/packages/backend/server/src/core/user/resolver.ts b/packages/backend/server/src/core/user/resolver.ts
index d877a154dd..347e6ab366 100644
--- a/packages/backend/server/src/core/user/resolver.ts
+++ b/packages/backend/server/src/core/user/resolver.ts
@@ -7,14 +7,15 @@ import {
ResolveField,
Resolver,
} from '@nestjs/graphql';
-import { PrismaClient, type User } from '@prisma/client';
+import type { User } from '@prisma/client';
+import { PrismaClient } from '@prisma/client';
import GraphQLUpload from 'graphql-upload/GraphQLUpload.mjs';
import { isNil, omitBy } from 'lodash-es';
+import type { FileUpload } from '../../fundamentals';
import {
CloudThrottlerGuard,
EventEmitter,
- type FileUpload,
PaymentRequiredException,
Throttle,
} from '../../fundamentals';
diff --git a/packages/backend/server/src/core/workspaces/permission.ts b/packages/backend/server/src/core/workspaces/permission.ts
index 1c750c73f9..083a7e892e 100644
--- a/packages/backend/server/src/core/workspaces/permission.ts
+++ b/packages/backend/server/src/core/workspaces/permission.ts
@@ -1,5 +1,6 @@
import { ForbiddenException, Injectable } from '@nestjs/common';
-import { type Prisma, PrismaClient } from '@prisma/client';
+import type { Prisma } from '@prisma/client';
+import { PrismaClient } from '@prisma/client';
import { Permission } from './types';
diff --git a/packages/backend/server/src/core/workspaces/resolvers/blob.ts b/packages/backend/server/src/core/workspaces/resolvers/blob.ts
index 847ee1c909..a7e16347f0 100644
--- a/packages/backend/server/src/core/workspaces/resolvers/blob.ts
+++ b/packages/backend/server/src/core/workspaces/resolvers/blob.ts
@@ -16,9 +16,9 @@ import {
import { SafeIntResolver } from 'graphql-scalars';
import GraphQLUpload from 'graphql-upload/GraphQLUpload.mjs';
+import type { FileUpload } from '../../../fundamentals';
import {
CloudThrottlerGuard,
- type FileUpload,
MakeCache,
PreventCache,
} from '../../../fundamentals';
diff --git a/packages/backend/server/src/core/workspaces/resolvers/page.ts b/packages/backend/server/src/core/workspaces/resolvers/page.ts
index 773165d4fa..68c9504672 100644
--- a/packages/backend/server/src/core/workspaces/resolvers/page.ts
+++ b/packages/backend/server/src/core/workspaces/resolvers/page.ts
@@ -9,10 +9,8 @@ import {
ResolveField,
Resolver,
} from '@nestjs/graphql';
-import {
- PrismaClient,
- type WorkspacePage as PrismaWorkspacePage,
-} from '@prisma/client';
+import type { WorkspacePage as PrismaWorkspacePage } from '@prisma/client';
+import { PrismaClient } from '@prisma/client';
import { CloudThrottlerGuard } from '../../../fundamentals';
import { CurrentUser } from '../../auth';
diff --git a/packages/backend/server/src/core/workspaces/resolvers/workspace.ts b/packages/backend/server/src/core/workspaces/resolvers/workspace.ts
index fd3ca1ecd8..121812b8a9 100644
--- a/packages/backend/server/src/core/workspaces/resolvers/workspace.ts
+++ b/packages/backend/server/src/core/workspaces/resolvers/workspace.ts
@@ -20,10 +20,10 @@ import { getStreamAsBuffer } from 'get-stream';
import GraphQLUpload from 'graphql-upload/GraphQLUpload.mjs';
import { applyUpdate, Doc } from 'yjs';
+import type { FileUpload } from '../../../fundamentals';
import {
CloudThrottlerGuard,
EventEmitter,
- type FileUpload,
MailService,
MutexService,
Throttle,
diff --git a/packages/backend/server/src/data/migrations/1703756315970-unamed-account.ts b/packages/backend/server/src/data/migrations/1703756315970-unamed-account.ts
index 0524c5d8f2..59428ccd6e 100644
--- a/packages/backend/server/src/data/migrations/1703756315970-unamed-account.ts
+++ b/packages/backend/server/src/data/migrations/1703756315970-unamed-account.ts
@@ -1,4 +1,5 @@
-import { PrismaClient, type User } from '@prisma/client';
+import type { User } from '@prisma/client';
+import { PrismaClient } from '@prisma/client';
export class UnamedAccount1703756315970 {
// do the migration
diff --git a/packages/backend/server/src/fundamentals/config/default.ts b/packages/backend/server/src/fundamentals/config/default.ts
index c8253e8ee8..34a5a4f78a 100644
--- a/packages/backend/server/src/fundamentals/config/default.ts
+++ b/packages/backend/server/src/fundamentals/config/default.ts
@@ -5,13 +5,8 @@ import { createPrivateKey, createPublicKey } from 'node:crypto';
import { merge } from 'lodash-es';
import pkg from '../../../package.json' assert { type: 'json' };
-import {
- type AFFINE_ENV,
- AFFiNEConfig,
- DeploymentType,
- type NODE_ENV,
- type ServerFlavor,
-} from './def';
+import type { AFFINE_ENV, NODE_ENV, ServerFlavor } from './def';
+import { AFFiNEConfig, DeploymentType } from './def';
import { readEnv } from './env';
import { getDefaultAFFiNEStorageConfig } from './storage';
diff --git a/packages/backend/server/src/fundamentals/helpers/url.ts b/packages/backend/server/src/fundamentals/helpers/url.ts
index ee2a666a6c..ca0931685f 100644
--- a/packages/backend/server/src/fundamentals/helpers/url.ts
+++ b/packages/backend/server/src/fundamentals/helpers/url.ts
@@ -1,5 +1,5 @@
import { Injectable } from '@nestjs/common';
-import { type Response } from 'express';
+import type { Response } from 'express';
import { Config } from '../config';
diff --git a/packages/backend/server/src/fundamentals/mailer/mail.service.ts b/packages/backend/server/src/fundamentals/mailer/mail.service.ts
index 7bab15dc55..b7831e1a1b 100644
--- a/packages/backend/server/src/fundamentals/mailer/mail.service.ts
+++ b/packages/backend/server/src/fundamentals/mailer/mail.service.ts
@@ -2,7 +2,8 @@ import { Inject, Injectable, Optional } from '@nestjs/common';
import { Config } from '../config';
import { URLHelper } from '../helpers';
-import { MAILER_SERVICE, type MailerService, type Options } from './mailer';
+import type { MailerService, Options } from './mailer';
+import { MAILER_SERVICE } from './mailer';
import { emailTemplate } from './template';
@Injectable()
export class MailService {
diff --git a/packages/backend/server/src/fundamentals/metrics/opentelemetry.ts b/packages/backend/server/src/fundamentals/metrics/opentelemetry.ts
index 64bc9b1b94..94d1399f81 100644
--- a/packages/backend/server/src/fundamentals/metrics/opentelemetry.ts
+++ b/packages/backend/server/src/fundamentals/metrics/opentelemetry.ts
@@ -15,11 +15,8 @@ import { IORedisInstrumentation } from '@opentelemetry/instrumentation-ioredis';
import { NestInstrumentation } from '@opentelemetry/instrumentation-nestjs-core';
import { SocketIoInstrumentation } from '@opentelemetry/instrumentation-socket.io';
import { Resource } from '@opentelemetry/resources';
-import {
- type MeterProvider,
- MetricProducer,
- MetricReader,
-} from '@opentelemetry/sdk-metrics';
+import type { MeterProvider } from '@opentelemetry/sdk-metrics';
+import { MetricProducer, MetricReader } from '@opentelemetry/sdk-metrics';
import { NodeSDK } from '@opentelemetry/sdk-node';
import {
BatchSpanProcessor,
diff --git a/packages/backend/server/src/fundamentals/throttler/index.ts b/packages/backend/server/src/fundamentals/throttler/index.ts
index 7462c5ec9a..f43e588229 100644
--- a/packages/backend/server/src/fundamentals/throttler/index.ts
+++ b/packages/backend/server/src/fundamentals/throttler/index.ts
@@ -1,5 +1,4 @@
-import { ExecutionContext, Injectable } from '@nestjs/common';
-import { Global, Module } from '@nestjs/common';
+import { ExecutionContext, Global, Injectable, Module } from '@nestjs/common';
import {
Throttle,
ThrottlerGuard,
diff --git a/packages/backend/server/src/plugins/payment/types.ts b/packages/backend/server/src/plugins/payment/types.ts
index d42c87778e..4b11a12ba9 100644
--- a/packages/backend/server/src/plugins/payment/types.ts
+++ b/packages/backend/server/src/plugins/payment/types.ts
@@ -1,5 +1,5 @@
-import { type User } from '@prisma/client';
-import { type Stripe } from 'stripe';
+import type { User } from '@prisma/client';
+import type { Stripe } from 'stripe';
import type { Payload } from '../../fundamentals/event/def';
diff --git a/packages/backend/server/src/plugins/redis/index.ts b/packages/backend/server/src/plugins/redis/index.ts
index 0fa6cedb30..ef32b42684 100644
--- a/packages/backend/server/src/plugins/redis/index.ts
+++ b/packages/backend/server/src/plugins/redis/index.ts
@@ -1,5 +1,6 @@
import { Global, Provider, Type } from '@nestjs/common';
-import { Redis, type RedisOptions } from 'ioredis';
+import type { RedisOptions } from 'ioredis';
+import { Redis } from 'ioredis';
import { ThrottlerStorageRedisService } from 'nestjs-throttler-storage-redis';
import { Cache, Locker, SessionCache } from '../../fundamentals';
diff --git a/packages/backend/server/tests/app.e2e.ts b/packages/backend/server/tests/app.e2e.ts
index 111d661324..1973e11d6a 100644
--- a/packages/backend/server/tests/app.e2e.ts
+++ b/packages/backend/server/tests/app.e2e.ts
@@ -1,5 +1,6 @@
import type { INestApplication } from '@nestjs/common';
-import ava, { type TestFn } from 'ava';
+import type { TestFn } from 'ava';
+import ava from 'ava';
import request from 'supertest';
import { AppModule } from '../src/app.module';
diff --git a/packages/backend/server/tests/auth.e2e.ts b/packages/backend/server/tests/auth.e2e.ts
index a6b4db7c29..d8f6b34970 100644
--- a/packages/backend/server/tests/auth.e2e.ts
+++ b/packages/backend/server/tests/auth.e2e.ts
@@ -3,7 +3,8 @@ import {
getLatestMailMessage,
} from '@affine-test/kit/utils/cloud';
import type { INestApplication } from '@nestjs/common';
-import ava, { type TestFn } from 'ava';
+import type { TestFn } from 'ava';
+import ava from 'ava';
import { AuthService } from '../src/core/auth/service';
import { MailService } from '../src/fundamentals/mailer';
diff --git a/packages/backend/server/tests/feature.spec.ts b/packages/backend/server/tests/feature.spec.ts
index fc59bed01f..4710596dd9 100644
--- a/packages/backend/server/tests/feature.spec.ts
+++ b/packages/backend/server/tests/feature.spec.ts
@@ -2,7 +2,8 @@
import { INestApplication, Injectable } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
-import ava, { type TestFn } from 'ava';
+import type { TestFn } from 'ava';
+import ava from 'ava';
import { AuthService } from '../src/core/auth/service';
import {
diff --git a/packages/backend/server/tests/history.spec.ts b/packages/backend/server/tests/history.spec.ts
index a706c38837..0d32fcf0b4 100644
--- a/packages/backend/server/tests/history.spec.ts
+++ b/packages/backend/server/tests/history.spec.ts
@@ -7,7 +7,7 @@ import * as Sinon from 'sinon';
import { DocHistoryManager } from '../src/core/doc';
import { QuotaModule } from '../src/core/quota';
import { StorageModule } from '../src/core/storage';
-import { type EventPayload } from '../src/fundamentals/event';
+import type { EventPayload } from '../src/fundamentals/event';
import { createTestingModule } from './utils';
let m: TestingModule;
diff --git a/packages/backend/server/tests/mailer.e2e.ts b/packages/backend/server/tests/mailer.e2e.ts
index ecbf0c0e85..64a08b5897 100644
--- a/packages/backend/server/tests/mailer.e2e.ts
+++ b/packages/backend/server/tests/mailer.e2e.ts
@@ -7,7 +7,8 @@ import {
getLatestMailMessage,
} from '@affine-test/kit/utils/cloud';
import { TestingModule } from '@nestjs/testing';
-import ava, { type TestFn } from 'ava';
+import type { TestFn } from 'ava';
+import ava from 'ava';
import { AuthService } from '../src/core/auth/service';
import { ConfigModule } from '../src/fundamentals/config';
diff --git a/packages/backend/server/tests/mailer.spec.ts b/packages/backend/server/tests/mailer.spec.ts
index 7b983649e2..bb0e236563 100644
--- a/packages/backend/server/tests/mailer.spec.ts
+++ b/packages/backend/server/tests/mailer.spec.ts
@@ -1,5 +1,6 @@
import type { INestApplication } from '@nestjs/common';
-import ava, { type TestFn } from 'ava';
+import type { TestFn } from 'ava';
+import ava from 'ava';
import Sinon from 'sinon';
import { AppModule } from '../src/app.module';
diff --git a/packages/backend/server/tests/quota.spec.ts b/packages/backend/server/tests/quota.spec.ts
index 9c01ebc09e..551107efd1 100644
--- a/packages/backend/server/tests/quota.spec.ts
+++ b/packages/backend/server/tests/quota.spec.ts
@@ -1,7 +1,8 @@
///
import { TestingModule } from '@nestjs/testing';
-import ava, { type TestFn } from 'ava';
+import type { TestFn } from 'ava';
+import ava from 'ava';
import { AuthService } from '../src/core/auth';
import {
diff --git a/packages/backend/server/tests/workspace-invite.e2e.ts b/packages/backend/server/tests/workspace-invite.e2e.ts
index 6a0c12018b..0a5de885fa 100644
--- a/packages/backend/server/tests/workspace-invite.e2e.ts
+++ b/packages/backend/server/tests/workspace-invite.e2e.ts
@@ -4,7 +4,8 @@ import {
} from '@affine-test/kit/utils/cloud';
import type { INestApplication } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
-import ava, { type TestFn } from 'ava';
+import type { TestFn } from 'ava';
+import ava from 'ava';
import { AppModule } from '../src/app.module';
import { AuthService } from '../src/core/auth/service';
diff --git a/packages/backend/server/tests/workspace.e2e.ts b/packages/backend/server/tests/workspace.e2e.ts
index 45a68ea6c5..0adb0b0c6c 100644
--- a/packages/backend/server/tests/workspace.e2e.ts
+++ b/packages/backend/server/tests/workspace.e2e.ts
@@ -1,6 +1,7 @@
import type { INestApplication } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
-import ava, { type TestFn } from 'ava';
+import type { TestFn } from 'ava';
+import ava from 'ava';
import request from 'supertest';
import { AppModule } from '../src/app.module';
diff --git a/packages/common/infra/src/blocksuite/migration/subdoc.ts b/packages/common/infra/src/blocksuite/migration/subdoc.ts
index f45e610f86..7b189e9a1a 100644
--- a/packages/common/infra/src/blocksuite/migration/subdoc.ts
+++ b/packages/common/infra/src/blocksuite/migration/subdoc.ts
@@ -1,6 +1,11 @@
import { nanoid } from 'nanoid';
-import { Array as YArray, Doc as YDoc, Map as YMap } from 'yjs';
-import { applyUpdate, encodeStateAsUpdate } from 'yjs';
+import {
+ applyUpdate,
+ Array as YArray,
+ Doc as YDoc,
+ encodeStateAsUpdate,
+ Map as YMap,
+} from 'yjs';
const migrationOrigin = 'affine-migration';
diff --git a/packages/common/infra/src/command/registry.ts b/packages/common/infra/src/command/registry.ts
index c77292d4c3..f6f6371413 100644
--- a/packages/common/infra/src/command/registry.ts
+++ b/packages/common/infra/src/command/registry.ts
@@ -2,11 +2,8 @@ import { DebugLogger } from '@affine/debug';
// @ts-expect-error upstream type is wrong
import { tinykeys } from 'tinykeys';
-import {
- type AffineCommand,
- type AffineCommandOptions,
- createAffineCommand,
-} from './command';
+import type { AffineCommand, AffineCommandOptions } from './command';
+import { createAffineCommand } from './command';
const commandLogger = new DebugLogger('command:registry');
diff --git a/packages/common/infra/src/di/core/provider.ts b/packages/common/infra/src/di/core/provider.ts
index 5026e53259..eafe8516fd 100644
--- a/packages/common/infra/src/di/core/provider.ts
+++ b/packages/common/infra/src/di/core/provider.ts
@@ -6,10 +6,10 @@ import {
ServiceNotFoundError,
} from './error';
import { parseIdentifier } from './identifier';
-import {
- type GeneralServiceIdentifier,
- type ServiceIdentifierValue,
- type ServiceVariant,
+import type {
+ GeneralServiceIdentifier,
+ ServiceIdentifierValue,
+ ServiceVariant,
} from './types';
export interface ResolveOptions {
diff --git a/packages/common/infra/src/di/react/index.ts b/packages/common/infra/src/di/react/index.ts
index 3f5c43fffd..52a00c0025 100644
--- a/packages/common/infra/src/di/react/index.ts
+++ b/packages/common/infra/src/di/react/index.ts
@@ -1,7 +1,7 @@
import React, { useContext } from 'react';
-import type { ServiceProvider } from '../core';
-import { type GeneralServiceIdentifier, ServiceCollection } from '../core';
+import type { GeneralServiceIdentifier, ServiceProvider } from '../core';
+import { ServiceCollection } from '../core';
export const ServiceProviderContext = React.createContext(
ServiceCollection.EMPTY.provider()
diff --git a/packages/common/infra/src/livedata/index.ts b/packages/common/infra/src/livedata/index.ts
index e04479769f..1e031469a8 100644
--- a/packages/common/infra/src/livedata/index.ts
+++ b/packages/common/infra/src/livedata/index.ts
@@ -1,22 +1,25 @@
import { DebugLogger } from '@affine/debug';
+import type {
+ InteropObservable,
+ Observer,
+ OperatorFunction,
+ Subscription,
+ TeardownLogic,
+} from 'rxjs';
import {
+ BehaviorSubject,
combineLatest,
distinctUntilChanged,
EMPTY,
filter,
- type InteropObservable,
map,
Observable,
- type Observer,
of,
- type OperatorFunction,
scan,
skip,
- type Subscription,
+ Subject,
switchMap,
- type TeardownLogic,
} from 'rxjs';
-import { BehaviorSubject, Subject } from 'rxjs';
export * from './react';
diff --git a/packages/common/infra/src/page/context.ts b/packages/common/infra/src/page/context.ts
index 19cdebe444..6c705a1628 100644
--- a/packages/common/infra/src/page/context.ts
+++ b/packages/common/infra/src/page/context.ts
@@ -1,6 +1,7 @@
import type { Doc as BlockSuiteDoc } from '@blocksuite/store';
-import { createIdentifier, type ServiceCollection } from '../di';
+import type { ServiceCollection } from '../di';
+import { createIdentifier } from '../di';
import type { PageRecord } from './record';
import { PageScope } from './service-scope';
diff --git a/packages/common/infra/src/page/index.ts b/packages/common/infra/src/page/index.ts
index ab5dbd6abd..0e611f8dde 100644
--- a/packages/common/infra/src/page/index.ts
+++ b/packages/common/infra/src/page/index.ts
@@ -4,7 +4,8 @@ export * from './record';
export * from './record-list';
export * from './service-scope';
-import { type ServiceCollection, ServiceProvider } from '../di';
+import type { ServiceCollection } from '../di';
+import { ServiceProvider } from '../di';
import { CleanupService } from '../lifecycle';
import { Workspace, WorkspaceLocalState, WorkspaceScope } from '../workspace';
import { BlockSuitePageContext, PageRecordContext } from './context';
diff --git a/packages/common/infra/src/page/record-list.ts b/packages/common/infra/src/page/record-list.ts
index 79a4b461c2..697fb745d6 100644
--- a/packages/common/infra/src/page/record-list.ts
+++ b/packages/common/infra/src/page/record-list.ts
@@ -2,7 +2,7 @@ import { isEqual } from 'lodash-es';
import { distinctUntilChanged, map, Observable } from 'rxjs';
import { LiveData } from '../livedata';
-import { type Workspace, type WorkspaceLocalState } from '../workspace';
+import type { Workspace, WorkspaceLocalState } from '../workspace';
import { PageRecord } from './record';
export class PageRecordList {
diff --git a/packages/common/infra/src/page/service-scope.ts b/packages/common/infra/src/page/service-scope.ts
index 31cdaca345..53cf99a177 100644
--- a/packages/common/infra/src/page/service-scope.ts
+++ b/packages/common/infra/src/page/service-scope.ts
@@ -1,4 +1,5 @@
-import { createScope, type ServiceScope } from '../di';
+import type { ServiceScope } from '../di';
+import { createScope } from '../di';
import { WorkspaceScope } from '../workspace';
export const PageScope: ServiceScope = createScope('page', WorkspaceScope);
diff --git a/packages/common/infra/src/workspace/context.ts b/packages/common/infra/src/workspace/context.ts
index ca7db30229..a5b127f328 100644
--- a/packages/common/infra/src/workspace/context.ts
+++ b/packages/common/infra/src/workspace/context.ts
@@ -23,7 +23,8 @@ import { nanoid } from 'nanoid';
import type { Awareness } from 'y-protocols/awareness.js';
import type { Doc as YDoc } from 'yjs';
-import { createIdentifier, type ServiceCollection } from '../di';
+import type { ServiceCollection } from '../di';
+import { createIdentifier } from '../di';
import { BlobEngine } from './engine/blob';
import { globalBlockSuiteSchema } from './global-schema';
import type { WorkspaceMetadata } from './metadata';
diff --git a/packages/common/infra/src/workspace/engine/doc/__tests__/sync.spec.ts b/packages/common/infra/src/workspace/engine/doc/__tests__/sync.spec.ts
index 45bcf27cc1..7a8020acf5 100644
--- a/packages/common/infra/src/workspace/engine/doc/__tests__/sync.spec.ts
+++ b/packages/common/infra/src/workspace/engine/doc/__tests__/sync.spec.ts
@@ -1,7 +1,12 @@
import { nanoid } from 'nanoid';
import { describe, expect, test, vitest } from 'vitest';
-import { Doc as YDoc, encodeStateAsUpdate } from 'yjs';
-import { diffUpdate, encodeStateVectorFromUpdate, mergeUpdates } from 'yjs';
+import {
+ diffUpdate,
+ Doc as YDoc,
+ encodeStateAsUpdate,
+ encodeStateVectorFromUpdate,
+ mergeUpdates,
+} from 'yjs';
import { AsyncLock } from '../../../../utils';
import { DocEngine } from '..';
diff --git a/packages/common/infra/src/workspace/engine/doc/index.ts b/packages/common/infra/src/workspace/engine/doc/index.ts
index 506db43d9c..3a8a4581a6 100644
--- a/packages/common/infra/src/workspace/engine/doc/index.ts
+++ b/packages/common/infra/src/workspace/engine/doc/index.ts
@@ -9,7 +9,8 @@ import { MANUALLY_STOP } from '../../../utils';
import { DocEngineLocalPart } from './local';
import { DocEngineRemotePart } from './remote';
import type { DocServer } from './server';
-import { type DocStorage, DocStorageInner } from './storage';
+import type { DocStorage } from './storage';
+import { DocStorageInner } from './storage';
const logger = new DebugLogger('doc-engine');
diff --git a/packages/common/infra/src/workspace/engine/doc/storage.ts b/packages/common/infra/src/workspace/engine/doc/storage.ts
index f87717d839..b87d7abc87 100644
--- a/packages/common/infra/src/workspace/engine/doc/storage.ts
+++ b/packages/common/infra/src/workspace/engine/doc/storage.ts
@@ -1,10 +1,5 @@
-import {
- type ByteKV,
- type Memento,
- MemoryMemento,
- ReadonlyByteKV,
- wrapMemento,
-} from '../../../storage';
+import type { ByteKV, Memento } from '../../../storage';
+import { MemoryMemento, ReadonlyByteKV, wrapMemento } from '../../../storage';
import { AsyncLock, mergeUpdates, throwIfAborted } from '../../../utils';
import type { DocEventBus } from '.';
import { DocEventBusInner, MemoryDocEventBus } from './event';
diff --git a/packages/common/infra/src/workspace/factory.ts b/packages/common/infra/src/workspace/factory.ts
index fd3d85d13f..de77863208 100644
--- a/packages/common/infra/src/workspace/factory.ts
+++ b/packages/common/infra/src/workspace/factory.ts
@@ -1,4 +1,5 @@
-import { createIdentifier, type ServiceCollection } from '../di';
+import type { ServiceCollection } from '../di';
+import { createIdentifier } from '../di';
export interface WorkspaceFactory {
name: string;
diff --git a/packages/common/infra/src/workspace/index.ts b/packages/common/infra/src/workspace/index.ts
index 15b02d8663..cb72630278 100644
--- a/packages/common/infra/src/workspace/index.ts
+++ b/packages/common/infra/src/workspace/index.ts
@@ -11,7 +11,8 @@ export * from './testing';
export * from './upgrade';
export * from './workspace';
-import { type ServiceCollection, ServiceProvider } from '../di';
+import type { ServiceCollection } from '../di';
+import { ServiceProvider } from '../di';
import { CleanupService } from '../lifecycle';
import { GlobalCache, GlobalState, MemoryMemento } from '../storage';
import {
diff --git a/packages/common/infra/src/workspace/list/cache.ts b/packages/common/infra/src/workspace/list/cache.ts
index ecf1005037..a1ea35873d 100644
--- a/packages/common/infra/src/workspace/list/cache.ts
+++ b/packages/common/infra/src/workspace/list/cache.ts
@@ -1,5 +1,5 @@
import type { GlobalCache } from '../../storage';
-import { type WorkspaceMetadata } from '../metadata';
+import type { WorkspaceMetadata } from '../metadata';
const CACHE_STORAGE_KEY = 'jotai-workspaces';
diff --git a/packages/common/infra/src/workspace/list/index.ts b/packages/common/infra/src/workspace/list/index.ts
index 7963052d59..324f20e70a 100644
--- a/packages/common/infra/src/workspace/list/index.ts
+++ b/packages/common/infra/src/workspace/list/index.ts
@@ -9,7 +9,8 @@ import type { GlobalCache } from '../../storage';
import type { BlobStorage } from '../engine';
import type { WorkspaceMetadata } from '../metadata';
import { readWorkspaceListCache, writeWorkspaceListCache } from './cache';
-import { type WorkspaceInfo, WorkspaceInformation } from './information';
+import type { WorkspaceInfo } from './information';
+import { WorkspaceInformation } from './information';
export * from './information';
diff --git a/packages/common/infra/src/workspace/testing.ts b/packages/common/infra/src/workspace/testing.ts
index 6f6c664601..ea81ff9092 100644
--- a/packages/common/infra/src/workspace/testing.ts
+++ b/packages/common/infra/src/workspace/testing.ts
@@ -4,12 +4,13 @@ import { differenceBy } from 'lodash-es';
import { nanoid } from 'nanoid';
import { applyUpdate, encodeStateAsUpdate } from 'yjs';
-import { type ServiceCollection } from '../di';
-import { GlobalState, type Memento } from '../storage';
+import type { ServiceCollection } from '../di';
+import type { Memento } from '../storage';
+import { GlobalState } from '../storage';
import { WorkspaceMetadataContext } from './context';
+import type { BlobStorage } from './engine';
import {
AwarenessProvider,
- type BlobStorage,
DocStorageImpl,
LocalBlobStorage,
MemoryDocStorage,
@@ -17,9 +18,8 @@ import {
import { MemoryStorage } from './engine/doc/storage';
import type { WorkspaceFactory } from './factory';
import { globalBlockSuiteSchema } from './global-schema';
-import type { WorkspaceListProvider } from './list';
-import { type WorkspaceInfo } from './list';
-import { type WorkspaceMetadata } from './metadata';
+import type { WorkspaceInfo, WorkspaceListProvider } from './list';
+import type { WorkspaceMetadata } from './metadata';
import { WorkspaceScope } from './service-scope';
const LIST_STORE_KEY = 'testing-workspace-list';
diff --git a/packages/common/infra/src/workspace/upgrade.ts b/packages/common/infra/src/workspace/upgrade.ts
index 4fb7615fbe..ef6285b034 100644
--- a/packages/common/infra/src/workspace/upgrade.ts
+++ b/packages/common/infra/src/workspace/upgrade.ts
@@ -4,12 +4,16 @@ import { Slot } from '@blocksuite/global/utils';
import type { DocCollection } from '@blocksuite/store';
import { applyUpdate, Doc as YDoc, encodeStateAsUpdate } from 'yjs';
-import { checkWorkspaceCompatibility, MigrationPoint } from '../blocksuite';
-import { forceUpgradePages, upgradeV1ToV2 } from '../blocksuite';
-import { migrateGuidCompatibility } from '../blocksuite';
+import {
+ checkWorkspaceCompatibility,
+ forceUpgradePages,
+ migrateGuidCompatibility,
+ MigrationPoint,
+ upgradeV1ToV2,
+} from '../blocksuite';
import type { DocEngine } from './engine';
import type { WorkspaceManager } from './manager';
-import { type WorkspaceMetadata } from './metadata';
+import type { WorkspaceMetadata } from './metadata';
export interface WorkspaceUpgradeStatus {
needUpgrade: boolean;
diff --git a/packages/common/infra/src/workspace/workspace.ts b/packages/common/infra/src/workspace/workspace.ts
index 8ecf5a6831..0c53b7b4ee 100644
--- a/packages/common/infra/src/workspace/workspace.ts
+++ b/packages/common/infra/src/workspace/workspace.ts
@@ -4,11 +4,12 @@ import type { DocCollection } from '@blocksuite/store';
import type { ServiceProvider } from '../di';
import { CleanupService } from '../lifecycle';
-import type { WorkspaceEngine } from './engine';
-import { type WorkspaceEngineStatus } from './engine';
-import { type WorkspaceMetadata } from './metadata';
-import type { WorkspaceUpgradeController } from './upgrade';
-import { type WorkspaceUpgradeStatus } from './upgrade';
+import type { WorkspaceEngine, WorkspaceEngineStatus } from './engine';
+import type { WorkspaceMetadata } from './metadata';
+import type {
+ WorkspaceUpgradeController,
+ WorkspaceUpgradeStatus,
+} from './upgrade';
export type { DocCollection } from '@blocksuite/store';
diff --git a/packages/common/y-indexeddb/src/provider.ts b/packages/common/y-indexeddb/src/provider.ts
index bc974cc2c5..9bc2469539 100644
--- a/packages/common/y-indexeddb/src/provider.ts
+++ b/packages/common/y-indexeddb/src/provider.ts
@@ -1,22 +1,17 @@
import { assertExists } from '@blocksuite/global/utils';
import type { IDBPDatabase } from 'idb';
import { openDB } from 'idb';
-import {
- createLazyProvider,
- type DocDataSource,
- writeOperation,
-} from 'y-provider';
+import type { DocDataSource } from 'y-provider';
+import { createLazyProvider, writeOperation } from 'y-provider';
import type { Doc } from 'yjs';
import { diffUpdate, encodeStateVectorFromUpdate } from 'yjs';
-import {
- type BlockSuiteBinaryDB,
- dbVersion,
- DEFAULT_DB_NAME,
- type IndexedDBProvider,
- type UpdateMessage,
- upgradeDB,
+import type {
+ BlockSuiteBinaryDB,
+ IndexedDBProvider,
+ UpdateMessage,
} from './shared';
+import { dbVersion, DEFAULT_DB_NAME, upgradeDB } from './shared';
import { mergeUpdates } from './utils';
let mergeCount = 500;
diff --git a/packages/common/y-provider/src/lazy-provider.ts b/packages/common/y-provider/src/lazy-provider.ts
index f1c1a2ec2c..0859d35e72 100644
--- a/packages/common/y-provider/src/lazy-provider.ts
+++ b/packages/common/y-provider/src/lazy-provider.ts
@@ -1,14 +1,9 @@
import { assertExists } from '@blocksuite/global/utils';
-import {
- applyUpdate,
- type Doc,
- encodeStateAsUpdate,
- encodeStateVector,
-} from 'yjs';
+import type { Doc } from 'yjs';
+import { applyUpdate, encodeStateAsUpdate, encodeStateVector } from 'yjs';
import type { DocDataSource } from './data-source';
-import type { DataSourceAdapter } from './types';
-import type { Status } from './types';
+import type { DataSourceAdapter, Status } from './types';
function getDoc(doc: Doc, guid: string): Doc | undefined {
if (doc.guid === guid) {
diff --git a/packages/frontend/component/src/components/auth-components/auth-input.tsx b/packages/frontend/component/src/components/auth-components/auth-input.tsx
index 8dd8b72605..e0cdce4b83 100644
--- a/packages/frontend/component/src/components/auth-components/auth-input.tsx
+++ b/packages/frontend/component/src/components/auth-components/auth-input.tsx
@@ -1,6 +1,7 @@
import clsx from 'clsx';
-import { Input, type InputProps } from '../../ui/input';
+import type { InputProps } from '../../ui/input';
+import { Input } from '../../ui/input';
import * as styles from './share.css';
export type AuthInputProps = InputProps & {
label?: string;
diff --git a/packages/frontend/component/src/components/auth-components/auth-page-container.tsx b/packages/frontend/component/src/components/auth-components/auth-page-container.tsx
index 5cea173e53..6b943326fa 100644
--- a/packages/frontend/component/src/components/auth-components/auth-page-container.tsx
+++ b/packages/frontend/component/src/components/auth-components/auth-page-container.tsx
@@ -1,10 +1,5 @@
-import {
- type FC,
- type PropsWithChildren,
- type ReactNode,
- useEffect,
- useState,
-} from 'react';
+import type { FC, PropsWithChildren, ReactNode } from 'react';
+import { useEffect, useState } from 'react';
import { Empty } from '../../ui/empty';
import { AffineOtherPageLayout } from '../affine-other-page-layout';
diff --git a/packages/frontend/component/src/components/auth-components/back-button.tsx b/packages/frontend/component/src/components/auth-components/back-button.tsx
index 1291160176..0b09d16426 100644
--- a/packages/frontend/component/src/components/auth-components/back-button.tsx
+++ b/packages/frontend/component/src/components/auth-components/back-button.tsx
@@ -1,8 +1,9 @@
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { ArrowLeftSmallIcon } from '@blocksuite/icons';
-import { type FC } from 'react';
+import type { FC } from 'react';
-import { Button, type ButtonProps } from '../../ui/button';
+import type { ButtonProps } from '../../ui/button';
+import { Button } from '../../ui/button';
export const BackButton: FC = props => {
const t = useAFFiNEI18N();
diff --git a/packages/frontend/component/src/components/auth-components/count-down-render.tsx b/packages/frontend/component/src/components/auth-components/count-down-render.tsx
index eeb7d85783..dbb378030b 100644
--- a/packages/frontend/component/src/components/auth-components/count-down-render.tsx
+++ b/packages/frontend/component/src/components/auth-components/count-down-render.tsx
@@ -1,4 +1,5 @@
-import { forwardRef, type HTMLAttributes } from 'react';
+import type { HTMLAttributes } from 'react';
+import { forwardRef } from 'react';
const formatTime = (time: number): string => {
const minutes = Math.floor(time / 60);
diff --git a/packages/frontend/component/src/components/auth-components/onboarding-page.tsx b/packages/frontend/component/src/components/auth-components/onboarding-page.tsx
index 05504f6a7c..406cc8cd8b 100644
--- a/packages/frontend/component/src/components/auth-components/onboarding-page.tsx
+++ b/packages/frontend/component/src/components/auth-components/onboarding-page.tsx
@@ -3,8 +3,9 @@ import { fetchWithTraceReport } from '@affine/graphql';
import { ArrowRightSmallIcon } from '@blocksuite/icons';
import clsx from 'clsx';
import { useEffect, useMemo, useState } from 'react';
+import type { Location } from 'react-router-dom';
// eslint-disable-next-line @typescript-eslint/no-restricted-imports
-import { type Location, useLocation, useNavigate } from 'react-router-dom';
+import { useLocation, useNavigate } from 'react-router-dom';
import useSWR from 'swr';
import { Button } from '../../ui/button';
diff --git a/packages/frontend/component/src/components/auth-components/password-input/index.tsx b/packages/frontend/component/src/components/auth-components/password-input/index.tsx
index 354716f81c..223d39349a 100644
--- a/packages/frontend/component/src/components/auth-components/password-input/index.tsx
+++ b/packages/frontend/component/src/components/auth-components/password-input/index.tsx
@@ -1,9 +1,10 @@
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { passwordStrength } from 'check-password-strength';
-import { type FC, useEffect } from 'react';
-import { useCallback, useState } from 'react';
+import type { FC } from 'react';
+import { useCallback, useEffect, useState } from 'react';
-import { Input, type InputProps } from '../../../ui/input';
+import type { InputProps } from '../../../ui/input';
+import { Input } from '../../../ui/input';
import * as styles from '../share.css';
import { ErrorIcon } from './error';
import { SuccessIcon } from './success';
diff --git a/packages/frontend/component/src/components/auth-components/password-input/tag.tsx b/packages/frontend/component/src/components/auth-components/password-input/tag.tsx
index ecf6673d0d..ccaf06c394 100644
--- a/packages/frontend/component/src/components/auth-components/password-input/tag.tsx
+++ b/packages/frontend/component/src/components/auth-components/password-input/tag.tsx
@@ -1,5 +1,6 @@
import clsx from 'clsx';
-import { type FC, useMemo } from 'react';
+import type { FC } from 'react';
+import { useMemo } from 'react';
import type { Status } from './index';
import { tag } from './style.css';
diff --git a/packages/frontend/component/src/components/auth-components/set-password.tsx b/packages/frontend/component/src/components/auth-components/set-password.tsx
index b8a58b6416..c77195518e 100644
--- a/packages/frontend/component/src/components/auth-components/set-password.tsx
+++ b/packages/frontend/component/src/components/auth-components/set-password.tsx
@@ -1,5 +1,6 @@
import { useAFFiNEI18N } from '@affine/i18n/hooks';
-import { type FC, useCallback, useRef, useState } from 'react';
+import type { FC } from 'react';
+import { useCallback, useRef, useState } from 'react';
import { Button } from '../../ui/button';
import { Wrapper } from '../../ui/layout';
diff --git a/packages/frontend/component/src/components/card/block-card/index.tsx b/packages/frontend/component/src/components/card/block-card/index.tsx
index 3ec1d1e96a..0db2f6912d 100644
--- a/packages/frontend/component/src/components/card/block-card/index.tsx
+++ b/packages/frontend/component/src/components/card/block-card/index.tsx
@@ -1,4 +1,5 @@
-import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';
+import type { HTMLAttributes, ReactNode } from 'react';
+import { forwardRef } from 'react';
import * as styles from './styles.css';
diff --git a/packages/frontend/component/src/components/disable-public-link/index.tsx b/packages/frontend/component/src/components/disable-public-link/index.tsx
index 0b4868f828..ec501c3ace 100644
--- a/packages/frontend/component/src/components/disable-public-link/index.tsx
+++ b/packages/frontend/component/src/components/disable-public-link/index.tsx
@@ -1,6 +1,7 @@
import { useAFFiNEI18N } from '@affine/i18n/hooks';
-import { ConfirmModal, type ConfirmModalProps } from '../../ui/modal';
+import type { ConfirmModalProps } from '../../ui/modal';
+import { ConfirmModal } from '../../ui/modal';
export const PublicLinkDisableModal = (props: ConfirmModalProps) => {
const t = useAFFiNEI18N();
diff --git a/packages/frontend/component/src/components/global-loading/index.tsx b/packages/frontend/component/src/components/global-loading/index.tsx
index b37b3452a9..a205365129 100644
--- a/packages/frontend/component/src/components/global-loading/index.tsx
+++ b/packages/frontend/component/src/components/global-loading/index.tsx
@@ -1,5 +1,6 @@
import { useAtomValue } from 'jotai';
-import { type ReactNode, useEffect, useState } from 'react';
+import type { ReactNode } from 'react';
+import { useEffect, useState } from 'react';
import { Loading } from '../../ui/loading';
import * as styles from './index.css';
diff --git a/packages/frontend/component/src/components/member-components/accept-invite-page.tsx b/packages/frontend/component/src/components/member-components/accept-invite-page.tsx
index 03cae33dae..251c40d802 100644
--- a/packages/frontend/component/src/components/member-components/accept-invite-page.tsx
+++ b/packages/frontend/component/src/components/member-components/accept-invite-page.tsx
@@ -1,5 +1,5 @@
import { AuthPageContainer } from '@affine/component/auth-components';
-import { type GetInviteInfoQuery } from '@affine/graphql';
+import type { GetInviteInfoQuery } from '@affine/graphql';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { Avatar } from '../../ui/avatar';
diff --git a/packages/frontend/component/src/theme/theme.css.ts b/packages/frontend/component/src/theme/theme.css.ts
index e0c1790bf5..09c974a155 100644
--- a/packages/frontend/component/src/theme/theme.css.ts
+++ b/packages/frontend/component/src/theme/theme.css.ts
@@ -1,5 +1,8 @@
-import { cssVar } from '@toeverything/theme';
-import { darkCssVariables, lightCssVariables } from '@toeverything/theme';
+import {
+ cssVar,
+ darkCssVariables,
+ lightCssVariables,
+} from '@toeverything/theme';
import { globalStyle } from '@vanilla-extract/css';
globalStyle('body', {
color: cssVar('textPrimaryColor'),
diff --git a/packages/frontend/component/src/ui/avatar/avatar.stories.tsx b/packages/frontend/component/src/ui/avatar/avatar.stories.tsx
index f7e3447c5b..63c39a40f8 100644
--- a/packages/frontend/component/src/ui/avatar/avatar.stories.tsx
+++ b/packages/frontend/component/src/ui/avatar/avatar.stories.tsx
@@ -1,7 +1,8 @@
import { CameraIcon } from '@blocksuite/icons';
import type { Meta, StoryFn } from '@storybook/react';
-import { Avatar, type AvatarProps } from './avatar';
+import type { AvatarProps } from './avatar';
+import { Avatar } from './avatar';
export default {
title: 'UI/Avatar',
diff --git a/packages/frontend/component/src/ui/avatar/avatar.tsx b/packages/frontend/component/src/ui/avatar/avatar.tsx
index a1efd89949..fe063cb826 100644
--- a/packages/frontend/component/src/ui/avatar/avatar.tsx
+++ b/packages/frontend/component/src/ui/avatar/avatar.tsx
@@ -1,19 +1,27 @@
import { CloseIcon } from '@blocksuite/icons';
+import type {
+ AvatarFallbackProps,
+ AvatarImageProps,
+ AvatarProps as RadixAvatarProps,
+} from '@radix-ui/react-avatar';
import {
- type AvatarFallbackProps,
- type AvatarImageProps,
- type AvatarProps as RadixAvatarProps,
Fallback as AvatarFallback,
Image as AvatarImage,
Root as AvatarRoot,
} from '@radix-ui/react-avatar';
import { assignInlineVars } from '@vanilla-extract/dynamic';
import clsx from 'clsx';
-import type { CSSProperties, HTMLAttributes, MouseEvent } from 'react';
-import { forwardRef, type ReactElement, useMemo, useState } from 'react';
+import type {
+ CSSProperties,
+ HTMLAttributes,
+ MouseEvent,
+ ReactElement,
+} from 'react';
+import { forwardRef, useMemo, useState } from 'react';
import { IconButton } from '../button';
-import { Tooltip, type TooltipProps } from '../tooltip';
+import type { TooltipProps } from '../tooltip';
+import { Tooltip } from '../tooltip';
import { ColorfulFallback } from './colorful-fallback';
import * as style from './style.css';
import { sizeVar } from './style.css';
diff --git a/packages/frontend/component/src/ui/button/button.stories.tsx b/packages/frontend/component/src/ui/button/button.stories.tsx
index 93739ce78b..a62b44bc3b 100644
--- a/packages/frontend/component/src/ui/button/button.stories.tsx
+++ b/packages/frontend/component/src/ui/button/button.stories.tsx
@@ -1,7 +1,8 @@
import { InformationIcon } from '@blocksuite/icons';
import type { Meta, StoryFn } from '@storybook/react';
-import { Button, type ButtonProps } from './button';
+import type { ButtonProps } from './button';
+import { Button } from './button';
export default {
title: 'UI/Button',
component: Button,
diff --git a/packages/frontend/component/src/ui/button/button.tsx b/packages/frontend/component/src/ui/button/button.tsx
index dd8dbaf91f..f7250cb543 100644
--- a/packages/frontend/component/src/ui/button/button.tsx
+++ b/packages/frontend/component/src/ui/button/button.tsx
@@ -1,12 +1,11 @@
import clsx from 'clsx';
-import {
- type FC,
- forwardRef,
- type HTMLAttributes,
- type PropsWithChildren,
- type ReactElement,
- useMemo,
+import type {
+ FC,
+ HTMLAttributes,
+ PropsWithChildren,
+ ReactElement,
} from 'react';
+import { forwardRef, useMemo } from 'react';
import { Loading } from '../loading';
import { button, buttonIcon } from './button.css';
diff --git a/packages/frontend/component/src/ui/button/dropdown-button.tsx b/packages/frontend/component/src/ui/button/dropdown-button.tsx
index c34a2c06d3..b51e913b21 100644
--- a/packages/frontend/component/src/ui/button/dropdown-button.tsx
+++ b/packages/frontend/component/src/ui/button/dropdown-button.tsx
@@ -1,9 +1,6 @@
import { ArrowDownSmallIcon } from '@blocksuite/icons';
-import {
- type ButtonHTMLAttributes,
- forwardRef,
- type MouseEventHandler,
-} from 'react';
+import type { ButtonHTMLAttributes, MouseEventHandler } from 'react';
+import { forwardRef } from 'react';
import * as styles from './styles.css';
diff --git a/packages/frontend/component/src/ui/button/icon-button.stories.tsx b/packages/frontend/component/src/ui/button/icon-button.stories.tsx
index 7f7d23b888..279faac1c2 100644
--- a/packages/frontend/component/src/ui/button/icon-button.stories.tsx
+++ b/packages/frontend/component/src/ui/button/icon-button.stories.tsx
@@ -1,7 +1,8 @@
import { InformationIcon } from '@blocksuite/icons';
import type { Meta, StoryFn } from '@storybook/react';
-import { IconButton, type IconButtonProps } from './icon-button';
+import type { IconButtonProps } from './icon-button';
+import { IconButton } from './icon-button';
export default {
title: 'UI/IconButton',
component: IconButton,
diff --git a/packages/frontend/component/src/ui/button/icon-button.tsx b/packages/frontend/component/src/ui/button/icon-button.tsx
index 880bed1414..5447905ae2 100644
--- a/packages/frontend/component/src/ui/button/icon-button.tsx
+++ b/packages/frontend/component/src/ui/button/icon-button.tsx
@@ -1,6 +1,6 @@
import clsx from 'clsx';
-import type { HTMLAttributes, PropsWithChildren } from 'react';
-import { forwardRef, type ReactElement } from 'react';
+import type { HTMLAttributes, PropsWithChildren, ReactElement } from 'react';
+import { forwardRef } from 'react';
import { Loading } from '../loading';
import type { ButtonType } from './button';
diff --git a/packages/frontend/component/src/ui/button/radio.tsx b/packages/frontend/component/src/ui/button/radio.tsx
index 0ddaef2146..4c0b3cc30c 100644
--- a/packages/frontend/component/src/ui/button/radio.tsx
+++ b/packages/frontend/component/src/ui/button/radio.tsx
@@ -4,7 +4,8 @@ import type {
} from '@radix-ui/react-radio-group';
import * as RadioGroup from '@radix-ui/react-radio-group';
import clsx from 'clsx';
-import { type CSSProperties, forwardRef } from 'react';
+import type { CSSProperties } from 'react';
+import { forwardRef } from 'react';
import * as styles from './styles.css';
diff --git a/packages/frontend/component/src/ui/checkbox/checkbox.tsx b/packages/frontend/component/src/ui/checkbox/checkbox.tsx
index d602083af3..d8e5dc1843 100644
--- a/packages/frontend/component/src/ui/checkbox/checkbox.tsx
+++ b/packages/frontend/component/src/ui/checkbox/checkbox.tsx
@@ -1,6 +1,7 @@
// components/checkbox.tsx
import clsx from 'clsx';
-import { type HTMLAttributes, useCallback, useEffect, useRef } from 'react';
+import type { HTMLAttributes } from 'react';
+import { useCallback, useEffect, useRef } from 'react';
import * as icons from './icons';
import * as styles from './index.css';
diff --git a/packages/frontend/component/src/ui/date-picker/calendar/calendar.tsx b/packages/frontend/component/src/ui/date-picker/calendar/calendar.tsx
index 51bfb169fb..329f9db250 100644
--- a/packages/frontend/component/src/ui/date-picker/calendar/calendar.tsx
+++ b/packages/frontend/component/src/ui/date-picker/calendar/calendar.tsx
@@ -6,8 +6,8 @@ import * as styles from './calendar.css';
import { DATE_MAX, DATE_MIN } from './constants';
import { DayPicker } from './day-picker';
import { MonthPicker } from './month-picker';
-import type { SelectMode } from './types';
-import { type DatePickerProps, defaultDatePickerProps } from './types';
+import type { DatePickerProps, SelectMode } from './types';
+import { defaultDatePickerProps } from './types';
import { YearPicker } from './year-picker';
export type { DatePickerProps } from './types';
diff --git a/packages/frontend/component/src/ui/date-picker/calendar/items.tsx b/packages/frontend/component/src/ui/date-picker/calendar/items.tsx
index 81a5ac325c..a934f43444 100644
--- a/packages/frontend/component/src/ui/date-picker/calendar/items.tsx
+++ b/packages/frontend/component/src/ui/date-picker/calendar/items.tsx
@@ -1,13 +1,8 @@
import { ArrowLeftSmallIcon, ArrowRightSmallIcon } from '@blocksuite/icons';
import { assignInlineVars } from '@vanilla-extract/dynamic';
import clsx from 'clsx';
-import {
- forwardRef,
- type HTMLAttributes,
- memo,
- type PropsWithChildren,
- type ReactNode,
-} from 'react';
+import type { HTMLAttributes, PropsWithChildren, ReactNode } from 'react';
+import { forwardRef, memo } from 'react';
import { IconButton } from '../../button';
import * as styles from './calendar.css';
diff --git a/packages/frontend/component/src/ui/date-picker/week-date-picker.tsx b/packages/frontend/component/src/ui/date-picker/week-date-picker.tsx
index 9d2714d481..365909d4c1 100644
--- a/packages/frontend/component/src/ui/date-picker/week-date-picker.tsx
+++ b/packages/frontend/component/src/ui/date-picker/week-date-picker.tsx
@@ -1,9 +1,8 @@
import { ArrowLeftSmallIcon, ArrowRightSmallIcon } from '@blocksuite/icons';
import clsx from 'clsx';
import dayjs from 'dayjs';
+import type { ForwardedRef, HTMLAttributes } from 'react';
import {
- type ForwardedRef,
- type HTMLAttributes,
memo,
useCallback,
useEffect,
diff --git a/packages/frontend/component/src/ui/divider/divider.stories.tsx b/packages/frontend/component/src/ui/divider/divider.stories.tsx
index bdffb91aff..3d0a870123 100644
--- a/packages/frontend/component/src/ui/divider/divider.stories.tsx
+++ b/packages/frontend/component/src/ui/divider/divider.stories.tsx
@@ -1,6 +1,7 @@
import type { Meta, StoryFn } from '@storybook/react';
-import { Divider, type DividerProps } from './index';
+import type { DividerProps } from './index';
+import { Divider } from './index';
export default {
title: 'UI/Divider',
diff --git a/packages/frontend/component/src/ui/editable/inline-edit.stories.tsx b/packages/frontend/component/src/ui/editable/inline-edit.stories.tsx
index b7ad44bfe0..694ab14558 100644
--- a/packages/frontend/component/src/ui/editable/inline-edit.stories.tsx
+++ b/packages/frontend/component/src/ui/editable/inline-edit.stories.tsx
@@ -3,7 +3,8 @@ import { useCallback, useRef, useState } from 'react';
import { Button } from '../button';
import { ResizePanel } from '../resize-panel/resize-panel';
-import { InlineEdit, type InlineEditHandle } from './inline-edit';
+import type { InlineEditHandle } from './inline-edit';
+import { InlineEdit } from './inline-edit';
export default {
title: 'UI/Editable/Inline Edit',
diff --git a/packages/frontend/component/src/ui/empty/empty.stories.tsx b/packages/frontend/component/src/ui/empty/empty.stories.tsx
index 15ba1c497d..b25f112682 100644
--- a/packages/frontend/component/src/ui/empty/empty.stories.tsx
+++ b/packages/frontend/component/src/ui/empty/empty.stories.tsx
@@ -1,6 +1,7 @@
import type { Meta, StoryFn } from '@storybook/react';
-import { Empty, type EmptyContentProps } from './index';
+import type { EmptyContentProps } from './index';
+import { Empty } from './index';
export default {
title: 'UI/Empty',
diff --git a/packages/frontend/component/src/ui/input/input.stories.tsx b/packages/frontend/component/src/ui/input/input.stories.tsx
index 2c7819532d..c04238e60d 100644
--- a/packages/frontend/component/src/ui/input/input.stories.tsx
+++ b/packages/frontend/component/src/ui/input/input.stories.tsx
@@ -1,7 +1,8 @@
import { InformationIcon } from '@blocksuite/icons';
import type { Meta, StoryFn } from '@storybook/react';
-import { Input, type InputProps } from './index';
+import type { InputProps } from './index';
+import { Input } from './index';
export default {
title: 'UI/Input',
diff --git a/packages/frontend/component/src/ui/loading/loading.stories.tsx b/packages/frontend/component/src/ui/loading/loading.stories.tsx
index ec1d8ca25a..cd6ff5d714 100644
--- a/packages/frontend/component/src/ui/loading/loading.stories.tsx
+++ b/packages/frontend/component/src/ui/loading/loading.stories.tsx
@@ -1,6 +1,7 @@
import type { Meta, StoryFn } from '@storybook/react';
-import { Loading, type LoadingProps } from './loading';
+import type { LoadingProps } from './loading';
+import { Loading } from './loading';
export default {
title: 'UI/Loading',
diff --git a/packages/frontend/component/src/ui/lottie/collections-icon.stories.tsx b/packages/frontend/component/src/ui/lottie/collections-icon.stories.tsx
index c6d07f3489..bd2cacd84b 100644
--- a/packages/frontend/component/src/ui/lottie/collections-icon.stories.tsx
+++ b/packages/frontend/component/src/ui/lottie/collections-icon.stories.tsx
@@ -1,9 +1,7 @@
import type { Meta, StoryFn } from '@storybook/react';
-import {
- AnimatedCollectionsIcon,
- type CollectionsIconProps,
-} from './collections-icon';
+import type { CollectionsIconProps } from './collections-icon';
+import { AnimatedCollectionsIcon } from './collections-icon';
export default {
title: 'UI/Lottie/Collection Icons',
diff --git a/packages/frontend/component/src/ui/lottie/collections-icon.tsx b/packages/frontend/component/src/ui/lottie/collections-icon.tsx
index 701d0f4c0a..dce202f0b0 100644
--- a/packages/frontend/component/src/ui/lottie/collections-icon.tsx
+++ b/packages/frontend/component/src/ui/lottie/collections-icon.tsx
@@ -1,5 +1,6 @@
import clsx from 'clsx';
-import Lottie, { type LottieRef } from 'lottie-react';
+import type { LottieRef } from 'lottie-react';
+import Lottie from 'lottie-react';
import { useEffect, useRef } from 'react';
import animationData from './collections-icon.json';
diff --git a/packages/frontend/component/src/ui/lottie/delete-icon.stories.tsx b/packages/frontend/component/src/ui/lottie/delete-icon.stories.tsx
index 4d72581a29..86c9898d17 100644
--- a/packages/frontend/component/src/ui/lottie/delete-icon.stories.tsx
+++ b/packages/frontend/component/src/ui/lottie/delete-icon.stories.tsx
@@ -1,6 +1,7 @@
import type { Meta, StoryFn } from '@storybook/react';
-import { AnimatedDeleteIcon, type DeleteIconProps } from './delete-icon';
+import type { DeleteIconProps } from './delete-icon';
+import { AnimatedDeleteIcon } from './delete-icon';
export default {
title: 'UI/Lottie/Delete Icon',
diff --git a/packages/frontend/component/src/ui/lottie/delete-icon.tsx b/packages/frontend/component/src/ui/lottie/delete-icon.tsx
index 48aaf5c47f..97f50d45e4 100644
--- a/packages/frontend/component/src/ui/lottie/delete-icon.tsx
+++ b/packages/frontend/component/src/ui/lottie/delete-icon.tsx
@@ -1,5 +1,6 @@
import clsx from 'clsx';
-import Lottie, { type LottieRef } from 'lottie-react';
+import type { LottieRef } from 'lottie-react';
+import Lottie from 'lottie-react';
import { useEffect, useRef } from 'react';
import animationData from './delete-icon.json';
diff --git a/packages/frontend/component/src/ui/menu/menu-icon.tsx b/packages/frontend/component/src/ui/menu/menu-icon.tsx
index f0b1497f01..60f057a9b7 100644
--- a/packages/frontend/component/src/ui/menu/menu-icon.tsx
+++ b/packages/frontend/component/src/ui/menu/menu-icon.tsx
@@ -1,6 +1,6 @@
import clsx from 'clsx';
-import type { PropsWithChildren, ReactNode } from 'react';
-import { forwardRef, type HTMLAttributes, useMemo } from 'react';
+import type { HTMLAttributes, PropsWithChildren, ReactNode } from 'react';
+import { forwardRef, useMemo } from 'react';
import { menuItemIcon } from './styles.css';
diff --git a/packages/frontend/component/src/ui/menu/menu-trigger.stories.tsx b/packages/frontend/component/src/ui/menu/menu-trigger.stories.tsx
index 6a888057a4..7aebf22368 100644
--- a/packages/frontend/component/src/ui/menu/menu-trigger.stories.tsx
+++ b/packages/frontend/component/src/ui/menu/menu-trigger.stories.tsx
@@ -1,6 +1,7 @@
import type { Meta, StoryFn } from '@storybook/react';
-import { MenuTrigger, type MenuTriggerProps } from './index';
+import type { MenuTriggerProps } from './index';
+import { MenuTrigger } from './index';
export default {
title: 'UI/MenuTrigger',
diff --git a/packages/frontend/component/src/ui/menu/menu-trigger.tsx b/packages/frontend/component/src/ui/menu/menu-trigger.tsx
index 483e83c8d0..58bfc1aa7b 100644
--- a/packages/frontend/component/src/ui/menu/menu-trigger.tsx
+++ b/packages/frontend/component/src/ui/menu/menu-trigger.tsx
@@ -1,13 +1,13 @@
import { ArrowDownSmallIcon } from '@blocksuite/icons';
import { assignInlineVars } from '@vanilla-extract/dynamic';
import clsx from 'clsx';
-import type { PropsWithChildren } from 'react';
-import {
- type CSSProperties,
- forwardRef,
- type HTMLAttributes,
- type ReactNode,
+import type {
+ CSSProperties,
+ HTMLAttributes,
+ PropsWithChildren,
+ ReactNode,
} from 'react';
+import { forwardRef } from 'react';
import { MenuIcon } from './menu-icon';
import * as styles from './styles.css';
diff --git a/packages/frontend/component/src/ui/menu/menu.stories.tsx b/packages/frontend/component/src/ui/menu/menu.stories.tsx
index 849128bc8c..1a59585e6a 100644
--- a/packages/frontend/component/src/ui/menu/menu.stories.tsx
+++ b/packages/frontend/component/src/ui/menu/menu.stories.tsx
@@ -1,15 +1,15 @@
import { InformationIcon } from '@blocksuite/icons';
import type { Meta, StoryFn } from '@storybook/react';
-import { type ReactNode, useCallback, useState } from 'react';
+import type { ReactNode } from 'react';
+import { useCallback, useState } from 'react';
import { Button } from '../button';
import { Tooltip } from '../tooltip';
+import type { MenuItemProps, MenuProps } from './index';
import {
Menu,
MenuIcon,
MenuItem,
- type MenuItemProps,
- type MenuProps,
MenuSeparator,
MenuSub,
MenuTrigger,
diff --git a/packages/frontend/component/src/ui/menu/use-menu-item.tsx b/packages/frontend/component/src/ui/menu/use-menu-item.tsx
index a3b4a3a296..b690d5e3fe 100644
--- a/packages/frontend/component/src/ui/menu/use-menu-item.tsx
+++ b/packages/frontend/component/src/ui/menu/use-menu-item.tsx
@@ -2,7 +2,7 @@ import { DoneIcon } from '@blocksuite/icons';
import clsx from 'clsx';
import { useMemo } from 'react';
-import { type MenuItemProps } from './menu.types';
+import type { MenuItemProps } from './menu.types';
import { MenuIcon } from './menu-icon';
import * as styles from './styles.css';
diff --git a/packages/frontend/component/src/ui/modal/confirm-modal.tsx b/packages/frontend/component/src/ui/modal/confirm-modal.tsx
index 64ea4e2ae8..35a4093bdc 100644
--- a/packages/frontend/component/src/ui/modal/confirm-modal.tsx
+++ b/packages/frontend/component/src/ui/modal/confirm-modal.tsx
@@ -3,7 +3,8 @@ import clsx from 'clsx';
import type { ButtonProps } from '../button';
import { Button } from '../button';
-import { Modal, type ModalProps } from './modal';
+import type { ModalProps } from './modal';
+import { Modal } from './modal';
import * as styles from './styles.css';
export interface ConfirmModalProps extends ModalProps {
diff --git a/packages/frontend/component/src/ui/modal/modal.stories.tsx b/packages/frontend/component/src/ui/modal/modal.stories.tsx
index 30e3264051..994abb90c5 100644
--- a/packages/frontend/component/src/ui/modal/modal.stories.tsx
+++ b/packages/frontend/component/src/ui/modal/modal.stories.tsx
@@ -2,10 +2,14 @@ import type { Meta, StoryFn } from '@storybook/react';
import { useCallback, useState } from 'react';
import { Button } from '../button';
-import { Input, type InputProps } from '../input';
-import { ConfirmModal, type ConfirmModalProps } from './confirm-modal';
-import { Modal, type ModalProps } from './modal';
-import { OverlayModal, type OverlayModalProps } from './overlay-modal';
+import type { InputProps } from '../input';
+import { Input } from '../input';
+import type { ConfirmModalProps } from './confirm-modal';
+import { ConfirmModal } from './confirm-modal';
+import type { ModalProps } from './modal';
+import { Modal } from './modal';
+import type { OverlayModalProps } from './overlay-modal';
+import { OverlayModal } from './overlay-modal';
export default {
title: 'UI/Modal',
diff --git a/packages/frontend/component/src/ui/modal/modal.tsx b/packages/frontend/component/src/ui/modal/modal.tsx
index b8a23631c3..39a586a810 100644
--- a/packages/frontend/component/src/ui/modal/modal.tsx
+++ b/packages/frontend/component/src/ui/modal/modal.tsx
@@ -8,9 +8,11 @@ import type {
import * as Dialog from '@radix-ui/react-dialog';
import { assignInlineVars } from '@vanilla-extract/dynamic';
import clsx from 'clsx';
-import { type CSSProperties, forwardRef } from 'react';
+import type { CSSProperties } from 'react';
+import { forwardRef } from 'react';
-import { IconButton, type IconButtonProps } from '../button';
+import type { IconButtonProps } from '../button';
+import { IconButton } from '../button';
import * as styles from './styles.css';
export interface ModalProps extends DialogProps {
diff --git a/packages/frontend/component/src/ui/modal/overlay-modal.tsx b/packages/frontend/component/src/ui/modal/overlay-modal.tsx
index 88fc22e65f..eb06eec8f2 100644
--- a/packages/frontend/component/src/ui/modal/overlay-modal.tsx
+++ b/packages/frontend/component/src/ui/modal/overlay-modal.tsx
@@ -3,8 +3,10 @@ import { cssVar } from '@toeverything/theme';
import { memo, useCallback } from 'react';
import { Link } from 'react-router-dom';
-import { Button, type ButtonProps } from '../button';
-import { Modal, type ModalProps } from './modal';
+import type { ButtonProps } from '../button';
+import { Button } from '../button';
+import type { ModalProps } from './modal';
+import { Modal } from './modal';
import * as styles from './overlay-modal.css';
const defaultContentOptions: ModalProps['contentOptions'] = {
diff --git a/packages/frontend/component/src/ui/popover/popover.tsx b/packages/frontend/component/src/ui/popover/popover.tsx
index e9031c79c8..1f5c794fa7 100644
--- a/packages/frontend/component/src/ui/popover/popover.tsx
+++ b/packages/frontend/component/src/ui/popover/popover.tsx
@@ -5,7 +5,8 @@ import type {
} from '@radix-ui/react-popover';
import * as PopoverPrimitive from '@radix-ui/react-popover';
import clsx from 'clsx';
-import { type ReactNode, useMemo } from 'react';
+import type { ReactNode } from 'react';
+import { useMemo } from 'react';
import * as styles from './styles.css';
diff --git a/packages/frontend/component/src/ui/resize-panel/resize-panel.tsx b/packages/frontend/component/src/ui/resize-panel/resize-panel.tsx
index 778af0c008..be5a61be29 100644
--- a/packages/frontend/component/src/ui/resize-panel/resize-panel.tsx
+++ b/packages/frontend/component/src/ui/resize-panel/resize-panel.tsx
@@ -1,10 +1,6 @@
import clsx from 'clsx';
-import {
- type HTMLAttributes,
- type PropsWithChildren,
- useEffect,
- useRef,
-} from 'react';
+import type { HTMLAttributes, PropsWithChildren } from 'react';
+import { useEffect, useRef } from 'react';
import * as styles from './styles.css';
diff --git a/packages/frontend/component/src/ui/scrollbar/scrollable.tsx b/packages/frontend/component/src/ui/scrollbar/scrollable.tsx
index 7b2da6585f..93287ccd88 100644
--- a/packages/frontend/component/src/ui/scrollbar/scrollable.tsx
+++ b/packages/frontend/component/src/ui/scrollbar/scrollable.tsx
@@ -1,6 +1,7 @@
import * as ScrollArea from '@radix-ui/react-scroll-area';
import clsx from 'clsx';
-import { forwardRef, type RefAttributes } from 'react';
+import type { RefAttributes } from 'react';
+import { forwardRef } from 'react';
import * as styles from './index.css';
diff --git a/packages/frontend/component/src/ui/scrollbar/scrollbar.stories.tsx b/packages/frontend/component/src/ui/scrollbar/scrollbar.stories.tsx
index a7f470f3f7..6b0ac811b6 100644
--- a/packages/frontend/component/src/ui/scrollbar/scrollbar.stories.tsx
+++ b/packages/frontend/component/src/ui/scrollbar/scrollbar.stories.tsx
@@ -1,6 +1,7 @@
import type { Meta, StoryFn } from '@storybook/react';
-import { ScrollableContainer, type ScrollableContainerProps } from './index';
+import type { ScrollableContainerProps } from './index';
+import { ScrollableContainer } from './index';
export default {
title: 'UI/Scrollbar',
diff --git a/packages/frontend/component/src/ui/scrollbar/scrollbar.tsx b/packages/frontend/component/src/ui/scrollbar/scrollbar.tsx
index d082ce5e2f..2d2291428a 100644
--- a/packages/frontend/component/src/ui/scrollbar/scrollbar.tsx
+++ b/packages/frontend/component/src/ui/scrollbar/scrollbar.tsx
@@ -1,6 +1,7 @@
import * as ScrollArea from '@radix-ui/react-scroll-area';
import clsx from 'clsx';
-import { type PropsWithChildren, useRef } from 'react';
+import type { PropsWithChildren } from 'react';
+import { useRef } from 'react';
import * as styles from './index.css';
import { useHasScrollTop } from './use-has-scroll-top';
diff --git a/packages/frontend/component/src/ui/scrollbar/use-has-scroll-top.tsx b/packages/frontend/component/src/ui/scrollbar/use-has-scroll-top.tsx
index 31088ece8e..b5f5cace49 100644
--- a/packages/frontend/component/src/ui/scrollbar/use-has-scroll-top.tsx
+++ b/packages/frontend/component/src/ui/scrollbar/use-has-scroll-top.tsx
@@ -1,4 +1,5 @@
-import { type RefObject, useEffect, useState } from 'react';
+import type { RefObject } from 'react';
+import { useEffect, useState } from 'react';
export function useHasScrollTop(ref: RefObject | null) {
const [hasScrollTop, setHasScrollTop] = useState(false);
diff --git a/packages/frontend/component/src/ui/skeleton/skeleton.stories.tsx b/packages/frontend/component/src/ui/skeleton/skeleton.stories.tsx
index 8ee1f7c3d3..1df7ea8e7d 100644
--- a/packages/frontend/component/src/ui/skeleton/skeleton.stories.tsx
+++ b/packages/frontend/component/src/ui/skeleton/skeleton.stories.tsx
@@ -1,6 +1,7 @@
import type { Meta, StoryFn } from '@storybook/react';
-import { Skeleton, type SkeletonProps } from './index';
+import type { SkeletonProps } from './index';
+import { Skeleton } from './index';
export default {
title: 'UI/Skeleton',
diff --git a/packages/frontend/component/src/ui/switch/switch.stories.tsx b/packages/frontend/component/src/ui/switch/switch.stories.tsx
index c9d08eedd1..2f3593355b 100644
--- a/packages/frontend/component/src/ui/switch/switch.stories.tsx
+++ b/packages/frontend/component/src/ui/switch/switch.stories.tsx
@@ -1,6 +1,7 @@
import type { Meta, StoryFn } from '@storybook/react';
-import { Switch, type SwitchProps } from './index';
+import type { SwitchProps } from './index';
+import { Switch } from './index';
export default {
title: 'UI/Switch',
diff --git a/packages/frontend/component/src/ui/switch/switch.tsx b/packages/frontend/component/src/ui/switch/switch.tsx
index 8b3cb01e6f..b8a78ac9f7 100644
--- a/packages/frontend/component/src/ui/switch/switch.tsx
+++ b/packages/frontend/component/src/ui/switch/switch.tsx
@@ -1,11 +1,7 @@
// components/switch.tsx
import clsx from 'clsx';
-import {
- type HTMLAttributes,
- type ReactNode,
- useCallback,
- useState,
-} from 'react';
+import type { HTMLAttributes, ReactNode } from 'react';
+import { useCallback, useState } from 'react';
import * as styles from './index.css';
diff --git a/packages/frontend/component/src/ui/tooltip/tooltip.stories.tsx b/packages/frontend/component/src/ui/tooltip/tooltip.stories.tsx
index 13942d6628..db9010a6dd 100644
--- a/packages/frontend/component/src/ui/tooltip/tooltip.stories.tsx
+++ b/packages/frontend/component/src/ui/tooltip/tooltip.stories.tsx
@@ -1,7 +1,8 @@
import type { Meta, StoryFn } from '@storybook/react';
import { Button } from '../button';
-import Tooltip, { type TooltipProps } from './index';
+import type { TooltipProps } from './index';
+import Tooltip from './index';
export default {
title: 'UI/Tooltip',
diff --git a/packages/frontend/core/src/bootstrap/edgeless-template.ts b/packages/frontend/core/src/bootstrap/edgeless-template.ts
index 5bd085e100..da9a6c92aa 100644
--- a/packages/frontend/core/src/bootstrap/edgeless-template.ts
+++ b/packages/frontend/core/src/bootstrap/edgeless-template.ts
@@ -1,7 +1,5 @@
import { builtInTemplates } from '@affine/templates/edgeless';
-import {
- EdgelessTemplatePanel,
- type TemplateManager,
-} from '@blocksuite/blocks';
+import type { TemplateManager } from '@blocksuite/blocks';
+import { EdgelessTemplatePanel } from '@blocksuite/blocks';
EdgelessTemplatePanel.templates.extend(builtInTemplates as TemplateManager);
diff --git a/packages/frontend/core/src/commands/affine-settings.tsx b/packages/frontend/core/src/commands/affine-settings.tsx
index 26f5d1797d..c3762709da 100644
--- a/packages/frontend/core/src/commands/affine-settings.tsx
+++ b/packages/frontend/core/src/commands/affine-settings.tsx
@@ -1,12 +1,12 @@
import type { useAFFiNEI18N } from '@affine/i18n/hooks';
import { SettingsIcon } from '@blocksuite/icons';
import type { AffineEditorContainer } from '@blocksuite/presets';
-import { appSettingAtom } from '@toeverything/infra';
import {
+ appSettingAtom,
PreconditionStrategy,
registerAffineCommand,
} from '@toeverything/infra';
-import { type createStore } from 'jotai';
+import type { createStore } from 'jotai';
import type { useTheme } from 'next-themes';
import { openQuickSearchModalAtom } from '../atoms';
diff --git a/packages/frontend/core/src/components/affine/affine-error-boundary/affine-error-fallback.tsx b/packages/frontend/core/src/components/affine/affine-error-boundary/affine-error-fallback.tsx
index f3844529fe..36c9248c17 100644
--- a/packages/frontend/core/src/components/affine/affine-error-boundary/affine-error-fallback.tsx
+++ b/packages/frontend/core/src/components/affine/affine-error-boundary/affine-error-fallback.tsx
@@ -4,10 +4,8 @@ import type { FC } from 'react';
import { useMemo } from 'react';
import * as styles from './affine-error-fallback.css';
-import {
- ERROR_REFLECT_KEY,
- type FallbackProps,
-} from './error-basic/fallback-creator';
+import type { FallbackProps } from './error-basic/fallback-creator';
+import { ERROR_REFLECT_KEY } from './error-basic/fallback-creator';
import { DumpInfo } from './error-basic/info-logger';
import { AnyErrorFallback } from './error-fallbacks/any-error-fallback';
import { NoPageRootFallback } from './error-fallbacks/no-page-root-fallback';
diff --git a/packages/frontend/core/src/components/affine/affine-error-boundary/error-basic/error-detail.tsx b/packages/frontend/core/src/components/affine/affine-error-boundary/error-basic/error-detail.tsx
index c665c1f7cc..abd512fe4d 100644
--- a/packages/frontend/core/src/components/affine/affine-error-boundary/error-basic/error-detail.tsx
+++ b/packages/frontend/core/src/components/affine/affine-error-boundary/error-basic/error-detail.tsx
@@ -3,12 +3,8 @@ import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
import { Trans } from '@affine/i18n';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { useTheme } from 'next-themes';
-import {
- type FC,
- type PropsWithChildren,
- type ReactNode,
- useState,
-} from 'react';
+import type { FC, PropsWithChildren, ReactNode } from 'react';
+import { useState } from 'react';
import imageUrlFor404 from '../error-assets/404-status.assets.svg';
import imageUrlForDark500 from '../error-assets/dark-500-status.assets.svg';
diff --git a/packages/frontend/core/src/components/affine/affine-error-boundary/error-basic/info-logger.tsx b/packages/frontend/core/src/components/affine/affine-error-boundary/error-basic/info-logger.tsx
index a212fcab5a..2fc161d1c0 100644
--- a/packages/frontend/core/src/components/affine/affine-error-boundary/error-basic/info-logger.tsx
+++ b/packages/frontend/core/src/components/affine/affine-error-boundary/error-basic/info-logger.tsx
@@ -1,6 +1,8 @@
-import { WorkspaceListService } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
-import { useLiveData } from '@toeverything/infra';
+import {
+ useLiveData,
+ useService,
+ WorkspaceListService,
+} from '@toeverything/infra';
import { useEffect } from 'react';
import { useLocation, useParams } from 'react-router-dom';
diff --git a/packages/frontend/core/src/components/affine/affine-error-boundary/error-fallbacks/any-error-fallback.tsx b/packages/frontend/core/src/components/affine/affine-error-boundary/error-fallbacks/any-error-fallback.tsx
index 759af60973..5528ad77c9 100644
--- a/packages/frontend/core/src/components/affine/affine-error-boundary/error-fallbacks/any-error-fallback.tsx
+++ b/packages/frontend/core/src/components/affine/affine-error-boundary/error-fallbacks/any-error-fallback.tsx
@@ -1,5 +1,6 @@
import { useAFFiNEI18N } from '@affine/i18n/hooks';
-import { type FC, useCallback } from 'react';
+import type { FC } from 'react';
+import { useCallback } from 'react';
import { ErrorDetail } from '../error-basic/error-detail';
import type { FallbackProps } from '../error-basic/fallback-creator';
diff --git a/packages/frontend/core/src/components/affine/affine-error-boundary/index.tsx b/packages/frontend/core/src/components/affine/affine-error-boundary/index.tsx
index 9ee5e1cc5e..08f8a18bb1 100644
--- a/packages/frontend/core/src/components/affine/affine-error-boundary/index.tsx
+++ b/packages/frontend/core/src/components/affine/affine-error-boundary/index.tsx
@@ -3,7 +3,7 @@ import type { FC, PropsWithChildren } from 'react';
import { useCallback } from 'react';
import { AffineErrorFallback } from './affine-error-fallback';
-import { type FallbackProps } from './error-basic/fallback-creator';
+import type { FallbackProps } from './error-basic/fallback-creator';
export { type FallbackProps } from './error-basic/fallback-creator';
diff --git a/packages/frontend/core/src/components/affine/app-container.tsx b/packages/frontend/core/src/components/affine/app-container.tsx
index d680931ad9..aacc80c052 100644
--- a/packages/frontend/core/src/components/affine/app-container.tsx
+++ b/packages/frontend/core/src/components/affine/app-container.tsx
@@ -1,8 +1,6 @@
import { useAppSettingHelper } from '../../hooks/affine/use-app-setting-helper';
-import {
- AppContainer as AppContainerWithoutSettings,
- type WorkspaceRootProps,
-} from '../workspace';
+import type { WorkspaceRootProps } from '../workspace';
+import { AppContainer as AppContainerWithoutSettings } from '../workspace';
export const AppContainer = (props: WorkspaceRootProps) => {
const { appSettings } = useAppSettingHelper();
diff --git a/packages/frontend/core/src/components/affine/auth/after-sign-up-send-email.tsx b/packages/frontend/core/src/components/affine/auth/after-sign-up-send-email.tsx
index 99890b0be7..6623c613b9 100644
--- a/packages/frontend/core/src/components/affine/auth/after-sign-up-send-email.tsx
+++ b/packages/frontend/core/src/components/affine/auth/after-sign-up-send-email.tsx
@@ -8,7 +8,8 @@ import { Button } from '@affine/component/ui/button';
import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
import { Trans } from '@affine/i18n';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
-import { type FC, useCallback } from 'react';
+import type { FC } from 'react';
+import { useCallback } from 'react';
import { useCurrentLoginStatus } from '../../../hooks/affine/use-current-login-status';
import type { AuthPanelProps } from './index';
diff --git a/packages/frontend/core/src/components/affine/auth/index.tsx b/packages/frontend/core/src/components/affine/auth/index.tsx
index fe86068d03..52609d8dd4 100644
--- a/packages/frontend/core/src/components/affine/auth/index.tsx
+++ b/packages/frontend/core/src/components/affine/auth/index.tsx
@@ -1,8 +1,7 @@
-import {
- AuthModal as AuthModalBase,
- type AuthModalProps as AuthModalBaseProps,
-} from '@affine/component/auth-components';
-import { type FC, useCallback, useMemo } from 'react';
+import type { AuthModalProps as AuthModalBaseProps } from '@affine/component/auth-components';
+import { AuthModal as AuthModalBase } from '@affine/component/auth-components';
+import type { FC } from 'react';
+import { useCallback, useMemo } from 'react';
import { AfterSignInSendEmail } from './after-sign-in-send-email';
import { AfterSignUpSendEmail } from './after-sign-up-send-email';
diff --git a/packages/frontend/core/src/components/affine/auth/no-access.tsx b/packages/frontend/core/src/components/affine/auth/no-access.tsx
index 2d9cdc64ba..88762c3787 100644
--- a/packages/frontend/core/src/components/affine/auth/no-access.tsx
+++ b/packages/frontend/core/src/components/affine/auth/no-access.tsx
@@ -5,7 +5,8 @@ import {
} from '@affine/component/auth-components';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { NewIcon } from '@blocksuite/icons';
-import { type FC, useCallback } from 'react';
+import type { FC } from 'react';
+import { useCallback } from 'react';
import { useCurrentLoginStatus } from '../../../hooks/affine/use-current-login-status';
import type { AuthPanelProps } from './index';
diff --git a/packages/frontend/core/src/components/affine/auth/oauth.tsx b/packages/frontend/core/src/components/affine/auth/oauth.tsx
index cd92b4965e..c532024776 100644
--- a/packages/frontend/core/src/components/affine/auth/oauth.tsx
+++ b/packages/frontend/core/src/components/affine/auth/oauth.tsx
@@ -5,7 +5,8 @@ import {
} from '@affine/core/hooks/affine/use-server-config';
import { OAuthProviderType } from '@affine/graphql';
import { GithubIcon, GoogleDuotoneIcon } from '@blocksuite/icons';
-import { type ReactElement, useCallback, useState } from 'react';
+import type { ReactElement } from 'react';
+import { useCallback, useState } from 'react';
import { useAuth } from './use-auth';
diff --git a/packages/frontend/core/src/components/affine/auth/sign-in.tsx b/packages/frontend/core/src/components/affine/auth/sign-in.tsx
index aa5e8b0caf..390d87729a 100644
--- a/packages/frontend/core/src/components/affine/auth/sign-in.tsx
+++ b/packages/frontend/core/src/components/affine/auth/sign-in.tsx
@@ -5,16 +5,13 @@ import {
} from '@affine/component/auth-components';
import { Button } from '@affine/component/ui/button';
import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
-import {
- findGraphQLError,
- type GetUserQuery,
- getUserQuery,
-} from '@affine/graphql';
+import type { GetUserQuery } from '@affine/graphql';
+import { findGraphQLError, getUserQuery } from '@affine/graphql';
import { Trans } from '@affine/i18n';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { ArrowDownBigIcon } from '@blocksuite/icons';
-import { type FC, useState } from 'react';
-import { useCallback } from 'react';
+import type { FC } from 'react';
+import { useCallback, useState } from 'react';
import { useCurrentLoginStatus } from '../../../hooks/affine/use-current-login-status';
import { useMutation } from '../../../hooks/use-mutation';
diff --git a/packages/frontend/core/src/components/affine/awareness/index.tsx b/packages/frontend/core/src/components/affine/awareness/index.tsx
index f56d672fb1..32c7b32f1c 100644
--- a/packages/frontend/core/src/components/affine/awareness/index.tsx
+++ b/packages/frontend/core/src/components/affine/awareness/index.tsx
@@ -1,5 +1,4 @@
-import { useService } from '@toeverything/infra';
-import { useLiveData } from '@toeverything/infra';
+import { useLiveData, useService } from '@toeverything/infra';
import { Suspense, useEffect } from 'react';
import { useCurrentLoginStatus } from '../../../hooks/affine/use-current-login-status';
diff --git a/packages/frontend/core/src/components/affine/create-workspace-modal/index.tsx b/packages/frontend/core/src/components/affine/create-workspace-modal/index.tsx
index e2ea6af94e..62210d1a19 100644
--- a/packages/frontend/core/src/components/affine/create-workspace-modal/index.tsx
+++ b/packages/frontend/core/src/components/affine/create-workspace-modal/index.tsx
@@ -1,9 +1,6 @@
import { Avatar, Input, Switch, toast } from '@affine/component';
-import {
- ConfirmModal,
- type ConfirmModalProps,
- Modal,
-} from '@affine/component/ui/modal';
+import type { ConfirmModalProps } from '@affine/component/ui/modal';
+import { ConfirmModal, Modal } from '@affine/component/ui/modal';
import { authAtom, openDisableCloudAlertModalAtom } from '@affine/core/atoms';
import { useCurrentLoginStatus } from '@affine/core/hooks/affine/use-current-login-status';
import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
@@ -12,13 +9,15 @@ import { apis } from '@affine/electron-api';
import { WorkspaceFlavour } from '@affine/env/workspace';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { _addLocalWorkspace } from '@affine/workspace-impl';
-import { WorkspaceManager } from '@toeverything/infra';
-import { buildShowcaseWorkspace, initEmptyPage } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
+import {
+ buildShowcaseWorkspace,
+ initEmptyPage,
+ useService,
+ WorkspaceManager,
+} from '@toeverything/infra';
import { useSetAtom } from 'jotai';
import type { KeyboardEvent } from 'react';
-import { useLayoutEffect } from 'react';
-import { useCallback, useState } from 'react';
+import { useCallback, useLayoutEffect, useState } from 'react';
import { CloudSvg } from '../share-page-modal/cloud-svg';
import * as styles from './index.css';
diff --git a/packages/frontend/core/src/components/affine/enable-affine-cloud-modal/index.tsx b/packages/frontend/core/src/components/affine/enable-affine-cloud-modal/index.tsx
index 441e0a82b9..bd33049e69 100644
--- a/packages/frontend/core/src/components/affine/enable-affine-cloud-modal/index.tsx
+++ b/packages/frontend/core/src/components/affine/enable-affine-cloud-modal/index.tsx
@@ -1,7 +1,5 @@
-import {
- ConfirmModal,
- type ConfirmModalProps,
-} from '@affine/component/ui/modal';
+import type { ConfirmModalProps } from '@affine/component/ui/modal';
+import { ConfirmModal } from '@affine/component/ui/modal';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { useSetAtom } from 'jotai';
import { useCallback } from 'react';
diff --git a/packages/frontend/core/src/components/affine/language-menu/index.tsx b/packages/frontend/core/src/components/affine/language-menu/index.tsx
index 9281e5c69c..6d30a02d3d 100644
--- a/packages/frontend/core/src/components/affine/language-menu/index.tsx
+++ b/packages/frontend/core/src/components/affine/language-menu/index.tsx
@@ -1,5 +1,6 @@
import { Menu, MenuItem, MenuTrigger } from '@affine/component/ui/menu';
-import { memo, type ReactElement } from 'react';
+import type { ReactElement } from 'react';
+import { memo } from 'react';
import { useLanguageHelper } from '../../../hooks/affine/use-language-helper';
diff --git a/packages/frontend/core/src/components/affine/onboarding/curve-paper/segments.tsx b/packages/frontend/core/src/components/affine/onboarding/curve-paper/segments.tsx
index 80da82289d..0e318ad8f4 100644
--- a/packages/frontend/core/src/components/affine/onboarding/curve-paper/segments.tsx
+++ b/packages/frontend/core/src/components/affine/onboarding/curve-paper/segments.tsx
@@ -1,4 +1,4 @@
-import { type ReactNode } from 'react';
+import type { ReactNode } from 'react';
import { Segment } from './segment';
diff --git a/packages/frontend/core/src/components/affine/onboarding/onboarding.tsx b/packages/frontend/core/src/components/affine/onboarding/onboarding.tsx
index 9a0751c5ab..cd6c86512d 100644
--- a/packages/frontend/core/src/components/affine/onboarding/onboarding.tsx
+++ b/packages/frontend/core/src/components/affine/onboarding/onboarding.tsx
@@ -1,4 +1,5 @@
-import { type CSSProperties, useCallback, useState } from 'react';
+import type { CSSProperties } from 'react';
+import { useCallback, useState } from 'react';
import { AnimateInTooltip } from './animate-in-tooltip';
import { articles } from './articles';
diff --git a/packages/frontend/core/src/components/affine/onboarding/paper-steps.tsx b/packages/frontend/core/src/components/affine/onboarding/paper-steps.tsx
index bf6d400687..4323ea07d1 100644
--- a/packages/frontend/core/src/components/affine/onboarding/paper-steps.tsx
+++ b/packages/frontend/core/src/components/affine/onboarding/paper-steps.tsx
@@ -3,8 +3,12 @@ import { useCallback, useEffect, useState } from 'react';
import { AnimateIn } from './steps/animate-in';
import { EdgelessSwitch } from './steps/edgeless-switch';
import { Unfolding } from './steps/unfolding';
-import type { ArticleId, OnboardingStatus, OnboardingStep } from './types';
-import { type ArticleOption } from './types';
+import type {
+ ArticleId,
+ ArticleOption,
+ OnboardingStatus,
+ OnboardingStep,
+} from './types';
interface PaperStepsProps {
show?: boolean;
diff --git a/packages/frontend/core/src/components/affine/onboarding/steps/animate-in.tsx b/packages/frontend/core/src/components/affine/onboarding/steps/animate-in.tsx
index bec41cecdc..e6adc0f71e 100644
--- a/packages/frontend/core/src/components/affine/onboarding/steps/animate-in.tsx
+++ b/packages/frontend/core/src/components/affine/onboarding/steps/animate-in.tsx
@@ -1,7 +1,8 @@
import anime from 'animejs';
import { useEffect } from 'react';
-import { Paper, type PaperProps } from '../curve-paper/paper';
+import type { PaperProps } from '../curve-paper/paper';
+import { Paper } from '../curve-paper/paper';
import * as paperStyles from '../curve-paper/paper.css';
import type { ArticleOption } from '../types';
import * as styles from './animate-in.css';
diff --git a/packages/frontend/core/src/components/affine/onboarding/steps/edgeless-switch.tsx b/packages/frontend/core/src/components/affine/onboarding/steps/edgeless-switch.tsx
index 43d2d48d13..1684960dad 100644
--- a/packages/frontend/core/src/components/affine/onboarding/steps/edgeless-switch.tsx
+++ b/packages/frontend/core/src/components/affine/onboarding/steps/edgeless-switch.tsx
@@ -1,13 +1,8 @@
import { Button } from '@affine/component';
import clsx from 'clsx';
import { debounce } from 'lodash-es';
-import {
- type CSSProperties,
- useCallback,
- useEffect,
- useRef,
- useState,
-} from 'react';
+import type { CSSProperties } from 'react';
+import { useCallback, useEffect, useRef, useState } from 'react';
import Logo from '../assets/logo';
import { OnboardingBlock } from '../switch-widgets/block';
diff --git a/packages/frontend/core/src/components/affine/onboarding/switch-widgets/block.tsx b/packages/frontend/core/src/components/affine/onboarding/switch-widgets/block.tsx
index d564a6df8b..39e76585f0 100644
--- a/packages/frontend/core/src/components/affine/onboarding/switch-widgets/block.tsx
+++ b/packages/frontend/core/src/components/affine/onboarding/switch-widgets/block.tsx
@@ -1,6 +1,6 @@
import type { CSSProperties } from 'react';
-import { type EdgelessSwitchMode, type OnboardingBlockOption } from '../types';
+import type { EdgelessSwitchMode, OnboardingBlockOption } from '../types';
import { onboardingBlock } from './style.css';
interface OnboardingBlockProps extends OnboardingBlockOption {
diff --git a/packages/frontend/core/src/components/affine/onboarding/switch-widgets/toolbar.tsx b/packages/frontend/core/src/components/affine/onboarding/switch-widgets/toolbar.tsx
index 67f338f714..16e3e24eb1 100644
--- a/packages/frontend/core/src/components/affine/onboarding/switch-widgets/toolbar.tsx
+++ b/packages/frontend/core/src/components/affine/onboarding/switch-widgets/toolbar.tsx
@@ -1,4 +1,5 @@
-import { type CSSProperties, memo } from 'react';
+import type { CSSProperties } from 'react';
+import { memo } from 'react';
import { toolbar, toolbarPop } from './style.css';
diff --git a/packages/frontend/core/src/components/affine/page-history-modal/data.ts b/packages/frontend/core/src/components/affine/page-history-modal/data.ts
index 49935e1898..bdc57e6e54 100644
--- a/packages/frontend/core/src/components/affine/page-history-modal/data.ts
+++ b/packages/frontend/core/src/components/affine/page-history-modal/data.ts
@@ -2,9 +2,9 @@ import { useDocMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { useDocCollectionPage } from '@affine/core/hooks/use-block-suite-workspace-page';
import { timestampToLocalDate } from '@affine/core/utils';
import { DebugLogger } from '@affine/debug';
+import type { ListHistoryQuery } from '@affine/graphql';
import {
fetchWithTraceReport,
- type ListHistoryQuery,
listHistoryQuery,
recoverDocMutation,
} from '@affine/graphql';
diff --git a/packages/frontend/core/src/components/affine/page-history-modal/history-modal.tsx b/packages/frontend/core/src/components/affine/page-history-modal/history-modal.tsx
index e6651179eb..2da233d67f 100644
--- a/packages/frontend/core/src/components/affine/page-history-modal/history-modal.tsx
+++ b/packages/frontend/core/src/components/affine/page-history-modal/history-modal.tsx
@@ -10,16 +10,15 @@ import { useWorkspaceQuota } from '@affine/core/hooks/use-workspace-quota';
import { Trans } from '@affine/i18n';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { CloseIcon, ToggleCollapseIcon } from '@blocksuite/icons';
-import type { Doc as BlockSuiteDoc } from '@blocksuite/store';
-import { type DocCollection } from '@blocksuite/store';
+import type { Doc as BlockSuiteDoc, DocCollection } from '@blocksuite/store';
import * as Collapsible from '@radix-ui/react-collapsible';
import type { DialogContentProps } from '@radix-ui/react-dialog';
-import { Doc, type PageMode, Workspace } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
+import type { PageMode } from '@toeverything/infra';
+import { Doc, useService, Workspace } from '@toeverything/infra';
import { atom, useAtom, useSetAtom } from 'jotai';
+import type { PropsWithChildren } from 'react';
import {
Fragment,
- type PropsWithChildren,
Suspense,
useCallback,
useLayoutEffect,
diff --git a/packages/frontend/core/src/components/affine/page-properties/icons-selector.tsx b/packages/frontend/core/src/components/affine/page-properties/icons-selector.tsx
index 8ebd539eee..5f74324813 100644
--- a/packages/frontend/core/src/components/affine/page-properties/icons-selector.tsx
+++ b/packages/frontend/core/src/components/affine/page-properties/icons-selector.tsx
@@ -3,7 +3,8 @@ import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { chunk } from 'lodash-es';
import { useEffect, useRef } from 'react';
-import { iconNames, nameToIcon, type PagePropertyIcon } from './icons-mapping';
+import type { PagePropertyIcon } from './icons-mapping';
+import { iconNames, nameToIcon } from './icons-mapping';
import * as styles from './icons-selector.css';
const iconsPerRow = 6;
diff --git a/packages/frontend/core/src/components/affine/page-properties/menu-items.tsx b/packages/frontend/core/src/components/affine/page-properties/menu-items.tsx
index 1bba6bcf80..552f66430b 100644
--- a/packages/frontend/core/src/components/affine/page-properties/menu-items.tsx
+++ b/packages/frontend/core/src/components/affine/page-properties/menu-items.tsx
@@ -1,26 +1,21 @@
+import type { MenuItemProps } from '@affine/component';
import {
Input,
MenuIcon,
MenuItem,
- type MenuItemProps,
MenuSeparator,
Scrollable,
} from '@affine/component';
import type { PageInfoCustomPropertyMeta } from '@affine/core/modules/workspace/properties/schema';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
-import {
- cloneElement,
- isValidElement,
- type KeyboardEventHandler,
- type MouseEventHandler,
- useCallback,
-} from 'react';
+import type { KeyboardEventHandler, MouseEventHandler } from 'react';
+import { cloneElement, isValidElement, useCallback } from 'react';
+import type { PagePropertyIcon } from './icons-mapping';
import {
getDefaultIconName,
getSafeIconName,
nameToIcon,
- type PagePropertyIcon,
} from './icons-mapping';
import { IconsSelectorButton } from './icons-selector';
import * as styles from './styles.css';
diff --git a/packages/frontend/core/src/components/affine/page-properties/property-row-value-renderer.tsx b/packages/frontend/core/src/components/affine/page-properties/property-row-value-renderer.tsx
index dac2faab4b..99cfefefe5 100644
--- a/packages/frontend/core/src/components/affine/page-properties/property-row-value-renderer.tsx
+++ b/packages/frontend/core/src/components/affine/page-properties/property-row-value-renderer.tsx
@@ -10,13 +10,8 @@ import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { assertExists } from '@blocksuite/global/utils';
import { Doc, useService, Workspace } from '@toeverything/infra';
import { noop } from 'lodash-es';
-import {
- type ChangeEventHandler,
- useCallback,
- useContext,
- useEffect,
- useState,
-} from 'react';
+import type { ChangeEventHandler } from 'react';
+import { useCallback, useContext, useEffect, useState } from 'react';
import { managerContext } from './common';
import * as styles from './styles.css';
diff --git a/packages/frontend/core/src/components/affine/page-properties/table.tsx b/packages/frontend/core/src/components/affine/page-properties/table.tsx
index e58871aff0..4776c63d68 100644
--- a/packages/frontend/core/src/components/affine/page-properties/table.tsx
+++ b/packages/frontend/core/src/components/affine/page-properties/table.tsx
@@ -1,10 +1,10 @@
+import type { MenuProps } from '@affine/component';
import {
Button,
IconButton,
Menu,
MenuIcon,
MenuItem,
- type MenuProps,
Tooltip,
} from '@affine/component';
import { useCurrentWorkspacePropertiesAdapter } from '@affine/core/hooks/use-affine-adapter';
@@ -28,10 +28,9 @@ import {
ViewIcon,
} from '@blocksuite/icons';
import type { Doc } from '@blocksuite/store';
+import type { DragEndEvent, DraggableAttributes } from '@dnd-kit/core';
import {
DndContext,
- type DragEndEvent,
- type DraggableAttributes,
PointerSensor,
useSensor,
useSensors,
@@ -46,11 +45,13 @@ import clsx from 'clsx';
import { use } from 'foxact/use';
import { atom, useAtomValue, useSetAtom } from 'jotai';
import type React from 'react';
+import type {
+ CSSProperties,
+ MouseEvent,
+ MouseEventHandler,
+ PropsWithChildren,
+} from 'react';
import {
- type CSSProperties,
- type MouseEvent,
- type MouseEventHandler,
- type PropsWithChildren,
Suspense,
useCallback,
useContext,
@@ -62,14 +63,11 @@ import {
import { AffinePageReference } from '../reference-link';
import { managerContext } from './common';
import { ConfirmDeletePropertyModal } from './confirm-delete-property-modal';
-import {
- getDefaultIconName,
- nameToIcon,
- type PagePropertyIcon,
-} from './icons-mapping';
+import type { PagePropertyIcon } from './icons-mapping';
+import { getDefaultIconName, nameToIcon } from './icons-mapping';
+import type { MenuItemOption } from './menu-items';
import {
EditPropertyNameMenuItem,
- type MenuItemOption,
PropertyTypeMenuItem,
renderMenuItemOptions,
} from './menu-items';
diff --git a/packages/frontend/core/src/components/affine/page-properties/tags-inline-editor.tsx b/packages/frontend/core/src/components/affine/page-properties/tags-inline-editor.tsx
index 1d0b745a4f..3f83c166b5 100644
--- a/packages/frontend/core/src/components/affine/page-properties/tags-inline-editor.tsx
+++ b/packages/frontend/core/src/components/affine/page-properties/tags-inline-editor.tsx
@@ -1,30 +1,19 @@
-import {
- IconButton,
- Input,
- Menu,
- type MenuProps,
- Scrollable,
-} from '@affine/component';
+import type { MenuProps } from '@affine/component';
+import { IconButton, Input, Menu, Scrollable } from '@affine/component';
import { useNavigateHelper } from '@affine/core/hooks/use-navigate-helper';
import { DeleteTagConfirmModal, TagService } from '@affine/core/modules/tag';
import { WorkspaceLegacyProperties } from '@affine/core/modules/workspace';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { DeleteIcon, MoreHorizontalIcon, TagsIcon } from '@blocksuite/icons';
-import { useLiveData } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
+import { useLiveData, useService } from '@toeverything/infra';
import clsx from 'clsx';
-import {
- type HTMLAttributes,
- type PropsWithChildren,
- useCallback,
- useMemo,
- useReducer,
- useState,
-} from 'react';
+import type { HTMLAttributes, PropsWithChildren } from 'react';
+import { useCallback, useMemo, useReducer, useState } from 'react';
import { TagItem, TempTagItem } from '../../page-list';
import { tagColors } from './common';
-import { type MenuItemOption, renderMenuItemOptions } from './menu-items';
+import type { MenuItemOption } from './menu-items';
+import { renderMenuItemOptions } from './menu-items';
import * as styles from './tags-inline-editor.css';
interface TagsEditorProps {
diff --git a/packages/frontend/core/src/components/affine/reference-link/index.tsx b/packages/frontend/core/src/components/affine/reference-link/index.tsx
index 8f3c14651e..29c7e3b37c 100644
--- a/packages/frontend/core/src/components/affine/reference-link/index.tsx
+++ b/packages/frontend/core/src/components/affine/reference-link/index.tsx
@@ -4,7 +4,7 @@ import { WorkbenchLink } from '@affine/core/modules/workbench';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { LinkedPageIcon, TodayIcon } from '@blocksuite/icons';
import type { DocCollection } from '@blocksuite/store';
-import { type PropsWithChildren } from 'react';
+import type { PropsWithChildren } from 'react';
import * as styles from './styles.css';
diff --git a/packages/frontend/core/src/components/affine/setting-modal/account-setting/index.tsx b/packages/frontend/core/src/components/affine/setting-modal/account-setting/index.tsx
index b6a23a2aaa..42de0c33c3 100644
--- a/packages/frontend/core/src/components/affine/setting-modal/account-setting/index.tsx
+++ b/packages/frontend/core/src/components/affine/setting-modal/account-setting/index.tsx
@@ -20,14 +20,8 @@ import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { ArrowRightSmallIcon, CameraIcon } from '@blocksuite/icons';
import bytes from 'bytes';
import { useSetAtom } from 'jotai';
-import {
- type FC,
- type MouseEvent,
- Suspense,
- useCallback,
- useMemo,
- useState,
-} from 'react';
+import type { FC, MouseEvent } from 'react';
+import { Suspense, useCallback, useMemo, useState } from 'react';
import {
authAtom,
diff --git a/packages/frontend/core/src/components/affine/setting-modal/general-setting/about/index.tsx b/packages/frontend/core/src/components/affine/setting-modal/general-setting/about/index.tsx
index c51a488fcc..5774d0ff8a 100644
--- a/packages/frontend/core/src/components/affine/setting-modal/general-setting/about/index.tsx
+++ b/packages/frontend/core/src/components/affine/setting-modal/general-setting/about/index.tsx
@@ -1,7 +1,9 @@
import { Switch } from '@affine/component';
-import { SettingHeader } from '@affine/component/setting-components';
-import { SettingRow } from '@affine/component/setting-components';
-import { SettingWrapper } from '@affine/component/setting-components';
+import {
+ SettingHeader,
+ SettingRow,
+ SettingWrapper,
+} from '@affine/component/setting-components';
import { useAppUpdater } from '@affine/core/hooks/use-app-updater';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { ArrowRightSmallIcon, OpenInNewIcon } from '@blocksuite/icons';
diff --git a/packages/frontend/core/src/components/affine/setting-modal/general-setting/appearance/date-format-setting.tsx b/packages/frontend/core/src/components/affine/setting-modal/general-setting/appearance/date-format-setting.tsx
index ab0fa3e812..770e6cb486 100644
--- a/packages/frontend/core/src/components/affine/setting-modal/general-setting/appearance/date-format-setting.tsx
+++ b/packages/frontend/core/src/components/affine/setting-modal/general-setting/appearance/date-format-setting.tsx
@@ -1,5 +1,6 @@
import { Menu, MenuItem, MenuTrigger } from '@affine/component/ui/menu';
-import { dateFormatOptions, type DateFormats } from '@toeverything/infra';
+import type { DateFormats } from '@toeverything/infra';
+import { dateFormatOptions } from '@toeverything/infra';
import dayjs from 'dayjs';
import { useCallback } from 'react';
diff --git a/packages/frontend/core/src/components/affine/setting-modal/general-setting/appearance/index.tsx b/packages/frontend/core/src/components/affine/setting-modal/general-setting/appearance/index.tsx
index b47bef92e4..d9490fa849 100644
--- a/packages/frontend/core/src/components/affine/setting-modal/general-setting/appearance/index.tsx
+++ b/packages/frontend/core/src/components/affine/setting-modal/general-setting/appearance/index.tsx
@@ -1,13 +1,12 @@
import { RadioButton, RadioButtonGroup, Switch } from '@affine/component';
-import { SettingHeader } from '@affine/component/setting-components';
-import { SettingRow } from '@affine/component/setting-components';
-import { SettingWrapper } from '@affine/component/setting-components';
-import { useAFFiNEI18N } from '@affine/i18n/hooks';
import {
- type AppSetting,
- fontStyleOptions,
- windowFrameStyleOptions,
-} from '@toeverything/infra';
+ SettingHeader,
+ SettingRow,
+ SettingWrapper,
+} from '@affine/component/setting-components';
+import { useAFFiNEI18N } from '@affine/i18n/hooks';
+import type { AppSetting } from '@toeverything/infra';
+import { fontStyleOptions, windowFrameStyleOptions } from '@toeverything/infra';
import { useTheme } from 'next-themes';
import { useCallback } from 'react';
diff --git a/packages/frontend/core/src/components/affine/setting-modal/general-setting/billing/index.tsx b/packages/frontend/core/src/components/affine/setting-modal/general-setting/billing/index.tsx
index 1ec3e0d402..64686fdb9f 100644
--- a/packages/frontend/core/src/components/affine/setting-modal/general-setting/billing/index.tsx
+++ b/packages/frontend/core/src/components/affine/setting-modal/general-setting/billing/index.tsx
@@ -8,10 +8,10 @@ import {
import { Button, IconButton } from '@affine/component/ui/button';
import { Loading } from '@affine/component/ui/loading';
import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
+import type { InvoicesQuery } from '@affine/graphql';
import {
createCustomerPortalMutation,
getInvoicesCountQuery,
- type InvoicesQuery,
invoicesQuery,
InvoiceStatus,
pricesQuery,
@@ -29,10 +29,8 @@ import { openSettingModalAtom } from '../../../../../atoms';
import { useCurrentLoginStatus } from '../../../../../hooks/affine/use-current-login-status';
import { useMutation } from '../../../../../hooks/use-mutation';
import { useQuery } from '../../../../../hooks/use-query';
-import {
- type SubscriptionMutator,
- useUserSubscription,
-} from '../../../../../hooks/use-subscription';
+import type { SubscriptionMutator } from '../../../../../hooks/use-subscription';
+import { useUserSubscription } from '../../../../../hooks/use-subscription';
import { SWRErrorBoundary } from '../../../../pure/swr-error-bundary';
import { CancelAction, ResumeAction } from '../plans/actions';
import * as styles from './style.css';
diff --git a/packages/frontend/core/src/components/affine/setting-modal/general-setting/plans/index.tsx b/packages/frontend/core/src/components/affine/setting-modal/general-setting/plans/index.tsx
index efd6b25f28..a24d2298f5 100644
--- a/packages/frontend/core/src/components/affine/setting-modal/general-setting/plans/index.tsx
+++ b/packages/frontend/core/src/components/affine/setting-modal/general-setting/plans/index.tsx
@@ -16,7 +16,8 @@ import { useCurrentLoginStatus } from '../../../../../hooks/affine/use-current-l
import { useQuery } from '../../../../../hooks/use-query';
import { useUserSubscription } from '../../../../../hooks/use-subscription';
import { PlanLayout } from './layout';
-import { type FixedPrice, getPlanDetail, PlanCard } from './plan-card';
+import type { FixedPrice } from './plan-card';
+import { getPlanDetail, PlanCard } from './plan-card';
import { PlansSkeleton } from './skeleton';
import * as styles from './style.css';
diff --git a/packages/frontend/core/src/components/affine/setting-modal/general-setting/plans/modals.tsx b/packages/frontend/core/src/components/affine/setting-modal/general-setting/plans/modals.tsx
index 816d364e82..9df712e6b3 100644
--- a/packages/frontend/core/src/components/affine/setting-modal/general-setting/plans/modals.tsx
+++ b/packages/frontend/core/src/components/affine/setting-modal/general-setting/plans/modals.tsx
@@ -1,12 +1,10 @@
import { Button } from '@affine/component/ui/button';
-import {
- ConfirmModal,
- type ConfirmModalProps,
- Modal,
-} from '@affine/component/ui/modal';
+import type { ConfirmModalProps } from '@affine/component/ui/modal';
+import { ConfirmModal, Modal } from '@affine/component/ui/modal';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { DialogTrigger } from '@radix-ui/react-dialog';
-import { type ReactNode, useEffect, useRef } from 'react';
+import type { ReactNode } from 'react';
+import { useEffect, useRef } from 'react';
import * as styles from './style.css';
diff --git a/packages/frontend/core/src/components/affine/setting-modal/general-setting/plans/plan-card.tsx b/packages/frontend/core/src/components/affine/setting-modal/general-setting/plans/plan-card.tsx
index f7bdf1eac3..e917cd58a2 100644
--- a/packages/frontend/core/src/components/affine/setting-modal/general-setting/plans/plan-card.tsx
+++ b/packages/frontend/core/src/components/affine/setting-modal/general-setting/plans/plan-card.tsx
@@ -15,17 +15,10 @@ import {
import { Trans } from '@affine/i18n';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { DoneIcon } from '@blocksuite/icons';
-import { useSetAtom } from 'jotai';
-import { useAtom } from 'jotai';
+import { useAtom, useSetAtom } from 'jotai';
import { nanoid } from 'nanoid';
-import {
- type PropsWithChildren,
- useCallback,
- useEffect,
- useMemo,
- useRef,
- useState,
-} from 'react';
+import type { PropsWithChildren } from 'react';
+import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
import { openPaymentDisableAtom } from '../../../../../atoms';
import { authAtom } from '../../../../../atoms/index';
diff --git a/packages/frontend/core/src/components/affine/setting-modal/general-setting/shortcuts/index.tsx b/packages/frontend/core/src/components/affine/setting-modal/general-setting/shortcuts/index.tsx
index aa6e0b49b8..7ac9bd2047 100644
--- a/packages/frontend/core/src/components/affine/setting-modal/general-setting/shortcuts/index.tsx
+++ b/packages/frontend/core/src/components/affine/setting-modal/general-setting/shortcuts/index.tsx
@@ -1,9 +1,11 @@
-import { SettingHeader } from '@affine/component/setting-components';
-import { SettingWrapper } from '@affine/component/setting-components';
+import {
+ SettingHeader,
+ SettingWrapper,
+} from '@affine/component/setting-components';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
+import type { ShortcutsInfo } from '../../../../../hooks/affine/use-shortcuts';
import {
- type ShortcutsInfo,
useEdgelessShortcuts,
useGeneralShortcuts,
useMarkdownShortcuts,
diff --git a/packages/frontend/core/src/components/affine/setting-modal/index.tsx b/packages/frontend/core/src/components/affine/setting-modal/index.tsx
index bad3cc6713..04afa2a5ad 100644
--- a/packages/frontend/core/src/components/affine/setting-modal/index.tsx
+++ b/packages/frontend/core/src/components/affine/setting-modal/index.tsx
@@ -1,6 +1,7 @@
import { Loading } from '@affine/component';
import { WorkspaceDetailSkeleton } from '@affine/component/setting-components';
-import { Modal, type ModalProps } from '@affine/component/ui/modal';
+import type { ModalProps } from '@affine/component/ui/modal';
+import { Modal } from '@affine/component/ui/modal';
import {
openIssueFeedbackModalAtom,
openStarAFFiNEModalAtom,
@@ -17,12 +18,8 @@ import { AccountSetting } from './account-setting';
import { GeneralSetting } from './general-setting';
import { SettingSidebar } from './setting-sidebar';
import * as style from './style.css';
-import {
- type ActiveTab,
- type GeneralSettingKey,
- GeneralSettingKeys,
- type WorkspaceSubTab,
-} from './types';
+import type { ActiveTab, GeneralSettingKey, WorkspaceSubTab } from './types';
+import { GeneralSettingKeys } from './types';
import { WorkspaceSetting } from './workspace-setting';
export interface SettingProps extends ModalProps {
diff --git a/packages/frontend/core/src/components/affine/setting-modal/setting-sidebar/index.tsx b/packages/frontend/core/src/components/affine/setting-modal/setting-sidebar/index.tsx
index b6832ad76e..2d5324554f 100644
--- a/packages/frontend/core/src/components/affine/setting-modal/setting-sidebar/index.tsx
+++ b/packages/frontend/core/src/components/affine/setting-modal/setting-sidebar/index.tsx
@@ -11,16 +11,17 @@ import { useWorkspaceInfo } from '@affine/core/hooks/use-workspace-info';
import { UNTITLED_WORKSPACE_NAME } from '@affine/env/constant';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { Logo1Icon } from '@blocksuite/icons';
+import type { WorkspaceMetadata } from '@toeverything/infra';
import {
+ useLiveData,
+ useService,
Workspace,
WorkspaceManager,
- type WorkspaceMetadata,
} from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
-import { useLiveData } from '@toeverything/infra';
import clsx from 'clsx';
import { useAtom } from 'jotai/react';
-import { type ReactElement, Suspense, useCallback, useMemo } from 'react';
+import type { ReactElement } from 'react';
+import { Suspense, useCallback, useMemo } from 'react';
import { authAtom } from '../../../../atoms';
import { useCurrentLoginStatus } from '../../../../hooks/affine/use-current-login-status';
diff --git a/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/delete-leave-workspace/delete/index.tsx b/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/delete-leave-workspace/delete/index.tsx
index 8ad9455356..51542bdf39 100644
--- a/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/delete-leave-workspace/delete/index.tsx
+++ b/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/delete-leave-workspace/delete/index.tsx
@@ -1,8 +1,6 @@
import { Input } from '@affine/component';
-import {
- ConfirmModal,
- type ConfirmModalProps,
-} from '@affine/component/ui/modal';
+import type { ConfirmModalProps } from '@affine/component/ui/modal';
+import { ConfirmModal } from '@affine/component/ui/modal';
import { useWorkspaceInfo } from '@affine/core/hooks/use-workspace-info';
import { UNTITLED_WORKSPACE_NAME } from '@affine/env/constant';
import { WorkspaceFlavour } from '@affine/env/workspace';
diff --git a/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/delete-leave-workspace/index.tsx b/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/delete-leave-workspace/index.tsx
index 6998106f31..2bd5e8b5d2 100644
--- a/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/delete-leave-workspace/index.tsx
+++ b/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/delete-leave-workspace/index.tsx
@@ -4,9 +4,12 @@ import { ConfirmModal } from '@affine/component/ui/modal';
import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { ArrowRightSmallIcon } from '@blocksuite/icons';
-import { Workspace, WorkspaceManager } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
-import { useLiveData } from '@toeverything/infra';
+import {
+ useLiveData,
+ useService,
+ Workspace,
+ WorkspaceManager,
+} from '@toeverything/infra';
import { useSetAtom } from 'jotai';
import { useCallback, useState } from 'react';
diff --git a/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/enable-cloud.tsx b/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/enable-cloud.tsx
index 75ddd771f6..307f8070b0 100644
--- a/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/enable-cloud.tsx
+++ b/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/enable-cloud.tsx
@@ -5,8 +5,8 @@ import { useWorkspaceInfo } from '@affine/core/hooks/use-workspace-info';
import { UNTITLED_WORKSPACE_NAME } from '@affine/env/constant';
import { WorkspaceFlavour } from '@affine/env/workspace';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
-import { type Workspace, WorkspaceManager } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
+import type { Workspace } from '@toeverything/infra';
+import { useService, WorkspaceManager } from '@toeverything/infra';
import { useSetAtom } from 'jotai';
import { useState } from 'react';
diff --git a/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/members.tsx b/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/members.tsx
index 3c8a9c2b99..d2b98623d6 100644
--- a/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/members.tsx
+++ b/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/members.tsx
@@ -1,11 +1,11 @@
-import {
- InviteModal,
- type InviteModalProps,
- MemberLimitModal,
+import type {
+ InviteModalProps,
+ PaginationProps,
} from '@affine/component/member-components';
import {
+ InviteModal,
+ MemberLimitModal,
Pagination,
- type PaginationProps,
} from '@affine/component/member-components';
import { pushNotificationAtom } from '@affine/component/notification-center';
import { SettingRow } from '@affine/component/setting-components';
@@ -20,7 +20,8 @@ import type { CheckedUser } from '@affine/core/hooks/affine/use-current-user';
import { useCurrentUser } from '@affine/core/hooks/affine/use-current-user';
import { useInviteMember } from '@affine/core/hooks/affine/use-invite-member';
import { useMemberCount } from '@affine/core/hooks/affine/use-member-count';
-import { type Member, useMembers } from '@affine/core/hooks/affine/use-members';
+import type { Member } from '@affine/core/hooks/affine/use-members';
+import { useMembers } from '@affine/core/hooks/affine/use-members';
import { useRevokeMemberPermission } from '@affine/core/hooks/affine/use-revoke-member-permission';
import { useWorkspaceQuota } from '@affine/core/hooks/use-quota';
import { useUserSubscription } from '@affine/core/hooks/use-subscription';
diff --git a/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/profile.tsx b/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/profile.tsx
index 4a22523bf5..05ca4a171c 100644
--- a/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/profile.tsx
+++ b/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/profile.tsx
@@ -12,13 +12,8 @@ import { CameraIcon } from '@blocksuite/icons';
import type { Workspace } from '@toeverything/infra';
import { useLiveData } from '@toeverything/infra';
import { useSetAtom } from 'jotai';
-import {
- type KeyboardEvent,
- type MouseEvent,
- useCallback,
- useEffect,
- useState,
-} from 'react';
+import type { KeyboardEvent, MouseEvent } from 'react';
+import { useCallback, useEffect, useState } from 'react';
import * as style from './style.css';
import type { WorkspaceSettingDetailProps } from './types';
diff --git a/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/storage.tsx b/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/storage.tsx
index 8fb09bc8ab..e0f7d64af1 100644
--- a/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/storage.tsx
+++ b/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/storage.tsx
@@ -5,8 +5,7 @@ import { Tooltip } from '@affine/component/ui/tooltip';
import { apis, events } from '@affine/electron-api';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import type { WorkspaceMetadata } from '@toeverything/infra';
-import { useMemo } from 'react';
-import { useCallback, useEffect, useState } from 'react';
+import { useCallback, useEffect, useMemo, useState } from 'react';
const useDBFileSecondaryPath = (workspaceId: string) => {
const [path, setPath] = useState(undefined);
diff --git a/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/properties/index.tsx b/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/properties/index.tsx
index bc32f468cd..98e6cdbeb0 100644
--- a/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/properties/index.tsx
+++ b/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/properties/index.tsx
@@ -8,10 +8,10 @@ import { Trans } from '@affine/i18n';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { DeleteIcon, FilterIcon, MoreHorizontalIcon } from '@blocksuite/icons';
import type { Workspace, WorkspaceMetadata } from '@toeverything/infra';
+import type { MouseEvent } from 'react';
import {
createContext,
Fragment,
- type MouseEvent,
useCallback,
useContext,
useEffect,
@@ -19,16 +19,16 @@ import {
useState,
} from 'react';
+import type { PagePropertyIcon } from '../../../page-properties';
import {
nameToIcon,
PagePropertiesCreatePropertyMenuItems,
PagePropertiesMetaManager,
- type PagePropertyIcon,
} from '../../../page-properties';
import { ConfirmDeletePropertyModal } from '../../../page-properties/confirm-delete-property-modal';
+import type { MenuItemOption } from '../../../page-properties/menu-items';
import {
EditPropertyNameMenuItem,
- type MenuItemOption,
PropertyTypeMenuItem,
renderMenuItemOptions,
} from '../../../page-properties/menu-items';
diff --git a/packages/frontend/core/src/components/affine/share-page-modal/index.tsx b/packages/frontend/core/src/components/affine/share-page-modal/index.tsx
index 73330ac3a1..af62e7f68b 100644
--- a/packages/frontend/core/src/components/affine/share-page-modal/index.tsx
+++ b/packages/frontend/core/src/components/affine/share-page-modal/index.tsx
@@ -1,8 +1,8 @@
import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
import { WorkspaceFlavour } from '@affine/env/workspace';
import type { Doc } from '@blocksuite/store';
-import { type Workspace, WorkspaceManager } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
+import type { Workspace } from '@toeverything/infra';
+import { useService, WorkspaceManager } from '@toeverything/infra';
import { useState } from 'react';
import { useNavigateHelper } from '../../../hooks/use-navigate-helper';
diff --git a/packages/frontend/core/src/components/affine/share-page-modal/share-menu/share-export.tsx b/packages/frontend/core/src/components/affine/share-page-modal/share-menu/share-export.tsx
index a0b3da4e72..f4fdf976ac 100644
--- a/packages/frontend/core/src/components/affine/share-page-modal/share-menu/share-export.tsx
+++ b/packages/frontend/core/src/components/affine/share-page-modal/share-menu/share-export.tsx
@@ -4,8 +4,7 @@ import { ExportMenuItems } from '@affine/core/components/page-list';
import { WorkspaceFlavour } from '@affine/env/workspace';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { LinkIcon } from '@blocksuite/icons';
-import { Doc, useLiveData } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
+import { Doc, useLiveData, useService } from '@toeverything/infra';
import { useExportPage } from '../../../../hooks/affine/use-export-page';
import * as styles from './index.css';
diff --git a/packages/frontend/core/src/components/affine/share-page-modal/share-menu/share-page.tsx b/packages/frontend/core/src/components/affine/share-page-modal/share-menu/share-page.tsx
index cc5f8efd6d..373376710d 100644
--- a/packages/frontend/core/src/components/affine/share-page-modal/share-menu/share-page.tsx
+++ b/packages/frontend/core/src/components/affine/share-page-modal/share-menu/share-page.tsx
@@ -13,11 +13,9 @@ import { useServerBaseUrl } from '@affine/core/hooks/affine/use-server-config';
import { WorkspaceFlavour } from '@affine/env/workspace';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { ArrowRightSmallIcon } from '@blocksuite/icons';
-import { useService } from '@toeverything/infra';
-import { useLiveData } from '@toeverything/infra';
-import { Doc, type PageMode } from '@toeverything/infra';
-import { useMemo, useState } from 'react';
-import { useCallback } from 'react';
+import type { PageMode } from '@toeverything/infra';
+import { Doc, useLiveData, useService } from '@toeverything/infra';
+import { useCallback, useMemo, useState } from 'react';
import { CloudSvg } from '../cloud-svg';
import * as styles from './index.css';
diff --git a/packages/frontend/core/src/components/affine/sign-out-modal/index.tsx b/packages/frontend/core/src/components/affine/sign-out-modal/index.tsx
index 032c0972b2..466695edfe 100644
--- a/packages/frontend/core/src/components/affine/sign-out-modal/index.tsx
+++ b/packages/frontend/core/src/components/affine/sign-out-modal/index.tsx
@@ -1,7 +1,5 @@
-import {
- ConfirmModal,
- type ConfirmModalProps,
-} from '@affine/component/ui/modal';
+import type { ConfirmModalProps } from '@affine/component/ui/modal';
+import { ConfirmModal } from '@affine/component/ui/modal';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { useMemo } from 'react';
diff --git a/packages/frontend/core/src/components/affine/tmp-disable-affine-cloud-modal/index.tsx b/packages/frontend/core/src/components/affine/tmp-disable-affine-cloud-modal/index.tsx
index 1d4e7e21fb..661b3ea497 100644
--- a/packages/frontend/core/src/components/affine/tmp-disable-affine-cloud-modal/index.tsx
+++ b/packages/frontend/core/src/components/affine/tmp-disable-affine-cloud-modal/index.tsx
@@ -1,5 +1,6 @@
import { Empty } from '@affine/component';
-import { Modal, type ModalProps } from '@affine/component/ui/modal';
+import type { ModalProps } from '@affine/component/ui/modal';
+import { Modal } from '@affine/component/ui/modal';
import { Trans } from '@affine/i18n';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { useCallback } from 'react';
diff --git a/packages/frontend/core/src/components/app-sidebar/index.tsx b/packages/frontend/core/src/components/app-sidebar/index.tsx
index d0a3bc4423..5d3506248d 100644
--- a/packages/frontend/core/src/components/app-sidebar/index.tsx
+++ b/packages/frontend/core/src/components/app-sidebar/index.tsx
@@ -1,7 +1,6 @@
import { Skeleton } from '@affine/component';
import { ResizePanel } from '@affine/component/resize-panel';
-import { Workspace } from '@toeverything/infra';
-import { useServiceOptional } from '@toeverything/infra';
+import { useServiceOptional, Workspace } from '@toeverything/infra';
import { useAtom, useAtomValue } from 'jotai';
import { debounce } from 'lodash-es';
import type { PropsWithChildren, ReactElement } from 'react';
diff --git a/packages/frontend/core/src/components/app-sidebar/sidebar-containers/index.tsx b/packages/frontend/core/src/components/app-sidebar/sidebar-containers/index.tsx
index 27fcd4094a..cea1850e29 100644
--- a/packages/frontend/core/src/components/app-sidebar/sidebar-containers/index.tsx
+++ b/packages/frontend/core/src/components/app-sidebar/sidebar-containers/index.tsx
@@ -1,7 +1,8 @@
import { useHasScrollTop } from '@affine/component';
import * as ScrollArea from '@radix-ui/react-scroll-area';
import clsx from 'clsx';
-import { type PropsWithChildren, useRef } from 'react';
+import type { PropsWithChildren } from 'react';
+import { useRef } from 'react';
import * as styles from './index.css';
diff --git a/packages/frontend/core/src/components/app-sidebar/spolight/index.stories.tsx b/packages/frontend/core/src/components/app-sidebar/spolight/index.stories.tsx
index e2b3649d91..d6c6917c85 100644
--- a/packages/frontend/core/src/components/app-sidebar/spolight/index.stories.tsx
+++ b/packages/frontend/core/src/components/app-sidebar/spolight/index.stories.tsx
@@ -1,5 +1,5 @@
import type { Meta, StoryFn } from '@storybook/react';
-import { type PropsWithChildren } from 'react';
+import type { PropsWithChildren } from 'react';
import { Spotlight } from './index';
diff --git a/packages/frontend/core/src/components/blocksuite/block-suite-editor/blocksuite-editor-container.tsx b/packages/frontend/core/src/components/blocksuite/block-suite-editor/blocksuite-editor-container.tsx
index 2fc251fa3a..3a8ce8e901 100644
--- a/packages/frontend/core/src/components/blocksuite/block-suite-editor/blocksuite-editor-container.tsx
+++ b/packages/frontend/core/src/components/blocksuite/block-suite-editor/blocksuite-editor-container.tsx
@@ -4,13 +4,14 @@ import type {
EdgelessEditor,
PageEditor,
} from '@blocksuite/presets';
-import { type Doc, Slot } from '@blocksuite/store';
+import type { Doc } from '@blocksuite/store';
+import { Slot } from '@blocksuite/store';
import type { PageMode } from '@toeverything/infra';
import clsx from 'clsx';
import type React from 'react';
+import type { RefObject } from 'react';
import {
forwardRef,
- type RefObject,
useEffect,
useLayoutEffect,
useMemo,
diff --git a/packages/frontend/core/src/components/blocksuite/block-suite-editor/blocksuite-editor.tsx b/packages/frontend/core/src/components/blocksuite/block-suite-editor/blocksuite-editor.tsx
index e114f2b312..9fa656de8d 100644
--- a/packages/frontend/core/src/components/blocksuite/block-suite-editor/blocksuite-editor.tsx
+++ b/packages/frontend/core/src/components/blocksuite/block-suite-editor/blocksuite-editor.tsx
@@ -17,10 +17,8 @@ import {
useRef,
} from 'react';
-import {
- AffinePageReference,
- type PageReferenceRendererOptions,
-} from '../../affine/reference-link';
+import type { PageReferenceRendererOptions } from '../../affine/reference-link';
+import { AffinePageReference } from '../../affine/reference-link';
import { BlocksuiteEditorContainer } from './blocksuite-editor-container';
import { NoPageRootError } from './no-page-error';
import type { InlineRenderers } from './specs';
diff --git a/packages/frontend/core/src/components/blocksuite/block-suite-editor/lit-adaper.tsx b/packages/frontend/core/src/components/blocksuite/block-suite-editor/lit-adaper.tsx
index 0cdd1b0086..a17d40053e 100644
--- a/packages/frontend/core/src/components/blocksuite/block-suite-editor/lit-adaper.tsx
+++ b/packages/frontend/core/src/components/blocksuite/block-suite-editor/lit-adaper.tsx
@@ -10,7 +10,7 @@ import {
EdgelessEditor,
PageEditor,
} from '@blocksuite/presets';
-import { type Doc } from '@blocksuite/store';
+import type { Doc } from '@blocksuite/store';
import React, {
forwardRef,
Fragment,
@@ -23,12 +23,8 @@ import React, {
import { PagePropertiesTable } from '../../affine/page-properties';
import { BlocksuiteEditorJournalDocTitle } from './journal-doc-title';
-import {
- docModeSpecs,
- edgelessModeSpecs,
- type InlineRenderers,
- patchSpecs,
-} from './specs';
+import type { InlineRenderers } from './specs';
+import { docModeSpecs, edgelessModeSpecs, patchSpecs } from './specs';
import * as styles from './styles.css';
const adapted = {
diff --git a/packages/frontend/core/src/components/blocksuite/block-suite-editor/no-page-error.ts b/packages/frontend/core/src/components/blocksuite/block-suite-editor/no-page-error.ts
index 40d216e70f..b70603ec3f 100644
--- a/packages/frontend/core/src/components/blocksuite/block-suite-editor/no-page-error.ts
+++ b/packages/frontend/core/src/components/blocksuite/block-suite-editor/no-page-error.ts
@@ -1,5 +1,5 @@
import type { Doc } from '@blocksuite/store';
-import { type Map as YMap } from 'yjs';
+import type { Map as YMap } from 'yjs';
/**
* TODO: Define error to unexpected state together in the future.
diff --git a/packages/frontend/core/src/components/blocksuite/block-suite-header/favorite/index.tsx b/packages/frontend/core/src/components/blocksuite/block-suite-header/favorite/index.tsx
index 1c3e51125e..409cd33287 100644
--- a/packages/frontend/core/src/components/blocksuite/block-suite-header/favorite/index.tsx
+++ b/packages/frontend/core/src/components/blocksuite/block-suite-header/favorite/index.tsx
@@ -4,8 +4,7 @@ import { useBlockSuiteDocMeta } from '@affine/core/hooks/use-block-suite-page-me
import { toast } from '@affine/core/utils';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { assertExists } from '@blocksuite/global/utils';
-import { Workspace } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
+import { useService, Workspace } from '@toeverything/infra';
import { useCallback } from 'react';
export interface FavoriteButtonProps {
diff --git a/packages/frontend/core/src/components/blocksuite/block-suite-header/journal/date-picker.tsx b/packages/frontend/core/src/components/blocksuite/block-suite-header/journal/date-picker.tsx
index eea681b36f..708f39b01c 100644
--- a/packages/frontend/core/src/components/blocksuite/block-suite-header/journal/date-picker.tsx
+++ b/packages/frontend/core/src/components/blocksuite/block-suite-header/journal/date-picker.tsx
@@ -1,4 +1,5 @@
-import { WeekDatePicker, type WeekDatePickerHandle } from '@affine/component';
+import type { WeekDatePickerHandle } from '@affine/component';
+import { WeekDatePicker } from '@affine/component';
import {
useJournalInfoHelper,
useJournalRouteHelper,
diff --git a/packages/frontend/core/src/components/blocksuite/block-suite-header/title/index.tsx b/packages/frontend/core/src/components/blocksuite/block-suite-header/title/index.tsx
index fb36120617..02e804c45f 100644
--- a/packages/frontend/core/src/components/blocksuite/block-suite-header/title/index.tsx
+++ b/packages/frontend/core/src/components/blocksuite/block-suite-header/title/index.tsx
@@ -1,4 +1,5 @@
-import { InlineEdit, type InlineEditProps } from '@affine/component';
+import type { InlineEditProps } from '@affine/component';
+import { InlineEdit } from '@affine/component';
import {
useBlockSuiteDocMeta,
useDocMetaHelper,
diff --git a/packages/frontend/core/src/components/blocksuite/block-suite-mode-switch/index.tsx b/packages/frontend/core/src/components/blocksuite/block-suite-mode-switch/index.tsx
index d0d2b171be..fbf9d83a02 100644
--- a/packages/frontend/core/src/components/blocksuite/block-suite-mode-switch/index.tsx
+++ b/packages/frontend/core/src/components/blocksuite/block-suite-mode-switch/index.tsx
@@ -1,12 +1,8 @@
import { Tooltip } from '@affine/component/ui/tooltip';
import { useBlockSuiteDocMeta } from '@affine/core/hooks/use-block-suite-page-meta';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
-import {
- Doc,
- type PageMode,
- useLiveData,
- useService,
-} from '@toeverything/infra';
+import type { PageMode } from '@toeverything/infra';
+import { Doc, useLiveData, useService } from '@toeverything/infra';
import type { CSSProperties } from 'react';
import { useCallback, useEffect } from 'react';
diff --git a/packages/frontend/core/src/components/blocksuite/block-suite-page-list/utils.tsx b/packages/frontend/core/src/components/blocksuite/block-suite-page-list/utils.tsx
index f55a54c1e1..cfde522ca4 100644
--- a/packages/frontend/core/src/components/blocksuite/block-suite-page-list/utils.tsx
+++ b/packages/frontend/core/src/components/blocksuite/block-suite-page-list/utils.tsx
@@ -3,9 +3,7 @@ import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
import { useDocMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { useDocCollectionHelper } from '@affine/core/hooks/use-block-suite-workspace-helper';
import { WorkspaceSubPath } from '@affine/core/shared';
-import { useService } from '@toeverything/infra';
-import { PageRecordList } from '@toeverything/infra';
-import { initEmptyPage } from '@toeverything/infra';
+import { initEmptyPage, PageRecordList, useService } from '@toeverything/infra';
import { useCallback, useMemo } from 'react';
import { useNavigateHelper } from '../../../hooks/use-navigate-helper';
diff --git a/packages/frontend/core/src/components/image-preview/index.css.ts b/packages/frontend/core/src/components/image-preview/index.css.ts
index 3d46594759..52a2e7d1c6 100644
--- a/packages/frontend/core/src/components/image-preview/index.css.ts
+++ b/packages/frontend/core/src/components/image-preview/index.css.ts
@@ -1,5 +1,4 @@
-import { cssVar } from '@toeverything/theme';
-import { baseTheme } from '@toeverything/theme';
+import { baseTheme, cssVar } from '@toeverything/theme';
import { keyframes, style } from '@vanilla-extract/css';
const fadeInAnimation = keyframes({
from: {
diff --git a/packages/frontend/core/src/components/image-preview/index.tsx b/packages/frontend/core/src/components/image-preview/index.tsx
index 4c8c095b5d..85053f5efe 100644
--- a/packages/frontend/core/src/components/image-preview/index.tsx
+++ b/packages/frontend/core/src/components/image-preview/index.tsx
@@ -18,8 +18,7 @@ import clsx from 'clsx';
import { useErrorBoundary } from 'foxact/use-error-boundary';
import { useAtom } from 'jotai';
import type { PropsWithChildren, ReactElement } from 'react';
-import { Suspense, useCallback } from 'react';
-import { useEffect, useRef, useState } from 'react';
+import { Suspense, useCallback, useEffect, useRef, useState } from 'react';
import ReactDOM from 'react-dom';
import type { FallbackProps } from 'react-error-boundary';
import { ErrorBoundary } from 'react-error-boundary';
diff --git a/packages/frontend/core/src/components/page-detail-editor.tsx b/packages/frontend/core/src/components/page-detail-editor.tsx
index 329f1df11a..0dce839421 100644
--- a/packages/frontend/core/src/components/page-detail-editor.tsx
+++ b/packages/frontend/core/src/components/page-detail-editor.tsx
@@ -3,15 +3,14 @@ import './page-detail-editor.css';
import { useDocCollectionPage } from '@affine/core/hooks/use-block-suite-workspace-page';
import { assertExists, DisposableGroup } from '@blocksuite/global/utils';
import type { AffineEditorContainer } from '@blocksuite/presets';
-import type { DocCollection } from '@blocksuite/store';
-import type { Doc as BlockSuiteDoc } from '@blocksuite/store';
+import type { Doc as BlockSuiteDoc, DocCollection } from '@blocksuite/store';
+import type { PageMode } from '@toeverything/infra';
import {
Doc,
- type PageMode,
+ fontStyleOptions,
useLiveData,
useService,
} from '@toeverything/infra';
-import { fontStyleOptions } from '@toeverything/infra';
import clsx from 'clsx';
import type { CSSProperties } from 'react';
import { memo, Suspense, useCallback, useMemo } from 'react';
diff --git a/packages/frontend/core/src/components/page-list/__tests__/use-block-suite-page-preview.spec.ts b/packages/frontend/core/src/components/page-list/__tests__/use-block-suite-page-preview.spec.ts
index 3187886a70..30b3132d7c 100644
--- a/packages/frontend/core/src/components/page-list/__tests__/use-block-suite-page-preview.spec.ts
+++ b/packages/frontend/core/src/components/page-list/__tests__/use-block-suite-page-preview.spec.ts
@@ -9,8 +9,7 @@ import type { Doc } from '@blocksuite/store';
import { DocCollection, Schema } from '@blocksuite/store';
import { renderHook } from '@testing-library/react';
import { useAtomValue } from 'jotai';
-import { describe, expect, test, vi } from 'vitest';
-import { beforeEach } from 'vitest';
+import { beforeEach, describe, expect, test, vi } from 'vitest';
import { useBlockSuitePagePreview } from '../use-block-suite-page-preview';
let docCollection: DocCollection;
diff --git a/packages/frontend/core/src/components/page-list/collections/collection-list-item.tsx b/packages/frontend/core/src/components/page-list/collections/collection-list-item.tsx
index 21d4c67ed3..3cadf80521 100644
--- a/packages/frontend/core/src/components/page-list/collections/collection-list-item.tsx
+++ b/packages/frontend/core/src/components/page-list/collections/collection-list-item.tsx
@@ -1,7 +1,8 @@
import { Checkbox } from '@affine/component';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { useDraggable } from '@dnd-kit/core';
-import { type PropsWithChildren, useCallback, useMemo } from 'react';
+import type { PropsWithChildren } from 'react';
+import { useCallback, useMemo } from 'react';
import { Link } from 'react-router-dom';
import type {
diff --git a/packages/frontend/core/src/components/page-list/collections/virtualized-collection-list.tsx b/packages/frontend/core/src/components/page-list/collections/virtualized-collection-list.tsx
index ece5862afb..400f2afa1b 100644
--- a/packages/frontend/core/src/components/page-list/collections/virtualized-collection-list.tsx
+++ b/packages/frontend/core/src/components/page-list/collections/virtualized-collection-list.tsx
@@ -1,15 +1,9 @@
import { useDeleteCollectionInfo } from '@affine/core/hooks/affine/use-delete-collection-info';
import type { Collection, DeleteCollectionInfo } from '@affine/env/filter';
import { Trans } from '@affine/i18n';
-import { useService } from '@toeverything/infra';
-import { Workspace } from '@toeverything/infra';
-import {
- type ReactElement,
- useCallback,
- useMemo,
- useRef,
- useState,
-} from 'react';
+import { useService, Workspace } from '@toeverything/infra';
+import type { ReactElement } from 'react';
+import { useCallback, useMemo, useRef, useState } from 'react';
import { CollectionService } from '../../../modules/collection';
import { ListFloatingToolbar } from '../components/list-floating-toolbar';
diff --git a/packages/frontend/core/src/components/page-list/components/favorite-tag.tsx b/packages/frontend/core/src/components/page-list/components/favorite-tag.tsx
index 4e05f43260..e7fa9be8ec 100644
--- a/packages/frontend/core/src/components/page-list/components/favorite-tag.tsx
+++ b/packages/frontend/core/src/components/page-list/components/favorite-tag.tsx
@@ -1,5 +1,5 @@
-import { IconButton, type IconButtonProps } from '@affine/component';
-import { Tooltip } from '@affine/component';
+import type { IconButtonProps } from '@affine/component';
+import { IconButton, Tooltip } from '@affine/component';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { FavoritedIcon, FavoriteIcon } from '@blocksuite/icons';
import Lottie from 'lottie-react';
diff --git a/packages/frontend/core/src/components/page-list/components/floating-toolbar.tsx b/packages/frontend/core/src/components/page-list/components/floating-toolbar.tsx
index f6bebfdfc1..dd82afa203 100644
--- a/packages/frontend/core/src/components/page-list/components/floating-toolbar.tsx
+++ b/packages/frontend/core/src/components/page-list/components/floating-toolbar.tsx
@@ -1,12 +1,12 @@
import * as Popover from '@radix-ui/react-popover';
import * as Toolbar from '@radix-ui/react-toolbar';
import clsx from 'clsx';
-import {
- type CSSProperties,
- type HTMLAttributes,
- type MouseEventHandler,
- type PropsWithChildren,
- type ReactNode,
+import type {
+ CSSProperties,
+ HTMLAttributes,
+ MouseEventHandler,
+ PropsWithChildren,
+ ReactNode,
} from 'react';
import * as styles from './floating-toolbar.css';
diff --git a/packages/frontend/core/src/components/page-list/components/new-page-button.tsx b/packages/frontend/core/src/components/page-list/components/new-page-button.tsx
index 95b28bfbfa..7a35480693 100644
--- a/packages/frontend/core/src/components/page-list/components/new-page-button.tsx
+++ b/packages/frontend/core/src/components/page-list/components/new-page-button.tsx
@@ -2,7 +2,8 @@ import { DropdownButton, Menu } from '@affine/component';
import { BlockCard } from '@affine/component/card/block-card';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { EdgelessIcon, ImportIcon, PageIcon } from '@blocksuite/icons';
-import { type PropsWithChildren, useCallback, useState } from 'react';
+import type { PropsWithChildren } from 'react';
+import { useCallback, useState } from 'react';
import { menuContent } from './new-page-button.css';
diff --git a/packages/frontend/core/src/components/page-list/docs/page-list-header.tsx b/packages/frontend/core/src/components/page-list/docs/page-list-header.tsx
index 09760ca69d..f435da93e9 100644
--- a/packages/frontend/core/src/components/page-list/docs/page-list-header.tsx
+++ b/packages/frontend/core/src/components/page-list/docs/page-list-header.tsx
@@ -1,7 +1,8 @@
import { Button, Divider, Menu, Scrollable } from '@affine/component';
import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
import { useNavigateHelper } from '@affine/core/hooks/use-navigate-helper';
-import { type Tag, TagService } from '@affine/core/modules/tag';
+import type { Tag } from '@affine/core/modules/tag';
+import { TagService } from '@affine/core/modules/tag';
import type { Collection } from '@affine/env/filter';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import {
diff --git a/packages/frontend/core/src/components/page-list/docs/page-list-item.tsx b/packages/frontend/core/src/components/page-list/docs/page-list-item.tsx
index d81b73664d..347af81209 100644
--- a/packages/frontend/core/src/components/page-list/docs/page-list-item.tsx
+++ b/packages/frontend/core/src/components/page-list/docs/page-list-item.tsx
@@ -2,7 +2,8 @@ import { Checkbox } from '@affine/component';
import { TagService } from '@affine/core/modules/tag';
import { useDraggable } from '@dnd-kit/core';
import { useLiveData, useService } from '@toeverything/infra';
-import { type PropsWithChildren, useCallback, useMemo } from 'react';
+import type { PropsWithChildren } from 'react';
+import { useCallback, useMemo } from 'react';
import { WorkbenchLink } from '../../../modules/workbench/view/workbench-link';
import type { DraggableTitleCellData, PageListItemProps } from '../types';
diff --git a/packages/frontend/core/src/components/page-list/docs/page-list-new-page-button.tsx b/packages/frontend/core/src/components/page-list/docs/page-list-new-page-button.tsx
index 18df011333..fb2f847bf2 100644
--- a/packages/frontend/core/src/components/page-list/docs/page-list-new-page-button.tsx
+++ b/packages/frontend/core/src/components/page-list/docs/page-list-new-page-button.tsx
@@ -1,5 +1,4 @@
-import { Workspace } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
+import { useService, Workspace } from '@toeverything/infra';
import type { PropsWithChildren } from 'react';
import { usePageHelper } from '../../blocksuite/block-suite-page-list/utils';
diff --git a/packages/frontend/core/src/components/page-list/docs/page-tags.tsx b/packages/frontend/core/src/components/page-list/docs/page-tags.tsx
index 9009a93d1a..628c56d2f5 100644
--- a/packages/frontend/core/src/components/page-list/docs/page-tags.tsx
+++ b/packages/frontend/core/src/components/page-list/docs/page-tags.tsx
@@ -1,10 +1,11 @@
import { Menu } from '@affine/component';
-import { type Tag } from '@affine/core/modules/tag';
+import type { Tag } from '@affine/core/modules/tag';
import { CloseIcon, MoreHorizontalIcon } from '@blocksuite/icons';
import { LiveData, useLiveData } from '@toeverything/infra';
import { assignInlineVars } from '@vanilla-extract/dynamic';
import clsx from 'clsx';
-import { type MouseEventHandler, useCallback, useMemo } from 'react';
+import type { MouseEventHandler } from 'react';
+import { useCallback, useMemo } from 'react';
import { stopPropagation } from '../utils';
import * as styles from './page-tags.css';
diff --git a/packages/frontend/core/src/components/page-list/docs/virtualized-page-list.tsx b/packages/frontend/core/src/components/page-list/docs/virtualized-page-list.tsx
index b1013e4899..c63feec059 100644
--- a/packages/frontend/core/src/components/page-list/docs/virtualized-page-list.tsx
+++ b/packages/frontend/core/src/components/page-list/docs/virtualized-page-list.tsx
@@ -8,8 +8,7 @@ import type { Collection, Filter } from '@affine/env/filter';
import { Trans } from '@affine/i18n';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import type { DocMeta } from '@blocksuite/store';
-import { useService } from '@toeverything/infra';
-import { Workspace } from '@toeverything/infra';
+import { useService, Workspace } from '@toeverything/infra';
import { useCallback, useMemo, useRef, useState } from 'react';
import { usePageHelper } from '../../blocksuite/block-suite-page-list/utils';
diff --git a/packages/frontend/core/src/components/page-list/filter/condition.tsx b/packages/frontend/core/src/components/page-list/filter/condition.tsx
index a2609643b3..2ba089751a 100644
--- a/packages/frontend/core/src/components/page-list/filter/condition.tsx
+++ b/packages/frontend/core/src/components/page-list/filter/condition.tsx
@@ -1,6 +1,5 @@
import { Menu, MenuItem } from '@affine/component';
-import type { Filter, Literal } from '@affine/env/filter';
-import type { PropertiesMeta } from '@affine/env/filter';
+import type { Filter, Literal, PropertiesMeta } from '@affine/env/filter';
import type { ReactNode } from 'react';
import { useMemo } from 'react';
diff --git a/packages/frontend/core/src/components/page-list/filter/date-select.tsx b/packages/frontend/core/src/components/page-list/filter/date-select.tsx
index 07a434fa81..401c86530d 100644
--- a/packages/frontend/core/src/components/page-list/filter/date-select.tsx
+++ b/packages/frontend/core/src/components/page-list/filter/date-select.tsx
@@ -1,4 +1,5 @@
-import { DatePicker, Popover, type PopoverProps } from '@affine/component';
+import type { PopoverProps } from '@affine/component';
+import { DatePicker, Popover } from '@affine/component';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import dayjs from 'dayjs';
import { useCallback, useState } from 'react';
diff --git a/packages/frontend/core/src/components/page-list/filter/filter-list.tsx b/packages/frontend/core/src/components/page-list/filter/filter-list.tsx
index 7809a8cdd1..7caa983d6c 100644
--- a/packages/frontend/core/src/components/page-list/filter/filter-list.tsx
+++ b/packages/frontend/core/src/components/page-list/filter/filter-list.tsx
@@ -1,6 +1,5 @@
import { Button, IconButton, Menu } from '@affine/component';
-import type { Filter } from '@affine/env/filter';
-import type { PropertiesMeta } from '@affine/env/filter';
+import type { Filter, PropertiesMeta } from '@affine/env/filter';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { CloseIcon, PlusIcon } from '@blocksuite/icons';
diff --git a/packages/frontend/core/src/components/page-list/filter/literal-matcher.tsx b/packages/frontend/core/src/components/page-list/filter/literal-matcher.tsx
index 07b4dacf56..6674eb8944 100644
--- a/packages/frontend/core/src/components/page-list/filter/literal-matcher.tsx
+++ b/packages/frontend/core/src/components/page-list/filter/literal-matcher.tsx
@@ -1,6 +1,6 @@
import { Input, Menu, MenuItem } from '@affine/component';
import type { LiteralValue, Tag } from '@affine/env/filter';
-import { type ReactNode } from 'react';
+import type { ReactNode } from 'react';
import { DateSelect } from './date-select';
import { FilterTag } from './filter-tag-translation';
diff --git a/packages/frontend/core/src/components/page-list/items-to-item-group.tsx b/packages/frontend/core/src/components/page-list/items-to-item-group.tsx
index 3e327f83e5..25bdb3d506 100644
--- a/packages/frontend/core/src/components/page-list/items-to-item-group.tsx
+++ b/packages/frontend/core/src/components/page-list/items-to-item-group.tsx
@@ -1,7 +1,11 @@
import { Trans } from '@affine/i18n';
-import type { ItemGroupDefinition, ItemGroupProps, ListItem } from './types';
-import { type DateKey } from './types';
+import type {
+ DateKey,
+ ItemGroupDefinition,
+ ItemGroupProps,
+ ListItem,
+} from './types';
import { betweenDaysAgo, withinDaysAgo } from './utils';
// todo: optimize date matchers
diff --git a/packages/frontend/core/src/components/page-list/list.tsx b/packages/frontend/core/src/components/page-list/list.tsx
index 059f8bfe4a..f13b6e9a03 100644
--- a/packages/frontend/core/src/components/page-list/list.tsx
+++ b/packages/frontend/core/src/components/page-list/list.tsx
@@ -1,10 +1,9 @@
import { Scrollable, useHasScrollTop } from '@affine/component';
import clsx from 'clsx';
+import type { ForwardedRef, PropsWithChildren } from 'react';
import {
- type ForwardedRef,
forwardRef,
memo,
- type PropsWithChildren,
useCallback,
useEffect,
useImperativeHandle,
diff --git a/packages/frontend/core/src/components/page-list/operation-cell.tsx b/packages/frontend/core/src/components/page-list/operation-cell.tsx
index 9c546ed40c..daa3c7e9f0 100644
--- a/packages/frontend/core/src/components/page-list/operation-cell.tsx
+++ b/packages/frontend/core/src/components/page-list/operation-cell.tsx
@@ -32,11 +32,8 @@ import { DisablePublicSharing, MoveToTrash } from './operation-menu-items';
import { CreateOrEditTag } from './tags/create-tag';
import type { TagMeta } from './types';
import { ColWrapper, stopPropagationWithoutPrevent } from './utils';
-import {
- type AllPageListConfig,
- useEditCollection,
- useEditCollectionName,
-} from './view';
+import type { AllPageListConfig } from './view';
+import { useEditCollection, useEditCollectionName } from './view';
export interface PageOperationCellProps {
favorite: boolean;
diff --git a/packages/frontend/core/src/components/page-list/operation-menu-items/disable-public-sharing.tsx b/packages/frontend/core/src/components/page-list/operation-menu-items/disable-public-sharing.tsx
index df1f14f0e9..923853d510 100644
--- a/packages/frontend/core/src/components/page-list/operation-menu-items/disable-public-sharing.tsx
+++ b/packages/frontend/core/src/components/page-list/operation-menu-items/disable-public-sharing.tsx
@@ -1,4 +1,5 @@
-import { MenuIcon, MenuItem, type MenuItemProps } from '@affine/component';
+import type { MenuItemProps } from '@affine/component';
+import { MenuIcon, MenuItem } from '@affine/component';
import { PublicLinkDisableModal } from '@affine/component/disable-public-link';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { ShareIcon } from '@blocksuite/icons';
diff --git a/packages/frontend/core/src/components/page-list/operation-menu-items/export.tsx b/packages/frontend/core/src/components/page-list/operation-menu-items/export.tsx
index 4aa669aad2..4a1698638f 100644
--- a/packages/frontend/core/src/components/page-list/operation-menu-items/export.tsx
+++ b/packages/frontend/core/src/components/page-list/operation-menu-items/export.tsx
@@ -7,7 +7,8 @@ import {
ExportToPdfIcon,
ExportToPngIcon,
} from '@blocksuite/icons';
-import { type ReactNode, useMemo } from 'react';
+import type { ReactNode } from 'react';
+import { useMemo } from 'react';
import { transitionStyle } from './index.css';
diff --git a/packages/frontend/core/src/components/page-list/operation-menu-items/move-to-trash.tsx b/packages/frontend/core/src/components/page-list/operation-menu-items/move-to-trash.tsx
index 4f39f5d7a1..2d5c74ea3e 100644
--- a/packages/frontend/core/src/components/page-list/operation-menu-items/move-to-trash.tsx
+++ b/packages/frontend/core/src/components/page-list/operation-menu-items/move-to-trash.tsx
@@ -1,10 +1,5 @@
-import {
- ConfirmModal,
- type ConfirmModalProps,
- MenuIcon,
- MenuItem,
- type MenuItemProps,
-} from '@affine/component';
+import type { ConfirmModalProps, MenuItemProps } from '@affine/component';
+import { ConfirmModal, MenuIcon, MenuItem } from '@affine/component';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { DeleteIcon } from '@blocksuite/icons';
diff --git a/packages/frontend/core/src/components/page-list/page-group.tsx b/packages/frontend/core/src/components/page-list/page-group.tsx
index 1f4b105bd5..5c845ccbe5 100644
--- a/packages/frontend/core/src/components/page-list/page-group.tsx
+++ b/packages/frontend/core/src/components/page-list/page-group.tsx
@@ -11,12 +11,11 @@ import {
} from '@blocksuite/icons';
import type { DocCollection, DocMeta } from '@blocksuite/store';
import * as Collapsible from '@radix-ui/react-collapsible';
-import { useService } from '@toeverything/infra';
-import { useLiveData } from '@toeverything/infra';
-import { PageRecordList } from '@toeverything/infra';
+import { PageRecordList, useLiveData, useService } from '@toeverything/infra';
import clsx from 'clsx';
import { selectAtom } from 'jotai/utils';
-import { type MouseEventHandler, useCallback, useMemo, useState } from 'react';
+import type { MouseEventHandler } from 'react';
+import { useCallback, useMemo, useState } from 'react';
import { CollectionListItem } from './collections/collection-list-item';
import { PageListItem } from './docs/page-list-item';
diff --git a/packages/frontend/core/src/components/page-list/page-header.tsx b/packages/frontend/core/src/components/page-list/page-header.tsx
index 7822500d58..976830bc72 100644
--- a/packages/frontend/core/src/components/page-list/page-header.tsx
+++ b/packages/frontend/core/src/components/page-list/page-header.tsx
@@ -1,9 +1,11 @@
-import { Checkbox, type CheckboxProps } from '@affine/component';
+import type { CheckboxProps } from '@affine/component';
+import { Checkbox } from '@affine/component';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { MultiSelectIcon } from '@blocksuite/icons';
import clsx from 'clsx';
import { selectAtom } from 'jotai/utils';
-import { type MouseEventHandler, useCallback } from 'react';
+import type { MouseEventHandler } from 'react';
+import { useCallback } from 'react';
import { ListHeaderCell } from './components/list-header-cell';
import * as styles from './page-header.css';
diff --git a/packages/frontend/core/src/components/page-list/tags/tag-list-item.tsx b/packages/frontend/core/src/components/page-list/tags/tag-list-item.tsx
index d75fbf5dae..270229616a 100644
--- a/packages/frontend/core/src/components/page-list/tags/tag-list-item.tsx
+++ b/packages/frontend/core/src/components/page-list/tags/tag-list-item.tsx
@@ -1,7 +1,8 @@
import { Checkbox } from '@affine/component';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { useDraggable } from '@dnd-kit/core';
-import { type PropsWithChildren, useCallback, useMemo } from 'react';
+import type { PropsWithChildren } from 'react';
+import { useCallback, useMemo } from 'react';
import { Link } from 'react-router-dom';
import type { DraggableTitleCellData, TagListItemProps } from '../types';
diff --git a/packages/frontend/core/src/components/page-list/tags/virtualized-tag-list.tsx b/packages/frontend/core/src/components/page-list/tags/virtualized-tag-list.tsx
index c44f9ab4e3..d438ad010b 100644
--- a/packages/frontend/core/src/components/page-list/tags/virtualized-tag-list.tsx
+++ b/packages/frontend/core/src/components/page-list/tags/virtualized-tag-list.tsx
@@ -1,7 +1,6 @@
import type { Tag } from '@affine/core/modules/tag';
import { Trans } from '@affine/i18n';
-import { useService } from '@toeverything/infra';
-import { Workspace } from '@toeverything/infra';
+import { useService, Workspace } from '@toeverything/infra';
import { useCallback, useMemo, useRef, useState } from 'react';
import { ListFloatingToolbar } from '../components/list-floating-toolbar';
diff --git a/packages/frontend/core/src/components/page-list/utils.tsx b/packages/frontend/core/src/components/page-list/utils.tsx
index a2dd53dc4f..af8664d0b8 100644
--- a/packages/frontend/core/src/components/page-list/utils.tsx
+++ b/packages/frontend/core/src/components/page-list/utils.tsx
@@ -1,5 +1,6 @@
import clsx from 'clsx';
-import { type BaseSyntheticEvent, forwardRef } from 'react';
+import type { BaseSyntheticEvent } from 'react';
+import { forwardRef } from 'react';
import * as styles from './list.css';
import type { ColWrapperProps } from './types';
diff --git a/packages/frontend/core/src/components/page-list/view/collection-list.tsx b/packages/frontend/core/src/components/page-list/view/collection-list.tsx
index fae0183eba..2cf32538ee 100644
--- a/packages/frontend/core/src/components/page-list/view/collection-list.tsx
+++ b/packages/frontend/core/src/components/page-list/view/collection-list.tsx
@@ -1,19 +1,17 @@
-import { Button } from '@affine/component';
-import { FlexWrapper } from '@affine/component';
-import { Menu } from '@affine/component';
+import { Button, FlexWrapper, Menu } from '@affine/component';
import type {
Collection,
DeleteCollectionInfo,
Filter,
+ PropertiesMeta,
} from '@affine/env/filter';
-import type { PropertiesMeta } from '@affine/env/filter';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { FilterIcon } from '@blocksuite/icons';
import { CreateFilterMenu } from '../filter/vars';
import * as styles from './collection-list.css';
import { CollectionOperations } from './collection-operations';
-import { type AllPageListConfig } from './edit-collection/edit-collection';
+import type { AllPageListConfig } from './edit-collection/edit-collection';
export const CollectionPageListOperationsMenu = ({
collection,
diff --git a/packages/frontend/core/src/components/page-list/view/collection-operations.tsx b/packages/frontend/core/src/components/page-list/view/collection-operations.tsx
index 6a0054ed7a..36946a2c6e 100644
--- a/packages/frontend/core/src/components/page-list/view/collection-operations.tsx
+++ b/packages/frontend/core/src/components/page-list/view/collection-operations.tsx
@@ -1,9 +1,5 @@
-import {
- Menu,
- MenuIcon,
- MenuItem,
- type MenuItemProps,
-} from '@affine/component';
+import type { MenuItemProps } from '@affine/component';
+import { Menu, MenuIcon, MenuItem } from '@affine/component';
import { useAppSettingHelper } from '@affine/core/hooks/affine/use-app-setting-helper';
import { Workbench } from '@affine/core/modules/workbench';
import type { Collection, DeleteCollectionInfo } from '@affine/env/filter';
@@ -15,12 +11,8 @@ import {
SplitViewIcon,
} from '@blocksuite/icons';
import { useService } from '@toeverything/infra';
-import {
- type PropsWithChildren,
- type ReactElement,
- useCallback,
- useMemo,
-} from 'react';
+import type { PropsWithChildren, ReactElement } from 'react';
+import { useCallback, useMemo } from 'react';
import { CollectionService } from '../../../modules/collection';
import * as styles from './collection-operations.css';
diff --git a/packages/frontend/core/src/components/page-list/view/create-collection.tsx b/packages/frontend/core/src/components/page-list/view/create-collection.tsx
index c075868aef..7f4e5ae554 100644
--- a/packages/frontend/core/src/components/page-list/view/create-collection.tsx
+++ b/packages/frontend/core/src/components/page-list/view/create-collection.tsx
@@ -1,6 +1,6 @@
import { Button, Input, Modal } from '@affine/component';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
-import { type KeyboardEvent } from 'react';
+import type { KeyboardEvent } from 'react';
import { useCallback, useMemo, useState } from 'react';
import * as styles from './create-collection.css';
diff --git a/packages/frontend/core/src/components/page-list/view/edit-collection/edit-collection.tsx b/packages/frontend/core/src/components/page-list/view/edit-collection/edit-collection.tsx
index ecde710eaa..e3577cd926 100644
--- a/packages/frontend/core/src/components/page-list/view/edit-collection/edit-collection.tsx
+++ b/packages/frontend/core/src/components/page-list/view/edit-collection/edit-collection.tsx
@@ -8,7 +8,8 @@ import type { Collection } from '@affine/env/filter';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import type { DocCollection, DocMeta } from '@blocksuite/store';
import type { DialogContentProps } from '@radix-ui/react-dialog';
-import { type ReactNode, useCallback, useMemo, useState } from 'react';
+import type { ReactNode } from 'react';
+import { useCallback, useMemo, useState } from 'react';
import * as styles from './edit-collection.css';
import { PagesMode } from './pages-mode';
diff --git a/packages/frontend/core/src/components/page-list/view/edit-collection/pages-mode.tsx b/packages/frontend/core/src/components/page-list/view/edit-collection/pages-mode.tsx
index 5a328f7bba..8cfe35f2bc 100644
--- a/packages/frontend/core/src/components/page-list/view/edit-collection/pages-mode.tsx
+++ b/packages/frontend/core/src/components/page-list/view/edit-collection/pages-mode.tsx
@@ -4,7 +4,8 @@ import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { FilterIcon } from '@blocksuite/icons';
import type { DocMeta } from '@blocksuite/store';
import clsx from 'clsx';
-import { type ReactNode, useCallback } from 'react';
+import type { ReactNode } from 'react';
+import { useCallback } from 'react';
import { FilterList } from '../../filter/filter-list';
import { VariableSelect } from '../../filter/vars';
diff --git a/packages/frontend/core/src/components/page-list/view/edit-collection/rules-mode.tsx b/packages/frontend/core/src/components/page-list/view/edit-collection/rules-mode.tsx
index d81cf2fb35..58f66ccd2f 100644
--- a/packages/frontend/core/src/components/page-list/view/edit-collection/rules-mode.tsx
+++ b/packages/frontend/core/src/components/page-list/view/edit-collection/rules-mode.tsx
@@ -10,7 +10,8 @@ import {
} from '@blocksuite/icons';
import type { DocMeta } from '@blocksuite/store';
import clsx from 'clsx';
-import { type ReactNode, useCallback, useEffect, useState } from 'react';
+import type { ReactNode } from 'react';
+import { useCallback, useEffect, useState } from 'react';
import { FilterList } from '../../filter';
import { List, ListScrollContainer } from '../../list';
diff --git a/packages/frontend/core/src/components/page-list/view/edit-collection/use-filter.tsx b/packages/frontend/core/src/components/page-list/view/edit-collection/use-filter.tsx
index 8fd5de060c..2c3b609bbf 100644
--- a/packages/frontend/core/src/components/page-list/view/edit-collection/use-filter.tsx
+++ b/packages/frontend/core/src/components/page-list/view/edit-collection/use-filter.tsx
@@ -1,10 +1,9 @@
import type { Filter } from '@affine/env/filter';
-import { type MouseEvent, useCallback, useState } from 'react';
+import type { MouseEvent } from 'react';
+import { useCallback, useState } from 'react';
-import {
- filterPageByRules,
- type PageDataForFilter,
-} from '../../use-collection-manager';
+import type { PageDataForFilter } from '../../use-collection-manager';
+import { filterPageByRules } from '../../use-collection-manager';
export const useFilter = (list: PageDataForFilter[]) => {
const [filters, changeFilters] = useState([]);
diff --git a/packages/frontend/core/src/components/page-list/view/use-action.tsx b/packages/frontend/core/src/components/page-list/view/use-action.tsx
index e524842fab..afe5e3cf8a 100644
--- a/packages/frontend/core/src/components/page-list/view/use-action.tsx
+++ b/packages/frontend/core/src/components/page-list/view/use-action.tsx
@@ -1,7 +1,8 @@
import type { Collection } from '@affine/env/filter';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { DeleteIcon, FilterIcon } from '@blocksuite/icons';
-import { type ReactNode, useMemo } from 'react';
+import type { ReactNode } from 'react';
+import { useMemo } from 'react';
interface CollectionBarAction {
icon: ReactNode;
diff --git a/packages/frontend/core/src/components/page-list/view/use-edit-collection.tsx b/packages/frontend/core/src/components/page-list/view/use-edit-collection.tsx
index bcf5b07f9f..ec6c89d632 100644
--- a/packages/frontend/core/src/components/page-list/view/use-edit-collection.tsx
+++ b/packages/frontend/core/src/components/page-list/view/use-edit-collection.tsx
@@ -2,11 +2,11 @@ import type { Collection } from '@affine/env/filter';
import { useCallback, useState } from 'react';
import { CreateCollectionModal } from './create-collection';
-import {
- type AllPageListConfig,
- EditCollectionModal,
- type EditCollectionMode,
+import type {
+ AllPageListConfig,
+ EditCollectionMode,
} from './edit-collection/edit-collection';
+import { EditCollectionModal } from './edit-collection/edit-collection';
export const useEditCollection = (config: AllPageListConfig) => {
const [data, setData] = useState<{
diff --git a/packages/frontend/core/src/components/page-list/virtualized-list.tsx b/packages/frontend/core/src/components/page-list/virtualized-list.tsx
index b057814b9c..3823f6e383 100644
--- a/packages/frontend/core/src/components/page-list/virtualized-list.tsx
+++ b/packages/frontend/core/src/components/page-list/virtualized-list.tsx
@@ -1,14 +1,8 @@
import { Scrollable } from '@affine/component';
import clsx from 'clsx';
import { selectAtom } from 'jotai/utils';
-import {
- forwardRef,
- type HTMLAttributes,
- type PropsWithChildren,
- useCallback,
- useMemo,
- useState,
-} from 'react';
+import type { HTMLAttributes, PropsWithChildren } from 'react';
+import { forwardRef, useCallback, useMemo, useState } from 'react';
import { Virtuoso } from 'react-virtuoso';
import { ListInnerWrapper } from './list';
diff --git a/packages/frontend/core/src/components/pure/cmdk/data-hooks.tsx b/packages/frontend/core/src/components/pure/cmdk/data-hooks.tsx
index c2922ed658..b709dd13e5 100644
--- a/packages/frontend/core/src/components/pure/cmdk/data-hooks.tsx
+++ b/packages/frontend/core/src/components/pure/cmdk/data-hooks.tsx
@@ -15,19 +15,17 @@ import {
ViewLayersIcon,
} from '@blocksuite/icons';
import type { DocMeta } from '@blocksuite/store';
+import type { AffineCommand, CommandCategory } from '@toeverything/infra';
import {
+ AffineCommandRegistry,
Doc,
PageRecordList,
+ PreconditionStrategy,
useLiveData,
+ useService,
+ useServiceOptional,
Workspace,
} from '@toeverything/infra';
-import {
- type AffineCommand,
- AffineCommandRegistry,
- type CommandCategory,
- PreconditionStrategy,
-} from '@toeverything/infra';
-import { useService, useServiceOptional } from '@toeverything/infra';
import { atom, useAtomValue } from 'jotai';
import { useCallback, useEffect, useMemo, useState } from 'react';
diff --git a/packages/frontend/core/src/components/pure/cmdk/main.tsx b/packages/frontend/core/src/components/pure/cmdk/main.tsx
index e3d295bc2b..9b0680ff97 100644
--- a/packages/frontend/core/src/components/pure/cmdk/main.tsx
+++ b/packages/frontend/core/src/components/pure/cmdk/main.tsx
@@ -17,7 +17,8 @@ import {
} from './data-hooks';
import { HighlightLabel } from './highlight';
import * as styles from './main.css';
-import { CMDKModal, type CMDKModalProps } from './modal';
+import type { CMDKModalProps } from './modal';
+import { CMDKModal } from './modal';
import { NotFoundGroup } from './not-found';
import type { CMDKCommand } from './types';
diff --git a/packages/frontend/core/src/components/pure/footer/index.tsx b/packages/frontend/core/src/components/pure/footer/index.tsx
index 68ef7dcc72..e7fe2102b8 100644
--- a/packages/frontend/core/src/components/pure/footer/index.tsx
+++ b/packages/frontend/core/src/components/pure/footer/index.tsx
@@ -1,6 +1,7 @@
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { CloudWorkspaceIcon } from '@blocksuite/icons';
-import { type CSSProperties, type FC, forwardRef, useCallback } from 'react';
+import type { CSSProperties, FC } from 'react';
+import { forwardRef, useCallback } from 'react';
import { useCurrentLoginStatus } from '../../../hooks/affine/use-current-login-status';
import { stringToColour } from '../../../utils';
diff --git a/packages/frontend/core/src/components/pure/header-drop-down-button/index.tsx b/packages/frontend/core/src/components/pure/header-drop-down-button/index.tsx
index c26c0051ad..c17f909b1d 100644
--- a/packages/frontend/core/src/components/pure/header-drop-down-button/index.tsx
+++ b/packages/frontend/core/src/components/pure/header-drop-down-button/index.tsx
@@ -1,4 +1,5 @@
-import { IconButton, type IconButtonProps } from '@affine/component/ui/button';
+import type { IconButtonProps } from '@affine/component/ui/button';
+import { IconButton } from '@affine/component/ui/button';
import { MoreHorizontalIcon } from '@blocksuite/icons';
import { forwardRef } from 'react';
diff --git a/packages/frontend/core/src/components/pure/help-island/index.tsx b/packages/frontend/core/src/components/pure/help-island/index.tsx
index 6959b92c78..037354a4d6 100644
--- a/packages/frontend/core/src/components/pure/help-island/index.tsx
+++ b/packages/frontend/core/src/components/pure/help-island/index.tsx
@@ -1,8 +1,7 @@
import { Tooltip } from '@affine/component/ui/tooltip';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { CloseIcon, NewIcon } from '@blocksuite/icons';
-import { useLiveData, useServiceOptional } from '@toeverything/infra';
-import { Doc } from '@toeverything/infra';
+import { Doc, useLiveData, useServiceOptional } from '@toeverything/infra';
import { useSetAtom } from 'jotai/react';
import { useCallback, useState } from 'react';
diff --git a/packages/frontend/core/src/components/pure/trash-page-footer/index.tsx b/packages/frontend/core/src/components/pure/trash-page-footer/index.tsx
index 6f8c852661..2d65f782c0 100644
--- a/packages/frontend/core/src/components/pure/trash-page-footer/index.tsx
+++ b/packages/frontend/core/src/components/pure/trash-page-footer/index.tsx
@@ -5,8 +5,7 @@ import { useBlockSuiteDocMeta } from '@affine/core/hooks/use-block-suite-page-me
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { assertExists } from '@blocksuite/global/utils';
import { DeleteIcon, ResetIcon } from '@blocksuite/icons';
-import { useService } from '@toeverything/infra';
-import { useLiveData } from '@toeverything/infra';
+import { useLiveData, useService } from '@toeverything/infra';
import { useCallback, useState } from 'react';
import { useAppSettingHelper } from '../../../hooks/affine/use-app-setting-helper';
diff --git a/packages/frontend/core/src/components/pure/workspace-mode-filter-tab/index.tsx b/packages/frontend/core/src/components/pure/workspace-mode-filter-tab/index.tsx
index 6df7309fe9..9b28c22b85 100644
--- a/packages/frontend/core/src/components/pure/workspace-mode-filter-tab/index.tsx
+++ b/packages/frontend/core/src/components/pure/workspace-mode-filter-tab/index.tsx
@@ -4,8 +4,7 @@ import { allPageFilterSelectAtom } from '@affine/core/atoms';
import { useNavigateHelper } from '@affine/core/hooks/use-navigate-helper';
import { WorkspaceSubPath } from '@affine/core/shared';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
-import { useService } from '@toeverything/infra';
-import { Workspace } from '@toeverything/infra';
+import { useService, Workspace } from '@toeverything/infra';
import { useAtom } from 'jotai';
import { useCallback, useEffect, useState } from 'react';
diff --git a/packages/frontend/core/src/components/pure/workspace-slider-bar/collections/collections-list.tsx b/packages/frontend/core/src/components/pure/workspace-slider-bar/collections/collections-list.tsx
index 535ebadc0e..c72b18d243 100644
--- a/packages/frontend/core/src/components/pure/workspace-slider-bar/collections/collections-list.tsx
+++ b/packages/frontend/core/src/components/pure/workspace-slider-bar/collections/collections-list.tsx
@@ -13,8 +13,7 @@ import { MoreHorizontalIcon, ViewLayersIcon } from '@blocksuite/icons';
import type { DocCollection, DocMeta } from '@blocksuite/store';
import { useDroppable } from '@dnd-kit/core';
import * as Collapsible from '@radix-ui/react-collapsible';
-import { useService } from '@toeverything/infra';
-import { useLiveData } from '@toeverything/infra';
+import { useLiveData, useService } from '@toeverything/infra';
import { useCallback, useMemo, useState } from 'react';
import { useAllPageListConfig } from '../../../../hooks/affine/use-all-page-list-config';
diff --git a/packages/frontend/core/src/components/pure/workspace-slider-bar/components/operation-item.tsx b/packages/frontend/core/src/components/pure/workspace-slider-bar/components/operation-item.tsx
index 33dee8c86d..4a3b760a84 100644
--- a/packages/frontend/core/src/components/pure/workspace-slider-bar/components/operation-item.tsx
+++ b/packages/frontend/core/src/components/pure/workspace-slider-bar/components/operation-item.tsx
@@ -1,9 +1,5 @@
-import {
- MenuIcon,
- MenuItem,
- type MenuItemProps,
- MenuSeparator,
-} from '@affine/component';
+import type { MenuItemProps } from '@affine/component';
+import { MenuIcon, MenuItem, MenuSeparator } from '@affine/component';
import { useAppSettingHelper } from '@affine/core/hooks/affine/use-app-setting-helper';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import {
@@ -14,7 +10,8 @@ import {
LinkedPageIcon,
SplitViewIcon,
} from '@blocksuite/icons';
-import { type ReactElement, useMemo } from 'react';
+import type { ReactElement } from 'react';
+import { useMemo } from 'react';
type OperationItemsProps = {
inFavorites?: boolean;
diff --git a/packages/frontend/core/src/components/pure/workspace-slider-bar/components/reference-page.tsx b/packages/frontend/core/src/components/pure/workspace-slider-bar/components/reference-page.tsx
index 67c3d1c698..075ac83b32 100644
--- a/packages/frontend/core/src/components/pure/workspace-slider-bar/components/reference-page.tsx
+++ b/packages/frontend/core/src/components/pure/workspace-slider-bar/components/reference-page.tsx
@@ -1,7 +1,7 @@
import { useBlockSuitePageReferences } from '@affine/core/hooks/use-block-suite-page-references';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { EdgelessIcon, PageIcon } from '@blocksuite/icons';
-import { type DocCollection, type DocMeta } from '@blocksuite/store';
+import type { DocCollection, DocMeta } from '@blocksuite/store';
import * as Collapsible from '@radix-ui/react-collapsible';
import { PageRecordList, useLiveData, useService } from '@toeverything/infra';
import { useMemo, useState } from 'react';
diff --git a/packages/frontend/core/src/components/pure/workspace-slider-bar/favorite/favourite-page.tsx b/packages/frontend/core/src/components/pure/workspace-slider-bar/favorite/favourite-page.tsx
index 9d44e4bd61..b03580b9f4 100644
--- a/packages/frontend/core/src/components/pure/workspace-slider-bar/favorite/favourite-page.tsx
+++ b/packages/frontend/core/src/components/pure/workspace-slider-bar/favorite/favourite-page.tsx
@@ -3,9 +3,7 @@ import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { EdgelessIcon, PageIcon } from '@blocksuite/icons';
import { useDraggable } from '@dnd-kit/core';
import * as Collapsible from '@radix-ui/react-collapsible';
-import { useService } from '@toeverything/infra';
-import { useLiveData } from '@toeverything/infra';
-import { PageRecordList } from '@toeverything/infra';
+import { PageRecordList, useLiveData, useService } from '@toeverything/infra';
import { useMemo, useState } from 'react';
import { useParams } from 'react-router-dom';
@@ -13,10 +11,8 @@ import { getDragItemId } from '../../../../hooks/affine/use-sidebar-drag';
import { MenuLinkItem } from '../../../app-sidebar';
import { DragMenuItemOverlay } from '../components/drag-menu-item-overlay';
import { PostfixItem } from '../components/postfix-item';
-import {
- ReferencePage,
- type ReferencePageProps,
-} from '../components/reference-page';
+import type { ReferencePageProps } from '../components/reference-page';
+import { ReferencePage } from '../components/reference-page';
import * as styles from './styles.css';
export const FavouritePage = ({
diff --git a/packages/frontend/core/src/components/pure/workspace-slider-bar/user-with-workspace-list/index.tsx b/packages/frontend/core/src/components/pure/workspace-slider-bar/user-with-workspace-list/index.tsx
index a83aa5d864..4daa4c70e7 100644
--- a/packages/frontend/core/src/components/pure/workspace-slider-bar/user-with-workspace-list/index.tsx
+++ b/packages/frontend/core/src/components/pure/workspace-slider-bar/user-with-workspace-list/index.tsx
@@ -5,9 +5,7 @@ import { useSession } from '@affine/core/hooks/affine/use-current-user';
import { Unreachable } from '@affine/env/constant';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { Logo1Icon } from '@blocksuite/icons';
-import { WorkspaceManager } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
-import { useLiveData } from '@toeverything/infra';
+import { useLiveData, useService, WorkspaceManager } from '@toeverything/infra';
import { useSetAtom } from 'jotai';
import { Suspense, useCallback, useEffect } from 'react';
diff --git a/packages/frontend/core/src/components/pure/workspace-slider-bar/user-with-workspace-list/workspace-list/index.tsx b/packages/frontend/core/src/components/pure/workspace-slider-bar/user-with-workspace-list/workspace-list/index.tsx
index 616fdd1460..0b9940d435 100644
--- a/packages/frontend/core/src/components/pure/workspace-slider-bar/user-with-workspace-list/workspace-list/index.tsx
+++ b/packages/frontend/core/src/components/pure/workspace-slider-bar/user-with-workspace-list/workspace-list/index.tsx
@@ -9,9 +9,8 @@ import {
import { WorkspaceFlavour } from '@affine/env/workspace';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import type { DragEndEvent } from '@dnd-kit/core';
-import { WorkspaceManager, type WorkspaceMetadata } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
-import { useLiveData } from '@toeverything/infra';
+import type { WorkspaceMetadata } from '@toeverything/infra';
+import { useLiveData, useService, WorkspaceManager } from '@toeverything/infra';
import { useSetAtom } from 'jotai';
import { useCallback, useMemo } from 'react';
diff --git a/packages/frontend/core/src/components/pure/workspace-slider-bar/workspace-card/index.tsx b/packages/frontend/core/src/components/pure/workspace-slider-bar/workspace-card/index.tsx
index 5fbb11ebe8..52004e2687 100644
--- a/packages/frontend/core/src/components/pure/workspace-slider-bar/workspace-card/index.tsx
+++ b/packages/frontend/core/src/components/pure/workspace-slider-bar/workspace-card/index.tsx
@@ -17,18 +17,11 @@ import {
NoNetworkIcon,
UnsyncIcon,
} from '@blocksuite/icons';
-import { Workspace } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
+import { useService, Workspace } from '@toeverything/infra';
import { useSetAtom } from 'jotai';
import { debounce } from 'lodash-es';
-import {
- forwardRef,
- type HTMLAttributes,
- useCallback,
- useEffect,
- useMemo,
- useState,
-} from 'react';
+import type { HTMLAttributes } from 'react';
+import { forwardRef, useCallback, useEffect, useMemo, useState } from 'react';
import { useSystemOnline } from '../../../../hooks/use-system-online';
import {
diff --git a/packages/frontend/core/src/components/pure/workspace-slider-bar/workspace-card/styles.ts b/packages/frontend/core/src/components/pure/workspace-slider-bar/workspace-card/styles.ts
index 0818d19de6..ea8f62c6de 100644
--- a/packages/frontend/core/src/components/pure/workspace-slider-bar/workspace-card/styles.ts
+++ b/packages/frontend/core/src/components/pure/workspace-slider-bar/workspace-card/styles.ts
@@ -1,5 +1,4 @@
-import { displayFlex, textEllipsis } from '@affine/component';
-import { styled } from '@affine/component';
+import { displayFlex, styled, textEllipsis } from '@affine/component';
export const StyledSelectorContainer = styled('div')({
height: '58px',
display: 'flex',
diff --git a/packages/frontend/core/src/components/root-app-sidebar/index.tsx b/packages/frontend/core/src/components/root-app-sidebar/index.tsx
index 6ddae61383..b24dc0f0ca 100644
--- a/packages/frontend/core/src/components/root-app-sidebar/index.tsx
+++ b/packages/frontend/core/src/components/root-app-sidebar/index.tsx
@@ -4,9 +4,10 @@ import { CollectionService } from '@affine/core/modules/collection';
import { apis, events } from '@affine/electron-api';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { FolderIcon, SettingsIcon } from '@blocksuite/icons';
-import { type Doc } from '@blocksuite/store';
+import type { Doc } from '@blocksuite/store';
import { useDroppable } from '@dnd-kit/core';
-import { useLiveData, useService, type Workspace } from '@toeverything/infra';
+import type { Workspace } from '@toeverything/infra';
+import { useLiveData, useService } from '@toeverything/infra';
import { useAtomValue } from 'jotai';
import { nanoid } from 'nanoid';
import type { HTMLAttributes, ReactElement } from 'react';
diff --git a/packages/frontend/core/src/components/top-tip.tsx b/packages/frontend/core/src/components/top-tip.tsx
index 6efe092c58..77cb984740 100644
--- a/packages/frontend/core/src/components/top-tip.tsx
+++ b/packages/frontend/core/src/components/top-tip.tsx
@@ -1,11 +1,10 @@
-import { BrowserWarning } from '@affine/component/affine-banner';
-import { LocalDemoTips } from '@affine/component/affine-banner';
+import { BrowserWarning, LocalDemoTips } from '@affine/component/affine-banner';
import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
import { WorkspaceFlavour } from '@affine/env/workspace';
import { Trans } from '@affine/i18n';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
-import { type Workspace, WorkspaceManager } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
+import type { Workspace } from '@toeverything/infra';
+import { useService, WorkspaceManager } from '@toeverything/infra';
import { useSetAtom } from 'jotai';
import { useCallback, useState } from 'react';
diff --git a/packages/frontend/core/src/components/workspace-upgrade/upgrade.tsx b/packages/frontend/core/src/components/workspace-upgrade/upgrade.tsx
index c5fc25b247..b58bcf6e1f 100644
--- a/packages/frontend/core/src/components/workspace-upgrade/upgrade.tsx
+++ b/packages/frontend/core/src/components/workspace-upgrade/upgrade.tsx
@@ -4,8 +4,7 @@ import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
import { useNavigateHelper } from '@affine/core/hooks/use-navigate-helper';
import { useWorkspaceStatus } from '@affine/core/hooks/use-workspace-status';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
-import { Workspace, WorkspaceManager } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
+import { useService, Workspace, WorkspaceManager } from '@toeverything/infra';
import { useState } from 'react';
import { WorkspaceSubPath } from '../../shared';
diff --git a/packages/frontend/core/src/components/workspace/index.css.ts b/packages/frontend/core/src/components/workspace/index.css.ts
index cf3d0db37a..7f3bbef7d3 100644
--- a/packages/frontend/core/src/components/workspace/index.css.ts
+++ b/packages/frontend/core/src/components/workspace/index.css.ts
@@ -1,5 +1,4 @@
-import { cssVar } from '@toeverything/theme';
-import { lightCssVariables } from '@toeverything/theme';
+import { cssVar, lightCssVariables } from '@toeverything/theme';
import { globalStyle, style } from '@vanilla-extract/css';
export const appStyle = style({
width: '100%',
diff --git a/packages/frontend/core/src/hooks/__tests__/use-block-suite-workspace-page-title.spec.tsx b/packages/frontend/core/src/hooks/__tests__/use-block-suite-workspace-page-title.spec.tsx
index 5c0ae3635f..8cce3b379a 100644
--- a/packages/frontend/core/src/hooks/__tests__/use-block-suite-workspace-page-title.spec.tsx
+++ b/packages/frontend/core/src/hooks/__tests__/use-block-suite-workspace-page-title.spec.tsx
@@ -5,12 +5,14 @@ import 'fake-indexeddb/auto';
import { WorkspacePropertiesAdapter } from '@affine/core/modules/workspace';
import { render } from '@testing-library/react';
-import { Workspace } from '@toeverything/infra';
-import { ServiceProviderContext, useService } from '@toeverything/infra';
+import {
+ ServiceProviderContext,
+ useService,
+ Workspace,
+} from '@toeverything/infra';
import { createStore, Provider } from 'jotai';
import { Suspense } from 'react';
-import { describe, expect, test, vi } from 'vitest';
-import { beforeEach } from 'vitest';
+import { beforeEach, describe, expect, test, vi } from 'vitest';
import { configureTestingEnvironment } from '../../testing';
import { useDocCollectionPageTitle } from '../use-block-suite-workspace-page-title';
diff --git a/packages/frontend/core/src/hooks/affine/use-all-page-list-config.tsx b/packages/frontend/core/src/hooks/affine/use-all-page-list-config.tsx
index 71f534663b..821717f3d1 100644
--- a/packages/frontend/core/src/hooks/affine/use-all-page-list-config.tsx
+++ b/packages/frontend/core/src/hooks/affine/use-all-page-list-config.tsx
@@ -1,13 +1,10 @@
import { toast } from '@affine/component';
-import {
- type AllPageListConfig,
- FavoriteTag,
-} from '@affine/core/components/page-list';
+import type { AllPageListConfig } from '@affine/core/components/page-list';
+import { FavoriteTag } from '@affine/core/components/page-list';
import { useBlockSuiteDocMeta } from '@affine/core/hooks/use-block-suite-page-meta';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import type { DocMeta } from '@blocksuite/store';
-import { Workspace } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
+import { useService, Workspace } from '@toeverything/infra';
import { useCallback, useMemo } from 'react';
import { usePageHelper } from '../../components/blocksuite/block-suite-page-list/utils';
diff --git a/packages/frontend/core/src/hooks/affine/use-app-setting-helper.ts b/packages/frontend/core/src/hooks/affine/use-app-setting-helper.ts
index eb22b19960..7a4e3eb1af 100644
--- a/packages/frontend/core/src/hooks/affine/use-app-setting-helper.ts
+++ b/packages/frontend/core/src/hooks/affine/use-app-setting-helper.ts
@@ -1,4 +1,5 @@
-import { type AppSetting, appSettingAtom } from '@toeverything/infra';
+import type { AppSetting } from '@toeverything/infra';
+import { appSettingAtom } from '@toeverything/infra';
import { useAtom } from 'jotai';
import { useCallback, useMemo } from 'react';
diff --git a/packages/frontend/core/src/hooks/affine/use-export-page.ts b/packages/frontend/core/src/hooks/affine/use-export-page.ts
index fb8417cad9..64532c2036 100644
--- a/packages/frontend/core/src/hooks/affine/use-export-page.ts
+++ b/packages/frontend/core/src/hooks/affine/use-export-page.ts
@@ -5,12 +5,8 @@ import {
import { pushNotificationAtom } from '@affine/component/notification-center';
import { apis } from '@affine/electron-api';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
-import type { PageRootService } from '@blocksuite/blocks';
-import {
- HtmlTransformer,
- MarkdownTransformer,
- type RootBlockModel,
-} from '@blocksuite/blocks';
+import type { PageRootService, RootBlockModel } from '@blocksuite/blocks';
+import { HtmlTransformer, MarkdownTransformer } from '@blocksuite/blocks';
import type { Doc } from '@blocksuite/store';
import { useSetAtom } from 'jotai';
import { nanoid } from 'nanoid';
diff --git a/packages/frontend/core/src/hooks/affine/use-members.ts b/packages/frontend/core/src/hooks/affine/use-members.ts
index af435dc486..97238a0a94 100644
--- a/packages/frontend/core/src/hooks/affine/use-members.ts
+++ b/packages/frontend/core/src/hooks/affine/use-members.ts
@@ -1,8 +1,5 @@
-import {
- type GetMembersByWorkspaceIdQuery,
- getMembersByWorkspaceIdQuery,
- Permission,
-} from '@affine/graphql';
+import type { GetMembersByWorkspaceIdQuery } from '@affine/graphql';
+import { getMembersByWorkspaceIdQuery, Permission } from '@affine/graphql';
import { useMemo } from 'react';
import { useQuery } from '../use-query';
diff --git a/packages/frontend/core/src/hooks/affine/use-register-blocksuite-editor-commands.tsx b/packages/frontend/core/src/hooks/affine/use-register-blocksuite-editor-commands.tsx
index e319422d25..8a800e9626 100644
--- a/packages/frontend/core/src/hooks/affine/use-register-blocksuite-editor-commands.tsx
+++ b/packages/frontend/core/src/hooks/affine/use-register-blocksuite-editor-commands.tsx
@@ -4,12 +4,14 @@ import { WorkspaceFlavour } from '@affine/env/workspace';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { assertExists } from '@blocksuite/global/utils';
import { EdgelessIcon, HistoryIcon, PageIcon } from '@blocksuite/icons';
-import { Doc, useLiveData, Workspace } from '@toeverything/infra';
import {
+ Doc,
PreconditionStrategy,
registerAffineCommand,
+ useLiveData,
+ useService,
+ Workspace,
} from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
import { useSetAtom } from 'jotai';
import { useCallback, useEffect } from 'react';
diff --git a/packages/frontend/core/src/hooks/affine/use-sidebar-drag.ts b/packages/frontend/core/src/hooks/affine/use-sidebar-drag.ts
index e13de311b1..900d4c3f72 100644
--- a/packages/frontend/core/src/hooks/affine/use-sidebar-drag.ts
+++ b/packages/frontend/core/src/hooks/affine/use-sidebar-drag.ts
@@ -3,8 +3,7 @@ import type { DraggableTitleCellData } from '@affine/core/components/page-list';
import { useDocMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import type { DragEndEvent, UniqueIdentifier } from '@dnd-kit/core';
-import { Workspace } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
+import { useService, Workspace } from '@toeverything/infra';
import { useCallback } from 'react';
import { useBlockSuiteMetaHelper } from './use-block-suite-meta-helper';
diff --git a/packages/frontend/core/src/hooks/use-app-config-storage.ts b/packages/frontend/core/src/hooks/use-app-config-storage.ts
index 29b9859c45..e3d0cf6727 100644
--- a/packages/frontend/core/src/hooks/use-app-config-storage.ts
+++ b/packages/frontend/core/src/hooks/use-app-config-storage.ts
@@ -1,13 +1,10 @@
import { apis } from '@affine/electron-api';
import { setupGlobal } from '@affine/env/global';
import { assertExists } from '@blocksuite/global/utils';
-import {
- type AppConfigSchema,
- AppConfigStorage,
- defaultAppConfig,
-} from '@toeverything/infra';
-import { type Dispatch, useEffect, useState } from 'react';
-import { useMemo } from 'react';
+import type { AppConfigSchema } from '@toeverything/infra';
+import { AppConfigStorage, defaultAppConfig } from '@toeverything/infra';
+import type { Dispatch } from 'react';
+import { useEffect, useMemo, useState } from 'react';
/**
* Helper class to get/set app config from main process
diff --git a/packages/frontend/core/src/hooks/use-app-updater.ts b/packages/frontend/core/src/hooks/use-app-updater.ts
index 4ccea64b4e..d63063d05e 100644
--- a/packages/frontend/core/src/hooks/use-app-updater.ts
+++ b/packages/frontend/core/src/hooks/use-app-updater.ts
@@ -1,4 +1,5 @@
-import { apis, events, type UpdateMeta } from '@affine/electron-api';
+import type { UpdateMeta } from '@affine/electron-api';
+import { apis, events } from '@affine/electron-api';
import { isBrowser } from '@affine/env/constant';
import { appSettingAtom } from '@toeverything/infra';
import { atom, useAtom, useAtomValue } from 'jotai';
diff --git a/packages/frontend/core/src/hooks/use-block-suite-editor.ts b/packages/frontend/core/src/hooks/use-block-suite-editor.ts
index 68d9ff82fb..f8e3f9a570 100644
--- a/packages/frontend/core/src/hooks/use-block-suite-editor.ts
+++ b/packages/frontend/core/src/hooks/use-block-suite-editor.ts
@@ -1,5 +1,6 @@
import type { AffineEditorContainer } from '@blocksuite/presets';
-import { atom, type SetStateAction, useAtom } from 'jotai';
+import type { SetStateAction } from 'jotai';
+import { atom, useAtom } from 'jotai';
const activeEditorContainerAtom = atom(null);
diff --git a/packages/frontend/core/src/hooks/use-block-suite-page-backlinks.ts b/packages/frontend/core/src/hooks/use-block-suite-page-backlinks.ts
index 13d1d81d9f..28766b403a 100644
--- a/packages/frontend/core/src/hooks/use-block-suite-page-backlinks.ts
+++ b/packages/frontend/core/src/hooks/use-block-suite-page-backlinks.ts
@@ -1,5 +1,6 @@
import type { Doc, DocCollection } from '@blocksuite/store';
-import { type Atom, atom, useAtomValue } from 'jotai';
+import type { Atom } from 'jotai';
+import { atom, useAtomValue } from 'jotai';
import { useDocCollectionPage } from './use-block-suite-workspace-page';
diff --git a/packages/frontend/core/src/hooks/use-block-suite-page-references.ts b/packages/frontend/core/src/hooks/use-block-suite-page-references.ts
index ea9ab92313..7b099a7cd6 100644
--- a/packages/frontend/core/src/hooks/use-block-suite-page-references.ts
+++ b/packages/frontend/core/src/hooks/use-block-suite-page-references.ts
@@ -1,5 +1,6 @@
import type { Doc, DocCollection } from '@blocksuite/store';
-import { type Atom, atom, useAtomValue } from 'jotai';
+import type { Atom } from 'jotai';
+import { atom, useAtomValue } from 'jotai';
import { useDocCollectionPage } from './use-block-suite-workspace-page';
diff --git a/packages/frontend/core/src/hooks/use-navigate-helper.ts b/packages/frontend/core/src/hooks/use-navigate-helper.ts
index 6f04fbe273..c7f6538a9b 100644
--- a/packages/frontend/core/src/hooks/use-navigate-helper.ts
+++ b/packages/frontend/core/src/hooks/use-navigate-helper.ts
@@ -1,11 +1,7 @@
import type { WorkspaceSubPath } from '@affine/core/shared';
import { createContext, useCallback, useContext, useMemo } from 'react';
-import {
- type NavigateFunction,
- type NavigateOptions,
- type To,
- useLocation,
-} from 'react-router-dom';
+import type { NavigateFunction, NavigateOptions, To } from 'react-router-dom';
+import { useLocation } from 'react-router-dom';
import { router } from '../router';
diff --git a/packages/frontend/core/src/hooks/use-register-workspace-commands.ts b/packages/frontend/core/src/hooks/use-register-workspace-commands.ts
index 2d38da47e0..77d7271d0d 100644
--- a/packages/frontend/core/src/hooks/use-register-workspace-commands.ts
+++ b/packages/frontend/core/src/hooks/use-register-workspace-commands.ts
@@ -1,6 +1,5 @@
import { useAFFiNEI18N } from '@affine/i18n/hooks';
-import { Workspace } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
+import { useService, Workspace } from '@toeverything/infra';
import { useStore } from 'jotai';
import { useTheme } from 'next-themes';
import { useEffect } from 'react';
diff --git a/packages/frontend/core/src/hooks/use-subscription.ts b/packages/frontend/core/src/hooks/use-subscription.ts
index d6c95a8c10..c3e81816f7 100644
--- a/packages/frontend/core/src/hooks/use-subscription.ts
+++ b/packages/frontend/core/src/hooks/use-subscription.ts
@@ -1,5 +1,6 @@
import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks';
-import { type SubscriptionQuery, subscriptionQuery } from '@affine/graphql';
+import type { SubscriptionQuery } from '@affine/graphql';
+import { subscriptionQuery } from '@affine/graphql';
import { useServerFeatures } from './affine/use-server-config';
import { useQuery } from './use-query';
diff --git a/packages/frontend/core/src/hooks/use-workspace-blob.ts b/packages/frontend/core/src/hooks/use-workspace-blob.ts
index ddca25f34f..3b234c76f8 100644
--- a/packages/frontend/core/src/hooks/use-workspace-blob.ts
+++ b/packages/frontend/core/src/hooks/use-workspace-blob.ts
@@ -1,6 +1,5 @@
import type { WorkspaceMetadata } from '@toeverything/infra';
-import { WorkspaceManager } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
+import { useService, WorkspaceManager } from '@toeverything/infra';
import { useEffect, useState } from 'react';
export function useWorkspaceBlobObjectUrl(
diff --git a/packages/frontend/core/src/hooks/use-workspace-features.ts b/packages/frontend/core/src/hooks/use-workspace-features.ts
index 7391440afd..3587a4e30e 100644
--- a/packages/frontend/core/src/hooks/use-workspace-features.ts
+++ b/packages/frontend/core/src/hooks/use-workspace-features.ts
@@ -5,7 +5,7 @@ import {
enabledFeaturesQuery,
setWorkspaceExperimentalFeatureMutation,
} from '@affine/graphql';
-import { type WorkspaceMetadata } from '@toeverything/infra';
+import type { WorkspaceMetadata } from '@toeverything/infra';
import { useAsyncCallback } from './affine-async-hooks';
import { useMutateQueryResource, useMutation } from './use-mutation';
diff --git a/packages/frontend/core/src/hooks/use-workspace-info.ts b/packages/frontend/core/src/hooks/use-workspace-info.ts
index af07d6b915..4fb04fda73 100644
--- a/packages/frontend/core/src/hooks/use-workspace-info.ts
+++ b/packages/frontend/core/src/hooks/use-workspace-info.ts
@@ -1,5 +1,5 @@
-import { WorkspaceManager, type WorkspaceMetadata } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
+import type { WorkspaceMetadata } from '@toeverything/infra';
+import { useService, WorkspaceManager } from '@toeverything/infra';
import { useEffect, useState } from 'react';
import { useWorkspaceBlobObjectUrl } from './use-workspace-blob';
diff --git a/packages/frontend/core/src/hooks/use-workspace.ts b/packages/frontend/core/src/hooks/use-workspace.ts
index 9323654983..3257f30208 100644
--- a/packages/frontend/core/src/hooks/use-workspace.ts
+++ b/packages/frontend/core/src/hooks/use-workspace.ts
@@ -1,6 +1,5 @@
-import type { WorkspaceMetadata } from '@toeverything/infra';
-import { type Workspace, WorkspaceManager } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
+import type { Workspace, WorkspaceMetadata } from '@toeverything/infra';
+import { useService, WorkspaceManager } from '@toeverything/infra';
import { useEffect, useState } from 'react';
/**
diff --git a/packages/frontend/core/src/layouts/workspace-layout.tsx b/packages/frontend/core/src/layouts/workspace-layout.tsx
index 4d52e07daa..aa16515ee5 100644
--- a/packages/frontend/core/src/layouts/workspace-layout.tsx
+++ b/packages/frontend/core/src/layouts/workspace-layout.tsx
@@ -9,8 +9,12 @@ import {
useSensor,
useSensors,
} from '@dnd-kit/core';
-import { PageRecordList, useLiveData, Workspace } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
+import {
+ PageRecordList,
+ useLiveData,
+ useService,
+ Workspace,
+} from '@toeverything/infra';
import { useAtom, useAtomValue, useSetAtom } from 'jotai';
import type { PropsWithChildren, ReactNode } from 'react';
import { lazy, Suspense, useCallback, useEffect, useState } from 'react';
@@ -25,10 +29,8 @@ import {
appSidebarResizingAtom,
} from '../components/app-sidebar';
import { usePageHelper } from '../components/blocksuite/block-suite-page-list/utils';
-import {
- type DraggableTitleCellData,
- PageListDragOverlay,
-} from '../components/page-list';
+import type { DraggableTitleCellData } from '../components/page-list';
+import { PageListDragOverlay } from '../components/page-list';
import { RootAppSidebar } from '../components/root-app-sidebar';
import { MainContainer, WorkspaceFallback } from '../components/workspace';
import { WorkspaceUpgrade } from '../components/workspace-upgrade';
diff --git a/packages/frontend/core/src/modules/infra-web/global-scope/index.tsx b/packages/frontend/core/src/modules/infra-web/global-scope/index.tsx
index 037d5adf14..efac0f4110 100644
--- a/packages/frontend/core/src/modules/infra-web/global-scope/index.tsx
+++ b/packages/frontend/core/src/modules/infra-web/global-scope/index.tsx
@@ -1,5 +1,5 @@
+import type { ServiceProvider } from '@toeverything/infra';
import {
- type ServiceProvider,
ServiceProviderContext,
useLiveData,
useService,
diff --git a/packages/frontend/core/src/modules/multi-tab-sidebar/entities/tabs/journal.tsx b/packages/frontend/core/src/modules/multi-tab-sidebar/entities/tabs/journal.tsx
index 732cb71204..d1a15194ec 100644
--- a/packages/frontend/core/src/modules/multi-tab-sidebar/entities/tabs/journal.tsx
+++ b/packages/frontend/core/src/modules/multi-tab-sidebar/entities/tabs/journal.tsx
@@ -1,10 +1,5 @@
-import {
- type DateCell,
- DatePicker,
- IconButton,
- Menu,
- Scrollable,
-} from '@affine/component';
+import type { DateCell } from '@affine/component';
+import { DatePicker, IconButton, Menu, Scrollable } from '@affine/component';
import { MoveToTrash } from '@affine/core/components/page-list';
import { useTrashModalHelper } from '@affine/core/hooks/affine/use-trash-modal-helper';
import {
@@ -25,9 +20,9 @@ import {
Doc,
PageRecordList,
useLiveData,
+ useService,
Workspace,
} from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
import { assignInlineVars } from '@vanilla-extract/dynamic';
import clsx from 'clsx';
import dayjs from 'dayjs';
diff --git a/packages/frontend/core/src/modules/navigation/view/navigation-buttons.tsx b/packages/frontend/core/src/modules/navigation/view/navigation-buttons.tsx
index 8dbedeae68..376079ad56 100644
--- a/packages/frontend/core/src/modules/navigation/view/navigation-buttons.tsx
+++ b/packages/frontend/core/src/modules/navigation/view/navigation-buttons.tsx
@@ -1,8 +1,7 @@
import { IconButton, Tooltip } from '@affine/component';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { ArrowLeftSmallIcon, ArrowRightSmallIcon } from '@blocksuite/icons';
-import { useService } from '@toeverything/infra';
-import { useLiveData } from '@toeverything/infra';
+import { useLiveData, useService } from '@toeverything/infra';
import { useCallback, useEffect, useMemo } from 'react';
import { useGeneralShortcuts } from '../../../hooks/affine/use-shortcuts';
diff --git a/packages/frontend/core/src/modules/navigation/view/use-register-navigation-commands.ts b/packages/frontend/core/src/modules/navigation/view/use-register-navigation-commands.ts
index 4b815555a6..102f05ee47 100644
--- a/packages/frontend/core/src/modules/navigation/view/use-register-navigation-commands.ts
+++ b/packages/frontend/core/src/modules/navigation/view/use-register-navigation-commands.ts
@@ -1,8 +1,8 @@
import {
PreconditionStrategy,
registerAffineCommand,
+ useService,
} from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
import { useEffect } from 'react';
import { Navigator } from '../entities/navigator';
diff --git a/packages/frontend/core/src/modules/right-sidebar/view/container.tsx b/packages/frontend/core/src/modules/right-sidebar/view/container.tsx
index a20c4a05da..46f993fd3e 100644
--- a/packages/frontend/core/src/modules/right-sidebar/view/container.tsx
+++ b/packages/frontend/core/src/modules/right-sidebar/view/container.tsx
@@ -1,8 +1,6 @@
import { ResizePanel } from '@affine/component/resize-panel';
import { appSidebarOpenAtom } from '@affine/core/components/app-sidebar';
-import { appSettingAtom } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
-import { useLiveData } from '@toeverything/infra';
+import { appSettingAtom, useLiveData, useService } from '@toeverything/infra';
import { useAtomValue } from 'jotai';
import { useCallback, useEffect, useState } from 'react';
diff --git a/packages/frontend/core/src/modules/services.ts b/packages/frontend/core/src/modules/services.ts
index 52cefe71e0..0c31441797 100644
--- a/packages/frontend/core/src/modules/services.ts
+++ b/packages/frontend/core/src/modules/services.ts
@@ -1,8 +1,8 @@
+import type { ServiceCollection } from '@toeverything/infra';
import {
GlobalCache,
GlobalState,
PageRecordList,
- type ServiceCollection,
Workspace,
WorkspaceScope,
} from '@toeverything/infra';
diff --git a/packages/frontend/core/src/modules/tag/entities/tag.ts b/packages/frontend/core/src/modules/tag/entities/tag.ts
index 7ae7c730e4..0701495631 100644
--- a/packages/frontend/core/src/modules/tag/entities/tag.ts
+++ b/packages/frontend/core/src/modules/tag/entities/tag.ts
@@ -1,5 +1,6 @@
import type { Tag as TagSchema } from '@affine/env/filter';
-import { LiveData, type PageRecordList } from '@toeverything/infra';
+import type { PageRecordList } from '@toeverything/infra';
+import { LiveData } from '@toeverything/infra';
import type { WorkspaceLegacyProperties } from '../../workspace';
diff --git a/packages/frontend/core/src/modules/tag/service/tag.ts b/packages/frontend/core/src/modules/tag/service/tag.ts
index e040747669..f2231bfacc 100644
--- a/packages/frontend/core/src/modules/tag/service/tag.ts
+++ b/packages/frontend/core/src/modules/tag/service/tag.ts
@@ -1,4 +1,5 @@
-import { LiveData, type PageRecordList } from '@toeverything/infra';
+import type { PageRecordList } from '@toeverything/infra';
+import { LiveData } from '@toeverything/infra';
import { nanoid } from 'nanoid';
import type { WorkspaceLegacyProperties } from '../../workspace';
diff --git a/packages/frontend/core/src/modules/workbench/view/browser-adapter.ts b/packages/frontend/core/src/modules/workbench/view/browser-adapter.ts
index 36b215f5aa..542dd92629 100644
--- a/packages/frontend/core/src/modules/workbench/view/browser-adapter.ts
+++ b/packages/frontend/core/src/modules/workbench/view/browser-adapter.ts
@@ -1,5 +1,5 @@
import { useLiveData } from '@toeverything/infra';
-import { type Location } from 'history';
+import type { Location } from 'history';
import { useEffect } from 'react';
// eslint-disable-next-line @typescript-eslint/no-restricted-imports
import { useLocation, useNavigate } from 'react-router-dom';
diff --git a/packages/frontend/core/src/modules/workbench/view/desktop-adapter.ts b/packages/frontend/core/src/modules/workbench/view/desktop-adapter.ts
index e2b652d0b0..110334712a 100644
--- a/packages/frontend/core/src/modules/workbench/view/desktop-adapter.ts
+++ b/packages/frontend/core/src/modules/workbench/view/desktop-adapter.ts
@@ -1,4 +1,4 @@
-import { type Location } from 'history';
+import type { Location } from 'history';
import { useEffect } from 'react';
// eslint-disable-next-line @typescript-eslint/no-restricted-imports
import { useLocation } from 'react-router-dom';
diff --git a/packages/frontend/core/src/modules/workbench/view/route-container.tsx b/packages/frontend/core/src/modules/workbench/view/route-container.tsx
index 0c62de148a..bf561afd68 100644
--- a/packages/frontend/core/src/modules/workbench/view/route-container.tsx
+++ b/packages/frontend/core/src/modules/workbench/view/route-container.tsx
@@ -1,8 +1,7 @@
import { IconButton } from '@affine/component';
import { WindowsAppControls } from '@affine/core/components/pure/header/windows-app-controls';
import { RightSidebarIcon } from '@blocksuite/icons';
-import { useLiveData } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
+import { useLiveData, useService } from '@toeverything/infra';
import { useAtomValue } from 'jotai';
import { Suspense, useCallback } from 'react';
diff --git a/packages/frontend/core/src/modules/workbench/view/split-view/indicator.tsx b/packages/frontend/core/src/modules/workbench/view/split-view/indicator.tsx
index a5d30aef63..e8aa96a64a 100644
--- a/packages/frontend/core/src/modules/workbench/view/split-view/indicator.tsx
+++ b/packages/frontend/core/src/modules/workbench/view/split-view/indicator.tsx
@@ -1,14 +1,8 @@
-import { Menu, type MenuProps } from '@affine/component';
+import type { MenuProps } from '@affine/component';
+import { Menu } from '@affine/component';
import clsx from 'clsx';
-import {
- forwardRef,
- type HTMLAttributes,
- memo,
- type MouseEventHandler,
- useCallback,
- useMemo,
- useState,
-} from 'react';
+import type { HTMLAttributes, MouseEventHandler } from 'react';
+import { forwardRef, memo, useCallback, useMemo, useState } from 'react';
import * as styles from './indicator.css';
diff --git a/packages/frontend/core/src/modules/workbench/view/split-view/panel.tsx b/packages/frontend/core/src/modules/workbench/view/split-view/panel.tsx
index a300725fa0..2efec77412 100644
--- a/packages/frontend/core/src/modules/workbench/view/split-view/panel.tsx
+++ b/packages/frontend/core/src/modules/workbench/view/split-view/panel.tsx
@@ -7,22 +7,16 @@ import {
SoloViewIcon,
} from '@blocksuite/icons';
import { useSortable } from '@dnd-kit/sortable';
-import { useService } from '@toeverything/infra';
-import { useLiveData } from '@toeverything/infra';
+import { useLiveData, useService } from '@toeverything/infra';
import { assignInlineVars } from '@vanilla-extract/dynamic';
import type { SetStateAction } from 'jotai';
-import {
- type Dispatch,
- type HTMLAttributes,
- memo,
- type PropsWithChildren,
- type RefObject,
- useCallback,
- useEffect,
- useMemo,
- useRef,
- useState,
+import type {
+ Dispatch,
+ HTMLAttributes,
+ PropsWithChildren,
+ RefObject,
} from 'react';
+import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';
import type { View } from '../../entities/view';
import { Workbench } from '../../entities/workbench';
diff --git a/packages/frontend/core/src/modules/workbench/view/split-view/resize-handle.tsx b/packages/frontend/core/src/modules/workbench/view/split-view/resize-handle.tsx
index 26f52d218d..d3498542ab 100644
--- a/packages/frontend/core/src/modules/workbench/view/split-view/resize-handle.tsx
+++ b/packages/frontend/core/src/modules/workbench/view/split-view/resize-handle.tsx
@@ -1,4 +1,5 @@
-import { type HTMLAttributes, useCallback } from 'react';
+import type { HTMLAttributes } from 'react';
+import { useCallback } from 'react';
import * as styles from './split-view.css';
diff --git a/packages/frontend/core/src/modules/workbench/view/split-view/split-view.tsx b/packages/frontend/core/src/modules/workbench/view/split-view/split-view.tsx
index 84684af6c4..dd1c2deec0 100644
--- a/packages/frontend/core/src/modules/workbench/view/split-view/split-view.tsx
+++ b/packages/frontend/core/src/modules/workbench/view/split-view/split-view.tsx
@@ -1,8 +1,8 @@
import { useAppSettingHelper } from '@affine/core/hooks/affine/use-app-setting-helper';
+import type { DragEndEvent } from '@dnd-kit/core';
import {
closestCenter,
DndContext,
- type DragEndEvent,
PointerSensor,
useSensor,
useSensors,
@@ -13,13 +13,8 @@ import {
} from '@dnd-kit/sortable';
import { useService } from '@toeverything/infra';
import clsx from 'clsx';
-import {
- type HTMLAttributes,
- type RefObject,
- useCallback,
- useRef,
- useState,
-} from 'react';
+import type { HTMLAttributes, RefObject } from 'react';
+import { useCallback, useRef, useState } from 'react';
import { createPortal } from 'react-dom';
import type { View } from '../../entities/view';
diff --git a/packages/frontend/core/src/modules/workbench/view/use-is-active-view.tsx b/packages/frontend/core/src/modules/workbench/view/use-is-active-view.tsx
index 396e8be706..09429b52ac 100644
--- a/packages/frontend/core/src/modules/workbench/view/use-is-active-view.tsx
+++ b/packages/frontend/core/src/modules/workbench/view/use-is-active-view.tsx
@@ -1,5 +1,4 @@
-import { useService } from '@toeverything/infra';
-import { useLiveData } from '@toeverything/infra';
+import { useLiveData, useService } from '@toeverything/infra';
import { Workbench } from '../entities/workbench';
import { useView } from './use-view';
diff --git a/packages/frontend/core/src/modules/workbench/view/workbench-link.tsx b/packages/frontend/core/src/modules/workbench/view/workbench-link.tsx
index 33a605fb56..5ceda1ef3a 100644
--- a/packages/frontend/core/src/modules/workbench/view/workbench-link.tsx
+++ b/packages/frontend/core/src/modules/workbench/view/workbench-link.tsx
@@ -1,6 +1,5 @@
import { useAppSettingHelper } from '@affine/core/hooks/affine/use-app-setting-helper';
-import { useService } from '@toeverything/infra';
-import { useLiveData } from '@toeverything/infra';
+import { useLiveData, useService } from '@toeverything/infra';
import type { To } from 'history';
import { useCallback } from 'react';
diff --git a/packages/frontend/core/src/modules/workbench/view/workbench-root.tsx b/packages/frontend/core/src/modules/workbench/view/workbench-root.tsx
index 64a119952a..bebf038274 100644
--- a/packages/frontend/core/src/modules/workbench/view/workbench-root.tsx
+++ b/packages/frontend/core/src/modules/workbench/view/workbench-root.tsx
@@ -1,5 +1,4 @@
-import { useService } from '@toeverything/infra';
-import { useLiveData } from '@toeverything/infra';
+import { useLiveData, useService } from '@toeverything/infra';
import { useCallback, useEffect, useRef } from 'react';
import { useLocation } from 'react-router-dom';
diff --git a/packages/frontend/core/src/modules/workspace/properties/adapter.ts b/packages/frontend/core/src/modules/workspace/properties/adapter.ts
index c2cba0174f..00bcc043fb 100644
--- a/packages/frontend/core/src/modules/workspace/properties/adapter.ts
+++ b/packages/frontend/core/src/modules/workspace/properties/adapter.ts
@@ -1,16 +1,16 @@
/* eslint-disable @typescript-eslint/no-non-null-assertion */
// the adapter is to bridge the workspace rootdoc & native js bindings
-import { createYProxy, type Y } from '@blocksuite/store';
+import type { Y } from '@blocksuite/store';
+import { createYProxy } from '@blocksuite/store';
import type { Workspace } from '@toeverything/infra';
import { defaultsDeep } from 'lodash-es';
-import {
- PagePropertyType,
- PageSystemPropertyId,
- type WorkspaceAffineProperties,
- type WorkspaceFavoriteItem,
+import type {
+ WorkspaceAffineProperties,
+ WorkspaceFavoriteItem,
} from './schema';
+import { PagePropertyType, PageSystemPropertyId } from './schema';
const AFFINE_PROPERTIES_ID = 'affine:workspace-properties';
diff --git a/packages/frontend/core/src/pages/auth.tsx b/packages/frontend/core/src/pages/auth.tsx
index 6f27042856..732ffe2bdf 100644
--- a/packages/frontend/core/src/pages/auth.tsx
+++ b/packages/frontend/core/src/pages/auth.tsx
@@ -11,20 +11,16 @@ import { pushNotificationAtom } from '@affine/component/notification-center';
import {
changeEmailMutation,
changePasswordMutation,
+ fetcher,
sendVerifyChangeEmailMutation,
verifyEmailMutation,
} from '@affine/graphql';
-import { fetcher } from '@affine/graphql';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { useSetAtom } from 'jotai/react';
import type { ReactElement } from 'react';
import { useCallback } from 'react';
-import {
- type LoaderFunction,
- redirect,
- useParams,
- useSearchParams,
-} from 'react-router-dom';
+import type { LoaderFunction } from 'react-router-dom';
+import { redirect, useParams, useSearchParams } from 'react-router-dom';
import { z } from 'zod';
import { SubscriptionRedirect } from '../components/affine/auth/subscription-redirect';
diff --git a/packages/frontend/core/src/pages/desktop-signin.tsx b/packages/frontend/core/src/pages/desktop-signin.tsx
index 04d45b3cb0..7d03c916e8 100644
--- a/packages/frontend/core/src/pages/desktop-signin.tsx
+++ b/packages/frontend/core/src/pages/desktop-signin.tsx
@@ -1,5 +1,5 @@
import { OAuthProviderType } from '@affine/graphql';
-import { type LoaderFunction } from 'react-router-dom';
+import type { LoaderFunction } from 'react-router-dom';
import { z } from 'zod';
import { getSession } from '../hooks/affine/use-current-user';
diff --git a/packages/frontend/core/src/pages/index.tsx b/packages/frontend/core/src/pages/index.tsx
index 27c4600f4c..7a14883d9d 100644
--- a/packages/frontend/core/src/pages/index.tsx
+++ b/packages/frontend/core/src/pages/index.tsx
@@ -1,10 +1,12 @@
import { Menu } from '@affine/component/ui/menu';
-import { WorkspaceManager } from '@toeverything/infra';
-import { WorkspaceListService } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
-import { useLiveData } from '@toeverything/infra';
+import {
+ useLiveData,
+ useService,
+ WorkspaceListService,
+ WorkspaceManager,
+} from '@toeverything/infra';
import { lazy, useEffect, useLayoutEffect, useState } from 'react';
-import { type LoaderFunction } from 'react-router-dom';
+import type { LoaderFunction } from 'react-router-dom';
import { createFirstAppData } from '../bootstrap/first-app-data';
import { UserWithWorkspaceList } from '../components/pure/workspace-slider-bar/user-with-workspace-list';
diff --git a/packages/frontend/core/src/pages/invite.tsx b/packages/frontend/core/src/pages/invite.tsx
index e8f46c0509..3f07ffd834 100644
--- a/packages/frontend/core/src/pages/invite.tsx
+++ b/packages/frontend/core/src/pages/invite.tsx
@@ -1,14 +1,15 @@
import { AcceptInvitePage } from '@affine/component/member-components';
import { WorkspaceSubPath } from '@affine/core/shared';
+import type { GetInviteInfoQuery } from '@affine/graphql';
import {
acceptInviteByInviteIdMutation,
- type GetInviteInfoQuery,
+ fetcher,
getInviteInfoQuery,
} from '@affine/graphql';
-import { fetcher } from '@affine/graphql';
import { useSetAtom } from 'jotai';
import { useCallback, useEffect } from 'react';
-import { type LoaderFunction, redirect, useLoaderData } from 'react-router-dom';
+import type { LoaderFunction } from 'react-router-dom';
+import { redirect, useLoaderData } from 'react-router-dom';
import { authAtom } from '../atoms';
import { setOnceSignedInEventAtom } from '../atoms/event';
diff --git a/packages/frontend/core/src/pages/open-app.tsx b/packages/frontend/core/src/pages/open-app.tsx
index f1d9016f46..1dd829d8c8 100644
--- a/packages/frontend/core/src/pages/open-app.tsx
+++ b/packages/frontend/core/src/pages/open-app.tsx
@@ -1,15 +1,12 @@
import { Button } from '@affine/component/ui/button';
-import { type GetCurrentUserQuery, getCurrentUserQuery } from '@affine/graphql';
-import { fetcher } from '@affine/graphql';
+import type { GetCurrentUserQuery } from '@affine/graphql';
+import { fetcher, getCurrentUserQuery } from '@affine/graphql';
import { Trans } from '@affine/i18n';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { Logo1Icon } from '@blocksuite/icons';
import { useCallback, useMemo } from 'react';
-import {
- type LoaderFunction,
- useLoaderData,
- useSearchParams,
-} from 'react-router-dom';
+import type { LoaderFunction } from 'react-router-dom';
+import { useLoaderData, useSearchParams } from 'react-router-dom';
import { z } from 'zod';
import * as styles from './open-app.css';
diff --git a/packages/frontend/core/src/pages/share/share-detail-page.tsx b/packages/frontend/core/src/pages/share/share-detail-page.tsx
index 5043745b4f..8ed7594d81 100644
--- a/packages/frontend/core/src/pages/share/share-detail-page.tsx
+++ b/packages/frontend/core/src/pages/share/share-detail-page.tsx
@@ -13,13 +13,13 @@ import { noop } from '@blocksuite/global/utils';
import { Logo1Icon } from '@blocksuite/icons';
import type { AffineEditorContainer } from '@blocksuite/presets';
import type { Doc as BlockSuiteDoc } from '@blocksuite/store';
-import type { Doc } from '@toeverything/infra';
+import type { Doc, PageMode } from '@toeverything/infra';
import {
DocStorageImpl,
EmptyBlobStorage,
LocalBlobStorage,
PageManager,
- type PageMode,
+ ReadonlyDocStorage,
RemoteBlobStorage,
ServiceProviderContext,
useLiveData,
@@ -28,7 +28,6 @@ import {
WorkspaceManager,
WorkspaceScope,
} from '@toeverything/infra';
-import { ReadonlyDocStorage } from '@toeverything/infra';
import { useCallback, useEffect, useState } from 'react';
import type { LoaderFunction } from 'react-router-dom';
import {
diff --git a/packages/frontend/core/src/pages/sign-in.tsx b/packages/frontend/core/src/pages/sign-in.tsx
index 68f735c6a4..bfc42b80d4 100644
--- a/packages/frontend/core/src/pages/sign-in.tsx
+++ b/packages/frontend/core/src/pages/sign-in.tsx
@@ -5,7 +5,8 @@ import { useCallback, useEffect, useRef } from 'react';
import { useLocation, useNavigate } from 'react-router-dom';
import { authAtom } from '../atoms';
-import { AuthPanel, type AuthProps } from '../components/affine/auth';
+import type { AuthProps } from '../components/affine/auth';
+import { AuthPanel } from '../components/affine/auth';
import { SubscriptionRedirect } from '../components/affine/auth/subscription-redirect';
import { useSubscriptionSearch } from '../components/affine/auth/use-subscription';
import { useCurrentLoginStatus } from '../hooks/affine/use-current-login-status';
diff --git a/packages/frontend/core/src/pages/workspace/all-collection/index.tsx b/packages/frontend/core/src/pages/workspace/all-collection/index.tsx
index 15881301df..656cabd106 100644
--- a/packages/frontend/core/src/pages/workspace/all-collection/index.tsx
+++ b/packages/frontend/core/src/pages/workspace/all-collection/index.tsx
@@ -1,6 +1,6 @@
+import type { CollectionMeta } from '@affine/core/components/page-list';
import {
CollectionListHeader,
- type CollectionMeta,
createEmptyCollection,
useEditCollectionName,
VirtualizedCollectionList,
@@ -8,9 +8,7 @@ import {
import { useAllPageListConfig } from '@affine/core/hooks/affine/use-all-page-list-config';
import { useNavigateHelper } from '@affine/core/hooks/use-navigate-helper';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
-import { useService } from '@toeverything/infra';
-import { useLiveData } from '@toeverything/infra';
-import { Workspace } from '@toeverything/infra';
+import { useLiveData, useService, Workspace } from '@toeverything/infra';
import { nanoid } from 'nanoid';
import { useCallback, useMemo, useState } from 'react';
diff --git a/packages/frontend/core/src/pages/workspace/all-page/all-page-filter.tsx b/packages/frontend/core/src/pages/workspace/all-page/all-page-filter.tsx
index 86b7b66f57..ee082fb2b6 100644
--- a/packages/frontend/core/src/pages/workspace/all-page/all-page-filter.tsx
+++ b/packages/frontend/core/src/pages/workspace/all-page/all-page-filter.tsx
@@ -1,7 +1,6 @@
import { CollectionService } from '@affine/core/modules/collection';
import type { Collection, Filter } from '@affine/env/filter';
-import { useService } from '@toeverything/infra';
-import { Workspace } from '@toeverything/infra';
+import { useService, Workspace } from '@toeverything/infra';
import { useCallback } from 'react';
import { filterContainerStyle } from '../../../components/filter-container.css';
diff --git a/packages/frontend/core/src/pages/workspace/all-page/all-page-header.tsx b/packages/frontend/core/src/pages/workspace/all-page/all-page-header.tsx
index 32220d6a0c..e798033861 100644
--- a/packages/frontend/core/src/pages/workspace/all-page/all-page-header.tsx
+++ b/packages/frontend/core/src/pages/workspace/all-page/all-page-header.tsx
@@ -6,8 +6,7 @@ import { Header } from '@affine/core/components/pure/header';
import { WorkspaceModeFilterTab } from '@affine/core/components/pure/workspace-mode-filter-tab';
import type { Filter } from '@affine/env/filter';
import { PlusIcon } from '@blocksuite/icons';
-import { useService } from '@toeverything/infra';
-import { Workspace } from '@toeverything/infra';
+import { useService, Workspace } from '@toeverything/infra';
import clsx from 'clsx';
import * as styles from './all-page.css';
diff --git a/packages/frontend/core/src/pages/workspace/all-page/all-page.tsx b/packages/frontend/core/src/pages/workspace/all-page/all-page.tsx
index 847a82eee0..4ea61c9100 100644
--- a/packages/frontend/core/src/pages/workspace/all-page/all-page.tsx
+++ b/packages/frontend/core/src/pages/workspace/all-page/all-page.tsx
@@ -7,8 +7,7 @@ import { useBlockSuiteDocMeta } from '@affine/core/hooks/use-block-suite-page-me
import { useNavigateHelper } from '@affine/core/hooks/use-navigate-helper';
import { performanceRenderLogger } from '@affine/core/shared';
import type { Filter } from '@affine/env/filter';
-import { useService } from '@toeverything/infra';
-import { Workspace } from '@toeverything/infra';
+import { useService, Workspace } from '@toeverything/infra';
import { useEffect, useState } from 'react';
import { ViewBodyIsland, ViewHeaderIsland } from '../../../modules/workbench';
diff --git a/packages/frontend/core/src/pages/workspace/collection/index.tsx b/packages/frontend/core/src/pages/workspace/collection/index.tsx
index 16b3715b15..46a64f0f74 100644
--- a/packages/frontend/core/src/pages/workspace/collection/index.tsx
+++ b/packages/frontend/core/src/pages/workspace/collection/index.tsx
@@ -16,9 +16,7 @@ import {
PageIcon,
ViewLayersIcon,
} from '@blocksuite/icons';
-import { Workspace } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
-import { useLiveData } from '@toeverything/infra';
+import { useLiveData, useService, Workspace } from '@toeverything/infra';
import { useSetAtom } from 'jotai';
import { useCallback, useEffect, useState } from 'react';
import { useParams } from 'react-router-dom';
diff --git a/packages/frontend/core/src/pages/workspace/detail-page/detail-page.tsx b/packages/frontend/core/src/pages/workspace/detail-page/detail-page.tsx
index c97336799e..0c225c73d9 100644
--- a/packages/frontend/core/src/pages/workspace/detail-page/detail-page.tsx
+++ b/packages/frontend/core/src/pages/workspace/detail-page/detail-page.tsx
@@ -22,14 +22,14 @@ import {
PageRecordList,
ServiceProviderContext,
useLiveData,
+ useService,
+ Workspace,
} from '@toeverything/infra';
-import { Workspace } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
import clsx from 'clsx';
import { useSetAtom } from 'jotai';
+import type { ReactElement } from 'react';
import {
memo,
- type ReactElement,
useCallback,
useEffect,
useLayoutEffect,
@@ -50,12 +50,12 @@ import { useRegisterBlocksuiteEditorCommands } from '../../../hooks/affine/use-r
import { useActiveBlocksuiteEditor } from '../../../hooks/use-block-suite-editor';
import { usePageDocumentTitle } from '../../../hooks/use-global-state';
import { useNavigateHelper } from '../../../hooks/use-navigate-helper';
+import type { SidebarTabName } from '../../../modules/multi-tab-sidebar';
import {
MultiTabSidebarBody,
MultiTabSidebarHeaderSwitcher,
- type SidebarTabName,
+ sidebarTabs,
} from '../../../modules/multi-tab-sidebar';
-import { sidebarTabs } from '../../../modules/multi-tab-sidebar';
import { RightSidebarViewIsland } from '../../../modules/right-sidebar';
import {
useIsActiveView,
diff --git a/packages/frontend/core/src/pages/workspace/index.tsx b/packages/frontend/core/src/pages/workspace/index.tsx
index ac791757bb..a80f4e9d9e 100644
--- a/packages/frontend/core/src/pages/workspace/index.tsx
+++ b/packages/frontend/core/src/pages/workspace/index.tsx
@@ -1,9 +1,14 @@
import { useWorkspace } from '@affine/core/hooks/use-workspace';
import type { Workspace } from '@toeverything/infra';
-import { WorkspaceListService, WorkspaceManager } from '@toeverything/infra';
-import { ServiceProviderContext, useService } from '@toeverything/infra';
-import { useLiveData } from '@toeverything/infra';
-import { type ReactElement, Suspense, useEffect, useMemo } from 'react';
+import {
+ ServiceProviderContext,
+ useLiveData,
+ useService,
+ WorkspaceListService,
+ WorkspaceManager,
+} from '@toeverything/infra';
+import type { ReactElement } from 'react';
+import { Suspense, useEffect, useMemo } from 'react';
import { useParams } from 'react-router-dom';
import { AffineErrorBoundary } from '../../components/affine/affine-error-boundary';
diff --git a/packages/frontend/core/src/pages/workspace/page-list-empty.tsx b/packages/frontend/core/src/pages/workspace/page-list-empty.tsx
index d80fd861b4..9b9ac4675b 100644
--- a/packages/frontend/core/src/pages/workspace/page-list-empty.tsx
+++ b/packages/frontend/core/src/pages/workspace/page-list-empty.tsx
@@ -2,7 +2,8 @@ import { Empty } from '@affine/component';
import { Trans } from '@affine/i18n';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import type { DocCollection } from '@blocksuite/store';
-import { type ReactNode, useCallback } from 'react';
+import type { ReactNode } from 'react';
+import { useCallback } from 'react';
import { usePageHelper } from '../../components/blocksuite/block-suite-page-list/utils';
import * as styles from './page-list-empty.css';
diff --git a/packages/frontend/core/src/pages/workspace/tag/index.tsx b/packages/frontend/core/src/pages/workspace/tag/index.tsx
index 87d799e1d8..200e2d99b0 100644
--- a/packages/frontend/core/src/pages/workspace/tag/index.tsx
+++ b/packages/frontend/core/src/pages/workspace/tag/index.tsx
@@ -8,8 +8,7 @@ import {
ViewBodyIsland,
ViewHeaderIsland,
} from '@affine/core/modules/workbench';
-import { useLiveData, useService } from '@toeverything/infra';
-import { Workspace } from '@toeverything/infra';
+import { useLiveData, useService, Workspace } from '@toeverything/infra';
import { useMemo } from 'react';
import { useParams } from 'react-router-dom';
diff --git a/packages/frontend/core/src/pages/workspace/trash-page.tsx b/packages/frontend/core/src/pages/workspace/trash-page.tsx
index d469969d9f..fb02b1c460 100644
--- a/packages/frontend/core/src/pages/workspace/trash-page.tsx
+++ b/packages/frontend/core/src/pages/workspace/trash-page.tsx
@@ -1,7 +1,7 @@
import { toast } from '@affine/component';
import { usePageHelper } from '@affine/core/components/blocksuite/block-suite-page-list/utils';
+import type { ListItem } from '@affine/core/components/page-list';
import {
- type ListItem,
ListTableHeader,
PageListItemRenderer,
TrashOperationCell,
@@ -17,8 +17,7 @@ import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { assertExists } from '@blocksuite/global/utils';
import { DeleteIcon } from '@blocksuite/icons';
import type { DocMeta } from '@blocksuite/store';
-import { Workspace } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
+import { useService, Workspace } from '@toeverything/infra';
import { useCallback } from 'react';
import { ViewBodyIsland, ViewHeaderIsland } from '../../modules/workbench';
diff --git a/packages/frontend/core/src/providers/modal-provider.tsx b/packages/frontend/core/src/providers/modal-provider.tsx
index a92a844477..7e6630d833 100644
--- a/packages/frontend/core/src/providers/modal-provider.tsx
+++ b/packages/frontend/core/src/providers/modal-provider.tsx
@@ -1,24 +1,17 @@
import { events } from '@affine/electron-api';
import { WorkspaceFlavour } from '@affine/env/workspace';
-import { WorkspaceManager } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
-import { useLiveData } from '@toeverything/infra';
+import { useLiveData, useService, WorkspaceManager } from '@toeverything/infra';
import { useAtom } from 'jotai';
-import {
- lazy,
- type ReactElement,
- Suspense,
- useCallback,
- useEffect,
-} from 'react';
+import type { ReactElement } from 'react';
+import { lazy, Suspense, useCallback, useEffect } from 'react';
+import type { SettingAtom } from '../atoms';
import {
authAtom,
openCreateWorkspaceModalAtom,
openDisableCloudAlertModalAtom,
openSettingModalAtom,
openSignOutModalAtom,
- type SettingAtom,
} from '../atoms';
import { PaymentDisableModal } from '../components/affine/payment-disable';
import { useAsyncCallback } from '../hooks/affine-async-hooks';
diff --git a/packages/frontend/core/src/providers/session-provider.tsx b/packages/frontend/core/src/providers/session-provider.tsx
index d0abae5521..57a437b564 100644
--- a/packages/frontend/core/src/providers/session-provider.tsx
+++ b/packages/frontend/core/src/providers/session-provider.tsx
@@ -5,12 +5,8 @@ import { affine } from '@affine/electron-api';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { CLOUD_WORKSPACE_CHANGED_BROADCAST_CHANNEL_KEY } from '@affine/workspace-impl';
import { useSetAtom } from 'jotai';
-import {
- type PropsWithChildren,
- startTransition,
- useEffect,
- useRef,
-} from 'react';
+import type { PropsWithChildren } from 'react';
+import { startTransition, useEffect, useRef } from 'react';
import { useOnceSignedInEvents } from '../atoms/event';
import { mixpanel } from '../utils';
diff --git a/packages/frontend/core/src/utils/mixpanel.ts b/packages/frontend/core/src/utils/mixpanel.ts
index 6920d2e170..10ebfc1b07 100644
--- a/packages/frontend/core/src/utils/mixpanel.ts
+++ b/packages/frontend/core/src/utils/mixpanel.ts
@@ -1,4 +1,5 @@
-import mixpanelBrowser, { type OverridedMixpanel } from 'mixpanel-browser';
+import type { OverridedMixpanel } from 'mixpanel-browser';
+import mixpanelBrowser from 'mixpanel-browser';
export const mixpanel = process.env.MIXPANEL_TOKEN
? mixpanelBrowser
diff --git a/packages/frontend/core/src/utils/navigable-history.ts b/packages/frontend/core/src/utils/navigable-history.ts
index 0f6b798e14..a1d3e02b7b 100644
--- a/packages/frontend/core/src/utils/navigable-history.ts
+++ b/packages/frontend/core/src/utils/navigable-history.ts
@@ -1,11 +1,12 @@
-import type { Blocker, Listener, Location, To } from 'history';
-import {
- Action,
- createPath,
- type MemoryHistory,
- type MemoryHistoryOptions,
- parsePath,
+import type {
+ Blocker,
+ Listener,
+ Location,
+ MemoryHistory,
+ MemoryHistoryOptions,
+ To,
} from 'history';
+import { Action, createPath, parsePath } from 'history';
export interface NavigableHistory extends MemoryHistory {
entries: Location[];
diff --git a/packages/frontend/core/src/web.ts b/packages/frontend/core/src/web.ts
index 3c6b5aa91a..b1b41ac412 100644
--- a/packages/frontend/core/src/web.ts
+++ b/packages/frontend/core/src/web.ts
@@ -1,8 +1,6 @@
import { configureWorkspaceImplServices } from '@affine/workspace-impl';
-import {
- configureInfraServices,
- type ServiceCollection,
-} from '@toeverything/infra';
+import type { ServiceCollection } from '@toeverything/infra';
+import { configureInfraServices } from '@toeverything/infra';
import {
configureBusinessServices,
diff --git a/packages/frontend/electron/renderer/app.tsx b/packages/frontend/electron/renderer/app.tsx
index 8567e83395..67bab60ea2 100644
--- a/packages/frontend/electron/renderer/app.tsx
+++ b/packages/frontend/electron/renderer/app.tsx
@@ -16,8 +16,7 @@ import createEmotionCache from '@affine/core/utils/create-emotion-cache';
import { configureWebServices } from '@affine/core/web';
import { createI18n, setUpLanguage } from '@affine/i18n';
import { CacheProvider } from '@emotion/react';
-import { getCurrentStore } from '@toeverything/infra';
-import { ServiceCollection } from '@toeverything/infra';
+import { getCurrentStore, ServiceCollection } from '@toeverything/infra';
import mixpanel from 'mixpanel-browser';
import type { PropsWithChildren, ReactElement } from 'react';
import { lazy, Suspense } from 'react';
diff --git a/packages/frontend/electron/src/helper/db/base-db-adapter.ts b/packages/frontend/electron/src/helper/db/base-db-adapter.ts
index cc17c857c0..4f7763d292 100644
--- a/packages/frontend/electron/src/helper/db/base-db-adapter.ts
+++ b/packages/frontend/electron/src/helper/db/base-db-adapter.ts
@@ -1,8 +1,5 @@
-import {
- type InsertRow,
- SqliteConnection,
- ValidationResult,
-} from '@affine/native';
+import type { InsertRow } from '@affine/native';
+import { SqliteConnection, ValidationResult } from '@affine/native';
import { WorkspaceVersion } from '@toeverything/infra';
import { applyGuidCompatibilityFix, migrateToLatest } from '../db/migration';
diff --git a/packages/frontend/electron/src/helper/db/ensure-db.ts b/packages/frontend/electron/src/helper/db/ensure-db.ts
index 593ce9fc72..dc0d857993 100644
--- a/packages/frontend/electron/src/helper/db/ensure-db.ts
+++ b/packages/frontend/electron/src/helper/db/ensure-db.ts
@@ -1,5 +1,4 @@
import type { Subject } from 'rxjs';
-import { Observable } from 'rxjs';
import {
concat,
defer,
@@ -8,6 +7,7 @@ import {
interval,
lastValueFrom,
merge,
+ Observable,
} from 'rxjs';
import {
concatMap,
diff --git a/packages/frontend/electron/src/main/clipboard/index.ts b/packages/frontend/electron/src/main/clipboard/index.ts
index 43d918904c..2d8d394d45 100644
--- a/packages/frontend/electron/src/main/clipboard/index.ts
+++ b/packages/frontend/electron/src/main/clipboard/index.ts
@@ -1,4 +1,5 @@
-import { clipboard, type IpcMainInvokeEvent, nativeImage } from 'electron';
+import type { IpcMainInvokeEvent } from 'electron';
+import { clipboard, nativeImage } from 'electron';
import type { NamespaceHandlers } from '../type';
diff --git a/packages/frontend/electron/src/main/deep-link.ts b/packages/frontend/electron/src/main/deep-link.ts
index b61c9cd54f..862f145bd8 100644
--- a/packages/frontend/electron/src/main/deep-link.ts
+++ b/packages/frontend/electron/src/main/deep-link.ts
@@ -1,6 +1,7 @@
import path from 'node:path';
-import { type App, type BrowserWindow, ipcMain } from 'electron';
+import type { App, BrowserWindow } from 'electron';
+import { ipcMain } from 'electron';
import { buildType, CLOUD_BASE_URL, isDev } from './config';
import { mainWindowOrigin } from './constants';
diff --git a/packages/frontend/electron/src/main/helper-process.ts b/packages/frontend/electron/src/main/helper-process.ts
index 2af2c3ef08..c5db28fa0a 100644
--- a/packages/frontend/electron/src/main/helper-process.ts
+++ b/packages/frontend/electron/src/main/helper-process.ts
@@ -1,14 +1,14 @@
import path from 'node:path';
-import { type _AsyncVersionOf, AsyncCall } from 'async-call-rpc';
+import type { _AsyncVersionOf } from 'async-call-rpc';
+import { AsyncCall } from 'async-call-rpc';
+import type { UtilityProcess, WebContents } from 'electron';
import {
app,
dialog,
MessageChannelMain,
shell,
- type UtilityProcess,
utilityProcess,
- type WebContents,
} from 'electron';
import type { HelperToMain, MainToHelper } from '../shared/type';
diff --git a/packages/frontend/electron/src/main/logger.ts b/packages/frontend/electron/src/main/logger.ts
index bc3ab3d24b..d5f1077e85 100644
--- a/packages/frontend/electron/src/main/logger.ts
+++ b/packages/frontend/electron/src/main/logger.ts
@@ -1,5 +1,4 @@
-import { shell } from 'electron';
-import { app } from 'electron';
+import { app, shell } from 'electron';
import log from 'electron-log';
export const logger = log.scope('main');
diff --git a/packages/frontend/electron/src/main/main-window.ts b/packages/frontend/electron/src/main/main-window.ts
index 37fcda22fc..d8ce4e45aa 100644
--- a/packages/frontend/electron/src/main/main-window.ts
+++ b/packages/frontend/electron/src/main/main-window.ts
@@ -1,7 +1,8 @@
import assert from 'node:assert';
import { join } from 'node:path';
-import { BrowserWindow, type CookiesSetDetails, nativeTheme } from 'electron';
+import type { CookiesSetDetails } from 'electron';
+import { BrowserWindow, nativeTheme } from 'electron';
import electronWindowState from 'electron-window-state';
import { isLinux, isMacOS, isWindows } from '../shared/utils';
diff --git a/packages/frontend/electron/src/main/onboarding.ts b/packages/frontend/electron/src/main/onboarding.ts
index 8b24c44667..2c87d9ac98 100644
--- a/packages/frontend/electron/src/main/onboarding.ts
+++ b/packages/frontend/electron/src/main/onboarding.ts
@@ -1,6 +1,7 @@
import { join } from 'node:path';
-import { BrowserWindow, type Display, screen } from 'electron';
+import type { Display } from 'electron';
+import { BrowserWindow, screen } from 'electron';
import { isMacOS } from '../shared/utils';
import { mainWindowOrigin } from './constants';
diff --git a/packages/frontend/electron/src/main/updater/custom-github-provider.ts b/packages/frontend/electron/src/main/updater/custom-github-provider.ts
index 1690e9391d..d3429c64cd 100644
--- a/packages/frontend/electron/src/main/updater/custom-github-provider.ts
+++ b/packages/frontend/electron/src/main/updater/custom-github-provider.ts
@@ -6,16 +6,16 @@ import type {
XElement,
} from 'builder-util-runtime';
import { HttpError, newError, parseXml } from 'builder-util-runtime';
-import {
- type AppUpdater,
- CancellationToken,
- type ResolvedUpdateFileInfo,
- type UpdateInfo,
+import type {
+ AppUpdater,
+ ResolvedUpdateFileInfo,
+ UpdateInfo,
} from 'electron-updater';
+import { CancellationToken } from 'electron-updater';
import { BaseGitHubProvider } from 'electron-updater/out/providers/GitHubProvider';
+import type { ProviderRuntimeOptions } from 'electron-updater/out/providers/Provider';
import {
parseUpdateInfo,
- type ProviderRuntimeOptions,
resolveFiles,
} from 'electron-updater/out/providers/Provider';
import * as semver from 'semver';
diff --git a/packages/frontend/electron/src/main/updater/index.ts b/packages/frontend/electron/src/main/updater/index.ts
index 0265db1e71..0a8889d402 100644
--- a/packages/frontend/electron/src/main/updater/index.ts
+++ b/packages/frontend/electron/src/main/updater/index.ts
@@ -1,13 +1,14 @@
-import { app, type IpcMainInvokeEvent } from 'electron';
+import type { IpcMainInvokeEvent } from 'electron';
+import { app } from 'electron';
import type { NamespaceHandlers } from '../type';
+import type { UpdaterConfig } from './electron-updater';
import {
checkForUpdates,
downloadUpdate,
getConfig,
quitAndInstall,
setConfig,
- type UpdaterConfig,
} from './electron-updater';
export const updaterHandlers = {
diff --git a/packages/frontend/electron/src/preload/electron-api.ts b/packages/frontend/electron/src/preload/electron-api.ts
index 5fb73a18d1..30e3614895 100644
--- a/packages/frontend/electron/src/preload/electron-api.ts
+++ b/packages/frontend/electron/src/preload/electron-api.ts
@@ -1,5 +1,6 @@
// Please add modules to `external` in `rollupOptions` to avoid wrong bundling.
-import { AsyncCall, type EventBasedChannel } from 'async-call-rpc';
+import type { EventBasedChannel } from 'async-call-rpc';
+import { AsyncCall } from 'async-call-rpc';
import { ipcRenderer } from 'electron';
import { Subject } from 'rxjs';
import { z } from 'zod';
diff --git a/packages/frontend/electron/test/main/mocks/updater.ts b/packages/frontend/electron/test/main/mocks/updater.ts
index 9cf65fac0c..8ec12e4b94 100644
--- a/packages/frontend/electron/test/main/mocks/updater.ts
+++ b/packages/frontend/electron/test/main/mocks/updater.ts
@@ -2,7 +2,8 @@ import 'electron-updater'; // Prevent BaseUpdater is undefined.
import { randomBytes } from 'node:crypto';
-import { type AllPublishOptions, UUID } from 'builder-util-runtime';
+import type { AllPublishOptions } from 'builder-util-runtime';
+import { UUID } from 'builder-util-runtime';
import type { AppAdapter } from 'electron-updater/out/AppAdapter';
import type { DownloadUpdateOptions } from 'electron-updater/out/AppUpdater';
import type { InstallOptions } from 'electron-updater/out/BaseUpdater';
diff --git a/packages/frontend/i18n/src/index.ts b/packages/frontend/i18n/src/index.ts
index d7966aa781..ddc76289a9 100644
--- a/packages/frontend/i18n/src/index.ts
+++ b/packages/frontend/i18n/src/index.ts
@@ -1,8 +1,8 @@
import type { i18n, Resource } from 'i18next';
import i18next from 'i18next';
+import type { I18nextProviderProps } from 'react-i18next';
import {
I18nextProvider,
- type I18nextProviderProps,
initReactI18next,
Trans,
useTranslation as useRootTranslation,
diff --git a/packages/frontend/i18n/src/scripts/download.ts b/packages/frontend/i18n/src/scripts/download.ts
index 31e8fb397b..52c7597a8a 100644
--- a/packages/frontend/i18n/src/scripts/download.ts
+++ b/packages/frontend/i18n/src/scripts/download.ts
@@ -5,7 +5,8 @@ import * as path from 'node:path';
import { format } from 'prettier';
import { getAllProjectLanguages, getRemoteTranslations } from './api.js';
-import { flattenTranslation, type TranslationRes } from './utils.js';
+import type { TranslationRes } from './utils.js';
+import { flattenTranslation } from './utils.js';
const INDENT = 2;
const RES_DIR = path.resolve(process.cwd(), 'src', 'resources');
diff --git a/packages/frontend/web/src/app.tsx b/packages/frontend/web/src/app.tsx
index 8567e83395..67bab60ea2 100644
--- a/packages/frontend/web/src/app.tsx
+++ b/packages/frontend/web/src/app.tsx
@@ -16,8 +16,7 @@ import createEmotionCache from '@affine/core/utils/create-emotion-cache';
import { configureWebServices } from '@affine/core/web';
import { createI18n, setUpLanguage } from '@affine/i18n';
import { CacheProvider } from '@emotion/react';
-import { getCurrentStore } from '@toeverything/infra';
-import { ServiceCollection } from '@toeverything/infra';
+import { getCurrentStore, ServiceCollection } from '@toeverything/infra';
import mixpanel from 'mixpanel-browser';
import type { PropsWithChildren, ReactElement } from 'react';
import { lazy, Suspense } from 'react';
diff --git a/packages/frontend/workspace-impl/src/cloud/awareness.ts b/packages/frontend/workspace-impl/src/cloud/awareness.ts
index 192467b78e..fc932c9da9 100644
--- a/packages/frontend/workspace-impl/src/cloud/awareness.ts
+++ b/packages/frontend/workspace-impl/src/cloud/awareness.ts
@@ -1,8 +1,8 @@
import { DebugLogger } from '@affine/debug';
import type { AwarenessProvider } from '@toeverything/infra';
+import type { Awareness } from 'y-protocols/awareness';
import {
applyAwarenessUpdate,
- type Awareness,
encodeAwarenessUpdate,
removeAwarenessStates,
} from 'y-protocols/awareness';
diff --git a/packages/frontend/workspace-impl/src/cloud/blob.ts b/packages/frontend/workspace-impl/src/cloud/blob.ts
index 3d0369f2b5..b8bb4b1081 100644
--- a/packages/frontend/workspace-impl/src/cloud/blob.ts
+++ b/packages/frontend/workspace-impl/src/cloud/blob.ts
@@ -1,13 +1,14 @@
import {
deleteBlobMutation,
+ fetcher,
fetchWithTraceReport,
findGraphQLError,
getBaseUrl,
listBlobsQuery,
setBlobMutation,
} from '@affine/graphql';
-import { fetcher } from '@affine/graphql';
-import { type BlobStorage, BlobStorageOverCapacity } from '@toeverything/infra';
+import type { BlobStorage } from '@toeverything/infra';
+import { BlobStorageOverCapacity } from '@toeverything/infra';
import { bufferToBlob } from '../utils/buffer-to-blob';
diff --git a/packages/frontend/workspace-impl/src/cloud/doc.ts b/packages/frontend/workspace-impl/src/cloud/doc.ts
index c6041d8e22..4e2a285106 100644
--- a/packages/frontend/workspace-impl/src/cloud/doc.ts
+++ b/packages/frontend/workspace-impl/src/cloud/doc.ts
@@ -1,5 +1,6 @@
import { DebugLogger } from '@affine/debug';
-import { type DocServer, throwIfAborted } from '@toeverything/infra';
+import type { DocServer } from '@toeverything/infra';
+import { throwIfAborted } from '@toeverything/infra';
import type { Socket } from 'socket.io-client';
import { getIoManager } from '../utils/affine-io';
diff --git a/packages/frontend/workspace-impl/src/cloud/list.ts b/packages/frontend/workspace-impl/src/cloud/list.ts
index c7ab750c9c..8aacb106cd 100644
--- a/packages/frontend/workspace-impl/src/cloud/list.ts
+++ b/packages/frontend/workspace-impl/src/cloud/list.ts
@@ -2,16 +2,16 @@ import { WorkspaceFlavour } from '@affine/env/workspace';
import {
createWorkspaceMutation,
deleteWorkspaceMutation,
+ fetcher,
findGraphQLError,
getWorkspacesQuery,
} from '@affine/graphql';
-import { fetcher } from '@affine/graphql';
import { DocCollection } from '@blocksuite/store';
-import type { WorkspaceListProvider } from '@toeverything/infra';
-import {
- type BlobStorage,
- type WorkspaceInfo,
- type WorkspaceMetadata,
+import type {
+ BlobStorage,
+ WorkspaceInfo,
+ WorkspaceListProvider,
+ WorkspaceMetadata,
} from '@toeverything/infra';
import { globalBlockSuiteSchema } from '@toeverything/infra';
import { difference } from 'lodash-es';
diff --git a/packages/frontend/workspace-impl/src/cloud/workspace-factory.ts b/packages/frontend/workspace-impl/src/cloud/workspace-factory.ts
index ec3579d6e9..aa2c053022 100644
--- a/packages/frontend/workspace-impl/src/cloud/workspace-factory.ts
+++ b/packages/frontend/workspace-impl/src/cloud/workspace-factory.ts
@@ -1,6 +1,5 @@
import { WorkspaceFlavour } from '@affine/env/workspace';
-import type { WorkspaceFactory } from '@toeverything/infra';
-import type { ServiceCollection } from '@toeverything/infra';
+import type { ServiceCollection, WorkspaceFactory } from '@toeverything/infra';
import {
AwarenessContext,
AwarenessProvider,
diff --git a/packages/frontend/workspace-impl/src/local-state.ts b/packages/frontend/workspace-impl/src/local-state.ts
index fa4abf9430..fdd22547b0 100644
--- a/packages/frontend/workspace-impl/src/local-state.ts
+++ b/packages/frontend/workspace-impl/src/local-state.ts
@@ -1,10 +1,10 @@
-import {
- type GlobalState,
- type Memento,
- type Workspace,
- type WorkspaceLocalState,
- wrapMemento,
+import type {
+ GlobalState,
+ Memento,
+ Workspace,
+ WorkspaceLocalState,
} from '@toeverything/infra';
+import { wrapMemento } from '@toeverything/infra';
export class WorkspaceLocalStateImpl implements WorkspaceLocalState {
wrapped: Memento;
diff --git a/packages/frontend/workspace-impl/src/local/blob-indexeddb.ts b/packages/frontend/workspace-impl/src/local/blob-indexeddb.ts
index e05ec610da..0df29ac957 100644
--- a/packages/frontend/workspace-impl/src/local/blob-indexeddb.ts
+++ b/packages/frontend/workspace-impl/src/local/blob-indexeddb.ts
@@ -1,4 +1,4 @@
-import { type BlobStorage } from '@toeverything/infra';
+import type { BlobStorage } from '@toeverything/infra';
import { createStore, del, get, keys, set } from 'idb-keyval';
import { bufferToBlob } from '../utils/buffer-to-blob';
diff --git a/packages/frontend/workspace-impl/src/local/blob-sqlite.ts b/packages/frontend/workspace-impl/src/local/blob-sqlite.ts
index aabf2d904d..257ea3f2e4 100644
--- a/packages/frontend/workspace-impl/src/local/blob-sqlite.ts
+++ b/packages/frontend/workspace-impl/src/local/blob-sqlite.ts
@@ -1,6 +1,6 @@
import { apis } from '@affine/electron-api';
import { assertExists } from '@blocksuite/global/utils';
-import { type BlobStorage } from '@toeverything/infra';
+import type { BlobStorage } from '@toeverything/infra';
import { bufferToBlob } from '../utils/buffer-to-blob';
diff --git a/packages/frontend/workspace-impl/src/local/blob-static.ts b/packages/frontend/workspace-impl/src/local/blob-static.ts
index 08f93c5fd0..d2a9924366 100644
--- a/packages/frontend/workspace-impl/src/local/blob-static.ts
+++ b/packages/frontend/workspace-impl/src/local/blob-static.ts
@@ -1,4 +1,4 @@
-import { type BlobStorage } from '@toeverything/infra';
+import type { BlobStorage } from '@toeverything/infra';
export const predefinedStaticFiles = [
'029uztLz2CzJezK7UUhrbGiWUdZ0J7NVs_qR6RDsvb8=',
diff --git a/packages/frontend/workspace-impl/src/local/doc-indexeddb.ts b/packages/frontend/workspace-impl/src/local/doc-indexeddb.ts
index c774caa21e..4889c0133c 100644
--- a/packages/frontend/workspace-impl/src/local/doc-indexeddb.ts
+++ b/packages/frontend/workspace-impl/src/local/doc-indexeddb.ts
@@ -1,10 +1,6 @@
import type { ByteKV, ByteKVBehavior, DocStorage } from '@toeverything/infra';
-import {
- type DBSchema,
- type IDBPDatabase,
- type IDBPObjectStore,
- openDB,
-} from 'idb';
+import type { DBSchema, IDBPDatabase, IDBPObjectStore } from 'idb';
+import { openDB } from 'idb';
import { mergeUpdates } from 'yjs';
import { BroadcastChannelDocEventBus } from './doc-broadcast-channel';
diff --git a/packages/frontend/workspace-impl/src/local/doc-sqlite.ts b/packages/frontend/workspace-impl/src/local/doc-sqlite.ts
index 8ef4507cdc..cb3a6585ee 100644
--- a/packages/frontend/workspace-impl/src/local/doc-sqlite.ts
+++ b/packages/frontend/workspace-impl/src/local/doc-sqlite.ts
@@ -1,17 +1,8 @@
import { apis } from '@affine/electron-api';
-import {
- AsyncLock,
- type ByteKV,
- type ByteKVBehavior,
- type DocStorage,
- MemoryDocEventBus,
-} from '@toeverything/infra';
-import {
- type DBSchema,
- type IDBPDatabase,
- type IDBPObjectStore,
- openDB,
-} from 'idb';
+import type { ByteKV, ByteKVBehavior, DocStorage } from '@toeverything/infra';
+import { AsyncLock, MemoryDocEventBus } from '@toeverything/infra';
+import type { DBSchema, IDBPDatabase, IDBPObjectStore } from 'idb';
+import { openDB } from 'idb';
export class SqliteDocStorage implements DocStorage {
constructor(private readonly workspaceId: string) {}
diff --git a/packages/frontend/workspace-impl/src/local/list.ts b/packages/frontend/workspace-impl/src/local/list.ts
index b23096a676..02bb4d705d 100644
--- a/packages/frontend/workspace-impl/src/local/list.ts
+++ b/packages/frontend/workspace-impl/src/local/list.ts
@@ -1,11 +1,11 @@
import { apis } from '@affine/electron-api';
import { WorkspaceFlavour } from '@affine/env/workspace';
import { DocCollection } from '@blocksuite/store';
-import type { WorkspaceListProvider } from '@toeverything/infra';
-import {
- type BlobStorage,
- type WorkspaceInfo,
- type WorkspaceMetadata,
+import type {
+ BlobStorage,
+ WorkspaceInfo,
+ WorkspaceListProvider,
+ WorkspaceMetadata,
} from '@toeverything/infra';
import { globalBlockSuiteSchema } from '@toeverything/infra';
import { difference } from 'lodash-es';
diff --git a/tests/affine-cloud/e2e/page-history.spec.ts b/tests/affine-cloud/e2e/page-history.spec.ts
index 7879a33f22..0b4c03adeb 100644
--- a/tests/affine-cloud/e2e/page-history.spec.ts
+++ b/tests/affine-cloud/e2e/page-history.spec.ts
@@ -11,7 +11,8 @@ import {
waitForEditorLoad,
} from '@affine-test/kit/utils/page-logic';
import { createLocalWorkspace } from '@affine-test/kit/utils/workspace';
-import { expect, type Page } from '@playwright/test';
+import type { Page } from '@playwright/test';
+import { expect } from '@playwright/test';
let user: {
id: string;
diff --git a/tests/affine-desktop/e2e/basic.spec.ts b/tests/affine-desktop/e2e/basic.spec.ts
index 0240b78375..0574d01274 100644
--- a/tests/affine-desktop/e2e/basic.spec.ts
+++ b/tests/affine-desktop/e2e/basic.spec.ts
@@ -10,7 +10,8 @@ import {
clickSideBarCurrentWorkspaceBanner,
clickSideBarSettingButton,
} from '@affine-test/kit/utils/sidebar';
-import { expect, type Page } from '@playwright/test';
+import type { Page } from '@playwright/test';
+import { expect } from '@playwright/test';
const historyShortcut = async (page: Page, command: 'goBack' | 'goForward') => {
await withCtrlOrMeta(page, () =>
diff --git a/tests/affine-local/e2e/drag-page.spec.ts b/tests/affine-local/e2e/drag-page.spec.ts
index da3376de06..4f8e329c07 100644
--- a/tests/affine-local/e2e/drag-page.spec.ts
+++ b/tests/affine-local/e2e/drag-page.spec.ts
@@ -7,7 +7,8 @@ import {
waitForEditorLoad,
} from '@affine-test/kit/utils/page-logic';
import { clickSideBarAllPageButton } from '@affine-test/kit/utils/sidebar';
-import { expect, type Locator, type Page } from '@playwright/test';
+import type { Locator, Page } from '@playwright/test';
+import { expect } from '@playwright/test';
const dragToFavourites = async (
page: Page,
diff --git a/tests/affine-local/e2e/image-preview.spec.ts b/tests/affine-local/e2e/image-preview.spec.ts
index 51b89140a5..4ed72ce702 100644
--- a/tests/affine-local/e2e/image-preview.spec.ts
+++ b/tests/affine-local/e2e/image-preview.spec.ts
@@ -9,7 +9,8 @@ import {
getBlockSuiteEditorTitle,
waitForEditorLoad,
} from '@affine-test/kit/utils/page-logic';
-import { expect, type Page } from '@playwright/test';
+import type { Page } from '@playwright/test';
+import { expect } from '@playwright/test';
async function importImage(page: Page, url: string) {
await focusInlineEditor(page);
diff --git a/tests/affine-local/e2e/local-first-delete-workspace.spec.ts b/tests/affine-local/e2e/local-first-delete-workspace.spec.ts
index 46f50b791b..bab57cd2d4 100644
--- a/tests/affine-local/e2e/local-first-delete-workspace.spec.ts
+++ b/tests/affine-local/e2e/local-first-delete-workspace.spec.ts
@@ -1,8 +1,10 @@
import { test } from '@affine-test/kit/playwright';
import { openHomePage } from '@affine-test/kit/utils/load-page';
import { waitForEditorLoad } from '@affine-test/kit/utils/page-logic';
-import { openWorkspaceSettingPanel } from '@affine-test/kit/utils/setting';
-import { openSettingModal } from '@affine-test/kit/utils/setting';
+import {
+ openSettingModal,
+ openWorkspaceSettingPanel,
+} from '@affine-test/kit/utils/setting';
import { clickSideBarCurrentWorkspaceBanner } from '@affine-test/kit/utils/sidebar';
import { expect } from '@playwright/test';
diff --git a/tests/affine-local/e2e/navigation.spec.ts b/tests/affine-local/e2e/navigation.spec.ts
index eae4e5e543..131e010fd6 100644
--- a/tests/affine-local/e2e/navigation.spec.ts
+++ b/tests/affine-local/e2e/navigation.spec.ts
@@ -7,7 +7,8 @@ import {
waitForEditorLoad,
} from '@affine-test/kit/utils/page-logic';
import { clickSideBarAllPageButton } from '@affine-test/kit/utils/sidebar';
-import { expect, type Page } from '@playwright/test';
+import type { Page } from '@playwright/test';
+import { expect } from '@playwright/test';
const historyShortcut = async (page: Page, command: 'goBack' | 'goForward') => {
await withCtrlOrMeta(page, () =>
diff --git a/tests/affine-local/e2e/quick-search.spec.ts b/tests/affine-local/e2e/quick-search.spec.ts
index 22e3598250..1b758c2e78 100644
--- a/tests/affine-local/e2e/quick-search.spec.ts
+++ b/tests/affine-local/e2e/quick-search.spec.ts
@@ -7,7 +7,8 @@ import {
waitForEditorLoad,
} from '@affine-test/kit/utils/page-logic';
import { clickSideBarAllPageButton } from '@affine-test/kit/utils/sidebar';
-import { expect, type Locator, type Page } from '@playwright/test';
+import type { Locator, Page } from '@playwright/test';
+import { expect } from '@playwright/test';
const openQuickSearchByShortcut = async (page: Page, checkVisible = true) => {
await withCtrlOrMeta(page, () => page.keyboard.press('k', { delay: 50 }));
diff --git a/tests/kit/playwright.ts b/tests/kit/playwright.ts
index c36a3863c9..34695c0e66 100644
--- a/tests/kit/playwright.ts
+++ b/tests/kit/playwright.ts
@@ -5,7 +5,8 @@ import path, { resolve } from 'node:path';
import process from 'node:process';
import type { DocCollection } from '@blocksuite/store';
-import { type BrowserContext, test as baseTest } from '@playwright/test';
+import type { BrowserContext } from '@playwright/test';
+import { test as baseTest } from '@playwright/test';
export const rootDir = resolve(__dirname, '..', '..');
// assert that the rootDir is the root of the project
diff --git a/tests/kit/utils/cloud.ts b/tests/kit/utils/cloud.ts
index b73296a188..683e941986 100644
--- a/tests/kit/utils/cloud.ts
+++ b/tests/kit/utils/cloud.ts
@@ -10,12 +10,8 @@ import {
} from '@affine-test/kit/utils/sidebar';
import { faker } from '@faker-js/faker';
import { hash } from '@node-rs/argon2';
-import {
- type BrowserContext,
- type Cookie,
- expect,
- type Page,
-} from '@playwright/test';
+import type { BrowserContext, Cookie, Page } from '@playwright/test';
+import { expect } from '@playwright/test';
import { z } from 'zod';
export async function getCurrentMailMessageCount() {
diff --git a/tests/kit/utils/load-page.ts b/tests/kit/utils/load-page.ts
index ec65fcffdd..eba8111d82 100644
--- a/tests/kit/utils/load-page.ts
+++ b/tests/kit/utils/load-page.ts
@@ -1,4 +1,5 @@
-import { expect, type Page } from '@playwright/test';
+import type { Page } from '@playwright/test';
+import { expect } from '@playwright/test';
export const coreUrl = 'http://localhost:8080';
diff --git a/tests/kit/utils/properties.ts b/tests/kit/utils/properties.ts
index c3b5b59797..66c30eb3b9 100644
--- a/tests/kit/utils/properties.ts
+++ b/tests/kit/utils/properties.ts
@@ -1,4 +1,5 @@
-import { expect, type Page } from '@playwright/test';
+import type { Page } from '@playwright/test';
+import { expect } from '@playwright/test';
export const getPropertyValueLocator = (page: Page, property: string) => {
return page.locator(
diff --git a/tests/kit/utils/workspace.ts b/tests/kit/utils/workspace.ts
index b000786931..52b126525e 100644
--- a/tests/kit/utils/workspace.ts
+++ b/tests/kit/utils/workspace.ts
@@ -1,4 +1,5 @@
-import { expect, type Page } from '@playwright/test';
+import type { Page } from '@playwright/test';
+import { expect } from '@playwright/test';
import { waitForEditorLoad } from './page-logic';
diff --git a/tests/storybook/src/stories/app-sidebar.stories.tsx b/tests/storybook/src/stories/app-sidebar.stories.tsx
index b888140b5d..dad8ffb4b8 100644
--- a/tests/storybook/src/stories/app-sidebar.stories.tsx
+++ b/tests/storybook/src/stories/app-sidebar.stories.tsx
@@ -1,22 +1,21 @@
import {
+ AddPageButton,
AppSidebar,
AppSidebarFallback,
appSidebarOpenAtom,
- SidebarSwitch,
-} from '@affine/core/components/app-sidebar';
-import { AddPageButton } from '@affine/core/components/app-sidebar';
-import { CategoryDivider } from '@affine/core/components/app-sidebar';
-import { navHeaderStyle } from '@affine/core/components/app-sidebar';
-import { MenuLinkItem } from '@affine/core/components/app-sidebar';
-import { QuickSearchInput } from '@affine/core/components/app-sidebar';
-import {
+ 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, useState } from 'react';
+import type { PropsWithChildren } from 'react';
+import { useState } from 'react';
import { MemoryRouter } from 'react-router-dom';
export default {
diff --git a/tests/storybook/src/stories/app-updater-button.stories.tsx b/tests/storybook/src/stories/app-updater-button.stories.tsx
index 28a2422f54..50e217784b 100644
--- a/tests/storybook/src/stories/app-updater-button.stories.tsx
+++ b/tests/storybook/src/stories/app-updater-button.stories.tsx
@@ -1,7 +1,5 @@
-import {
- type AddPageButtonProps,
- AppUpdaterButton,
-} from '@affine/core/components/app-sidebar';
+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';
diff --git a/tests/storybook/src/stories/blocksuite-editor.stories.tsx b/tests/storybook/src/stories/blocksuite-editor.stories.tsx
index 39c62f435a..768337ee1f 100644
--- a/tests/storybook/src/stories/blocksuite-editor.stories.tsx
+++ b/tests/storybook/src/stories/blocksuite-editor.stories.tsx
@@ -1,7 +1,6 @@
import { BlockSuiteEditor } from '@affine/core/components/blocksuite/block-suite-editor';
import { AffineSchemas } from '@blocksuite/blocks/schemas';
-import { DocCollection } from '@blocksuite/store';
-import { Schema } from '@blocksuite/store';
+import { DocCollection, Schema } from '@blocksuite/store';
import type { StoryFn } from '@storybook/react';
import { initEmptyPage } from '@toeverything/infra';
diff --git a/tests/storybook/src/stories/image-preview-modal.stories.tsx b/tests/storybook/src/stories/image-preview-modal.stories.tsx
index 914465c18e..e060b83ddc 100644
--- a/tests/storybook/src/stories/image-preview-modal.stories.tsx
+++ b/tests/storybook/src/stories/image-preview-modal.stories.tsx
@@ -3,12 +3,12 @@ import { ImagePreviewModal } from '@affine/core/components/image-preview';
import type { Meta } from '@storybook/react';
import type { Doc } from '@toeverything/infra';
import {
+ initEmptyPage,
PageManager,
ServiceProviderContext,
useService,
Workspace,
} from '@toeverything/infra';
-import { initEmptyPage } from '@toeverything/infra';
import { useEffect, useState } from 'react';
import { createPortal } from 'react-dom';
diff --git a/tests/storybook/src/stories/import-page.stories.tsx b/tests/storybook/src/stories/import-page.stories.tsx
index 8082cf2635..6202e9e711 100644
--- a/tests/storybook/src/stories/import-page.stories.tsx
+++ b/tests/storybook/src/stories/import-page.stories.tsx
@@ -1,8 +1,7 @@
/* deepscan-disable USELESS_ARROW_FUNC_BIND */
import { toast } from '@affine/component';
import { ImportPage } from '@affine/component/import-page';
-import type { StoryFn } from '@storybook/react';
-import type { Meta } from '@storybook/react';
+import type { Meta, StoryFn } from '@storybook/react';
export default {
title: 'AFFiNE/ImportPage',
diff --git a/tests/storybook/src/stories/page-info-properties.stories.tsx b/tests/storybook/src/stories/page-info-properties.stories.tsx
index 55e69a621a..7b74dd97d0 100644
--- a/tests/storybook/src/stories/page-info-properties.stories.tsx
+++ b/tests/storybook/src/stories/page-info-properties.stories.tsx
@@ -1,7 +1,6 @@
import { PagePropertiesTable } from '@affine/core/components/affine/page-properties';
import { AffineSchemas } from '@blocksuite/blocks/schemas';
-import { DocCollection } from '@blocksuite/store';
-import { Schema } from '@blocksuite/store';
+import { DocCollection, Schema } from '@blocksuite/store';
import type { StoryFn } from '@storybook/react';
import { initEmptyPage } from '@toeverything/infra';
diff --git a/tests/storybook/src/stories/page-list.stories.tsx b/tests/storybook/src/stories/page-list.stories.tsx
index 24440abca0..383b6a5336 100644
--- a/tests/storybook/src/stories/page-list.stories.tsx
+++ b/tests/storybook/src/stories/page-list.stories.tsx
@@ -1,17 +1,19 @@
import { toast } from '@affine/component';
+import type {
+ ListItem,
+ ListProps,
+ PageListItemProps,
+ PageOperationCellProps,
+ PageTagsProps,
+} from '@affine/core/components/page-list';
import {
FloatingToolbar,
List,
- type ListItem,
- type ListProps,
ListScrollContainer,
NewPageButton,
PageListItem,
- type PageListItemProps,
PageOperationCell,
- type PageOperationCellProps,
PageTags,
- type PageTagsProps,
} from '@affine/core/components/page-list';
import { topLevelRoutes } from '@affine/core/router';
import { AffineSchemas } from '@blocksuite/blocks/schemas';
diff --git a/tests/storybook/src/stories/share-menu.stories.tsx b/tests/storybook/src/stories/share-menu.stories.tsx
index fbd88ac9c1..e6aab24c1e 100644
--- a/tests/storybook/src/stories/share-menu.stories.tsx
+++ b/tests/storybook/src/stories/share-menu.stories.tsx
@@ -2,12 +2,10 @@ 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 type { Doc } from '@blocksuite/store';
import { expect } from '@storybook/jest';
import type { Meta, StoryFn } from '@storybook/react';
-import { Workspace } from '@toeverything/infra';
-import { initEmptyPage } from '@toeverything/infra';
-import { useService } from '@toeverything/infra';
+import { initEmptyPage, useService, Workspace } from '@toeverything/infra';
import { nanoid } from 'nanoid';
import { useEffect, useState } from 'react';
diff --git a/tests/storybook/src/stories/workspace-list.stories.tsx b/tests/storybook/src/stories/workspace-list.stories.tsx
index fe0e47a612..9515ed73d5 100644
--- a/tests/storybook/src/stories/workspace-list.stories.tsx
+++ b/tests/storybook/src/stories/workspace-list.stories.tsx
@@ -1,8 +1,7 @@
import type { WorkspaceListProps } from '@affine/component/workspace-list';
import { WorkspaceList } from '@affine/component/workspace-list';
import type { Meta } from '@storybook/react';
-import { WorkspaceManager } from '@toeverything/infra';
-import { useLiveData, useService } from '@toeverything/infra';
+import { useLiveData, useService, WorkspaceManager } from '@toeverything/infra';
export default {
title: 'AFFiNE/WorkspaceList',
diff --git a/tools/cli/src/bin/dev.ts b/tools/cli/src/bin/dev.ts
index e5ff300c7c..cd9e7fdf2a 100644
--- a/tools/cli/src/bin/dev.ts
+++ b/tools/cli/src/bin/dev.ts
@@ -6,7 +6,8 @@ import { config } from 'dotenv';
import webpack from 'webpack';
import WebpackDevServer from 'webpack-dev-server';
-import { type BuildFlags, projectRoot } from '../config/index.js';
+import type { BuildFlags } from '../config/index.js';
+import { projectRoot } from '../config/index.js';
import { watchI18N } from '../util/i18n.js';
import { createWebpackConfig } from '../webpack/webpack.config.js';
diff --git a/tools/cli/src/webpack/config.ts b/tools/cli/src/webpack/config.ts
index 489ea4efb7..273723088a 100644
--- a/tools/cli/src/webpack/config.ts
+++ b/tools/cli/src/webpack/config.ts
@@ -14,7 +14,8 @@ import TerserPlugin from 'terser-webpack-plugin';
import webpack from 'webpack';
import type { Configuration as DevServerConfiguration } from 'webpack-dev-server';
-import { type BuildFlags, projectRoot } from '../config/index.js';
+import type { BuildFlags } from '../config/index.js';
+import { projectRoot } from '../config/index.js';
import { productionCacheGroups } from './cache-group.js';
import { WebpackS3Plugin } from './s3-plugin.js';
diff --git a/yarn.lock b/yarn.lock
index 0fc00e8895..517f2b5c27 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -585,7 +585,7 @@ __metadata:
electron: "npm:^29.0.1"
eslint: "npm:^8.56.0"
eslint-config-prettier: "npm:^9.1.0"
- eslint-plugin-i: "npm:^2.29.1"
+ eslint-plugin-import-x: "npm:^0.4.1"
eslint-plugin-react: "npm:^7.33.2"
eslint-plugin-react-hooks: "npm:^4.6.0"
eslint-plugin-rxjs: "npm:^5.0.3"
@@ -14860,7 +14860,7 @@ __metadata:
languageName: node
linkType: hard
-"@typescript-eslint/utils@npm:5.62.0":
+"@typescript-eslint/utils@npm:5.62.0, @typescript-eslint/utils@npm:^5.62.0":
version: 5.62.0
resolution: "@typescript-eslint/utils@npm:5.62.0"
dependencies:
@@ -20633,33 +20633,21 @@ __metadata:
languageName: node
linkType: hard
-"eslint-module-utils@npm:^2.8.0":
- version: 2.8.0
- resolution: "eslint-module-utils@npm:2.8.0"
- dependencies:
- debug: "npm:^3.2.7"
- peerDependenciesMeta:
- eslint:
- optional: true
- checksum: 10/a9a7ed93eb858092e3cdc797357d4ead2b3ea06959b0eada31ab13862d46a59eb064b9cb82302214232e547980ce33618c2992f6821138a4934e65710ed9cc29
- languageName: node
- linkType: hard
-
-"eslint-plugin-i@npm:^2.29.1":
- version: 2.29.1
- resolution: "eslint-plugin-i@npm:2.29.1"
+"eslint-plugin-import-x@npm:^0.4.1":
+ version: 0.4.1
+ resolution: "eslint-plugin-import-x@npm:0.4.1"
dependencies:
+ "@typescript-eslint/utils": "npm:^5.62.0"
debug: "npm:^4.3.4"
doctrine: "npm:^3.0.0"
eslint-import-resolver-node: "npm:^0.3.9"
- eslint-module-utils: "npm:^2.8.0"
- get-tsconfig: "npm:^4.7.2"
+ get-tsconfig: "npm:^4.7.3"
is-glob: "npm:^4.0.3"
- minimatch: "npm:^3.1.2"
- semver: "npm:^7.5.4"
+ minimatch: "npm:^9.0.3"
+ semver: "npm:^7.6.0"
peerDependencies:
eslint: ^7.2.0 || ^8
- checksum: 10/5dc6c0857abe766f32681706f21090aaa214ad93792e25f746e003f971ee727643a52a71c852851a14646434f9d0308197b7763a63cc5c42bb12681eb4119974
+ checksum: 10/5da33f9a2036323acfadc3bdfb40167b49a46eebed5dc797b30a2cf1dc6e1fdd6085db186621efbabde495c3cad54371f142d22a1191225a81a8fe4df1062e9c
languageName: node
linkType: hard
@@ -22334,12 +22322,12 @@ __metadata:
languageName: node
linkType: hard
-"get-tsconfig@npm:^4.7.2":
- version: 4.7.2
- resolution: "get-tsconfig@npm:4.7.2"
+"get-tsconfig@npm:^4.7.3":
+ version: 4.7.3
+ resolution: "get-tsconfig@npm:4.7.3"
dependencies:
resolve-pkg-maps: "npm:^1.0.0"
- checksum: 10/f21135848fb5d16012269b7b34b186af7a41824830f8616aba17a15eb4d9e54fdc876833f1e21768395215a826c8145582f5acd594ae2b4de3284d10b38d20f8
+ checksum: 10/7397bb4f8aef936df4d9016555b662dcf5279f3c46428b7c7c1ff5e94ab2b87d018b3dda0f4bc1a28b154d5affd0eac5d014511172c085fd8a9cdff9ea7fe043
languageName: node
linkType: hard