diff --git a/README.md b/README.md
index 9e2ebc85ff..b9fdf16e0b 100644
--- a/README.md
+++ b/README.md
@@ -12,17 +12,8 @@ Planning, Sorting and Creating all Together. Open-source, Privacy-First, and Fre
-
-
-
-[all-contributors-badge]: https://img.shields.io/badge/all_contributors-23-orange.svg?style=flat-square
-
-
-
-[![All Contributors][all-contributors-badge]](#contributors)
+[](https://github.com/toeverything/AFFiNE)
+[](https://github.com/toeverything/AFFiNE/graphs/contributors)
[](https://www.typescriptlang.org/)
[](https://www.typescriptlang.org/)
[](https://reactjs.org/)
@@ -45,8 +36,23 @@ See https://github.com/all-?/all-contributors/issues/361#issuecomment-637166066

# How to use
+
+🥳🥳🥳 Our web live demo is ready! 🥳🥳🥳
+
-If you have experience in front-end development, you may wish to refer to our [documentation](https://docs.affine.pro/affine/basic-documentation/contribute-to-affine) to learn more about deploying your own version or contributing further to development. For those intersting in trying our latest version, please bear with us as we are planning to launch a web version soon.
+
+
+If you have experience in front-end development, you may wish to refer to our [documentation](https://docs.affine.pro/affine/basic-documentation/contribute-to-affine) to learn more about deploying your own version or contributing further to development.
Also, thanks to Lee who has made a [desktop build with Tauri](https://github.com/m1911star/affine-client) for you to try out.
Please notice that AFFiNE is still under Alpha stage and is not ready for production use.
diff --git a/apps/ligo-virgo-e2e/src/integration/app.spec.ts b/apps/ligo-virgo-e2e/src/integration/app.spec.ts
index 651bf215f2..0d3bae5e04 100644
--- a/apps/ligo-virgo-e2e/src/integration/app.spec.ts
+++ b/apps/ligo-virgo-e2e/src/integration/app.spec.ts
@@ -4,11 +4,11 @@ describe('ligo-virgo', () => {
beforeEach(() => cy.visit('/'));
it('basic load check', () => {
- getTitle().contains('Get Started with AFFiNE');
+ getTitle().contains('👋 Get Started with AFFINE');
cy.get('.block_container').contains('The Essentials');
getBoard().click();
- cy.get('.tl-inner-div').contains('Graduating');
+ cy.get('.tl-inner-div').contains('The Essentials');
});
});
diff --git a/apps/ligo-virgo/src/pages/RoutePrivate.tsx b/apps/ligo-virgo/src/pages/RoutePrivate.tsx
index 58dcbe3db5..a7cedac934 100644
--- a/apps/ligo-virgo/src/pages/RoutePrivate.tsx
+++ b/apps/ligo-virgo/src/pages/RoutePrivate.tsx
@@ -23,7 +23,7 @@ export function RoutePrivate({
return ;
}
- if (!user) {
+ if (!user || !pathname.startsWith(`/${user.id}`)) {
return (
{
viewBox="0 0 71 55"
fill="currentcolor"
>
-
+ {
return (
+ );
+};
+
+const AFFiNEOnline = (props: { center?: boolean; flat?: boolean }) => {
+ const matches = useMediaQuery('(max-width: 1024px)');
+
+ return (
+
);
};
@@ -258,7 +300,10 @@ export function App() {
- It’s not just add-up of Docs, whiteboard, and
+ It’s not just a collection of Docs, whiteboard, and
tables.
@@ -465,11 +506,11 @@ export function App() {
}}
>
- Transform any building blocks as you like.
+ Transform any building block as you like.
- Say goodbye to redundancy, and keep all your
- knowledge minimal, in your way.
+ Say goodbye to redundancy. Store your data once, and
+ keep your data as you like it.
@@ -512,15 +553,17 @@ export function App() {
fontSize="1.2em"
style={{ marginBottom: '0.25em' }}
>
- Docs, kanban, and databases are all fully
- functional at any place. You always keep
- what-you-see-is-what-you-get.
+ Docs, Kanbans, and Databases are all fully
+ functional anywhere, anytime. A truly
+ what-you-see-is-what-you-get environment for
+ your data.
- All pages come with docs and whiteboard mode.
+ All pages come with a document (Paper Mode) and
+ whiteboard (Edgeless Mode) view.
@@ -588,21 +631,21 @@ export function App() {
fontSize="1.2em"
style={{ marginBottom: '0.25em' }}
>
- No more chaos between so many views.
+ No more chaos managing multiple views.
- Set a TODO with Markdown, and manage it in
- Kanban.
+ Set a TODO with Markdown, and seamlessly edit it
+ within a Kanban.
- Managing multi-dimensional tables should be
- simple as that.
+ Managing multi-dimensional tables should be this
+ simple – and now it is.
@@ -661,16 +704,20 @@ export function App() {
fontSize="1.2em"
style={{ marginBottom: '0.25em' }}
>
- We don’t like cloud lock-in. Your data is always
- locally stored and secured, while you can still
- collaborate in real-time with others.
+ We don’t like being locked-in, and neither should
+ you. Privacy is at the foundation of everything we
+ do, but it should not limit us that’s+ why there are
+ no compromises.
- Privacy is the foundation of everything we do. But
- it is no excuse for the bad experience.
+ Your data is yours; it is always locally stored and
+ secured - available to you always. While still being
+ able enjoy collaboration features such as real-time
+ editing and sharing with others, without any cloud
+ setup.
diff --git a/libs/components/account/src/login/fs.tsx b/libs/components/account/src/login/fs.tsx
index 104e13ed6c..2482e5187c 100644
--- a/libs/components/account/src/login/fs.tsx
+++ b/libs/components/account/src/login/fs.tsx
@@ -17,6 +17,7 @@ const cleanupWorkspace = (workspace: string) =>
const requestPermission = async (workspace: string) => {
await cleanupWorkspace(workspace);
+ // @ts-ignore
const dirHandler = await window.showDirectoryPicker({
id: 'AFFiNE_' + workspace,
mode: 'readwrite',
@@ -46,7 +47,7 @@ const requestPermission = async (workspace: string) => {
};
export const FileSystem = (props: { onError: () => void }) => {
- const onSelected = useLocalTrigger();
+ const [, onSelected] = useLocalTrigger();
const apiSupported = useMemo(() => {
try {
@@ -56,12 +57,6 @@ export const FileSystem = (props: { onError: () => void }) => {
}
}, []);
- useEffect(() => {
- if (process.env['NX_E2E']) {
- onSelected();
- }
- }, []);
-
return (
- {' '}
{
? app.getScreenPoint([bounds.minX, bounds.minY])
: undefined;
- const anchor = getAnchor({
+ const anchorEl = getAnchor({
x: point?.[0] || 0,
y: (point?.[1] || 0) + 40,
width: bounds?.width ? bounds.width * camera.zoom : 0,
@@ -100,7 +100,7 @@ export const CommandPanel = ({ app }: { app: TldrawApp }) => {
diff --git a/libs/components/board-shapes/src/editor-util/EditorUtil.tsx b/libs/components/board-shapes/src/editor-util/EditorUtil.tsx
index a7c56ebce1..2f1820e0c3 100644
--- a/libs/components/board-shapes/src/editor-util/EditorUtil.tsx
+++ b/libs/components/board-shapes/src/editor-util/EditorUtil.tsx
@@ -124,10 +124,16 @@ export class EditorUtil extends TDShapeUtil {
);
const activateIfEditing = useCallback(() => {
+ const shapes =
+ state.document.pages[state.appState.currentPageId].shapes;
+ // https://bugs.chromium.org/p/chromium/issues/detail?id=1352417
+ if (shapes[shape.id] != null) {
+ return;
+ }
if (editingText && editingId !== shape.id) {
app.setEditingText(shape.id);
}
- }, [app, shape.id, editingText, editingId]);
+ }, [app, state, shape.id, editingText, editingId]);
return (
diff --git a/libs/components/common/src/lib/text/EditableText.tsx b/libs/components/common/src/lib/text/EditableText.tsx
index 8970f6a008..3c9ca6fe5c 100644
--- a/libs/components/common/src/lib/text/EditableText.tsx
+++ b/libs/components/common/src/lib/text/EditableText.tsx
@@ -799,11 +799,11 @@ const EditorLeaf = ({ attributes, children, leaf }: any) => {
{customChildren}
diff --git a/libs/components/common/src/lib/text/plugins/link.tsx b/libs/components/common/src/lib/text/plugins/link.tsx
index 60193e38a0..619239c64d 100644
--- a/libs/components/common/src/lib/text/plugins/link.tsx
+++ b/libs/components/common/src/lib/text/plugins/link.tsx
@@ -25,7 +25,6 @@ import { ReactEditor } from 'slate-react';
import OpenInNewIcon from '@mui/icons-material/OpenInNew';
import EditIcon from '@mui/icons-material/Edit';
import LinkOffIcon from '@mui/icons-material/LinkOff';
-import AttachmentIcon from '@mui/icons-material/Attachment';
import {
MuiTooltip as Tooltip,
styled,
@@ -39,7 +38,7 @@ import {
import { getRandomString } from '../utils';
import { colors } from '../../colors';
-
+import { LinkIcon } from '@toeverything/components/icons';
export type LinkElement = {
type: 'link';
url: string;
@@ -124,7 +123,7 @@ const LinkStyledTooltip = styled(({ className, ...props }: MuiTooltipProps) => (
))(({ theme }) => ({
[`& .${muiTooltipClasses.tooltip}`]: {
backgroundColor: '#fff',
- color: '#4C6275',
+ color: '#3E6FDB',
boxShadow: theme.affine.shadows.shadow1,
fontSize: '14px',
},
@@ -419,8 +418,8 @@ export const LinkModal = memo((props: LinkModalProps) => {
}}
>