mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
Merge branch 'main' into main
This commit is contained in:
commit
cee0a04fe1
@ -1,15 +1,7 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:appflowy/generated/flowy_svgs.g.dart';
|
|
||||||
import 'package:appflowy/generated/locale_keys.g.dart';
|
|
||||||
import 'package:appflowy/shared/window_title_bar.dart';
|
|
||||||
import 'package:appflowy/workspace/application/home/home_setting_bloc.dart';
|
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
|
||||||
import 'package:flowy_infra_ui/style_widget/hover.dart';
|
|
||||||
import 'package:flowy_infra_ui/widget/flowy_tooltip.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
||||||
|
|
||||||
class CocoaWindowChannel {
|
class CocoaWindowChannel {
|
||||||
CocoaWindowChannel._();
|
CocoaWindowChannel._();
|
||||||
@ -38,11 +30,9 @@ class MoveWindowDetector extends StatefulWidget {
|
|||||||
const MoveWindowDetector({
|
const MoveWindowDetector({
|
||||||
super.key,
|
super.key,
|
||||||
this.child,
|
this.child,
|
||||||
this.showTitleBar = false,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
final Widget? child;
|
final Widget? child;
|
||||||
final bool showTitleBar;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
MoveWindowDetectorState createState() => MoveWindowDetectorState();
|
MoveWindowDetectorState createState() => MoveWindowDetectorState();
|
||||||
@ -54,28 +44,10 @@ class MoveWindowDetectorState extends State<MoveWindowDetector> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
if (!Platform.isMacOS && !Platform.isWindows) {
|
if (!Platform.isMacOS) {
|
||||||
return widget.child ?? const SizedBox.shrink();
|
return widget.child ?? const SizedBox.shrink();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Platform.isWindows) {
|
|
||||||
return Column(
|
|
||||||
mainAxisSize: MainAxisSize.min,
|
|
||||||
children: [
|
|
||||||
if (widget.showTitleBar) ...[
|
|
||||||
WindowTitleBar(
|
|
||||||
leftChildren: [
|
|
||||||
_buildToggleMenuButton(context),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
] else ...[
|
|
||||||
const SizedBox(height: 5),
|
|
||||||
],
|
|
||||||
widget.child ?? const SizedBox.shrink(),
|
|
||||||
],
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
// https://stackoverflow.com/questions/52965799/flutter-gesturedetector-not-working-with-containers-in-stack
|
// https://stackoverflow.com/questions/52965799/flutter-gesturedetector-not-working-with-containers-in-stack
|
||||||
behavior: HitTestBehavior.translucent,
|
behavior: HitTestBehavior.translucent,
|
||||||
@ -96,45 +68,4 @@ class MoveWindowDetectorState extends State<MoveWindowDetector> {
|
|||||||
child: widget.child,
|
child: widget.child,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildToggleMenuButton(BuildContext context) {
|
|
||||||
if (!context.read<HomeSettingBloc>().state.isMenuCollapsed) {
|
|
||||||
return const SizedBox.shrink();
|
|
||||||
}
|
|
||||||
|
|
||||||
final textSpan = TextSpan(
|
|
||||||
children: [
|
|
||||||
TextSpan(
|
|
||||||
text: '${LocaleKeys.sideBar_openSidebar.tr()}\n',
|
|
||||||
style: context.tooltipTextStyle(),
|
|
||||||
),
|
|
||||||
TextSpan(
|
|
||||||
text: Platform.isMacOS ? '⌘+.' : 'Ctrl+\\',
|
|
||||||
style: context
|
|
||||||
.tooltipTextStyle()
|
|
||||||
?.copyWith(color: Theme.of(context).hintColor),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
);
|
|
||||||
|
|
||||||
return FlowyTooltip(
|
|
||||||
richMessage: textSpan,
|
|
||||||
child: Listener(
|
|
||||||
behavior: HitTestBehavior.translucent,
|
|
||||||
onPointerDown: (_) => context
|
|
||||||
.read<HomeSettingBloc>()
|
|
||||||
.add(const HomeSettingEvent.collapseMenu()),
|
|
||||||
child: FlowyHover(
|
|
||||||
child: Container(
|
|
||||||
width: 24,
|
|
||||||
padding: const EdgeInsets.all(4),
|
|
||||||
child: const RotatedBox(
|
|
||||||
quarterTurns: 2,
|
|
||||||
child: FlowySvg(FlowySvgs.hide_menu_s),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -64,11 +64,7 @@ class MobileHomeTrashPage extends StatelessWidget {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
body: state.objects.isEmpty
|
body: state.objects.isEmpty
|
||||||
? FlowyMobileStateContainer.info(
|
? const _EmptyTrashBin()
|
||||||
emoji: '🗑️',
|
|
||||||
title: LocaleKeys.trash_mobile_empty.tr(),
|
|
||||||
description: LocaleKeys.trash_mobile_emptyDescription.tr(),
|
|
||||||
)
|
|
||||||
: _DeletedFilesListView(state),
|
: _DeletedFilesListView(state),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
@ -82,6 +78,41 @@ enum _TrashActionType {
|
|||||||
deleteAll,
|
deleteAll,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class _EmptyTrashBin extends StatelessWidget {
|
||||||
|
const _EmptyTrashBin();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Center(
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
const FlowySvg(
|
||||||
|
FlowySvgs.m_empty_trash_xl,
|
||||||
|
size: Size.square(46),
|
||||||
|
),
|
||||||
|
const VSpace(16.0),
|
||||||
|
FlowyText.medium(
|
||||||
|
LocaleKeys.trash_mobile_empty.tr(),
|
||||||
|
fontSize: 18.0,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
),
|
||||||
|
const VSpace(8.0),
|
||||||
|
FlowyText.regular(
|
||||||
|
LocaleKeys.trash_mobile_emptyDescription.tr(),
|
||||||
|
fontSize: 17.0,
|
||||||
|
maxLines: 10,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
lineHeight: 1.3,
|
||||||
|
color: Theme.of(context).hintColor,
|
||||||
|
),
|
||||||
|
const VSpace(kBottomNavigationBarHeight + 36.0),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class _TrashActionAllButton extends StatelessWidget {
|
class _TrashActionAllButton extends StatelessWidget {
|
||||||
/// Switch between 'delete all' and 'restore all' feature
|
/// Switch between 'delete all' and 'restore all' feature
|
||||||
const _TrashActionAllButton({
|
const _TrashActionAllButton({
|
||||||
|
@ -22,6 +22,7 @@ class HomePageSettingsPopupMenu extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
|
||||||
return PopupMenuButton<_MobileSettingsPopupMenuItem>(
|
return PopupMenuButton<_MobileSettingsPopupMenuItem>(
|
||||||
offset: const Offset(0, 36),
|
offset: const Offset(0, 36),
|
||||||
padding: EdgeInsets.zero,
|
padding: EdgeInsets.zero,
|
||||||
@ -32,13 +33,7 @@ class HomePageSettingsPopupMenu extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
shadowColor: const Color(0x68000000),
|
shadowColor: const Color(0x68000000),
|
||||||
elevation: 10,
|
elevation: 10,
|
||||||
color: Theme.of(context).colorScheme.surface,
|
color: context.popupMenuBackgroundColor,
|
||||||
child: const Padding(
|
|
||||||
padding: EdgeInsets.all(8.0),
|
|
||||||
child: FlowySvg(
|
|
||||||
FlowySvgs.m_settings_more_s,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
itemBuilder: (BuildContext context) =>
|
itemBuilder: (BuildContext context) =>
|
||||||
<PopupMenuEntry<_MobileSettingsPopupMenuItem>>[
|
<PopupMenuEntry<_MobileSettingsPopupMenuItem>>[
|
||||||
_buildItem(
|
_buildItem(
|
||||||
@ -81,6 +76,12 @@ class HomePageSettingsPopupMenu extends StatelessWidget {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
child: const Padding(
|
||||||
|
padding: EdgeInsets.all(8.0),
|
||||||
|
child: FlowySvg(
|
||||||
|
FlowySvgs.m_settings_more_s,
|
||||||
|
),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,10 @@ import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class EmptySpacePlaceholder extends StatelessWidget {
|
class EmptySpacePlaceholder extends StatelessWidget {
|
||||||
const EmptySpacePlaceholder({super.key, required this.type});
|
const EmptySpacePlaceholder({
|
||||||
|
super.key,
|
||||||
|
required this.type,
|
||||||
|
});
|
||||||
|
|
||||||
final MobilePageCardType type;
|
final MobilePageCardType type;
|
||||||
|
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
|
import 'dart:io';
|
||||||
import 'dart:ui';
|
import 'dart:ui';
|
||||||
|
|
||||||
import 'package:appflowy/generated/flowy_svgs.g.dart';
|
import 'package:appflowy/generated/flowy_svgs.g.dart';
|
||||||
import 'package:appflowy/generated/locale_keys.g.dart';
|
import 'package:appflowy/generated/locale_keys.g.dart';
|
||||||
import 'package:appflowy/mobile/presentation/notifications/mobile_notifications_screen.dart';
|
import 'package:appflowy/mobile/presentation/notifications/mobile_notifications_screen.dart';
|
||||||
import 'package:appflowy/mobile/presentation/widgets/navigation_bar_button.dart';
|
import 'package:appflowy/mobile/presentation/widgets/navigation_bar_button.dart';
|
||||||
|
import 'package:appflowy/shared/popup_menu/appflowy_popup_menu.dart';
|
||||||
import 'package:appflowy/shared/red_dot.dart';
|
import 'package:appflowy/shared/red_dot.dart';
|
||||||
import 'package:appflowy/startup/startup.dart';
|
import 'package:appflowy/startup/startup.dart';
|
||||||
import 'package:appflowy/user/application/reminder/reminder_bloc.dart';
|
import 'package:appflowy/user/application/reminder/reminder_bloc.dart';
|
||||||
@ -193,6 +195,8 @@ class _HomePageNavigationBar extends StatelessWidget {
|
|||||||
border: context.border,
|
border: context.border,
|
||||||
color: context.backgroundColor,
|
color: context.backgroundColor,
|
||||||
),
|
),
|
||||||
|
child: Theme(
|
||||||
|
data: _getThemeData(context),
|
||||||
child: BottomNavigationBar(
|
child: BottomNavigationBar(
|
||||||
showSelectedLabels: false,
|
showSelectedLabels: false,
|
||||||
showUnselectedLabels: false,
|
showUnselectedLabels: false,
|
||||||
@ -206,12 +210,29 @@ class _HomePageNavigationBar extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
ThemeData _getThemeData(BuildContext context) {
|
||||||
|
if (Platform.isAndroid) {
|
||||||
|
return Theme.of(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
// hide the splash effect for iOS
|
||||||
|
return Theme.of(context).copyWith(
|
||||||
|
splashFactory: NoSplash.splashFactory,
|
||||||
|
splashColor: Colors.transparent,
|
||||||
|
highlightColor: Colors.transparent,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Navigate to the current location of the branch at the provided index when
|
/// Navigate to the current location of the branch at the provided index when
|
||||||
/// tapping an item in the BottomNavigationBar.
|
/// tapping an item in the BottomNavigationBar.
|
||||||
void _onTap(BuildContext context, int bottomBarIndex) {
|
void _onTap(BuildContext context, int bottomBarIndex) {
|
||||||
|
// close the popup menu
|
||||||
|
closePopupMenu();
|
||||||
|
|
||||||
final label = _items[bottomBarIndex].label;
|
final label = _items[bottomBarIndex].label;
|
||||||
if (label == _addLabel) {
|
if (label == _addLabel) {
|
||||||
// show an add dialog
|
// show an add dialog
|
||||||
|
@ -36,12 +36,7 @@ class NotificationSettingsPopupMenu extends StatelessWidget {
|
|||||||
// todo: replace it with shadows
|
// todo: replace it with shadows
|
||||||
shadowColor: const Color(0x68000000),
|
shadowColor: const Color(0x68000000),
|
||||||
elevation: 10,
|
elevation: 10,
|
||||||
child: const Padding(
|
color: context.popupMenuBackgroundColor,
|
||||||
padding: EdgeInsets.all(8.0),
|
|
||||||
child: FlowySvg(
|
|
||||||
FlowySvgs.m_settings_more_s,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
itemBuilder: (BuildContext context) =>
|
itemBuilder: (BuildContext context) =>
|
||||||
<PopupMenuEntry<_NotificationSettingsPopupMenuItem>>[
|
<PopupMenuEntry<_NotificationSettingsPopupMenuItem>>[
|
||||||
_buildItem(
|
_buildItem(
|
||||||
@ -87,6 +82,12 @@ class NotificationSettingsPopupMenu extends StatelessWidget {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
child: const Padding(
|
||||||
|
padding: EdgeInsets.all(8.0),
|
||||||
|
child: FlowySvg(
|
||||||
|
FlowySvgs.m_settings_more_s,
|
||||||
|
),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -245,12 +245,12 @@ class _MobileToolbarState extends State<_MobileToolbar>
|
|||||||
children: [
|
children: [
|
||||||
const Divider(
|
const Divider(
|
||||||
height: 0.5,
|
height: 0.5,
|
||||||
color: Color(0xFFEDEDED),
|
color: Color(0x7FEDEDED),
|
||||||
),
|
),
|
||||||
_buildToolbar(context),
|
_buildToolbar(context),
|
||||||
const Divider(
|
const Divider(
|
||||||
height: 0.5,
|
height: 0.5,
|
||||||
color: Color(0xFFEDEDED),
|
color: Color(0x7FEDEDED),
|
||||||
),
|
),
|
||||||
_buildMenuOrSpacer(context),
|
_buildMenuOrSpacer(context),
|
||||||
],
|
],
|
||||||
|
@ -264,7 +264,13 @@ final referencedDocSlashMenuItem = SelectionMenuItem(
|
|||||||
isSelected: isSelected,
|
isSelected: isSelected,
|
||||||
style: style,
|
style: style,
|
||||||
),
|
),
|
||||||
keywords: ['page', 'notes', 'referenced page', 'referenced document'],
|
keywords: [
|
||||||
|
'page',
|
||||||
|
'notes',
|
||||||
|
'referenced page',
|
||||||
|
'referenced document',
|
||||||
|
'link to page',
|
||||||
|
],
|
||||||
handler: (editorState, menuService, context) => showLinkToPageMenu(
|
handler: (editorState, menuService, context) => showLinkToPageMenu(
|
||||||
editorState,
|
editorState,
|
||||||
menuService,
|
menuService,
|
||||||
|
@ -33,6 +33,12 @@ const double _kMenuVerticalPadding = 8.0;
|
|||||||
const double _kMenuWidthStep = 56.0;
|
const double _kMenuWidthStep = 56.0;
|
||||||
const double _kMenuScreenPadding = 8.0;
|
const double _kMenuScreenPadding = 8.0;
|
||||||
|
|
||||||
|
GlobalKey<_PopupMenuState>? _kPopupMenuKey;
|
||||||
|
void closePopupMenu() {
|
||||||
|
_kPopupMenuKey?.currentState?.dismiss();
|
||||||
|
_kPopupMenuKey = null;
|
||||||
|
}
|
||||||
|
|
||||||
/// A base class for entries in a Material Design popup menu.
|
/// A base class for entries in a Material Design popup menu.
|
||||||
///
|
///
|
||||||
/// The popup menu widget uses this interface to interact with the menu items.
|
/// The popup menu widget uses this interface to interact with the menu items.
|
||||||
@ -569,7 +575,7 @@ class _CheckedPopupMenuItemState<T>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class _PopupMenu<T> extends StatelessWidget {
|
class _PopupMenu<T> extends StatefulWidget {
|
||||||
const _PopupMenu({
|
const _PopupMenu({
|
||||||
super.key,
|
super.key,
|
||||||
required this.itemKeys,
|
required this.itemKeys,
|
||||||
@ -585,10 +591,15 @@ class _PopupMenu<T> extends StatelessWidget {
|
|||||||
final BoxConstraints? constraints;
|
final BoxConstraints? constraints;
|
||||||
final Clip clipBehavior;
|
final Clip clipBehavior;
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<_PopupMenu<T>> createState() => _PopupMenuState<T>();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _PopupMenuState<T> extends State<_PopupMenu<T>> {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final double unit = 1.0 /
|
final double unit = 1.0 /
|
||||||
(route.items.length +
|
(widget.route.items.length +
|
||||||
1.5); // 1.0 for the width and 0.5 for the last item's fade.
|
1.5); // 1.0 for the width and 0.5 for the last item's fade.
|
||||||
final List<Widget> children = <Widget>[];
|
final List<Widget> children = <Widget>[];
|
||||||
final ThemeData theme = Theme.of(context);
|
final ThemeData theme = Theme.of(context);
|
||||||
@ -597,16 +608,16 @@ class _PopupMenu<T> extends StatelessWidget {
|
|||||||
? _PopupMenuDefaultsM3(context)
|
? _PopupMenuDefaultsM3(context)
|
||||||
: _PopupMenuDefaultsM2(context);
|
: _PopupMenuDefaultsM2(context);
|
||||||
|
|
||||||
for (int i = 0; i < route.items.length; i += 1) {
|
for (int i = 0; i < widget.route.items.length; i += 1) {
|
||||||
final double start = (i + 1) * unit;
|
final double start = (i + 1) * unit;
|
||||||
final double end = clampDouble(start + 1.5 * unit, 0.0, 1.0);
|
final double end = clampDouble(start + 1.5 * unit, 0.0, 1.0);
|
||||||
final CurvedAnimation opacity = CurvedAnimation(
|
final CurvedAnimation opacity = CurvedAnimation(
|
||||||
parent: route.animation!,
|
parent: widget.route.animation!,
|
||||||
curve: Interval(start, end),
|
curve: Interval(start, end),
|
||||||
);
|
);
|
||||||
Widget item = route.items[i];
|
Widget item = widget.route.items[i];
|
||||||
if (route.initialValue != null &&
|
if (widget.route.initialValue != null &&
|
||||||
route.items[i].represents(route.initialValue)) {
|
widget.route.items[i].represents(widget.route.initialValue)) {
|
||||||
item = ColoredBox(
|
item = ColoredBox(
|
||||||
color: Theme.of(context).highlightColor,
|
color: Theme.of(context).highlightColor,
|
||||||
child: item,
|
child: item,
|
||||||
@ -615,10 +626,10 @@ class _PopupMenu<T> extends StatelessWidget {
|
|||||||
children.add(
|
children.add(
|
||||||
_MenuItem(
|
_MenuItem(
|
||||||
onLayout: (Size size) {
|
onLayout: (Size size) {
|
||||||
route.itemSizes[i] = size;
|
widget.route.itemSizes[i] = size;
|
||||||
},
|
},
|
||||||
child: FadeTransition(
|
child: FadeTransition(
|
||||||
key: itemKeys[i],
|
key: widget.itemKeys[i],
|
||||||
opacity: opacity,
|
opacity: opacity,
|
||||||
child: item,
|
child: item,
|
||||||
),
|
),
|
||||||
@ -630,10 +641,10 @@ class _PopupMenu<T> extends StatelessWidget {
|
|||||||
CurveTween(curve: const Interval(0.0, 1.0 / 3.0));
|
CurveTween(curve: const Interval(0.0, 1.0 / 3.0));
|
||||||
final CurveTween width = CurveTween(curve: Interval(0.0, unit));
|
final CurveTween width = CurveTween(curve: Interval(0.0, unit));
|
||||||
final CurveTween height =
|
final CurveTween height =
|
||||||
CurveTween(curve: Interval(0.0, unit * route.items.length));
|
CurveTween(curve: Interval(0.0, unit * widget.route.items.length));
|
||||||
|
|
||||||
final Widget child = ConstrainedBox(
|
final Widget child = ConstrainedBox(
|
||||||
constraints: constraints ??
|
constraints: widget.constraints ??
|
||||||
const BoxConstraints(
|
const BoxConstraints(
|
||||||
minWidth: _kMenuMinWidth,
|
minWidth: _kMenuMinWidth,
|
||||||
maxWidth: _kMenuMaxWidth,
|
maxWidth: _kMenuMaxWidth,
|
||||||
@ -644,7 +655,7 @@ class _PopupMenu<T> extends StatelessWidget {
|
|||||||
scopesRoute: true,
|
scopesRoute: true,
|
||||||
namesRoute: true,
|
namesRoute: true,
|
||||||
explicitChildNodes: true,
|
explicitChildNodes: true,
|
||||||
label: semanticLabel,
|
label: widget.semanticLabel,
|
||||||
child: SingleChildScrollView(
|
child: SingleChildScrollView(
|
||||||
padding: const EdgeInsets.symmetric(
|
padding: const EdgeInsets.symmetric(
|
||||||
vertical: _kMenuVerticalPadding,
|
vertical: _kMenuVerticalPadding,
|
||||||
@ -656,28 +667,28 @@ class _PopupMenu<T> extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
|
|
||||||
return AnimatedBuilder(
|
return AnimatedBuilder(
|
||||||
animation: route.animation!,
|
animation: widget.route.animation!,
|
||||||
builder: (BuildContext context, Widget? child) {
|
builder: (BuildContext context, Widget? child) {
|
||||||
return FadeTransition(
|
return FadeTransition(
|
||||||
opacity: opacity.animate(route.animation!),
|
opacity: opacity.animate(widget.route.animation!),
|
||||||
child: Material(
|
child: Material(
|
||||||
shape: route.shape ?? popupMenuTheme.shape ?? defaults.shape,
|
shape: widget.route.shape ?? popupMenuTheme.shape ?? defaults.shape,
|
||||||
color: route.color ?? popupMenuTheme.color ?? defaults.color,
|
color: widget.route.color ?? popupMenuTheme.color ?? defaults.color,
|
||||||
clipBehavior: clipBehavior,
|
clipBehavior: widget.clipBehavior,
|
||||||
type: MaterialType.card,
|
type: MaterialType.card,
|
||||||
elevation: route.elevation ??
|
elevation: widget.route.elevation ??
|
||||||
popupMenuTheme.elevation ??
|
popupMenuTheme.elevation ??
|
||||||
defaults.elevation!,
|
defaults.elevation!,
|
||||||
shadowColor: route.shadowColor ??
|
shadowColor: widget.route.shadowColor ??
|
||||||
popupMenuTheme.shadowColor ??
|
popupMenuTheme.shadowColor ??
|
||||||
defaults.shadowColor,
|
defaults.shadowColor,
|
||||||
surfaceTintColor: route.surfaceTintColor ??
|
surfaceTintColor: widget.route.surfaceTintColor ??
|
||||||
popupMenuTheme.surfaceTintColor ??
|
popupMenuTheme.surfaceTintColor ??
|
||||||
defaults.surfaceTintColor,
|
defaults.surfaceTintColor,
|
||||||
child: Align(
|
child: Align(
|
||||||
alignment: AlignmentDirectional.topEnd,
|
alignment: AlignmentDirectional.topEnd,
|
||||||
widthFactor: width.evaluate(route.animation!),
|
widthFactor: width.evaluate(widget.route.animation!),
|
||||||
heightFactor: height.evaluate(route.animation!),
|
heightFactor: height.evaluate(widget.route.animation!),
|
||||||
child: child,
|
child: child,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -686,6 +697,21 @@ class _PopupMenu<T> extends StatelessWidget {
|
|||||||
child: child,
|
child: child,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_kPopupMenuKey = null;
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
void dismiss() {
|
||||||
|
if (_kPopupMenuKey == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
_kPopupMenuKey = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Positioning of the menu on the screen.
|
// Positioning of the menu on the screen.
|
||||||
@ -937,7 +963,9 @@ class _PopupMenuRoute<T> extends PopupRoute<T> {
|
|||||||
scrollTo(selectedItemIndex);
|
scrollTo(selectedItemIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_kPopupMenuKey ??= GlobalKey<_PopupMenuState>();
|
||||||
final Widget menu = _PopupMenu<T>(
|
final Widget menu = _PopupMenu<T>(
|
||||||
|
key: _kPopupMenuKey,
|
||||||
route: this,
|
route: this,
|
||||||
itemKeys: itemKeys,
|
itemKeys: itemKeys,
|
||||||
semanticLabel: semanticLabel,
|
semanticLabel: semanticLabel,
|
||||||
@ -1526,7 +1554,7 @@ class PopupMenuButtonState<T> extends State<PopupMenuButton<T>> {
|
|||||||
|
|
||||||
if (widget.child != null) {
|
if (widget.child != null) {
|
||||||
return AnimatedGestureDetector(
|
return AnimatedGestureDetector(
|
||||||
scaleFactor: 0.99,
|
scaleFactor: 0.95,
|
||||||
onTapUp: widget.enabled ? showButtonMenu : null,
|
onTapUp: widget.enabled ? showButtonMenu : null,
|
||||||
child: widget.child!,
|
child: widget.child!,
|
||||||
);
|
);
|
||||||
@ -1607,3 +1635,12 @@ class _PopupMenuDefaultsM3 extends PopupMenuThemeData {
|
|||||||
const EdgeInsets.symmetric(horizontal: 12.0);
|
const EdgeInsets.symmetric(horizontal: 12.0);
|
||||||
}
|
}
|
||||||
// END GENERATED TOKEN PROPERTIES - PopupMenu
|
// END GENERATED TOKEN PROPERTIES - PopupMenu
|
||||||
|
|
||||||
|
extension PopupMenuColors on BuildContext {
|
||||||
|
Color get popupMenuBackgroundColor {
|
||||||
|
if (Theme.of(this).brightness == Brightness.light) {
|
||||||
|
return Theme.of(this).colorScheme.surface;
|
||||||
|
}
|
||||||
|
return const Color(0xFF23262B);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import 'package:appflowy_backend/protobuf/flowy-user/date_time.pbenum.dart';
|
import 'package:appflowy_backend/protobuf/flowy-user/date_time.pbenum.dart';
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
|
|
||||||
const _localFmt = 'M/d/y';
|
const _localFmt = 'MM/dd/y';
|
||||||
const _usFmt = 'y/M/d';
|
const _usFmt = 'y/MM/dd';
|
||||||
const _isoFmt = 'y-M-d';
|
const _isoFmt = 'y-MM-dd';
|
||||||
const _friendlyFmt = 'MMM d, y';
|
const _friendlyFmt = 'MMM dd, y';
|
||||||
const _dmyFmt = 'd/M/y';
|
const _dmyFmt = 'dd/MM/y';
|
||||||
|
|
||||||
extension DateFormatter on UserDateFormatPB {
|
extension DateFormatter on UserDateFormatPB {
|
||||||
DateFormat get toFormat => DateFormat(_toFormat[this] ?? _friendlyFmt);
|
DateFormat get toFormat => DateFormat(_toFormat[this] ?? _friendlyFmt);
|
||||||
|
@ -1,8 +1,16 @@
|
|||||||
import 'package:appflowy_backend/protobuf/flowy-user/user_profile.pb.dart';
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/scheduler.dart';
|
||||||
|
|
||||||
import 'package:appflowy/core/frameless_window.dart';
|
import 'package:appflowy/core/frameless_window.dart';
|
||||||
|
import 'package:appflowy/generated/flowy_svgs.g.dart';
|
||||||
|
import 'package:appflowy/generated/locale_keys.g.dart';
|
||||||
import 'package:appflowy/plugins/blank/blank.dart';
|
import 'package:appflowy/plugins/blank/blank.dart';
|
||||||
|
import 'package:appflowy/shared/window_title_bar.dart';
|
||||||
import 'package:appflowy/startup/plugin/plugin.dart';
|
import 'package:appflowy/startup/plugin/plugin.dart';
|
||||||
import 'package:appflowy/startup/startup.dart';
|
import 'package:appflowy/startup/startup.dart';
|
||||||
|
import 'package:appflowy/workspace/application/home/home_setting_bloc.dart';
|
||||||
import 'package:appflowy/workspace/application/tabs/tabs_bloc.dart';
|
import 'package:appflowy/workspace/application/tabs/tabs_bloc.dart';
|
||||||
import 'package:appflowy/workspace/presentation/home/home_sizes.dart';
|
import 'package:appflowy/workspace/presentation/home/home_sizes.dart';
|
||||||
import 'package:appflowy/workspace/presentation/home/navigation.dart';
|
import 'package:appflowy/workspace/presentation/home/navigation.dart';
|
||||||
@ -10,9 +18,10 @@ import 'package:appflowy/workspace/presentation/home/tabs/tabs_manager.dart';
|
|||||||
import 'package:appflowy/workspace/presentation/home/toast.dart';
|
import 'package:appflowy/workspace/presentation/home/toast.dart';
|
||||||
import 'package:appflowy_backend/dispatch/dispatch.dart';
|
import 'package:appflowy_backend/dispatch/dispatch.dart';
|
||||||
import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
|
import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart';
|
||||||
|
import 'package:appflowy_backend/protobuf/flowy-user/user_profile.pb.dart';
|
||||||
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flowy_infra_ui/style_widget/hover.dart';
|
||||||
import 'package:flutter/scheduler.dart';
|
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:time/time.dart';
|
import 'package:time/time.dart';
|
||||||
@ -47,6 +56,17 @@ class HomeStack extends StatelessWidget {
|
|||||||
builder: (context, state) {
|
builder: (context, state) {
|
||||||
return Column(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
|
if (Platform.isWindows)
|
||||||
|
Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
WindowTitleBar(
|
||||||
|
leftChildren: [
|
||||||
|
_buildToggleMenuButton(context),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.only(left: layout.menuSpacing),
|
padding: EdgeInsets.only(left: layout.menuSpacing),
|
||||||
child: TabsManager(pageController: pageController),
|
child: TabsManager(pageController: pageController),
|
||||||
@ -73,6 +93,47 @@ class HomeStack extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget _buildToggleMenuButton(BuildContext context) {
|
||||||
|
if (!context.read<HomeSettingBloc>().state.isMenuCollapsed) {
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
|
|
||||||
|
final textSpan = TextSpan(
|
||||||
|
children: [
|
||||||
|
TextSpan(
|
||||||
|
text: '${LocaleKeys.sideBar_openSidebar.tr()}\n',
|
||||||
|
style: context.tooltipTextStyle(),
|
||||||
|
),
|
||||||
|
TextSpan(
|
||||||
|
text: Platform.isMacOS ? '⌘+.' : 'Ctrl+\\',
|
||||||
|
style: context
|
||||||
|
.tooltipTextStyle()
|
||||||
|
?.copyWith(color: Theme.of(context).hintColor),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
return FlowyTooltip(
|
||||||
|
richMessage: textSpan,
|
||||||
|
child: Listener(
|
||||||
|
behavior: HitTestBehavior.translucent,
|
||||||
|
onPointerDown: (_) => context
|
||||||
|
.read<HomeSettingBloc>()
|
||||||
|
.add(const HomeSettingEvent.collapseMenu()),
|
||||||
|
child: FlowyHover(
|
||||||
|
child: Container(
|
||||||
|
width: 24,
|
||||||
|
padding: const EdgeInsets.all(4),
|
||||||
|
child: const RotatedBox(
|
||||||
|
quarterTurns: 2,
|
||||||
|
child: FlowySvg(FlowySvgs.hide_menu_s),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class PageStack extends StatefulWidget {
|
class PageStack extends StatefulWidget {
|
||||||
@ -230,7 +291,6 @@ class PageManager {
|
|||||||
child: Selector<PageNotifier, Widget>(
|
child: Selector<PageNotifier, Widget>(
|
||||||
selector: (context, notifier) => notifier.titleWidget,
|
selector: (context, notifier) => notifier.titleWidget,
|
||||||
builder: (_, __, child) => MoveWindowDetector(
|
builder: (_, __, child) => MoveWindowDetector(
|
||||||
showTitleBar: true,
|
|
||||||
child: HomeTopBar(layout: layout),
|
child: HomeTopBar(layout: layout),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -9,6 +9,7 @@ import 'package:appflowy/workspace/presentation/home/menu/menu_shared_state.dart
|
|||||||
import 'package:appflowy/workspace/presentation/home/menu/sidebar/footer/sidebar_toast.dart';
|
import 'package:appflowy/workspace/presentation/home/menu/sidebar/footer/sidebar_toast.dart';
|
||||||
import 'package:appflowy/workspace/presentation/settings/widgets/setting_appflowy_cloud.dart';
|
import 'package:appflowy/workspace/presentation/settings/widgets/setting_appflowy_cloud.dart';
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
|
import 'package:flowy_infra/theme_extension.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'sidebar_footer_button.dart';
|
import 'sidebar_footer_button.dart';
|
||||||
@ -26,9 +27,24 @@ class SidebarFooter extends StatelessWidget {
|
|||||||
return const SidebarToast();
|
return const SidebarToast();
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
const SidebarTemplateButton(),
|
Row(
|
||||||
const SidebarTrashButton(),
|
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
const Expanded(child: SidebarTemplateButton()),
|
||||||
|
_buildVerticalDivider(context),
|
||||||
|
const Expanded(child: SidebarTrashButton()),
|
||||||
],
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildVerticalDivider(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
width: 1.0,
|
||||||
|
height: 14,
|
||||||
|
margin: const EdgeInsets.symmetric(horizontal: 4),
|
||||||
|
color: AFThemeExtension.of(context).borderColor,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -39,13 +55,10 @@ class SidebarTemplateButton extends StatelessWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return SidebarFooterButton(
|
return SidebarFooterButton(
|
||||||
leftIconSize: const Size.square(24.0),
|
leftIconSize: const Size.square(18.0),
|
||||||
leftIcon: const Padding(
|
leftIcon: const FlowySvg(
|
||||||
padding: EdgeInsets.all(2.0),
|
|
||||||
child: FlowySvg(
|
|
||||||
FlowySvgs.icon_template_s,
|
FlowySvgs.icon_template_s,
|
||||||
),
|
),
|
||||||
),
|
|
||||||
text: LocaleKeys.template_label.tr(),
|
text: LocaleKeys.template_label.tr(),
|
||||||
onTap: () => afLaunchUrlString('https://appflowy.io/templates'),
|
onTap: () => afLaunchUrlString('https://appflowy.io/templates'),
|
||||||
);
|
);
|
||||||
@ -61,9 +74,9 @@ class SidebarTrashButton extends StatelessWidget {
|
|||||||
valueListenable: getIt<MenuSharedState>().notifier,
|
valueListenable: getIt<MenuSharedState>().notifier,
|
||||||
builder: (context, value, child) {
|
builder: (context, value, child) {
|
||||||
return SidebarFooterButton(
|
return SidebarFooterButton(
|
||||||
leftIconSize: const Size.square(24.0),
|
leftIconSize: const Size.square(18.0),
|
||||||
leftIcon: const FlowySvg(
|
leftIcon: const FlowySvg(
|
||||||
FlowySvgs.sidebar_footer_trash_m,
|
FlowySvgs.icon_delete_s,
|
||||||
),
|
),
|
||||||
text: LocaleKeys.trash_text.tr(),
|
text: LocaleKeys.trash_text.tr(),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
|
@ -26,11 +26,15 @@ class SidebarFooterButton extends StatelessWidget {
|
|||||||
child: FlowyButton(
|
child: FlowyButton(
|
||||||
leftIcon: leftIcon,
|
leftIcon: leftIcon,
|
||||||
leftIconSize: leftIconSize,
|
leftIconSize: leftIconSize,
|
||||||
iconPadding: 8.0,
|
|
||||||
margin: const EdgeInsets.all(4.0),
|
margin: const EdgeInsets.all(4.0),
|
||||||
text: FlowyText.regular(
|
expandText: false,
|
||||||
|
text: Padding(
|
||||||
|
padding: const EdgeInsets.only(right: 6.0),
|
||||||
|
child: FlowyText(
|
||||||
text,
|
text,
|
||||||
lineHeight: 1.15,
|
fontWeight: FontWeight.w400,
|
||||||
|
figmaLineHeight: 18.0,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
onTap: onTap,
|
onTap: onTap,
|
||||||
),
|
),
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:appflowy/workspace/application/tabs/tabs_bloc.dart';
|
import 'package:appflowy/workspace/application/tabs/tabs_bloc.dart';
|
||||||
|
import 'package:appflowy/workspace/presentation/home/af_focus_manager.dart';
|
||||||
import 'package:appflowy/workspace/presentation/home/home_sizes.dart';
|
import 'package:appflowy/workspace/presentation/home/home_sizes.dart';
|
||||||
import 'package:appflowy/workspace/presentation/home/tabs/flowy_tab.dart';
|
import 'package:appflowy/workspace/presentation/home/tabs/flowy_tab.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
@ -74,8 +75,10 @@ class _TabsManagerState extends State<TabsManager>
|
|||||||
dividerColor: Colors.transparent,
|
dividerColor: Colors.transparent,
|
||||||
isScrollable: true,
|
isScrollable: true,
|
||||||
controller: _controller,
|
controller: _controller,
|
||||||
onTap: (newIndex) =>
|
onTap: (newIndex) {
|
||||||
context.read<TabsBloc>().add(TabsEvent.selectTab(newIndex)),
|
AFFocusManager.of(context).notifyLoseFocus();
|
||||||
|
context.read<TabsBloc>().add(TabsEvent.selectTab(newIndex));
|
||||||
|
},
|
||||||
tabs: state.pageManagers
|
tabs: state.pageManagers
|
||||||
.map(
|
.map(
|
||||||
(pm) => FlowyTab(
|
(pm) => FlowyTab(
|
||||||
|
@ -668,6 +668,9 @@ final _planLabels = [
|
|||||||
label: LocaleKeys.settings_comparePlanDialog_planLabels_itemSix.tr(),
|
label: LocaleKeys.settings_comparePlanDialog_planLabels_itemSix.tr(),
|
||||||
tooltip: LocaleKeys.settings_comparePlanDialog_planLabels_tooltipSix.tr(),
|
tooltip: LocaleKeys.settings_comparePlanDialog_planLabels_tooltipSix.tr(),
|
||||||
),
|
),
|
||||||
|
_PlanItem(
|
||||||
|
label: LocaleKeys.settings_comparePlanDialog_planLabels_itemFileUpload.tr(),
|
||||||
|
),
|
||||||
];
|
];
|
||||||
|
|
||||||
class _CellItem {
|
class _CellItem {
|
||||||
@ -703,6 +706,9 @@ final List<_CellItem> _freeLabels = [
|
|||||||
_CellItem(
|
_CellItem(
|
||||||
label: LocaleKeys.settings_comparePlanDialog_freeLabels_itemSix.tr(),
|
label: LocaleKeys.settings_comparePlanDialog_freeLabels_itemSix.tr(),
|
||||||
),
|
),
|
||||||
|
_CellItem(
|
||||||
|
label: LocaleKeys.settings_comparePlanDialog_freeLabels_itemFileUpload.tr(),
|
||||||
|
),
|
||||||
];
|
];
|
||||||
|
|
||||||
final List<_CellItem> _proLabels = [
|
final List<_CellItem> _proLabels = [
|
||||||
@ -731,4 +737,7 @@ final List<_CellItem> _proLabels = [
|
|||||||
_CellItem(
|
_CellItem(
|
||||||
label: LocaleKeys.settings_comparePlanDialog_proLabels_itemSix.tr(),
|
label: LocaleKeys.settings_comparePlanDialog_proLabels_itemSix.tr(),
|
||||||
),
|
),
|
||||||
|
_CellItem(
|
||||||
|
label: LocaleKeys.settings_comparePlanDialog_proLabels_itemFileUpload.tr(),
|
||||||
|
),
|
||||||
];
|
];
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:appflowy/generated/flowy_svgs.g.dart';
|
import 'package:appflowy/generated/flowy_svgs.g.dart';
|
||||||
import 'package:appflowy/generated/locale_keys.g.dart';
|
import 'package:appflowy/generated/locale_keys.g.dart';
|
||||||
import 'package:appflowy/plugins/document/application/document_appearance_cubit.dart';
|
import 'package:appflowy/plugins/document/application/document_appearance_cubit.dart';
|
||||||
@ -43,7 +45,6 @@ import 'package:flowy_infra/theme.dart';
|
|||||||
import 'package:flowy_infra/theme_extension.dart';
|
import 'package:flowy_infra/theme_extension.dart';
|
||||||
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
||||||
import 'package:flowy_infra_ui/style_widget/hover.dart';
|
import 'package:flowy_infra_ui/style_widget/hover.dart';
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:google_fonts/google_fonts.dart';
|
import 'package:google_fonts/google_fonts.dart';
|
||||||
|
|
||||||
|
40
frontend/appflowy_tauri/src-tauri/Cargo.lock
generated
40
frontend/appflowy_tauri/src-tauri/Cargo.lock
generated
@ -172,7 +172,7 @@ checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "app-error"
|
name = "app-error"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bincode",
|
"bincode",
|
||||||
@ -192,7 +192,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "appflowy-ai-client"
|
name = "appflowy-ai-client"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bytes",
|
"bytes",
|
||||||
@ -837,7 +837,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "client-api"
|
name = "client-api"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"again",
|
"again",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
@ -888,7 +888,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "client-api-entity"
|
name = "client-api-entity"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"collab-entity",
|
"collab-entity",
|
||||||
"collab-rt-entity",
|
"collab-rt-entity",
|
||||||
@ -901,7 +901,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "client-websocket"
|
name = "client-websocket"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
@ -975,7 +975,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab"
|
name = "collab"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=49cf2206d7494bb3006402b807e7f171905213e3#49cf2206d7494bb3006402b807e7f171905213e3"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac#47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"arc-swap",
|
"arc-swap",
|
||||||
@ -1000,7 +1000,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-database"
|
name = "collab-database"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=49cf2206d7494bb3006402b807e7f171905213e3#49cf2206d7494bb3006402b807e7f171905213e3"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac#47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@ -1029,7 +1029,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-document"
|
name = "collab-document"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=49cf2206d7494bb3006402b807e7f171905213e3#49cf2206d7494bb3006402b807e7f171905213e3"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac#47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"arc-swap",
|
"arc-swap",
|
||||||
@ -1049,7 +1049,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-entity"
|
name = "collab-entity"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=49cf2206d7494bb3006402b807e7f171905213e3#49cf2206d7494bb3006402b807e7f171905213e3"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac#47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bytes",
|
"bytes",
|
||||||
@ -1068,7 +1068,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-folder"
|
name = "collab-folder"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=49cf2206d7494bb3006402b807e7f171905213e3#49cf2206d7494bb3006402b807e7f171905213e3"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac#47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"arc-swap",
|
"arc-swap",
|
||||||
@ -1111,7 +1111,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-plugins"
|
name = "collab-plugins"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=49cf2206d7494bb3006402b807e7f171905213e3#49cf2206d7494bb3006402b807e7f171905213e3"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac#47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-stream",
|
"async-stream",
|
||||||
@ -1149,7 +1149,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-rt-entity"
|
name = "collab-rt-entity"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bincode",
|
"bincode",
|
||||||
@ -1174,7 +1174,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-rt-protocol"
|
name = "collab-rt-protocol"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@ -1191,7 +1191,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-user"
|
name = "collab-user"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=49cf2206d7494bb3006402b807e7f171905213e3#49cf2206d7494bb3006402b807e7f171905213e3"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac#47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"collab",
|
"collab",
|
||||||
@ -1446,7 +1446,7 @@ dependencies = [
|
|||||||
"cssparser-macros",
|
"cssparser-macros",
|
||||||
"dtoa-short",
|
"dtoa-short",
|
||||||
"itoa 1.0.6",
|
"itoa 1.0.6",
|
||||||
"phf 0.8.0",
|
"phf 0.11.2",
|
||||||
"smallvec",
|
"smallvec",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -1571,7 +1571,7 @@ checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "database-entity"
|
name = "database-entity"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"app-error",
|
"app-error",
|
||||||
@ -3117,7 +3117,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "gotrue"
|
name = "gotrue"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
@ -3134,7 +3134,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "gotrue-entity"
|
name = "gotrue-entity"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"app-error",
|
"app-error",
|
||||||
@ -3566,7 +3566,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "infra"
|
name = "infra"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bytes",
|
"bytes",
|
||||||
@ -6169,7 +6169,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "shared-entity"
|
name = "shared-entity"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"app-error",
|
"app-error",
|
||||||
|
@ -53,7 +53,7 @@ collab-user = { version = "0.2" }
|
|||||||
# Run the script:
|
# Run the script:
|
||||||
# scripts/tool/update_client_api_rev.sh new_rev_id
|
# scripts/tool/update_client_api_rev.sh new_rev_id
|
||||||
# ⚠️⚠️⚠️️
|
# ⚠️⚠️⚠️️
|
||||||
client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "c9504d4081a8d9893830dc6598429353b078271b" }
|
client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "52782033948b7d243693ca159ea519d53458c8a6" }
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
serde_json.workspace = true
|
serde_json.workspace = true
|
||||||
@ -116,13 +116,13 @@ custom-protocol = ["tauri/custom-protocol"]
|
|||||||
# To switch to the local path, run:
|
# To switch to the local path, run:
|
||||||
# scripts/tool/update_collab_source.sh
|
# scripts/tool/update_collab_source.sh
|
||||||
# ⚠️⚠️⚠️️
|
# ⚠️⚠️⚠️️
|
||||||
collab = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "49cf2206d7494bb3006402b807e7f171905213e3" }
|
collab = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac" }
|
||||||
collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "49cf2206d7494bb3006402b807e7f171905213e3" }
|
collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac" }
|
||||||
collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "49cf2206d7494bb3006402b807e7f171905213e3" }
|
collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac" }
|
||||||
collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "49cf2206d7494bb3006402b807e7f171905213e3" }
|
collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac" }
|
||||||
collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "49cf2206d7494bb3006402b807e7f171905213e3" }
|
collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac" }
|
||||||
collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "49cf2206d7494bb3006402b807e7f171905213e3" }
|
collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac" }
|
||||||
collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "49cf2206d7494bb3006402b807e7f171905213e3" }
|
collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac" }
|
||||||
|
|
||||||
# Working directory: frontend
|
# Working directory: frontend
|
||||||
# To update the commit ID, run:
|
# To update the commit ID, run:
|
||||||
|
40
frontend/appflowy_web_app/src-tauri/Cargo.lock
generated
40
frontend/appflowy_web_app/src-tauri/Cargo.lock
generated
@ -163,7 +163,7 @@ checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "app-error"
|
name = "app-error"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bincode",
|
"bincode",
|
||||||
@ -183,7 +183,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "appflowy-ai-client"
|
name = "appflowy-ai-client"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bytes",
|
"bytes",
|
||||||
@ -811,7 +811,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "client-api"
|
name = "client-api"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"again",
|
"again",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
@ -862,7 +862,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "client-api-entity"
|
name = "client-api-entity"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"collab-entity",
|
"collab-entity",
|
||||||
"collab-rt-entity",
|
"collab-rt-entity",
|
||||||
@ -875,7 +875,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "client-websocket"
|
name = "client-websocket"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
@ -958,7 +958,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab"
|
name = "collab"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=49cf2206d7494bb3006402b807e7f171905213e3#49cf2206d7494bb3006402b807e7f171905213e3"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac#47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"arc-swap",
|
"arc-swap",
|
||||||
@ -983,7 +983,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-database"
|
name = "collab-database"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=49cf2206d7494bb3006402b807e7f171905213e3#49cf2206d7494bb3006402b807e7f171905213e3"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac#47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@ -1012,7 +1012,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-document"
|
name = "collab-document"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=49cf2206d7494bb3006402b807e7f171905213e3#49cf2206d7494bb3006402b807e7f171905213e3"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac#47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"arc-swap",
|
"arc-swap",
|
||||||
@ -1032,7 +1032,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-entity"
|
name = "collab-entity"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=49cf2206d7494bb3006402b807e7f171905213e3#49cf2206d7494bb3006402b807e7f171905213e3"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac#47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bytes",
|
"bytes",
|
||||||
@ -1051,7 +1051,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-folder"
|
name = "collab-folder"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=49cf2206d7494bb3006402b807e7f171905213e3#49cf2206d7494bb3006402b807e7f171905213e3"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac#47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"arc-swap",
|
"arc-swap",
|
||||||
@ -1094,7 +1094,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-plugins"
|
name = "collab-plugins"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=49cf2206d7494bb3006402b807e7f171905213e3#49cf2206d7494bb3006402b807e7f171905213e3"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac#47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-stream",
|
"async-stream",
|
||||||
@ -1132,7 +1132,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-rt-entity"
|
name = "collab-rt-entity"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bincode",
|
"bincode",
|
||||||
@ -1157,7 +1157,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-rt-protocol"
|
name = "collab-rt-protocol"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@ -1174,7 +1174,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-user"
|
name = "collab-user"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=49cf2206d7494bb3006402b807e7f171905213e3#49cf2206d7494bb3006402b807e7f171905213e3"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac#47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"collab",
|
"collab",
|
||||||
@ -1436,7 +1436,7 @@ dependencies = [
|
|||||||
"cssparser-macros",
|
"cssparser-macros",
|
||||||
"dtoa-short",
|
"dtoa-short",
|
||||||
"itoa 1.0.10",
|
"itoa 1.0.10",
|
||||||
"phf 0.8.0",
|
"phf 0.11.2",
|
||||||
"smallvec",
|
"smallvec",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -1561,7 +1561,7 @@ checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5"
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "database-entity"
|
name = "database-entity"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"app-error",
|
"app-error",
|
||||||
@ -3184,7 +3184,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "gotrue"
|
name = "gotrue"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
@ -3201,7 +3201,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "gotrue-entity"
|
name = "gotrue-entity"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"app-error",
|
"app-error",
|
||||||
@ -3638,7 +3638,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "infra"
|
name = "infra"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bytes",
|
"bytes",
|
||||||
@ -6233,7 +6233,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "shared-entity"
|
name = "shared-entity"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"app-error",
|
"app-error",
|
||||||
|
@ -52,7 +52,7 @@ collab-user = { version = "0.2" }
|
|||||||
# Run the script:
|
# Run the script:
|
||||||
# scripts/tool/update_client_api_rev.sh new_rev_id
|
# scripts/tool/update_client_api_rev.sh new_rev_id
|
||||||
# ⚠️⚠️⚠️️
|
# ⚠️⚠️⚠️️
|
||||||
client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "c9504d4081a8d9893830dc6598429353b078271b" }
|
client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "52782033948b7d243693ca159ea519d53458c8a6" }
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
serde_json.workspace = true
|
serde_json.workspace = true
|
||||||
@ -116,13 +116,13 @@ custom-protocol = ["tauri/custom-protocol"]
|
|||||||
# To switch to the local path, run:
|
# To switch to the local path, run:
|
||||||
# scripts/tool/update_collab_source.sh
|
# scripts/tool/update_collab_source.sh
|
||||||
# ⚠️⚠️⚠️️
|
# ⚠️⚠️⚠️️
|
||||||
collab = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "49cf2206d7494bb3006402b807e7f171905213e3" }
|
collab = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac" }
|
||||||
collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "49cf2206d7494bb3006402b807e7f171905213e3" }
|
collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac" }
|
||||||
collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "49cf2206d7494bb3006402b807e7f171905213e3" }
|
collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac" }
|
||||||
collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "49cf2206d7494bb3006402b807e7f171905213e3" }
|
collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac" }
|
||||||
collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "49cf2206d7494bb3006402b807e7f171905213e3" }
|
collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac" }
|
||||||
collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "49cf2206d7494bb3006402b807e7f171905213e3" }
|
collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac" }
|
||||||
collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "49cf2206d7494bb3006402b807e7f171905213e3" }
|
collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac" }
|
||||||
|
|
||||||
# Working directory: frontend
|
# Working directory: frontend
|
||||||
# To update the commit ID, run:
|
# To update the commit ID, run:
|
||||||
|
14
frontend/resources/flowy_icons/16x/icon_delete.svg
Normal file
14
frontend/resources/flowy_icons/16x/icon_delete.svg
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g opacity="0.6" clip-path="url(#clip0_632_5742)">
|
||||||
|
<path d="M12.3746 4.48999C10.7096 4.32499 9.03454 4.23999 7.36453 4.23999C6.37453 4.23999 5.38452 4.28999 4.39452 4.38999L3.37451 4.48999" stroke="#171717" stroke-width="0.750004" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M6.12427 3.98501L6.23427 3.33C6.31427 2.855 6.37427 2.5 7.21927 2.5H8.52928C9.37429 2.5 9.43929 2.875 9.51429 3.335L9.62429 3.98501" stroke="#171717" stroke-width="0.750004" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M11.2995 6.07031L10.9745 11.1053C10.9195 11.8903 10.8745 12.5003 9.47949 12.5003H6.26947C4.87447 12.5003 4.82947 11.8903 4.77446 11.1053L4.44946 6.07031" stroke="#171717" stroke-width="0.750004" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M7.03955 9.75H8.70456" stroke="#171717" stroke-width="0.750004" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M6.62451 7.75H9.12453" stroke="#171717" stroke-width="0.750004" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_632_5742">
|
||||||
|
<rect width="14" height="14" fill="white" transform="translate(0.874512 0.5)"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
@ -1,5 +1,5 @@
|
|||||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
<g opacity="0.6">
|
<g id="icon_template_outlined" opacity="0.6">
|
||||||
<path d="M8.125 3.125H4.375C4.04348 3.125 3.72554 3.2567 3.49112 3.49112C3.2567 3.72554 3.125 4.04348 3.125 4.375V8.125C3.125 8.45652 3.2567 8.77446 3.49112 9.00888C3.72554 9.2433 4.04348 9.375 4.375 9.375H8.125C8.45652 9.375 8.77446 9.2433 9.00888 9.00888C9.2433 8.77446 9.375 8.45652 9.375 8.125V4.375C9.375 4.04348 9.2433 3.72554 9.00888 3.49112C8.77446 3.2567 8.45652 3.125 8.125 3.125ZM8.125 8.125H4.375V4.375H8.125V8.125ZM15.625 3.125H11.875C11.5435 3.125 11.2255 3.2567 10.9911 3.49112C10.7567 3.72554 10.625 4.04348 10.625 4.375V8.125C10.625 8.45652 10.7567 8.77446 10.9911 9.00888C11.2255 9.2433 11.5435 9.375 11.875 9.375H15.625C15.9565 9.375 16.2745 9.2433 16.5089 9.00888C16.7433 8.77446 16.875 8.45652 16.875 8.125V4.375C16.875 4.04348 16.7433 3.72554 16.5089 3.49112C16.2745 3.2567 15.9565 3.125 15.625 3.125ZM15.625 8.125H11.875V4.375H15.625V8.125ZM8.125 10.625H4.375C4.04348 10.625 3.72554 10.7567 3.49112 10.9911C3.2567 11.2255 3.125 11.5435 3.125 11.875V15.625C3.125 15.9565 3.2567 16.2745 3.49112 16.5089C3.72554 16.7433 4.04348 16.875 4.375 16.875H8.125C8.45652 16.875 8.77446 16.7433 9.00888 16.5089C9.2433 16.2745 9.375 15.9565 9.375 15.625V11.875C9.375 11.5435 9.2433 11.2255 9.00888 10.9911C8.77446 10.7567 8.45652 10.625 8.125 10.625ZM8.125 15.625H4.375V11.875H8.125V15.625ZM15.625 10.625H11.875C11.5435 10.625 11.2255 10.7567 10.9911 10.9911C10.7567 11.2255 10.625 11.5435 10.625 11.875V15.625C10.625 15.9565 10.7567 16.2745 10.9911 16.5089C11.2255 16.7433 11.5435 16.875 11.875 16.875H15.625C15.9565 16.875 16.2745 16.7433 16.5089 16.5089C16.7433 16.2745 16.875 15.9565 16.875 15.625V11.875C16.875 11.5435 16.7433 11.2255 16.5089 10.9911C16.2745 10.7567 15.9565 10.625 15.625 10.625ZM15.625 15.625H11.875V11.875H15.625V15.625Z" fill="#101012"/>
|
<path id="Union" d="M11.7339 8.97626L11.7024 9.00328L11.7232 9.0392L13.0125 11.2712C13.399 11.9403 12.9159 12.7767 12.1428 12.7767H6.66498C6.07845 12.7767 5.65818 12.295 5.6592 11.7695L5.6593 11.7171L5.60693 11.7195C5.55512 11.7218 5.503 11.723 5.45061 11.723C3.58596 11.723 2.07441 10.2123 2.07441 8.3487C2.07441 6.48514 3.58596 4.97438 5.45061 4.97438C5.79803 4.97438 6.13311 5.02681 6.4484 5.12415L6.49801 5.13947L6.51145 5.08933L7.12678 2.79415C7.27031 2.25875 7.82095 1.94099 8.35669 2.08446L12.4299 3.17527C12.9656 3.31874 13.2835 3.86908 13.1399 4.40446L12.0485 8.47541C11.9942 8.67795 11.8818 8.84923 11.7339 8.97626ZM12.2182 4.15765L12.2312 4.10935L12.1829 4.09641L8.10971 3.0056L8.06142 2.99267L8.04848 3.04095L6.95708 7.1119L6.94413 7.16021L6.99244 7.17314L7.9688 7.43462L8.00584 7.44454L8.02503 7.41133L8.53423 6.52985C8.92075 5.86074 9.88707 5.86074 10.2736 6.52985L11.1071 7.97271L11.1674 8.07718L11.1987 7.96064L12.2182 4.15765ZM6.1238 10.6746L6.14315 10.6691L6.15323 10.6516L7.47933 8.356L7.51193 8.29955L7.44897 8.28269L6.74546 8.09429C6.20973 7.95081 5.89184 7.40047 6.03537 6.86509L6.23824 6.10839L6.2505 6.06267L6.20551 6.04793C5.96789 5.97009 5.71411 5.92802 5.45061 5.92802C4.11301 5.92802 3.02863 7.01177 3.02863 8.3487C3.02863 9.68564 4.11301 10.7694 5.45061 10.7694C5.68413 10.7694 5.91002 10.7363 6.1238 10.6746ZM9.44721 7.00665L9.40391 6.9317L9.36061 7.00665L6.62169 11.748L6.57836 11.823H6.66498H12.1428H12.2295L12.1861 11.748L9.44721 7.00665Z" fill="#171717" stroke="#F7F8FC" stroke-width="0.1"/>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.6 KiB |
9
frontend/resources/flowy_icons/40x/m_empty_trash.svg
Normal file
9
frontend/resources/flowy_icons/40x/m_empty_trash.svg
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g opacity="0.6">
|
||||||
|
<path d="M49 10.5517C40.1201 9.7597 31.1865 9.35171 22.2799 9.35171C16.9999 9.35171 11.7199 9.5917 6.44 10.0717L1 10.5517" stroke="#171717" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M15.6652 8.12783L16.2518 4.98388C16.6785 2.70395 16.9985 1 21.5051 1H28.4918C32.9984 1 33.3451 2.79995 33.7451 5.00788L34.3317 8.12783" stroke="#171717" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M43.2662 18.137L41.5329 42.3042C41.2396 46.0721 40.9996 49 33.5596 49H16.4397C8.99973 49 8.75973 46.0721 8.46635 42.3042L6.73303 18.137" stroke="#171717" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M20.5466 35.799H29.4266" stroke="#171717" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="M18.3333 26.1992H31.6666" stroke="#171717" stroke-width="1.83" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.0 KiB |
@ -2,6 +2,7 @@
|
|||||||
"appName": "AppFlowy",
|
"appName": "AppFlowy",
|
||||||
"defaultUsername": "أنا",
|
"defaultUsername": "أنا",
|
||||||
"welcomeText": "مرحبًا بك في @: appName",
|
"welcomeText": "مرحبًا بك في @: appName",
|
||||||
|
"welcomeTo": "مرحبا بكم في",
|
||||||
"githubStarText": "نجمة على GitHub",
|
"githubStarText": "نجمة على GitHub",
|
||||||
"subscribeNewsletterText": "اشترك في النشرة الإخبارية",
|
"subscribeNewsletterText": "اشترك في النشرة الإخبارية",
|
||||||
"letsGoButtonText": "بداية سريعة",
|
"letsGoButtonText": "بداية سريعة",
|
||||||
@ -34,16 +35,39 @@
|
|||||||
"loginButtonText": "تسجيل الدخول",
|
"loginButtonText": "تسجيل الدخول",
|
||||||
"loginStartWithAnonymous": "ابدأ بجلسة خفية",
|
"loginStartWithAnonymous": "ابدأ بجلسة خفية",
|
||||||
"continueAnonymousUser": "استمر بجلسة خفية",
|
"continueAnonymousUser": "استمر بجلسة خفية",
|
||||||
|
"anonymous": "مجهول",
|
||||||
"buttonText": "تسجيل الدخول",
|
"buttonText": "تسجيل الدخول",
|
||||||
|
"signingInText": "جاري تسجيل الدخول...",
|
||||||
"forgotPassword": "هل نسيت كلمة السر؟",
|
"forgotPassword": "هل نسيت كلمة السر؟",
|
||||||
"emailHint": "بريد إلكتروني",
|
"emailHint": "بريد إلكتروني",
|
||||||
"passwordHint": "كلمة المرور",
|
"passwordHint": "كلمة المرور",
|
||||||
"dontHaveAnAccount": "ليس لديك حساب؟",
|
"dontHaveAnAccount": "ليس لديك حساب؟",
|
||||||
|
"createAccount": "إنشاء حساب",
|
||||||
"repeatPasswordEmptyError": "إعادة كلمة المرور لا يمكن أن تكون فارغة",
|
"repeatPasswordEmptyError": "إعادة كلمة المرور لا يمكن أن تكون فارغة",
|
||||||
"unmatchedPasswordError": "تكرار كلمة المرور ليس هو نفسه كلمة المرور",
|
"unmatchedPasswordError": "تكرار كلمة المرور ليس هو نفسه كلمة المرور",
|
||||||
"syncPromptMessage": "قد تستغرق مزامنة البيانات بعض الوقت. من فضلك لا تغلق هذه الصفحة",
|
"syncPromptMessage": "قد تستغرق مزامنة البيانات بعض الوقت. من فضلك لا تغلق هذه الصفحة",
|
||||||
"or": "أو",
|
"or": "أو",
|
||||||
|
"signInWithGoogle": "استكمال باستخدام Google",
|
||||||
|
"signInWithGithub": "استكمال باستخدام Github",
|
||||||
|
"signInWithDiscord": "استكمال باستخدام Discord",
|
||||||
|
"signInWithApple": "استكمال باستخدام Apple",
|
||||||
|
"continueAnotherWay": "استكمال بطريقة أخرى",
|
||||||
|
"signUpWithGoogle": "سجل باستخدام Google",
|
||||||
|
"signUpWithGithub": "سجل باستخدام Github",
|
||||||
|
"signUpWithDiscord": "سجل باستخدام Discord",
|
||||||
"signInWith": "تسجيل الدخول ب:",
|
"signInWith": "تسجيل الدخول ب:",
|
||||||
|
"signInWithEmail": "متابعة باستخدام البريد الإلكتروني",
|
||||||
|
"signInWithMagicLink": "استكمال",
|
||||||
|
"signUpWithMagicLink": "سجل باستخدام Magic Link",
|
||||||
|
"pleaseInputYourEmail": "الرجاء إدخال عنوان بريدك الإلكتروني",
|
||||||
|
"settings": "إعدادات",
|
||||||
|
"magicLinkSent": "تم إرسال Magic Link!",
|
||||||
|
"invalidEmail": "يرجى إدخال عنوان بريد إلكتروني صالح",
|
||||||
|
"alreadyHaveAnAccount": "هل لديك حساب؟",
|
||||||
|
"logIn": "تسجيل الدخول",
|
||||||
|
"generalError": "حدث خطأ ما. يرجى المحاولة مرة أخرى لاحقًا",
|
||||||
|
"limitRateError": "لأسباب أمنية، يمكنك طلب Magic Link كل 60 ثانية فقط",
|
||||||
|
"magicLinkSentDescription": "تم إرسال Magic Link إلى بريدك الإلكتروني. انقر على الرابط لإكمال تسجيل الدخول. ستنتهي صلاحية الرابط بعد 5 دقائق.",
|
||||||
"LogInWithGoogle": "تسجيل الدخول عبر جوجل",
|
"LogInWithGoogle": "تسجيل الدخول عبر جوجل",
|
||||||
"LogInWithGithub": "تسجيل الدخول مع جيثب",
|
"LogInWithGithub": "تسجيل الدخول مع جيثب",
|
||||||
"LogInWithDiscord": "تسجيل الدخول مع ديسكورد",
|
"LogInWithDiscord": "تسجيل الدخول مع ديسكورد",
|
||||||
@ -53,21 +77,50 @@
|
|||||||
"chooseWorkspace": "اختر مساحة العمل الخاصة بك",
|
"chooseWorkspace": "اختر مساحة العمل الخاصة بك",
|
||||||
"create": "قم بإنشاء مساحة عمل",
|
"create": "قم بإنشاء مساحة عمل",
|
||||||
"reset": "إعادة تعيين مساحة العمل",
|
"reset": "إعادة تعيين مساحة العمل",
|
||||||
|
"renameWorkspace": "إعادة تسمية مساحة العمل",
|
||||||
"resetWorkspacePrompt": "ستؤدي إعادة تعيين مساحة العمل إلى حذف جميع الصفحات والبيانات الموجودة بداخلها. هل أنت متأكد أنك تريد إعادة تعيين مساحة العمل؟ وبدلاً من ذلك، يمكنك الاتصال بفريق الدعم لاستعادة مساحة العمل",
|
"resetWorkspacePrompt": "ستؤدي إعادة تعيين مساحة العمل إلى حذف جميع الصفحات والبيانات الموجودة بداخلها. هل أنت متأكد أنك تريد إعادة تعيين مساحة العمل؟ وبدلاً من ذلك، يمكنك الاتصال بفريق الدعم لاستعادة مساحة العمل",
|
||||||
"hint": "مساحة العمل",
|
"hint": "مساحة العمل",
|
||||||
"notFoundError": "مساحة العمل غير موجودة",
|
"notFoundError": "مساحة العمل غير موجودة",
|
||||||
"failedToLoad": "هناك خطأ ما! فشل تحميل مساحة العمل. حاول إغلاق أي مثيل مفتوح لـ @:appName وحاول مرة أخرى.",
|
"failedToLoad": "هناك خطأ ما! فشل تحميل مساحة العمل. حاول إغلاق أي مثيل مفتوح لـ @:appName وحاول مرة أخرى.",
|
||||||
"errorActions": {
|
"errorActions": {
|
||||||
"reportIssue": "بلغ عن خطأ",
|
"reportIssue": "بلغ عن خطأ",
|
||||||
|
"reportIssueOnGithub": "الإبلاغ عن مشكلة على Github",
|
||||||
|
"exportLogFiles": "تصدير ملفات السجل",
|
||||||
"reachOut": "تواصل مع ديسكورد"
|
"reachOut": "تواصل مع ديسكورد"
|
||||||
}
|
},
|
||||||
|
"menuTitle": "مساحات العمل",
|
||||||
|
"deleteWorkspaceHintText": " هل أنت متأكد من أنك تريد حذف مساحة العمل؟ لا يمكن التراجع عن هذا الإجراء، وستختفي أي صفحات قمت بنشرها سابقاً.",
|
||||||
|
"createSuccess": "تم إنشاء مساحة العمل بنجاح",
|
||||||
|
"createFailed": "فشل في إنشاء مساحة العمل",
|
||||||
|
"deleteSuccess": "تم حذف مساحة العمل بنجاح",
|
||||||
|
"deleteFailed": "فشل في حذف مساحة العمل",
|
||||||
|
"openSuccess": "تم فتح مساحة العمل بنجاح",
|
||||||
|
"openFailed": "فشل في فتح مساحة العمل",
|
||||||
|
"renameSuccess": "تم إعادة تسمية مساحة العمل بنجاح",
|
||||||
|
"renameFailed": "فشل في إعادة تسمية مساحة العمل",
|
||||||
|
"updateIconSuccess": "تم تحديث أيقونة مساحة العمل بنجاح",
|
||||||
|
"updateIconFailed": "فشل تحديث أيقونة مساحة العمل",
|
||||||
|
"cannotDeleteTheOnlyWorkspace": "لا يمكن حذف مساحة العمل الوحيدة",
|
||||||
|
"fetchWorkspacesFailed": "فشل في الوصول لمساحات العمل",
|
||||||
|
"leaveCurrentWorkspace": "مغادرة مساحة العمل",
|
||||||
|
"leaveCurrentWorkspacePrompt": "هل أنت متأكد أنك تريد مغادرة مساحة العمل الحالية؟"
|
||||||
},
|
},
|
||||||
"shareAction": {
|
"shareAction": {
|
||||||
"buttonText": "مشاركه",
|
"buttonText": "مشاركه",
|
||||||
"workInProgress": "قريباً",
|
"workInProgress": "قريباً",
|
||||||
"markdown": "Markdown",
|
"markdown": "Markdown",
|
||||||
|
"html": "HTML",
|
||||||
|
"clipboard": "نسخ إلى الحافظة",
|
||||||
"csv": "CSV",
|
"csv": "CSV",
|
||||||
"copyLink": "نسخ الرابط"
|
"copyLink": "نسخ الرابط",
|
||||||
|
"publishToTheWeb": "نشر على الويب",
|
||||||
|
"publishToTheWebHint": "إنشاء موقع ويب مع AppFlowy",
|
||||||
|
"publish": "نشر",
|
||||||
|
"unPublish": "التراجع عن النشر",
|
||||||
|
"visitSite": "زيارة الموقع",
|
||||||
|
"exportAsTab": "تصدير كـ",
|
||||||
|
"publishTab": "نشر",
|
||||||
|
"shareTab": "مشاركة"
|
||||||
},
|
},
|
||||||
"moreAction": {
|
"moreAction": {
|
||||||
"small": "صغير",
|
"small": "صغير",
|
||||||
@ -75,7 +128,12 @@
|
|||||||
"large": "كبير",
|
"large": "كبير",
|
||||||
"fontSize": "حجم الخط",
|
"fontSize": "حجم الخط",
|
||||||
"import": "استيراد",
|
"import": "استيراد",
|
||||||
"moreOptions": "المزيد من الخيارات"
|
"moreOptions": "المزيد من الخيارات",
|
||||||
|
"wordCount": "عدد الكلمات: {}",
|
||||||
|
"charCount": "عدد الأحرف: {}",
|
||||||
|
"createdAt": "منشأ: {}",
|
||||||
|
"deleteView": "يمسح",
|
||||||
|
"duplicateView": "تكرار"
|
||||||
},
|
},
|
||||||
"importPanel": {
|
"importPanel": {
|
||||||
"textAndMarkdown": "نص و Markdown",
|
"textAndMarkdown": "نص و Markdown",
|
||||||
@ -93,7 +151,9 @@
|
|||||||
"openNewTab": "افتح في علامة تبويب جديدة",
|
"openNewTab": "افتح في علامة تبويب جديدة",
|
||||||
"moveTo": "نقل إلى",
|
"moveTo": "نقل إلى",
|
||||||
"addToFavorites": "اضافة الى المفضلة",
|
"addToFavorites": "اضافة الى المفضلة",
|
||||||
"copyLink": "نسخ الرابط"
|
"copyLink": "نسخ الرابط",
|
||||||
|
"changeIcon": "تغيير الأيقونة",
|
||||||
|
"collapseAllPages": "طي جميع الصفحات الفرعية"
|
||||||
},
|
},
|
||||||
"blankPageTitle": "صفحة فارغة",
|
"blankPageTitle": "صفحة فارغة",
|
||||||
"newPageText": "صفحة جديدة",
|
"newPageText": "صفحة جديدة",
|
||||||
@ -101,6 +161,11 @@
|
|||||||
"newGridText": "شبكة جديدة",
|
"newGridText": "شبكة جديدة",
|
||||||
"newCalendarText": "تقويم جديد",
|
"newCalendarText": "تقويم جديد",
|
||||||
"newBoardText": "سبورة جديدة",
|
"newBoardText": "سبورة جديدة",
|
||||||
|
"chat": {
|
||||||
|
"newChat": "الدردشة بالذكاء الاصطناعي",
|
||||||
|
"relatedQuestion": "ذات صلة",
|
||||||
|
"serverUnavailable": "الخدمة غير متاحة مؤقتًا. يرجى المحاولة مرة أخرى لاحقًا."
|
||||||
|
},
|
||||||
"trash": {
|
"trash": {
|
||||||
"text": "المهملات",
|
"text": "المهملات",
|
||||||
"restoreAll": "استعادة الكل",
|
"restoreAll": "استعادة الكل",
|
||||||
@ -184,11 +249,16 @@
|
|||||||
"closeSidebar": "إغلاق الشريط الجانبي",
|
"closeSidebar": "إغلاق الشريط الجانبي",
|
||||||
"openSidebar": "فتح الشريط الجانبي",
|
"openSidebar": "فتح الشريط الجانبي",
|
||||||
"personal": "شخصي",
|
"personal": "شخصي",
|
||||||
|
"private": "خاص",
|
||||||
"favorites": "المفضلة",
|
"favorites": "المفضلة",
|
||||||
"clickToHidePersonal": "انقر لإخفاء القسم الشخصي",
|
"clickToHidePersonal": "انقر لإخفاء القسم الشخصي",
|
||||||
"clickToHideFavorites": "انقر لإخفاء القسم المفضل",
|
"clickToHideFavorites": "انقر لإخفاء القسم المفضل",
|
||||||
"addAPage": "أضف صفحة",
|
"addAPage": "أضف صفحة",
|
||||||
"recent": "مؤخرًا"
|
"recent": "مؤخرًا",
|
||||||
|
"today": "اليوم",
|
||||||
|
"thisWeek": "هذا الأسبوع",
|
||||||
|
"justNow": "الآن",
|
||||||
|
"purchaseAIResponse": "شراء"
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"export": {
|
"export": {
|
||||||
@ -204,6 +274,7 @@
|
|||||||
},
|
},
|
||||||
"button": {
|
"button": {
|
||||||
"ok": "حسنا",
|
"ok": "حسنا",
|
||||||
|
"confirm": "تأكيد",
|
||||||
"done": "منتهي",
|
"done": "منتهي",
|
||||||
"cancel": "الغاء",
|
"cancel": "الغاء",
|
||||||
"signIn": "تسجيل الدخول",
|
"signIn": "تسجيل الدخول",
|
||||||
@ -231,7 +302,19 @@
|
|||||||
"helpCenter": "مركز المساعدة",
|
"helpCenter": "مركز المساعدة",
|
||||||
"add": "اضافة",
|
"add": "اضافة",
|
||||||
"yes": "نعم",
|
"yes": "نعم",
|
||||||
|
"no": "لا",
|
||||||
|
"remove": "حذف",
|
||||||
|
"copyLink": "نسخ الرابط",
|
||||||
|
"login": "تسجيل الدخول",
|
||||||
|
"logout": "تسجيل الخروج",
|
||||||
|
"deleteAccount": "حذف الحساب",
|
||||||
"back": "خلف",
|
"back": "خلف",
|
||||||
|
"more": "أكثر",
|
||||||
|
"create": "إنشاء",
|
||||||
|
"close": "إغلاق",
|
||||||
|
"next": "التالي",
|
||||||
|
"previous": "السابق",
|
||||||
|
"download": "تحميل",
|
||||||
"tryAGain": "حاول ثانية"
|
"tryAGain": "حاول ثانية"
|
||||||
},
|
},
|
||||||
"label": {
|
"label": {
|
||||||
@ -256,6 +339,10 @@
|
|||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"title": "إعدادات",
|
"title": "إعدادات",
|
||||||
|
"popupMenuItem": {
|
||||||
|
"settings": "إعدادات",
|
||||||
|
"members": "الأعضاء"
|
||||||
|
},
|
||||||
"menu": {
|
"menu": {
|
||||||
"appearance": "مظهر",
|
"appearance": "مظهر",
|
||||||
"language": "لغة",
|
"language": "لغة",
|
||||||
|
@ -1462,7 +1462,7 @@
|
|||||||
"tagName": "Tag-Name"
|
"tagName": "Tag-Name"
|
||||||
},
|
},
|
||||||
"checklist": {
|
"checklist": {
|
||||||
"taskHint": "Aufgbenbeschreibbung",
|
"taskHint": "Aufgabenbeschreibung",
|
||||||
"addNew": "Füge eine Aufgabe hinzu",
|
"addNew": "Füge eine Aufgabe hinzu",
|
||||||
"submitNewTask": "Erstellen",
|
"submitNewTask": "Erstellen",
|
||||||
"hideComplete": "Blende abgeschlossene Aufgaben aus",
|
"hideComplete": "Blende abgeschlossene Aufgaben aus",
|
||||||
|
@ -49,7 +49,7 @@
|
|||||||
"syncPromptMessage": "Syncing the data might take a while. Please don't close this page",
|
"syncPromptMessage": "Syncing the data might take a while. Please don't close this page",
|
||||||
"or": "OR",
|
"or": "OR",
|
||||||
"signInWithGoogle": "Continue with Google",
|
"signInWithGoogle": "Continue with Google",
|
||||||
"signInWithGithub": "Continue with Github",
|
"signInWithGithub": "Continue with GitHub",
|
||||||
"signInWithDiscord": "Continue with Discord",
|
"signInWithDiscord": "Continue with Discord",
|
||||||
"signInWithApple": "Continue with Apple",
|
"signInWithApple": "Continue with Apple",
|
||||||
"continueAnotherWay": "Continue another way",
|
"continueAnotherWay": "Continue another way",
|
||||||
@ -144,8 +144,8 @@
|
|||||||
"rename": "Rename",
|
"rename": "Rename",
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"duplicate": "Duplicate",
|
"duplicate": "Duplicate",
|
||||||
"unfavorite": "Remove from favorites",
|
"unfavorite": "Remove from Favorites",
|
||||||
"favorite": "Add to favorites",
|
"favorite": "Add to Favorites",
|
||||||
"openNewTab": "Open in a new tab",
|
"openNewTab": "Open in a new tab",
|
||||||
"moveTo": "Move to",
|
"moveTo": "Move to",
|
||||||
"addToFavorites": "Add to Favorites",
|
"addToFavorites": "Add to Favorites",
|
||||||
@ -204,8 +204,8 @@
|
|||||||
},
|
},
|
||||||
"mobile": {
|
"mobile": {
|
||||||
"actions": "Trash Actions",
|
"actions": "Trash Actions",
|
||||||
"empty": "Trash Bin is Empty",
|
"empty": "No pages or spaces in Trash",
|
||||||
"emptyDescription": "You don't have any deleted file",
|
"emptyDescription": "Move things you don't need to the Trash.",
|
||||||
"isDeleted": "is deleted",
|
"isDeleted": "is deleted",
|
||||||
"isRestored": "is restored"
|
"isRestored": "is restored"
|
||||||
},
|
},
|
||||||
@ -347,9 +347,9 @@
|
|||||||
"putback": "Put Back",
|
"putback": "Put Back",
|
||||||
"update": "Update",
|
"update": "Update",
|
||||||
"share": "Share",
|
"share": "Share",
|
||||||
"removeFromFavorites": "Remove from favorites",
|
"removeFromFavorites": "Remove from Favorites",
|
||||||
"removeFromRecent": "Remove from recent",
|
"removeFromRecent": "Remove from Recent",
|
||||||
"addToFavorites": "Add to favorites",
|
"addToFavorites": "Add to Favorites",
|
||||||
"favoriteSuccessfully": "Favorited success",
|
"favoriteSuccessfully": "Favorited success",
|
||||||
"unfavoriteSuccessfully": "Unfavorited success",
|
"unfavoriteSuccessfully": "Unfavorited success",
|
||||||
"duplicateSuccessfully": "Duplicated successfully",
|
"duplicateSuccessfully": "Duplicated successfully",
|
||||||
@ -368,7 +368,7 @@
|
|||||||
"deleteAccount": "Delete account",
|
"deleteAccount": "Delete account",
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"signInGoogle": "Continue with Google",
|
"signInGoogle": "Continue with Google",
|
||||||
"signInGithub": "Continue with Github",
|
"signInGithub": "Continue with GitHub",
|
||||||
"signInDiscord": "Continue with Discord",
|
"signInDiscord": "Continue with Discord",
|
||||||
"more": "More",
|
"more": "More",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
@ -747,13 +747,14 @@
|
|||||||
"title": "AI Max",
|
"title": "AI Max",
|
||||||
"description": "Unlimited AI responses powered by GPT-4o, Claude 3.5 Sonnet, and more",
|
"description": "Unlimited AI responses powered by GPT-4o, Claude 3.5 Sonnet, and more",
|
||||||
"price": "{}",
|
"price": "{}",
|
||||||
"priceInfo": "per user per month billed annually"
|
"priceInfo": "Per user per month billed annually",
|
||||||
|
"recommend": ""
|
||||||
},
|
},
|
||||||
"aiOnDevice": {
|
"aiOnDevice": {
|
||||||
"title": "AI On-device for Mac",
|
"title": "AI On-device for Mac",
|
||||||
"description": "Run Mistral 7B, LLAMA 3, and more local models on your machine",
|
"description": "Run Mistral 7B, LLAMA 3, and more local models on your machine",
|
||||||
"price": "{}",
|
"price": "{}",
|
||||||
"priceInfo": "per user per month billed annually",
|
"priceInfo": "Per user per month billed annually",
|
||||||
"recommend": "Recommend M1 or newer"
|
"recommend": "Recommend M1 or newer"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -824,13 +825,13 @@
|
|||||||
"title": "Free",
|
"title": "Free",
|
||||||
"description": "For individuals up to 2 members to organize everything",
|
"description": "For individuals up to 2 members to organize everything",
|
||||||
"price": "{}",
|
"price": "{}",
|
||||||
"priceInfo": "free forever"
|
"priceInfo": "Free forever"
|
||||||
},
|
},
|
||||||
"proPlan": {
|
"proPlan": {
|
||||||
"title": "Pro",
|
"title": "Pro",
|
||||||
"description": "For small teams to manage projects and team knowledge",
|
"description": "For small teams to manage projects and team knowledge",
|
||||||
"price": "{}",
|
"price": "{}",
|
||||||
"priceInfo": "per user per month \nbilled annually\n\n{} billed monthly"
|
"priceInfo": "Per user per month \nbilled annually\n\n{} billed monthly"
|
||||||
},
|
},
|
||||||
"planLabels": {
|
"planLabels": {
|
||||||
"itemOne": "Workspaces",
|
"itemOne": "Workspaces",
|
||||||
@ -839,26 +840,29 @@
|
|||||||
"itemFour": "Real-time collaboration",
|
"itemFour": "Real-time collaboration",
|
||||||
"itemFive": "Mobile app",
|
"itemFive": "Mobile app",
|
||||||
"itemSix": "AI Responses",
|
"itemSix": "AI Responses",
|
||||||
|
"itemFileUpload": "File uploads",
|
||||||
"tooltipSix": "Lifetime means the number of responses never reset",
|
"tooltipSix": "Lifetime means the number of responses never reset",
|
||||||
"intelligentSearch": "Intelligent search",
|
"intelligentSearch": "Intelligent search",
|
||||||
"tooltipSeven": "Allows you to customize part of the URL for your workspace"
|
"tooltipSeven": "Allows you to customize part of the URL for your workspace"
|
||||||
},
|
},
|
||||||
"freeLabels": {
|
"freeLabels": {
|
||||||
"itemOne": "charged per workspace",
|
"itemOne": "Charged per workspace",
|
||||||
"itemTwo": "up to 2",
|
"itemTwo": "Up to 2",
|
||||||
"itemThree": "5 GB",
|
"itemThree": "5 GB",
|
||||||
"itemFour": "yes",
|
"itemFour": "yes",
|
||||||
"itemFive": "yes",
|
"itemFive": "yes",
|
||||||
"itemSix": "100 lifetime",
|
"itemSix": "100 lifetime",
|
||||||
|
"itemFileUpload": "Up to 7 MB",
|
||||||
"intelligentSearch": "Intelligent search"
|
"intelligentSearch": "Intelligent search"
|
||||||
},
|
},
|
||||||
"proLabels": {
|
"proLabels": {
|
||||||
"itemOne": "charged per workspace",
|
"itemOne": "Charged per workspace",
|
||||||
"itemTwo": "up to 10",
|
"itemTwo": "Up to 10",
|
||||||
"itemThree": "unlimited",
|
"itemThree": "Unlimited",
|
||||||
"itemFour": "yes",
|
"itemFour": "yes",
|
||||||
"itemFive": "yes",
|
"itemFive": "yes",
|
||||||
"itemSix": "unlimited",
|
"itemSix": "Unlimited",
|
||||||
|
"itemFileUpload": "Unlimited",
|
||||||
"intelligentSearch": "Intelligent search"
|
"intelligentSearch": "Intelligent search"
|
||||||
},
|
},
|
||||||
"paymentSuccess": {
|
"paymentSuccess": {
|
||||||
@ -993,16 +997,16 @@
|
|||||||
"archiveAll": "Archive all"
|
"archiveAll": "Archive all"
|
||||||
},
|
},
|
||||||
"emptyInbox": {
|
"emptyInbox": {
|
||||||
"title": "No notifications yet",
|
"title": "Inbox Zero!",
|
||||||
"description": "You'll be notified here for @mentions"
|
"description": "Set reminders to receive notifications here."
|
||||||
},
|
},
|
||||||
"emptyUnread": {
|
"emptyUnread": {
|
||||||
"title": "No unread notifications",
|
"title": "No unread notifications",
|
||||||
"description": "You're all caught up!"
|
"description": "You're all caught up!"
|
||||||
},
|
},
|
||||||
"emptyArchived": {
|
"emptyArchived": {
|
||||||
"title": "No archived notifications",
|
"title": "No archived",
|
||||||
"description": "You haven't archived any notifications yet"
|
"description": "Archived notifications will appear here."
|
||||||
},
|
},
|
||||||
"tabs": {
|
"tabs": {
|
||||||
"inbox": "Inbox",
|
"inbox": "Inbox",
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
"loginButtonText": "Connexion",
|
"loginButtonText": "Connexion",
|
||||||
"loginStartWithAnonymous": "Lancer avec une session anonyme",
|
"loginStartWithAnonymous": "Lancer avec une session anonyme",
|
||||||
"continueAnonymousUser": "Continuer avec une session anonyme",
|
"continueAnonymousUser": "Continuer avec une session anonyme",
|
||||||
|
"anonymous": "Anonyme",
|
||||||
"buttonText": "Se connecter",
|
"buttonText": "Se connecter",
|
||||||
"signingInText": "Connexion en cours...",
|
"signingInText": "Connexion en cours...",
|
||||||
"forgotPassword": "Mot de passe oublié ?",
|
"forgotPassword": "Mot de passe oublié ?",
|
||||||
@ -50,6 +51,8 @@
|
|||||||
"signInWithGoogle": "Continuer avec Google",
|
"signInWithGoogle": "Continuer avec Google",
|
||||||
"signInWithGithub": "Continuer avec Github",
|
"signInWithGithub": "Continuer avec Github",
|
||||||
"signInWithDiscord": "Continuer avec Discord",
|
"signInWithDiscord": "Continuer avec Discord",
|
||||||
|
"signInWithApple": "Se connecter via Apple",
|
||||||
|
"continueAnotherWay": "Continuer via une autre méthode",
|
||||||
"signUpWithGoogle": "S'inscrire avec Google",
|
"signUpWithGoogle": "S'inscrire avec Google",
|
||||||
"signUpWithGithub": "S'inscrire avec Github",
|
"signUpWithGithub": "S'inscrire avec Github",
|
||||||
"signUpWithDiscord": "S'inscrire avec Discord",
|
"signUpWithDiscord": "S'inscrire avec Discord",
|
||||||
@ -166,6 +169,7 @@
|
|||||||
"inputMessageHint": "Demandez à l'IA @:appName",
|
"inputMessageHint": "Demandez à l'IA @:appName",
|
||||||
"inputLocalAIMessageHint": "Demander l'IA locale @:appName",
|
"inputLocalAIMessageHint": "Demander l'IA locale @:appName",
|
||||||
"unsupportedCloudPrompt": "Cette fonctionnalité n'est disponible que lors de l'utilisation du cloud @:appName",
|
"unsupportedCloudPrompt": "Cette fonctionnalité n'est disponible que lors de l'utilisation du cloud @:appName",
|
||||||
|
"relatedQuestion": "Questions Associées",
|
||||||
"serverUnavailable": "Service temporairement indisponible. Veuillez réessayer ultérieurement.",
|
"serverUnavailable": "Service temporairement indisponible. Veuillez réessayer ultérieurement.",
|
||||||
"aiServerUnavailable": "🌈 Oh-oh ! 🌈. Une licorne a mangé notre réponse. Veuillez réessayer !",
|
"aiServerUnavailable": "🌈 Oh-oh ! 🌈. Une licorne a mangé notre réponse. Veuillez réessayer !",
|
||||||
"clickToRetry": "Cliquez pour réessayer",
|
"clickToRetry": "Cliquez pour réessayer",
|
||||||
@ -379,6 +383,7 @@
|
|||||||
"next": "Suivant",
|
"next": "Suivant",
|
||||||
"previous": "Précédent",
|
"previous": "Précédent",
|
||||||
"submit": "Soumettre",
|
"submit": "Soumettre",
|
||||||
|
"download": "Télécharger",
|
||||||
"tryAGain": "Réessayer"
|
"tryAGain": "Réessayer"
|
||||||
},
|
},
|
||||||
"label": {
|
"label": {
|
||||||
@ -403,6 +408,12 @@
|
|||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"title": "Paramètres",
|
"title": "Paramètres",
|
||||||
|
"popupMenuItem": {
|
||||||
|
"settings": "Paramètres",
|
||||||
|
"members": "Membres",
|
||||||
|
"trash": "Corbeille",
|
||||||
|
"helpAndSupport": "Aide & Support"
|
||||||
|
},
|
||||||
"accountPage": {
|
"accountPage": {
|
||||||
"menuLabel": "Mon compte",
|
"menuLabel": "Mon compte",
|
||||||
"title": "Mon compte",
|
"title": "Mon compte",
|
||||||
@ -667,6 +678,7 @@
|
|||||||
"keys": {
|
"keys": {
|
||||||
"enableAISearchTitle": "Recherche IA",
|
"enableAISearchTitle": "Recherche IA",
|
||||||
"aiSettingsDescription": "Choisissez votre modèle préféré pour alimenter AppFlowy AI. Inclut désormais GPT 4-o, Claude 3,5, Llama 3.1 et Mistral 7B",
|
"aiSettingsDescription": "Choisissez votre modèle préféré pour alimenter AppFlowy AI. Inclut désormais GPT 4-o, Claude 3,5, Llama 3.1 et Mistral 7B",
|
||||||
|
"loginToEnableAIFeature": "Les fonctionnalités d'IA sont accessibles uniquement après s'être connecté avec @:appName Cloud. Pour créer un compte @:appName, voir dans la rubrique 'Mon Compte'.",
|
||||||
"llmModel": "Modèle de langage",
|
"llmModel": "Modèle de langage",
|
||||||
"llmModelType": "Type de modèle de langue",
|
"llmModelType": "Type de modèle de langue",
|
||||||
"downloadLLMPrompt": "Télécharger {}",
|
"downloadLLMPrompt": "Télécharger {}",
|
||||||
@ -699,14 +711,21 @@
|
|||||||
"planUsage": {
|
"planUsage": {
|
||||||
"title": "Résumé de l'utilisation du plan",
|
"title": "Résumé de l'utilisation du plan",
|
||||||
"storageLabel": "Stockage",
|
"storageLabel": "Stockage",
|
||||||
|
"storageUsage": "{} sur {} GB",
|
||||||
"unlimitedStorageLabel": "Stockage illimité",
|
"unlimitedStorageLabel": "Stockage illimité",
|
||||||
"collaboratorsLabel": "Membres",
|
"collaboratorsLabel": "Membres",
|
||||||
|
"collaboratorsUsage": "{} sur {}",
|
||||||
"aiResponseLabel": "Réponses de l'IA",
|
"aiResponseLabel": "Réponses de l'IA",
|
||||||
|
"aiResponseUsage": "{} sur {}",
|
||||||
|
"unlimitedAILabel": "Réponses illimitées",
|
||||||
|
"proBadge": "Pro",
|
||||||
|
"aiMaxBadge": "AI Max",
|
||||||
"memberProToggle": "Plus de membres et une IA illimitée",
|
"memberProToggle": "Plus de membres et une IA illimitée",
|
||||||
"aiMaxToggle": "IA illimitée et accès à des modèles avancés",
|
"aiMaxToggle": "IA illimitée et accès à des modèles avancés",
|
||||||
"aiOnDeviceToggle": "IA locale pour une confidentialité ultime",
|
"aiOnDeviceToggle": "IA locale pour une confidentialité ultime",
|
||||||
"aiCredit": {
|
"aiCredit": {
|
||||||
"title": "Ajoutez des crédit IA @:appName ",
|
"title": "Ajoutez des crédit IA @:appName ",
|
||||||
|
"price": "{}",
|
||||||
"priceDescription": "pour 1 000 crédits",
|
"priceDescription": "pour 1 000 crédits",
|
||||||
"purchase": "Acheter l'IA",
|
"purchase": "Acheter l'IA",
|
||||||
"infoItemOne": "10 000 réponses par base de données",
|
"infoItemOne": "10 000 réponses par base de données",
|
||||||
@ -715,6 +734,7 @@
|
|||||||
"currentPlan": {
|
"currentPlan": {
|
||||||
"bannerLabel": "Plan actuel",
|
"bannerLabel": "Plan actuel",
|
||||||
"freeTitle": "Gratuit",
|
"freeTitle": "Gratuit",
|
||||||
|
"proTitle": "Pro",
|
||||||
"teamTitle": "Équipe",
|
"teamTitle": "Équipe",
|
||||||
"freeInfo": "Idéal pour les particuliers jusqu'à 2 membres pour tout organiser",
|
"freeInfo": "Idéal pour les particuliers jusqu'à 2 membres pour tout organiser",
|
||||||
"proInfo": "Idéal pour les petites et moyennes équipes jusqu'à 10 membres.",
|
"proInfo": "Idéal pour les petites et moyennes équipes jusqu'à 10 membres.",
|
||||||
@ -727,10 +747,13 @@
|
|||||||
"addLabel": "Ajouter",
|
"addLabel": "Ajouter",
|
||||||
"activeLabel": "Ajouté",
|
"activeLabel": "Ajouté",
|
||||||
"aiMax": {
|
"aiMax": {
|
||||||
|
"title": "AI Max",
|
||||||
|
"price": "{}",
|
||||||
"priceInfo": "par utilisateur et par mois, facturé annuellement"
|
"priceInfo": "par utilisateur et par mois, facturé annuellement"
|
||||||
},
|
},
|
||||||
"aiOnDevice": {
|
"aiOnDevice": {
|
||||||
"description": "Exécutez Mistral 7B, LLAMA 3 et d'autres modèles locaux sur votre machine",
|
"description": "Exécutez Mistral 7B, LLAMA 3 et d'autres modèles locaux sur votre machine",
|
||||||
|
"price": "{}",
|
||||||
"priceInfo": "par utilisateur et par mois, facturé annuellement",
|
"priceInfo": "par utilisateur et par mois, facturé annuellement",
|
||||||
"recommend": "Recommand2 M1 ou plus récent"
|
"recommend": "Recommand2 M1 ou plus récent"
|
||||||
}
|
}
|
||||||
@ -746,7 +769,9 @@
|
|||||||
"menuLabel": "Facturation",
|
"menuLabel": "Facturation",
|
||||||
"title": "Facturation",
|
"title": "Facturation",
|
||||||
"plan": {
|
"plan": {
|
||||||
|
"title": "Plan",
|
||||||
"freeLabel": "Gratuit",
|
"freeLabel": "Gratuit",
|
||||||
|
"proLabel": "Pro",
|
||||||
"planButtonLabel": "Changer de plan",
|
"planButtonLabel": "Changer de plan",
|
||||||
"billingPeriod": "Période de facturation",
|
"billingPeriod": "Période de facturation",
|
||||||
"periodButtonLabel": "Changer la période "
|
"periodButtonLabel": "Changer la période "
|
||||||
@ -772,6 +797,10 @@
|
|||||||
"description": "Débloquez une IA illimitée locale sur votre appareil",
|
"description": "Débloquez une IA illimitée locale sur votre appareil",
|
||||||
"activeDescription": "Prochaine facture due le {}",
|
"activeDescription": "Prochaine facture due le {}",
|
||||||
"canceledDescription": "IA locale pour Mac sera disponible jusqu'au {}"
|
"canceledDescription": "IA locale pour Mac sera disponible jusqu'au {}"
|
||||||
|
},
|
||||||
|
"removeDialog": {
|
||||||
|
"title": "Supprimer",
|
||||||
|
"description": "Êtes-vous sûr de vouloir supprimer {plan}? Vous perdrez l'accès aux fonctionnalités et bénéfices de {plan} de manière immédiate."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"currentPeriodBadge": "ACTUEL",
|
"currentPeriodBadge": "ACTUEL",
|
||||||
@ -786,15 +815,20 @@
|
|||||||
"planFeatures": "Plan\nCaractéristiques",
|
"planFeatures": "Plan\nCaractéristiques",
|
||||||
"current": "Actuel",
|
"current": "Actuel",
|
||||||
"actions": {
|
"actions": {
|
||||||
|
"upgrade": "Améliorer",
|
||||||
|
"downgrade": "Rétrograder",
|
||||||
"current": "Actuel"
|
"current": "Actuel"
|
||||||
},
|
},
|
||||||
"freePlan": {
|
"freePlan": {
|
||||||
"title": "Gratuit",
|
"title": "Gratuit",
|
||||||
"description": "Pour les particuliers jusqu'à 2 membres pour tout organiser",
|
"description": "Pour les particuliers jusqu'à 2 membres pour tout organiser",
|
||||||
|
"price": "{}",
|
||||||
"priceInfo": "gratuit pour toujours"
|
"priceInfo": "gratuit pour toujours"
|
||||||
},
|
},
|
||||||
"proPlan": {
|
"proPlan": {
|
||||||
|
"title": "Pro",
|
||||||
"description": "Pour les petites équipes pour gérer les projets et les bases de connaissance",
|
"description": "Pour les petites équipes pour gérer les projets et les bases de connaissance",
|
||||||
|
"price": "{}",
|
||||||
"priceInfo": "par utilisateur et par mois\nfacturé annuellement\n\n{} facturé mensuellement"
|
"priceInfo": "par utilisateur et par mois\nfacturé annuellement\n\n{} facturé mensuellement"
|
||||||
},
|
},
|
||||||
"planLabels": {
|
"planLabels": {
|
||||||
@ -833,6 +867,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"cancelSurveyDialog": {
|
"cancelSurveyDialog": {
|
||||||
|
"title": "Désolé de vous voir partir",
|
||||||
"commonOther": "Autre",
|
"commonOther": "Autre",
|
||||||
"otherHint": "Écrivez votre réponse ici",
|
"otherHint": "Écrivez votre réponse ici",
|
||||||
"questionOne": {
|
"questionOne": {
|
||||||
@ -944,7 +979,8 @@
|
|||||||
},
|
},
|
||||||
"action": {
|
"action": {
|
||||||
"markAsRead": "Marquer comme lu",
|
"markAsRead": "Marquer comme lu",
|
||||||
"multipleChoice": "Sélectionnez plus"
|
"multipleChoice": "Sélectionnez plus",
|
||||||
|
"archive": "Archiver"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"settings": "Paramètres",
|
"settings": "Paramètres",
|
||||||
@ -970,6 +1006,7 @@
|
|||||||
},
|
},
|
||||||
"refreshSuccess": "Les notifications ont été actualisées avec succès",
|
"refreshSuccess": "Les notifications ont été actualisées avec succès",
|
||||||
"titles": {
|
"titles": {
|
||||||
|
"notifications": "Notifications",
|
||||||
"reminder": "Rappel"
|
"reminder": "Rappel"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -1073,12 +1110,15 @@
|
|||||||
"memberLimitExceeded": "Vous avez atteint la limite maximale de membres autorisée pour votre compte. Si vous souhaitez ajouter d'autres membres pour continuer votre travail, veuillez en faire la demande sur Github.",
|
"memberLimitExceeded": "Vous avez atteint la limite maximale de membres autorisée pour votre compte. Si vous souhaitez ajouter d'autres membres pour continuer votre travail, veuillez en faire la demande sur Github.",
|
||||||
"memberLimitExceededUpgrade": "mise à niveau",
|
"memberLimitExceededUpgrade": "mise à niveau",
|
||||||
"memberLimitExceededPro": "Limite de membres atteinte, si vous avez besoin de plus de membres, contactez ",
|
"memberLimitExceededPro": "Limite de membres atteinte, si vous avez besoin de plus de membres, contactez ",
|
||||||
|
"memberLimitExceededProContact": "support@appflowy.io",
|
||||||
"failedToAddMember": "Échec de l'ajout d'un membre",
|
"failedToAddMember": "Échec de l'ajout d'un membre",
|
||||||
"addMemberSuccess": "Membre ajouté avec succès",
|
"addMemberSuccess": "Membre ajouté avec succès",
|
||||||
"removeMember": "Supprimer un membre",
|
"removeMember": "Supprimer un membre",
|
||||||
"areYouSureToRemoveMember": "Êtes-vous sûr de vouloir supprimer ce membre ?",
|
"areYouSureToRemoveMember": "Êtes-vous sûr de vouloir supprimer ce membre ?",
|
||||||
"inviteMemberSuccess": "L'invitation a été envoyée avec succès",
|
"inviteMemberSuccess": "L'invitation a été envoyée avec succès",
|
||||||
"failedToInviteMember": "Impossible d'inviter un membre"
|
"failedToInviteMember": "Impossible d'inviter un membre",
|
||||||
|
"workspaceMembersError": "Une erreur s'est produite",
|
||||||
|
"workspaceMembersErrorDescription": "Nous n'avons pas pu charger la liste des membres. Veuillez essayer plus tard s'il vous plait"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"files": {
|
"files": {
|
||||||
@ -1281,6 +1321,8 @@
|
|||||||
"urlFieldName": "URL",
|
"urlFieldName": "URL",
|
||||||
"checklistFieldName": "Check-list",
|
"checklistFieldName": "Check-list",
|
||||||
"relationFieldName": "Relation",
|
"relationFieldName": "Relation",
|
||||||
|
"summaryFieldName": "Résume IA",
|
||||||
|
"translateFieldName": "Traduction IA",
|
||||||
"translateTo": "Traduire en",
|
"translateTo": "Traduire en",
|
||||||
"numberFormat": "Format du nombre",
|
"numberFormat": "Format du nombre",
|
||||||
"dateFormat": "Format de la date",
|
"dateFormat": "Format de la date",
|
||||||
@ -1450,11 +1492,13 @@
|
|||||||
"heading1": "Titre 1",
|
"heading1": "Titre 1",
|
||||||
"heading2": "Titre 2",
|
"heading2": "Titre 2",
|
||||||
"heading3": "Titre 3",
|
"heading3": "Titre 3",
|
||||||
|
"image": "Image",
|
||||||
"bulletedList": "Liste à puces",
|
"bulletedList": "Liste à puces",
|
||||||
"numberedList": "Liste numérotée",
|
"numberedList": "Liste numérotée",
|
||||||
"linkedDoc": "Lien vers la page",
|
"linkedDoc": "Lien vers la page",
|
||||||
"grid": "Grille",
|
"grid": "Grille",
|
||||||
"linkedGrid": "Grille liée",
|
"linkedGrid": "Grille liée",
|
||||||
|
"kanban": "Kanban",
|
||||||
"linkedKanban": "Kanban lié",
|
"linkedKanban": "Kanban lié",
|
||||||
"calendar": "Calendrier",
|
"calendar": "Calendrier",
|
||||||
"linkedCalendar": "Calendrier lié",
|
"linkedCalendar": "Calendrier lié",
|
||||||
@ -1462,6 +1506,7 @@
|
|||||||
"divider": "Diviseur",
|
"divider": "Diviseur",
|
||||||
"table": "Tableau",
|
"table": "Tableau",
|
||||||
"mathEquation": "Équation mathématique",
|
"mathEquation": "Équation mathématique",
|
||||||
|
"code": "Code",
|
||||||
"emoji": "Émoji",
|
"emoji": "Émoji",
|
||||||
"aiWriter": "Rédacteur IA",
|
"aiWriter": "Rédacteur IA",
|
||||||
"dateOrReminder": "Date ou rappel",
|
"dateOrReminder": "Date ou rappel",
|
||||||
@ -1567,7 +1612,9 @@
|
|||||||
},
|
},
|
||||||
"photoGallery": {
|
"photoGallery": {
|
||||||
"name": "Galerie de photos",
|
"name": "Galerie de photos",
|
||||||
|
"imageKeyword": "image",
|
||||||
"imageGalleryKeyword": "Galerie d'images",
|
"imageGalleryKeyword": "Galerie d'images",
|
||||||
|
"photoKeyword": "photo",
|
||||||
"photoBrowserKeyword": "navigateur de photos",
|
"photoBrowserKeyword": "navigateur de photos",
|
||||||
"galleryKeyword": "galerie",
|
"galleryKeyword": "galerie",
|
||||||
"addImageTooltip": "Ajouter une image",
|
"addImageTooltip": "Ajouter une image",
|
||||||
@ -1700,6 +1747,7 @@
|
|||||||
"openLocalImage": "Ouvrir l'image",
|
"openLocalImage": "Ouvrir l'image",
|
||||||
"downloadImage": "Télécharger l'image",
|
"downloadImage": "Télécharger l'image",
|
||||||
"closeViewer": "Fermer la visionneuse",
|
"closeViewer": "Fermer la visionneuse",
|
||||||
|
"scalePercentage": "{}%",
|
||||||
"deleteImageTooltip": "Supprimer l'image"
|
"deleteImageTooltip": "Supprimer l'image"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -1708,7 +1756,8 @@
|
|||||||
"codeBlock": {
|
"codeBlock": {
|
||||||
"language": {
|
"language": {
|
||||||
"label": "Langue",
|
"label": "Langue",
|
||||||
"placeholder": "Choisir la langue"
|
"placeholder": "Choisir la langue",
|
||||||
|
"auto": "Auto"
|
||||||
},
|
},
|
||||||
"copyTooltip": "Copier le contenu du bloc de code",
|
"copyTooltip": "Copier le contenu du bloc de code",
|
||||||
"searchLanguageHint": "Rechercher une langue",
|
"searchLanguageHint": "Rechercher une langue",
|
||||||
@ -1793,6 +1842,7 @@
|
|||||||
"failedToLoad": "Échec du chargement de la vue du tableau"
|
"failedToLoad": "Échec du chargement de la vue du tableau"
|
||||||
},
|
},
|
||||||
"dateCondition": {
|
"dateCondition": {
|
||||||
|
"weekOf": "Semaine de {} - {}",
|
||||||
"today": "Aujourd'hui",
|
"today": "Aujourd'hui",
|
||||||
"yesterday": "Hier",
|
"yesterday": "Hier",
|
||||||
"tomorrow": "Demain",
|
"tomorrow": "Demain",
|
||||||
|
@ -2,12 +2,14 @@
|
|||||||
"appName": "AppFlowy",
|
"appName": "AppFlowy",
|
||||||
"defaultUsername": "Me",
|
"defaultUsername": "Me",
|
||||||
"welcomeText": "Benvenuto in @:appName",
|
"welcomeText": "Benvenuto in @:appName",
|
||||||
|
"welcomeTo": "Benvenuto a",
|
||||||
"githubStarText": "Vota su GitHub",
|
"githubStarText": "Vota su GitHub",
|
||||||
"subscribeNewsletterText": "Sottoscrivi la Newsletter",
|
"subscribeNewsletterText": "Sottoscrivi la Newsletter",
|
||||||
"letsGoButtonText": "Andiamo",
|
"letsGoButtonText": "Andiamo",
|
||||||
"title": "Titolo",
|
"title": "Titolo",
|
||||||
"youCanAlso": "Puoi anche",
|
"youCanAlso": "Puoi anche",
|
||||||
"and": "E",
|
"and": "E",
|
||||||
|
"failedToOpenUrl": "Apertura URL fallita: {}",
|
||||||
"blockActions": {
|
"blockActions": {
|
||||||
"addBelowTooltip": "Fare clic per aggiungere di seguito",
|
"addBelowTooltip": "Fare clic per aggiungere di seguito",
|
||||||
"addAboveCmd": "Alt+clic",
|
"addAboveCmd": "Alt+clic",
|
||||||
@ -35,15 +37,35 @@
|
|||||||
"loginStartWithAnonymous": "Inizia con una sessione anonima",
|
"loginStartWithAnonymous": "Inizia con una sessione anonima",
|
||||||
"continueAnonymousUser": "Continua con una sessione anonima",
|
"continueAnonymousUser": "Continua con una sessione anonima",
|
||||||
"buttonText": "Accedi",
|
"buttonText": "Accedi",
|
||||||
|
"signingInText": "Accesso in corso...",
|
||||||
"forgotPassword": "Password Dimentica?",
|
"forgotPassword": "Password Dimentica?",
|
||||||
"emailHint": "Email",
|
"emailHint": "Email",
|
||||||
"passwordHint": "Password",
|
"passwordHint": "Password",
|
||||||
"dontHaveAnAccount": "Non hai un account?",
|
"dontHaveAnAccount": "Non hai un account?",
|
||||||
|
"createAccount": "Crea account",
|
||||||
"repeatPasswordEmptyError": "La password ripetuta non può essere vuota",
|
"repeatPasswordEmptyError": "La password ripetuta non può essere vuota",
|
||||||
"unmatchedPasswordError": "La password ripetuta non è uguale alla password",
|
"unmatchedPasswordError": "La password ripetuta non è uguale alla password",
|
||||||
"syncPromptMessage": "La sincronizzazione dei dati potrebbe richiedere del tempo. Per favore, non chiudere questa pagina",
|
"syncPromptMessage": "La sincronizzazione dei dati potrebbe richiedere del tempo. Per favore, non chiudere questa pagina",
|
||||||
"or": "O",
|
"or": "O",
|
||||||
|
"signInWithGoogle": "Continua con Google",
|
||||||
|
"signInWithGithub": "Continua con Github",
|
||||||
|
"signInWithDiscord": "Continua con Discord",
|
||||||
|
"signUpWithGoogle": "Registrati con Google",
|
||||||
|
"signUpWithGithub": "Registrati con Github",
|
||||||
|
"signUpWithDiscord": "Registrati con Discord",
|
||||||
"signInWith": "Loggati con:",
|
"signInWith": "Loggati con:",
|
||||||
|
"signInWithEmail": "Continua con Email",
|
||||||
|
"signInWithMagicLink": "Continua",
|
||||||
|
"signUpWithMagicLink": "Registrati con un Link Magico",
|
||||||
|
"pleaseInputYourEmail": "Per favore, inserisci il tuo indirizzo email",
|
||||||
|
"settings": "Impostazioni",
|
||||||
|
"magicLinkSent": "Link Magico inviato!",
|
||||||
|
"invalidEmail": "Per favore, inserisci un indirizzo email valido",
|
||||||
|
"alreadyHaveAnAccount": "Hai già un account?",
|
||||||
|
"logIn": "Accedi",
|
||||||
|
"generalError": "Qualcosa è andato storto. Per favore, riprova più tardi",
|
||||||
|
"limitRateError": "Per ragioni di sicurezza, puoi richiedere un link magico ogni 60 secondi",
|
||||||
|
"magicLinkSentDescription": "Un Link Magico è stato inviato alla tua email. Clicca il link per completare il tuo accesso. Il link scadrà dopo 5 minuti.",
|
||||||
"LogInWithGoogle": "Accedi con Google",
|
"LogInWithGoogle": "Accedi con Google",
|
||||||
"LogInWithGithub": "Accedi con Github",
|
"LogInWithGithub": "Accedi con Github",
|
||||||
"LogInWithDiscord": "Accedi con Discord",
|
"LogInWithDiscord": "Accedi con Discord",
|
||||||
@ -53,6 +75,7 @@
|
|||||||
"chooseWorkspace": "Scegli il tuo spazio di lavoro",
|
"chooseWorkspace": "Scegli il tuo spazio di lavoro",
|
||||||
"create": "Crea spazio di lavoro",
|
"create": "Crea spazio di lavoro",
|
||||||
"reset": "Ripristina lo spazio di lavoro",
|
"reset": "Ripristina lo spazio di lavoro",
|
||||||
|
"renameWorkspace": "Rinomina workspace",
|
||||||
"resetWorkspacePrompt": "Il ripristino dello spazio di lavoro eliminerà tutte le pagine e i dati al suo interno. Sei sicuro di voler ripristinare lo spazio di lavoro? In alternativa, puoi contattare il team di supporto per ristabilire lo spazio di lavoro",
|
"resetWorkspacePrompt": "Il ripristino dello spazio di lavoro eliminerà tutte le pagine e i dati al suo interno. Sei sicuro di voler ripristinare lo spazio di lavoro? In alternativa, puoi contattare il team di supporto per ristabilire lo spazio di lavoro",
|
||||||
"hint": "spazio di lavoro",
|
"hint": "spazio di lavoro",
|
||||||
"notFoundError": "Spazio di lavoro non trovato",
|
"notFoundError": "Spazio di lavoro non trovato",
|
||||||
@ -62,14 +85,39 @@
|
|||||||
"reportIssueOnGithub": "Segnalate un problema su Github",
|
"reportIssueOnGithub": "Segnalate un problema su Github",
|
||||||
"exportLogFiles": "Esporta i file di log",
|
"exportLogFiles": "Esporta i file di log",
|
||||||
"reachOut": "Contattaci su Discord"
|
"reachOut": "Contattaci su Discord"
|
||||||
}
|
},
|
||||||
|
"deleteWorkspaceHintText": "Sei sicuro di voler cancellare la workspace? Questa azione non è reversibile, e ogni pagina che hai pubblicato sarà rimossa.",
|
||||||
|
"createSuccess": "Workspace creata con successo",
|
||||||
|
"createFailed": "Creazione workspace fallita",
|
||||||
|
"createLimitExceeded": "Hai raggiunto il numero massimo di workspace permesse per il tuo account. Se hai bisogno di ulteriori workspace per continuare il tuo lavoro, per favore fai richiesta su Github",
|
||||||
|
"deleteSuccess": "Workspace cancellata con successo",
|
||||||
|
"deleteFailed": "Cancellazione workspace fallita",
|
||||||
|
"openSuccess": "Workspace aperta con successo",
|
||||||
|
"openFailed": "Apertura workspace fallita",
|
||||||
|
"renameSuccess": "Workspace rinominata con successo",
|
||||||
|
"renameFailed": "Rinomina workspace fallita",
|
||||||
|
"updateIconSuccess": "Icona della workspace aggiornata con successo",
|
||||||
|
"updateIconFailed": "Aggiornamento icona della workspace fallito",
|
||||||
|
"cannotDeleteTheOnlyWorkspace": "Impossibile cancellare l'unica workspace",
|
||||||
|
"fetchWorkspacesFailed": "Recupero workspaces fallito",
|
||||||
|
"leaveCurrentWorkspace": "Lascia workspace",
|
||||||
|
"leaveCurrentWorkspacePrompt": "Sei sicuro di voler lasciare la workspace corrente?"
|
||||||
},
|
},
|
||||||
"shareAction": {
|
"shareAction": {
|
||||||
"buttonText": "Condividi",
|
"buttonText": "Condividi",
|
||||||
"workInProgress": "Prossimamente",
|
"workInProgress": "Prossimamente",
|
||||||
"markdown": "Markdown",
|
"markdown": "Markdown",
|
||||||
|
"clipboard": "Copia",
|
||||||
"csv": "CSV",
|
"csv": "CSV",
|
||||||
"copyLink": "Copia Link"
|
"copyLink": "Copia Link",
|
||||||
|
"publishToTheWeb": "Pubblica sul Web",
|
||||||
|
"publishToTheWebHint": "Crea un sito con AppFlowy",
|
||||||
|
"publish": "Pubblica",
|
||||||
|
"unPublish": "Annulla la pubblicazione",
|
||||||
|
"visitSite": "Visita sito",
|
||||||
|
"exportAsTab": "Esporta come",
|
||||||
|
"publishTab": "Pubblica",
|
||||||
|
"shareTab": "Condividi"
|
||||||
},
|
},
|
||||||
"moreAction": {
|
"moreAction": {
|
||||||
"small": "piccolo",
|
"small": "piccolo",
|
||||||
@ -80,6 +128,7 @@
|
|||||||
"moreOptions": "Più opzioni",
|
"moreOptions": "Più opzioni",
|
||||||
"wordCount": "Conteggio parole: {}",
|
"wordCount": "Conteggio parole: {}",
|
||||||
"charCount": "Numero di caratteri: {}",
|
"charCount": "Numero di caratteri: {}",
|
||||||
|
"createdAt": "Creata: {}",
|
||||||
"deleteView": "Cancella",
|
"deleteView": "Cancella",
|
||||||
"duplicateView": "Duplica"
|
"duplicateView": "Duplica"
|
||||||
},
|
},
|
||||||
@ -99,7 +148,9 @@
|
|||||||
"openNewTab": "Apri in una nuova scheda",
|
"openNewTab": "Apri in una nuova scheda",
|
||||||
"moveTo": "Sposta in",
|
"moveTo": "Sposta in",
|
||||||
"addToFavorites": "Aggiungi ai preferiti",
|
"addToFavorites": "Aggiungi ai preferiti",
|
||||||
"copyLink": "Copia link"
|
"copyLink": "Copia link",
|
||||||
|
"changeIcon": "Cambia icona",
|
||||||
|
"collapseAllPages": "Comprimi le sottopagine"
|
||||||
},
|
},
|
||||||
"blankPageTitle": "Pagina vuota",
|
"blankPageTitle": "Pagina vuota",
|
||||||
"newPageText": "Nuova pagina",
|
"newPageText": "Nuova pagina",
|
||||||
@ -107,6 +158,32 @@
|
|||||||
"newGridText": "Nuova griglia",
|
"newGridText": "Nuova griglia",
|
||||||
"newCalendarText": "Nuovo calendario",
|
"newCalendarText": "Nuovo calendario",
|
||||||
"newBoardText": "Nuova bacheca",
|
"newBoardText": "Nuova bacheca",
|
||||||
|
"chat": {
|
||||||
|
"newChat": "Chat AI",
|
||||||
|
"inputMessageHint": "Chiedi a @:appName AI",
|
||||||
|
"inputLocalAIMessageHint": "Chiedi a @:appName Local AI",
|
||||||
|
"unsupportedCloudPrompt": "Questa funzione è disponibile solo quando si usa @:appName Cloud",
|
||||||
|
"relatedQuestion": "Correlato",
|
||||||
|
"serverUnavailable": "Servizio temporaneamente non disponibile. Per favore, riprova più tardi.",
|
||||||
|
"aiServerUnavailable": "🌈 Uh-oh! 🌈. Un unicorno ha mangiato la nostra risposta. Per favore, riprova!",
|
||||||
|
"clickToRetry": "Clicca per riprovare",
|
||||||
|
"regenerateAnswer": "Rigenera",
|
||||||
|
"question1": "Come usare Kanban per organizzare le attività",
|
||||||
|
"question2": "Spiega il metodo GTD",
|
||||||
|
"question3": "Perché usare Rust",
|
||||||
|
"question4": "Ricetta con cos'è presente nella mia cucina",
|
||||||
|
"aiMistakePrompt": "Le IA possono fare errori. Controlla le informazioni importanti.",
|
||||||
|
"chatWithFilePrompt": "Vuoi chattare col file?",
|
||||||
|
"indexFileSuccess": "Indicizzazione file completata con successo",
|
||||||
|
"inputActionNoPages": "Nessuna pagina risultante",
|
||||||
|
"referenceSource": "{} fonte trovata",
|
||||||
|
"referenceSources": "{} fonti trovate",
|
||||||
|
"clickToMention": "Clicca per menzionare una pagina",
|
||||||
|
"uploadFile": "Carica file PDF, MD o TXT con la quale chattare",
|
||||||
|
"questionTitle": "Idee",
|
||||||
|
"questionDetail": "Salve {}! Come posso aiutarti oggi?",
|
||||||
|
"indexingFile": "Indicizzazione {}"
|
||||||
|
},
|
||||||
"trash": {
|
"trash": {
|
||||||
"text": "Cestino",
|
"text": "Cestino",
|
||||||
"restoreAll": "Ripristina Tutto",
|
"restoreAll": "Ripristina Tutto",
|
||||||
@ -125,11 +202,13 @@
|
|||||||
"caption": "Questa azione non può essere annullata."
|
"caption": "Questa azione non può essere annullata."
|
||||||
},
|
},
|
||||||
"mobile": {
|
"mobile": {
|
||||||
|
"actions": "Azioni del cestino",
|
||||||
"empty": "Il cestino è vuoto",
|
"empty": "Il cestino è vuoto",
|
||||||
"emptyDescription": "Non hai alcun file eliminato",
|
"emptyDescription": "Non hai alcun file eliminato",
|
||||||
"isDeleted": "è stato cancellato",
|
"isDeleted": "è stato cancellato",
|
||||||
"isRestored": "è stato ripristinato"
|
"isRestored": "è stato ripristinato"
|
||||||
}
|
},
|
||||||
|
"confirmDeleteTitle": "Sei sicuro di voler eliminare questa pagina permanentemente?"
|
||||||
},
|
},
|
||||||
"deletePagePrompt": {
|
"deletePagePrompt": {
|
||||||
"text": "Questa pagina è nel Cestino",
|
"text": "Questa pagina è nel Cestino",
|
||||||
@ -183,17 +262,44 @@
|
|||||||
"dragRow": "Premere a lungo per riordinare la riga",
|
"dragRow": "Premere a lungo per riordinare la riga",
|
||||||
"viewDataBase": "Visualizza banca dati",
|
"viewDataBase": "Visualizza banca dati",
|
||||||
"referencePage": "Questo {nome} è referenziato",
|
"referencePage": "Questo {nome} è referenziato",
|
||||||
"addBlockBelow": "Aggiungi un blocco qui sotto"
|
"addBlockBelow": "Aggiungi un blocco qui sotto",
|
||||||
|
"aiGenerate": "Genera"
|
||||||
},
|
},
|
||||||
"sideBar": {
|
"sideBar": {
|
||||||
"closeSidebar": "Close sidebar",
|
"closeSidebar": "Close sidebar",
|
||||||
"openSidebar": "Open sidebar",
|
"openSidebar": "Open sidebar",
|
||||||
"personal": "Personale",
|
"personal": "Personale",
|
||||||
|
"private": "Privato",
|
||||||
"favorites": "Preferiti",
|
"favorites": "Preferiti",
|
||||||
|
"clickToHidePrivate": "Clicca per nascondere l'area privata\nLe pagine create qui sono visibili solo a te",
|
||||||
|
"clickToHideWorkspace": "Clicca per nascondere la workspace\nLe pagine che crei qui sono visibili a ogni membro",
|
||||||
"clickToHidePersonal": "Fare clic per nascondere la sezione personale",
|
"clickToHidePersonal": "Fare clic per nascondere la sezione personale",
|
||||||
"clickToHideFavorites": "Fare clic per nascondere la sezione dei preferiti",
|
"clickToHideFavorites": "Fare clic per nascondere la sezione dei preferiti",
|
||||||
"addAPage": "Aggiungi una pagina",
|
"addAPage": "Aggiungi una pagina",
|
||||||
"recent": "Recente"
|
"addAPageToPrivate": "Aggiungi pagina all'area privata",
|
||||||
|
"addAPageToWorkspace": "Aggiungi pagina alla workspace",
|
||||||
|
"recent": "Recente",
|
||||||
|
"today": "Oggi",
|
||||||
|
"thisWeek": "Questa settimana",
|
||||||
|
"others": "Preferiti precedenti",
|
||||||
|
"justNow": "poco fa",
|
||||||
|
"minutesAgo": "{count} minuti fa",
|
||||||
|
"lastViewed": "Visto per ultimo",
|
||||||
|
"favoriteAt": "Aggiunto tra ai preferiti",
|
||||||
|
"emptyRecent": "Nessun documento recente",
|
||||||
|
"emptyRecentDescription": "Quando vedrai documenti, appariranno qui per accesso facilitato",
|
||||||
|
"emptyFavorite": "Nessun documento preferito",
|
||||||
|
"emptyFavoriteDescription": "Comincia a esplorare e marchia documenti come preferiti. Verranno elencati qui per accesso rapido!",
|
||||||
|
"removePageFromRecent": "Rimuovere questa pagina da Recenti?",
|
||||||
|
"removeSuccess": "Rimozione effettuata con successo",
|
||||||
|
"favoriteSpace": "Preferiti",
|
||||||
|
"RecentSpace": "Recenti",
|
||||||
|
"Spaces": "Aree",
|
||||||
|
"upgradeToPro": "Aggiorna a Pro",
|
||||||
|
"upgradeToAIMax": "Sblocca AI illimitata",
|
||||||
|
"storageLimitDialogTitle": "Hai esaurito lo spazio d'archiviazione gratuito. Aggiorna per avere spazio d'archiviazione illimitato!",
|
||||||
|
"aiResponseLimitTitle": "Hai esaurito le risposte AI gratuite. Aggiorna al Piano Pro per acquistare un add-on AI per avere risposte illimitate",
|
||||||
|
"aiResponseLimitDialogTitle": "Numero di riposte AI raggiunto"
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"export": {
|
"export": {
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
"title": "Título",
|
"title": "Título",
|
||||||
"youCanAlso": "Você também pode",
|
"youCanAlso": "Você também pode",
|
||||||
"and": "e",
|
"and": "e",
|
||||||
|
"failedToOpenUrl": "Falha ao abrir url: {}",
|
||||||
"blockActions": {
|
"blockActions": {
|
||||||
"addBelowTooltip": "Clique para adicionar abaixo",
|
"addBelowTooltip": "Clique para adicionar abaixo",
|
||||||
"addAboveCmd": "Alt+clique",
|
"addAboveCmd": "Alt+clique",
|
||||||
@ -35,17 +36,39 @@
|
|||||||
"loginButtonText": "Conectar-se",
|
"loginButtonText": "Conectar-se",
|
||||||
"loginStartWithAnonymous": "Iniciar com uma sessão anônima",
|
"loginStartWithAnonymous": "Iniciar com uma sessão anônima",
|
||||||
"continueAnonymousUser": "Continuar em uma sessão anônima",
|
"continueAnonymousUser": "Continuar em uma sessão anônima",
|
||||||
|
"anonymous": "Anônimo",
|
||||||
"buttonText": "Entre",
|
"buttonText": "Entre",
|
||||||
"signingInText": "Entrando...",
|
"signingInText": "Entrando...",
|
||||||
"forgotPassword": "Esqueceu sua senha?",
|
"forgotPassword": "Esqueceu sua senha?",
|
||||||
"emailHint": "E-mail",
|
"emailHint": "E-mail",
|
||||||
"passwordHint": "Senha",
|
"passwordHint": "Senha",
|
||||||
"dontHaveAnAccount": "Não possui uma conta?",
|
"dontHaveAnAccount": "Não possui uma conta?",
|
||||||
|
"createAccount": "Criar uma conta",
|
||||||
"repeatPasswordEmptyError": "Senha não pode estar em branco.",
|
"repeatPasswordEmptyError": "Senha não pode estar em branco.",
|
||||||
"unmatchedPasswordError": "As senhas não conferem.",
|
"unmatchedPasswordError": "As senhas não conferem.",
|
||||||
"syncPromptMessage": "A sincronização dos dados pode demorar um pouco. Por favor não feche esta página",
|
"syncPromptMessage": "A sincronização dos dados pode demorar um pouco. Por favor não feche esta página",
|
||||||
"or": "OU",
|
"or": "OU",
|
||||||
|
"signInWithGoogle": "Continuar com o Google",
|
||||||
|
"signInWithGithub": "Continuar com o Github",
|
||||||
|
"signInWithDiscord": "Continuar com o Discord",
|
||||||
|
"signInWithApple": "Continuar com a Apple",
|
||||||
|
"continueAnotherWay": "Continuar de outra forma",
|
||||||
|
"signUpWithGoogle": "Cadastro com o Google",
|
||||||
|
"signUpWithGithub": "Cadastro com o Github",
|
||||||
|
"signUpWithDiscord": "Cadastro com o Discord",
|
||||||
"signInWith": "Entrar com:",
|
"signInWith": "Entrar com:",
|
||||||
|
"signInWithEmail": "Continuar com e-mail",
|
||||||
|
"signInWithMagicLink": "Continuar",
|
||||||
|
"signUpWithMagicLink": "Cadastro com um Link Mágico",
|
||||||
|
"pleaseInputYourEmail": "Por favor, insira seu endereço de e-mail",
|
||||||
|
"settings": "Configurações",
|
||||||
|
"magicLinkSent": "Link Mágico enviado!",
|
||||||
|
"invalidEmail": "Por favor, insira um endereço de e-mail válido",
|
||||||
|
"alreadyHaveAnAccount": "Já tem uma conta?",
|
||||||
|
"logIn": "Entrar",
|
||||||
|
"generalError": "Algo deu errado. Tente novamente mais tarde.",
|
||||||
|
"limitRateError": "Por razões de segurança, você só pode solicitar um link mágico a cada 60 segundos",
|
||||||
|
"magicLinkSentDescription": "Um Link Mágico foi enviado para seu e-mail. Clique no link para concluir seu login. O link expirará após 5 minutos.",
|
||||||
"LogInWithGoogle": "Entrar com o Google",
|
"LogInWithGoogle": "Entrar com o Google",
|
||||||
"LogInWithGithub": "Entrar com o Github",
|
"LogInWithGithub": "Entrar com o Github",
|
||||||
"LogInWithDiscord": "Entrar com o Discord",
|
"LogInWithDiscord": "Entrar com o Discord",
|
||||||
@ -55,21 +78,50 @@
|
|||||||
"chooseWorkspace": "Escolha seu espaço de trabalho",
|
"chooseWorkspace": "Escolha seu espaço de trabalho",
|
||||||
"create": "Crie um espaço de trabalho",
|
"create": "Crie um espaço de trabalho",
|
||||||
"reset": "Redefinir espaço de trabalho",
|
"reset": "Redefinir espaço de trabalho",
|
||||||
|
"renameWorkspace": "Renomear espaço de trabalho",
|
||||||
"resetWorkspacePrompt": "A redefinição do espaço de trabalho excluirá todas as páginas e dados contidos nele. Tem certeza de que deseja redefinir o espaço de trabalho? Alternativamente, você pode entrar em contato com a equipe de suporte para restaurar o espaço de trabalho",
|
"resetWorkspacePrompt": "A redefinição do espaço de trabalho excluirá todas as páginas e dados contidos nele. Tem certeza de que deseja redefinir o espaço de trabalho? Alternativamente, você pode entrar em contato com a equipe de suporte para restaurar o espaço de trabalho",
|
||||||
"hint": "Espaço de trabalho",
|
"hint": "Espaço de trabalho",
|
||||||
"notFoundError": "Espaço de trabalho não encontrado",
|
"notFoundError": "Espaço de trabalho não encontrado",
|
||||||
"failedToLoad": "Algo deu errado! Falha ao carregar o espaço de trabalho. Tente fechar qualquer instância aberta do @:appName e tente novamente.",
|
"failedToLoad": "Algo deu errado! Falha ao carregar o espaço de trabalho. Tente fechar qualquer instância aberta do @:appName e tente novamente.",
|
||||||
"errorActions": {
|
"errorActions": {
|
||||||
"reportIssue": "Reporte um problema",
|
"reportIssue": "Reporte um problema",
|
||||||
|
"reportIssueOnGithub": "Reportar um problema no Github",
|
||||||
|
"exportLogFiles": "Exportar arquivos de log",
|
||||||
"reachOut": "Entre em contato no Discord"
|
"reachOut": "Entre em contato no Discord"
|
||||||
}
|
},
|
||||||
|
"menuTitle": "Espaços de trabalho",
|
||||||
|
"deleteWorkspaceHintText": "Tem certeza de que deseja excluir o espaço de trabalho? Esta ação não pode ser desfeita, e quaisquer páginas que você tenha publicado deixarão de estar publicadas.",
|
||||||
|
"createSuccess": "Espaço de trabalho criado com sucesso",
|
||||||
|
"createFailed": "Falha ao criar espaço de trabalho",
|
||||||
|
"createLimitExceeded": "Você atingiu o limite máximo de espaços de trabalho permitido para sua conta. Se precisar de espaços de trabalho adicionais para continuar seu trabalho, solicite no Github",
|
||||||
|
"deleteSuccess": "Espaço de trabalho excluído com sucesso",
|
||||||
|
"deleteFailed": "Falha ao excluir o espaço de trabalho",
|
||||||
|
"openSuccess": "Espaço de trabalho aberto com sucesso",
|
||||||
|
"openFailed": "Falha ao abrir o espaço de trabalho",
|
||||||
|
"renameSuccess": "Espaço de trabalho renomeado com sucesso",
|
||||||
|
"renameFailed": "Falha ao renomear o espaço de trabalho",
|
||||||
|
"updateIconSuccess": "Ícone do espaço de trabalho atualizado com sucesso",
|
||||||
|
"updateIconFailed": "Falha ao atualizar ícone do espaço de trabalho",
|
||||||
|
"cannotDeleteTheOnlyWorkspace": "Não é possível excluir o único espaço de trabalho",
|
||||||
|
"fetchWorkspacesFailed": "Falha ao buscar espaços de trabalho",
|
||||||
|
"leaveCurrentWorkspace": "Sair do espaço de trabalho",
|
||||||
|
"leaveCurrentWorkspacePrompt": "Tem certeza de que deseja sair do espaço de trabalho atual?"
|
||||||
},
|
},
|
||||||
"shareAction": {
|
"shareAction": {
|
||||||
"buttonText": "Compartilhar",
|
"buttonText": "Compartilhar",
|
||||||
"workInProgress": "Em breve",
|
"workInProgress": "Em breve",
|
||||||
"markdown": "Marcador",
|
"markdown": "Marcador",
|
||||||
|
"clipboard": "Copiar para área de transferência",
|
||||||
"csv": "CSV",
|
"csv": "CSV",
|
||||||
"copyLink": "Copiar link"
|
"copyLink": "Copiar link",
|
||||||
|
"publishToTheWeb": "Publicar na Web",
|
||||||
|
"publishToTheWebHint": "Crie um site com AppFlowy",
|
||||||
|
"publish": "Publicar",
|
||||||
|
"unPublish": "Remover publicação",
|
||||||
|
"visitSite": "Visitar site",
|
||||||
|
"exportAsTab": "Exportar como",
|
||||||
|
"publishTab": "Publicar",
|
||||||
|
"shareTab": "Compartilhar"
|
||||||
},
|
},
|
||||||
"moreAction": {
|
"moreAction": {
|
||||||
"small": "pequeno",
|
"small": "pequeno",
|
||||||
@ -77,7 +129,12 @@
|
|||||||
"large": "grande",
|
"large": "grande",
|
||||||
"fontSize": "Tamanho da fonte",
|
"fontSize": "Tamanho da fonte",
|
||||||
"import": "Importar",
|
"import": "Importar",
|
||||||
"moreOptions": "Mais opções"
|
"moreOptions": "Mais opções",
|
||||||
|
"wordCount": "Contagem de palavras: {}",
|
||||||
|
"charCount": "Contagem de caracteres: {}",
|
||||||
|
"createdAt": "Criado: {}",
|
||||||
|
"deleteView": "Excluir",
|
||||||
|
"duplicateView": "Duplicar"
|
||||||
},
|
},
|
||||||
"importPanel": {
|
"importPanel": {
|
||||||
"textAndMarkdown": "Texto e Remarcação",
|
"textAndMarkdown": "Texto e Remarcação",
|
||||||
@ -95,7 +152,9 @@
|
|||||||
"openNewTab": "Abrir em uma nova guia",
|
"openNewTab": "Abrir em uma nova guia",
|
||||||
"moveTo": "Mover para",
|
"moveTo": "Mover para",
|
||||||
"addToFavorites": "Adicionar aos favoritos",
|
"addToFavorites": "Adicionar aos favoritos",
|
||||||
"copyLink": "Copiar link"
|
"copyLink": "Copiar link",
|
||||||
|
"changeIcon": "Alterar ícone",
|
||||||
|
"collapseAllPages": "Recolher todas as subpáginas"
|
||||||
},
|
},
|
||||||
"blankPageTitle": "Página em branco",
|
"blankPageTitle": "Página em branco",
|
||||||
"newPageText": "Nova página",
|
"newPageText": "Nova página",
|
||||||
@ -103,6 +162,32 @@
|
|||||||
"newGridText": "Nova grelha",
|
"newGridText": "Nova grelha",
|
||||||
"newCalendarText": "Novo calendário",
|
"newCalendarText": "Novo calendário",
|
||||||
"newBoardText": "Novo quadro",
|
"newBoardText": "Novo quadro",
|
||||||
|
"chat": {
|
||||||
|
"newChat": "Bate-papo com IA",
|
||||||
|
"inputMessageHint": "Pergunte a IA @:appName",
|
||||||
|
"inputLocalAIMessageHint": "Pergunte a IA local @:appName",
|
||||||
|
"unsupportedCloudPrompt": "Este recurso só está disponível ao usar a nuvem @:appName",
|
||||||
|
"relatedQuestion": "Relacionado",
|
||||||
|
"serverUnavailable": "Serviço Temporariamente Indisponível. Tente novamente mais tarde.",
|
||||||
|
"aiServerUnavailable": "🌈 Uh-oh! 🌈. Um unicórnio comeu nossa resposta. Por favor, tente novamente!",
|
||||||
|
"clickToRetry": "Clique para tentar novamente",
|
||||||
|
"regenerateAnswer": "Gerar novamente",
|
||||||
|
"question1": "Como usar Kanban para gerenciar tarefas",
|
||||||
|
"question2": "Explique o método GTD",
|
||||||
|
"question3": "Por que usar Rust",
|
||||||
|
"question4": "Receita com o que tenho na cozinha",
|
||||||
|
"aiMistakePrompt": "A IA pode cometer erros. Verifique informações importantes.",
|
||||||
|
"chatWithFilePrompt": "Você quer conversar com o arquivo?",
|
||||||
|
"indexFileSuccess": "Arquivo indexado com sucesso",
|
||||||
|
"inputActionNoPages": "Nenhum resultado",
|
||||||
|
"referenceSource": "{} fonte encontrada",
|
||||||
|
"referenceSources": "{} fontes encontradas",
|
||||||
|
"clickToMention": "Clique para mencionar uma página",
|
||||||
|
"uploadFile": "Carregue arquivos PDFs, md ou txt para conversar",
|
||||||
|
"questionTitle": "Ideias",
|
||||||
|
"questionDetail": "Olá {}! Como posso te ajudar hoje?",
|
||||||
|
"indexingFile": "Indexando {}"
|
||||||
|
},
|
||||||
"trash": {
|
"trash": {
|
||||||
"text": "Lixeira",
|
"text": "Lixeira",
|
||||||
"restoreAll": "Restaurar tudo",
|
"restoreAll": "Restaurar tudo",
|
||||||
@ -126,7 +211,8 @@
|
|||||||
"emptyDescription": "Você não tem nenhum arquivo excluído",
|
"emptyDescription": "Você não tem nenhum arquivo excluído",
|
||||||
"isDeleted": "foi deletado",
|
"isDeleted": "foi deletado",
|
||||||
"isRestored": "foi restaurado"
|
"isRestored": "foi restaurado"
|
||||||
}
|
},
|
||||||
|
"confirmDeleteTitle": "Tem certeza de que deseja excluir esta página permanentemente?"
|
||||||
},
|
},
|
||||||
"deletePagePrompt": {
|
"deletePagePrompt": {
|
||||||
"text": "Está página está na lixeira",
|
"text": "Está página está na lixeira",
|
||||||
@ -180,17 +266,53 @@
|
|||||||
"dragRow": "Pressione e segure para reordenar a linha",
|
"dragRow": "Pressione e segure para reordenar a linha",
|
||||||
"viewDataBase": "Visualizar banco de dados",
|
"viewDataBase": "Visualizar banco de dados",
|
||||||
"referencePage": "Esta {name} é uma referência",
|
"referencePage": "Esta {name} é uma referência",
|
||||||
"addBlockBelow": "Adicione um bloco abaixo"
|
"addBlockBelow": "Adicione um bloco abaixo",
|
||||||
|
"aiGenerate": "Gerar"
|
||||||
},
|
},
|
||||||
"sideBar": {
|
"sideBar": {
|
||||||
"closeSidebar": "Fechar barra lateral",
|
"closeSidebar": "Fechar barra lateral",
|
||||||
"openSidebar": "Abrir barra lateral",
|
"openSidebar": "Abrir barra lateral",
|
||||||
"personal": "Pessoal",
|
"personal": "Pessoal",
|
||||||
|
"private": "Privado",
|
||||||
|
"workspace": "Espaço de trabalho",
|
||||||
"favorites": "Favoritos",
|
"favorites": "Favoritos",
|
||||||
|
"clickToHidePrivate": "Clique para ocultar o espaço privado\nAs páginas que você criou aqui são visíveis apenas para você",
|
||||||
|
"clickToHideWorkspace": "Clique para ocultar o espaço de trabalho\nAs páginas que você criou aqui são visíveis para todos os membros",
|
||||||
"clickToHidePersonal": "Clique para ocultar a seção pessoal",
|
"clickToHidePersonal": "Clique para ocultar a seção pessoal",
|
||||||
"clickToHideFavorites": "Clique para ocultar a seção favorita",
|
"clickToHideFavorites": "Clique para ocultar a seção favorita",
|
||||||
"addAPage": "Adicionar uma página",
|
"addAPage": "Adicionar uma página",
|
||||||
"recent": "Recentes"
|
"addAPageToPrivate": "Adicionar uma página ao espaço privado",
|
||||||
|
"addAPageToWorkspace": "Adicionar uma página ao espaço de trabalho",
|
||||||
|
"recent": "Recentes",
|
||||||
|
"today": "Hoje",
|
||||||
|
"thisWeek": "Essa semana",
|
||||||
|
"others": "Favoritos anteriores",
|
||||||
|
"justNow": "agora mesmo",
|
||||||
|
"minutesAgo": "{count} minutos atrás",
|
||||||
|
"lastViewed": "Última visualização",
|
||||||
|
"favoriteAt": "Favorito",
|
||||||
|
"emptyRecent": "Nenhum documento recente",
|
||||||
|
"emptyRecentDescription": "Conforme você visualiza os documentos, eles aparecerão aqui para fácil recuperação",
|
||||||
|
"emptyFavorite": "Nenhum documento favorito",
|
||||||
|
"emptyFavoriteDescription": "Comece a explorar e marque os documentos como favoritos. Eles serão listados aqui para acesso rápido!",
|
||||||
|
"removePageFromRecent": "Remover esta página dos Recentes?",
|
||||||
|
"removeSuccess": "Removido com sucesso",
|
||||||
|
"favoriteSpace": "Favoritos",
|
||||||
|
"RecentSpace": "Recente",
|
||||||
|
"Spaces": "Espaços",
|
||||||
|
"upgradeToPro": "Atualizar para Pro",
|
||||||
|
"upgradeToAIMax": "Desbloqueie IA ilimitada",
|
||||||
|
"storageLimitDialogTitle": "Você ficou sem armazenamento gratuito. Atualize para desbloquear armazenamento ilimitado",
|
||||||
|
"aiResponseLimitTitle": "Você ficou sem respostas de IA gratuitas. Atualize para o Plano Pro ou adquira um complemento de IA para desbloquear respostas ilimitadas",
|
||||||
|
"aiResponseLimitDialogTitle": "Limite de respostas de IA atingido",
|
||||||
|
"aiResponseLimit": "Você ficou sem respostas de IA gratuitas.\n\nVá para Configurações -> Plano -> Clique em AI Max ou Plano Pro para obter mais respostas de IA",
|
||||||
|
"askOwnerToUpgradeToPro": "Seu espaço de trabalho está ficando sem armazenamento gratuito. Peça ao proprietário do seu espaço de trabalho para atualizar para o Plano Pro",
|
||||||
|
"askOwnerToUpgradeToAIMax": "Seu espaço de trabalho está ficando sem respostas de IA gratuitas. Peça ao proprietário do seu espaço de trabalho para atualizar o plano ou adquirir complementos de IA",
|
||||||
|
"purchaseStorageSpace": "Adquirir espaço de armazenamento",
|
||||||
|
"purchaseAIResponse": "Adquirir ",
|
||||||
|
"askOwnerToUpgradeToLocalAI": "Peça ao proprietário do espaço de trabalho para habilitar a IA no dispositivo",
|
||||||
|
"upgradeToAILocal": "Execute modelos locais no seu dispositivo para máxima privacidade",
|
||||||
|
"upgradeToAILocalDesc": "Converse com PDFs, melhore sua escrita e preencha tabelas automaticamente usando IA local"
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"export": {
|
"export": {
|
||||||
@ -206,6 +328,7 @@
|
|||||||
},
|
},
|
||||||
"button": {
|
"button": {
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
|
"confirm": "Confirmar",
|
||||||
"done": "Feito",
|
"done": "Feito",
|
||||||
"cancel": "Cancelar",
|
"cancel": "Cancelar",
|
||||||
"signIn": "Conectar",
|
"signIn": "Conectar",
|
||||||
@ -228,11 +351,34 @@
|
|||||||
"update": "Atualizar",
|
"update": "Atualizar",
|
||||||
"share": "Compartilhar",
|
"share": "Compartilhar",
|
||||||
"removeFromFavorites": "Remover dos favoritos",
|
"removeFromFavorites": "Remover dos favoritos",
|
||||||
|
"removeFromRecent": "Remover dos recentes",
|
||||||
"addToFavorites": "Adicionar aos favoritos",
|
"addToFavorites": "Adicionar aos favoritos",
|
||||||
|
"favoriteSuccessfully": "Adicionado aos favoritos",
|
||||||
|
"unfavoriteSuccessfully": "Removido dos favoritos",
|
||||||
|
"duplicateSuccessfully": "Duplicado com sucesso",
|
||||||
"rename": "Renomear",
|
"rename": "Renomear",
|
||||||
"helpCenter": "Central de Ajuda",
|
"helpCenter": "Central de Ajuda",
|
||||||
"add": "Adicionar",
|
"add": "Adicionar",
|
||||||
"yes": "Sim",
|
"yes": "Sim",
|
||||||
|
"no": "Não",
|
||||||
|
"clear": "Limpar",
|
||||||
|
"remove": "Remover",
|
||||||
|
"dontRemove": "Não remova",
|
||||||
|
"copyLink": "Copiar Link",
|
||||||
|
"align": "Alinhar",
|
||||||
|
"login": "Entrar",
|
||||||
|
"logout": "Sair",
|
||||||
|
"deleteAccount": "Deletar conta",
|
||||||
|
"back": "Voltar",
|
||||||
|
"signInGoogle": "Continuar com o Google",
|
||||||
|
"signInGithub": "Continuar com o Github",
|
||||||
|
"signInDiscord": "Continuar com o Discord",
|
||||||
|
"more": "Mais",
|
||||||
|
"create": "Criar",
|
||||||
|
"close": "Fechar",
|
||||||
|
"next": "Próximo",
|
||||||
|
"previous": "Anterior",
|
||||||
|
"submit": "Enviar",
|
||||||
"tryAGain": "Tentar novamente"
|
"tryAGain": "Tentar novamente"
|
||||||
},
|
},
|
||||||
"label": {
|
"label": {
|
||||||
@ -257,6 +403,190 @@
|
|||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"title": "Configurações",
|
"title": "Configurações",
|
||||||
|
"popupMenuItem": {
|
||||||
|
"settings": "Configurações",
|
||||||
|
"members": "Membros",
|
||||||
|
"trash": "Lixo",
|
||||||
|
"helpAndSupport": "Ajuda e Suporte"
|
||||||
|
},
|
||||||
|
"accountPage": {
|
||||||
|
"menuLabel": "Minha conta",
|
||||||
|
"title": "Minha conta",
|
||||||
|
"general": {
|
||||||
|
"title": "Nome da conta e foto de perfil",
|
||||||
|
"changeProfilePicture": "Alterar foto do perfil"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"title": "E-mail",
|
||||||
|
"actions": {
|
||||||
|
"change": "Alterar e-mail"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"login": {
|
||||||
|
"title": "Entrar com uma conta",
|
||||||
|
"loginLabel": "Entrar",
|
||||||
|
"logoutLabel": "Sair"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"workspacePage": {
|
||||||
|
"menuLabel": "Espaço de trabalho",
|
||||||
|
"title": "Espaço de trabalho",
|
||||||
|
"description": "Personalize a aparência do seu espaço de trabalho, tema, fonte, layout de texto, formato de data/hora e idioma.",
|
||||||
|
"workspaceName": {
|
||||||
|
"title": "Nome do espaço de trabalho"
|
||||||
|
},
|
||||||
|
"workspaceIcon": {
|
||||||
|
"title": "Ícone do espaço de trabalho",
|
||||||
|
"description": "Carregue uma imagem ou use um emoji para seu espaço de trabalho. O ícone será exibido na sua barra lateral e notificações."
|
||||||
|
},
|
||||||
|
"appearance": {
|
||||||
|
"title": "Aparência",
|
||||||
|
"description": "Personalize a aparência do seu espaço de trabalho, tema, fonte, layout de texto, data, hora e idioma.",
|
||||||
|
"options": {
|
||||||
|
"system": "Automático",
|
||||||
|
"light": "Claro",
|
||||||
|
"dark": "Escuro"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"resetCursorColor": {
|
||||||
|
"title": "Redefinir a cor do cursor do documento",
|
||||||
|
"description": "Tem certeza de que deseja redefinir a cor do cursor?"
|
||||||
|
},
|
||||||
|
"resetSelectionColor": {
|
||||||
|
"title": "Redefinir cor de seleção de documento",
|
||||||
|
"description": "Tem certeza de que deseja redefinir a cor de seleção?"
|
||||||
|
},
|
||||||
|
"theme": {
|
||||||
|
"title": "Tema",
|
||||||
|
"description": "Selecione um tema predefinido ou carregue seu próprio tema personalizado.",
|
||||||
|
"uploadCustomThemeTooltip": "Carregar um tema personalizado"
|
||||||
|
},
|
||||||
|
"workspaceFont": {
|
||||||
|
"title": "Fonte do espaço de trabalho",
|
||||||
|
"noFontHint": "Nenhuma fonte encontrada, tente outro termo."
|
||||||
|
},
|
||||||
|
"textDirection": {
|
||||||
|
"title": "Direção do texto",
|
||||||
|
"leftToRight": "Da esquerda para a direita",
|
||||||
|
"rightToLeft": "Da direita para a esquerda",
|
||||||
|
"auto": "Automático",
|
||||||
|
"enableRTLItems": "Habilitar items da barra de ferramenta da direita para a esquerda"
|
||||||
|
},
|
||||||
|
"layoutDirection": {
|
||||||
|
"title": "Direção do layout",
|
||||||
|
"leftToRight": "Da esquerda para a direita",
|
||||||
|
"rightToLeft": "Da direita para a esquerda"
|
||||||
|
},
|
||||||
|
"dateTime": {
|
||||||
|
"title": "Data e hora",
|
||||||
|
"example": "{} as {} ({})",
|
||||||
|
"24HourTime": "Tempo de 24 horas",
|
||||||
|
"dateFormat": {
|
||||||
|
"label": "Formato de data",
|
||||||
|
"us": "EUA",
|
||||||
|
"friendly": "Amigável"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"language": {
|
||||||
|
"title": "Língua"
|
||||||
|
},
|
||||||
|
"deleteWorkspacePrompt": {
|
||||||
|
"title": "Excluir espaço de trabalho",
|
||||||
|
"content": "Tem certeza de que deseja excluir este espaço de trabalho? Esta ação não pode ser desfeita, e quaisquer páginas que você tenha publicado deixarão de estar publicadas."
|
||||||
|
},
|
||||||
|
"leaveWorkspacePrompt": {
|
||||||
|
"title": "Sair do espaço de trabalho",
|
||||||
|
"content": "Tem certeza de que deseja sair deste espaço de trabalho? Você perderá o acesso a todas as páginas e dados dentro dele."
|
||||||
|
},
|
||||||
|
"manageWorkspace": {
|
||||||
|
"title": "Gerenciar espaço de trabalho",
|
||||||
|
"leaveWorkspace": "Sair do espaço de trabalho",
|
||||||
|
"deleteWorkspace": "Excluir espaço de trabalho"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"manageDataPage": {
|
||||||
|
"menuLabel": "Gerenciar dados",
|
||||||
|
"title": "Gerenciar dados",
|
||||||
|
"description": "Gerencie o armazenamento local de dados ou importe seus dados existentes para @:appName .",
|
||||||
|
"dataStorage": {
|
||||||
|
"title": "Local de armazenamento de arquivos",
|
||||||
|
"tooltip": "O local onde seus arquivos são armazenados",
|
||||||
|
"actions": {
|
||||||
|
"change": "Mudar caminho",
|
||||||
|
"open": "Abrir pasta",
|
||||||
|
"openTooltip": "Abrir local da pasta de dados atual",
|
||||||
|
"copy": "Copiar caminho",
|
||||||
|
"copiedHint": "Caminho copiado!",
|
||||||
|
"resetTooltip": "Redefinir para o local padrão"
|
||||||
|
},
|
||||||
|
"resetDialog": {
|
||||||
|
"title": "Tem certeza?",
|
||||||
|
"description": "Redefinir o caminho para o local de dados padrão não excluirá seus dados. Se você quiser reimportar seus dados atuais, você deve copiar o caminho do seu local atual primeiro."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"importData": {
|
||||||
|
"title": "Importar dados",
|
||||||
|
"tooltip": "Importar dados das pastas de backups/dados de @:appName",
|
||||||
|
"description": "Copiar dados de uma pasta de dados externa ao @:appName",
|
||||||
|
"action": "Selecionar arquivo"
|
||||||
|
},
|
||||||
|
"encryption": {
|
||||||
|
"title": "Criptografia",
|
||||||
|
"tooltip": "Gerencie como seus dados são armazenados e criptografados",
|
||||||
|
"descriptionNoEncryption": "Ativar a criptografia criptografará todos os dados. Isso não pode ser desfeito.",
|
||||||
|
"descriptionEncrypted": "Seus dados estão criptografados.",
|
||||||
|
"action": "Criptografar dados",
|
||||||
|
"dialog": {
|
||||||
|
"title": "Criptografar todos os seus dados?",
|
||||||
|
"description": "Criptografar todos os seus dados manterá seus dados seguros e protegidos. Esta ação NÃO pode ser desfeita. Tem certeza de que deseja continuar?"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"cache": {
|
||||||
|
"title": "Limpar cache",
|
||||||
|
"description": "Ajude a resolver problemas como imagem não carregando, páginas faltando em um espaço e fontes não carregando. Isso não afetará seus dados.",
|
||||||
|
"dialog": {
|
||||||
|
"title": "Limpar cache",
|
||||||
|
"description": "Ajude a resolver problemas como imagem não carregando, páginas faltando em um espaço e fontes não carregando. Isso não afetará seus dados.",
|
||||||
|
"successHint": "Cache limpo!"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"data": {
|
||||||
|
"fixYourData": "Corrija seus dados",
|
||||||
|
"fixButton": "Corrigir",
|
||||||
|
"fixYourDataDescription": "Se estiver com problemas com seus dados, você pode tentar corrigi-los aqui."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"shortcutsPage": {
|
||||||
|
"menuLabel": "Atalhos",
|
||||||
|
"title": "Atalhos",
|
||||||
|
"editBindingHint": "Insira uma nova combinação",
|
||||||
|
"searchHint": "Pesquisar",
|
||||||
|
"actions": {
|
||||||
|
"resetDefault": "Redefinir padrão"
|
||||||
|
},
|
||||||
|
"errorPage": {
|
||||||
|
"message": "Falha ao carregar atalhos: {}",
|
||||||
|
"howToFix": "Por favor, tente novamente. Se o problema persistir, entre em contato pelo GitHub."
|
||||||
|
},
|
||||||
|
"resetDialog": {
|
||||||
|
"title": "Redefinir atalhos",
|
||||||
|
"description": "Isso redefinirá todas as suas combinações de teclas para o padrão. Você não poderá desfazer isso depois. Tem certeza de que deseja continuar?",
|
||||||
|
"buttonLabel": "Redefinir"
|
||||||
|
},
|
||||||
|
"conflictDialog": {
|
||||||
|
"title": "{} já está em uso",
|
||||||
|
"descriptionPrefix": "Esta combinação de teclas está sendo usada atualmente por ",
|
||||||
|
"descriptionSuffix": ". Se você substituir esta combinação de teclas, ela será removida de {}.",
|
||||||
|
"confirmLabel": "Continuar"
|
||||||
|
},
|
||||||
|
"editTooltip": "Pressione para começar a editar a combinação de teclas",
|
||||||
|
"keybindings": {
|
||||||
|
"toggleToDoList": "Alternar para a lista de tarefas",
|
||||||
|
"insertNewParagraphInCodeblock": "Inserir novo parágrafo",
|
||||||
|
"pasteInCodeblock": "Colar bloco de código",
|
||||||
|
"selectAllCodeblock": "Selecionar tudo"
|
||||||
|
}
|
||||||
|
},
|
||||||
"menu": {
|
"menu": {
|
||||||
"appearance": "Aparência",
|
"appearance": "Aparência",
|
||||||
"language": "Idioma",
|
"language": "Idioma",
|
||||||
|
File diff suppressed because it is too large
Load Diff
38
frontend/rust-lib/Cargo.lock
generated
38
frontend/rust-lib/Cargo.lock
generated
@ -163,7 +163,7 @@ checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "app-error"
|
name = "app-error"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bincode",
|
"bincode",
|
||||||
@ -183,7 +183,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "appflowy-ai-client"
|
name = "appflowy-ai-client"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bytes",
|
"bytes",
|
||||||
@ -729,7 +729,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "client-api"
|
name = "client-api"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"again",
|
"again",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
@ -780,7 +780,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "client-api-entity"
|
name = "client-api-entity"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"collab-entity",
|
"collab-entity",
|
||||||
"collab-rt-entity",
|
"collab-rt-entity",
|
||||||
@ -793,7 +793,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "client-websocket"
|
name = "client-websocket"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
@ -836,7 +836,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab"
|
name = "collab"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=49cf2206d7494bb3006402b807e7f171905213e3#49cf2206d7494bb3006402b807e7f171905213e3"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac#47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"arc-swap",
|
"arc-swap",
|
||||||
@ -861,7 +861,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-database"
|
name = "collab-database"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=49cf2206d7494bb3006402b807e7f171905213e3#49cf2206d7494bb3006402b807e7f171905213e3"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac#47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@ -890,7 +890,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-document"
|
name = "collab-document"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=49cf2206d7494bb3006402b807e7f171905213e3#49cf2206d7494bb3006402b807e7f171905213e3"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac#47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"arc-swap",
|
"arc-swap",
|
||||||
@ -910,7 +910,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-entity"
|
name = "collab-entity"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=49cf2206d7494bb3006402b807e7f171905213e3#49cf2206d7494bb3006402b807e7f171905213e3"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac#47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bytes",
|
"bytes",
|
||||||
@ -929,7 +929,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-folder"
|
name = "collab-folder"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=49cf2206d7494bb3006402b807e7f171905213e3#49cf2206d7494bb3006402b807e7f171905213e3"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac#47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"arc-swap",
|
"arc-swap",
|
||||||
@ -972,7 +972,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-plugins"
|
name = "collab-plugins"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=49cf2206d7494bb3006402b807e7f171905213e3#49cf2206d7494bb3006402b807e7f171905213e3"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac#47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-stream",
|
"async-stream",
|
||||||
@ -1010,7 +1010,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-rt-entity"
|
name = "collab-rt-entity"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bincode",
|
"bincode",
|
||||||
@ -1035,7 +1035,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-rt-protocol"
|
name = "collab-rt-protocol"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@ -1052,7 +1052,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-user"
|
name = "collab-user"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=49cf2206d7494bb3006402b807e7f171905213e3#49cf2206d7494bb3006402b807e7f171905213e3"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac#47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"collab",
|
"collab",
|
||||||
@ -1395,7 +1395,7 @@ checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "database-entity"
|
name = "database-entity"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"app-error",
|
"app-error",
|
||||||
@ -2795,7 +2795,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "gotrue"
|
name = "gotrue"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
@ -2812,7 +2812,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "gotrue-entity"
|
name = "gotrue-entity"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"app-error",
|
"app-error",
|
||||||
@ -3177,7 +3177,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "infra"
|
name = "infra"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bytes",
|
"bytes",
|
||||||
@ -5377,7 +5377,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "shared-entity"
|
name = "shared-entity"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=c9504d4081a8d9893830dc6598429353b078271b#c9504d4081a8d9893830dc6598429353b078271b"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=52782033948b7d243693ca159ea519d53458c8a6#52782033948b7d243693ca159ea519d53458c8a6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"app-error",
|
"app-error",
|
||||||
|
@ -100,8 +100,8 @@ dashmap = "6.0.1"
|
|||||||
# Run the script.add_workspace_members:
|
# Run the script.add_workspace_members:
|
||||||
# scripts/tool/update_client_api_rev.sh new_rev_id
|
# scripts/tool/update_client_api_rev.sh new_rev_id
|
||||||
# ⚠️⚠️⚠️️
|
# ⚠️⚠️⚠️️
|
||||||
client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "c9504d4081a8d9893830dc6598429353b078271b" }
|
client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "52782033948b7d243693ca159ea519d53458c8a6" }
|
||||||
client-api-entity = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "c9504d4081a8d9893830dc6598429353b078271b" }
|
client-api-entity = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "52782033948b7d243693ca159ea519d53458c8a6" }
|
||||||
|
|
||||||
[profile.dev]
|
[profile.dev]
|
||||||
opt-level = 0
|
opt-level = 0
|
||||||
@ -136,13 +136,13 @@ rocksdb = { git = "https://github.com/rust-rocksdb/rust-rocksdb", rev = "1710120
|
|||||||
# To switch to the local path, run:
|
# To switch to the local path, run:
|
||||||
# scripts/tool/update_collab_source.sh
|
# scripts/tool/update_collab_source.sh
|
||||||
# ⚠️⚠️⚠️️
|
# ⚠️⚠️⚠️️
|
||||||
collab = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "49cf2206d7494bb3006402b807e7f171905213e3" }
|
collab = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac" }
|
||||||
collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "49cf2206d7494bb3006402b807e7f171905213e3" }
|
collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac" }
|
||||||
collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "49cf2206d7494bb3006402b807e7f171905213e3" }
|
collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac" }
|
||||||
collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "49cf2206d7494bb3006402b807e7f171905213e3" }
|
collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac" }
|
||||||
collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "49cf2206d7494bb3006402b807e7f171905213e3" }
|
collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac" }
|
||||||
collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "49cf2206d7494bb3006402b807e7f171905213e3" }
|
collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac" }
|
||||||
collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "49cf2206d7494bb3006402b807e7f171905213e3" }
|
collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "47dbd6c8033f8fd2999cb8d11f2d60ede121a0ac" }
|
||||||
|
|
||||||
# Working directory: frontend
|
# Working directory: frontend
|
||||||
# To update the commit ID, run:
|
# To update the commit ID, run:
|
||||||
|
@ -25,11 +25,11 @@ use collab_plugins::local_storage::indexeddb::IndexeddbDiskPlugin;
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub use crate::plugin_provider::CollabCloudPluginProvider;
|
pub use crate::plugin_provider::CollabCloudPluginProvider;
|
||||||
|
use collab::lock::RwLock;
|
||||||
use collab_plugins::local_storage::kv::doc::CollabKVAction;
|
use collab_plugins::local_storage::kv::doc::CollabKVAction;
|
||||||
use collab_plugins::local_storage::kv::KVTransactionDB;
|
use collab_plugins::local_storage::kv::KVTransactionDB;
|
||||||
use collab_plugins::local_storage::CollabPersistenceConfig;
|
use collab_plugins::local_storage::CollabPersistenceConfig;
|
||||||
use collab_user::core::{UserAwareness, UserAwarenessNotifier};
|
use collab_user::core::{UserAwareness, UserAwarenessNotifier};
|
||||||
use tokio::sync::RwLock;
|
|
||||||
|
|
||||||
use lib_infra::{if_native, if_wasm};
|
use lib_infra::{if_native, if_wasm};
|
||||||
use tracing::{error, instrument, trace, warn};
|
use tracing::{error, instrument, trace, warn};
|
||||||
|
@ -16,10 +16,6 @@ pub fn watch_offline_app() -> FlowyResult<(WatchContext, UnboundedReceiver<Watch
|
|||||||
let install_path = install_path().ok_or_else(|| {
|
let install_path = install_path().ok_or_else(|| {
|
||||||
FlowyError::internal().with_context("Unsupported platform for offline app watching")
|
FlowyError::internal().with_context("Unsupported platform for offline app watching")
|
||||||
})?;
|
})?;
|
||||||
trace!(
|
|
||||||
"[LLM Resource] Start watching offline app path: {:?}",
|
|
||||||
install_path,
|
|
||||||
);
|
|
||||||
let (tx, rx) = unbounded_channel();
|
let (tx, rx) = unbounded_channel();
|
||||||
let app_path = offline_app_path();
|
let app_path = offline_app_path();
|
||||||
let mut watcher = notify::recommended_watcher(move |res: Result<Event, _>| match res {
|
let mut watcher = notify::recommended_watcher(move |res: Result<Event, _>| match res {
|
||||||
|
@ -6,6 +6,7 @@ use std::collections::HashMap;
|
|||||||
use std::sync::{Arc, Weak};
|
use std::sync::{Arc, Weak};
|
||||||
|
|
||||||
use collab::core::collab::DataSource;
|
use collab::core::collab::DataSource;
|
||||||
|
use collab::lock::RwLock;
|
||||||
use collab::preclude::Collab;
|
use collab::preclude::Collab;
|
||||||
use collab_database::database::{Database, DatabaseData};
|
use collab_database::database::{Database, DatabaseData};
|
||||||
use collab_database::entity::{CreateDatabaseParams, CreateViewParams};
|
use collab_database::entity::{CreateDatabaseParams, CreateViewParams};
|
||||||
@ -20,7 +21,7 @@ use collab_entity::{CollabObject, CollabType, EncodedCollab};
|
|||||||
use collab_plugins::local_storage::kv::KVTransactionDB;
|
use collab_plugins::local_storage::kv::KVTransactionDB;
|
||||||
use dashmap::DashMap;
|
use dashmap::DashMap;
|
||||||
use tokio::select;
|
use tokio::select;
|
||||||
use tokio::sync::{Mutex, RwLock};
|
use tokio::sync::Mutex;
|
||||||
use tokio_util::sync::CancellationToken;
|
use tokio_util::sync::CancellationToken;
|
||||||
use tracing::{error, info, instrument, trace};
|
use tracing::{error, info, instrument, trace};
|
||||||
|
|
||||||
@ -39,6 +40,7 @@ use crate::services::cell::stringify_cell;
|
|||||||
use crate::services::database::DatabaseEditor;
|
use crate::services::database::DatabaseEditor;
|
||||||
use crate::services::database_view::DatabaseLayoutDepsResolver;
|
use crate::services::database_view::DatabaseLayoutDepsResolver;
|
||||||
use crate::services::field::translate_type_option::translate::TranslateTypeOption;
|
use crate::services::field::translate_type_option::translate::TranslateTypeOption;
|
||||||
|
use tokio::sync::RwLock as TokioRwLock;
|
||||||
|
|
||||||
use crate::services::field_settings::default_field_settings_by_layout_map;
|
use crate::services::field_settings::default_field_settings_by_layout_map;
|
||||||
use crate::services::share::csv::{CSVFormat, CSVImporter, ImportResult};
|
use crate::services::share::csv::{CSVFormat, CSVImporter, ImportResult};
|
||||||
@ -53,7 +55,7 @@ pub trait DatabaseUser: Send + Sync {
|
|||||||
pub struct DatabaseManager {
|
pub struct DatabaseManager {
|
||||||
user: Arc<dyn DatabaseUser>,
|
user: Arc<dyn DatabaseUser>,
|
||||||
workspace_database: ArcSwapOption<RwLock<WorkspaceDatabase>>,
|
workspace_database: ArcSwapOption<RwLock<WorkspaceDatabase>>,
|
||||||
task_scheduler: Arc<RwLock<TaskDispatcher>>,
|
task_scheduler: Arc<TokioRwLock<TaskDispatcher>>,
|
||||||
editors: Mutex<HashMap<String, Arc<DatabaseEditor>>>,
|
editors: Mutex<HashMap<String, Arc<DatabaseEditor>>>,
|
||||||
removing_editor: Arc<Mutex<HashMap<String, Arc<DatabaseEditor>>>>,
|
removing_editor: Arc<Mutex<HashMap<String, Arc<DatabaseEditor>>>>,
|
||||||
collab_builder: Arc<AppFlowyCollabBuilder>,
|
collab_builder: Arc<AppFlowyCollabBuilder>,
|
||||||
@ -64,7 +66,7 @@ pub struct DatabaseManager {
|
|||||||
impl DatabaseManager {
|
impl DatabaseManager {
|
||||||
pub fn new(
|
pub fn new(
|
||||||
database_user: Arc<dyn DatabaseUser>,
|
database_user: Arc<dyn DatabaseUser>,
|
||||||
task_scheduler: Arc<RwLock<TaskDispatcher>>,
|
task_scheduler: Arc<TokioRwLock<TaskDispatcher>>,
|
||||||
collab_builder: Arc<AppFlowyCollabBuilder>,
|
collab_builder: Arc<AppFlowyCollabBuilder>,
|
||||||
cloud_service: Arc<dyn DatabaseCloudService>,
|
cloud_service: Arc<dyn DatabaseCloudService>,
|
||||||
ai_service: Arc<dyn DatabaseAIService>,
|
ai_service: Arc<dyn DatabaseAIService>,
|
||||||
@ -370,7 +372,7 @@ impl DatabaseManager {
|
|||||||
) -> FlowyResult<EncodedCollab> {
|
) -> FlowyResult<EncodedCollab> {
|
||||||
let database_data = DatabaseData::from_json_bytes(data)?;
|
let database_data = DatabaseData::from_json_bytes(data)?;
|
||||||
|
|
||||||
let mut create_database_params = CreateDatabaseParams::from_database_data(database_data);
|
let mut create_database_params = CreateDatabaseParams::from_database_data(database_data, None);
|
||||||
let old_view_id = create_database_params.inline_view_id.clone();
|
let old_view_id = create_database_params.inline_view_id.clone();
|
||||||
create_database_params.inline_view_id = view_id.to_string();
|
create_database_params.inline_view_id = view_id.to_string();
|
||||||
|
|
||||||
@ -813,7 +815,9 @@ impl DatabaseCollabService for WorkspaceDatabaseCollabServiceImpl {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
|
if !matches!(err, DatabaseError::ActionCancelled) {
|
||||||
error!("build collab: failed to get encode collab: {}", err);
|
error!("build collab: failed to get encode collab: {}", err);
|
||||||
|
}
|
||||||
return Err(err);
|
return Err(err);
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -906,27 +910,26 @@ impl DatabaseCollabPersistenceService for DatabasePersistenceImpl {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn flush_collab(
|
fn flush_collabs(
|
||||||
&self,
|
&self,
|
||||||
object_id: &str,
|
encoded_collabs: Vec<(String, EncodedCollab)>,
|
||||||
encode_collab: EncodedCollab,
|
|
||||||
) -> Result<(), DatabaseError> {
|
) -> Result<(), DatabaseError> {
|
||||||
let uid = self
|
let uid = self
|
||||||
.user
|
.user
|
||||||
.user_id()
|
.user_id()
|
||||||
.map_err(|err| DatabaseError::Internal(err.into()))?;
|
.map_err(|err| DatabaseError::Internal(err.into()))?;
|
||||||
if let Ok(Some(collab_db)) = self.user.collab_db(uid).map(|weak| weak.upgrade()) {
|
if let Ok(Some(collab_db)) = self.user.collab_db(uid).map(|weak| weak.upgrade()) {
|
||||||
trace!("[Database]: flush collab:{}", object_id);
|
|
||||||
let write_txn = collab_db.write_txn();
|
let write_txn = collab_db.write_txn();
|
||||||
|
for (object_id, encode_collab) in encoded_collabs {
|
||||||
write_txn
|
write_txn
|
||||||
.flush_doc(
|
.flush_doc(
|
||||||
uid,
|
uid,
|
||||||
object_id,
|
&object_id,
|
||||||
encode_collab.state_vector.to_vec(),
|
encode_collab.state_vector.to_vec(),
|
||||||
encode_collab.doc_state.to_vec(),
|
encode_collab.doc_state.to_vec(),
|
||||||
)
|
)
|
||||||
.map_err(|err| DatabaseError::Internal(anyhow!("failed to flush doc: {}", err)))?;
|
.map_err(|err| DatabaseError::Internal(anyhow!("failed to flush doc: {}", err)))?;
|
||||||
|
}
|
||||||
write_txn
|
write_txn
|
||||||
.commit_transaction()
|
.commit_transaction()
|
||||||
.map_err(|err| DatabaseError::Internal(anyhow!("failed to commit transaction: {}", err)))?;
|
.map_err(|err| DatabaseError::Internal(anyhow!("failed to commit transaction: {}", err)))?;
|
||||||
|
@ -6,7 +6,7 @@ use collab_database::fields::Field;
|
|||||||
use collab_database::rows::{Row, RowCell};
|
use collab_database::rows::{Row, RowCell};
|
||||||
use flowy_error::FlowyResult;
|
use flowy_error::FlowyResult;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use tokio::sync::RwLock;
|
use tokio::sync::RwLock as TokioRwLock;
|
||||||
|
|
||||||
use lib_infra::priority_task::{QualityOfService, Task, TaskContent, TaskDispatcher};
|
use lib_infra::priority_task::{QualityOfService, Task, TaskContent, TaskDispatcher};
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ pub struct CalculationsController {
|
|||||||
handler_id: String,
|
handler_id: String,
|
||||||
delegate: Box<dyn CalculationsDelegate>,
|
delegate: Box<dyn CalculationsDelegate>,
|
||||||
calculations_by_field_cache: CalculationsByFieldIdCache,
|
calculations_by_field_cache: CalculationsByFieldIdCache,
|
||||||
task_scheduler: Arc<RwLock<TaskDispatcher>>,
|
task_scheduler: Arc<TokioRwLock<TaskDispatcher>>,
|
||||||
calculations_service: CalculationsService,
|
calculations_service: CalculationsService,
|
||||||
notifier: DatabaseViewChangedNotifier,
|
notifier: DatabaseViewChangedNotifier,
|
||||||
}
|
}
|
||||||
@ -51,7 +51,7 @@ impl CalculationsController {
|
|||||||
handler_id: &str,
|
handler_id: &str,
|
||||||
delegate: T,
|
delegate: T,
|
||||||
calculations: Vec<Arc<Calculation>>,
|
calculations: Vec<Arc<Calculation>>,
|
||||||
task_scheduler: Arc<RwLock<TaskDispatcher>>,
|
task_scheduler: Arc<TokioRwLock<TaskDispatcher>>,
|
||||||
notifier: DatabaseViewChangedNotifier,
|
notifier: DatabaseViewChangedNotifier,
|
||||||
) -> Self
|
) -> Self
|
||||||
where
|
where
|
||||||
|
@ -22,6 +22,7 @@ use crate::utils::cache::AnyTypeCache;
|
|||||||
use crate::DatabaseUser;
|
use crate::DatabaseUser;
|
||||||
use arc_swap::ArcSwap;
|
use arc_swap::ArcSwap;
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
|
use collab::lock::RwLock;
|
||||||
use collab_database::database::Database;
|
use collab_database::database::Database;
|
||||||
use collab_database::entity::DatabaseView;
|
use collab_database::entity::DatabaseView;
|
||||||
use collab_database::fields::{Field, TypeOptionData};
|
use collab_database::fields::{Field, TypeOptionData};
|
||||||
@ -40,7 +41,8 @@ use lib_infra::util::timestamp;
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use tokio::sync::{broadcast, oneshot, RwLock};
|
use tokio::sync::RwLock as TokioRwLock;
|
||||||
|
use tokio::sync::{broadcast, oneshot};
|
||||||
use tokio_util::sync::CancellationToken;
|
use tokio_util::sync::CancellationToken;
|
||||||
use tracing::{debug, error, event, info, instrument, trace, warn};
|
use tracing::{debug, error, event, info, instrument, trace, warn};
|
||||||
|
|
||||||
@ -66,7 +68,7 @@ impl DatabaseEditor {
|
|||||||
pub async fn new(
|
pub async fn new(
|
||||||
user: Arc<dyn DatabaseUser>,
|
user: Arc<dyn DatabaseUser>,
|
||||||
database: Arc<RwLock<Database>>,
|
database: Arc<RwLock<Database>>,
|
||||||
task_scheduler: Arc<RwLock<TaskDispatcher>>,
|
task_scheduler: Arc<TokioRwLock<TaskDispatcher>>,
|
||||||
collab_builder: Arc<AppFlowyCollabBuilder>,
|
collab_builder: Arc<AppFlowyCollabBuilder>,
|
||||||
) -> FlowyResult<Arc<Self>> {
|
) -> FlowyResult<Arc<Self>> {
|
||||||
let notification_sender = Arc::new(DebounceNotificationSender::new(200));
|
let notification_sender = Arc::new(DebounceNotificationSender::new(200));
|
||||||
@ -1576,7 +1578,7 @@ impl DatabaseEditor {
|
|||||||
|
|
||||||
struct DatabaseViewOperationImpl {
|
struct DatabaseViewOperationImpl {
|
||||||
database: Arc<RwLock<Database>>,
|
database: Arc<RwLock<Database>>,
|
||||||
task_scheduler: Arc<RwLock<TaskDispatcher>>,
|
task_scheduler: Arc<TokioRwLock<TaskDispatcher>>,
|
||||||
cell_cache: CellCache,
|
cell_cache: CellCache,
|
||||||
editor_by_view_id: Arc<RwLock<EditorByViewId>>,
|
editor_by_view_id: Arc<RwLock<EditorByViewId>>,
|
||||||
database_cancellation: Arc<RwLock<Option<CancellationToken>>>,
|
database_cancellation: Arc<RwLock<Option<CancellationToken>>>,
|
||||||
@ -1860,7 +1862,7 @@ impl DatabaseViewOperation for DatabaseViewOperationImpl {
|
|||||||
.update_layout_type(view_id, layout_type);
|
.update_layout_type(view_id, layout_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_task_scheduler(&self) -> Arc<RwLock<TaskDispatcher>> {
|
fn get_task_scheduler(&self) -> Arc<TokioRwLock<TaskDispatcher>> {
|
||||||
self.task_scheduler.clone()
|
self.task_scheduler.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
use crate::entities::{DatabaseSyncStatePB, DidFetchRowPB, RowsChangePB};
|
use crate::entities::{DatabaseSyncStatePB, DidFetchRowPB, RowsChangePB};
|
||||||
use crate::notification::{send_notification, DatabaseNotification, DATABASE_OBSERVABLE_SOURCE};
|
use crate::notification::{send_notification, DatabaseNotification, DATABASE_OBSERVABLE_SOURCE};
|
||||||
use crate::services::database::{DatabaseEditor, UpdatedRow};
|
use crate::services::database::{DatabaseEditor, UpdatedRow};
|
||||||
|
use collab::lock::RwLock;
|
||||||
use collab_database::blocks::BlockEvent;
|
use collab_database::blocks::BlockEvent;
|
||||||
use collab_database::database::Database;
|
use collab_database::database::Database;
|
||||||
use collab_database::fields::FieldChange;
|
use collab_database::fields::FieldChange;
|
||||||
@ -10,7 +11,6 @@ use flowy_notification::{DebounceNotificationSender, NotificationBuilder};
|
|||||||
use futures::StreamExt;
|
use futures::StreamExt;
|
||||||
use lib_dispatch::prelude::af_spawn;
|
use lib_dispatch::prelude::af_spawn;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use tokio::sync::RwLock;
|
|
||||||
use tracing::{trace, warn};
|
use tracing::{trace, warn};
|
||||||
|
|
||||||
pub(crate) async fn observe_sync_state(database_id: &str, database: &Arc<RwLock<Database>>) {
|
pub(crate) async fn observe_sync_state(database_id: &str, database: &Arc<RwLock<Database>>) {
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
|
use collab::lock::RwLock;
|
||||||
use collab_database::database::{gen_field_id, Database};
|
use collab_database::database::{gen_field_id, Database};
|
||||||
use collab_database::fields::Field;
|
use collab_database::fields::Field;
|
||||||
use collab_database::views::{
|
use collab_database::views::{
|
||||||
DatabaseLayout, FieldSettingsByFieldIdMap, LayoutSetting, OrderObjectPosition,
|
DatabaseLayout, FieldSettingsByFieldIdMap, LayoutSetting, OrderObjectPosition,
|
||||||
};
|
};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use tokio::sync::RwLock;
|
|
||||||
|
|
||||||
use crate::entities::FieldType;
|
use crate::entities::FieldType;
|
||||||
use crate::services::field::{DateTypeOption, SingleSelectTypeOption};
|
use crate::services::field::{DateTypeOption, SingleSelectTypeOption};
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
|
use collab::lock::RwLock;
|
||||||
use collab_database::database::Database;
|
use collab_database::database::Database;
|
||||||
use collab_database::entity::DatabaseView;
|
use collab_database::entity::DatabaseView;
|
||||||
use collab_database::fields::{Field, TypeOptionData};
|
use collab_database::fields::{Field, TypeOptionData};
|
||||||
@ -6,7 +7,7 @@ use collab_database::rows::{Row, RowCell, RowDetail, RowId};
|
|||||||
use collab_database::views::{DatabaseLayout, LayoutSetting};
|
use collab_database::views::{DatabaseLayout, LayoutSetting};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use tokio::sync::RwLock;
|
use tokio::sync::RwLock as TokioRwLock;
|
||||||
|
|
||||||
use flowy_error::FlowyError;
|
use flowy_error::FlowyError;
|
||||||
use lib_infra::priority_task::TaskDispatcher;
|
use lib_infra::priority_task::TaskDispatcher;
|
||||||
@ -118,7 +119,7 @@ pub trait DatabaseViewOperation: Send + Sync + 'static {
|
|||||||
async fn update_layout_type(&self, view_id: &str, layout_type: &DatabaseLayout);
|
async fn update_layout_type(&self, view_id: &str, layout_type: &DatabaseLayout);
|
||||||
|
|
||||||
/// Returns a `TaskDispatcher` used to poll a `Task`
|
/// Returns a `TaskDispatcher` used to poll a `Task`
|
||||||
fn get_task_scheduler(&self) -> Arc<RwLock<TaskDispatcher>>;
|
fn get_task_scheduler(&self) -> Arc<TokioRwLock<TaskDispatcher>>;
|
||||||
|
|
||||||
fn get_type_option_cell_handler(
|
fn get_type_option_cell_handler(
|
||||||
&self,
|
&self,
|
||||||
|
@ -2,14 +2,13 @@ use collab_database::database::Database;
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use nanoid::nanoid;
|
|
||||||
use tokio::sync::{broadcast, RwLock};
|
|
||||||
|
|
||||||
use flowy_error::FlowyResult;
|
|
||||||
|
|
||||||
use crate::services::cell::CellCache;
|
use crate::services::cell::CellCache;
|
||||||
use crate::services::database::DatabaseRowEvent;
|
use crate::services::database::DatabaseRowEvent;
|
||||||
use crate::services::database_view::{DatabaseViewEditor, DatabaseViewOperation};
|
use crate::services::database_view::{DatabaseViewEditor, DatabaseViewOperation};
|
||||||
|
use collab::lock::RwLock;
|
||||||
|
use flowy_error::FlowyResult;
|
||||||
|
use nanoid::nanoid;
|
||||||
|
use tokio::sync::broadcast;
|
||||||
|
|
||||||
pub type RowEventSender = broadcast::Sender<DatabaseRowEvent>;
|
pub type RowEventSender = broadcast::Sender<DatabaseRowEvent>;
|
||||||
pub type RowEventReceiver = broadcast::Receiver<DatabaseRowEvent>;
|
pub type RowEventReceiver = broadcast::Receiver<DatabaseRowEvent>;
|
||||||
|
@ -3,6 +3,7 @@ use std::collections::HashMap;
|
|||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use collab::lock::RwLock;
|
||||||
use collab_database::database::gen_database_filter_id;
|
use collab_database::database::gen_database_filter_id;
|
||||||
use collab_database::fields::Field;
|
use collab_database::fields::Field;
|
||||||
use collab_database::rows::{Cell, Cells, Row, RowDetail, RowId};
|
use collab_database::rows::{Cell, Cells, Row, RowDetail, RowId};
|
||||||
@ -10,7 +11,7 @@ use dashmap::DashMap;
|
|||||||
use flowy_error::FlowyResult;
|
use flowy_error::FlowyResult;
|
||||||
use lib_infra::priority_task::{QualityOfService, Task, TaskContent, TaskDispatcher};
|
use lib_infra::priority_task::{QualityOfService, Task, TaskContent, TaskDispatcher};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use tokio::sync::RwLock;
|
use tokio::sync::RwLock as TokioRwLock;
|
||||||
use tracing::{error, trace};
|
use tracing::{error, trace};
|
||||||
|
|
||||||
use crate::entities::filter_entities::*;
|
use crate::entities::filter_entities::*;
|
||||||
@ -41,7 +42,7 @@ pub struct FilterController {
|
|||||||
result_by_row_id: DashMap<RowId, bool>,
|
result_by_row_id: DashMap<RowId, bool>,
|
||||||
cell_cache: CellCache,
|
cell_cache: CellCache,
|
||||||
filters: RwLock<Vec<Filter>>,
|
filters: RwLock<Vec<Filter>>,
|
||||||
task_scheduler: Arc<RwLock<TaskDispatcher>>,
|
task_scheduler: Arc<TokioRwLock<TaskDispatcher>>,
|
||||||
notifier: DatabaseViewChangedNotifier,
|
notifier: DatabaseViewChangedNotifier,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,7 +57,7 @@ impl FilterController {
|
|||||||
view_id: &str,
|
view_id: &str,
|
||||||
handler_id: &str,
|
handler_id: &str,
|
||||||
delegate: T,
|
delegate: T,
|
||||||
task_scheduler: Arc<RwLock<TaskDispatcher>>,
|
task_scheduler: Arc<TokioRwLock<TaskDispatcher>>,
|
||||||
cell_cache: CellCache,
|
cell_cache: CellCache,
|
||||||
notifier: DatabaseViewChangedNotifier,
|
notifier: DatabaseViewChangedNotifier,
|
||||||
) -> Self
|
) -> Self
|
||||||
|
@ -8,7 +8,7 @@ use collab_database::fields::Field;
|
|||||||
use collab_database::rows::{Cell, Row, RowId};
|
use collab_database::rows::{Cell, Row, RowId};
|
||||||
use rayon::prelude::ParallelSliceMut;
|
use rayon::prelude::ParallelSliceMut;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use tokio::sync::RwLock;
|
use tokio::sync::RwLock as TokioRwLock;
|
||||||
|
|
||||||
use flowy_error::FlowyResult;
|
use flowy_error::FlowyResult;
|
||||||
use lib_infra::priority_task::{QualityOfService, Task, TaskContent, TaskDispatcher};
|
use lib_infra::priority_task::{QualityOfService, Task, TaskContent, TaskDispatcher};
|
||||||
@ -38,7 +38,7 @@ pub struct SortController {
|
|||||||
view_id: String,
|
view_id: String,
|
||||||
handler_id: String,
|
handler_id: String,
|
||||||
delegate: Box<dyn SortDelegate>,
|
delegate: Box<dyn SortDelegate>,
|
||||||
task_scheduler: Arc<RwLock<TaskDispatcher>>,
|
task_scheduler: Arc<TokioRwLock<TaskDispatcher>>,
|
||||||
sorts: Vec<Arc<Sort>>,
|
sorts: Vec<Arc<Sort>>,
|
||||||
cell_cache: CellCache,
|
cell_cache: CellCache,
|
||||||
row_index_cache: HashMap<RowId, usize>,
|
row_index_cache: HashMap<RowId, usize>,
|
||||||
@ -57,7 +57,7 @@ impl SortController {
|
|||||||
handler_id: &str,
|
handler_id: &str,
|
||||||
sorts: Vec<Arc<Sort>>,
|
sorts: Vec<Arc<Sort>>,
|
||||||
delegate: T,
|
delegate: T,
|
||||||
task_scheduler: Arc<RwLock<TaskDispatcher>>,
|
task_scheduler: Arc<TokioRwLock<TaskDispatcher>>,
|
||||||
cell_cache: CellCache,
|
cell_cache: CellCache,
|
||||||
notifier: DatabaseViewChangedNotifier,
|
notifier: DatabaseViewChangedNotifier,
|
||||||
) -> Self
|
) -> Self
|
||||||
|
@ -4,6 +4,7 @@ use std::sync::Weak;
|
|||||||
use collab::core::collab::DataSource;
|
use collab::core::collab::DataSource;
|
||||||
use collab::core::origin::CollabOrigin;
|
use collab::core::origin::CollabOrigin;
|
||||||
use collab::entity::EncodedCollab;
|
use collab::entity::EncodedCollab;
|
||||||
|
use collab::lock::RwLock;
|
||||||
use collab::preclude::Collab;
|
use collab::preclude::Collab;
|
||||||
use collab_document::blocks::DocumentData;
|
use collab_document::blocks::DocumentData;
|
||||||
use collab_document::conversions::convert_document_to_plain_text;
|
use collab_document::conversions::convert_document_to_plain_text;
|
||||||
@ -17,7 +18,6 @@ use collab_plugins::local_storage::kv::KVTransactionDB;
|
|||||||
use collab_plugins::CollabKVDB;
|
use collab_plugins::CollabKVDB;
|
||||||
use dashmap::DashMap;
|
use dashmap::DashMap;
|
||||||
use lib_infra::util::timestamp;
|
use lib_infra::util::timestamp;
|
||||||
use tokio::sync::RwLock;
|
|
||||||
use tracing::trace;
|
use tracing::trace;
|
||||||
use tracing::{event, instrument};
|
use tracing::{event, instrument};
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ use crate::view_operation::{
|
|||||||
};
|
};
|
||||||
use arc_swap::ArcSwapOption;
|
use arc_swap::ArcSwapOption;
|
||||||
use collab::core::collab::DataSource;
|
use collab::core::collab::DataSource;
|
||||||
|
use collab::lock::RwLock;
|
||||||
use collab_entity::{CollabType, EncodedCollab};
|
use collab_entity::{CollabType, EncodedCollab};
|
||||||
use collab_folder::{
|
use collab_folder::{
|
||||||
Folder, FolderData, FolderNotify, Section, SectionItem, TrashInfo, View, ViewLayout, ViewUpdate,
|
Folder, FolderData, FolderNotify, Section, SectionItem, TrashInfo, View, ViewLayout, ViewUpdate,
|
||||||
@ -44,7 +45,6 @@ use futures::future;
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::fmt::{Display, Formatter};
|
use std::fmt::{Display, Formatter};
|
||||||
use std::sync::{Arc, Weak};
|
use std::sync::{Arc, Weak};
|
||||||
use tokio::sync::RwLock;
|
|
||||||
use tracing::{error, info, instrument};
|
use tracing::{error, info, instrument};
|
||||||
|
|
||||||
pub trait FolderUser: Send + Sync {
|
pub trait FolderUser: Send + Sync {
|
||||||
|
@ -2,12 +2,12 @@ use crate::manager::{FolderInitDataSource, FolderManager};
|
|||||||
use crate::manager_observer::*;
|
use crate::manager_observer::*;
|
||||||
use crate::user_default::DefaultFolderBuilder;
|
use crate::user_default::DefaultFolderBuilder;
|
||||||
use collab::core::collab::DataSource;
|
use collab::core::collab::DataSource;
|
||||||
|
use collab::lock::RwLock;
|
||||||
use collab_entity::{CollabType, EncodedCollab};
|
use collab_entity::{CollabType, EncodedCollab};
|
||||||
use collab_folder::{Folder, FolderNotify};
|
use collab_folder::{Folder, FolderNotify};
|
||||||
use collab_integrate::CollabKVDB;
|
use collab_integrate::CollabKVDB;
|
||||||
use flowy_error::{FlowyError, FlowyResult};
|
use flowy_error::{FlowyError, FlowyResult};
|
||||||
use std::sync::{Arc, Weak};
|
use std::sync::{Arc, Weak};
|
||||||
use tokio::sync::RwLock;
|
|
||||||
use tokio::task::spawn_blocking;
|
use tokio::task::spawn_blocking;
|
||||||
use tracing::{event, info, Level};
|
use tracing::{event, info, Level};
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ use crate::entities::{
|
|||||||
use crate::manager::{get_workspace_private_view_pbs, get_workspace_public_view_pbs, FolderUser};
|
use crate::manager::{get_workspace_private_view_pbs, get_workspace_public_view_pbs, FolderUser};
|
||||||
use crate::notification::{send_notification, FolderNotification};
|
use crate::notification::{send_notification, FolderNotification};
|
||||||
use collab::core::collab_state::SyncState;
|
use collab::core::collab_state::SyncState;
|
||||||
|
use collab::lock::RwLock;
|
||||||
use collab_folder::{
|
use collab_folder::{
|
||||||
Folder, SectionChange, SectionChangeReceiver, TrashSectionChange, View, ViewChange,
|
Folder, SectionChange, SectionChangeReceiver, TrashSectionChange, View, ViewChange,
|
||||||
ViewChangeReceiver,
|
ViewChangeReceiver,
|
||||||
@ -12,7 +13,6 @@ use collab_folder::{
|
|||||||
use lib_dispatch::prelude::af_spawn;
|
use lib_dispatch::prelude::af_spawn;
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
use std::sync::Weak;
|
use std::sync::Weak;
|
||||||
use tokio::sync::RwLock;
|
|
||||||
use tokio_stream::wrappers::WatchStream;
|
use tokio_stream::wrappers::WatchStream;
|
||||||
use tokio_stream::StreamExt;
|
use tokio_stream::StreamExt;
|
||||||
use tracing::{event, trace, Level};
|
use tracing::{event, trace, Level};
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
use crate::manager::{FolderManager, FolderUser};
|
use crate::manager::{FolderManager, FolderUser};
|
||||||
use crate::view_operation::FolderOperationHandlers;
|
use crate::view_operation::FolderOperationHandlers;
|
||||||
|
use collab::lock::RwLock;
|
||||||
use collab_folder::Folder;
|
use collab_folder::Folder;
|
||||||
use collab_integrate::collab_builder::AppFlowyCollabBuilder;
|
use collab_integrate::collab_builder::AppFlowyCollabBuilder;
|
||||||
use flowy_folder_pub::cloud::FolderCloudService;
|
use flowy_folder_pub::cloud::FolderCloudService;
|
||||||
use flowy_search_pub::entities::FolderIndexManager;
|
use flowy_search_pub::entities::FolderIndexManager;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use tokio::sync::RwLock;
|
|
||||||
|
|
||||||
impl FolderManager {
|
impl FolderManager {
|
||||||
pub fn get_mutex_folder(&self) -> Option<Arc<RwLock<Folder>>> {
|
pub fn get_mutex_folder(&self) -> Option<Arc<RwLock<Folder>>> {
|
||||||
|
@ -14,7 +14,7 @@ use collab_database::database::{
|
|||||||
is_database_collab, mut_database_views_with_collab, reset_inline_view_id,
|
is_database_collab, mut_database_views_with_collab, reset_inline_view_id,
|
||||||
};
|
};
|
||||||
use collab_database::rows::{database_row_document_id_from_row_id, mut_row_with_collab, RowId};
|
use collab_database::rows::{database_row_document_id_from_row_id, mut_row_with_collab, RowId};
|
||||||
use collab_database::workspace_database::DatabaseMetaList;
|
use collab_database::workspace_database::WorkspaceDatabaseBody;
|
||||||
use collab_document::document_data::default_document_collab_data;
|
use collab_document::document_data::default_document_collab_data;
|
||||||
use collab_entity::CollabType;
|
use collab_entity::CollabType;
|
||||||
use collab_folder::{Folder, UserId, View, ViewIdentifier, ViewLayout};
|
use collab_folder::{Folder, UserId, View, ViewIdentifier, ViewLayout};
|
||||||
@ -353,7 +353,7 @@ where
|
|||||||
&mut imported_database_indexer.transact_mut(),
|
&mut imported_database_indexer.transact_mut(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let array = DatabaseMetaList::new(&mut imported_database_indexer);
|
let array = WorkspaceDatabaseBody::new(&mut imported_database_indexer);
|
||||||
for database_meta_list in array.get_all_database_meta(&imported_database_indexer.transact()) {
|
for database_meta_list in array.get_all_database_meta(&imported_database_indexer.transact()) {
|
||||||
database_view_ids_by_database_id.insert(
|
database_view_ids_by_database_id.insert(
|
||||||
old_to_new_id_map.exchange_new_id(&database_meta_list.database_id),
|
old_to_new_id_map.exchange_new_id(&database_meta_list.database_id),
|
||||||
@ -403,7 +403,7 @@ where
|
|||||||
let new_uid = new_user_session.user_id;
|
let new_uid = new_user_session.user_id;
|
||||||
let new_object_id = &new_user_session.user_workspace.database_indexer_id;
|
let new_object_id = &new_user_session.user_workspace.database_indexer_id;
|
||||||
|
|
||||||
let array = DatabaseMetaList::new(&mut database_with_views_collab);
|
let array = WorkspaceDatabaseBody::new(&mut database_with_views_collab);
|
||||||
let mut txn = database_with_views_collab.transact_mut();
|
let mut txn = database_with_views_collab.transact_mut();
|
||||||
for database_meta in array.get_all_database_meta(&txn) {
|
for database_meta in array.get_all_database_meta(&txn) {
|
||||||
array.update_database(&mut txn, &database_meta.database_id, |update| {
|
array.update_database(&mut txn, &database_meta.database_id, |update| {
|
||||||
|
@ -3,6 +3,7 @@ use collab_integrate::CollabKVDB;
|
|||||||
use flowy_error::{internal_error, ErrorCode, FlowyResult};
|
use flowy_error::{internal_error, ErrorCode, FlowyResult};
|
||||||
|
|
||||||
use arc_swap::ArcSwapOption;
|
use arc_swap::ArcSwapOption;
|
||||||
|
use collab::lock::RwLock;
|
||||||
use collab_user::core::UserAwareness;
|
use collab_user::core::UserAwareness;
|
||||||
use dashmap::DashMap;
|
use dashmap::DashMap;
|
||||||
use flowy_server_pub::AuthenticatorType;
|
use flowy_server_pub::AuthenticatorType;
|
||||||
@ -18,7 +19,7 @@ use serde_json::Value;
|
|||||||
use std::string::ToString;
|
use std::string::ToString;
|
||||||
use std::sync::atomic::{AtomicI64, Ordering};
|
use std::sync::atomic::{AtomicI64, Ordering};
|
||||||
use std::sync::{Arc, Weak};
|
use std::sync::{Arc, Weak};
|
||||||
use tokio::sync::{Mutex, RwLock};
|
use tokio::sync::Mutex;
|
||||||
use tokio_stream::StreamExt;
|
use tokio_stream::StreamExt;
|
||||||
use tracing::{debug, error, event, info, instrument, trace, warn};
|
use tracing::{debug, error, event, info, instrument, trace, warn};
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ use std::sync::{Arc, Weak};
|
|||||||
|
|
||||||
use anyhow::Context;
|
use anyhow::Context;
|
||||||
use collab::core::collab::DataSource;
|
use collab::core::collab::DataSource;
|
||||||
|
use collab::lock::RwLock;
|
||||||
use collab_entity::reminder::Reminder;
|
use collab_entity::reminder::Reminder;
|
||||||
use collab_entity::CollabType;
|
use collab_entity::CollabType;
|
||||||
use collab_integrate::collab_builder::{
|
use collab_integrate::collab_builder::{
|
||||||
@ -9,7 +10,6 @@ use collab_integrate::collab_builder::{
|
|||||||
};
|
};
|
||||||
use collab_user::core::{UserAwareness, UserAwarenessNotifier};
|
use collab_user::core::{UserAwareness, UserAwarenessNotifier};
|
||||||
use dashmap::try_result::TryResult;
|
use dashmap::try_result::TryResult;
|
||||||
use tokio::sync::RwLock;
|
|
||||||
use tracing::{error, info, instrument, trace};
|
use tracing::{error, info, instrument, trace};
|
||||||
|
|
||||||
use collab_integrate::CollabKVDB;
|
use collab_integrate::CollabKVDB;
|
||||||
|
@ -73,7 +73,7 @@ FROM archlinux/archlinux
|
|||||||
RUN pacman -Syyu --noconfirm
|
RUN pacman -Syyu --noconfirm
|
||||||
|
|
||||||
# Install runtime dependencies
|
# Install runtime dependencies
|
||||||
RUN pacman -S --noconfirm xdg-user-dirs gtk3 libkeybinder3 && \
|
RUN pacman -S --noconfirm xdg-user-dirs gtk3 libkeybinder3 libnotify rocksdb && \
|
||||||
pacman -Scc --noconfirm
|
pacman -Scc --noconfirm
|
||||||
|
|
||||||
# Set up appflowy user
|
# Set up appflowy user
|
||||||
|
Loading…
Reference in New Issue
Block a user