Compare commits

..

92 Commits

Author SHA1 Message Date
Peng Xiao
b2556db33b fix: adjust some styles (#2438) 2023-05-18 09:24:23 +00:00
JimmFly
89310c9b97 chore: adjust delete description style (#2437) 2023-05-18 09:17:38 +00:00
JimmFly
8e09af910f fix: create workspace card responsive (#2435) 2023-05-18 09:11:15 +00:00
himself65
885aea3425 v0.6.0-canary.5 2023-05-18 01:21:25 -07:00
ShortCipher5
a616150f2d chore: update pre-load content (#2432) 2023-05-18 00:08:35 -07:00
Himself65
d80dae8a89 fix: open non-trash page when open (#2431) 2023-05-17 23:22:31 -07:00
Himself65
34ff08b92b chore: bump blocksuite to 0.0.0-20230518051344-45970a96-nightly (#2430) 2023-05-17 22:30:45 -07:00
Peng Xiao
2f7b51d7ff feat: fav page references (#2422)
Co-authored-by: Himself65 <himself65@outlook.com>
2023-05-17 22:18:40 -07:00
ShortCipher5
b7cee3185e chore: update pre-loading page (#2429) 2023-05-17 22:16:19 -07:00
JimmFly
1c5455e6ed chore: adjust copywriting for onboarding (#2428) 2023-05-17 22:15:01 -07:00
himself65
2d303fd5d3 v0.6.0-canary.4 2023-05-17 17:46:39 -07:00
himself65
fbe2543c03 fix: version check 2023-05-17 17:44:58 -07:00
Himself65
d6b640726e refactor: remove unused code (#2425) 2023-05-17 17:15:12 -07:00
Peng Xiao
f875b37641 fix: configurable changelog url (#2418) 2023-05-17 16:16:22 -07:00
Himself65
53c4fc6dfa fix: sidebar fallback ui position (#2424) 2023-05-17 15:49:55 -07:00
Himself65
6c310249d9 chore: bump version (#2423) 2023-05-17 15:02:55 -07:00
Horus
02e1f528bf fix: add workflow to check release version match with package.json (#2420) 2023-05-17 10:37:28 -07:00
Peng Xiao
c870104370 chore: bump blocksuite to 0.0.0-20230517102216-36bda4ab-nightly (#2411) 2023-05-17 10:09:29 -07:00
himself65
627d8ef787 v0.6.0-canary.3 2023-05-17 09:48:51 -07:00
LongYinan
5563823a7a build: missing build native step in nightly build (#2421) 2023-05-17 23:52:32 +08:00
JimmFly
d6804bb0fd chore: update prompt (#2410) 2023-05-17 17:52:57 +08:00
LongYinan
1350633690 build: fix electron release build process (#2408) 2023-05-17 17:22:49 +08:00
JimmFly
50196d8fde chore: update preloading page (#2409) 2023-05-17 09:16:07 +00:00
Peng Xiao
2e0ccb53ec feat: update button enhancements (#2401) 2023-05-17 16:58:14 +08:00
Whitewater
1498ee405b feat: add dropdown button (#2407) 2023-05-17 16:32:37 +08:00
Peng Xiao
cb863c4afa chore: disable image modal by default (#2400) 2023-05-16 23:14:31 -07:00
Himself65
2629d39501 fix: infinite reloading (#2405) 2023-05-17 13:58:34 +08:00
Himself65
38305cd984 fix: hydration error (#2404) 2023-05-17 05:23:55 +00:00
LongYinan
93116c24f2 feat(electron): use affine native (#2329) 2023-05-17 12:36:51 +08:00
Whitewater
017b9c8615 feat: add block card component (#2398) 2023-05-16 18:19:28 +08:00
Whitewater
9ce3a96862 fix: unexpected undefined class in popup (#2394) 2023-05-16 10:01:27 +00:00
Peng Xiao
a0ff520ba4 fix: some style updates (#2396) 2023-05-16 09:46:51 +00:00
Whitewater
a8b8986d89 chore: disable confused storybook backgrounds addon (#2395) 2023-05-16 17:46:35 +08:00
JimmFly
8ffc096fee fix: text overflows in the header option menu (#2393) 2023-05-16 17:35:57 +08:00
JimmFly
7e457f7b4c chore: add responsive styles for workspace card (#2390) 2023-05-16 16:51:46 +08:00
xiaodong zuo
aedf2d339e Update jobs.md
Added a job posting for a full-time or internship engineer.
2023-05-16 15:35:23 +08:00
JimmFly
ffd5ae52b3 feat: add Japanese support and update translation (#2388) 2023-05-16 14:21:51 +08:00
DiamondThree
3093194da8 docs: update jobs.md (#2389) 2023-05-15 22:24:27 -07:00
Horus
68b4f792f0 fix: app updater not working for internal release (#2377) 2023-05-15 20:34:54 -07:00
himself65
e2c6e4f9fc ci: use samver 2023-05-15 09:34:04 -07:00
Whitewater
9ff7dbffb7 feat: supports sort all page (#2356) 2023-05-15 08:50:43 -07:00
JimmFly
0c561da061 chore: remove favorite page (#2372) 2023-05-15 08:41:38 -07:00
JimmFly
06951319a6 chore: remove quick search tips (#2375) 2023-05-15 08:41:10 -07:00
JimmFly
0bfcab4067 chore: add animation for tour modal (#2365) 2023-05-15 16:48:52 +08:00
himself65
2c4db4fa16 v0.6.0-canary.2 2023-05-14 23:14:36 -07:00
Himself65
23b4f9ee12 feat(electron): track router history (#2336)
Co-authored-by: Peng Xiao <pengxiao@outlook.com>
2023-05-14 23:13:30 -07:00
himself65
e5330b1917 build: add app bundle id for internal 2023-05-14 22:35:40 -07:00
Peng Xiao
183611a556 fix: some style updates (#2348) 2023-05-14 21:58:13 -07:00
Himself65
7786456ba4 chore: update blocksuite to 0.0.0-20230514141009-705c0fac-nightly (#2357) 2023-05-14 19:32:27 -07:00
Ikko Eltociear Ashimine
f4bf7e3ddf fix: typo in AFFiNE-Docs.md (#2355) 2023-05-13 22:37:42 -07:00
Doma
05d88215d1 feat(electron): app menu item and hotkey for creating new page (#2267)
Co-authored-by: Peng Xiao <pengxiao@outlook.com>
2023-05-13 15:45:12 +00:00
Himself65
b240a70e51 chore: update blocksuite to 0.0.0-20230512192655-e61e272b-nightly (#2352) 2023-05-12 15:39:05 -05:00
LongYinan
00fd468e9b chore(server): remove bcrypt to avoid node-gyp usage (#2349) 2023-05-12 13:48:38 -05:00
Himself65
b5a7f8b7eb chore: bump version (#2331) 2023-05-12 13:47:14 -05:00
himself65
f03277fd17 v0.6.0-canary.1 2023-05-12 01:30:54 -05:00
himself65
ee93071149 chore: update icons 2023-05-12 01:06:05 -05:00
Himself65
21fdced2bd fix: correct router logic (#2342) 2023-05-12 00:55:45 -05:00
Peng Xiao
10b4558947 feat: new sidebar (app shell) styles (#2303) 2023-05-11 22:13:51 -05:00
Himself65
0fbed5d9d6 ci: collect test coverage on electron (#2335) 2023-05-11 20:51:13 -05:00
Himself65
8d117123d7 fix: remove useEffect on router sync with atoms (#2241) 2023-05-11 16:37:42 -05:00
Himself65
063ffda09d refactor: rename WorkspacePlugin to WorkspaceAdapter (#2330) 2023-05-11 12:43:39 -05:00
Himself65
39c83bd25b fix: delay setAom on rootWorkspacesMetadataAtom (#2271) 2023-05-11 15:03:11 +00:00
Peng Xiao
4444c3d1a6 fix: updater issue 2023-05-11 14:44:54 +08:00
LongYinan
717dd93f37 fix(electron): close db before move db file 2023-05-11 14:41:51 +08:00
LongYinan
c58673c55f chore(native): license 2023-05-11 14:41:51 +08:00
LongYinan
768e55072d ci: rust build config 2023-05-11 14:41:51 +08:00
LongYinan
8c84daec2b feat(native): NotifyEvent types 2023-05-11 14:41:51 +08:00
LongYinan
e54a5b6128 feat(native): provide FSWatcher 2023-05-11 14:41:51 +08:00
LongYinan
ee1e50f391 refactor(native): rename folder name 2023-05-11 14:41:51 +08:00
himself65
268636c440 v0.6.0-canary.0 2023-05-11 01:09:21 -05:00
Peng Xiao
06fa0cdb60 fix: should not show open folder if it is not moved (#2299) 2023-05-11 05:36:22 +00:00
Himself65
73dbb39009 feat(component): improve fallback skeleton (#2323) 2023-05-11 00:35:42 -05:00
JimmFly
47848cb5da fix: delete modal on confirm does not close (#2322) 2023-05-11 05:19:11 +00:00
JimmFly
eff6a03a51 chore: update AFFiNE Cloud prompt (#2321) 2023-05-11 00:18:12 -05:00
himself65
08f6a41ef4 ci: fix set version scripts 2023-05-10 23:00:36 -05:00
himself65
6d1345ffe5 build: replace version 2023-05-10 22:24:34 -05:00
Himself65
689f615b11 chore: bump version (#2310) 2023-05-10 21:43:14 -05:00
Himself65
f82ea5d9c4 build(electron): add internal release channel (#2309) 2023-05-10 21:42:56 -05:00
himself65
dc4979a80c fix(electron): remove unused code 2023-05-10 15:04:13 -05:00
JimmFly
1f48bc4301 refactor: tour modal (#2297) 2023-05-10 08:11:42 +00:00
himself65
beabd1e050 v0.5.4-canary.31 2023-05-10 00:56:04 -05:00
Himself65
19e20a6a20 fix(component): toast too many times when switch page mode (#2296) 2023-05-10 00:50:51 -05:00
Peng Xiao
e4f13ddae4 fix: try to fix updater not working (#2294)
Co-authored-by: Himself65 <himself65@outlook.com>
2023-05-10 00:40:22 -05:00
Himself65
752d0545ca feat: enhance root div styles (#2295) 2023-05-10 00:39:51 -05:00
himself65
08341d3d6c ci: remove master branch build 2023-05-09 23:11:46 -05:00
himself65
ef665df330 ci: add nightly-build.yml 2023-05-09 23:04:24 -05:00
Himself65
b38017cd23 feat(component): add skeleton in page detail (#2292) 2023-05-09 22:38:30 -05:00
Peng Xiao
0c550a2827 fix: theme not being persisted issue (#2283) 2023-05-09 22:04:36 -05:00
Chi Zhang
87ffdad862 docs: update README.md (#2291) 2023-05-09 21:51:44 -05:00
himself65
c6e8024e16 ci: disable fall-test in desktop-test 2023-05-09 21:13:33 -05:00
himself65
4200b3c3e5 ci: build staging and release branches 2023-05-09 20:27:07 -05:00
Himself65
10976a9257 chore: bump version (#2287) 2023-05-09 15:40:36 -05:00
52 changed files with 463 additions and 149 deletions

View File

@@ -365,11 +365,6 @@ jobs:
name: affine
fail_ci_if_error: true
- name: Run desktop tests
if: ${{ matrix.spec.test && matrix.spec.os != 'ubuntu-latest' }}
run: yarn test
working-directory: apps/electron
- name: Upload test results
if: ${{ failure() }}
uses: actions/upload-artifact@v3

View File

@@ -1,7 +1,7 @@
{
"name": "@affine/electron",
"private": true,
"version": "0.5.4-beta.1",
"version": "0.6.0-canary.5",
"author": "affine",
"repository": {
"url": "https://github.com/toeverything/AFFiNE",

View File

@@ -1,7 +1,7 @@
{
"name": "@affine/server",
"private": true,
"version": "0.5.4-beta.1",
"version": "0.6.0-canary.5",
"description": "Affine Node.js server",
"type": "module",
"bin": {

View File

@@ -1,7 +1,7 @@
{
"name": "@affine/web",
"private": true,
"version": "0.5.4-beta.1",
"version": "0.6.0-canary.5",
"scripts": {
"dev": "next dev",
"build": "next build",

View File

@@ -57,7 +57,7 @@ export const StyledButtonContent = styled('div')(() => {
export const StyledWorkspaceName = styled('span')(() => {
return {
color: '#E8178A',
fontWeight: '600',
};
});

View File

@@ -148,7 +148,7 @@ export const WorkspaceListModal = ({
{environment.isDesktop && (
<Menu
placement="auto"
trigger={['click', 'hover']}
trigger={['click']}
zIndex={1000}
content={
<StyledCreateWorkspaceCardPillContainer>

View File

@@ -62,6 +62,9 @@ export const StyledCreateWorkspaceCard = styled('div')(() => {
color: 'var(--affine-primary-color)',
},
},
'@media (max-width: 720px)': {
width: '100%',
},
};
});
export const StyledCreateWorkspaceCardPillContainer = styled('div')(() => {

View File

@@ -10,6 +10,7 @@ import { useMemo, useState } from 'react';
import { workspacePreferredModeAtom } from '../../../../atoms';
import type { FavoriteListProps } from '../index';
import EmptyItem from './empty-item';
import * as styles from './styles.css';
interface FavoriteMenuItemProps {
workspace: Workspace;
@@ -33,16 +34,13 @@ function FavoriteMenuItem({
return [...new Set(references.filter(ref => !parentIds.has(ref)))];
}, [references, parentIds]);
const [collapsed, setCollapsed] = useState(true);
const collapsible = referencesToShow.length > 0 && parentIds.size === 0;
const collapsible = referencesToShow.length > 0;
const showReferences = collapsible ? !collapsed : referencesToShow.length > 0;
const nestedItem = parentIds.size > 0;
const untitled = !metaMapping[pageId]?.title;
return (
<>
<div className={styles.favItemWrapper} data-nested={nestedItem}>
<MenuLinkItem
style={{
marginLeft: nestedItem ? '12px' : undefined,
width: nestedItem ? 'calc(100% - 12px)' : undefined,
}}
data-type="favorite-list-item"
data-testid={`favorite-list-item-${pageId}`}
active={active}
@@ -51,7 +49,9 @@ function FavoriteMenuItem({
collapsed={collapsible ? collapsed : undefined}
onCollapsedChange={setCollapsed}
>
<span>{metaMapping[pageId]?.title || 'Untitled'}</span>
<span className={styles.label} data-untitled={untitled}>
{metaMapping[pageId]?.title || 'Untitled'}
</span>
</MenuLinkItem>
{showReferences &&
referencesToShow.map(ref => {
@@ -65,7 +65,7 @@ function FavoriteMenuItem({
/>
);
})}
</>
</div>
);
}

View File

@@ -0,0 +1,21 @@
import { style } from '@vanilla-extract/css';
export const label = style({
selectors: {
'&[data-untitled="true"]': {
opacity: 0.6,
},
},
});
export const favItemWrapper = style({
display: 'flex',
flexDirection: 'column',
gap: '4px',
selectors: {
'&[data-nested="true"]': {
marginLeft: '12px',
width: 'calc(100% - 12px)',
},
},
});

View File

@@ -1,6 +1,6 @@
{
"name": "AFFiNE",
"version": "0.5.4-beta.1",
"version": "0.6.0-canary.5",
"private": true,
"author": "toeverything",
"license": "MPL-2.0",

View File

@@ -15,5 +15,5 @@
"dependencies": {
"dotenv": "^16.0.3"
},
"version": "0.5.4-beta.1"
"version": "0.6.0-canary.5"
}

View File

@@ -84,5 +84,5 @@
"wait-on": "^7.0.1",
"yjs": "^13.6.1"
},
"version": "0.5.4-beta.1"
"version": "0.6.0-canary.5"
}

View File

@@ -1,3 +1,4 @@
import { Trans } from '@affine/i18n';
import { AffineLogoSimSBlue1_1Icon, CloseIcon } from '@blocksuite/icons';
import {
@@ -18,16 +19,18 @@ export const DownloadTips = ({ onClose }: { onClose: () => void }) => {
<div className={downloadTipStyle}>
<AffineLogoSimSBlue1_1Icon className={downloadTipIconStyle} />
<div className={downloadMessageStyle}>
Enjoying the demo? &nbsp;
<a
className={linkStyle}
href="https://github.com/toeverything/AFFiNE/releases"
target="_blank"
rel="noreferrer"
>
Download the AFFiNE Client
</a>
&nbsp;for the full experience.
<Trans i18nKey="com.affine.banner.content">
Enjoying the demo?
<a
className={linkStyle}
href="https://github.com/toeverything/AFFiNE/releases"
target="_blank"
rel="noreferrer"
>
Download the AFFiNE Client
</a>
for the full experience.
</Trans>
</div>
</div>
<div

View File

@@ -12,7 +12,6 @@ interface AddPageButtonProps {
style?: React.CSSProperties;
}
// Although it is called an input, it is actually a button.
export function AddPageButton({
onClick,
className,

View File

@@ -62,11 +62,17 @@ export const closeIcon = style({
cursor: 'pointer',
transition: '0.1s',
borderRadius: '50%',
transform: 'scale(0.6)',
zIndex: 1,
opacity: 0,
selectors: {
'&:hover': {
transform: 'scale(1.1)',
},
[`${root}:hover &`]: {
opacity: 1,
transform: 'scale(1)',
},
},
});

View File

@@ -14,6 +14,7 @@ export const navWrapperStyle = style({
minWidth: navWidthVar,
height: '100%',
zIndex: 2,
paddingBottom: '8px',
backgroundColor: 'transparent',
'@media': {
[`(max-width: ${floatingMaxWidth}px)`]: {

View File

@@ -69,6 +69,7 @@ export const iconsContainer = style({
alignItems: 'center',
justifyContent: 'flex-start',
width: '28px',
flexShrink: 0,
selectors: {
'&[data-collapsible="true"]': {
width: '40px',

View File

@@ -39,28 +39,29 @@ export function MenuItem({
data-disabled={disabled}
data-collapsible={collapsible}
>
<div className={styles.iconsContainer} data-collapsible={collapsible}>
{collapsible && (
<div
onClick={e => {
e.stopPropagation();
e.preventDefault(); // for links
onCollapsedChange?.(!collapsed);
}}
data-testid="fav-collapsed-button"
className={styles.collapsedIconContainer}
>
<ArrowDownSmallIcon
className={styles.collapsedIcon}
data-collapsed={collapsed}
/>
</div>
)}
{icon &&
React.cloneElement(icon, {
{icon && (
<div className={styles.iconsContainer} data-collapsible={collapsible}>
{collapsible && (
<div
onClick={e => {
e.stopPropagation();
e.preventDefault(); // for links
onCollapsedChange?.(!collapsed);
}}
data-testid="fav-collapsed-button"
className={styles.collapsedIconContainer}
>
<ArrowDownSmallIcon
className={styles.collapsedIcon}
data-collapsed={collapsed}
/>
</div>
)}
{React.cloneElement(icon, {
className: clsx([styles.icon, icon.props.className]),
})}
</div>
</div>
)}
<div className={styles.content}>{children}</div>
</div>

View File

@@ -1,7 +1,7 @@
import { globalStyle, style } from '@vanilla-extract/css';
export const baseContainer = style({
padding: '12px 16px',
padding: '4px 16px',
display: 'flex',
flexFlow: 'column nowrap',
rowGap: '4px',
@@ -13,17 +13,27 @@ export const scrollableContainerRoot = style({
vars: {
'--scrollbar-width': '10px',
},
transition: 'all .3s .2s',
borderTop: '1px solid transparent',
});
export const scrollTopBorder = style({
position: 'absolute',
top: 0,
left: '16px',
right: '16px',
height: '1px',
transition: 'opacity .3s .2s',
opacity: 0,
background: 'var(--affine-black-10)',
selectors: {
'&[data-has-scroll-top="true"]': {
boxShadow: 'inset 0 8px 8px -8px var(--affine-black-10)',
opacity: 1,
},
},
});
export const scrollableViewport = style({
height: '100%',
marginTop: '4px',
});
globalStyle(`${scrollableViewport} > div`, {

View File

@@ -39,10 +39,11 @@ function useHasScrollTop() {
export function SidebarScrollableContainer({ children }: PropsWithChildren) {
const [hasScrollTop, ref] = useHasScrollTop();
return (
<ScrollArea.Root
data-has-scroll-top={hasScrollTop}
className={styles.scrollableContainerRoot}
>
<ScrollArea.Root className={styles.scrollableContainerRoot}>
<div
data-has-scroll-top={hasScrollTop}
className={styles.scrollTopBorder}
/>
<ScrollArea.Viewport
className={clsx([styles.scrollableViewport])}
ref={ref}

View File

@@ -16,7 +16,7 @@ export const spotlight = style({
background: `radial-gradient(${spotlightSize} circle at ${spotlightX} ${spotlightY}, var(--affine-text-primary-color), transparent)`,
inset: '0px',
pointerEvents: 'none',
willChange: 'background',
willChange: 'background, opacity',
opacity: spotlightOpacity,
zIndex: 1,
transition: 'all 0.2s',

View File

@@ -0,0 +1,30 @@
import type { Meta, StoryFn } from '@storybook/react';
import { type PropsWithChildren } from 'react';
import { Spotlight } from '.';
export default {
title: 'Components/AppSidebar/Spotlight',
component: Spotlight,
} satisfies Meta;
const Container = ({ children }: PropsWithChildren) => (
<main
style={{
position: 'relative',
width: '320px',
height: '320px',
border: '1px solid #ccc',
}}
>
{children}
</main>
);
export const Default: StoryFn = () => {
return (
<Container>
<Spotlight />
</Container>
);
};

View File

@@ -12,10 +12,10 @@ function useMouseOffset() {
useEffect(() => {
if (ref.current && ref.current.parentElement) {
const el = ref.current.parentElement;
const bound = el.getBoundingClientRect();
// debounce?
const onMouseMove = (e: MouseEvent) => {
const bound = el.getBoundingClientRect();
setOffset({ x: e.clientX - bound.x, y: e.clientY - bound.y });
setOutside(false);
};

View File

@@ -0,0 +1,25 @@
import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';
import * as styles from './styles.css';
export const BlockCard = forwardRef<
HTMLDivElement,
{
left?: ReactNode;
title: string;
desc?: string;
right?: ReactNode;
} & HTMLAttributes<HTMLDivElement>
>(({ left, title, desc, right, ...props }, ref) => {
return (
<div ref={ref} className={styles.blockCard} {...props}>
{left && <div className={styles.blockCardAround}>{left}</div>}
<div className={styles.blockCardContent}>
<div>{title}</div>
<div className={styles.blockCardDesc}>{desc}</div>
</div>
{right && <div className={styles.blockCardAround}>{right}</div>}
</div>
);
});
BlockCard.displayName = 'BlockCard';

View File

@@ -0,0 +1,35 @@
import { style } from '@vanilla-extract/css';
export const blockCard = style({
display: 'flex',
gap: '12px',
padding: '8px 12px',
color: 'var(--affine-text-primary-color)',
backgroundColor: 'var(--affine-background-primary-color)',
borderRadius: '4px',
userSelect: 'none',
cursor: 'pointer',
selectors: {
'&:hover': {
boxShadow: 'var(--affine-shadow-1)',
},
// TODO active styles
},
});
export const blockCardAround = style({
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
});
export const blockCardContent = style({
display: 'flex',
flexDirection: 'column',
flex: 1,
});
export const blockCardDesc = style({
color: 'var(--affine-text-secondary-color)',
fontSize: 'var(--affine-font-xs)',
});

View File

@@ -10,7 +10,7 @@ import { useBlockSuiteWorkspaceName } from '@toeverything/hooks/use-block-suite-
import type { FC } from 'react';
import { useCallback } from 'react';
import { WorkspaceAvatar } from '../workspace-avatar';
import { WorkspaceAvatar } from '../../workspace-avatar';
import {
StyledCard,
StyledSettingLink,

View File

@@ -1,5 +1,5 @@
import { displayFlex, styled, textEllipsis } from '../..';
import { IconButton } from '../..';
import { displayFlex, styled, textEllipsis } from '../../../styles';
import { IconButton } from '../../../ui/button/icon-button';
export const StyleWorkspaceInfo = styled('div')(() => {
return {

View File

@@ -9,7 +9,7 @@ import type { FC } from 'react';
import { useRef } from 'react';
import { useCallback, useState } from 'react';
import { Menu } from '../..';
import { Menu } from '../../ui/menu/menu';
import { Export } from './export';
import { containerStyle, indicatorContainerStyle, tabStyle } from './index.css';
import { SharePage } from './share-page';

View File

@@ -12,7 +12,7 @@ import {
import { SortableContext, useSortable } from '@dnd-kit/sortable';
import type { FC } from 'react';
import { WorkspaceCard } from '../workspace-card';
import { WorkspaceCard } from '../../components/card/workspace-card';
import { workspaceItemStyle } from './index.css';
export type WorkspaceListProps = {

View File

@@ -2,8 +2,11 @@
import type { Meta, StoryFn } from '@storybook/react';
import { useState } from 'react';
import { Button } from '..';
import { Button } from '../ui/button/button';
import { DropdownButton } from '../ui/button/dropdown';
import type { ButtonProps } from '../ui/button/interface';
import { Menu } from '../ui/menu/menu';
import { toast } from '../ui/toast/toast';
export default {
title: 'AFFiNE/Button',
@@ -20,30 +23,72 @@ export const Primary = Template.bind(undefined);
Primary.args = {
type: 'primary',
children: 'This is a primary button',
onClick: () => toast('Click button'),
};
export const Default = Template.bind(undefined);
Default.args = {
type: 'default',
children: 'This is a default button',
onClick: () => toast('Click button'),
};
export const Light = Template.bind(undefined);
Light.args = {
type: 'light',
children: 'This is a light button',
onClick: () => toast('Click button'),
};
export const Warning = Template.bind(undefined);
Warning.args = {
type: 'warning',
children: 'This is a warning button',
onClick: () => toast('Click button'),
};
export const Danger = Template.bind(undefined);
Danger.args = {
type: 'danger',
children: 'This is a danger button',
onClick: () => toast('Click button'),
};
export const Dropdown: StoryFn = ({ onClickDropDown, ...props }) => {
const [open, setOpen] = useState(false);
return (
<>
<DropdownButton onClickDropDown={onClickDropDown} {...props}>
Dropdown Button
</DropdownButton>
<Menu
visible={open}
placement="bottom-end"
trigger={['click']}
width={235}
disablePortal={true}
onClickAway={() => {
setOpen(false);
}}
content={<>Dropdown Menu</>}
>
<DropdownButton
onClick={() => {
toast('Click button');
setOpen(false);
}}
onClickDropDown={() => setOpen(!open)}
>
Dropdown with Menu
</DropdownButton>
</Menu>
</>
);
};
Dropdown.args = {
onClick: () => toast('Click button'),
onClickDropDown: () => toast('Click dropdown'),
};
export const Test: StoryFn<ButtonProps> = () => {

View File

@@ -0,0 +1,55 @@
import { BlockCard } from '@affine/component/card/block-card';
import { WorkspaceFlavour } from '@affine/workspace/type';
import { EdgelessIcon, PageIcon } from '@blocksuite/icons';
import { Workspace } from '@blocksuite/store';
import { WorkspaceCard } from '../components/card/workspace-card';
import { toast } from '../ui/toast';
export default {
title: 'AFFiNE/Card',
component: WorkspaceCard,
};
const blockSuiteWorkspace = new Workspace({
id: 'blocksuite-local',
});
blockSuiteWorkspace.meta.setName('Hello World');
export const AffineWorkspaceCard = () => {
return (
<WorkspaceCard
workspace={{
flavour: WorkspaceFlavour.LOCAL,
id: 'local',
blockSuiteWorkspace,
providers: [],
}}
onClick={() => {}}
onSettingClick={() => {}}
currentWorkspaceId={null}
/>
);
};
export const AffineBlockCard = () => {
return (
<div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>
<BlockCard title={'New Page'} onClick={() => toast('clicked')} />
<BlockCard
title={'New Page'}
desc={'Write with a blank page'}
right={<PageIcon width={20} height={20} />}
onClick={() => toast('clicked page')}
/>
<BlockCard
title={'New Edgeless'}
desc={'Draw with a blank whiteboard'}
left={<PageIcon width={20} height={20} />}
right={<EdgelessIcon width={20} height={20} />}
onClick={() => toast('clicked edgeless')}
/>
</div>
);
};

View File

@@ -1,31 +0,0 @@
import { WorkspaceFlavour } from '@affine/workspace/type';
import { Workspace } from '@blocksuite/store';
import { WorkspaceCard } from '../components/workspace-card';
export default {
title: 'AFFiNE/WorkspaceCard',
component: WorkspaceCard,
};
const blockSuiteWorkspace = new Workspace({
id: 'blocksuite-local',
});
blockSuiteWorkspace.meta.setName('Hello World');
export const Basic = () => {
return (
<WorkspaceCard
workspace={{
flavour: WorkspaceFlavour.LOCAL,
id: 'local',
blockSuiteWorkspace,
providers: [],
}}
onClick={() => {}}
onSettingClick={() => {}}
currentWorkspaceId={null}
/>
);
};

View File

@@ -0,0 +1,35 @@
import { ArrowDownSmallIcon } from '@blocksuite/icons';
import {
type ButtonHTMLAttributes,
forwardRef,
type MouseEventHandler,
} from 'react';
import * as styles from './styles.css';
type DropdownButtonProps = {
onClickDropDown?: MouseEventHandler<SVGSVGElement>;
} & ButtonHTMLAttributes<HTMLButtonElement>;
export const DropdownButton = forwardRef<
HTMLButtonElement,
DropdownButtonProps
>(({ onClickDropDown, children, ...props }, ref) => {
const handleClickDropDown: MouseEventHandler<SVGSVGElement> = e => {
e.stopPropagation();
onClickDropDown?.(e);
};
return (
<button ref={ref} className={styles.dropdownBtn} {...props}>
<span>{children}</span>
<span className={styles.divider} />
<ArrowDownSmallIcon
className={styles.icon}
width={16}
height={16}
onClick={handleClickDropDown}
/>
</button>
);
});
DropdownButton.displayName = 'SimpleDropdownButton';

View File

@@ -0,0 +1,40 @@
import { style } from '@vanilla-extract/css';
export const dropdownBtn = style({
display: 'inline-flex',
alignItems: 'center',
justifyContent: 'center',
padding: '0 10px',
gap: '4px',
color: 'var(--affine-text-primary-color)',
fontWeight: 600,
background: 'var(--affine-button-gray-color)',
boxShadow: 'var(--affine-float-button-shadow)',
borderRadius: '8px',
fontSize: 'var(--affine-font-sm)',
// width: '100%',
height: '32px',
userSelect: 'none',
whiteSpace: 'nowrap',
cursor: 'pointer',
selectors: {
'&:hover': {
background: 'var(--affine-hover-color)',
},
},
});
export const divider = style({
width: '0.5px',
height: '16px',
background: 'var(--affine-border-color)',
});
export const icon = style({
borderRadius: '4px',
selectors: {
'&:hover': {
background: 'var(--affine-hover-color)',
},
},
});

View File

@@ -9,5 +9,5 @@
"devDependencies": {
"@types/debug": "^4.1.7"
},
"version": "0.5.4-beta.1"
"version": "0.6.0-canary.5"
}

View File

@@ -22,5 +22,5 @@
"dependencies": {
"lit": "^2.7.4"
},
"version": "0.5.4-beta.1"
"version": "0.6.0-canary.5"
}

View File

@@ -1,6 +1,6 @@
{
"name": "@affine/graphql",
"version": "0.5.4-beta.1",
"version": "0.6.0-canary.5",
"description": "Autogenerated GraphQL client for affine.pro",
"license": "MPL-2.0",
"type": "module",

View File

@@ -4,5 +4,5 @@
"./*": "./src/*"
},
"private": true,
"version": "0.5.4-beta.1"
"version": "0.6.0-canary.5"
}

View File

@@ -40,5 +40,5 @@
"ts-node": "^10.9.1",
"typescript": "^5.0.4"
},
"version": "0.5.4-beta.1"
"version": "0.6.0-canary.5"
}

View File

@@ -1,10 +1,10 @@
{
"// THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.": "",
"Delete Workspace Description": "Workspace (<1>{{workspace}}</1>) wird gelöscht und der Inhalt wird verloren sein. Dies kann nicht rückgängig gemacht werden.",
"Delete Workspace Description": "Workspace <1>{{workspace}}</1> wird gelöscht und der Inhalt wird verloren sein. Dies kann nicht rückgängig gemacht werden.",
"Copied link to clipboard": "Link in die Zwischenablage kopiert",
"Local Workspace Description": "Alle Daten sind auf dem aktuellen Gerät gespeichert. Du kannst AFFiNE Cloud für diesen Workspace aktivieren, um deine Daten mit der Cloud zu synchronisieren.",
"Download all data": "Alle Daten herunterladen",
"It takes up little space on your device": "Es verbraucht nur wenig Speicherplatz auf deinem Gerät.",
"It takes up little space on your device": "Es nimmt nur wenig Platz auf deinem Gerät ein.",
"Help and Feedback": "Hilfe und Feedback",
"Not now": "Vielleicht später",
"Please make sure you are online": "Bitte stelle sicher, dass du online bist",
@@ -71,7 +71,7 @@
"Create Or Import": "Erstellen oder importieren",
"Delete Workspace": "Workspace löschen",
"General": "Generelles",
"Delete Workspace Description2": "Das Löschen von (<1>{{workspace}}</1>) wird sowohl lokale als auch Daten in der Cloud löschen. Dies kann nicht rückgängig gemacht werden.",
"Delete Workspace Description2": "Das Löschen von <1>{{workspace}}</1> wird sowohl lokale als auch Daten in der Cloud löschen. Dies kann nicht rückgängig gemacht werden.",
"Edgeless": "Edgeless",
"Divider": "Trenner",
"Enable": "Aktivieren",
@@ -190,13 +190,10 @@
"Data sync mode": "Daten-Sync Modus",
"Download core data": "Core Daten herunterladen",
"Check Our Docs": "Sieh dir unsere Dokumentation an",
"Get in touch! Join our communities": "Bleib mit uns in Kontakt und trete unseren Communitys bei!",
"Get in touch! Join our communities": "Nimm teil! Treten Sie unseren Communities bei.",
"Move to Trash": "In Papierkorb verschieben",
"Placeholder of delete workspace": "Bitte zur Bestätigung den Workspace-Namen eingeben",
"Access level": "Zugriffsberechtigung",
"Loading Page": "Lade Seite",
"Loading All Workspaces": "Lade alle Workspaces",
"Discover what's new!": "Erfahre was neu ist!",
"Move to": "Verschieben zu",
"Disable": "Deaktivieren",
"Open Workspace Settings": "Workspace Einstellungen öffnen",
@@ -204,21 +201,18 @@
"Workspace Not Found": "Workspace nicht gefunden",
"Rename": "Umbenennen",
"Page is Loading": "Seite lädt",
"Discover what's new!": "Erfahre was neu ist!",
"Loading All Workspaces": "Lade alle Workspaces",
"Loading Page": "Lade Seite",
"Create Shared Link Description": "Erstelle einen Link, den du leicht mit jedem teilen kannst.",
"Back to Quick Search": "Zurück zur Schnellsuche",
"Disable Public Link": "Öffentlichen Link deaktivieren",
"Disable Public Link ?": "Öffentlichen Link deaktivieren ?",
"Export Shared Pages Description": "Laden eine statische Kopie dieser Seite herunter, um sie mit anderen zu teilen.",
"Favorite pages for easy access": "Favoriten-Seiten für schnellen Zugriff",
"Move page to": "Seite verschieben nach...",
"Navigation Path": "Navigationspfad",
"Pivots": "Pivots",
"RFP": "Seiten können frei zu Pivots hinzugefügt/entfernt werden und bleiben über \"Alle Seiten\" zugänglich.",
"Remove from Pivots": "Von Pivots entfernen",
"Router is Loading": "Router lädt",
"Share Menu Public Workspace Description1": "Laden andere ein, dem Workspace beizutreten oder veröffentliche ihn im Internet.",
"Share Menu Public Workspace Description2": "Der aktuelle Workspace wurde im Internet als öffentlicher Workspace veröffentlicht.",
"View Navigation Path": "Navigationspfad ansehen",
"Add a subpage inside": "Unterseite hinzufügen",
"Disable Public Link Description": "Wenn du diesen öffentlichen Link deaktivierst, können andere Personen mit diesem Link nicht mehr auf diese Seite zugreifen.",
"Disable Public Sharing": "Öffentliche Freigabe deaktivieren",
@@ -228,8 +222,58 @@
"Shared Pages Description": "Die öffentliche Freigabe der Seite erfordert den AFFiNE-Cloud-Dienst.",
"Shared Pages In Public Workspace Description": "Der gesamte Workspace wird im Web veröffentlicht und kann über <1>Workspace Einstellungen</1> bearbeitet werden.",
"emptySharedPages": "Freigegebene Seiten werden hier angezeigt.",
"Recent": "Neueste",
"Synced with AFFiNE Cloud": "Synchronisiert mit AFFiNE Cloud",
"Successfully deleted": "Erfolgreich gelöscht",
"You cannot delete the last workspace": "Du kannst den letzten Workspace nicht löschen"
"You cannot delete the last workspace": "Du kannst den letzten Workspace nicht löschen",
"Move page to": "Seite verschieben nach...",
"Navigation Path": "Navigationspfad",
"Recent": "Neueste",
"Export Shared Pages Description": "Laden eine statische Kopie dieser Seite herunter, um sie mit anderen zu teilen.",
"Share Menu Public Workspace Description1": "Laden andere ein, dem Workspace beizutreten oder veröffentliche ihn im Internet.",
"Share Menu Public Workspace Description2": "Der aktuelle Workspace wurde im Internet als öffentlicher Workspace veröffentlicht.",
"View Navigation Path": "Navigationspfad ansehen",
"Delete Workspace Label Hint": "Wenn dieser Workspace gelöscht wird, wird sein gesamter Inhalt für alle Benutzer dauerhaft gelöscht. Niemand wird in der Lage sein, den Inhalt dieses Workspaces wiederherzustellen.",
"Added Successfully": "Erfolgreich hinzugefügt",
"Continue": "Fortfahren",
"Create your own workspace": "Eigenen Workspace erstellen",
"Created Successfully": "Erfolgreich erstellt",
"Customize": "Anpassen",
"FILE_ALREADY_EXISTS": "Datei existiert bereits",
"Move folder": "Ordner verschieben",
"Move folder hint": "Neuen Speicherort auswählen.",
"Add Workspace Hint": "Auswählen, was du schon hast",
"Change avatar hint": "Avatar von allen Mitgliedern ändern.",
"Change workspace name hint": "Name von allen Mitgliedern ändern.",
"DB_FILE_ALREADY_LOADED": "Datenbankdatei bereits geladen",
"DB_FILE_INVALID": "Ungültige Datenbankdatei",
"DB_FILE_PATH_INVALID": "Pfad der Datenbankdatei ungültig",
"Default Location": "Standard-Speicherort",
"Default db location hint": "Standardmäßig wird unter {{location}} gespeichert.",
"Move folder success": "Ordnerverschiebung erfolgreich",
"Open folder": "Ordner öffnen",
"Save": "Speichern",
"Set database location": "Datenbankstandort festlegen",
"UNKNOWN_ERROR": "Unbekannter Fehler",
"Open folder hint": "Prüfe, wo sich der Speicherordner befindet.",
"Storage Folder": "Speicherordner",
"Storage Folder Hint": "Speicherort überprüfen oder ändern.",
"Sync across devices with AFFiNE Cloud": "Geräteübergreifende Synchronisierung mit AFFiNE Cloud",
"Name Your Workspace": "Workspace benennen",
"Update Available": "Update verfügbar",
"com.affine.edgelessMode": "Edgeless-Modus",
"com.affine.onboarding.title2": "Intuitive und robuste, blockbasierte Bearbeitung",
"com.affine.onboarding.videoDescription1": "Wechsle mühelos zwischen dem Seitenmodus für die strukturierte Dokumentenerstellung und dem Whiteboard-Modus für den Ausdruck kreativer Ideen in freier Form.",
"com.affine.onboarding.videoDescription2": "Verwende eine modulare Schnittstelle, um strukturierte Dokumente zu erstellen, indem du Textblöcke, Bilder und andere Inhalte einfach per Drag-and-drop anordnen kannst.",
"com.affine.onboarding.title1": "Hyperfusion von Whiteboard und Dokumenten",
"com.affine.pageMode": "Seitenmodus",
"Update workspace name success": "Update vom Workspace-Namen erfolgreich",
"Use on current device only": "Nur auf dem aktuellen Gerät verwenden",
"Workspace database storage description": "Wähle den Ort, an dem du deinen Workspace erstellen möchten. Die Daten vom Workspace werden standardmäßig lokal gespeichert.",
"dark": "dunkel",
"system": "system",
"Restart Install Client Update": "Neustart zum Installieren des Updates",
"Add Workspace": "Workspace hinzufügen",
"Export success": "Export erfolgreich",
"light": "hell",
"others": "Andere"
}

View File

@@ -18,7 +18,6 @@
"No item": "No item",
"Import": "Import",
"Trash": "Trash",
"others": "Others",
"New Page": "New Page",
"New Keyword Page": "New '{{query}}' page",
"Find 0 result": "Find 0 result",
@@ -118,7 +117,7 @@
"login success": "Login success",
"Create Or Import": "Create or Import",
"Delete Workspace": "Delete Workspace",
"Delete Workspace Description2": "Deleting (<1>{{workspace}}</1>) will delete both local and cloud data, this operation cannot be undone, please proceed with caution.",
"Delete Workspace Description2": "Deleting <1>{{workspace}}</1> will delete both local and cloud data, this operation cannot be undone, please proceed with caution.",
"Delete Workspace placeholder": "Please type “Delete” to confirm",
"Leave Workspace": "Leave Workspace",
"Leave": "Leave",
@@ -149,7 +148,7 @@
"Leave Workspace Description": "After you leave, you will no longer be able to access the contents of this workspace.",
"Sync Description": "{{workspaceName}} is a Local Workspace. All data is stored on the current device. You can enable AFFiNE Cloud for this workspace to keep data in sync with the cloud.",
"Sync Description2": "<1>{{workspaceName}}</1> is a Cloud Workspace. All data will be synchronised and saved to AFFiNE Cloud.",
"Delete Workspace Description": "Deleting (<1>{{workspace}}</1>) cannot be undone, please proceed with caution. All contents will be lost.",
"Delete Workspace Description": "Deleting <1>{{workspace}}</1> cannot be undone, please proceed with caution. All contents will be lost.",
"Sign in": "Sign in AFFiNE Cloud",
"core": "core",
"all": "all",
@@ -258,16 +257,12 @@
"Move folder hint": "Select a new storage location.",
"Storage Folder": "Storage Folder",
"DB_FILE_INVALID": "Invalid Database file",
"FILE_ALREADY_EXISTS": "File already exists",
"Name Your Workspace": "Name Your Workspace",
"Change avatar hint": "New avatar will be shown for everyone.",
"Change workspace name hint": "New name will be shown for everyone.",
"Delete Workspace Label Hint": "After deleting this Workspace, you will permanently delete all of its content for everyone. No one will be able to recover the content of this Workspace.",
"DB_FILE_PATH_INVALID": "Database file path invalid",
"Default db location hint": "By default will be saved to {{location}}",
"light": "light",
"dark": "dark",
"system": "system",
"com.affine.pageMode": "Page Mode",
"com.affine.edgelessMode": "Edgeless Mode",
"com.affine.onboarding.title1": "Hyper merged whiteboard and docs",

View File

@@ -119,7 +119,7 @@
"Users": "Utilisateur",
"Quick search placeholder": "Recherche Rapide...",
"Access level": "Permissions",
"Delete Workspace Description2": "La suppression de (<1>{{workspace}}</1>) aura pour effet de supprimer les données locales et les données dans le cloud. Attention, cette opération est irréversible.",
"Delete Workspace Description2": "La suppression de <1>{{workspace}}</1> aura pour effet de supprimer les données locales et les données dans le cloud. Attention, cette opération est irréversible.",
"Enable AFFiNE Cloud": "Activer AFFiNE Cloud",
"Enable AFFiNE Cloud Description": "Si cette option est activée, les données de cet espace de travail seront sauvegardées et synchronisées via AFFiNE Cloud.",
"Export Workspace": "L'exportation de l'espace de travail <1>{{workspace}}</1> sera bientôt disponible.",
@@ -171,7 +171,7 @@
"All changes are saved locally": "Les changements sont sauvegardés localement",
"Continue with Google": "Se connecter avec Google ",
"Delete": "Supprimer objet ",
"Delete Workspace Description": "Attention, la suppression de (<1>{{workspace}}</1>) est irréversible. Le contenu sera perdu.",
"Delete Workspace Description": "Attention, la suppression de <1>{{workspace}}</1> est irréversible. Le contenu sera perdu.",
"Share with link": "Partager un lien",
"Sync Description": "{{workspaceName}} est un espace de travail local. Toutes ses données sont stockées sur le périphérique actuel. Vous pouvez activer AFFiNE Cloud pour garder les données de cet espace de travail synchronisé dans le cloud.",
"TrashButtonGroupDescription": "Une fois supprimé, vous ne pouvez pas retourner en arrière. Confirmez-vous la suppression ? ",

View File

@@ -278,8 +278,8 @@
"Wait for Sync": "同期を待つ",
"Strikethrough": "打ち消し線",
"Cloud Workspace Description": "すべてのデータは、AFFiNEアカウント<1>{{email}}</1>に同期して保存されます",
"Delete Workspace Description": "削除 (<1>{{workspace}}</1>) は元に戻すことができません。慎重に続行してください。すべての内容が失われます",
"Delete Workspace Description2": "(<1>{{workspace}}</1>)を削除すると、ローカルデータとクラウドデータの両方が削除されます。この操作は元に戻すことができません。注意して続行してください",
"Delete Workspace Description": "削除 <1>{{workspace}}</1> は元に戻すことができません。慎重に続行してください。すべての内容が失われます",
"Delete Workspace Description2": "<1>{{workspace}}</1>を削除すると、ローカルデータとクラウドデータの両方が削除されます。この操作は元に戻すことができません。注意して続行してください",
"Export Workspace": "ワークスペースのエクスポート <1>{{workspace}}</1>は近日公開予定です",
"Sync Description": "{{workspaceName}}はローカルワークスペースです。すべてのデータは現在のデバイスに保存されます。このワークスペースに対してAFFiNEクラウドを有効にして、データをクラウドと同期させることができます",
"Sync Description2": "<1>{{workspaceName}}</1>はクラウドワークスペースです。すべてのデータは同期され、AFFiNEクラウドに保存されます",

View File

@@ -118,8 +118,8 @@
"emptyAllPages": "Это рабочее пространство пусто. Создайте новую страницу, чтобы начать редактирование.",
"Export Workspace": "Экспорт рабочего пространства <1>{{workspace}}</1> скоро будет доступен",
"Delete Workspace placeholder": "Пожалуйста, введите \"Delete\" для подтверждения",
"Delete Workspace Description": "Удаление (<1>{{workspace}}</1>) нельзя отменить, пожалуйста, действуйте с осторожностью. Все содержимое будет потеряно.",
"Delete Workspace Description2": "Удаление (<1>{{workspace}}</1>) приведет к удалению как локальных, так и облачных данных, эта операция не может быть отменена, пожалуйста действуйте с осторожностью.",
"Delete Workspace Description": "Удаление <1>{{workspace}}</1> нельзя отменить, пожалуйста, действуйте с осторожностью. Все содержимое будет потеряно.",
"Delete Workspace Description2": "Удаление <1>{{workspace}}</1> приведет к удалению как локальных, так и облачных данных, эта операция не может быть отменена, пожалуйста действуйте с осторожностью.",
"Once deleted, you can't undo this action": "После удаления вы не сможете отменить это действие.",
"Permanently deleted": "Удалено навсегда",
"New Keyword Page": "Новая '{{query}}' страница",

View File

@@ -12,13 +12,13 @@
"Retain cached cloud data": "保留缓存的云数据",
"Workspace Owner": "工作区所有者",
"Cloud Workspace": "云端工作区",
"Cloud Workspace Description": "所有数据将被同步并保存在AFFiNE账户(<1>{{email}}</1>)中",
"Copied link to clipboard": "复制链接到剪贴板",
"Available Offline": "可供离线使用",
"Back Home": "返回首页",
"Enabled success": "启用成功",
"Published Description": "当前工作区已被发布到Web所有人都可以通过链接来查看此工作区内容。",
"All data has been stored in the cloud": "所有数据已被保存在云端。",
"Cloud Workspace Description": "所有数据将被同步并保存在 AFFiNE 账户(<1>{{email}}</1>)中",
"Published Description": "当前工作区已被发布到 Web所有人都可以通过链接来查看此工作区内容。",
"Download data": "下载 {{CoreOrAll}} 数据",
"Force Sign Out": "强制登出",
"Joined Workspace": "加入工作区",
@@ -73,18 +73,15 @@
"Access level": "访问权限",
"Added to Favorites": "已收藏",
"Collaboration": "协作",
"Collaboration Description": "与其他成员协作需要AFFiNE云服务支持。",
"Continue with Google": "谷歌登录以继续",
"Delete page?": "确定要删除页面?",
"Delete permanently": "永久删除",
"Delete permanently?": "是否永久删除?",
"Edgeless": "无界",
"Enable AFFiNE Cloud": "启用 AFFiNE 云服务",
"Enable AFFiNE Cloud Description": "如启用此工作区中的数据将通过AFFiNE Cloud进行备份和同步。",
"Favorites": "收藏夹",
"Get in touch!": "保持联络!",
"Got it": "知道了",
"How is AFFiNE Alpha different?": "AFFiNE Alpha有何不同",
"Invite": "邀请",
"Invite Members": "邀请成员",
"Invite placeholder": "搜索邮件仅支持Gmail",
@@ -94,19 +91,23 @@
"Leave Workspace": "退出工作区",
"Leave Workspace Description": "退出后,您将无法再访问此工作区的内容。",
"Link": "超链接(选定文本)",
"Collaboration Description": "与其他成员协作需要 AFFiNE 云服务支持。",
"Moved to Trash": "已移到垃圾箱",
"My Workspaces": "我的工作区",
"Enable AFFiNE Cloud Description": "如启用,此工作区中的数据将通过 AFFiNE Cloud 进行备份和同步。",
"How is AFFiNE Alpha different?": "AFFiNE Alpha 有何不同?",
"Non-Gmail": "不支持非 Gmail 邮箱",
"Publishing": "发布到 web 需要 AFFiNE 云服务。",
"New Page": "新建页面",
"New Workspace": "新建工作区",
"No item": "无项目",
"Non-Gmail": "不支持非Gmail邮箱",
"NotLoggedIn": "当前未登录",
"Official Website": "官网",
"Once deleted, you can't undo this action": "一旦删除,您将无法撤销此操作。",
"Ooops!": "啊哦!",
"Publishing Description": "发布到 web 后,所有人都可以通过链接查看此工作区的内容。",
"Created": "创建时间",
"Delete Workspace Description": "正在删除 (<1>{{workspace}}</1>) ,此操作无法撤销,所有内容将会丢失。",
"Delete Workspace Description": "正在删除 <1>{{workspace}}</1> ,此操作无法撤销,所有内容将会丢失。",
"Export Workspace": "导出工作区 <1>{{workspace}}</1> 即将上线",
"Find 0 result": "找到 0 个结果",
"Find results": "找到 {{number}} 个结果",
@@ -116,7 +117,6 @@
"Pending": "待定",
"Permanently deleted": "已永久删除",
"Publish": "发布",
"Publishing": "发布到web需要AFFiNE云服务。",
"Publish to web": "发布到web",
"Quick search": "快速搜索",
"Quick search placeholder": "快速搜索...",
@@ -169,8 +169,8 @@
"Restore it": "恢复TA",
"all": "全部",
"core": "核心",
"Sync Description": "{{workspaceName}}是本地工作区所有数据都存储在当前设备上。您可以为此工作区启用AFFiNE Cloud以使数据与云端保持同步。",
"Delete Workspace Description2": "正在删除(<1>{{workspace}}</1>),将同时删除本地和云端数据。此操作无法撤消,请谨慎操作。",
"Delete Workspace Description2": "正在删除 <1>{{workspace}}</1> ,将同时删除本地和云端数据。此操作无法撤消,请谨慎操作。",
"Sync Description": "{{workspaceName}}是本地工作区,所有数据都存储在当前设备上。您可以为此工作区启用 AFFiNE Cloud以使数据与云端保持同步。",
"Failed to publish workspace": "工作区发布失败",
"Member": "成员",
"Member has been removed": "{{name}} 已被移除。",

View File

@@ -22,5 +22,5 @@
"@blocksuite/store": "*",
"lottie-web": "*"
},
"version": "0.5.4-beta.1"
"version": "0.6.0-canary.5"
}

View File

@@ -35,5 +35,5 @@
"test": "cross-env TS_NODE_TRANSPILE_ONLY=1 TS_NODE_PROJECT=./tsconfig.json node --test --loader ts-node/esm --experimental-specifier-resolution=node ./__tests__/**/*.mts",
"version": "napi version"
},
"version": "0.5.4-beta.1"
"version": "0.6.0-canary.5"
}

View File

@@ -5,5 +5,5 @@
"exports": {
"./*.md": "./src/*.md"
},
"version": "0.5.4-beta.1"
"version": "0.6.0-canary.5"
}

View File

@@ -40,5 +40,5 @@
"next": "^13.4.2",
"ws": "^8.13.0"
},
"version": "0.5.4-beta.1"
"version": "0.6.0-canary.5"
}

View File

@@ -1,7 +1,7 @@
{
"name": "@toeverything/y-indexeddb",
"type": "module",
"version": "0.5.4-beta.1",
"version": "0.6.0-canary.5",
"scripts": {
"build": "vite build"
},

View File

@@ -3,5 +3,5 @@
"exports": {
"./*": "./*"
},
"version": "0.5.4-beta.1"
"version": "0.6.0-canary.5"
}

View File

@@ -1,7 +1,7 @@
{
"name": "@affine-test/kit",
"private": true,
"version": "0.5.4-beta.1",
"version": "0.6.0-canary.5",
"exports": {
"./playwright": "./playwright.ts"
},