Compare commits

..

2 Commits

Author SHA1 Message Date
李华桥
55792e2f41 chore: replace v char in tag name 2023-12-21 10:35:30 +08:00
李华桥
04e7a9fc14 ci: use setup version action to init version 2023-12-21 10:19:19 +08:00
82 changed files with 705 additions and 740 deletions

View File

@@ -1,9 +1,5 @@
name: Setup Version
description: 'Setup Version'
outputs:
APP_VERSION:
description: 'App Version'
value: ${{ steps.version.outputs.APP_VERSION }}
runs:
using: 'composite'
steps:

View File

@@ -1,27 +0,0 @@
name: Deploy Automatically
on:
push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+-canary.[0-9]+'
schedule:
- cron: '0 9 * * *'
jobs:
dispatch-deploy:
runs-on: ubuntu-latest
name: Setup Deploy
steps:
- name: dispatch deploy by tag
if: ${{ github.event_name == 'push' }}
uses: benc-uk/workflow-dispatch@v1
with:
workflow: deploy.yml
inputs: '{ "flavor": "canary" }'
- name: dispatch deploy by schedule
if: ${{ github.event_name == 'schedule' }}
uses: benc-uk/workflow-dispatch@v1
with:
workflow: deploy.yml
inputs: '{ "flavor": "canary" }'
ref: canary

View File

@@ -23,7 +23,6 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Setup Version
id: version
uses: ./.github/actions/setup-version
- name: Setup Node.js
uses: ./.github/actions/setup-node
@@ -44,7 +43,6 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Setup Version
id: version
uses: ./.github/actions/setup-version
- name: Setup Node.js
uses: ./.github/actions/setup-node
@@ -78,7 +76,6 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Setup Version
id: version
uses: ./.github/actions/setup-version
- name: Setup Node.js
uses: ./.github/actions/setup-node
@@ -102,7 +99,6 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Setup Version
id: version
uses: ./.github/actions/setup-version
- name: Setup Node.js
uses: ./.github/actions/setup-node
@@ -224,7 +220,6 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Setup Version
id: version
uses: ./.github/actions/setup-version
- name: Deploy to ${{ github.event.inputs.flavor }}
uses: ./.github/actions/deploy

30
.github/workflows/dispatch-deploy.yml vendored Normal file
View File

@@ -0,0 +1,30 @@
name: Dispatch Deploy by tag
on:
push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+-canary.[0-9]+'
jobs:
dispatch-deploy-by-tag:
runs-on: ubuntu-latest
name: Setup deploy environment
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: ./.github/actions/setup-node
with:
extra-flags: 'workspaces focus @affine/monorepo'
hard-link-nm: false
electron-install: false
build-infra: false
build-plugins: false
- name: Setup output value
id: flavor
run: |
node -e "const env = require('semver').parse('${{ github.ref_name }}').prerelease[0] ?? 'stable'; console.log(`flavor=${env}`)" >> "$GITHUB_OUTPUT"
- name: dispatch deploy
uses: benc-uk/workflow-dispatch@v1
with:
workflow: deploy.yml
inputs: '{ "flavor": "${{ steps.flavor.outputs.flavor }}" }'

258
.github/workflows/nightly-build.yml vendored Normal file
View File

@@ -0,0 +1,258 @@
name: Build Canary Desktop App on Staging Branch
on:
workflow_dispatch:
inputs:
channel_override:
description: 'channel type (canary, beta, or stable)'
type: choice
default: beta
options:
- canary
- beta
- stable
push:
branches:
# 0.6.x-staging
- v[0-9]+.[0-9]+.x-staging
# 0.6.1-staging
- v[0-9]+.[0-9]+.[0-9]+-staging
paths-ignore:
- README.md
- .github/**
- '!.github/workflows/nightly-build.yml'
- '!.github/actions/build-rust/action.yml'
- '!.github/actions/setup-node/action.yml'
permissions:
actions: write
contents: write
security-events: write
concurrency:
# The concurrency group contains the workflow name and the branch name for
# pull requests or the commit hash for any other events.
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }}
cancel-in-progress: true
env:
# BUILD_TYPE => app icon, app name, etc
BUILD_TYPE: internal
# BUILD_TYPE_OVERRIDE => channel type (canary, beta, or stable) - get the channel type (the api configs)
BUILD_TYPE_OVERRIDE: ${{ github.event.inputs.channel_override || 'beta' }}
jobs:
set-build-version:
runs-on: ubuntu-latest
outputs:
version: 0.0.0-internal.${{ steps.version.outputs.version }}
steps:
- uses: actions/checkout@v4
- uses: toeverything/set-build-version@latest
- id: version
run: echo ::set-output name=version::${{ env.BUILD_VERSION }}
before-make:
runs-on: ubuntu-latest
needs:
- set-build-version
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: ./.github/actions/setup-node
- name: Setup @sentry/cli
uses: ./.github/actions/setup-sentry
- name: Replace Version
run: ./scripts/set-version.sh ${{ needs.set-build-version.outputs.version }}
- name: generate-assets
run: yarn workspace @affine/electron generate-assets
env:
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
RELEASE_VERSION: ${{ needs.set-build-version.outputs.version }}
SKIP_PLUGIN_BUILD: 'true'
SKIP_NX_CACHE: 'true'
- name: Upload core artifact
uses: actions/upload-artifact@v3
with:
name: core
path: packages/frontend/electron/resources/web-static
make-distribution:
strategy:
# all combinations: macos-latest x64, macos-latest arm64, ubuntu-latest x64
# For windows, we need a separate approach
matrix:
spec:
- runner: macos-latest
platform: darwin
arch: x64
target: x86_64-apple-darwin
- runner: macos-latest
platform: darwin
arch: arm64
target: aarch64-apple-darwin
- runner: ubuntu-latest
platform: linux
arch: x64
target: x86_64-unknown-linux-gnu
- runner: windows-latest
platform: win32
arch: x64
target: x86_64-pc-windows-msvc
runs-on: ${{ matrix.spec.runner }}
needs:
- before-make
- set-build-version
env:
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
SKIP_GENERATE_ASSETS: 1
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
timeout-minutes: 10
if: ${{ matrix.spec.platform == 'darwin' }}
uses: ./.github/actions/setup-node
with:
extra-flags: workspaces focus @affine/electron @affine/monorepo
hard-link-nm: false
build-plugins: false
nmHoistingLimits: workspaces
enableScripts: false
- name: Setup Node.js
timeout-minutes: 10
if: ${{ matrix.spec.platform != 'darwin' }}
uses: ./.github/actions/setup-node
with:
extra-flags: workspaces focus @affine/electron @affine/monorepo
hard-link-nm: false
build-plugins: false
nmHoistingLimits: workspaces
- name: Build AFFiNE native
uses: ./.github/actions/build-rust
with:
target: ${{ matrix.spec.target }}
package: '@affine/native'
nx_token: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }}
- name: Replace Version
run: ./scripts/set-version.sh ${{ needs.set-build-version.outputs.version }}
- uses: actions/download-artifact@v3
with:
name: core
path: packages/frontend/electron/resources/web-static
- name: Build Plugins
run: yarn run build:plugins
- name: Build Desktop Layers
run: yarn workspace @affine/electron build
- name: Signing By Apple Developer ID
if: ${{ matrix.spec.platform == 'darwin' }}
uses: apple-actions/import-codesign-certs@v2
with:
p12-file-base64: ${{ secrets.CERTIFICATES_P12 }}
p12-password: ${{ secrets.CERTIFICATES_P12_PASSWORD }}
- name: make
run: yarn workspace @affine/electron make --platform=${{ matrix.spec.platform }} --arch=${{ matrix.spec.arch }}
env:
SKIP_PLUGIN_BUILD: 1
SKIP_WEB_BUILD: 1
HOIST_NODE_MODULES: 1
- name: Save artifacts (mac)
if: ${{ matrix.spec.platform == 'darwin' }}
run: |
mkdir -p builds
mv packages/frontend/electron/out/*/make/*.dmg ./builds/affine-${{ env.BUILD_TYPE }}-macos-${{ matrix.spec.arch }}.dmg
mv packages/frontend/electron/out/*/make/zip/darwin/${{ matrix.spec.arch }}/*.zip ./builds/affine-${{ env.BUILD_TYPE }}-macos-${{ matrix.spec.arch }}.zip
- name: Save artifacts (windows)
if: ${{ matrix.spec.platform == 'win32' }}
run: |
mkdir -p builds
mv packages/frontend/electron/out/*/make/zip/win32/x64/AFFiNE*-win32-x64-*.zip ./builds/affine-${{ env.BUILD_TYPE }}-windows-x64.zip
mv packages/frontend/electron/out/*/make/squirrel.windows/x64/*.exe ./builds/affine-${{ env.BUILD_TYPE }}-windows-x64.exe
mv packages/frontend/electron/out/*/make/squirrel.windows/x64/*.msi ./builds/affine-${{ env.BUILD_TYPE }}-windows-x64.msi
mv packages/frontend/electron/out/*/make/squirrel.windows/x64/*.nupkg ./builds/affine-${{ env.BUILD_TYPE }}-windows-x64.nupkg
- name: Save artifacts (linux)
if: ${{ matrix.spec.platform == 'linux' }}
run: |
mkdir -p builds
mv packages/frontend/electron/out/*/make/zip/linux/x64/*.zip ./builds/affine-${{ env.BUILD_TYPE }}-linux-x64.zip
mv packages/frontend/electron/out/*/make/AppImage/x64/*.AppImage ./builds/affine-${{ env.BUILD_TYPE }}-linux-x64.AppImage
- name: Upload Artifact
uses: actions/upload-artifact@v3
with:
name: affine-${{ matrix.spec.platform }}-${{ matrix.spec.arch }}-builds
path: builds
release:
needs:
- make-distribution
- set-build-version
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Download Artifacts (macos-x64)
uses: actions/download-artifact@v3
with:
name: affine-darwin-x64-builds
path: ./
- name: Download Artifacts (macos-arm64)
uses: actions/download-artifact@v3
with:
name: affine-darwin-arm64-builds
path: ./
- name: Download Artifacts (windows-x64)
uses: actions/download-artifact@v3
with:
name: affine-win32-x64-builds
path: ./
- name: Download Artifacts (linux-x64)
uses: actions/download-artifact@v3
with:
name: affine-linux-x64-builds
path: ./
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 18
- name: Generate Release yml
run: |
node ./packages/frontend/electron/scripts/generate-yml.js
env:
RELEASE_VERSION: ${{ needs.set-build-version.outputs.version }}
- name: Generate SHA512 checksums
run: |
sha512sum *-linux-* > SHA512SUMS.txt
sha512sum *-macos-* >> SHA512SUMS.txt
sha512sum *-windows-* >> SHA512SUMS.txt
- name: Create Release Draft
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}
with:
repository: 'toeverything/AFFiNE-Releases'
name: ${{ needs.set-build-version.outputs.version }}
tag_name: ${{ needs.set-build-version.outputs.version }}
prerelease: true
files: |
./SHA512SUMS.txt
./VERSION
./*.zip
./*.dmg
./*.exe
./*.nupkg
./RELEASES
./*.AppImage
./*.apk
./*.yml

View File

@@ -1,17 +1,15 @@
name: Release Desktop App
on:
push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+-canary.[0-9]+'
workflow_dispatch:
inputs:
build-type:
description: 'Build Type'
type: choice
version:
description: App Version
required: true
default: canary
options:
- canary
- beta
- stable
default: 0.0.0
is-draft:
description: 'Draft Release?'
type: boolean
@@ -22,6 +20,11 @@ on:
type: boolean
required: true
default: true
build-type:
description: 'Build Type (canary, beta or stable)'
type: string
required: true
default: canary
permissions:
actions: write
@@ -29,7 +32,7 @@ permissions:
security-events: write
env:
BUILD_TYPE: ${{ github.event.inputs.build-type }}
BUILD_TYPE: ${{ github.event.inputs.build-type || (github.ref_type == 'tag' && contains(github.ref, 'canary') && 'canary') }}
DEBUG: napi:*
APP_NAME: affine
MACOSX_DEPLOYMENT_TARGET: '10.13'
@@ -37,18 +40,26 @@ env:
jobs:
before-make:
runs-on: ubuntu-latest
environment: ${{ github.event.inputs.build-type }}
environment: ${{ github.event.inputs.build-type || (github.ref_type == 'tag' && contains(github.ref, 'canary') && 'canary') }}
outputs:
RELEASE_VERSION: ${{ steps.version.outputs.APP_VERSION }}
RELEASE_VERSION: ${{ steps.get-canary-version.outputs.RELEASE_VERSION }}
steps:
- uses: actions/checkout@v4
- name: Setup Version
id: version
uses: ./.github/actions/setup-version
- name: Setup Node.js
uses: ./.github/actions/setup-node
- name: Setup @sentry/cli
uses: ./.github/actions/setup-sentry
- name: Get canary version
id: get-canary-version
if: ${{ github.ref_type == 'tag' }}
run: |
TAG_VERSION=${GITHUB_REF#refs/tags/v}
PACKAGE_VERSION=$(node -p "require('./packages/frontend/electron/package.json').version")
if [ "$TAG_VERSION" != "$PACKAGE_VERSION" ]; then
echo "Tag version ($TAG_VERSION) does not match package.json version ($PACKAGE_VERSION)"
exit 1
fi
echo "RELEASE_VERSION=$(node -p "require('./packages/frontend/electron/package.json').version")" >> $GITHUB_OUTPUT
- name: generate-assets
run: yarn workspace @affine/electron generate-assets
env:
@@ -56,7 +67,7 @@ jobs:
SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
RELEASE_VERSION: ${{ steps.version.outputs.APP_VERSION }}
RELEASE_VERSION: ${{ github.event.inputs.version || steps.get-canary-version.outputs.RELEASE_VERSION }}
SKIP_PLUGIN_BUILD: 'true'
SKIP_NX_CACHE: 'true'
@@ -93,9 +104,6 @@ jobs:
SKIP_GENERATE_ASSETS: 1
steps:
- uses: actions/checkout@v4
- name: Setup Version
id: version
uses: ./.github/actions/setup-version
- name: Setup Node.js
timeout-minutes: 10
uses: ./.github/actions/setup-node
@@ -170,9 +178,6 @@ jobs:
SKIP_GENERATE_ASSETS: 1
steps:
- uses: actions/checkout@v4
- name: Setup Version
id: version
uses: ./.github/actions/setup-version
- name: Setup Node.js
timeout-minutes: 10
uses: ./.github/actions/setup-node
@@ -356,14 +361,14 @@ jobs:
run: |
node ./packages/frontend/electron/scripts/generate-yml.js
env:
RELEASE_VERSION: ${{ needs.before-make.outputs.RELEASE_VERSION }}
RELEASE_VERSION: ${{ github.event.inputs.version || needs.before-make.outputs.RELEASE_VERSION }}
- name: Create Release Draft
uses: softprops/action-gh-release@v1
with:
name: ${{ needs.before-make.outputs.RELEASE_VERSION }}
name: ${{ github.event.inputs.version || needs.before-make.outputs.RELEASE_VERSION }}
body: ''
draft: ${{ github.event.inputs.is-draft }}
prerelease: ${{ github.event.inputs.is-pre-release }}
draft: ${{ github.event.inputs.is-draft || true }}
prerelease: ${{ github.event.inputs.is-pre-release || needs.before-make.outputs.version }}
files: |
./VERSION
./*.zip

View File

@@ -1,27 +0,0 @@
name: Release Desktop Automatically
on:
push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+-canary.[0-9]+'
schedule:
- cron: '0 9 * * *'
jobs:
dispatch-release-desktop:
runs-on: ubuntu-latest
name: Setup Release Desktop
steps:
- name: dispatch desktop release by tag
if: ${{ github.event_name == 'push' }}
uses: benc-uk/workflow-dispatch@v1
with:
workflow: release-desktop.yml
inputs: '{ "build-type": "canary", "is-draft": false, "is-pre-release": true }'
- name: dispatch desktop release by schedule
if: ${{ github.event_name == 'schedule' }}
uses: benc-uk/workflow-dispatch@v1
with:
workflow: release-desktop.yml
inputs: '{ "build-type": "canary", "is-draft": false, "is-pre-release": true }'
ref: canary

View File

@@ -88,7 +88,7 @@
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-simple-import-sort": "^10.0.0",
"eslint-plugin-sonarjs": "^0.23.0",
"eslint-plugin-unicorn": "^50.0.0",
"eslint-plugin-unicorn": "^49.0.0",
"eslint-plugin-unused-imports": "^3.0.0",
"eslint-plugin-vue": "^9.18.1",
"fake-indexeddb": "5.0.1",

View File

@@ -10,9 +10,6 @@ export class ServerConfigType {
@Field({ description: 'server flavor' })
flavor!: string;
@Field({ description: 'server base url' })
baseUrl!: string;
}
export class ServerConfigResolver {
@@ -23,7 +20,6 @@ export class ServerConfigResolver {
return {
version: AFFiNE.version,
flavor: SERVER_FLAVOR,
baseUrl: AFFiNE.baseUrl,
};
}
}

View File

@@ -8,9 +8,6 @@ type ServerConfigType {
"""server flavor"""
flavor: String!
"""server base url"""
baseUrl: String!
}
type UserQuotaHumanReadable {

View File

@@ -3,8 +3,8 @@
"private": true,
"type": "module",
"devDependencies": {
"@blocksuite/global": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/store": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/global": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/store": "0.11.0-nightly-202312200102-8254dc9",
"react": "18.2.0",
"react-dom": "18.2.0",
"vitest": "1.0.4",

View File

@@ -62,9 +62,9 @@
"@affine/debug": "workspace:*",
"@affine/env": "workspace:*",
"@affine/sdk": "workspace:*",
"@blocksuite/blocks": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/global": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/store": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/blocks": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/global": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/store": "0.11.0-nightly-202312200102-8254dc9",
"jotai": "^2.5.1",
"jotai-effect": "^0.2.3",
"tinykeys": "^2.1.0",
@@ -73,8 +73,8 @@
"devDependencies": {
"@affine-test/fixtures": "workspace:*",
"@affine/templates": "workspace:*",
"@blocksuite/lit": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/presets": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/lit": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/presets": "0.11.0-nightly-202312200102-8254dc9",
"@testing-library/react": "^14.0.0",
"async-call-rpc": "^6.3.1",
"electron": "link:../../frontend/electron/node_modules/electron",

View File

@@ -28,12 +28,7 @@ export async function migratePages(
const oldVersions = versions?.toJSON() ?? {};
spaces.forEach((space: YDoc) => {
try {
// Catch page upgrade error to avoid blocking the whole workspace migration.
schema.upgradePage(0, oldVersions, space);
} catch (e) {
console.error(e);
}
schema.upgradePage(0, oldVersions, space);
});
schema.upgradeWorkspace(rootDoc);

View File

@@ -11,8 +11,7 @@ export enum MigrationPoint {
}
export function checkWorkspaceCompatibility(
workspace: Workspace,
isCloud: boolean
workspace: Workspace
): MigrationPoint | null {
// check if there is any key starts with 'space:' on root doc
const spaceMetaObj = workspace.doc.share.get('space:meta') as
@@ -21,9 +20,7 @@ export function checkWorkspaceCompatibility(
const docKeys = Array.from(workspace.doc.share.keys());
const haveSpaceMeta = !!spaceMetaObj && spaceMetaObj.size > 0;
const haveLegacySpace = docKeys.some(key => key.startsWith('space:'));
// DON'T UPGRADE SUBDOC ON CLOUD
if (!isCloud && (haveSpaceMeta || haveLegacySpace)) {
if (haveSpaceMeta || haveLegacySpace) {
return MigrationPoint.SubDoc;
}

View File

@@ -22,11 +22,11 @@
"dist"
],
"dependencies": {
"@blocksuite/block-std": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/blocks": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/global": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/presets": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/store": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/block-std": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/blocks": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/global": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/presets": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/store": "0.11.0-nightly-202312200102-8254dc9",
"jotai": "^2.5.1",
"zod": "^3.22.4"
},

View File

@@ -37,8 +37,8 @@
"y-provider": "workspace:*"
},
"devDependencies": {
"@blocksuite/blocks": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/store": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/blocks": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/store": "0.11.0-nightly-202312200102-8254dc9",
"fake-indexeddb": "^5.0.0",
"vite": "^5.0.6",
"vite-plugin-dts": "3.6.0",

View File

@@ -24,7 +24,7 @@
"build": "vite build"
},
"devDependencies": {
"@blocksuite/store": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/store": "0.11.0-nightly-202312200102-8254dc9",
"vite": "^5.0.6",
"vite-plugin-dts": "3.6.0",
"vitest": "1.0.4",

View File

@@ -72,12 +72,12 @@
"uuid": "^9.0.1"
},
"devDependencies": {
"@blocksuite/blocks": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/global": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/blocks": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/global": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/icons": "2.1.36",
"@blocksuite/lit": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/presets": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/store": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/lit": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/presets": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/store": "0.11.0-nightly-202312200102-8254dc9",
"@storybook/addon-actions": "^7.5.3",
"@storybook/addon-essentials": "^7.5.3",
"@storybook/addon-interactions": "^7.5.3",

View File

@@ -7,7 +7,6 @@ export const scrollableContainer = style({
alignItems: 'center',
height: '100vh',
padding: '0 200px',
backgroundColor: 'var(--affine-background-primary-color)',
'@media': {
'screen and (max-width: 1024px)': {
padding: '80px 36px',

View File

@@ -21,7 +21,6 @@ interface ExportMenuItemProps<T> {
interface ExportProps {
exportHandler: (type: 'pdf' | 'html' | 'png' | 'markdown') => Promise<void>;
pageMode?: 'page' | 'edgeless';
className?: string;
}
@@ -48,7 +47,6 @@ export function ExportMenuItem<T>({
export const ExportMenuItems = ({
exportHandler,
className = transitionStyle,
pageMode = 'page',
}: ExportProps) => {
const t = useAFFiNEI18N();
const itemMap = useMemo(
@@ -96,23 +94,16 @@ export const ExportMenuItems = ({
],
[className, exportHandler, t]
);
const items = itemMap.map(({ component: Component, props }) =>
pageMode === 'edgeless' &&
(props.type === 'pdf' || props.type === 'png') ? null : (
<Component key={props.label} {...props} />
)
);
const items = itemMap.map(({ component: Component, props }) => (
<Component key={props.label} {...props} />
));
return items;
};
export const Export = ({ exportHandler, className, pageMode }: ExportProps) => {
export const Export = ({ exportHandler, className }: ExportProps) => {
const t = useAFFiNEI18N();
const items = (
<ExportMenuItems
exportHandler={exportHandler}
className={className}
pageMode={pageMode}
/>
<ExportMenuItems exportHandler={exportHandler} className={className} />
);
return (
<MenuSub

View File

@@ -0,0 +1,6 @@
import { style } from '@vanilla-extract/css';
export const input = style({
height: '34px',
width: '220px',
});

View File

@@ -2,6 +2,7 @@ import { useCallback, useState } from 'react';
import Input from '../../ui/input';
import { Menu } from '../../ui/menu';
import * as styles from './index.css';
export const RenameModal = ({
onRename,
@@ -32,12 +33,12 @@ export const RenameModal = ({
}}
items={
<Input
className={styles.input}
autoFocus
defaultValue={value}
onChange={setValue}
onEnter={handleRename}
data-testid="rename-modal-input"
style={{ width: 220, height: 34 }}
/>
}
>

View File

@@ -5,7 +5,6 @@
font-family: 'Inter';
font-display: swap;
src: url(../fonts/inter/Inter-VariableFont_slnt,wght.ttf);
font-weight: 1 999;
}
/*

View File

@@ -391,6 +391,7 @@ export const createConfiguration: (
proxy: {
'/api/worker/': {
target: 'https://affine-worker.toeverything.workers.dev',
pathRewrite: { '^/api/worker/': '/api/' },
changeOrigin: true,
secure: false,
},

View File

@@ -31,9 +31,9 @@ export function getRuntimeConfig(buildFlags: BuildFlags): RuntimeConfig {
enableCaptcha: true,
enableEnhanceShareMode: false,
enablePayment: true,
enablePageHistory: true,
enablePageHistory: false,
enableCopilot: false,
serverUrlPrefix: 'https://app.affine.pro',
serverUrlPrefix: 'https://insider.affine.pro', // Let insider be stable environment temporarily.
editorFlags,
appVersion: packageJson.version,
editorVersion: packageJson.dependencies['@blocksuite/presets'],
@@ -42,7 +42,7 @@ export function getRuntimeConfig(buildFlags: BuildFlags): RuntimeConfig {
get beta() {
return {
...this.stable,
enablePageHistory: true,
enablePageHistory: false,
enableCopilot: false,
serverUrlPrefix: 'https://insider.affine.pro',
appBuildType: 'beta' as const,

View File

@@ -25,14 +25,14 @@
"@affine/i18n": "workspace:*",
"@affine/templates": "workspace:*",
"@affine/workspace": "workspace:*",
"@blocksuite/block-std": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/blocks": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/global": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/block-std": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/blocks": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/global": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/icons": "2.1.36",
"@blocksuite/inline": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/lit": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/presets": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/store": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/inline": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/lit": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/presets": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/store": "0.11.0-nightly-202312200102-8254dc9",
"@dnd-kit/core": "^6.0.8",
"@dnd-kit/sortable": "^8.0.0",
"@emotion/cache": "^11.11.0",
@@ -44,7 +44,7 @@
"@radix-ui/react-dialog": "^1.0.4",
"@radix-ui/react-scroll-area": "^1.0.5",
"@radix-ui/react-select": "^2.0.0",
"@react-hookz/web": "^24.0.0",
"@react-hookz/web": "^23.1.0",
"@sentry/integrations": "^7.83.0",
"@sentry/react": "^7.83.0",
"@toeverything/theme": "^0.7.20",

View File

@@ -8,7 +8,7 @@ import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { useWorkspace } from '@toeverything/hooks/use-workspace';
import { useWorkspaceInfo } from '@toeverything/hooks/use-workspace-info';
import { useSelfHosted } from '../../../hooks/affine/use-server-config';
import { useSelfHosted } from '../../../hooks/affine/use-server-flavor';
import { DeleteLeaveWorkspace } from './delete-leave-workspace';
import { EnableCloudPanel } from './enable-cloud';
import { ExportPanel } from './export';

View File

@@ -14,6 +14,7 @@ import { useSetAtom } from 'jotai';
import {
type KeyboardEvent,
type MouseEvent,
startTransition,
useCallback,
useEffect,
useState,
@@ -118,7 +119,9 @@ export const ProfilePanel = ({ isOwner, workspace }: ProfilePanelProps) => {
);
const handleSetInput = useCallback((value: string) => {
setInput(value);
startTransition(() => {
setInput(value);
});
}, []);
const handleKeyUp = useCallback(
@@ -200,7 +203,7 @@ export const ProfilePanel = ({ isOwner, workspace }: ProfilePanelProps) => {
<Input
disabled={workspaceIsLoading || !isOwner}
value={input}
style={{ width: 280, height: 32 }}
className={styles.workspaceNameInput}
data-testid="workspace-name-input"
placeholder={t['Workspace Name']()}
maxLength={64}

View File

@@ -201,3 +201,8 @@ export const arrowRight = style({
color: 'var(--affine-text-emphasis-color)',
cursor: 'pointer',
});
export const workspaceNameInput = style({
height: '32px',
width: '280px',
});

View File

@@ -2,15 +2,7 @@ import { Button } from '@affine/component';
import * as styles from './animate-in-tooltip.css';
interface AnimateInTooltipProps {
onNext: () => void;
visible?: boolean;
}
export const AnimateInTooltip = ({
onNext,
visible,
}: AnimateInTooltipProps) => {
export const AnimateInTooltip = ({ onNext }: { onNext: () => void }) => {
return (
<>
<div className={styles.tooltip}>
@@ -18,11 +10,9 @@ export const AnimateInTooltip = ({
whiteboards and databases
</div>
<div className={styles.next}>
{visible ? (
<Button type="primary" size="extraLarge" onClick={onNext}>
Next
</Button>
) : null}
<Button type="primary" size="extraLarge" onClick={onNext}>
Next
</Button>
</div>
</>
);

View File

@@ -8,7 +8,12 @@ import { BlogLink } from './blog-link';
export const article2: Array<OnboardingBlockOption> = [
{
children: <h1>Learning with retrieval practice</h1>,
children: (
<h1>
Learning with earning with
<br /> retrieval practice
</h1>
),
offset: { x: -824, y: 0 },
},
{
@@ -145,14 +150,14 @@ export const article2: Array<OnboardingBlockOption> = [
{
children: <img draggable={false} width={380} src={embed1png} />,
edgelessOnly: true,
position: { x: -200, y: -50 },
position: { x: -300, y: 0 },
fromPosition: { x: 300, y: -300 },
},
{
children: <img draggable={false} width={309} src={note1png} />,
edgelessOnly: true,
position: { x: -260, y: -70 },
position: { x: -360, y: -20 },
fromPosition: { x: -360, y: -100 },
enterDelay: 300,
customStyle: {
@@ -165,7 +170,7 @@ export const article2: Array<OnboardingBlockOption> = [
{
children: <img draggable={false} width={1800} src={note2png} />,
edgelessOnly: true,
position: { x: 50, y: 0 },
position: { x: 0, y: 0 },
fromPosition: { x: 2000, y: -2000 },
},
];

View File

@@ -158,7 +158,7 @@ const paperBriefs = {
'2': (
<div className={articleWrapper}>
<article className={article}>
<h1 className={title}>Learning with retrieval practice</h1>
<h1 className={title}>Learning with earning with retrieval practice</h1>
<p className={text}>
Are there any specific techniques to make the process of learning more
effective?

View File

@@ -23,27 +23,7 @@ export const segment = style({
position: 'absolute',
top: `calc(var(--segments-up) / var(--segments) * 100%)`,
// add a thin line behind to hide the gap between segments
'::before': {
content: '""',
position: 'absolute',
transform: `translateZ(-1px)`,
width: '100%',
height: '2px',
background: onboardingVars.paper.bg,
},
selectors: {
['&[data-root="true"]::before']: {
content: 'none',
},
['&[data-direction="up"]::before']: {
bottom: -1,
},
['&[data-direction="down"]::before']: {
top: -1,
},
['&[data-root="true"]']: {
height: `calc(1 / var(--segments) * 100%)`,
},

View File

@@ -34,11 +34,6 @@ export const Onboarding = ({ onOpenApp }: OnboardingProps) => {
});
}, []);
const onTooltipNext = useCallback(() => {
if (status.activeId) return;
setStatus({ activeId: null, unfoldingId: '4' });
}, [status.activeId]);
return (
<div
className={styles.onboarding}
@@ -85,7 +80,9 @@ export const Onboarding = ({ onOpenApp }: OnboardingProps) => {
)}
<div className={styles.tipsWrapper} data-visible={!status.activeId}>
<AnimateInTooltip onNext={onTooltipNext} visible={!status.activeId} />
<AnimateInTooltip
onNext={() => setStatus({ activeId: null, unfoldingId: '4' })}
/>
</div>
</div>
</div>

View File

@@ -14,9 +14,6 @@ export const edgelessSwitchWindow = style({
fontFamily: 'var(--affine-font-family)',
color: onboardingVars.paper.textColor,
maxWidth: 'calc(100vw - 48px)',
maxHeight: 'calc(100vh - 48px)',
selectors: {
'&[data-mode="edgeless"]': {
width: onboardingVars.edgeless.w,

View File

@@ -224,15 +224,7 @@ export const EdgelessSwitch = ({
<div data-no-drag className={styles.noDragWrapper}>
<header className={styles.header}>
<Button
style={{
background: 'white',
borderColor: '#E3E2E4',
color: '#424149',
}}
size="extraLarge"
onClick={onBack}
>
<Button size="extraLarge" onClick={onBack}>
Back
</Button>
<EdgelessSwitchButtons

View File

@@ -100,7 +100,8 @@ export const onboarding = style([
animation: `${fadeIn} 0.8s linear`,
// content: 'unset',
background:
'linear-gradient(180deg, rgba(0,0,0,0.8) 0%, rgba(0,0,0,0) 99.58%)',
// 'linear-gradient(180deg, rgba(0,0,0,0.8) 0%, rgba(0,0,0,0) 99.58%)',
'linear-gradient(180deg, rgba(0,0,0,0.9) 0%, rgba(0,0,0,0) 80%)',
},
'&[data-is-window="true"][data-is-desktop="true"]::after': {
opacity: 0,
@@ -132,25 +133,16 @@ export const paperLocation = style({
export const tipsWrapper = style({
position: 'absolute',
width: `calc(${onboardingVars.article.w} - 48px)`,
maxWidth: 'calc(100vw - 96px)',
bottom: 0,
height: `calc(${onboardingVars.article.h} / 2 - 24px)`,
maxHeight: 'calc(50vh - 48px)',
top: `calc(-${onboardingVars.article.h} / 2 + 24px)`,
pointerEvents: 'none',
display: 'flex',
justifyContent: 'center',
opacity: 0,
transition: '0.3s ease',
transition: '0.3s ease 1s',
selectors: {
'&[data-visible="true"]': {
pointerEvents: 'auto',
opacity: 1,
},
},
});
globalStyle(`${tipsWrapper} > *`, {
display: 'inline-block',
height: 'fit-content',
});
globalStyle(`${tipsWrapper}[data-visible="true"] > *`, {
pointerEvents: 'auto',
});

View File

@@ -34,7 +34,7 @@ import {
openSignOutModalAtom,
} from '../../../../atoms';
import { useCurrentUser } from '../../../../hooks/affine/use-current-user';
import { useSelfHosted } from '../../../../hooks/affine/use-server-config';
import { useSelfHosted } from '../../../../hooks/affine/use-server-flavor';
import { useUserSubscription } from '../../../../hooks/use-subscription';
import { validateAndReduceImage } from '../../../../utils/reduce-image';
import { Upload } from '../../../pure/file-upload';
@@ -137,12 +137,12 @@ export const AvatarAndName = () => {
<label>{t['com.affine.settings.profile.name']()}</label>
<FlexWrapper alignItems="center">
<Input
className={styles.userNameInput}
defaultValue={input}
data-testid="user-name-input"
placeholder={t['com.affine.settings.profile.placeholder']()}
maxLength={64}
minLength={0}
style={{ width: 280, height: 32 }}
onChange={setInput}
onEnter={handleUpdateUserName}
/>

View File

@@ -43,3 +43,8 @@ globalStyle(`${avatarWrapper} .camera-icon-wrapper`, {
export const button = style({
padding: '4px 12px',
});
export const userNameInput = style({
height: '32px',
width: '280px',
});

View File

@@ -8,7 +8,7 @@ import {
import type { ReactElement, SVGProps } from 'react';
import { useCurrentLoginStatus } from '../../../../hooks/affine/use-current-login-status';
import { useSelfHosted } from '../../../../hooks/affine/use-server-config';
import { useSelfHosted } from '../../../../hooks/affine/use-server-flavor';
import { AboutAffine } from './about';
import { AppearanceSettings } from './appearance';
import { BillingSettings } from './billing';

View File

@@ -126,20 +126,20 @@ export const SettingModal = ({
>
<div ref={modalContentRef} className={style.centerContainer}>
<div className={style.content}>
<Suspense fallback={<WorkspaceDetailSkeleton />}>
{activeTab === 'workspace' && workspaceMetadata ? (
{activeTab === 'workspace' && workspaceMetadata ? (
<Suspense fallback={<WorkspaceDetailSkeleton />}>
<WorkspaceSetting
key={workspaceMetadata.id}
workspaceMetadata={workspaceMetadata}
/>
) : null}
{generalSettingList.some(v => v.key === activeTab) ? (
<GeneralSetting generalKey={activeTab as GeneralSettingKeys} />
) : null}
{activeTab === 'account' && loginStatus === 'authenticated' ? (
<AccountSetting />
) : null}
</Suspense>
</Suspense>
) : null}
{generalSettingList.some(v => v.key === activeTab) ? (
<GeneralSetting generalKey={activeTab as GeneralSettingKeys} />
) : null}
{activeTab === 'account' && loginStatus === 'authenticated' ? (
<AccountSetting />
) : null}
</div>
<div className={style.footer}>
<a

View File

@@ -4,9 +4,7 @@ import { Divider } from '@affine/component/ui/divider';
import { WorkspaceFlavour } from '@affine/env/workspace';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { LinkIcon } from '@blocksuite/icons';
import { useAtomValue } from 'jotai';
import { currentModeAtom } from '../../../../atoms/mode';
import { useExportPage } from '../../../../hooks/affine/use-export-page';
import * as styles from './index.css';
import type { ShareMenuProps } from './share-menu';
@@ -19,13 +17,12 @@ export const ShareExport = ({
const t = useAFFiNEI18N();
const workspaceId = workspace.id;
const pageId = currentPage.id;
const { sharingUrl, onClickCopyLink } = useSharingUrl({
const { onClickCopyLink } = useSharingUrl({
workspaceId,
pageId,
urlType: 'workspace',
});
const exportHandler = useExportPage(currentPage);
const currentMode = useAtomValue(currentModeAtom);
return (
<>
@@ -39,7 +36,6 @@ export const ShareExport = ({
<ExportMenuItems
exportHandler={exportHandler}
className={styles.menuItemStyle}
pageMode={currentMode}
/>
</div>
{workspace.flavour !== WorkspaceFlavour.LOCAL ? (
@@ -57,7 +53,6 @@ export const ShareExport = ({
onClick={onClickCopyLink}
icon={<LinkIcon />}
type="plain"
disabled={!sharingUrl}
>
{t['com.affine.share-menu.copy-private-link']()}
</Button>

View File

@@ -18,7 +18,6 @@ import { useCallback } from 'react';
import type { PageMode } from '../../../../atoms';
import { currentModeAtom } from '../../../../atoms/mode';
import { useIsSharedPage } from '../../../../hooks/affine/use-is-shared-page';
import { useServerBaseUrl } from '../../../../hooks/affine/use-server-config';
import * as styles from './index.css';
import type { ShareMenuProps } from './share-menu';
import { useSharingUrl } from './use-share-url';
@@ -99,7 +98,6 @@ export const AffineSharePage = (props: ShareMenuProps) => {
pageId,
urlType: 'share',
});
const baseUrl = useServerBaseUrl();
const t = useAFFiNEI18N();
const onClickCreateLink = useCallback(() => {
@@ -142,13 +140,9 @@ export const AffineSharePage = (props: ShareMenuProps) => {
lineHeight: '20px',
}}
value={
(isSharedPage && sharingUrl) ||
`${
baseUrl ||
`${location.protocol}${
location.port ? `:${location.port}` : ''
}//${location.hostname}`
}/...`
isSharedPage
? sharingUrl
: `${location.protocol}//${location.hostname}/...`
}
readOnly
/>
@@ -157,7 +151,6 @@ export const AffineSharePage = (props: ShareMenuProps) => {
onClick={onClickCopyLink}
data-testid="share-menu-copy-link-button"
style={{ padding: '4px 12px', whiteSpace: 'nowrap' }}
disabled={!sharingUrl}
>
{t.Copy()}
</Button>

View File

@@ -1,5 +1,4 @@
import { toast } from '@affine/component';
import { useServerBaseUrl } from '@affine/core/hooks/affine/use-server-config';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { useCallback, useMemo } from 'react';
@@ -11,27 +10,22 @@ type UseSharingUrl = {
urlType: UrlType;
};
const useGenerateUrl = ({ workspaceId, pageId, urlType }: UseSharingUrl) => {
// to generate a private url like https://app.affine.app/workspace/123/456
// to generate a public url like https://app.affine.app/share/123/456
// or https://app.affine.app/share/123/456?mode=edgeless
export const generateUrl = ({
workspaceId,
pageId,
urlType,
}: UseSharingUrl) => {
// to generate a private url like https://affine.app/workspace/123/456
// to generate a public url like https://affine.app/share/123/456
// or https://affine.app/share/123/456?mode=edgeless
const baseUrl = useServerBaseUrl();
const url = useMemo(() => {
// baseUrl is null when running in electron and without network
if (!baseUrl) return null;
try {
return new URL(
`${baseUrl}/${urlType}/${workspaceId}/${pageId}`
).toString();
} catch (e) {
return null;
}
}, [baseUrl, pageId, urlType, workspaceId]);
return url;
const { protocol, hostname, port } = window.location;
const url = new URL(
`${protocol}//${hostname}${
port ? `:${port}` : ''
}/${urlType}/${workspaceId}/${pageId}`
);
return url.toString();
};
export const useSharingUrl = ({
@@ -40,21 +34,20 @@ export const useSharingUrl = ({
urlType,
}: UseSharingUrl) => {
const t = useAFFiNEI18N();
const sharingUrl = useGenerateUrl({ workspaceId, pageId, urlType });
const sharingUrl = useMemo(
() => generateUrl({ workspaceId, pageId, urlType }),
[workspaceId, pageId, urlType]
);
const onClickCopyLink = useCallback(() => {
if (sharingUrl) {
navigator.clipboard
.writeText(sharingUrl)
.then(() => {
toast(t['Copied link to clipboard']());
})
.catch(err => {
console.error(err);
});
} else {
toast('Network not available');
}
navigator.clipboard
.writeText(sharingUrl)
.then(() => {
toast(t['Copied link to clipboard']());
})
.catch(err => {
console.error(err);
});
}, [sharingUrl, t]);
return {

View File

@@ -182,7 +182,7 @@ export const PageHeaderMenuButton = ({ rename, pageId }: PageMenuProps) => {
>
{t['Import']()}
</MenuItem>
<Export exportHandler={exportHandler} pageMode={currentMode} />
<Export exportHandler={exportHandler} />
{workspace.flavour === WorkspaceFlavour.AFFINE_CLOUD &&
runtimeConfig.enablePageHistory ? (

View File

@@ -1,3 +1,4 @@
import { styled } from '@affine/component';
import { Button } from '@affine/component/ui/button';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import type { ChangeEvent, PropsWithChildren } from 'react';
@@ -41,7 +42,7 @@ export const Upload = ({
}
return (
<div style={{ display: 'flex' }} onClick={_chooseFile}>
<UploadStyle onClick={_chooseFile}>
{children ?? <Button>{t['Upload']()}</Button>}
<input
ref={input_ref}
@@ -51,6 +52,12 @@ export const Upload = ({
accept={accept}
{...props}
/>
</div>
</UploadStyle>
);
};
const UploadStyle = styled('div')(() => {
return {
display: 'inline-block',
};
});

View File

@@ -17,6 +17,13 @@ export const deleteHintContainer = style({
gap: '16px',
backgroundColor: 'var(--affine-background-primary-color)',
borderTop: '1px solid var(--affine-border-color)',
selectors: {
'&[data-has-background="false"]': {
backgroundColor: 'transparent',
borderTop: 'none',
padding: '14px 0',
},
},
});
export const deleteHintText = style({
fontSize: '15px',

View File

@@ -97,16 +97,9 @@ const useSyncEngineSyncProgress = () => {
useEffect(() => {
setSyncEngineStatus(currentWorkspace.engine.sync.status);
const disposable = currentWorkspace.engine.sync.onStatusChange.on(
debounce(
status => {
setSyncEngineStatus(status);
},
300,
{
maxWait: 500,
trailing: true,
}
)
debounce(status => {
setSyncEngineStatus(status);
}, 500)
);
return () => {
disposable?.dispose();

View File

@@ -30,7 +30,7 @@ import { useAsyncCallback } from '@toeverything/hooks/affine-async-hooks';
import { useAtom, useAtomValue } from 'jotai';
import { nanoid } from 'nanoid';
import type { HTMLAttributes, ReactElement } from 'react';
import { forwardRef, Suspense, useCallback, useEffect, useMemo } from 'react';
import { forwardRef, useCallback, useEffect, useMemo } from 'react';
import { openWorkspaceListModalAtom } from '../../atoms';
import { useHistoryAtom } from '../../atoms/history';
@@ -218,11 +218,7 @@ export const RootAppSidebar = ({
rootOptions={{
open: openUserWorkspaceList,
}}
items={
<Suspense>
<UserWithWorkspaceList onEventEnd={closeUserWorkspaceList} />
</Suspense>
}
items={<UserWithWorkspaceList onEventEnd={closeUserWorkspaceList} />}
contentOptions={{
// hide trigger
sideOffset: -58,

View File

@@ -141,7 +141,7 @@ export function useRegisterBlocksuiteEditorCommands(
unsubs.push(
registerAffineCommand({
id: `editor:${mode}-export-to-pdf`,
preconditionStrategy: () => mode === 'page' && !trash,
preconditionStrategy,
category: `editor:${mode}`,
icon: mode === 'page' ? <PageIcon /> : <EdgelessIcon />,
label: t['Export to PDF'](),
@@ -167,7 +167,7 @@ export function useRegisterBlocksuiteEditorCommands(
unsubs.push(
registerAffineCommand({
id: `editor:${mode}-export-to-png`,
preconditionStrategy: () => mode === 'page' && !trash,
preconditionStrategy,
category: `editor:${mode}`,
icon: mode === 'page' ? <PageIcon /> : <EdgelessIcon />,
label: t['Export to PNG'](),

View File

@@ -9,7 +9,7 @@ const errorHandler: Middleware = useSWRNext => (key, fetcher, config) => {
return useSWRNext(key, wrappedFetcher.bind(null, fetcher), config);
};
const useServerConfig = () => {
export const useServerFlavor = () => {
const { data: config, error } = useQueryImmutable(
{ query: serverConfigQuery },
{
@@ -18,20 +18,10 @@ const useServerConfig = () => {
);
if (error || !config) {
return null;
}
return config.serverConfig;
};
export const useServerFlavor = () => {
const config = useServerConfig();
if (!config) {
return 'local';
}
return config.flavor;
return config.serverConfig.flavor;
};
export const useSelfHosted = () => {
@@ -39,18 +29,3 @@ export const useSelfHosted = () => {
return ['local', 'selfhosted'].includes(serverFlavor);
};
export const useServerBaseUrl = () => {
const config = useServerConfig();
if (!config) {
if (environment.isDesktop) {
// don't use window.location in electron
return null;
}
const { protocol, hostname, port } = window.location;
return `${protocol}//${hostname}${port ? `:${port}` : ''}`;
}
return config.baseUrl;
};

View File

@@ -0,0 +1,15 @@
'use client';
import { useMemo } from 'react';
export function useShareLink(workspaceId: string): string {
return useMemo(() => {
if (environment.isServer) {
throw new Error('useShareLink is not available on server side');
}
if (environment.isDesktop) {
return '???';
} else {
return origin + '/share/' + workspaceId;
}
}, [workspaceId]);
}

View File

@@ -2,7 +2,7 @@ import { type SubscriptionQuery, subscriptionQuery } from '@affine/graphql';
import { useQuery } from '@affine/workspace/affine/gql';
import { useAsyncCallback } from '@toeverything/hooks/affine-async-hooks';
import { useSelfHosted } from './affine/use-server-config';
import { useSelfHosted } from './affine/use-server-flavor';
export type Subscription = NonNullable<
NonNullable<SubscriptionQuery['currentUser']>['subscription']

View File

@@ -1,8 +1,7 @@
import { Menu } from '@affine/component/ui/menu';
import { WorkspaceFallback } from '@affine/component/workspace';
import { workspaceListAtom } from '@affine/workspace/atom';
import { useAtomValue } from 'jotai';
import { lazy, useEffect, useLayoutEffect, useState } from 'react';
import { lazy, useEffect } from 'react';
import { type LoaderFunction, redirect } from 'react-router-dom';
import { createFirstAppData } from '../bootstrap/first-app-data';
@@ -25,14 +24,10 @@ export const loader: LoaderFunction = async () => {
};
export const Component = () => {
// navigating and creating may be slow, to avoid flickering, we show workspace fallback
const [navigating, setNavigating] = useState(false);
const [creating, setCreating] = useState(false);
const list = useAtomValue(workspaceListAtom);
const { openPage } = useNavigateHelper();
useLayoutEffect(() => {
useEffect(() => {
if (list.length === 0) {
return;
}
@@ -41,24 +36,14 @@ export const Component = () => {
const lastId = localStorage.getItem('last_workspace_id');
const openWorkspace = list.find(w => w.id === lastId) ?? list[0];
openPage(openWorkspace.id, WorkspaceSubPath.ALL);
setNavigating(true);
}, [list, openPage]);
useEffect(() => {
setCreating(true);
createFirstAppData()
.catch(err => {
console.error('Failed to create first app data', err);
})
.finally(() => {
setCreating(false);
});
createFirstAppData().catch(err => {
console.error('Failed to create first app data', err);
});
}, []);
if (navigating || creating) {
return <WorkspaceFallback></WorkspaceFallback>;
}
// TODO: We need a no workspace page
return (
<>

View File

@@ -32,10 +32,10 @@
"@affine/sdk": "workspace:*",
"@affine/templates": "workspace:*",
"@affine/vue-hello-world-plugin": "workspace:*",
"@blocksuite/blocks": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/lit": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/presets": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/store": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/blocks": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/lit": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/presets": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/store": "0.11.0-nightly-202312200102-8254dc9",
"@electron-forge/cli": "^7.2.0",
"@electron-forge/core": "^7.2.0",
"@electron-forge/core-utils": "^7.2.0",

View File

@@ -17,14 +17,13 @@ const affineCoreOutDir = path.join(affineCoreDir, 'dist');
const publicAffineOutDir = path.join(publicDistDir, `web-static`);
const releaseVersionEnv = process.env.RELEASE_VERSION || '';
console.log('build with following variables', {
console.log('build with following dir', {
repoRootDir,
electronRootDir,
publicDistDir,
affineSrcDir: affineCoreDir,
affineSrcOutDir: affineCoreOutDir,
publicAffineOutDir,
releaseVersionEnv,
});
// step 0: check version match

View File

@@ -24,7 +24,7 @@ export const mode = process.env.NODE_ENV;
export const isDev = mode === 'development';
const API_URL_MAPPING = {
stable: `https://app.affine.pro`,
stable: `https://insider.affine.pro`, // Let insider be stable environment temporarily.
beta: `https://insider.affine.pro`,
canary: `https://affine.fail`,
internal: `https://insider.affine.pro`,

View File

@@ -1,16 +1,10 @@
import { BrowserWindow, type Display, screen } from 'electron';
import { BrowserWindow, screen } from 'electron';
import { join } from 'path';
import { isMacOS } from '../shared/utils';
import { mainWindowOrigin } from './constants';
// import { getExposedMeta } from './exposed';
import { logger } from './logger';
const getScreenSize = (display: Display) => {
const { width, height } = isMacOS() ? display.bounds : display.workArea;
return { width, height };
};
// todo: not all window need all of the exposed meta
const getWindowAdditionalArguments = async () => {
const { getExposedMeta } = await import('./exposed');
@@ -21,24 +15,11 @@ const getWindowAdditionalArguments = async () => {
];
};
function fullscreenAndCenter(browserWindow: BrowserWindow) {
const position = browserWindow.getPosition();
const size = browserWindow.getSize();
const currentDisplay = screen.getDisplayNearestPoint({
x: position[0] + size[0] / 2,
y: position[1] + size[1] / 2,
});
if (!currentDisplay) return;
const { width, height } = getScreenSize(currentDisplay);
browserWindow.setSize(width, height);
browserWindow.center();
}
async function createOnboardingWindow(additionalArguments: string[]) {
logger.info('creating onboarding window');
// get user's screen size
const { width, height } = getScreenSize(screen.getPrimaryDisplay());
const { width, height } = screen.getPrimaryDisplay().workAreaSize;
const browserWindow = new BrowserWindow({
width,
@@ -55,7 +36,6 @@ async function createOnboardingWindow(additionalArguments: string[]) {
// skipTaskbar: true,
transparent: true,
hasShadow: false,
roundedCorners: false,
webPreferences: {
webgl: true,
preload: join(__dirname, './preload.js'),
@@ -76,18 +56,12 @@ async function createOnboardingWindow(additionalArguments: string[]) {
browserWindow.on('ready-to-show', () => {
// forcing zoom factor to 1 to avoid onboarding display issues
browserWindow.webContents.setZoomFactor(1);
fullscreenAndCenter(browserWindow);
// TODO: add a timeout to avoid flickering, window is ready, but dom is not ready
setTimeout(() => {
browserWindow.show();
}, 300);
});
// When moved to another screen, resize to fit the screen
browserWindow.on('moved', () => {
fullscreenAndCenter(browserWindow);
});
await browserWindow.loadURL(
`${mainWindowOrigin}${mainWindowOrigin.endsWith('/') ? '' : '/'}onboarding`
);

View File

@@ -655,7 +655,6 @@ query serverConfig {
serverConfig {
version
flavor
baseUrl
}
}`,
};

View File

@@ -2,6 +2,5 @@ query serverConfig {
serverConfig {
version
flavor
baseUrl
}
}

View File

@@ -2,15 +2,4 @@ export * from './fetcher';
export * from './graphql';
export * from './schema';
export * from './utils';
import { setupGlobal } from '@affine/env/global';
setupGlobal();
export function getBaseUrl(): string {
if (environment.isDesktop) {
return runtimeConfig.serverUrlPrefix;
}
const { protocol, hostname, port } = window.location;
return `${protocol}//${hostname}${port ? `:${port}` : ''}`;
}
import '@affine/env/global';

View File

@@ -632,7 +632,6 @@ export type ServerConfigQuery = {
__typename?: 'ServerConfigType';
version: string;
flavor: string;
baseUrl: string;
};
};

View File

@@ -20,12 +20,12 @@
"@affine/debug": "workspace:*",
"@affine/env": "workspace:*",
"@affine/workspace": "workspace:*",
"@blocksuite/block-std": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/blocks": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/global": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/lit": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/presets": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/store": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/block-std": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/blocks": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/global": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/lit": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/presets": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/store": "0.11.0-nightly-202312200102-8254dc9",
"@testing-library/react": "^14.0.0",
"@toeverything/infra": "workspace:*",
"@types/image-blob-reduce": "^4.1.3",

View File

@@ -7,7 +7,7 @@ import type {
QueryVariables,
RecursiveMaybeFields,
} from '@affine/graphql';
import { getBaseUrl, gqlFetcherFactory } from '@affine/graphql';
import { gqlFetcherFactory } from '@affine/graphql';
import type { GraphQLError } from 'graphql';
import { useCallback, useMemo } from 'react';
import type { Key, SWRConfiguration, SWRResponse } from 'swr';
@@ -22,7 +22,7 @@ import useSWRMutation from 'swr/mutation';
setupGlobal();
export const fetcher = gqlFetcherFactory(getBaseUrl() + '/graphql');
export const fetcher = gqlFetcherFactory('/graphql');
/**
* A `useSWR` wrapper for sending graphql queries

View File

@@ -92,7 +92,7 @@ export class SyncEngine {
}
canGracefulStop() {
return !!this.status.local && this.status.local.pendingPushUpdates === 0;
return !!this.status.local && this.status.local.pendingPushUpdates > 0;
}
async waitForGracefulStop(abort?: AbortSignal) {

View File

@@ -76,11 +76,6 @@ export function createCloudAwarenessProvider(
removeAwarenessStates(awareness, [awareness.clientID], 'window unload');
};
function handleConnect() {
socket.emit('client-handshake-awareness', workspaceId);
socket.emit('awareness-init', workspaceId);
}
return {
connect: () => {
socket.on('server-awareness-broadcast', awarenessBroadcast);
@@ -91,19 +86,16 @@ export function createCloudAwarenessProvider(
socket.connect();
socket.on('connect', handleConnect);
socket.emit('client-handshake-awareness', workspaceId);
socket.emit('awareness-init', workspaceId);
},
disconnect: () => {
removeAwarenessStates(awareness, [awareness.clientID], 'disconnect');
awareness.off('update', awarenessUpdate);
socket.emit('client-leave-awareness', workspaceId);
socket.off('server-awareness-broadcast', awarenessBroadcast);
socket.off('new-client-awareness-init', newClientAwarenessInitHandler);
socket.off('connect', handleConnect);
window.removeEventListener('unload', windowBeforeUnloadHandler);
socket.disconnect();
},
};
}

View File

@@ -2,7 +2,6 @@ import {
checkBlobSizesQuery,
deleteBlobMutation,
fetchWithTraceReport,
getBaseUrl,
listBlobsQuery,
setBlobMutation,
} from '@affine/graphql';
@@ -22,7 +21,7 @@ export const createAffineCloudBlobStorage = (
? key
: `/api/workspaces/${workspaceId}/blobs/${key}`;
return fetchWithTraceReport(getBaseUrl() + suffix).then(async res => {
return fetchWithTraceReport(suffix).then(async res => {
if (!res.ok) {
// status not in the range 200-299
return null;

View File

@@ -51,7 +51,8 @@ export function createAffineStorage(
});
});
function handleConnect() {
// TODO: handle error
socket.on('connect', () => {
socket.emit(
'client-handshake-sync',
workspaceId,
@@ -61,22 +62,10 @@ export function createAffineStorage(
}
}
);
}
socket.on('connect', handleConnect);
});
socket.connect();
socket.emit(
'client-handshake-sync',
workspaceId,
(response: { error?: any }) => {
if (!response.error) {
syncSender.start();
}
}
);
return {
name: 'affine-cloud',
async pull(docId, state) {
@@ -135,6 +124,14 @@ export function createAffineStorage(
await syncSender.send(docId, update);
},
async subscribe(cb, disconnect) {
const response: { error?: any } = await socket
.timeout(10000)
.emitWithAck('client-handshake-sync', workspaceId);
if (response.error) {
throw new Error('client-handshake error, ' + response.error);
}
const handleUpdate = async (message: {
workspaceId: string;
guid: string;
@@ -160,7 +157,7 @@ export function createAffineStorage(
disconnect() {
syncSender.stop();
socket.emit('client-leave-sync', workspaceId);
socket.off('connect', handleConnect);
socket.disconnect();
},
};
}

View File

@@ -49,8 +49,7 @@ export class WorkspaceUpgradeController {
checkIfNeedUpgrade() {
const needUpgrade = !!checkWorkspaceCompatibility(
this.workspace.blockSuiteWorkspace,
this.workspace.flavour === WorkspaceFlavour.AFFINE_CLOUD
this.workspace.blockSuiteWorkspace
);
this.status = {
...this.status,
@@ -70,8 +69,7 @@ export class WorkspaceUpgradeController {
await this.workspace.engine.sync.waitForSynced();
const step = checkWorkspaceCompatibility(
this.workspace.blockSuiteWorkspace,
this.workspace.flavour === WorkspaceFlavour.AFFINE_CLOUD
this.workspace.blockSuiteWorkspace
);
if (!step) {

View File

@@ -9,10 +9,5 @@ describe('isSvgBuffer', () => {
expect(isSvgBuffer(Buffer.from('<svg></svg>'))).toBe(true);
expect(isSvgBuffer(Buffer.from(' \n\r\t<svg></svg>'))).toBe(true);
expect(isSvgBuffer(Buffer.from('<123>'))).toBe(false);
expect(
isSvgBuffer(
Buffer.from('<?xml version="1.0" encoding="UTF-8"?><svg></svg>')
)
).toBe(true);
});
});

View File

@@ -2,25 +2,21 @@ import { Manager } from 'socket.io-client';
let ioManager: Manager | null = null;
function getBaseUrl(): string {
if (environment.isDesktop) {
return runtimeConfig.serverUrlPrefix;
}
const { protocol, hostname, port } = window.location;
return `${protocol === 'https:' ? 'wss' : 'ws'}://${hostname}${
port ? `:${port}` : ''
}`;
}
// use lazy initialization socket.io io manager
export function getIoManager(): Manager {
if (ioManager) {
return ioManager;
}
ioManager = new Manager(`${getBaseUrl()}/`, {
autoConnect: false,
transports: ['websocket'],
secure: location.protocol === 'https:',
});
const { protocol, hostname, port } = window.location;
ioManager = new Manager(
`${protocol === 'https:' ? 'wss' : 'ws'}://${hostname}${
port ? `:${port}` : ''
}/`,
{
autoConnect: false,
transports: ['websocket'],
secure: location.protocol === 'https:',
}
);
return ioManager;
}

View File

@@ -1,7 +1,7 @@
import isSvg from 'is-svg';
function fastCheckIsNotSvg(buffer: Uint8Array) {
// check first non-whitespace character is not '<svg' or '<?xml'
// check first non-whitespace character is not '<svg'
for (let i = 0; i < buffer.length; i++) {
const ch = buffer[i];
@@ -18,20 +18,11 @@ function fastCheckIsNotSvg(buffer: Uint8Array) {
continue;
}
return (
!(
buffer[i] === /* '<' */ 0x3c &&
buffer[i + 1] === /* 's' */ 0x73 &&
buffer[i + 2] === /* 'v' */ 0x76 &&
buffer[i + 3] === /* 'g' */ 0x67
) &&
!(
buffer[i] === /* '<' */ 0x3c &&
buffer[i + 1] === /* '?' */ 0x3f &&
buffer[i + 2] === /* 'x' */ 0x78 &&
buffer[i + 3] === /* 'm' */ 0x6d &&
buffer[i + 4] === /* 'l' */ 0x6c
)
return !(
buffer[i] === /* '<' */ 0x3c &&
buffer[i + 1] === /* 's' */ 0x73 &&
buffer[i + 2] === /* 'v' */ 0x76 &&
buffer[i + 3] === /* 'g' */ 0x67
);
}

View File

@@ -5,6 +5,7 @@ import { type ReactElement, useCallback } from 'react';
import { openAIApiKeyAtom } from '../core/hooks';
import { conversationHistoryDBName } from '../core/langchain/message-history';
import * as styles from './index.css';
export const DebugContent = (): ReactElement => {
const [key, setKey] = useAtom(openAIApiKeyAtom);
@@ -12,7 +13,7 @@ export const DebugContent = (): ReactElement => {
<div>
<FlexWrapper justifyContent="space-between">
<Input
style={{ width: 280 }}
className={styles.debugContentInput}
defaultValue={key ?? undefined}
onChange={useCallback(
(newValue: string) => {

View File

@@ -41,3 +41,7 @@ export const sendButtonStyle = style({
backgroundColor: 'transparent',
},
});
export const debugContentInput = style({
width: '280px',
});

View File

@@ -9,10 +9,10 @@
"devDependencies": {
"@affine-test/fixtures": "workspace:*",
"@affine-test/kit": "workspace:*",
"@blocksuite/block-std": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/blocks": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/global": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/store": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/block-std": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/blocks": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/global": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/store": "0.11.0-nightly-202312200102-8254dc9",
"@playwright/test": "^1.39.0",
"express": "^4.18.2",
"http-proxy-middleware": "^3.0.0-beta.1",

View File

@@ -9,10 +9,10 @@
"devDependencies": {
"@affine-test/fixtures": "workspace:*",
"@affine-test/kit": "workspace:*",
"@blocksuite/block-std": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/blocks": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/global": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/store": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/block-std": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/blocks": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/global": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/store": "0.11.0-nightly-202312200102-8254dc9",
"@playwright/test": "^1.39.0",
"express": "^4.18.2",
"http-proxy-middleware": "^3.0.0-beta.1",

View File

@@ -9,10 +9,10 @@
"devDependencies": {
"@affine-test/fixtures": "workspace:*",
"@affine-test/kit": "workspace:*",
"@blocksuite/block-std": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/blocks": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/global": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/store": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/block-std": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/blocks": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/global": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/store": "0.11.0-nightly-202312200102-8254dc9",
"@playwright/test": "^1.39.0",
"express": "^4.18.2",
"http-proxy-middleware": "^3.0.0-beta.1",

View File

@@ -9,10 +9,10 @@
"devDependencies": {
"@affine-test/fixtures": "workspace:*",
"@affine-test/kit": "workspace:*",
"@blocksuite/block-std": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/blocks": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/global": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/store": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/block-std": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/blocks": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/global": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/store": "0.11.0-nightly-202312200102-8254dc9",
"@playwright/test": "^1.39.0",
"express": "^4.18.2",
"http-proxy-middleware": "^3.0.0-beta.1",

View File

@@ -7,10 +7,10 @@
"devDependencies": {
"@affine-test/fixtures": "workspace:*",
"@affine-test/kit": "workspace:*",
"@blocksuite/block-std": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/blocks": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/global": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/store": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/block-std": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/blocks": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/global": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/store": "0.11.0-nightly-202312200102-8254dc9",
"@playwright/test": "^1.39.0"
},
"version": "0.11.0"

View File

@@ -107,13 +107,6 @@ const ThemeChange = () => {
};
localStorage.clear();
// do not show onboarding for storybook
window.localStorage.setItem(
'app_config',
'{"onBoarding":false, "dismissWorkspaceGuideModal":true}'
);
const store = createStore();
_setCurrentStore(store);
setup();

View File

@@ -31,14 +31,14 @@
"wait-on": "^7.2.0"
},
"devDependencies": {
"@blocksuite/block-std": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/blocks": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/global": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/block-std": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/blocks": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/global": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/icons": "2.1.36",
"@blocksuite/inline": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/lit": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/presets": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/store": "0.11.0-nightly-202312220916-e3abcbb",
"@blocksuite/inline": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/lit": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/presets": "0.11.0-nightly-202312200102-8254dc9",
"@blocksuite/store": "0.11.0-nightly-202312200102-8254dc9",
"@dnd-kit/sortable": "^8.0.0",
"@tomfreudenberg/next-auth-mock": "^0.5.6",
"chromatic": "^9.1.0",

345
yarn.lock
View File

@@ -25,10 +25,10 @@ __metadata:
dependencies:
"@affine-test/fixtures": "workspace:*"
"@affine-test/kit": "workspace:*"
"@blocksuite/block-std": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/global": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/store": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/block-std": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/global": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/store": "npm:0.11.0-nightly-202312200102-8254dc9"
"@playwright/test": "npm:^1.39.0"
express: "npm:^4.18.2"
http-proxy-middleware: "npm:^3.0.0-beta.1"
@@ -42,10 +42,10 @@ __metadata:
dependencies:
"@affine-test/fixtures": "workspace:*"
"@affine-test/kit": "workspace:*"
"@blocksuite/block-std": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/global": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/store": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/block-std": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/global": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/store": "npm:0.11.0-nightly-202312200102-8254dc9"
"@playwright/test": "npm:^1.39.0"
express: "npm:^4.18.2"
http-proxy-middleware: "npm:^3.0.0-beta.1"
@@ -59,10 +59,10 @@ __metadata:
dependencies:
"@affine-test/fixtures": "workspace:*"
"@affine-test/kit": "workspace:*"
"@blocksuite/block-std": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/global": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/store": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/block-std": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/global": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/store": "npm:0.11.0-nightly-202312200102-8254dc9"
"@playwright/test": "npm:^1.39.0"
express: "npm:^4.18.2"
http-proxy-middleware: "npm:^3.0.0-beta.1"
@@ -76,10 +76,10 @@ __metadata:
dependencies:
"@affine-test/fixtures": "workspace:*"
"@affine-test/kit": "workspace:*"
"@blocksuite/block-std": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/global": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/store": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/block-std": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/global": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/store": "npm:0.11.0-nightly-202312200102-8254dc9"
"@playwright/test": "npm:^1.39.0"
express: "npm:^4.18.2"
http-proxy-middleware: "npm:^3.0.0-beta.1"
@@ -138,10 +138,10 @@ __metadata:
dependencies:
"@affine-test/fixtures": "workspace:*"
"@affine-test/kit": "workspace:*"
"@blocksuite/block-std": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/global": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/store": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/block-std": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/global": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/store": "npm:0.11.0-nightly-202312200102-8254dc9"
"@playwright/test": "npm:^1.39.0"
languageName: unknown
linkType: soft
@@ -222,12 +222,12 @@ __metadata:
"@affine/graphql": "workspace:*"
"@affine/i18n": "workspace:*"
"@affine/workspace": "workspace:*"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/global": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/global": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/icons": "npm:2.1.36"
"@blocksuite/lit": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/presets": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/store": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/lit": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/presets": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/store": "npm:0.11.0-nightly-202312200102-8254dc9"
"@dnd-kit/core": "npm:^6.0.8"
"@dnd-kit/modifiers": "npm:^7.0.0"
"@dnd-kit/sortable": "npm:^8.0.0"
@@ -351,14 +351,14 @@ __metadata:
"@affine/templates": "workspace:*"
"@affine/workspace": "workspace:*"
"@aws-sdk/client-s3": "npm:3.433.0"
"@blocksuite/block-std": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/global": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/block-std": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/global": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/icons": "npm:2.1.36"
"@blocksuite/inline": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/lit": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/presets": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/store": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/inline": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/lit": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/presets": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/store": "npm:0.11.0-nightly-202312200102-8254dc9"
"@dnd-kit/core": "npm:^6.0.8"
"@dnd-kit/sortable": "npm:^8.0.0"
"@emotion/cache": "npm:^11.11.0"
@@ -372,7 +372,7 @@ __metadata:
"@radix-ui/react-dialog": "npm:^1.0.4"
"@radix-ui/react-scroll-area": "npm:^1.0.5"
"@radix-ui/react-select": "npm:^2.0.0"
"@react-hookz/web": "npm:^24.0.0"
"@react-hookz/web": "npm:^23.1.0"
"@sentry/integrations": "npm:^7.83.0"
"@sentry/react": "npm:^7.83.0"
"@sentry/webpack-plugin": "npm:^2.8.0"
@@ -468,10 +468,10 @@ __metadata:
"@affine/sdk": "workspace:*"
"@affine/templates": "workspace:*"
"@affine/vue-hello-world-plugin": "workspace:*"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/lit": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/presets": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/store": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/lit": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/presets": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/store": "npm:0.11.0-nightly-202312200102-8254dc9"
"@electron-forge/cli": "npm:^7.2.0"
"@electron-forge/core": "npm:^7.2.0"
"@electron-forge/core-utils": "npm:^7.2.0"
@@ -520,8 +520,8 @@ __metadata:
version: 0.0.0-use.local
resolution: "@affine/env@workspace:packages/common/env"
dependencies:
"@blocksuite/global": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/store": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/global": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/store": "npm:0.11.0-nightly-202312200102-8254dc9"
lit: "npm:^3.0.2"
react: "npm:18.2.0"
react-dom: "npm:18.2.0"
@@ -628,7 +628,7 @@ __metadata:
eslint-plugin-react-hooks: "npm:^4.6.0"
eslint-plugin-simple-import-sort: "npm:^10.0.0"
eslint-plugin-sonarjs: "npm:^0.23.0"
eslint-plugin-unicorn: "npm:^50.0.0"
eslint-plugin-unicorn: "npm:^49.0.0"
eslint-plugin-unused-imports: "npm:^3.0.0"
eslint-plugin-vue: "npm:^9.18.1"
fake-indexeddb: "npm:5.0.1"
@@ -711,11 +711,11 @@ __metadata:
version: 0.0.0-use.local
resolution: "@affine/sdk@workspace:packages/common/sdk"
dependencies:
"@blocksuite/block-std": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/global": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/presets": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/store": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/block-std": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/global": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/presets": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/store": "npm:0.11.0-nightly-202312200102-8254dc9"
jotai: "npm:^2.5.1"
vite: "npm:^5.0.6"
vite-plugin-dts: "npm:3.6.0"
@@ -840,14 +840,14 @@ __metadata:
dependencies:
"@affine/component": "workspace:*"
"@affine/i18n": "workspace:*"
"@blocksuite/block-std": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/global": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/block-std": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/global": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/icons": "npm:2.1.36"
"@blocksuite/inline": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/lit": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/presets": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/store": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/inline": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/lit": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/presets": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/store": "npm:0.11.0-nightly-202312200102-8254dc9"
"@dnd-kit/sortable": "npm:^8.0.0"
"@storybook/addon-actions": "npm:^7.5.3"
"@storybook/addon-essentials": "npm:^7.5.3"
@@ -4077,29 +4077,29 @@ __metadata:
languageName: node
linkType: hard
"@blocksuite/block-std@npm:0.11.0-nightly-202312220916-e3abcbb":
version: 0.11.0-nightly-202312220916-e3abcbb
resolution: "@blocksuite/block-std@npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/block-std@npm:0.11.0-nightly-202312200102-8254dc9":
version: 0.11.0-nightly-202312200102-8254dc9
resolution: "@blocksuite/block-std@npm:0.11.0-nightly-202312200102-8254dc9"
dependencies:
"@blocksuite/global": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/global": "npm:0.11.0-nightly-202312200102-8254dc9"
lz-string: "npm:^1.5.0"
w3c-keyname: "npm:^2.2.8"
zod: "npm:^3.22.4"
peerDependencies:
"@blocksuite/store": 0.11.0-nightly-202312220916-e3abcbb
checksum: bb1e7aae8310b09976af186566194eeae50d49518ada0571993d093afed029e8e1487258cc9fdc1b87b4961e05664408fbf7def2ffd01664bd80702481793eca
"@blocksuite/store": 0.11.0-nightly-202312200102-8254dc9
checksum: 223f704ad15e5473be1c2c617964e665dd05c278a3100e79618d5e194c7670fff20daf9652372fa8d6f9145b7f535862674d13bd443cad87dbe8f30da414c850
languageName: node
linkType: hard
"@blocksuite/blocks@npm:0.11.0-nightly-202312220916-e3abcbb":
version: 0.11.0-nightly-202312220916-e3abcbb
resolution: "@blocksuite/blocks@npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/blocks@npm:0.11.0-nightly-202312200102-8254dc9":
version: 0.11.0-nightly-202312200102-8254dc9
resolution: "@blocksuite/blocks@npm:0.11.0-nightly-202312200102-8254dc9"
dependencies:
"@blocksuite/block-std": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/global": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/inline": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/lit": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/store": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/block-std": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/global": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/inline": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/lit": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/store": "npm:0.11.0-nightly-202312200102-8254dc9"
"@floating-ui/dom": "npm:^1.5.3"
"@toeverything/theme": "npm:^0.7.27"
"@types/hast": "npm:^3.0.3"
@@ -4133,16 +4133,16 @@ __metadata:
unified: "npm:^11.0.4"
webfontloader: "npm:^1.6.28"
zod: "npm:^3.22.4"
checksum: 4d489d9b07240e10f395889cff888a0827d755be546dcc8a59394ac9562efadb18bc7af395d0fb64d31a14fda1582a0834a3f7f543ca3cfbf6ede063c1db02c7
checksum: dcefc3b3309fc743b78a248acd4dc3cbe60a666ea747c4fadc370a60597ed35156d42310e5232c6ec806c7c4cffad6e130917e4051c14fd14b7a7ca9866775a0
languageName: node
linkType: hard
"@blocksuite/global@npm:0.11.0-nightly-202312220916-e3abcbb":
version: 0.11.0-nightly-202312220916-e3abcbb
resolution: "@blocksuite/global@npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/global@npm:0.11.0-nightly-202312200102-8254dc9":
version: 0.11.0-nightly-202312200102-8254dc9
resolution: "@blocksuite/global@npm:0.11.0-nightly-202312200102-8254dc9"
dependencies:
zod: "npm:^3.22.4"
checksum: 90cadce741fe6917175848637fceddd90f8d18270ce95d92fd7c3035805e5add96dc363a20c6c1d89402f0d932ae0afcbba2d99afe65a624118b57cfdebcb13c
checksum: a871324674b5b7b50753e66a95baefa2c4054f79a5dddcbea4572a780551ba75be93b44d0efde6c83662463acf9fdd860f20f7340dd0c5f3dd3abc8ef36d6e45
languageName: node
linkType: hard
@@ -4156,57 +4156,55 @@ __metadata:
languageName: node
linkType: hard
"@blocksuite/inline@npm:0.11.0-nightly-202312220916-e3abcbb":
version: 0.11.0-nightly-202312220916-e3abcbb
resolution: "@blocksuite/inline@npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/inline@npm:0.11.0-nightly-202312200102-8254dc9":
version: 0.11.0-nightly-202312200102-8254dc9
resolution: "@blocksuite/inline@npm:0.11.0-nightly-202312200102-8254dc9"
dependencies:
"@blocksuite/global": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/global": "npm:0.11.0-nightly-202312200102-8254dc9"
zod: "npm:^3.22.4"
peerDependencies:
lit: ^3.0.2
yjs: ^13
checksum: 33f68338338981d43304e7408757ede7269bd5eb8be2fe92ec5e5a35dbbc20095fbec9bf26878d7e88484302bd4c466806bdc48c871c97aeab0c2d456fd062ab
checksum: 9cc1e7b7b965928362294962b97f5517259a01a8bed29fa8a51c837d35a9b6330cc1d0fcb372815e68945b12950e9230d452941065eed5cb1e332a60651e2844
languageName: node
linkType: hard
"@blocksuite/lit@npm:0.11.0-nightly-202312220916-e3abcbb":
version: 0.11.0-nightly-202312220916-e3abcbb
resolution: "@blocksuite/lit@npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/lit@npm:0.11.0-nightly-202312200102-8254dc9":
version: 0.11.0-nightly-202312200102-8254dc9
resolution: "@blocksuite/lit@npm:0.11.0-nightly-202312200102-8254dc9"
dependencies:
"@blocksuite/global": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/inline": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/global": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/inline": "npm:0.11.0-nightly-202312200102-8254dc9"
lit: "npm:^3.1.0"
peerDependencies:
"@blocksuite/block-std": 0.11.0-nightly-202312220916-e3abcbb
"@blocksuite/store": 0.11.0-nightly-202312220916-e3abcbb
checksum: af7835d4facd1e4a1339ec69a3069c0e49042d76a5af40cd5ad4763f845806b0c95b8464e2a26a74fe92397fd01e928ee30168e7dbbf86d111711c1c8f3503f4
"@blocksuite/block-std": 0.11.0-nightly-202312200102-8254dc9
"@blocksuite/store": 0.11.0-nightly-202312200102-8254dc9
checksum: e9cfbdebd24c20f69b6b9c9295a3da32a3b56f1b7ed535f72246cb17d9644794f097c134a409c1b21c055aed1468331ec99f4f85ebd373d0ab4a947210a9cc9c
languageName: node
linkType: hard
"@blocksuite/presets@npm:0.11.0-nightly-202312220916-e3abcbb":
version: 0.11.0-nightly-202312220916-e3abcbb
resolution: "@blocksuite/presets@npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/presets@npm:0.11.0-nightly-202312200102-8254dc9":
version: 0.11.0-nightly-202312200102-8254dc9
resolution: "@blocksuite/presets@npm:0.11.0-nightly-202312200102-8254dc9"
dependencies:
"@blocksuite/block-std": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/global": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/inline": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/lit": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/store": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@fal-ai/serverless-client": "npm:^0.7.3"
"@blocksuite/block-std": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/global": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/lit": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/store": "npm:0.11.0-nightly-202312200102-8254dc9"
"@toeverything/theme": "npm:^0.7.27"
lit: "npm:^3.1.0"
openai: "npm:^4.20.1"
checksum: c065ed1ac04eef103170650bdb81af7aca6d8f1b9d72253251397345d908c09e6daf78eed2a408b273caf3d109900ad84f4a60fc54fd6f7b062f93b5e23c92f4
checksum: 19f45cdaaa68551be4682d76cf696726d18faa9892b20e79d616a83c6f1a259732446c70e5b221a7dcf70cd1a1f71ab63a1b2f546f460c767174cd3d4776df4d
languageName: node
linkType: hard
"@blocksuite/store@npm:0.11.0-nightly-202312220916-e3abcbb":
version: 0.11.0-nightly-202312220916-e3abcbb
resolution: "@blocksuite/store@npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/store@npm:0.11.0-nightly-202312200102-8254dc9":
version: 0.11.0-nightly-202312200102-8254dc9
resolution: "@blocksuite/store@npm:0.11.0-nightly-202312200102-8254dc9"
dependencies:
"@blocksuite/global": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/inline": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/global": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/inline": "npm:0.11.0-nightly-202312200102-8254dc9"
"@types/flexsearch": "npm:^0.7.3"
flexsearch: "npm:0.7.21"
idb-keyval: "npm:^6.2.1"
@@ -4219,7 +4217,7 @@ __metadata:
peerDependencies:
async-call-rpc: ^6
yjs: ^13
checksum: fe615c626b412c5f48406a6617e950f55388e3253540cd02978e3155f3a573adc68539c3b521c40d04da7932eb8a73af30b8262cb34f478fb0b88bc0b28f9153
checksum: 0d64da33b8dd916638c10661fc1ed80812cb6dd5ff57c4866f34599164e94f2aa53a1a26a4d8fc5b2ad69984d846bc3c63e1024d2d90990b24d5512516ce6db5
languageName: node
linkType: hard
@@ -5865,23 +5863,6 @@ __metadata:
languageName: node
linkType: hard
"@eslint/eslintrc@npm:^2.1.4":
version: 2.1.4
resolution: "@eslint/eslintrc@npm:2.1.4"
dependencies:
ajv: "npm:^6.12.4"
debug: "npm:^4.3.2"
espree: "npm:^9.6.0"
globals: "npm:^13.19.0"
ignore: "npm:^5.2.0"
import-fresh: "npm:^3.2.1"
js-yaml: "npm:^4.1.0"
minimatch: "npm:^3.1.2"
strip-json-comments: "npm:^3.1.1"
checksum: 7a3b14f4b40fc1a22624c3f84d9f467a3d9ea1ca6e9a372116cb92507e485260359465b58e25bcb6c9981b155416b98c9973ad9b796053fd7b3f776a6946bce8
languageName: node
linkType: hard
"@eslint/js@npm:8.54.0":
version: 8.54.0
resolution: "@eslint/js@npm:8.54.0"
@@ -5903,17 +5884,6 @@ __metadata:
languageName: node
linkType: hard
"@fal-ai/serverless-client@npm:^0.7.3":
version: 0.7.4
resolution: "@fal-ai/serverless-client@npm:0.7.4"
dependencies:
"@msgpack/msgpack": "npm:^3.0.0-beta2"
robot3: "npm:^0.4.1"
uuid-random: "npm:^1.3.2"
checksum: 2df2a3de60b637b2cfe57e08429f79e0ac7f604777f7e761839b28795be049e714f3f1f338c4fb35a18e575d4c58b82c7244680877adf5d83094ba6625de4851
languageName: node
linkType: hard
"@fal-works/esbuild-plugin-global-externals@npm:^2.1.2":
version: 2.1.2
resolution: "@fal-works/esbuild-plugin-global-externals@npm:2.1.2"
@@ -7403,13 +7373,6 @@ __metadata:
languageName: node
linkType: hard
"@msgpack/msgpack@npm:^3.0.0-beta2":
version: 3.0.0-beta2
resolution: "@msgpack/msgpack@npm:3.0.0-beta2"
checksum: d02f9221aa152cbd2977d1f56dc591baa2a37420a694cbc7e54ff0724f56ac0523e94de010e56bb845d67a1f2226c1761064b5777e63e9fc26884f4144d391a7
languageName: node
linkType: hard
"@mswjs/cookies@npm:^1.1.0":
version: 1.1.0
resolution: "@mswjs/cookies@npm:1.1.0"
@@ -11258,9 +11221,9 @@ __metadata:
languageName: node
linkType: hard
"@react-hookz/web@npm:^24.0.0":
version: 24.0.0
resolution: "@react-hookz/web@npm:24.0.0"
"@react-hookz/web@npm:^23.1.0":
version: 23.1.0
resolution: "@react-hookz/web@npm:23.1.0"
dependencies:
"@react-hookz/deep-equal": "npm:^1.0.4"
peerDependencies:
@@ -11270,7 +11233,7 @@ __metadata:
peerDependenciesMeta:
js-cookie:
optional: true
checksum: 85ec7ebecf3a69f098fecb89c1515ffd8c119f29a74521277df34af637059320669cf8ff6273063cec6a4c86cee4849e24fa8772191d08f81b2b88de69749670
checksum: 7f345fc286ee3bae74b76b909898213a589250856783805d0356d8ef9ca0e3d1638e7499d8b77ae1dff6350dec230fda468e0e4c8fc05a9997902569d3d81b49
languageName: node
linkType: hard
@@ -13763,12 +13726,12 @@ __metadata:
"@affine/debug": "workspace:*"
"@affine/env": "workspace:*"
"@affine/workspace": "workspace:*"
"@blocksuite/block-std": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/global": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/lit": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/presets": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/store": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/block-std": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/global": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/lit": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/presets": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/store": "npm:0.11.0-nightly-202312200102-8254dc9"
"@testing-library/react": "npm:^14.0.0"
"@toeverything/infra": "workspace:*"
"@types/image-blob-reduce": "npm:^4.1.3"
@@ -13819,11 +13782,11 @@ __metadata:
"@affine/env": "workspace:*"
"@affine/sdk": "workspace:*"
"@affine/templates": "workspace:*"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/global": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/lit": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/presets": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/store": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/global": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/lit": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/presets": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/store": "npm:0.11.0-nightly-202312200102-8254dc9"
"@testing-library/react": "npm:^14.0.0"
async-call-rpc: "npm:^6.3.1"
electron: "link:../../frontend/electron/node_modules/electron"
@@ -13872,8 +13835,8 @@ __metadata:
version: 0.0.0-use.local
resolution: "@toeverything/y-indexeddb@workspace:packages/common/y-indexeddb"
dependencies:
"@blocksuite/blocks": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/store": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/blocks": "npm:0.11.0-nightly-202312200102-8254dc9"
"@blocksuite/store": "npm:0.11.0-nightly-202312200102-8254dc9"
fake-indexeddb: "npm:^5.0.0"
idb: "npm:^8.0.0"
nanoid: "npm:^5.0.3"
@@ -17366,20 +17329,6 @@ __metadata:
languageName: node
linkType: hard
"browserslist@npm:^4.22.2":
version: 4.22.2
resolution: "browserslist@npm:4.22.2"
dependencies:
caniuse-lite: "npm:^1.0.30001565"
electron-to-chromium: "npm:^1.4.601"
node-releases: "npm:^2.0.14"
update-browserslist-db: "npm:^1.0.13"
bin:
browserslist: cli.js
checksum: e3590793db7f66ad3a50817e7b7f195ce61e029bd7187200244db664bfbe0ac832f784e4f6b9c958aef8ea4abe001ae7880b7522682df521f4bc0a5b67660b5e
languageName: node
linkType: hard
"bser@npm:2.1.1":
version: 2.1.1
resolution: "bser@npm:2.1.1"
@@ -17697,13 +17646,6 @@ __metadata:
languageName: node
linkType: hard
"caniuse-lite@npm:^1.0.30001565":
version: 1.0.30001570
resolution: "caniuse-lite@npm:1.0.30001570"
checksum: a9b939e003dd70580cc18bce54627af84f298af7c774415c8d6c99871e7cee13bd8278b67955a979cd338369c73e8821a10b37e607d1fff2fbc8ff92fc489653
languageName: node
linkType: hard
"capital-case@npm:^1.0.4":
version: 1.0.4
resolution: "capital-case@npm:1.0.4"
@@ -18029,7 +17971,7 @@ __metadata:
languageName: node
linkType: hard
"ci-info@npm:^3.2.0":
"ci-info@npm:^3.2.0, ci-info@npm:^3.8.0":
version: 3.9.0
resolution: "ci-info@npm:3.9.0"
checksum: 75bc67902b4d1c7b435497adeb91598f6d52a3389398e44294f6601b20cfef32cf2176f7be0eb961d9e085bb333a8a5cae121cb22f81cf238ae7f58eb80e9397
@@ -18845,15 +18787,6 @@ __metadata:
languageName: node
linkType: hard
"core-js-compat@npm:^3.34.0":
version: 3.34.0
resolution: "core-js-compat@npm:3.34.0"
dependencies:
browserslist: "npm:^4.22.2"
checksum: e29571cc524b4966e331b5876567f13c2b82ed48ac9b02784f3156b29ee1cd82fe3e60052d78b017c429eb61969fd238c22684bb29180908d335266179a29155
languageName: node
linkType: hard
"core-js-pure@npm:^3.23.3":
version: 3.33.3
resolution: "core-js-pure@npm:3.33.3"
@@ -20162,13 +20095,6 @@ __metadata:
languageName: node
linkType: hard
"electron-to-chromium@npm:^1.4.601":
version: 1.4.615
resolution: "electron-to-chromium@npm:1.4.615"
checksum: dbf9deb234cbd381a91f41f6c6729cc8b4bed9b1580d6aea589d689d5f2a8aadf88837ef6887e761c143a1e1015f5eb3ae1bd2728a3068fa6a235c16c0fd76ae
languageName: node
linkType: hard
"electron-updater@npm:^6.1.5":
version: 6.1.7
resolution: "electron-updater@npm:6.1.7"
@@ -20990,16 +20916,14 @@ __metadata:
languageName: node
linkType: hard
"eslint-plugin-unicorn@npm:^50.0.0":
version: 50.0.0
resolution: "eslint-plugin-unicorn@npm:50.0.0"
"eslint-plugin-unicorn@npm:^49.0.0":
version: 49.0.0
resolution: "eslint-plugin-unicorn@npm:49.0.0"
dependencies:
"@babel/helper-validator-identifier": "npm:^7.22.20"
"@eslint-community/eslint-utils": "npm:^4.4.0"
"@eslint/eslintrc": "npm:^2.1.4"
ci-info: "npm:^4.0.0"
ci-info: "npm:^3.8.0"
clean-regexp: "npm:^1.0.0"
core-js-compat: "npm:^3.34.0"
esquery: "npm:^1.5.0"
indent-string: "npm:^4.0.0"
is-builtin-module: "npm:^3.2.1"
@@ -21011,8 +20935,8 @@ __metadata:
semver: "npm:^7.5.4"
strip-indent: "npm:^3.0.0"
peerDependencies:
eslint: ">=8.56.0"
checksum: 09d069bac3d4c7d3d3d4ddf8a9992718cd1acc6bbba99cfcb0fb581d9dd0d64378c55d6cc5579aadf23d199c53b539a4351446e0855b363c95e8926be15c95e6
eslint: ">=8.52.0"
checksum: 7f73f41356cdf720675998c558ab13872d76302dde3a49661df0b5219fd328627e3d7e418aaa3e94cf8764d1ef8b606f7ea01f019eccc0bf0522def8e6769caa
languageName: node
linkType: hard
@@ -29109,13 +29033,6 @@ __metadata:
languageName: node
linkType: hard
"node-releases@npm:^2.0.14":
version: 2.0.14
resolution: "node-releases@npm:2.0.14"
checksum: 0f7607ec7db5ef1dc616899a5f24ae90c869b6a54c2d4f36ff6d84a282ab9343c7ff3ca3670fe4669171bb1e8a9b3e286e1ef1c131f09a83d70554f855d54f24
languageName: node
linkType: hard
"nodemailer@npm:^6.9.7":
version: 6.9.7
resolution: "nodemailer@npm:6.9.7"
@@ -32687,13 +32604,6 @@ __metadata:
languageName: node
linkType: hard
"robot3@npm:^0.4.1":
version: 0.4.1
resolution: "robot3@npm:0.4.1"
checksum: bab48cf0be9c26caeca0bb11a0c7abac813db67dd76c406cfd9ac828562c1cf504ce3775f87b157eb33ac62cda4763421513ecc6f2780266d19cc0f9590eb3bf
languageName: node
linkType: hard
"rollup-plugin-inject@npm:^3.0.0":
version: 3.0.2
resolution: "rollup-plugin-inject@npm:3.0.2"
@@ -35799,13 +35709,6 @@ __metadata:
languageName: node
linkType: hard
"uuid-random@npm:^1.3.2":
version: 1.3.2
resolution: "uuid-random@npm:1.3.2"
checksum: 9070c876651e1893f9255dddab2edc177ba34196660065be074050e4143405382b7f0f5fb922b666ebfd0794a6ef7b9f6acb627865df7b2978edb0da6b448f1d
languageName: node
linkType: hard
"uuid@npm:9.0.1, uuid@npm:^9.0.0, uuid@npm:^9.0.1":
version: 9.0.1
resolution: "uuid@npm:9.0.1"
@@ -37051,7 +36954,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "y-provider@workspace:packages/common/y-provider"
dependencies:
"@blocksuite/store": "npm:0.11.0-nightly-202312220916-e3abcbb"
"@blocksuite/store": "npm:0.11.0-nightly-202312200102-8254dc9"
vite: "npm:^5.0.6"
vite-plugin-dts: "npm:3.6.0"
vitest: "npm:1.0.4"