diff --git a/frontend/appflowy_flutter/integration_test/desktop/document/document_with_inline_math_equation_test.dart b/frontend/appflowy_flutter/integration_test/desktop/document/document_with_inline_math_equation_test.dart index 27f02f17cd..c4a8e71a02 100644 --- a/frontend/appflowy_flutter/integration_test/desktop/document/document_with_inline_math_equation_test.dart +++ b/frontend/appflowy_flutter/integration_test/desktop/document/document_with_inline_math_equation_test.dart @@ -33,7 +33,7 @@ void main() { ); // tap the inline math equation button - final inlineMathEquationButton = find.byTooltip( + final inlineMathEquationButton = find.findFlowyTooltip( LocaleKeys.document_plugins_createInlineMathEquation.tr(), ); await tester.tapButton(inlineMathEquationButton); @@ -78,7 +78,7 @@ void main() { ); // tap the inline math equation button - var inlineMathEquationButton = find.byTooltip( + var inlineMathEquationButton = find.findFlowyTooltip( LocaleKeys.document_plugins_createInlineMathEquation.tr(), ); await tester.tapButton(inlineMathEquationButton); @@ -93,11 +93,11 @@ void main() { ); // expect to the see the inline math equation button is highlighted - inlineMathEquationButton = find.byWidgetPredicate( - (widget) => - widget is SVGIconItemWidget && - widget.tooltip == - LocaleKeys.document_plugins_createInlineMathEquation.tr(), + inlineMathEquationButton = find.descendant( + of: find.findFlowyTooltip( + LocaleKeys.document_plugins_createInlineMathEquation.tr(), + ), + matching: find.byType(SVGIconItemWidget), ); expect( tester.widget(inlineMathEquationButton).isHighlight, diff --git a/frontend/appflowy_flutter/integration_test/desktop/uncategorized/open_ai_smart_menu_test.dart b/frontend/appflowy_flutter/integration_test/desktop/uncategorized/open_ai_smart_menu_test.dart deleted file mode 100644 index 1d42cd8d28..0000000000 --- a/frontend/appflowy_flutter/integration_test/desktop/uncategorized/open_ai_smart_menu_test.dart +++ /dev/null @@ -1,113 +0,0 @@ -import 'package:appflowy/plugins/document/presentation/editor_plugins/openai/service/ai_client.dart'; -import 'package:appflowy/startup/startup.dart'; -import 'package:appflowy_editor/appflowy_editor.dart'; -import 'package:appflowy_editor/src/render/toolbar/toolbar_widget.dart'; -import 'package:flowy_infra_ui/flowy_infra_ui.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:integration_test/integration_test.dart'; - -import '../../shared/mock/mock_openai_repository.dart'; -import '../../shared/util.dart'; - -void main() { - IntegrationTestWidgetsFlutterBinding.ensureInitialized(); - const service = TestWorkspaceService(TestWorkspace.aiWorkSpace); - - group('integration tests for open-ai smart menu', () { - setUpAll(() async => service.setUpAll()); - setUp(() async => service.setUp()); - - testWidgets('testing selection on open-ai smart menu replace', - (tester) async { - final appFlowyEditor = await setUpOpenAITesting(tester); - final editorState = appFlowyEditor.editorState; - - editorState.service.selectionService.updateSelection( - Selection( - start: Position(path: [1], offset: 4), - end: Position(path: [1], offset: 10), - ), - ); - await tester.pumpAndSettle(const Duration(milliseconds: 500)); - await tester.pumpAndSettle(); - - expect(find.byType(ToolbarWidget), findsAtLeastNWidgets(1)); - - await tester.tap(find.byTooltip('AI Assistants')); - await tester.pumpAndSettle(const Duration(milliseconds: 500)); - - await tester.tap(find.text('Summarize')); - await tester.pumpAndSettle(); - - await tester - .tap(find.byType(FlowyRichTextButton, skipOffstage: false).first); - await tester.pumpAndSettle(); - - expect( - editorState.service.selectionService.currentSelection.value, - Selection( - start: Position(path: [1], offset: 4), - end: Position(path: [1], offset: 84), - ), - ); - }); - testWidgets('testing selection on open-ai smart menu insert', - (tester) async { - final appFlowyEditor = await setUpOpenAITesting(tester); - final editorState = appFlowyEditor.editorState; - - editorState.service.selectionService.updateSelection( - Selection( - start: Position(path: [1]), - end: Position(path: [1], offset: 5), - ), - ); - await tester.pumpAndSettle(const Duration(milliseconds: 500)); - await tester.pumpAndSettle(); - expect(find.byType(ToolbarWidget), findsAtLeastNWidgets(1)); - - await tester.tap(find.byTooltip('AI Assistants')); - await tester.pumpAndSettle(const Duration(milliseconds: 500)); - - await tester.tap(find.text('Summarize')); - await tester.pumpAndSettle(); - - await tester - .tap(find.byType(FlowyRichTextButton, skipOffstage: false).at(1)); - await tester.pumpAndSettle(); - - expect( - editorState.service.selectionService.currentSelection.value, - Selection( - start: Position(path: [2]), - end: Position(path: [3]), - ), - ); - }); - }); -} - -Future setUpOpenAITesting(WidgetTester tester) async { - await tester.initializeAppFlowy(); - await mockOpenAIRepository(); - - await simulateKeyDownEvent(LogicalKeyboardKey.controlLeft); - await simulateKeyDownEvent(LogicalKeyboardKey.backslash); - await tester.pumpAndSettle(); - - final Finder editor = find.byType(AppFlowyEditor); - await tester.tap(editor); - await tester.pumpAndSettle(); - return tester.state(editor).widget as AppFlowyEditor; -} - -Future mockOpenAIRepository() async { - await getIt.unregister(); - getIt.registerFactoryAsync( - () => Future.value( - MockOpenAIRepository(), - ), - ); - return; -} diff --git a/frontend/appflowy_flutter/integration_test/shared/base.dart b/frontend/appflowy_flutter/integration_test/shared/base.dart index ab72247c24..16a576154f 100644 --- a/frontend/appflowy_flutter/integration_test/shared/base.dart +++ b/frontend/appflowy_flutter/integration_test/shared/base.dart @@ -1,9 +1,6 @@ import 'dart:async'; import 'dart:io'; -import 'package:flutter/gestures.dart'; -import 'package:flutter/services.dart'; - import 'package:appflowy/env/cloud_env.dart'; import 'package:appflowy/env/cloud_env_test.dart'; import 'package:appflowy/startup/entry_point.dart'; @@ -16,6 +13,8 @@ import 'package:appflowy/user/presentation/screens/sign_in_screen/widgets/widget import 'package:appflowy/workspace/application/settings/prelude.dart'; import 'package:flowy_infra/uuid.dart'; import 'package:flowy_infra_ui/flowy_infra_ui.dart'; +import 'package:flutter/gestures.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:path/path.dart' as p; import 'package:path_provider/path_provider.dart'; @@ -231,6 +230,16 @@ extension AppFlowyFinderTestBase on CommonFinders { (widget) => widget is FlowyText && widget.text == text, ); } + + Finder findFlowyTooltip(String richMessage, {bool skipOffstage = true}) { + return byWidgetPredicate( + (widget) => + widget is FlowyTooltip && + widget.richMessage != null && + widget.richMessage!.toPlainText().contains(richMessage), + skipOffstage: skipOffstage, + ); + } } Future useTestSupabaseCloud() async { diff --git a/frontend/appflowy_flutter/integration_test/shared/editor_test_operations.dart b/frontend/appflowy_flutter/integration_test/shared/editor_test_operations.dart index a92f6548bb..0c712f8e24 100644 --- a/frontend/appflowy_flutter/integration_test/shared/editor_test_operations.dart +++ b/frontend/appflowy_flutter/integration_test/shared/editor_test_operations.dart @@ -3,7 +3,7 @@ import 'dart:ui'; import 'package:appflowy/generated/locale_keys.g.dart'; import 'package:appflowy/plugins/base/emoji/emoji_picker.dart'; -import 'package:appflowy/plugins/base/emoji/emoji_skin_tone.dart'; +import 'package:appflowy/shared/icon_emoji_picker/emoji_skin_tone.dart'; import 'package:appflowy/plugins/document/presentation/editor_plugins/actions/block_action_add_button.dart'; import 'package:appflowy/plugins/document/presentation/editor_plugins/actions/block_action_option_button.dart'; import 'package:appflowy/plugins/document/presentation/editor_plugins/header/cover_editor.dart'; diff --git a/frontend/appflowy_flutter/ios/Podfile.lock b/frontend/appflowy_flutter/ios/Podfile.lock index 72df3b0bd7..c54ae23ed6 100644 --- a/frontend/appflowy_flutter/ios/Podfile.lock +++ b/frontend/appflowy_flutter/ios/Podfile.lock @@ -175,7 +175,7 @@ SPEC CHECKSUMS: file_picker: 09aa5ec1ab24135ccd7a1621c46c84134bfd6655 flowy_infra_ui: 0455e1fa8c51885aa1437848e361e99419f34ebc Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 - fluttertoast: 723e187574b149e68e63ca4d39b837586b903cfa + fluttertoast: e9a18c7be5413da53898f660530c56f35edfba9c image_gallery_saver: cb43cc43141711190510e92c460eb1655cd343cb image_picker_ios: 99dfe1854b4fa34d0364e74a78448a0151025425 integration_test: ce0a3ffa1de96d1a89ca0ac26fca7ea18a749ef4 @@ -197,4 +197,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: d0d9b4ff572d8695c38eb3f9b490f55cdfc57eca -COCOAPODS: 1.11.3 +COCOAPODS: 1.15.2 diff --git a/frontend/appflowy_flutter/lib/mobile/application/notification/notification_reminder_bloc.dart b/frontend/appflowy_flutter/lib/mobile/application/notification/notification_reminder_bloc.dart index 8adfa58d0f..193634b2d5 100644 --- a/frontend/appflowy_flutter/lib/mobile/application/notification/notification_reminder_bloc.dart +++ b/frontend/appflowy_flutter/lib/mobile/application/notification/notification_reminder_bloc.dart @@ -5,6 +5,7 @@ import 'package:appflowy/user/application/reminder/reminder_extension.dart'; import 'package:appflowy/workspace/application/settings/date_time/date_format_ext.dart'; import 'package:appflowy/workspace/application/settings/date_time/time_format_ext.dart'; import 'package:appflowy/workspace/application/view/prelude.dart'; +import 'package:appflowy/workspace/application/view/view_ext.dart'; import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-user/protobuf.dart'; import 'package:appflowy_editor/appflowy_editor.dart'; @@ -23,16 +24,20 @@ class NotificationReminderBloc await event.when( initial: (reminder, dateFormat, timeFormat) async { this.reminder = reminder; + this.dateFormat = dateFormat; + this.timeFormat = timeFormat; + add(const NotificationReminderEvent.reset()); + }, + reset: () async { final createdAt = await _getCreatedAt( reminder, dateFormat, timeFormat, ); final view = await _getView(reminder); - final node = await _getContent(reminder); - if (view == null || node == null) { + if (view == null) { emit( NotificationReminderState( createdAt: createdAt, @@ -41,25 +46,43 @@ class NotificationReminderBloc status: NotificationReminderStatus.error, ), ); - } else { + } + + final layout = view!.layout; + + if (layout.isDocumentView) { + final node = await _getContent(reminder); + if (node != null) { + emit( + NotificationReminderState( + createdAt: createdAt, + pageTitle: view.name, + view: view, + reminderContent: node.delta?.toPlainText() ?? '', + nodes: [node], + status: NotificationReminderStatus.loaded, + ), + ); + } + } else if (layout.isDatabaseView) { emit( NotificationReminderState( createdAt: createdAt, pageTitle: view.name, view: view, - reminderContent: node.delta?.toPlainText() ?? '', - nodes: [node], + reminderContent: reminder.message, status: NotificationReminderStatus.loaded, ), ); } }, - reset: () {}, ); }); } late final ReminderPB reminder; + late final UserDateFormatPB dateFormat; + late final UserTimeFormatPB timeFormat; Future _getCreatedAt( ReminderPB reminder, diff --git a/frontend/appflowy_flutter/lib/mobile/presentation/base/mobile_view_page.dart b/frontend/appflowy_flutter/lib/mobile/presentation/base/mobile_view_page.dart index 216624340e..603005fc38 100644 --- a/frontend/appflowy_flutter/lib/mobile/presentation/base/mobile_view_page.dart +++ b/frontend/appflowy_flutter/lib/mobile/presentation/base/mobile_view_page.dart @@ -46,10 +46,18 @@ class _MobileViewPageState extends State { // control the app bar opacity when in immersive mode final ValueNotifier _appBarOpacity = ValueNotifier(1.0); + @override + void initState() { + super.initState(); + + getIt().add(const ReminderEvent.started()); + } + @override void dispose() { _appBarOpacity.dispose(); _scrollNotificationObserver = null; + super.dispose(); } @@ -78,8 +86,7 @@ class _MobileViewPageState extends State { ViewBloc(view: view)..add(const ViewEvent.initial()), ), BlocProvider.value( - value: getIt() - ..add(const ReminderEvent.started()), + value: getIt(), ), if (view.layout.isDocumentView) BlocProvider( diff --git a/frontend/appflowy_flutter/lib/mobile/presentation/home/mobile_home_page.dart b/frontend/appflowy_flutter/lib/mobile/presentation/home/mobile_home_page.dart index 99c24bb05e..215c9433b5 100644 --- a/frontend/appflowy_flutter/lib/mobile/presentation/home/mobile_home_page.dart +++ b/frontend/appflowy_flutter/lib/mobile/presentation/home/mobile_home_page.dart @@ -99,6 +99,7 @@ class _MobileHomePageState extends State { super.initState(); getIt().addLatestViewListener(_onLatestViewChange); + getIt().add(const ReminderEvent.started()); } @override diff --git a/frontend/appflowy_flutter/lib/mobile/presentation/home/space/mobile_space_header.dart b/frontend/appflowy_flutter/lib/mobile/presentation/home/space/mobile_space_header.dart index 004b527b78..0cd80ff1bb 100644 --- a/frontend/appflowy_flutter/lib/mobile/presentation/home/space/mobile_space_header.dart +++ b/frontend/appflowy_flutter/lib/mobile/presentation/home/space/mobile_space_header.dart @@ -35,6 +35,8 @@ class MobileSpaceHeader extends StatelessWidget { SpaceIcon( dimension: 24, space: space, + svgSize: 14, + textDimension: 18.0, cornerRadius: 6.0, ), const HSpace(8), diff --git a/frontend/appflowy_flutter/lib/mobile/presentation/home/space/mobile_space_menu.dart b/frontend/appflowy_flutter/lib/mobile/presentation/home/space/mobile_space_menu.dart index e45270f634..2fe580cecd 100644 --- a/frontend/appflowy_flutter/lib/mobile/presentation/home/space/mobile_space_menu.dart +++ b/frontend/appflowy_flutter/lib/mobile/presentation/home/space/mobile_space_menu.dart @@ -74,6 +74,8 @@ class _SidebarSpaceMenuItem extends StatelessWidget { leftIcon: SpaceIcon( dimension: 24, space: space, + svgSize: 14, + textDimension: 18.0, cornerRadius: 6.0, ), leftIconSize: const Size.square(24), diff --git a/frontend/appflowy_flutter/lib/mobile/presentation/notifications/widgets/shared.dart b/frontend/appflowy_flutter/lib/mobile/presentation/notifications/widgets/shared.dart index 10b5a03222..4f1a7d2db0 100644 --- a/frontend/appflowy_flutter/lib/mobile/presentation/notifications/widgets/shared.dart +++ b/frontend/appflowy_flutter/lib/mobile/presentation/notifications/widgets/shared.dart @@ -6,6 +6,8 @@ import 'package:appflowy/mobile/presentation/notifications/widgets/color.dart'; import 'package:appflowy/plugins/document/presentation/editor_configuration.dart'; import 'package:appflowy/plugins/document/presentation/editor_style.dart'; import 'package:appflowy/user/application/reminder/reminder_extension.dart'; +import 'package:appflowy/workspace/application/view/view_ext.dart'; +import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-user/protobuf.dart'; import 'package:appflowy_editor/appflowy_editor.dart'; import 'package:easy_localization/easy_localization.dart'; @@ -76,7 +78,7 @@ class UnreadRedDot extends StatelessWidget { } } -class NotificationContent extends StatelessWidget { +class NotificationContent extends StatefulWidget { const NotificationContent({ super.key, required this.reminder, @@ -84,10 +86,29 @@ class NotificationContent extends StatelessWidget { final ReminderPB reminder; + @override + State createState() => _NotificationContentState(); +} + +class _NotificationContentState extends State { + @override + void didUpdateWidget(covariant NotificationContent oldWidget) { + super.didUpdateWidget(oldWidget); + + context.read().add( + const NotificationReminderEvent.reset(), + ); + } + @override Widget build(BuildContext context) { return BlocBuilder( builder: (context, state) { + final view = state.view; + if (view == null) { + return const SizedBox.shrink(); + } + return Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, @@ -105,15 +126,7 @@ class NotificationContent extends StatelessWidget { // content Padding( padding: const EdgeInsets.only(right: 16.0), - child: IntrinsicHeight( - child: BlocProvider( - create: (context) => DocumentPageStyleBloc(view: state.view!), - child: NotificationDocumentContent( - reminder: reminder, - nodes: state.nodes, - ), - ), - ), + child: _buildContent(view, nodes: state.nodes), ), ], ); @@ -121,6 +134,33 @@ class NotificationContent extends StatelessWidget { ); } + Widget _buildContent(ViewPB view, {List? nodes}) { + if (view.layout.isDocumentView && nodes != null) { + return IntrinsicHeight( + child: BlocProvider( + create: (context) => DocumentPageStyleBloc(view: view), + child: NotificationDocumentContent( + reminder: widget.reminder, + nodes: nodes, + ), + ), + ); + } else if (view.layout.isDatabaseView) { + final opacity = widget.reminder.type == ReminderType.past ? 0.3 : 1.0; + return Opacity( + opacity: opacity, + child: FlowyText( + widget.reminder.message, + fontSize: 14, + figmaLineHeight: 22, + color: context.notificationItemTextColor, + ), + ); + } + + return const SizedBox.shrink(); + } + Widget _buildHeader() { return FlowyText.semibold( LocaleKeys.settings_notifications_titles_reminder.tr(), diff --git a/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_bloc.dart b/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_bloc.dart index 5cc7525238..5c85256de3 100644 --- a/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_bloc.dart +++ b/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_bloc.dart @@ -26,6 +26,8 @@ part 'chat_bloc.g.dart'; part 'chat_bloc.freezed.dart'; const sendMessageErrorKey = "sendMessageError"; +const systemUserId = "system"; +const aiResponseUserId = "0"; class ChatBloc extends Bloc { ChatBloc({ @@ -87,6 +89,7 @@ class ChatBloc extends Bloc { }, ); }, + // Loading messages startLoadingPrevMessage: () async { Int64? beforeMessageId; final oldestMessage = _getOlderstMessage(); @@ -130,21 +133,58 @@ class ChatBloc extends Bloc { ), ); }, + // streaming message streaming: (Message message) { final allMessages = _perminentMessages(); allMessages.insert(0, message); emit( state.copyWith( messages: allMessages, - streamingStatus: const LoadingState.loading(), + streamingState: const StreamingState.streaming(), + canSendMessage: false, ), ); }, - didFinishStreaming: () { + finishStreaming: () { emit( - state.copyWith(streamingStatus: const LoadingState.finish()), + state.copyWith( + streamingState: const StreamingState.done(), + canSendMessage: + state.sendingState == const SendMessageState.done(), + ), ); }, + didUpdateAnswerStream: (AnswerStream stream) { + emit(state.copyWith(answerStream: stream)); + }, + stopStream: () async { + if (state.answerStream == null) { + return; + } + + final payload = StopStreamPB(chatId: chatId); + await AIEventStopStream(payload).send(); + final allMessages = _perminentMessages(); + if (state.streamingState != const StreamingState.done()) { + // If the streaming is not started, remove the message from the list + if (!state.answerStream!.hasStarted) { + allMessages.removeWhere( + (element) => element.id == lastStreamMessageId, + ); + lastStreamMessageId = ""; + } + + // when stop stream, we will set the answer stream to null. Which means the streaming + // is finished or canceled. + emit( + state.copyWith( + messages: allMessages, + answerStream: null, + streamingState: const StreamingState.done(), + ), + ); + } + }, receveMessage: (Message message) { final allMessages = _perminentMessages(); // remove message with the same id @@ -164,15 +204,32 @@ class ChatBloc extends Bloc { lastSentMessage: null, messages: allMessages, relatedQuestions: [], + sendingState: const SendMessageState.sending(), + canSendMessage: false, ), ); }, + finishSending: (ChatMessagePB message) { + emit( + state.copyWith( + lastSentMessage: message, + sendingState: const SendMessageState.done(), + canSendMessage: + state.streamingState == const StreamingState.done(), + ), + ); + }, + // related question didReceiveRelatedQuestion: (List questions) { + if (questions.isEmpty) { + return; + } + final allMessages = _perminentMessages(); final message = CustomMessage( metadata: OnetimeShotType.relatedQuestion.toMap(), - author: const User(id: "system"), - id: 'system', + author: const User(id: systemUserId), + id: systemUserId, ); allMessages.insert(0, message); emit( @@ -189,44 +246,6 @@ class ChatBloc extends Bloc { ), ); }, - didSentUserMessage: (ChatMessagePB message) { - emit( - state.copyWith( - lastSentMessage: message, - ), - ); - }, - didUpdateAnswerStream: (AnswerStream stream) { - emit(state.copyWith(answerStream: stream)); - }, - stopStream: () async { - if (state.answerStream == null) { - return; - } - - final payload = StopStreamPB(chatId: chatId); - await AIEventStopStream(payload).send(); - final allMessages = _perminentMessages(); - if (state.streamingStatus != const LoadingState.finish()) { - // If the streaming is not started, remove the message from the list - if (!state.answerStream!.hasStarted) { - allMessages.removeWhere( - (element) => element.id == lastStreamMessageId, - ); - lastStreamMessageId = ""; - } - - // when stop stream, we will set the answer stream to null. Which means the streaming - // is finished or canceled. - emit( - state.copyWith( - messages: allMessages, - answerStream: null, - streamingStatus: const LoadingState.finish(), - ), - ); - } - }, ); }, ); @@ -250,7 +269,7 @@ class ChatBloc extends Bloc { chatErrorMessageCallback: (err) { if (!isClosed) { Log.error("chat error: ${err.errorMessage}"); - add(const ChatEvent.didFinishStreaming()); + add(const ChatEvent.finishStreaming()); } }, latestMessageCallback: (list) { @@ -267,7 +286,7 @@ class ChatBloc extends Bloc { }, finishStreamingCallback: () { if (!isClosed) { - add(const ChatEvent.didFinishStreaming()); + add(const ChatEvent.finishStreaming()); // The answer strema will bet set to null after the streaming is finished or canceled. // so if the answer stream is null, we will not get related question. if (state.lastSentMessage != null && state.answerStream != null) { @@ -353,7 +372,7 @@ class ChatBloc extends Bloc { result.fold( (ChatMessagePB question) { if (!isClosed) { - add(ChatEvent.didSentUserMessage(question)); + add(ChatEvent.finishSending(question)); final questionMessageId = question.messageId; final message = _createTextMessage(question); @@ -374,8 +393,8 @@ class ChatBloc extends Bloc { final error = CustomMessage( metadata: metadata, - author: const User(id: "system"), - id: 'system', + author: const User(id: systemUserId), + id: systemUserId, ); add(ChatEvent.receveMessage(error)); @@ -390,7 +409,7 @@ class ChatBloc extends Bloc { lastStreamMessageId = streamMessageId; return TextMessage( - author: User(id: nanoid()), + author: User(id: "streamId:${nanoid()}"), metadata: { "$AnswerStream": stream, "question": questionMessageId, @@ -425,10 +444,21 @@ class ChatBloc extends Bloc { @freezed class ChatEvent with _$ChatEvent { const factory ChatEvent.initialLoad() = _InitialLoadMessage; + + // send message const factory ChatEvent.sendMessage({ required String message, Map? metadata, }) = _SendMessage; + const factory ChatEvent.finishSending(ChatMessagePB message) = + _FinishSendMessage; + +// receive message + const factory ChatEvent.streaming(Message message) = _StreamingMessage; + const factory ChatEvent.receveMessage(Message message) = _ReceiveMessage; + const factory ChatEvent.finishStreaming() = _FinishStreamingMessage; + +// loading messages const factory ChatEvent.startLoadingPrevMessage() = _StartLoadPrevMessage; const factory ChatEvent.didLoadPreviousMessages( List messages, @@ -436,16 +466,13 @@ class ChatEvent with _$ChatEvent { ) = _DidLoadPreviousMessages; const factory ChatEvent.didLoadLatestMessages(List messages) = _DidLoadMessages; - const factory ChatEvent.streaming(Message message) = _StreamingMessage; - const factory ChatEvent.receveMessage(Message message) = _ReceiveMessage; - const factory ChatEvent.didFinishStreaming() = _FinishStreamingMessage; +// related questions const factory ChatEvent.didReceiveRelatedQuestion( List questions, ) = _DidReceiveRelatedQueston; const factory ChatEvent.clearReleatedQuestion() = _ClearRelatedQuestion; - const factory ChatEvent.didSentUserMessage(ChatMessagePB message) = - _DidSendUserMessage; + const factory ChatEvent.didUpdateAnswerStream( AnswerStream stream, ) = _DidUpdateAnswerStream; @@ -466,7 +493,8 @@ class ChatState with _$ChatState { required LoadingState loadingPreviousStatus, // When sending a user message, the status will be set as loading. // After the message is sent, the status will be set as finished. - required LoadingState streamingStatus, + required StreamingState streamingState, + required SendMessageState sendingState, // Indicate whether there are more previous messages to load. required bool hasMorePrevMessage, // The related questions that are received after the user message is sent. @@ -474,6 +502,7 @@ class ChatState with _$ChatState { // The last user message that is sent to the server. ChatMessagePB? lastSentMessage, AnswerStream? answerStream, + @Default(true) bool canSendMessage, }) = _ChatState; factory ChatState.initial(ViewPB view, UserProfilePB userProfile) => @@ -483,12 +512,19 @@ class ChatState with _$ChatState { userProfile: userProfile, initialLoadingStatus: const LoadingState.finish(), loadingPreviousStatus: const LoadingState.finish(), - streamingStatus: const LoadingState.finish(), + streamingState: const StreamingState.done(), + sendingState: const SendMessageState.done(), hasMorePrevMessage: true, relatedQuestions: [], ); } +bool isOtherUserMessage(Message message) { + return message.author.id != aiResponseUserId && + message.author.id != systemUserId && + !message.author.id.startsWith("streamId:"); +} + @freezed class LoadingState with _$LoadingState { const factory LoadingState.loading() = _Loading; @@ -497,6 +533,7 @@ class LoadingState with _$LoadingState { enum OnetimeShotType { unknown, + sendingMessage, relatedQuestion, invalidSendMesssage, } @@ -638,7 +675,9 @@ List chatMessageMetadataFromString(String? s) { } if (metadataJson is Map) { - metadata.add(ChatMessageMetadata.fromJson(metadataJson)); + if (metadataJson.isNotEmpty) { + metadata.add(ChatMessageMetadata.fromJson(metadataJson)); + } } else if (metadataJson is List) { metadata.addAll( metadataJson.map( @@ -672,3 +711,15 @@ class ChatMessageMetadata { Map toJson() => _$ChatMessageMetadataToJson(this); } + +@freezed +class StreamingState with _$StreamingState { + const factory StreamingState.streaming() = _Streaming; + const factory StreamingState.done({FlowyError? error}) = _StreamDone; +} + +@freezed +class SendMessageState with _$SendMessageState { + const factory SendMessageState.sending() = _Sending; + const factory SendMessageState.done({FlowyError? error}) = _SendDone; +} diff --git a/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_file_bloc.dart b/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_file_bloc.dart index 703093a5eb..032ae0b5e5 100644 --- a/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_file_bloc.dart +++ b/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_file_bloc.dart @@ -7,6 +7,8 @@ import 'package:appflowy_backend/protobuf/flowy-ai/entities.pb.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; +import 'chat_input_bloc.dart'; + part 'chat_file_bloc.freezed.dart'; class ChatFileBloc extends Bloc { @@ -46,9 +48,17 @@ class ChatFileBloc extends Bloc { ); }, newFile: (String filePath, String fileName) async { + final files = List.from(state.uploadFiles); + files.add(ChatFile(filePath: filePath, fileName: fileName)); emit( state.copyWith( - indexFileIndicator: IndexFileIndicator.indexing(fileName), + uploadFiles: files, + ), + ); + + emit( + state.copyWith( + uploadFileIndicator: UploadFileIndicator.uploading(fileName), ), ); final payload = ChatFilePB(filePath: filePath, chatId: chatId); @@ -57,14 +67,14 @@ class ChatFileBloc extends Bloc { if (!isClosed) { result.fold((_) { add( - ChatFileEvent.updateIndexFile( - IndexFileIndicator.finish(fileName), + ChatFileEvent.updateUploadState( + UploadFileIndicator.finish(fileName), ), ); }, (err) { add( - ChatFileEvent.updateIndexFile( - IndexFileIndicator.error(err.msg), + ChatFileEvent.updateUploadState( + UploadFileIndicator.error(err.msg), ), ); }); @@ -83,16 +93,31 @@ class ChatFileBloc extends Bloc { ), ); }, - updateIndexFile: (IndexFileIndicator indicator) { - emit( - state.copyWith(indexFileIndicator: indicator), - ); - }, updatePluginState: (LocalAIPluginStatePB chatState) { final fileEnabled = state.chatState?.fileEnabled ?? false; final supportChatWithFile = fileEnabled && chatState.state == RunningStatePB.Running; - emit(state.copyWith(supportChatWithFile: supportChatWithFile)); + + final aiType = chatState.state == RunningStatePB.Running + ? const AIType.localAI() + : const AIType.appflowyAI(); + + emit( + state.copyWith( + supportChatWithFile: supportChatWithFile, + aiType: aiType, + ), + ); + }, + clear: () { + emit( + state.copyWith( + uploadFiles: [], + ), + ); + }, + updateUploadState: (UploadFileIndicator indicator) { + emit(state.copyWith(uploadFileIndicator: indicator)); }, ); }, @@ -113,27 +138,40 @@ class ChatFileEvent with _$ChatFileEvent { const factory ChatFileEvent.initial() = Initial; const factory ChatFileEvent.newFile(String filePath, String fileName) = _NewFile; + const factory ChatFileEvent.clear() = _ClearFile; + const factory ChatFileEvent.updateUploadState(UploadFileIndicator indicator) = + _UpdateUploadState; const factory ChatFileEvent.updateChatState(LocalAIChatPB chatState) = _UpdateChatState; const factory ChatFileEvent.updatePluginState( LocalAIPluginStatePB chatState, ) = _UpdatePluginState; - const factory ChatFileEvent.updateIndexFile(IndexFileIndicator indicator) = - _UpdateIndexFile; } @freezed class ChatFileState with _$ChatFileState { const factory ChatFileState({ @Default(false) bool supportChatWithFile, - IndexFileIndicator? indexFileIndicator, + UploadFileIndicator? uploadFileIndicator, LocalAIChatPB? chatState, + @Default([]) List uploadFiles, + @Default(AIType.appflowyAI()) AIType aiType, }) = _ChatFileState; } @freezed -class IndexFileIndicator with _$IndexFileIndicator { - const factory IndexFileIndicator.finish(String fileName) = _Finish; - const factory IndexFileIndicator.indexing(String fileName) = _Indexing; - const factory IndexFileIndicator.error(String error) = _Error; +class UploadFileIndicator with _$UploadFileIndicator { + const factory UploadFileIndicator.finish(String fileName) = _Finish; + const factory UploadFileIndicator.uploading(String fileName) = _Uploading; + const factory UploadFileIndicator.error(String error) = _Error; +} + +class ChatFile { + ChatFile({ + required this.filePath, + required this.fileName, + }); + + final String filePath; + final String fileName; } diff --git a/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_input_action_bloc.dart b/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_input_action_bloc.dart index 1f32a045e4..5787a06ef4 100644 --- a/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_input_action_bloc.dart +++ b/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_input_action_bloc.dart @@ -11,6 +11,7 @@ import 'package:flutter/widgets.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'chat_input_action_control.dart'; + part 'chat_input_action_bloc.freezed.dart'; class ChatInputActionBloc @@ -34,7 +35,12 @@ class ChatInputActionBloc final views = result .toNullable() ?.items - .where((v) => v.layout.isDocumentView) + .where( + (v) => + v.layout.isDocumentView && + !v.isSpace && + v.parentViewId.isNotEmpty, + ) .toList() ?? []; if (!isClosed) { @@ -108,6 +114,14 @@ class ChatInputActionBloc ), ); }, + clear: () { + emit( + state.copyWith( + selectedPages: [], + filter: "", + ), + ); + }, ); } } @@ -171,6 +185,7 @@ class ChatInputActionEvent with _$ChatInputActionEvent { const factory ChatInputActionEvent.addPage(ChatInputActionPage page) = _AddPage; const factory ChatInputActionEvent.removePage(String text) = _RemovePage; + const factory ChatInputActionEvent.clear() = _Clear; } @freezed diff --git a/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_input_action_control.dart b/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_input_action_control.dart index 6569b3a1df..51362c052f 100644 --- a/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_input_action_control.dart +++ b/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_input_action_control.dart @@ -35,10 +35,18 @@ class ChatInputActionControl extends ChatActionHandler { List get tags => _commandBloc.state.selectedPages.map((e) => e.title).toList(); - ChatInputMetadata get metaData => _commandBloc.state.selectedPages.fold( - {}, - (map, page) => map..putIfAbsent(page.pageId, () => page), - ); + ChatInputMetadata consumeMetaData() { + final metadata = _commandBloc.state.selectedPages.fold( + {}, + (map, page) => map..putIfAbsent(page.pageId, () => page), + ); + + if (metadata.isNotEmpty) { + _commandBloc.add(const ChatInputActionEvent.clear()); + } + + return metadata; + } void handleKeyEvent(KeyEvent event) { // ignore: deprecated_member_use diff --git a/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_member_bloc.dart b/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_member_bloc.dart new file mode 100644 index 0000000000..c0f68bb9b3 --- /dev/null +++ b/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_member_bloc.dart @@ -0,0 +1,80 @@ +import 'package:appflowy_backend/dispatch/dispatch.dart'; +import 'package:appflowy_backend/log.dart'; +import 'package:appflowy_backend/protobuf/flowy-user/protobuf.dart'; +import 'package:equatable/equatable.dart'; +import 'package:fixnum/fixnum.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; + +part 'chat_member_bloc.freezed.dart'; + +class ChatMemberBloc extends Bloc { + ChatMemberBloc() : super(const ChatMemberState()) { + on( + (event, emit) async { + event.when( + initial: () {}, + receiveMemberInfo: (String id, WorkspaceMemberPB memberInfo) { + final members = Map.from(state.members); + members[id] = ChatMember(info: memberInfo); + emit(state.copyWith(members: members)); + }, + getMemberInfo: (String userId) { + if (state.members.containsKey(userId)) { + // Member info already exists. Debouncing refresh member info from backend would be better. + return; + } + + final payload = WorkspaceMemberIdPB( + uid: Int64.parseInt(userId), + ); + UserEventGetMemberInfo(payload).send().then((result) { + if (!isClosed) { + result.fold((member) { + add( + ChatMemberEvent.receiveMemberInfo( + userId, + member, + ), + ); + }, (err) { + Log.error("Error getting member info: $err"); + }); + } + }); + }, + ); + }, + ); + } +} + +@freezed +class ChatMemberEvent with _$ChatMemberEvent { + const factory ChatMemberEvent.initial() = Initial; + const factory ChatMemberEvent.getMemberInfo( + String userId, + ) = _GetMemberInfo; + const factory ChatMemberEvent.receiveMemberInfo( + String id, + WorkspaceMemberPB memberInfo, + ) = _ReceiveMemberInfo; +} + +@freezed +class ChatMemberState with _$ChatMemberState { + const factory ChatMemberState({ + @Default({}) Map members, + }) = _ChatMemberState; +} + +class ChatMember extends Equatable { + ChatMember({ + required this.info, + }); + final DateTime _date = DateTime.now(); + final WorkspaceMemberPB info; + + @override + List get props => [_date, info]; +} diff --git a/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_message_service.dart b/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_message_service.dart index 2dcc710e74..6c627e56c5 100644 --- a/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_message_service.dart +++ b/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_message_service.dart @@ -7,7 +7,8 @@ import 'package:appflowy_backend/protobuf/flowy-document/entities.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart'; Future> metadataPBFromMetadata( - Map? map,) async { + Map? map, +) async { final List metadata = []; if (map != null) { for (final entry in map.entries) { @@ -18,11 +19,14 @@ Future> metadataPBFromMetadata( final payload = OpenDocumentPayloadPB(documentId: view.id); final result = await DocumentEventGetDocumentText(payload).send(); result.fold((pb) { - metadata.add(ChatMessageMetaPB( - id: view.id, - name: view.name, - text: pb.text, - ),); + metadata.add( + ChatMessageMetaPB( + id: view.id, + name: view.name, + data: pb.text, + source: "appflowy document", + ), + ); }, (err) { Log.error('Failed to get document text: $err'); }); diff --git a/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_user_message_bloc.dart b/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_user_message_bloc.dart index cae2b28c30..aa40d65078 100644 --- a/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_user_message_bloc.dart +++ b/frontend/appflowy_flutter/lib/plugins/ai_chat/application/chat_user_message_bloc.dart @@ -1,7 +1,4 @@ -import 'package:appflowy_backend/dispatch/dispatch.dart'; -import 'package:appflowy_backend/log.dart'; -import 'package:appflowy_backend/protobuf/flowy-user/protobuf.dart'; -import 'package:fixnum/fixnum.dart'; +import 'package:appflowy/plugins/ai_chat/application/chat_member_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_chat_types/flutter_chat_types.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; @@ -12,25 +9,14 @@ class ChatUserMessageBloc extends Bloc { ChatUserMessageBloc({ required Message message, - }) : super(ChatUserMessageState.initial(message)) { + required ChatMember? member, + }) : super(ChatUserMessageState.initial(message, member)) { on( (event, emit) async { event.when( - initial: () { - final payload = - WorkspaceMemberIdPB(uid: Int64.parseInt(message.author.id)); - UserEventGetMemberInfo(payload).send().then((result) { - if (!isClosed) { - result.fold((member) { - add(ChatUserMessageEvent.didReceiveMemberInfo(member)); - }, (err) { - Log.error("Error getting member info: $err"); - }); - } - }); - }, - didReceiveMemberInfo: (WorkspaceMemberPB memberInfo) { - emit(state.copyWith(member: memberInfo)); + initial: () {}, + refreshMember: (ChatMember member) { + emit(state.copyWith(member: member)); }, ); }, @@ -41,18 +27,20 @@ class ChatUserMessageBloc @freezed class ChatUserMessageEvent with _$ChatUserMessageEvent { const factory ChatUserMessageEvent.initial() = Initial; - const factory ChatUserMessageEvent.didReceiveMemberInfo( - WorkspaceMemberPB memberInfo, - ) = _MemberInfo; + const factory ChatUserMessageEvent.refreshMember(ChatMember member) = + _MemberInfo; } @freezed class ChatUserMessageState with _$ChatUserMessageState { const factory ChatUserMessageState({ required Message message, - WorkspaceMemberPB? member, + ChatMember? member, }) = _ChatUserMessageState; - factory ChatUserMessageState.initial(Message message) => - ChatUserMessageState(message: message); + factory ChatUserMessageState.initial( + Message message, + ChatMember? member, + ) => + ChatUserMessageState(message: message, member: member); } diff --git a/frontend/appflowy_flutter/lib/plugins/ai_chat/chat_page.dart b/frontend/appflowy_flutter/lib/plugins/ai_chat/chat_page.dart index cbc3327b72..2fb0869886 100644 --- a/frontend/appflowy_flutter/lib/plugins/ai_chat/chat_page.dart +++ b/frontend/appflowy_flutter/lib/plugins/ai_chat/chat_page.dart @@ -1,32 +1,32 @@ import 'dart:math'; -import 'package:appflowy/plugins/ai_chat/application/chat_file_bloc.dart'; -import 'package:appflowy/plugins/ai_chat/application/chat_input_bloc.dart'; -import 'package:appflowy/workspace/presentation/home/menu/sidebar/space/shared_widget.dart'; -import 'package:appflowy/workspace/presentation/widgets/dialogs.dart'; -import 'package:desktop_drop/desktop_drop.dart'; -import 'package:flowy_infra/platform_extension.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - import 'package:appflowy/generated/locale_keys.g.dart'; import 'package:appflowy/plugins/ai_chat/application/chat_bloc.dart'; -import 'package:appflowy/plugins/ai_chat/presentation/ai_message_bubble.dart'; +import 'package:appflowy/plugins/ai_chat/application/chat_file_bloc.dart'; +import 'package:appflowy/plugins/ai_chat/application/chat_input_bloc.dart'; import 'package:appflowy/plugins/ai_chat/presentation/chat_related_question.dart'; -import 'package:appflowy/plugins/ai_chat/presentation/user_message_bubble.dart'; +import 'package:appflowy/plugins/ai_chat/presentation/message/ai_message_bubble.dart'; +import 'package:appflowy/plugins/ai_chat/presentation/message/other_user_message_bubble.dart'; +import 'package:appflowy/plugins/ai_chat/presentation/message/user_message_bubble.dart'; +import 'package:appflowy/workspace/presentation/home/menu/sidebar/space/shared_widget.dart'; import 'package:appflowy/workspace/presentation/home/toast.dart'; +import 'package:appflowy/workspace/presentation/widgets/dialogs.dart'; import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-user/protobuf.dart'; +import 'package:desktop_drop/desktop_drop.dart'; import 'package:easy_localization/easy_localization.dart'; +import 'package:flowy_infra/platform_extension.dart'; import 'package:flowy_infra/theme_extension.dart'; -import 'package:flowy_infra_ui/style_widget/text.dart'; -import 'package:flowy_infra_ui/widget/spacing.dart'; +import 'package:flowy_infra_ui/flowy_infra_ui.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_chat_types/flutter_chat_types.dart'; import 'package:flutter_chat_types/flutter_chat_types.dart' as types; +import 'package:flutter_chat_types/flutter_chat_types.dart'; import 'package:flutter_chat_ui/flutter_chat_ui.dart' show Chat; import 'package:styled_widget/styled_widget.dart'; +import 'application/chat_member_bloc.dart'; import 'application/chat_side_pannel_bloc.dart'; import 'presentation/chat_input/chat_input.dart'; import 'presentation/chat_popmenu.dart'; @@ -79,7 +79,6 @@ class AIChatPage extends StatelessWidget { return MultiBlocProvider( providers: [ /// [ChatBloc] is used to handle chat messages including send/receive message - /// BlocProvider( create: (_) => ChatBloc( view: view, @@ -88,25 +87,24 @@ class AIChatPage extends StatelessWidget { ), /// [ChatFileBloc] is used to handle file indexing as a chat context - /// BlocProvider( - create: (_) => ChatFileBloc(chatId: view.id.toString()) + create: (_) => ChatFileBloc(chatId: view.id) ..add(const ChatFileEvent.initial()), ), /// [ChatInputStateBloc] is used to handle chat input text field state - /// BlocProvider( create: (_) => ChatInputStateBloc()..add(const ChatInputStateEvent.started()), ), BlocProvider(create: (_) => ChatSidePannelBloc(chatId: view.id)), + BlocProvider(create: (_) => ChatMemberBloc()), ], child: BlocListener( listenWhen: (previous, current) => - previous.indexFileIndicator != current.indexFileIndicator, + previous.uploadFileIndicator != current.uploadFileIndicator, listener: (context, state) { - _handleIndexIndicator(state.indexFileIndicator, context); + _handleIndexIndicator(state.uploadFileIndicator, context); }, child: BlocBuilder( builder: (context, state) { @@ -149,7 +147,7 @@ class AIChatPage extends StatelessWidget { } void _handleIndexIndicator( - IndexFileIndicator? indicator, + UploadFileIndicator? indicator, BuildContext context, ) { if (indicator != null) { @@ -160,7 +158,7 @@ class AIChatPage extends StatelessWidget { LocaleKeys.chat_indexFileSuccess.tr(args: [fileName]), ); }, - indexing: (fileName) { + uploading: (fileName) { showSnackBarMessage( context, LocaleKeys.chat_indexingFile.tr(args: [fileName]), @@ -298,12 +296,13 @@ class _ChatContentPageState extends State<_ChatContentPage> { Widget buildChatWidget() { return BlocBuilder( builder: (blocContext, state) => Chat( + key: ValueKey(widget.view.id), messages: state.messages, onSendPressed: (_) { // We use custom bottom widget for chat input, so // do not need to handle this event. }, - customBottomWidget: buildChatInput(blocContext), + customBottomWidget: buildBottom(blocContext), user: _user, theme: buildTheme(context), onEndReached: () async { @@ -335,7 +334,7 @@ class _ChatContentPageState extends State<_ChatContentPage> { required messageWidth, required showName, }) => - _buildAITextMessage(blocContext, textMessage), + _buildTextMessage(blocContext, textMessage), bubbleBuilder: ( child, { required message, @@ -346,17 +345,21 @@ class _ChatContentPageState extends State<_ChatContentPage> { message: message, child: child, ); + } else if (isOtherUserMessage(message)) { + return OtherUserMessageBubble( + message: message, + child: child, + ); + } else { + return _buildAIBubble(message, blocContext, state, child); } - - return _buildAIBubble(message, blocContext, state, child); }, ), ); } - Widget _buildAITextMessage(BuildContext context, TextMessage message) { - final isAuthor = message.author.id == _user.id; - if (isAuthor) { + Widget _buildTextMessage(BuildContext context, TextMessage message) { + if (message.author.id == _user.id) { return ChatTextMessageWidget( user: message.author, messageUserId: message.id, @@ -482,7 +485,7 @@ class _ChatContentPageState extends State<_ChatContentPage> { } } - Widget buildChatInput(BuildContext context) { + Widget buildBottom(BuildContext context) { return ClipRect( child: Padding( padding: AIChatUILayout.safeAreaInsets(context), @@ -497,9 +500,9 @@ class _ChatContentPageState extends State<_ChatContentPage> { return Column( children: [ - BlocSelector( - selector: (state) => state.streamingStatus, - builder: (context, state) { + BlocSelector( + selector: (state) => state.canSendMessage, + builder: (context, canSendMessage) { return ChatInput( aiType: aiType, chatId: widget.view.id, @@ -511,7 +514,7 @@ class _ChatContentPageState extends State<_ChatContentPage> { ), ); }, - isStreaming: state != const LoadingState.finish(), + isStreaming: !canSendMessage, onStopStreaming: () { context .read() diff --git a/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/chat_avatar.dart b/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/chat_avatar.dart index 7f2e01f989..c9f1422900 100644 --- a/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/chat_avatar.dart +++ b/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/chat_avatar.dart @@ -8,6 +8,8 @@ import 'package:flowy_infra/size.dart'; import 'package:flowy_infra_ui/style_widget/text.dart'; import 'package:string_validator/string_validator.dart'; +const defaultAvatarSize = 30.0; + class ChatChatUserAvatar extends StatelessWidget { const ChatChatUserAvatar({required this.userId, super.key}); @@ -33,15 +35,18 @@ class ChatBorderedCircleAvatar extends StatelessWidget { @override Widget build(BuildContext context) { - return CircleAvatar( - backgroundColor: border.color, - child: ConstrainedBox( - constraints: const BoxConstraints.expand(), - child: CircleAvatar( - backgroundImage: backgroundImage, - backgroundColor: - Theme.of(context).colorScheme.surfaceContainerHighest, - child: child, + return SizedBox( + width: defaultAvatarSize, + child: CircleAvatar( + backgroundColor: border.color, + child: ConstrainedBox( + constraints: const BoxConstraints.expand(), + child: CircleAvatar( + backgroundImage: backgroundImage, + backgroundColor: + Theme.of(context).colorScheme.surfaceContainerHighest, + child: child, + ), ), ), ); @@ -53,13 +58,15 @@ class ChatUserAvatar extends StatelessWidget { super.key, required this.iconUrl, required this.name, - required this.size, + this.size = defaultAvatarSize, this.isHovering = false, + this.defaultName, }); final String iconUrl; final String name; final double size; + final String? defaultName; // If true, a border will be applied on top of the avatar final bool isHovering; @@ -76,7 +83,8 @@ class ChatUserAvatar extends StatelessWidget { } Widget _buildEmptyAvatar(BuildContext context) { - final String nameOrDefault = _userName(name); + final String nameOrDefault = _userName(name, defaultName); + final Color color = ColorGenerator(name).toColor(); const initialsCount = 2; @@ -170,8 +178,8 @@ class ChatUserAvatar extends StatelessWidget { /// Return the user name, if the user name is empty, /// return the default user name. /// - String _userName(String name) => - name.isEmpty ? LocaleKeys.defaultUsername.tr() : name; + String _userName(String name, String? defaultName) => + name.isEmpty ? (defaultName ?? LocaleKeys.defaultUsername.tr()) : name; /// Used to darken the generated color for the hover border effect. /// The color is darkened by 15% - Hence the 0.15 value. diff --git a/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/chat_input/chat_attachment.dart b/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/chat_input/chat_attachment.dart new file mode 100644 index 0000000000..13cbbadfb1 --- /dev/null +++ b/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/chat_input/chat_attachment.dart @@ -0,0 +1,30 @@ +import 'package:flutter/material.dart'; +import 'package:appflowy/generated/flowy_svgs.g.dart'; +import 'package:appflowy/generated/locale_keys.g.dart'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:flowy_infra/theme_extension.dart'; +import 'package:flowy_infra_ui/style_widget/icon_button.dart'; +import 'package:flowy_infra_ui/widget/flowy_tooltip.dart'; + +class ChatInputAttachment extends StatelessWidget { + const ChatInputAttachment({required this.onTap, super.key}); + + final VoidCallback onTap; + + @override + Widget build(BuildContext context) { + return FlowyTooltip( + message: LocaleKeys.chat_uploadFile.tr(), + child: FlowyIconButton( + hoverColor: AFThemeExtension.of(context).lightGreyHover, + radius: BorderRadius.circular(18), + icon: FlowySvg( + FlowySvgs.ai_attachment_s, + size: const Size.square(20), + color: Theme.of(context).colorScheme.primary, + ), + onPressed: onTap, + ), + ); + } +} diff --git a/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/chat_input/chat_input.dart b/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/chat_input/chat_input.dart index faef4f8a80..7bf7549990 100644 --- a/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/chat_input/chat_input.dart +++ b/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/chat_input/chat_input.dart @@ -1,25 +1,31 @@ +import 'package:appflowy/plugins/ai_chat/application/chat_file_bloc.dart'; +import 'package:appflowy/plugins/ai_chat/application/chat_input_action_bloc.dart'; +import 'package:appflowy/plugins/ai_chat/application/chat_input_action_control.dart'; import 'package:appflowy/plugins/ai_chat/application/chat_input_bloc.dart'; import 'package:appflowy/plugins/ai_chat/presentation/chat_input_action_menu.dart'; -import 'package:appflowy/plugins/ai_chat/application/chat_input_action_control.dart'; +import 'package:appflowy/plugins/document/presentation/editor_plugins/mention/mobile_page_selector_sheet.dart'; +import 'package:appflowy/startup/startup.dart'; +import 'package:appflowy/workspace/application/view/view_ext.dart'; import 'package:extended_text_field/extended_text_field.dart'; +import 'package:flowy_infra/file_picker/file_picker_service.dart'; import 'package:flowy_infra/platform_extension.dart'; import 'package:flowy_infra/theme_extension.dart'; -import 'package:flowy_infra_ui/widget/spacing.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_chat_types/flutter_chat_types.dart' as types; import 'package:flutter_chat_ui/flutter_chat_ui.dart'; import 'chat_at_button.dart'; -import 'chat_send_button.dart'; +import 'chat_attachment.dart'; import 'chat_input_span.dart'; +import 'chat_send_button.dart'; class ChatInput extends StatefulWidget { /// Creates [ChatInput] widget. const ChatInput({ super.key, - this.isAttachmentUploading, this.onAttachmentPressed, required this.onSendPressed, required this.chatId, @@ -30,7 +36,6 @@ class ChatInput extends StatefulWidget { required this.aiType, }); - final bool? isAttachmentUploading; final VoidCallback? onAttachmentPressed; final void Function(types.PartialText) onSendPressed; final void Function() onStopStreaming; @@ -59,7 +64,6 @@ class _ChatInputState extends State { _textController = InputTextFieldController(); _inputFocusNode = FocusNode( onKeyEvent: (node, event) { - // TODO(lucas): support mobile if (PlatformExtension.isDesktop) { if (_inputActionControl.canHandleKeyEvent(event)) { _inputActionControl.handleKeyEvent(event); @@ -78,11 +82,16 @@ class _ChatInputState extends State { }, ); + _inputFocusNode.addListener(() { + setState(() {}); + }); + _inputActionControl = ChatInputActionControl( chatId: widget.chatId, textController: _textController, textFieldFocusNode: _inputFocusNode, ); + _inputFocusNode.requestFocus(); _handleSendButtonVisibilityModeChange(); } @@ -96,36 +105,46 @@ class _ChatInputState extends State { @override Widget build(BuildContext context) { - const textPadding = EdgeInsets.symmetric(horizontal: 16); const buttonPadding = EdgeInsets.symmetric(horizontal: 2); const inputPadding = EdgeInsets.all(6); + final textPadding = isMobile + ? const EdgeInsets.only(left: 8.0, right: 4.0) + : const EdgeInsets.symmetric(horizontal: 16); + final borderRadius = BorderRadius.circular(isMobile ? 10 : 30); + final color = isMobile + ? Colors.transparent + : Theme.of(context).colorScheme.surfaceContainerHighest; - return Focus( - child: Padding( - padding: inputPadding, + return Padding( + padding: inputPadding, + // ignore: use_decorated_box + child: Container( + decoration: BoxDecoration( + border: Border.all( + color: _inputFocusNode.hasFocus && !isMobile + ? Theme.of(context).colorScheme.primary.withOpacity(0.6) + : Colors.transparent, + ), + borderRadius: borderRadius, + ), child: Material( - borderRadius: BorderRadius.circular(30), - color: isMobile - ? Theme.of(context).colorScheme.surfaceContainer - : Theme.of(context).colorScheme.surfaceContainerHighest, - elevation: 0.6, - child: Row( - children: [ - if (widget.onAttachmentPressed != null) - AttachmentButton( - isLoading: widget.isAttachmentUploading ?? false, - onPressed: widget.onAttachmentPressed, - padding: buttonPadding, - ), - Expanded(child: _inputTextField(textPadding)), + borderRadius: borderRadius, + color: color, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 10), + child: Row( + children: [ + // TODO(lucas): support mobile + if (PlatformExtension.isDesktop && + widget.aiType == const AIType.localAI()) + _attachmentButton(buttonPadding), + Expanded(child: _inputTextField(context, textPadding)), - // TODO(lucas): support mobile - if (PlatformExtension.isDesktop && - widget.aiType == const AIType.appflowyAI()) - _atButton(buttonPadding), - _sendButton(buttonPadding), - const HSpace(14), - ], + if (widget.aiType == const AIType.appflowyAI()) + _atButton(buttonPadding), + _sendButton(buttonPadding), + ], + ), ), ), ), @@ -144,7 +163,7 @@ class _ChatInputState extends State { if (trimmedText != '') { final partialText = types.PartialText( text: trimmedText, - metadata: _inputActionControl.metaData, + metadata: _inputActionControl.consumeMetaData(), ); widget.onSendPressed(partialText); _textController.clear(); @@ -160,33 +179,24 @@ class _ChatInputState extends State { }); } - Widget _inputTextField(EdgeInsets textPadding) { + Widget _inputTextField(BuildContext context, EdgeInsets textPadding) { return CompositedTransformTarget( link: _layerLink, child: Padding( padding: textPadding, child: ExtendedTextField( key: _textFieldKey, - specialTextSpanBuilder: - ChatInputTextSpanBuilder(inputActionControl: _inputActionControl), controller: _textController, focusNode: _inputFocusNode, - decoration: InputDecoration( - border: InputBorder.none, - hintText: widget.hintText, - focusedBorder: InputBorder.none, - hintStyle: TextStyle( - color: AFThemeExtension.of(context).textColor.withOpacity(0.5), - ), - ), - style: TextStyle( - color: AFThemeExtension.of(context).textColor, - fontSize: 15, - ), + decoration: _buildInputDecoration(context), keyboardType: TextInputType.multiline, textCapitalization: TextCapitalization.sentences, minLines: 1, maxLines: 10, + style: _buildTextStyle(context), + specialTextSpanBuilder: ChatInputTextSpanBuilder( + inputActionControl: _inputActionControl, + ), onChanged: (text) { _handleOnTextChange(context, text); }, @@ -195,47 +205,141 @@ class _ChatInputState extends State { ); } - void _handleOnTextChange(BuildContext context, String text) { + InputDecoration _buildInputDecoration(BuildContext context) { + if (!isMobile) { + return InputDecoration( + border: InputBorder.none, + hintText: widget.hintText, + focusedBorder: InputBorder.none, + hintStyle: TextStyle( + color: AFThemeExtension.of(context).textColor.withOpacity(0.5), + ), + ); + } + + final borderRadius = BorderRadius.circular(10); + return InputDecoration( + contentPadding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6), + hintText: widget.hintText, + hintStyle: TextStyle( + color: AFThemeExtension.of(context).textColor.withOpacity(0.5), + ), + enabledBorder: OutlineInputBorder( + borderRadius: borderRadius, + borderSide: BorderSide( + color: Theme.of(context).colorScheme.outline, + ), + ), + focusedBorder: OutlineInputBorder( + borderRadius: borderRadius, + borderSide: BorderSide( + color: Theme.of(context).colorScheme.primary, + width: 1.2, + ), + ), + ); + } + + TextStyle? _buildTextStyle(BuildContext context) { + if (!isMobile) { + return TextStyle( + color: AFThemeExtension.of(context).textColor, + fontSize: 15, + ); + } + + return Theme.of(context).textTheme.bodyMedium?.copyWith( + fontSize: 15, + height: 1.2, + ); + } + + Future _handleOnTextChange(BuildContext context, String text) async { if (widget.aiType != const AIType.appflowyAI()) { return; } + if (!_inputActionControl.onTextChanged(text)) { + return; + } + if (PlatformExtension.isDesktop) { - if (_inputActionControl.onTextChanged(text)) { - ChatActionsMenu( - anchor: ChatInputAnchor( - anchorKey: _textFieldKey, - layerLink: _layerLink, - ), - handler: _inputActionControl, - context: context, - style: Theme.of(context).brightness == Brightness.dark - ? const ChatActionsMenuStyle.dark() - : const ChatActionsMenuStyle.light(), - ).show(); - } + ChatActionsMenu( + anchor: ChatInputAnchor( + anchorKey: _textFieldKey, + layerLink: _layerLink, + ), + handler: _inputActionControl, + context: context, + style: Theme.of(context).brightness == Brightness.dark + ? const ChatActionsMenuStyle.dark() + : const ChatActionsMenuStyle.light(), + ).show(); } else { - // TODO(lucas): support mobile + // if the focus node is on focus, unfocus it for better animation + // otherwise, the page sheet animation will be blocked by the keyboard + if (_inputFocusNode.hasFocus) { + _inputFocusNode.unfocus(); + Future.delayed(const Duration(milliseconds: 100), () async { + await _referPage(_inputActionControl); + }); + } else { + await _referPage(_inputActionControl); + } } } Widget _sendButton(EdgeInsets buttonPadding) { return Padding( padding: buttonPadding, - child: ChatInputSendButton( - onSendPressed: () { - if (!_sendButtonEnabled) { - return; - } + child: SizedBox.square( + dimension: 26, + child: ChatInputSendButton( + onSendPressed: () { + if (!_sendButtonEnabled) { + return; + } - if (!widget.isStreaming) { - widget.onStopStreaming(); - _handleSendPressed(); - } - }, - onStopStreaming: () => widget.onStopStreaming(), - isStreaming: widget.isStreaming, - enabled: _sendButtonEnabled, + if (!widget.isStreaming) { + widget.onStopStreaming(); + _handleSendPressed(); + } + }, + onStopStreaming: () => widget.onStopStreaming(), + isStreaming: widget.isStreaming, + enabled: _sendButtonEnabled, + ), + ), + ); + } + + Widget _attachmentButton(EdgeInsets buttonPadding) { + return Padding( + padding: buttonPadding, + child: SizedBox.square( + dimension: 26, + child: ChatInputAttachment( + onTap: () async { + final path = await getIt().pickFiles( + dialogTitle: '', + type: FileType.custom, + allowedExtensions: ["pdf"], + ); + if (path == null) { + return; + } + + for (final file in path.files) { + if (file.path != null) { + if (mounted) { + context + .read() + .add(ChatFileEvent.newFile(file.path!, file.name)); + } + } + } + }, + ), ), ); } @@ -243,16 +347,39 @@ class _ChatInputState extends State { Widget _atButton(EdgeInsets buttonPadding) { return Padding( padding: buttonPadding, - child: ChatInputAtButton( - onTap: () { - _textController.text += '@'; - _inputFocusNode.requestFocus(); - _handleOnTextChange(context, _textController.text); - }, + child: SizedBox.square( + dimension: 26, + child: ChatInputAtButton( + onTap: () { + _textController.text += '@'; + if (!isMobile) { + _inputFocusNode.requestFocus(); + } + _handleOnTextChange(context, _textController.text); + }, + ), ), ); } + Future _referPage(ChatActionHandler handler) async { + handler.onEnter(); + final selectedView = await showPageSelectorSheet( + context, + filter: (view) => + view.layout.isDocumentView && + !view.isSpace && + view.parentViewId.isNotEmpty, + ); + if (selectedView == null) { + handler.onExit(); + return; + } + handler.onSelected(ViewActionPage(view: selectedView)); + handler.onExit(); + _inputFocusNode.requestFocus(); + } + @override void didUpdateWidget(covariant ChatInput oldWidget) { super.didUpdateWidget(oldWidget); diff --git a/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/chat_input/chat_send_button.dart b/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/chat_input/chat_send_button.dart index d3c7a11606..33c9e47b02 100644 --- a/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/chat_input/chat_send_button.dart +++ b/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/chat_input/chat_send_button.dart @@ -38,7 +38,7 @@ class ChatInputSendButton extends StatelessWidget { radius: BorderRadius.circular(18), icon: FlowySvg( FlowySvgs.send_s, - size: const Size.square(20), + size: const Size.square(14), color: enabled ? Theme.of(context).colorScheme.primary : null, ), onPressed: onSendPressed, diff --git a/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/ai_message_bubble.dart b/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/message/ai_message_bubble.dart similarity index 96% rename from frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/ai_message_bubble.dart rename to frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/message/ai_message_bubble.dart index 5ce43f8182..3e29af1a62 100644 --- a/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/ai_message_bubble.dart +++ b/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/message/ai_message_bubble.dart @@ -49,8 +49,9 @@ class ChatAIMessageBubble extends StatelessWidget { children: [ const ChatBorderedCircleAvatar( child: FlowySvg( - FlowySvgs.flowy_ai_chat_logo_s, - size: Size.square(24), + FlowySvgs.flowy_logo_s, + size: Size.square(20), + blendMode: null, ), ), Expanded(child: widget), @@ -177,10 +178,9 @@ class CopyButton extends StatelessWidget { width: 24, hoverColor: AFThemeExtension.of(context).lightGreyHover, fillColor: Theme.of(context).cardColor, - icon: FlowySvg( - FlowySvgs.ai_copy_s, - size: const Size.square(14), - color: Theme.of(context).colorScheme.primary, + icon: const FlowySvg( + FlowySvgs.copy_s, + size: Size.square(20), ), onPressed: () async { final document = customMarkdownToDocument(textMessage.text); diff --git a/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/message/ai_metadata.dart b/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/message/ai_metadata.dart index 723d35301c..f807d84c96 100644 --- a/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/message/ai_metadata.dart +++ b/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/message/ai_metadata.dart @@ -44,13 +44,14 @@ class AIMessageMetadata extends StatelessWidget { ), useIntrinsicWidth: true, radius: BorderRadius.circular(6), - text: FlowyText( - m.source, - fontSize: 14, + text: Opacity( + opacity: 0.5, + child: FlowyText( + m.name, + fontSize: 14, + ), ), - onTap: () { - onSelectedMetadata(m); - }, + onTap: () => onSelectedMetadata(m), ), ), ) diff --git a/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/message/other_user_message_bubble.dart b/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/message/other_user_message_bubble.dart new file mode 100644 index 0000000000..899c0bec3c --- /dev/null +++ b/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/message/other_user_message_bubble.dart @@ -0,0 +1,211 @@ +import 'dart:convert'; + +import 'package:appflowy/generated/flowy_svgs.g.dart'; +import 'package:appflowy/generated/locale_keys.g.dart'; +import 'package:appflowy/plugins/ai_chat/application/chat_member_bloc.dart'; +import 'package:appflowy/plugins/ai_chat/presentation/chat_avatar.dart'; +import 'package:appflowy/plugins/ai_chat/presentation/chat_input/chat_input.dart'; +import 'package:appflowy/plugins/ai_chat/presentation/chat_popmenu.dart'; +import 'package:appflowy/plugins/document/presentation/editor_plugins/copy_and_paste/clipboard_service.dart'; +import 'package:appflowy/shared/markdown_to_document.dart'; +import 'package:appflowy/startup/startup.dart'; +import 'package:appflowy/workspace/presentation/home/toast.dart'; +import 'package:appflowy/workspace/presentation/widgets/dialogs.dart'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:flowy_infra/size.dart'; +import 'package:flowy_infra/theme_extension.dart'; +import 'package:flowy_infra_ui/style_widget/icon_button.dart'; +import 'package:flowy_infra_ui/widget/flowy_tooltip.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_chat_types/flutter_chat_types.dart'; +import 'package:styled_widget/styled_widget.dart'; + +const _leftPadding = 16.0; + +class OtherUserMessageBubble extends StatelessWidget { + const OtherUserMessageBubble({ + super.key, + required this.message, + required this.child, + }); + + final Message message; + final Widget child; + + @override + Widget build(BuildContext context) { + const padding = EdgeInsets.symmetric(horizontal: _leftPadding); + final childWithPadding = Padding(padding: padding, child: child); + final widget = isMobile + ? _wrapPopMenu(childWithPadding) + : _wrapHover(childWithPadding); + + if (context.read().state.members[message.author.id] == + null) { + context + .read() + .add(ChatMemberEvent.getMemberInfo(message.author.id)); + } + + return Row( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + BlocConsumer( + listenWhen: (previous, current) { + return previous.members[message.author.id] != + current.members[message.author.id]; + }, + listener: (context, state) {}, + builder: (context, state) { + final member = state.members[message.author.id]; + return ChatUserAvatar( + iconUrl: member?.info.avatarUrl ?? "", + name: member?.info.name ?? "", + defaultName: "", + ); + }, + ), + Expanded(child: widget), + ], + ); + } + + OtherUserMessageHover _wrapHover(Padding child) { + return OtherUserMessageHover( + message: message, + child: child, + ); + } + + ChatPopupMenu _wrapPopMenu(Padding childWithPadding) { + return ChatPopupMenu( + onAction: (action) { + if (action == ChatMessageAction.copy && message is TextMessage) { + Clipboard.setData(ClipboardData(text: (message as TextMessage).text)); + showMessageToast(LocaleKeys.grid_row_copyProperty.tr()); + } + }, + builder: (context) => childWithPadding, + ); + } +} + +class OtherUserMessageHover extends StatefulWidget { + const OtherUserMessageHover({ + super.key, + required this.child, + required this.message, + }); + + final Widget child; + final Message message; + final bool autoShowHover = true; + + @override + State createState() => _OtherUserMessageHoverState(); +} + +class _OtherUserMessageHoverState extends State { + bool _isHover = false; + + @override + void initState() { + super.initState(); + _isHover = widget.autoShowHover ? false : true; + } + + @override + Widget build(BuildContext context) { + final List children = [ + DecoratedBox( + decoration: const BoxDecoration( + color: Colors.transparent, + borderRadius: Corners.s6Border, + ), + child: Padding( + padding: const EdgeInsets.only(bottom: 30), + child: widget.child, + ), + ), + ]; + + if (_isHover) { + children.addAll(_buildOnHoverItems()); + } + + return MouseRegion( + cursor: SystemMouseCursors.click, + opaque: false, + onEnter: (p) => setState(() { + if (widget.autoShowHover) { + _isHover = true; + } + }), + onExit: (p) => setState(() { + if (widget.autoShowHover) { + _isHover = false; + } + }), + child: Stack( + alignment: AlignmentDirectional.centerStart, + children: children, + ), + ); + } + + List _buildOnHoverItems() { + final List children = []; + if (widget.message is TextMessage) { + children.add( + CopyButton( + textMessage: widget.message as TextMessage, + ).positioned(left: _leftPadding, bottom: 0), + ); + } + + return children; + } +} + +class CopyButton extends StatelessWidget { + const CopyButton({ + super.key, + required this.textMessage, + }); + final TextMessage textMessage; + + @override + Widget build(BuildContext context) { + return FlowyTooltip( + message: LocaleKeys.settings_menu_clickToCopy.tr(), + child: FlowyIconButton( + width: 24, + hoverColor: AFThemeExtension.of(context).lightGreyHover, + fillColor: Theme.of(context).cardColor, + icon: FlowySvg( + FlowySvgs.ai_copy_s, + size: const Size.square(14), + color: Theme.of(context).colorScheme.primary, + ), + onPressed: () async { + final document = customMarkdownToDocument(textMessage.text); + await getIt().setData( + ClipboardServiceData( + plainText: textMessage.text, + inAppJson: jsonEncode(document.toJson()), + ), + ); + if (context.mounted) { + showToastNotification( + context, + message: LocaleKeys.grid_url_copiedNotification.tr(), + ); + } + }, + ), + ); + } +} diff --git a/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/user_message_bubble.dart b/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/message/user_message_bubble.dart similarity index 69% rename from frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/user_message_bubble.dart rename to frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/message/user_message_bubble.dart index 9adf3d593b..e0cdc45562 100644 --- a/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/user_message_bubble.dart +++ b/frontend/appflowy_flutter/lib/plugins/ai_chat/presentation/message/user_message_bubble.dart @@ -1,6 +1,6 @@ import 'package:appflowy/generated/flowy_svgs.g.dart'; import 'package:appflowy/generated/locale_keys.g.dart'; -import 'package:appflowy/plugins/ai_chat/application/chat_user_message_bloc.dart'; +import 'package:appflowy/plugins/ai_chat/application/chat_member_bloc.dart'; import 'package:appflowy/plugins/ai_chat/presentation/chat_avatar.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flowy_infra/size.dart'; @@ -27,49 +27,52 @@ class ChatUserMessageBubble extends StatelessWidget { const borderRadius = BorderRadius.all(Radius.circular(6)); final backgroundColor = Theme.of(context).colorScheme.surfaceContainerHighest; + if (context.read().state.members[message.author.id] == + null) { + context + .read() + .add(ChatMemberEvent.getMemberInfo(message.author.id)); + } - return BlocProvider( - create: (context) => ChatUserMessageBloc(message: message) - ..add(const ChatUserMessageEvent.initial()), - child: BlocBuilder( - builder: (context, state) { - return Row( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - // _wrapHover( - Flexible( - child: DecoratedBox( - decoration: BoxDecoration( - borderRadius: borderRadius, - color: backgroundColor, - ), - child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: 16, - vertical: 12, - ), - child: child, + return BlocConsumer( + listenWhen: (previous, current) { + return previous.members[message.author.id] != + current.members[message.author.id]; + }, + listener: (context, state) {}, + builder: (context, state) { + final member = state.members[message.author.id]; + return Row( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // _wrapHover( + Flexible( + child: DecoratedBox( + decoration: BoxDecoration( + borderRadius: borderRadius, + color: backgroundColor, + ), + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 16, + vertical: 12, ), + child: child, ), ), - // ), - BlocBuilder( - builder: (context, state) { - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 16), - child: ChatUserAvatar( - iconUrl: state.member?.avatarUrl ?? "", - name: state.member?.name ?? "", - size: 36, - ), - ); - }, + ), + // ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: ChatUserAvatar( + iconUrl: member?.info.avatarUrl ?? "", + name: member?.info.name ?? "", ), - ], - ); - }, - ), + ), + ], + ); + }, ); } } diff --git a/frontend/appflowy_flutter/lib/plugins/base/emoji/emoji_picker.dart b/frontend/appflowy_flutter/lib/plugins/base/emoji/emoji_picker.dart index f2c9f53551..43e7035e38 100644 --- a/frontend/appflowy_flutter/lib/plugins/base/emoji/emoji_picker.dart +++ b/frontend/appflowy_flutter/lib/plugins/base/emoji/emoji_picker.dart @@ -1,5 +1,5 @@ import 'package:appflowy/plugins/base/emoji/emoji_picker_header.dart'; -import 'package:appflowy/plugins/base/emoji/emoji_skin_tone.dart'; +import 'package:appflowy/shared/icon_emoji_picker/emoji_skin_tone.dart'; import 'package:appflowy/shared/icon_emoji_picker/emoji_search_bar.dart'; import 'package:flowy_infra/size.dart'; import 'package:flowy_infra_ui/flowy_infra_ui.dart'; diff --git a/frontend/appflowy_flutter/lib/plugins/base/emoji/emoji_picker_header.dart b/frontend/appflowy_flutter/lib/plugins/base/emoji/emoji_picker_header.dart index 9f05c80f09..15014e2b6c 100644 --- a/frontend/appflowy_flutter/lib/plugins/base/emoji/emoji_picker_header.dart +++ b/frontend/appflowy_flutter/lib/plugins/base/emoji/emoji_picker_header.dart @@ -1,3 +1,4 @@ +import 'package:appflowy/plugins/document/presentation/editor_plugins/base/string_extension.dart'; import 'package:appflowy_editor/appflowy_editor.dart'; import 'package:flowy_infra_ui/flowy_infra_ui.dart'; import 'package:flutter/material.dart'; @@ -20,7 +21,7 @@ class FlowyEmojiHeader extends StatelessWidget { child: Padding( padding: const EdgeInsets.only(bottom: 4.0), child: FlowyText.regular( - category.id, + category.id.capitalize(), color: Theme.of(context).hintColor, ), ), diff --git a/frontend/appflowy_flutter/lib/plugins/database/board/presentation/widgets/board_hidden_groups.dart b/frontend/appflowy_flutter/lib/plugins/database/board/presentation/widgets/board_hidden_groups.dart index 6bba024eb0..98dd7a8eaf 100644 --- a/frontend/appflowy_flutter/lib/plugins/database/board/presentation/widgets/board_hidden_groups.dart +++ b/frontend/appflowy_flutter/lib/plugins/database/board/presentation/widgets/board_hidden_groups.dart @@ -8,6 +8,7 @@ import 'package:appflowy/plugins/database/application/row/row_cache.dart'; import 'package:appflowy/plugins/database/application/row/row_controller.dart'; import 'package:appflowy/plugins/database/board/application/board_bloc.dart'; import 'package:appflowy/plugins/database/grid/presentation/layout/sizes.dart'; +import 'package:appflowy/plugins/database/tab_bar/tab_bar_view.dart'; import 'package:appflowy/plugins/database/widgets/cell/card_cell_builder.dart'; import 'package:appflowy/plugins/database/widgets/cell/card_cell_skeleton/text_card_cell.dart'; import 'package:appflowy/plugins/database/widgets/row/row_detail.dart'; @@ -64,7 +65,10 @@ class HiddenGroupsColumn extends StatelessWidget { height: 50, child: Padding( padding: EdgeInsets.only( - left: 80 + margin.left, + left: margin.left + + context + .read() + .horizontalPadding, right: margin.right + 4, ), child: Row( diff --git a/frontend/appflowy_flutter/lib/plugins/database/calendar/presentation/calendar_page.dart b/frontend/appflowy_flutter/lib/plugins/database/calendar/presentation/calendar_page.dart index 746305264b..65b4613204 100644 --- a/frontend/appflowy_flutter/lib/plugins/database/calendar/presentation/calendar_page.dart +++ b/frontend/appflowy_flutter/lib/plugins/database/calendar/presentation/calendar_page.dart @@ -1,5 +1,3 @@ -import 'package:flutter/material.dart'; - import 'package:appflowy/generated/flowy_svgs.g.dart'; import 'package:appflowy/generated/locale_keys.g.dart'; import 'package:appflowy/mobile/presentation/bottom_sheet/bottom_sheet.dart'; @@ -20,12 +18,12 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flowy_infra/size.dart'; import 'package:flowy_infra/theme_extension.dart'; import 'package:flowy_infra_ui/flowy_infra_ui.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:go_router/go_router.dart'; import '../../application/row/row_controller.dart'; import '../../widgets/row/row_detail.dart'; - import 'calendar_day.dart'; import 'layout/sizes.dart'; import 'toolbar/calendar_setting_bar.dart'; @@ -185,11 +183,17 @@ class _CalendarPageState extends State { return LayoutBuilder( // must specify MonthView width for useAvailableVerticalSpace to work properly builder: (context, constraints) { + EdgeInsets padding = PlatformExtension.isMobile + ? CalendarSize.contentInsetsMobile + : CalendarSize.contentInsets + + const EdgeInsets.symmetric(horizontal: 40); + final double horizontalPadding = + context.read().horizontalPadding; + if (horizontalPadding == 0) { + padding = padding.copyWith(left: 0, right: 0); + } return Padding( - padding: PlatformExtension.isMobile - ? CalendarSize.contentInsetsMobile - : CalendarSize.contentInsets + - const EdgeInsets.symmetric(horizontal: 40), + padding: padding, child: ScrollConfiguration( behavior: ScrollConfiguration.of(context).copyWith(scrollbars: false), diff --git a/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/calculations/calculations_row.dart b/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/calculations/calculations_row.dart index 7899d5f56d..5524633a46 100644 --- a/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/calculations/calculations_row.dart +++ b/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/calculations/calculations_row.dart @@ -1,9 +1,8 @@ -import 'package:flutter/material.dart'; - import 'package:appflowy/plugins/database/grid/application/calculations/calculations_bloc.dart'; import 'package:appflowy/plugins/database/grid/application/grid_bloc.dart'; -import 'package:appflowy/plugins/database/grid/presentation/layout/sizes.dart'; import 'package:appflowy/plugins/database/grid/presentation/widgets/calculations/calculate_cell.dart'; +import 'package:appflowy/plugins/database/tab_bar/tab_bar_view.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; class GridCalculationsRow extends StatelessWidget { @@ -27,9 +26,12 @@ class GridCalculationsRow extends StatelessWidget { )..add(const CalculationsEvent.started()), child: BlocBuilder( builder: (context, state) { + final padding = + context.read().horizontalPadding; return Padding( - padding: - includeDefaultInsets ? GridSize.contentInsets : EdgeInsets.zero, + padding: includeDefaultInsets + ? EdgeInsets.symmetric(horizontal: padding) + : EdgeInsets.zero, child: Row( children: [ ...state.fields.map( diff --git a/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/footer/grid_footer.dart b/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/footer/grid_footer.dart index fa78dd629e..31ff0e8469 100755 --- a/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/footer/grid_footer.dart +++ b/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/footer/grid_footer.dart @@ -1,13 +1,13 @@ -import 'package:flutter/material.dart'; - import 'package:appflowy/generated/flowy_svgs.g.dart'; import 'package:appflowy/generated/locale_keys.g.dart'; import 'package:appflowy/plugins/database/grid/application/grid_bloc.dart'; import 'package:appflowy/plugins/database/grid/presentation/layout/sizes.dart'; +import 'package:appflowy/plugins/database/tab_bar/tab_bar_view.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flowy_infra/theme_extension.dart'; import 'package:flowy_infra_ui/style_widget/button.dart'; import 'package:flowy_infra_ui/style_widget/text.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; class GridAddRowButton extends StatelessWidget { @@ -41,8 +41,11 @@ class GridRowBottomBar extends StatelessWidget { @override Widget build(BuildContext context) { + final padding = + context.read().horizontalPadding; return Container( - padding: GridSize.footerContentInsets + const EdgeInsets.only(left: 40), + padding: GridSize.footerContentInsets.copyWith(left: 0) + + EdgeInsets.only(left: padding), height: GridSize.footerHeight, child: const GridAddRowButton(), ); diff --git a/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/row/row.dart b/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/row/row.dart index 337aab4a70..fd52ec727e 100755 --- a/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/row/row.dart +++ b/frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/row/row.dart @@ -98,7 +98,7 @@ class _RowLeadingState extends State<_RowLeading> { return AppFlowyPopover( controller: popoverController, triggerActions: PopoverTriggerFlags.none, - constraints: BoxConstraints.loose(const Size(176, 200)), + constraints: BoxConstraints.loose(const Size(200, 200)), direction: PopoverDirection.rightWithCenterAligned, margin: const EdgeInsets.symmetric(horizontal: 6, vertical: 8), popupBuilder: (_) { diff --git a/frontend/appflowy_flutter/lib/plugins/database/widgets/database_view_widget.dart b/frontend/appflowy_flutter/lib/plugins/database/widgets/database_view_widget.dart index 35169550f1..c979ee0829 100644 --- a/frontend/appflowy_flutter/lib/plugins/database/widgets/database_view_widget.dart +++ b/frontend/appflowy_flutter/lib/plugins/database/widgets/database_view_widget.dart @@ -56,7 +56,8 @@ class _DatabaseViewWidgetState extends State { shrinkWrap: widget.shrinkWrap, context: PluginContext(), data: { - kDatabasePluginWidgetBuilderHorizontalPadding: 40.0, + kDatabasePluginWidgetBuilderHorizontalPadding: + view.layout == ViewLayoutPB.Grid ? 40.0 : 0.0, }, ), ); diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_page.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_page.dart index c7f8643b68..822fe4d354 100644 --- a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_page.dart +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_page.dart @@ -130,8 +130,8 @@ class _AppFlowyEditorPageState extends State { final List toolbarItems = [ smartEditItem..isActive = onlyShowInSingleTextTypeSelectionAndExcludeTable, paragraphItem..isActive = onlyShowInSingleTextTypeSelectionAndExcludeTable, - ...headingItems - ..forEach((e) => e.isActive = onlyShowInSingleSelectionAndTextType), + headingsToolbarItem + ..isActive = onlyShowInSingleTextTypeSelectionAndExcludeTable, ...markdownFormatItems..forEach((e) => e.isActive = showInAnyTextType), quoteItem..isActive = onlyShowInSingleTextTypeSelectionAndExcludeTable, bulletedListItem @@ -387,6 +387,8 @@ class _AppFlowyEditorPageState extends State { editorState: editorState, editorScrollController: editorScrollController, textDirection: textDirection, + tooltipBuilder: (context, id, message, child) => widget.styleCustomizer + .buildToolbarItemTooltip(context, id, message, child,), child: editor, ), ); diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/align_toolbar_item/align_toolbar_item.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/align_toolbar_item/align_toolbar_item.dart index 9723158be5..8d15c0e6be 100644 --- a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/align_toolbar_item/align_toolbar_item.dart +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/align_toolbar_item/align_toolbar_item.dart @@ -9,12 +9,13 @@ import 'package:flutter/material.dart'; const String leftAlignmentKey = 'left'; const String centerAlignmentKey = 'center'; const String rightAlignmentKey = 'right'; +const String kAlignToolbarItemId = 'editor.align'; final alignToolbarItem = ToolbarItem( - id: 'editor.align', + id: kAlignToolbarItemId, group: 4, isActive: onlyShowInTextType, - builder: (context, editorState, highlightColor, _) { + builder: (context, editorState, highlightColor, _, tooltipBuilder) { final selection = editorState.selection!; final nodes = editorState.getNodesInSelection(selection); @@ -37,35 +38,37 @@ final alignToolbarItem = ToolbarItem( data = FlowySvgs.toolbar_align_right_s; } - final child = FlowySvg( + Widget child = FlowySvg( data, size: const Size.square(16), color: isHighlight ? highlightColor : Colors.white, ); - return MouseRegion( - cursor: SystemMouseCursors.click, - child: FlowyTooltip( - message: LocaleKeys.document_plugins_optionAction_align.tr(), - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 4.0), - child: _AlignmentButtons( - child: child, - onAlignChanged: (align) async { - await editorState.updateNode( - selection, - (node) => node.copyWith( - attributes: { - ...node.attributes, - blockComponentAlign: align, - }, - ), - ); + child = _AlignmentButtons( + child: child, + onAlignChanged: (align) async { + await editorState.updateNode( + selection, + (node) => node.copyWith( + attributes: { + ...node.attributes, + blockComponentAlign: align, }, ), - ), - ), + ); + }, ); + + if (tooltipBuilder != null) { + child = tooltipBuilder( + context, + kAlignToolbarItemId, + LocaleKeys.document_plugins_optionAction_align.tr(), + child, + ); + } + + return child; }, ); @@ -83,15 +86,17 @@ class _AlignmentButtons extends StatefulWidget { } class _AlignmentButtonsState extends State<_AlignmentButtons> { + final controller = PopoverController(); + @override Widget build(BuildContext context) { return AppFlowyPopover( windowPadding: const EdgeInsets.all(0), - margin: const EdgeInsets.all(4), + margin: const EdgeInsets.symmetric(vertical: 2.0), direction: PopoverDirection.bottomWithCenterAligned, offset: const Offset(0, 10), decorationColor: Theme.of(context).colorScheme.onTertiary, - borderRadius: const BorderRadius.all(Radius.circular(4)), + borderRadius: BorderRadius.circular(6.0), popupBuilder: (_) { keepEditorFocusNotifier.increase(); return _AlignButtons(onAlignChanged: widget.onAlignChanged); @@ -99,7 +104,12 @@ class _AlignmentButtonsState extends State<_AlignmentButtons> { onClose: () { keepEditorFocusNotifier.decrease(); }, - child: widget.child, + child: FlowyButton( + useIntrinsicWidth: true, + text: widget.child, + hoverColor: Colors.grey.withOpacity(0.3), + onTap: () => controller.show(), + ), ); } } @@ -114,7 +124,7 @@ class _AlignButtons extends StatelessWidget { @override Widget build(BuildContext context) { return SizedBox( - height: 32, + height: 28, child: Row( mainAxisSize: MainAxisSize.min, children: [ @@ -156,17 +166,16 @@ class _AlignButton extends StatelessWidget { @override Widget build(BuildContext context) { - return MouseRegion( - cursor: SystemMouseCursors.click, - child: GestureDetector( - onTap: onTap, - child: FlowyTooltip( - message: tooltips, - child: FlowySvg( - icon, - size: const Size.square(16), - color: Colors.white, - ), + return FlowyButton( + useIntrinsicWidth: true, + hoverColor: Colors.grey.withOpacity(0.3), + onTap: onTap, + text: FlowyTooltip( + message: tooltips, + child: FlowySvg( + icon, + size: const Size.square(16), + color: Colors.white, ), ), ); @@ -179,7 +188,7 @@ class _Divider extends StatelessWidget { @override Widget build(BuildContext context) { return Padding( - padding: const EdgeInsets.all(8), + padding: const EdgeInsets.all(4), child: Container( width: 1, color: Colors.grey, diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/base/string_extension.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/base/string_extension.dart index 532fc5e434..254c3d53bf 100644 --- a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/base/string_extension.dart +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/base/string_extension.dart @@ -1,5 +1,6 @@ extension Capitalize on String { String capitalize() { + if (isEmpty) return this; return "${this[0].toUpperCase()}${substring(1)}"; } } diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/font/customize_font_toolbar_item.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/font/customize_font_toolbar_item.dart index c610be4dbf..da4e0f2546 100644 --- a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/font/customize_font_toolbar_item.dart +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/font/customize_font_toolbar_item.dart @@ -1,6 +1,3 @@ -import 'package:appflowy/workspace/application/settings/appearance/base_appearance.dart'; -import 'package:flutter/material.dart'; - import 'package:appflowy/generated/flowy_svgs.g.dart'; import 'package:appflowy/generated/locale_keys.g.dart'; import 'package:appflowy/plugins/document/application/document_appearance_cubit.dart'; @@ -9,6 +6,7 @@ import 'package:appflowy/util/font_family_extension.dart'; import 'package:appflowy/util/levenshtein.dart'; import 'package:appflowy/workspace/application/appearance_defaults.dart'; import 'package:appflowy/workspace/application/settings/appearance/appearance_cubit.dart'; +import 'package:appflowy/workspace/application/settings/appearance/base_appearance.dart'; import 'package:appflowy/workspace/presentation/settings/shared/setting_list_tile.dart'; import 'package:appflowy/workspace/presentation/settings/shared/setting_value_dropdown.dart'; import 'package:appflowy_backend/log.dart'; @@ -20,56 +18,66 @@ import 'package:flowy_infra/theme_extension.dart'; import 'package:flowy_infra_ui/style_widget/button.dart'; import 'package:flowy_infra_ui/style_widget/text.dart'; import 'package:flowy_infra_ui/style_widget/text_field.dart'; -import 'package:flowy_infra_ui/widget/flowy_tooltip.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:google_fonts/google_fonts.dart'; +const kFontToolbarItemId = 'editor.font'; + final customizeFontToolbarItem = ToolbarItem( - id: 'editor.font', + id: kFontToolbarItemId, group: 4, isActive: onlyShowInTextType, - builder: (context, editorState, highlightColor, _) { + builder: (context, editorState, highlightColor, _, tooltipBuilder) { final selection = editorState.selection!; final popoverController = PopoverController(); final String? currentFontFamily = editorState .getDeltaAttributeValueInSelection(AppFlowyRichTextKeys.fontFamily); - return MouseRegion( - cursor: SystemMouseCursors.click, - child: FontFamilyDropDown( - currentFontFamily: currentFontFamily ?? '', - offset: const Offset(0, 12), - popoverController: popoverController, - onOpen: () => keepEditorFocusNotifier.increase(), - onClose: () => keepEditorFocusNotifier.decrease(), - showResetButton: true, - onFontFamilyChanged: (fontFamily) async { - popoverController.close(); - try { - await editorState.formatDelta(selection, { - AppFlowyRichTextKeys.fontFamily: fontFamily, - }); - } catch (e) { - Log.error('Failed to set font family: $e'); - } - }, - onResetFont: () async { - popoverController.close(); - await editorState - .formatDelta(selection, {AppFlowyRichTextKeys.fontFamily: null}); - }, - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 4.0), - child: FlowyTooltip( - message: LocaleKeys.document_plugins_fonts.tr(), - child: const FlowySvg( - FlowySvgs.font_family_s, - size: Size.square(16.0), - color: Colors.white, - ), - ), + + Widget child = FontFamilyDropDown( + currentFontFamily: currentFontFamily ?? '', + offset: const Offset(0, 12), + popoverController: popoverController, + onOpen: () => keepEditorFocusNotifier.increase(), + onClose: () => keepEditorFocusNotifier.decrease(), + showResetButton: true, + onFontFamilyChanged: (fontFamily) async { + popoverController.close(); + try { + await editorState.formatDelta(selection, { + AppFlowyRichTextKeys.fontFamily: fontFamily, + }); + } catch (e) { + Log.error('Failed to set font family: $e'); + } + }, + onResetFont: () async { + popoverController.close(); + await editorState + .formatDelta(selection, {AppFlowyRichTextKeys.fontFamily: null}); + }, + child: FlowyButton( + useIntrinsicWidth: true, + hoverColor: Colors.grey.withOpacity(0.3), + onTap: () => popoverController.show(), + text: const FlowySvg( + FlowySvgs.font_family_s, + size: Size.square(16.0), + color: Colors.white, ), ), ); + + if (tooltipBuilder != null) { + child = tooltipBuilder( + context, + kFontToolbarItemId, + LocaleKeys.document_plugins_fonts.tr(), + child, + ); + } + + return child; }, ); diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/heading/heading_toolbar_item.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/heading/heading_toolbar_item.dart new file mode 100644 index 0000000000..30395143e8 --- /dev/null +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/heading/heading_toolbar_item.dart @@ -0,0 +1,214 @@ +import 'package:appflowy/generated/flowy_svgs.g.dart'; +import 'package:appflowy/generated/locale_keys.g.dart'; +import 'package:appflowy_editor/appflowy_editor.dart'; +import 'package:appflowy_popover/appflowy_popover.dart'; +import 'package:collection/collection.dart'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:flowy_infra_ui/flowy_infra_ui.dart'; +import 'package:flutter/material.dart'; + +final _headingData = [ + (FlowySvgs.h1_s, LocaleKeys.editor_heading1.tr()), + (FlowySvgs.h2_s, LocaleKeys.editor_heading2.tr()), + (FlowySvgs.h3_s, LocaleKeys.editor_heading3.tr()), +]; + +final headingsToolbarItem = ToolbarItem( + id: 'editor.headings', + group: 1, + isActive: onlyShowInTextType, + builder: (context, editorState, highlightColor, _, __) { + final selection = editorState.selection!; + final node = editorState.getNodeAtPath(selection.start.path)!; + final delta = (node.delta ?? Delta()).toJson(); + int level = node.attributes[HeadingBlockKeys.level] ?? 1; + final originLevel = level; + final isHighlight = + node.type == HeadingBlockKeys.type && (level >= 1 && level <= 3); + // only supports the level 1 - 3 in the toolbar, ignore the other levels + level = level.clamp(1, 3); + + final svg = _headingData[level - 1].$1; + final message = _headingData[level - 1].$2; + + final child = FlowyTooltip( + message: message, + preferBelow: false, + child: Row( + children: [ + FlowySvg( + svg, + size: const Size.square(18), + color: isHighlight ? highlightColor : Colors.white, + ), + const HSpace(2.0), + const FlowySvg( + FlowySvgs.arrow_down_s, + size: Size.square(12), + color: Colors.grey, + ), + ], + ), + ); + return _HeadingPopup( + currentLevel: isHighlight ? level : -1, + highlightColor: highlightColor, + child: child, + onLevelChanged: (newLevel) async { + // same level means cancel the heading + final type = + newLevel == originLevel && node.type == HeadingBlockKeys.type + ? ParagraphBlockKeys.type + : HeadingBlockKeys.type; + + await editorState.formatNode( + selection, + (node) => node.copyWith( + type: type, + attributes: { + HeadingBlockKeys.level: newLevel, + blockComponentBackgroundColor: + node.attributes[blockComponentBackgroundColor], + blockComponentTextDirection: + node.attributes[blockComponentTextDirection], + blockComponentDelta: delta, + }, + ), + ); + }, + ); + }, +); + +class _HeadingPopup extends StatelessWidget { + const _HeadingPopup({ + required this.currentLevel, + required this.highlightColor, + required this.onLevelChanged, + required this.child, + }); + + final int currentLevel; + final Color highlightColor; + final Function(int level) onLevelChanged; + final Widget child; + + @override + Widget build(BuildContext context) { + return AppFlowyPopover( + windowPadding: const EdgeInsets.all(0), + margin: const EdgeInsets.symmetric(vertical: 2.0), + direction: PopoverDirection.bottomWithCenterAligned, + offset: const Offset(0, 10), + decorationColor: Theme.of(context).colorScheme.onTertiary, + borderRadius: BorderRadius.circular(6.0), + popupBuilder: (_) { + keepEditorFocusNotifier.increase(); + return _HeadingButtons( + currentLevel: currentLevel, + highlightColor: highlightColor, + onLevelChanged: onLevelChanged, + ); + }, + onClose: () { + keepEditorFocusNotifier.decrease(); + }, + child: FlowyButton( + useIntrinsicWidth: true, + hoverColor: Colors.grey.withOpacity(0.3), + text: child, + ), + ); + } +} + +class _HeadingButtons extends StatelessWidget { + const _HeadingButtons({ + required this.highlightColor, + required this.currentLevel, + required this.onLevelChanged, + }); + + final int currentLevel; + final Color highlightColor; + final Function(int level) onLevelChanged; + + @override + Widget build(BuildContext context) { + return SizedBox( + height: 28, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + const HSpace(4), + ..._headingData.mapIndexed((index, data) { + final svg = data.$1; + final message = data.$2; + return [ + _HeadingButton( + icon: svg, + tooltip: message, + onTap: () => onLevelChanged(index + 1), + isHighlight: index + 1 == currentLevel, + highlightColor: highlightColor, + ), + index != _headingData.length - 1 + ? const _Divider() + : const SizedBox.shrink(), + ]; + }).flattened, + const HSpace(4), + ], + ), + ); + } +} + +class _HeadingButton extends StatelessWidget { + const _HeadingButton({ + required this.icon, + required this.tooltip, + required this.onTap, + required this.highlightColor, + required this.isHighlight, + }); + + final Color highlightColor; + final FlowySvgData icon; + final String tooltip; + final VoidCallback onTap; + final bool isHighlight; + + @override + Widget build(BuildContext context) { + return FlowyButton( + useIntrinsicWidth: true, + hoverColor: Colors.grey.withOpacity(0.3), + onTap: onTap, + text: FlowyTooltip( + message: tooltip, + preferBelow: true, + child: FlowySvg( + icon, + size: const Size.square(18), + color: isHighlight ? highlightColor : Colors.white, + ), + ), + ); + } +} + +class _Divider extends StatelessWidget { + const _Divider(); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.all(4), + child: Container( + width: 1, + color: Colors.grey, + ), + ); + } +} diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/inline_math_equation/inline_math_equation_toolbar_item.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/inline_math_equation/inline_math_equation_toolbar_item.dart index 08c23df05b..a66a9ee317 100644 --- a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/inline_math_equation/inline_math_equation_toolbar_item.dart +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/inline_math_equation/inline_math_equation_toolbar_item.dart @@ -5,11 +5,13 @@ import 'package:appflowy_editor/appflowy_editor.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; +const _kInlineMathEquationToolbarItemId = 'editor.inline_math_equation'; + final ToolbarItem inlineMathEquationItem = ToolbarItem( - id: 'editor.inline_math_equation', + id: _kInlineMathEquationToolbarItemId, group: 2, isActive: onlyShowInSingleSelectionAndTextType, - builder: (context, editorState, highlightColor, _) { + builder: (context, editorState, highlightColor, _, tooltipBuilder) { final selection = editorState.selection!; final nodes = editorState.getNodesInSelection(selection); final isHighlight = nodes.allSatisfyInSelection(selection, (delta) { @@ -17,7 +19,7 @@ final ToolbarItem inlineMathEquationItem = ToolbarItem( (attributes) => attributes[InlineMathEquationKeys.formula] != null, ); }); - return SVGIconItemWidget( + final child = SVGIconItemWidget( iconBuilder: (_) => FlowySvg( FlowySvgs.math_lg, size: const Size.square(16), @@ -25,7 +27,6 @@ final ToolbarItem inlineMathEquationItem = ToolbarItem( ), isHighlight: isHighlight, highlightColor: highlightColor, - tooltip: LocaleKeys.document_plugins_createInlineMathEquation.tr(), onPressed: () async { final selection = editorState.selection; if (selection == null || selection.isCollapsed) { @@ -71,5 +72,16 @@ final ToolbarItem inlineMathEquationItem = ToolbarItem( await editorState.apply(transaction); }, ); + + if (tooltipBuilder != null) { + return tooltipBuilder( + context, + _kInlineMathEquationToolbarItemId, + LocaleKeys.document_plugins_createInlineMathEquation.tr(), + child, + ); + } + + return child; }, ); diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/mention/mobile_page_selector_sheet.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/mention/mobile_page_selector_sheet.dart index d15d24aab7..ae493d402a 100644 --- a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/mention/mobile_page_selector_sheet.dart +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/mention/mobile_page_selector_sheet.dart @@ -1,5 +1,3 @@ -import 'package:flutter/material.dart'; - import 'package:appflowy/generated/flowy_svgs.g.dart'; import 'package:appflowy/generated/locale_keys.g.dart'; import 'package:appflowy/mobile/presentation/base/flowy_search_text_field.dart'; @@ -11,13 +9,17 @@ import 'package:appflowy/workspace/application/view/view_service.dart'; import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flowy_infra_ui/style_widget/text.dart'; +import 'package:flutter/material.dart'; -Future showPageSelectorSheet( +Future showPageSelectorSheet( BuildContext context, { String? currentViewId, String? selectedViewId, + bool Function(ViewPB view)? filter, }) async { - return showMobileBottomSheet( + filter ??= (v) => !v.isSpace && v.parentViewId.isNotEmpty; + + return showMobileBottomSheet( context, title: LocaleKeys.document_mobilePageSelector_title.tr(), showHeader: true, @@ -32,16 +34,22 @@ Future showPageSelectorSheet( child: _MobilePageSelectorBody( currentViewId: currentViewId, selectedViewId: selectedViewId, + filter: filter, ), ), ); } class _MobilePageSelectorBody extends StatefulWidget { - const _MobilePageSelectorBody({this.currentViewId, this.selectedViewId}); + const _MobilePageSelectorBody({ + this.currentViewId, + this.selectedViewId, + this.filter, + }); final String? currentViewId; final String? selectedViewId; + final bool Function(ViewPB view)? filter; @override State<_MobilePageSelectorBody> createState() => @@ -79,7 +87,10 @@ class _MobilePageSelectorBodyState extends State<_MobilePageSelectorBody> { ); } - final views = snapshot.data!; + final views = snapshot.data! + .where((v) => widget.filter?.call(v) ?? true) + .toList(); + if (widget.currentViewId != null) { views.removeWhere((v) => v.id == widget.currentViewId); } @@ -118,7 +129,7 @@ class _MobilePageSelectorBodyState extends State<_MobilePageSelectorBody> { ), text: view.name, isSelected: view.id == widget.selectedViewId, - onTap: () => Navigator.of(context).pop(view.id), + onTap: () => Navigator.of(context).pop(view), ), ) .toList(), diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/mobile_toolbar_v3/add_block_toolbar_item.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/mobile_toolbar_v3/add_block_toolbar_item.dart index 6974d40a24..d09e2be349 100644 --- a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/mobile_toolbar_v3/add_block_toolbar_item.dart +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/mobile_toolbar_v3/add_block_toolbar_item.dart @@ -1,7 +1,5 @@ import 'dart:async'; -import 'package:flutter/material.dart'; - import 'package:appflowy/generated/flowy_svgs.g.dart'; import 'package:appflowy/generated/locale_keys.g.dart'; import 'package:appflowy/mobile/presentation/base/type_option_menu_item.dart'; @@ -21,6 +19,7 @@ import 'package:appflowy/workspace/presentation/home/menu/menu_shared_state.dart import 'package:appflowy_editor/appflowy_editor.dart'; import 'package:appflowy_editor_plugins/appflowy_editor_plugins.dart'; import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; final addBlockToolbarItem = AppFlowyMobileToolbarItem( @@ -230,16 +229,16 @@ class _AddBlockMenu extends StatelessWidget { AppGlobals.rootNavKey.currentContext?.pop(true); final currentViewId = getIt().latestOpenView?.id; - final viewId = await showPageSelectorSheet( + final view = await showPageSelectorSheet( context, currentViewId: currentViewId, ); - if (viewId != null) { + if (view != null) { Future.delayed(const Duration(milliseconds: 100), () { editorState.insertBlockAfterCurrentSelection( selection, - pageMentionNode(viewId), + pageMentionNode(view.id), ); }); } diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/openai/widgets/smart_edit_toolbar_item.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/openai/widgets/smart_edit_toolbar_item.dart index 84d122cf18..434857891e 100644 --- a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/openai/widgets/smart_edit_toolbar_item.dart +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/openai/widgets/smart_edit_toolbar_item.dart @@ -11,12 +11,15 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flowy_infra_ui/style_widget/icon_button.dart'; import 'package:flutter/material.dart'; +const _kSmartEditToolbarItemId = 'appflowy.editor.smart_edit'; + final ToolbarItem smartEditItem = ToolbarItem( - id: 'appflowy.editor.smart_edit', + id: _kSmartEditToolbarItemId, group: 0, isActive: onlyShowInSingleSelectionAndTextType, - builder: (context, editorState, _, __) => SmartEditActionList( + builder: (context, editorState, _, __, tooltipBuilder) => SmartEditActionList( editorState: editorState, + tooltipBuilder: tooltipBuilder, ), ); @@ -24,9 +27,11 @@ class SmartEditActionList extends StatefulWidget { const SmartEditActionList({ super.key, required this.editorState, + this.tooltipBuilder, }); final EditorState editorState; + final ToolbarTooltipBuilder? tooltipBuilder; @override State createState() => _SmartEditActionListState(); @@ -60,11 +65,8 @@ class _SmartEditActionListState extends State { onClosed: () => keepEditorFocusNotifier.decrease(), buildChild: (controller) { keepEditorFocusNotifier.increase(); - return FlowyIconButton( + final child = FlowyIconButton( hoverColor: Colors.transparent, - tooltipText: isAIEnabled - ? LocaleKeys.document_plugins_smartEdit.tr() - : LocaleKeys.document_plugins_appflowyAIEditDisabled.tr(), preferBelow: false, icon: const Icon( Icons.lightbulb_outline, @@ -83,6 +85,19 @@ class _SmartEditActionListState extends State { } }, ); + + if (widget.tooltipBuilder != null) { + return widget.tooltipBuilder!( + context, + _kSmartEditToolbarItemId, + isAIEnabled + ? LocaleKeys.document_plugins_smartEdit.tr() + : LocaleKeys.document_plugins_appflowyAIEditDisabled.tr(), + child, + ); + } + + return child; }, onSelected: (action, controller) { controller.close(); diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/plugins.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/plugins.dart index a4ba3e64aa..ef877d61ab 100644 --- a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/plugins.dart +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/plugins.dart @@ -14,15 +14,17 @@ export 'database/inline_database_menu_item.dart'; export 'database/referenced_database_menu_item.dart'; export 'error/error_block_component_builder.dart'; export 'extensions/flowy_tint_extension.dart'; +export 'file/file_block.dart'; export 'find_and_replace/find_and_replace_menu.dart'; export 'font/customize_font_toolbar_item.dart'; export 'header/cover_editor_bloc.dart'; export 'header/custom_cover_picker.dart'; export 'header/document_header_node_widget.dart'; +export 'heading/heading_toolbar_item.dart'; export 'image/custom_image_block_component/image_menu.dart'; -export 'image/multi_image_block_component/multi_image_menu.dart'; export 'image/image_selection_menu.dart'; export 'image/mobile_image_toolbar_item.dart'; +export 'image/multi_image_block_component/multi_image_menu.dart'; export 'inline_math_equation/inline_math_equation.dart'; export 'inline_math_equation/inline_math_equation_toolbar_item.dart'; export 'link_preview/custom_link_preview.dart'; @@ -53,4 +55,3 @@ export 'table/table_option_action.dart'; export 'todo_list/todo_list_icon.dart'; export 'toggle/toggle_block_component.dart'; export 'toggle/toggle_block_shortcut_event.dart'; -export 'file/file_block.dart'; diff --git a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_style.dart b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_style.dart index 529c2a549c..e8c3554e73 100644 --- a/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_style.dart +++ b/frontend/appflowy_flutter/lib/plugins/document/presentation/editor_style.dart @@ -1,4 +1,7 @@ +import 'dart:io'; + import 'package:appflowy/core/helpers/url_launcher.dart'; +import 'package:appflowy/generated/locale_keys.g.dart'; import 'package:appflowy/mobile/application/page_style/document_page_style_bloc.dart'; import 'package:appflowy/plugins/document/application/document_appearance_cubit.dart'; import 'package:appflowy/plugins/document/presentation/editor_plugins/base/font_colors.dart'; @@ -13,7 +16,10 @@ import 'package:appflowy/workspace/application/settings/appearance/appearance_cu import 'package:appflowy/workspace/application/settings/appearance/base_appearance.dart'; import 'package:appflowy_editor/appflowy_editor.dart' hide Log; import 'package:collection/collection.dart'; +import 'package:easy_localization/easy_localization.dart'; import 'package:flowy_infra/theme_extension.dart'; +import 'package:flowy_infra_ui/style_widget/hover.dart'; +import 'package:flowy_infra_ui/widget/flowy_tooltip.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -100,7 +106,8 @@ class EditorStyleCustomizer { final theme = Theme.of(context); final fontSize = pageStyle.fontLayout.fontSize; final lineHeight = pageStyle.lineHeightLayout.lineHeight; - final fontFamily = pageStyle.fontFamily ?? defaultFontFamily; + final fontFamily = pageStyle.fontFamily ?? + context.read().state.font; final defaultTextDirection = context.read().state.defaultTextDirection; final textScaleFactor = @@ -394,4 +401,83 @@ class EditorStyleCustomizer { after, ); } + + Widget buildToolbarItemTooltip( + BuildContext context, + String id, + String message, + Widget child, + ) { + final tooltipMessage = _buildTooltipMessage(id, message); + child = FlowyTooltip( + richMessage: tooltipMessage, + preferBelow: false, + verticalOffset: 20, + child: child, + ); + + // the align/font toolbar item doesn't need the hover effect + final toolbarItemsWithoutHover = { + kFontToolbarItemId, + kAlignToolbarItemId, + }; + + if (!toolbarItemsWithoutHover.contains(id)) { + child = Padding( + padding: const EdgeInsets.symmetric(vertical: 4.0), + child: FlowyHover( + style: HoverStyle( + hoverColor: Colors.grey.withOpacity(0.3), + ), + child: child, + ), + ); + } + + return child; + } + + TextSpan _buildTooltipMessage(String id, String message) { + final markdownItemTooltips = { + 'underline': (LocaleKeys.toolbar_underline.tr(), 'U'), + 'bold': (LocaleKeys.toolbar_bold.tr(), 'B'), + 'italic': (LocaleKeys.toolbar_italic.tr(), 'I'), + 'strikethrough': (LocaleKeys.toolbar_strike.tr(), 'Shift+S'), + 'code': (LocaleKeys.toolbar_inlineCode.tr(), 'E'), + }; + + final markdownItemIds = markdownItemTooltips.keys.toSet(); + // the items without shortcuts + if (!markdownItemIds.contains(id)) { + return TextSpan( + text: message, + style: context.tooltipTextStyle(), + ); + } + + final tooltip = markdownItemTooltips[id]; + if (tooltip == null) { + return TextSpan( + text: message, + style: context.tooltipTextStyle(), + ); + } + + final textSpan = TextSpan( + children: [ + TextSpan( + text: '${tooltip.$1}\n', + style: context.tooltipTextStyle(), + ), + TextSpan( + text: (Platform.isMacOS ? '⌘+' : 'Ctrl+\\') + tooltip.$2, + style: context + .tooltipTextStyle() + ?.copyWith(color: Theme.of(context).hintColor), + ), + ], + ); + + return textSpan; + } } diff --git a/frontend/appflowy_flutter/lib/shared/google_fonts_extension.dart b/frontend/appflowy_flutter/lib/shared/google_fonts_extension.dart index c5cb5df786..3e6a69153a 100644 --- a/frontend/appflowy_flutter/lib/shared/google_fonts_extension.dart +++ b/frontend/appflowy_flutter/lib/shared/google_fonts_extension.dart @@ -1,5 +1,4 @@ import 'package:appflowy/workspace/application/settings/appearance/base_appearance.dart'; -import 'package:appflowy_backend/log.dart'; import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; @@ -38,11 +37,7 @@ TextStyle getGoogleFontSafely( letterSpacing: letterSpacing, height: lineHeight, ); - } catch (e) { - Log.error( - 'Font family $fontFamily is not available, using default font family instead', - ); - } + } catch (_) {} } return TextStyle( diff --git a/frontend/appflowy_flutter/lib/shared/icon_emoji_picker/colors.dart b/frontend/appflowy_flutter/lib/shared/icon_emoji_picker/colors.dart new file mode 100644 index 0000000000..8728c3be4a --- /dev/null +++ b/frontend/appflowy_flutter/lib/shared/icon_emoji_picker/colors.dart @@ -0,0 +1,26 @@ +import 'package:appflowy/util/theme_extension.dart'; +import 'package:flutter/material.dart'; + +extension PickerColors on BuildContext { + Color get pickerTextColor { + return Theme.of(this).isLightMode + ? const Color(0x80171717) + : Colors.white.withOpacity(0.5); + } + + Color get pickerIconColor { + return Theme.of(this).isLightMode ? const Color(0xFF171717) : Colors.white; + } + + Color get pickerSearchBarBorderColor { + return Theme.of(this).isLightMode + ? const Color(0x1E171717) + : Colors.white.withOpacity(0.12); + } + + Color get pickerButtonBoarderColor { + return Theme.of(this).isLightMode + ? const Color(0x1E171717) + : Colors.white.withOpacity(0.12); + } +} diff --git a/frontend/appflowy_flutter/lib/shared/icon_emoji_picker/emoji_search_bar.dart b/frontend/appflowy_flutter/lib/shared/icon_emoji_picker/emoji_search_bar.dart index 57dba3c93e..8dbee9ec29 100644 --- a/frontend/appflowy_flutter/lib/shared/icon_emoji_picker/emoji_search_bar.dart +++ b/frontend/appflowy_flutter/lib/shared/icon_emoji_picker/emoji_search_bar.dart @@ -1,12 +1,14 @@ import 'package:appflowy/generated/flowy_svgs.g.dart'; import 'package:appflowy/generated/locale_keys.g.dart'; -import 'package:appflowy/plugins/base/emoji/emoji_skin_tone.dart'; +import 'package:appflowy/shared/icon_emoji_picker/emoji_skin_tone.dart'; import 'package:appflowy_editor/appflowy_editor.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flowy_infra_ui/flowy_infra_ui.dart'; import 'package:flutter/material.dart'; import 'package:flutter_emoji_mart/flutter_emoji_mart.dart'; +import 'colors.dart'; + typedef EmojiKeywordChangedCallback = void Function(String keyword); typedef EmojiSkinToneChanged = void Function(EmojiSkinTone skinTone); @@ -82,7 +84,7 @@ class _RandomEmojiButton extends StatelessWidget { height: 36, decoration: ShapeDecoration( shape: RoundedRectangleBorder( - side: const BorderSide(color: Color(0x1E171717)), + side: BorderSide(color: context.pickerButtonBoarderColor), borderRadius: BorderRadius.circular(8), ), ), @@ -141,7 +143,7 @@ class _SearchTextFieldState extends State<_SearchTextField> { fontWeight: FontWeight.w400, color: Theme.of(context).hintColor, ), - enableBorderColor: const Color(0x1E171717), + enableBorderColor: context.pickerSearchBarBorderColor, controller: controller, onChanged: widget.onKeywordChanged, prefixIcon: const Padding( diff --git a/frontend/appflowy_flutter/lib/plugins/base/emoji/emoji_skin_tone.dart b/frontend/appflowy_flutter/lib/shared/icon_emoji_picker/emoji_skin_tone.dart similarity index 96% rename from frontend/appflowy_flutter/lib/plugins/base/emoji/emoji_skin_tone.dart rename to frontend/appflowy_flutter/lib/shared/icon_emoji_picker/emoji_skin_tone.dart index 5206075769..e802e0dba0 100644 --- a/frontend/appflowy_flutter/lib/plugins/base/emoji/emoji_skin_tone.dart +++ b/frontend/appflowy_flutter/lib/shared/icon_emoji_picker/emoji_skin_tone.dart @@ -5,6 +5,8 @@ import 'package:flowy_infra_ui/flowy_infra_ui.dart'; import 'package:flutter/material.dart'; import 'package:flutter_emoji_mart/flutter_emoji_mart.dart'; +import 'colors.dart'; + // use a temporary global value to store last selected skin tone EmojiSkinTone? lastSelectedEmojiSkinTone; @@ -68,7 +70,7 @@ class _FlowyEmojiSkinToneSelectorState width: 36, height: 36, decoration: BoxDecoration( - border: Border.all(color: const Color(0x1E171717)), + border: Border.all(color: context.pickerButtonBoarderColor), borderRadius: BorderRadius.circular(8), ), child: FlowyButton( diff --git a/frontend/appflowy_flutter/lib/shared/icon_emoji_picker/icon_picker.dart b/frontend/appflowy_flutter/lib/shared/icon_emoji_picker/icon_picker.dart index f9d5cbf9b5..f18b8d43f3 100644 --- a/frontend/appflowy_flutter/lib/shared/icon_emoji_picker/icon_picker.dart +++ b/frontend/appflowy_flutter/lib/shared/icon_emoji_picker/icon_picker.dart @@ -1,7 +1,10 @@ import 'dart:convert'; import 'dart:math'; +import 'package:appflowy/core/helpers/url_launcher.dart'; import 'package:appflowy/generated/flowy_svgs.g.dart'; +import 'package:appflowy/generated/locale_keys.g.dart'; +import 'package:appflowy/plugins/document/presentation/editor_plugins/base/string_extension.dart'; import 'package:appflowy/shared/icon_emoji_picker/icon.dart'; import 'package:appflowy/shared/icon_emoji_picker/icon_search_bar.dart'; import 'package:appflowy/util/debounce.dart'; @@ -9,10 +12,13 @@ import 'package:appflowy/workspace/presentation/home/menu/sidebar/space/space_ic import 'package:appflowy_backend/log.dart'; import 'package:appflowy_popover/appflowy_popover.dart'; import 'package:collection/collection.dart'; +import 'package:easy_localization/easy_localization.dart'; import 'package:flowy_infra_ui/flowy_infra_ui.dart'; +import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart' hide Icon; import 'package:flutter/services.dart'; +import 'colors.dart'; import 'icon_color_picker.dart'; // cache the icon groups to avoid loading them multiple times @@ -197,10 +203,10 @@ class _IconPickerState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ FlowyText( - iconGroup.displayName, + iconGroup.displayName.capitalize(), fontSize: 12, figmaLineHeight: 18.0, - color: const Color(0x80171717), + color: context.pickerTextColor, ), const VSpace(4.0), Wrap( @@ -218,6 +224,10 @@ class _IconPickerState extends State { ).toList(), ), const VSpace(12.0), + if (index == widget.iconGroups.length - 1) ...[ + const _StreamlinePermit(), + const VSpace(12.0), + ], ], ); }, @@ -252,7 +262,7 @@ class _Icon extends StatelessWidget { child: FlowySvg.string( icon.content, size: const Size.square(20), - color: const Color(0xFF171717), + color: context.pickerIconColor, opacity: 0.7, ), ), @@ -269,3 +279,39 @@ class _Icon extends StatelessWidget { ); } } + +class _StreamlinePermit extends StatelessWidget { + const _StreamlinePermit(); + + @override + Widget build(BuildContext context) { + // Open source icons from Streamline + final textStyle = TextStyle( + fontSize: 12.0, + height: 18.0 / 12.0, + fontWeight: FontWeight.w500, + color: context.pickerTextColor, + ); + return RichText( + text: TextSpan( + children: [ + TextSpan( + text: '${LocaleKeys.emoji_openSourceIconsFrom.tr()} ', + style: textStyle, + ), + TextSpan( + text: 'Streamline', + style: textStyle.copyWith( + decoration: TextDecoration.underline, + color: Theme.of(context).colorScheme.primary, + ), + recognizer: TapGestureRecognizer() + ..onTap = () { + afLaunchUrlString('https://www.streamlinehq.com/'); + }, + ), + ], + ), + ); + } +} diff --git a/frontend/appflowy_flutter/lib/shared/icon_emoji_picker/icon_search_bar.dart b/frontend/appflowy_flutter/lib/shared/icon_emoji_picker/icon_search_bar.dart index 06a3566d21..31e1e285c0 100644 --- a/frontend/appflowy_flutter/lib/shared/icon_emoji_picker/icon_search_bar.dart +++ b/frontend/appflowy_flutter/lib/shared/icon_emoji_picker/icon_search_bar.dart @@ -6,6 +6,8 @@ import 'package:flowy_infra_ui/flowy_infra_ui.dart'; import 'package:flutter/material.dart'; import 'package:flutter_emoji_mart/flutter_emoji_mart.dart'; +import 'colors.dart'; + typedef IconKeywordChangedCallback = void Function(String keyword); typedef EmojiSkinToneChanged = void Function(EmojiSkinTone skinTone); @@ -70,7 +72,7 @@ class _RandomIconButton extends StatelessWidget { height: 36, decoration: ShapeDecoration( shape: RoundedRectangleBorder( - side: const BorderSide(color: Color(0x1E171717)), + side: BorderSide(color: context.pickerButtonBoarderColor), borderRadius: BorderRadius.circular(8), ), ), @@ -123,7 +125,7 @@ class _SearchTextFieldState extends State<_SearchTextField> { fontWeight: FontWeight.w400, color: Theme.of(context).hintColor, ), - enableBorderColor: const Color(0x1E171717), + enableBorderColor: context.pickerSearchBarBorderColor, controller: controller, onChanged: widget.onKeywordChanged, prefixIcon: const Padding( diff --git a/frontend/appflowy_flutter/lib/user/application/reminder/reminder_bloc.dart b/frontend/appflowy_flutter/lib/user/application/reminder/reminder_bloc.dart index 07024b2668..c5e9d7e132 100644 --- a/frontend/appflowy_flutter/lib/user/application/reminder/reminder_bloc.dart +++ b/frontend/appflowy_flutter/lib/user/application/reminder/reminder_bloc.dart @@ -24,6 +24,8 @@ part 'reminder_bloc.freezed.dart'; class ReminderBloc extends Bloc { ReminderBloc() : super(ReminderState()) { + Log.info('ReminderBloc created'); + _actionBloc = getIt(); _reminderService = const ReminderService(); timer = _periodicCheck(); @@ -40,36 +42,58 @@ class ReminderBloc extends Bloc { (event, emit) async { await event.when( started: () async { - final remindersOrFailure = await _reminderService.fetchReminders(); + Log.info('Start fetching reminders'); - remindersOrFailure.fold( - (reminders) => emit(state.copyWith(reminders: reminders)), - (error) => Log.error(error), + final result = await _reminderService.fetchReminders(); + + result.fold( + (reminders) { + Log.info('Fetched reminders on startup: ${reminders.length}'); + emit(state.copyWith(reminders: reminders)); + }, + (error) => Log.error('Failed to fetch reminders: $error'), ); }, remove: (reminderId) async { - final unitOrFailure = - await _reminderService.removeReminder(reminderId: reminderId); + final result = await _reminderService.removeReminder( + reminderId: reminderId, + ); - unitOrFailure.fold( + result.fold( (_) { + Log.info('Removed reminder: $reminderId'); final reminders = [...state.reminders]; reminders.removeWhere((e) => e.id == reminderId); emit(state.copyWith(reminders: reminders)); }, - (error) => Log.error(error), + (error) => Log.error( + 'Failed to remove reminder($reminderId): $error', + ), ); }, add: (reminder) async { - final unitOrFailure = - await _reminderService.addReminder(reminder: reminder); + // check the timestamp in the reminder + if (reminder.createdAt == null) { + reminder.freeze(); + reminder = reminder.rebuild((update) { + update.meta[ReminderMetaKeys.createdAt] = + DateTime.now().millisecondsSinceEpoch.toString(); + }); + } - return unitOrFailure.fold( + final result = await _reminderService.addReminder( + reminder: reminder, + ); + + return result.fold( (_) { + Log.info('Added reminder: ${reminder.id}'); + Log.info('Before adding reminder: ${state.reminders.length}'); final reminders = [...state.reminders, reminder]; + Log.info('After adding reminder: ${reminders.length}'); emit(state.copyWith(reminders: reminders)); }, - (error) => Log.error(error), + (error) => Log.error('Failed to add reminder: $error'), ); }, addById: (reminderId, objectId, scheduledAt, meta) async => add( @@ -86,8 +110,9 @@ class ReminderBloc extends Bloc { ), ), update: (updateObject) async { - final reminder = state.reminders - .firstWhereOrNull((r) => r.id == updateObject.id); + final reminder = state.reminders.firstWhereOrNull( + (r) => r.id == updateObject.id, + ); if (reminder == null) { return; @@ -98,15 +123,20 @@ class ReminderBloc extends Bloc { reminder: newReminder, ); + Log.info('Updating reminder: ${reminder.id}'); + failureOrUnit.fold( (_) { + Log.info('Updated reminder: ${reminder.id}'); final index = state.reminders.indexWhere((r) => r.id == reminder.id); final reminders = [...state.reminders]; reminders.replaceRange(index, index + 1, [newReminder]); emit(state.copyWith(reminders: reminders)); }, - (error) => Log.error(error), + (error) => Log.error( + 'Failed to update reminder(${reminder.id}): $error', + ), ); }, pressReminder: (reminderId, path, view) { @@ -157,6 +187,9 @@ class ReminderBloc extends Bloc { }, markAsRead: (reminderIds) async { final reminders = await _onMarkAsRead(reminderIds: reminderIds); + + Log.info('Marked reminders as read: $reminderIds'); + emit( state.copyWith( reminders: reminders, @@ -168,6 +201,9 @@ class ReminderBloc extends Bloc { isArchived: true, reminderIds: reminderIds, ); + + Log.info('Archived reminders: $reminderIds'); + emit( state.copyWith( reminders: reminders, @@ -176,6 +212,9 @@ class ReminderBloc extends Bloc { }, markAllRead: () async { final reminders = await _onMarkAsRead(); + + Log.info('Marked all reminders as read'); + emit( state.copyWith( reminders: reminders, @@ -184,6 +223,9 @@ class ReminderBloc extends Bloc { }, archiveAll: () async { final reminders = await _onArchived(isArchived: true); + + Log.info('Archived all reminders'); + emit( state.copyWith( reminders: reminders, @@ -199,11 +241,14 @@ class ReminderBloc extends Bloc { ); }, refresh: () async { - final remindersOrFailure = await _reminderService.fetchReminders(); + final result = await _reminderService.fetchReminders(); - remindersOrFailure.fold( - (reminders) => emit(state.copyWith(reminders: reminders)), - (error) => emit(state), + result.fold( + (reminders) { + Log.info('Fetched reminders on refresh: ${reminders.length}'); + emit(state.copyWith(reminders: reminders)); + }, + (error) => Log.error('Failed to fetch reminders: $error'), ); }, ); diff --git a/frontend/appflowy_flutter/lib/workspace/application/settings/ai/local_ai_on_boarding_bloc.dart b/frontend/appflowy_flutter/lib/workspace/application/settings/ai/local_ai_on_boarding_bloc.dart index 7a7d0fecd7..66cfa11bf0 100644 --- a/frontend/appflowy_flutter/lib/workspace/application/settings/ai/local_ai_on_boarding_bloc.dart +++ b/frontend/appflowy_flutter/lib/workspace/application/settings/ai/local_ai_on_boarding_bloc.dart @@ -1,6 +1,7 @@ import 'package:appflowy_backend/dispatch/dispatch.dart'; import 'package:appflowy_backend/log.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; +import 'package:appflowy_backend/protobuf/flowy-user/user_profile.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-user/workspace.pb.dart'; import 'package:appflowy_result/appflowy_result.dart'; import 'package:bloc/bloc.dart'; @@ -10,12 +11,12 @@ part 'local_ai_on_boarding_bloc.freezed.dart'; class LocalAIOnBoardingBloc extends Bloc { - LocalAIOnBoardingBloc(this.workspaceId) + LocalAIOnBoardingBloc(this.userProfile) : super(const LocalAIOnBoardingState()) { _dispatch(); } - final String workspaceId; + final UserProfilePB userProfile; void _dispatch() { on((event, emit) { @@ -44,7 +45,7 @@ class LocalAIOnBoardingBloc } void _loadSubscriptionPlans() { - final payload = UserWorkspaceIdPB()..workspaceId = workspaceId; + final payload = UserWorkspaceIdPB()..workspaceId = userProfile.workspaceId; UserEventGetWorkspaceSubscriptionInfo(payload).send().then((result) { if (!isClosed) { add(LocalAIOnBoardingEvent.didGetSubscriptionPlans(result)); diff --git a/frontend/appflowy_flutter/lib/workspace/application/settings/ai/settings_ai_bloc.dart b/frontend/appflowy_flutter/lib/workspace/application/settings/ai/settings_ai_bloc.dart index d2050637f1..fd07db4d48 100644 --- a/frontend/appflowy_flutter/lib/workspace/application/settings/ai/settings_ai_bloc.dart +++ b/frontend/appflowy_flutter/lib/workspace/application/settings/ai/settings_ai_bloc.dart @@ -1,4 +1,5 @@ import 'package:appflowy/user/application/user_listener.dart'; +import 'package:appflowy/user/application/user_service.dart'; import 'package:appflowy_backend/dispatch/dispatch.dart'; import 'package:appflowy_backend/log.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; @@ -10,14 +11,31 @@ import 'package:freezed_annotation/freezed_annotation.dart'; part 'settings_ai_bloc.freezed.dart'; class SettingsAIBloc extends Bloc { - SettingsAIBloc(this.userProfile) + SettingsAIBloc(this.userProfile, WorkspaceMemberPB? member) : _userListener = UserListener(userProfile: userProfile), - super(SettingsAIState(userProfile: userProfile)) { + _userService = UserBackendService(userId: userProfile.id), + super(SettingsAIState(userProfile: userProfile, member: member)) { _dispatch(); + + if (member == null) { + _userService.getWorkspaceMember().then((result) { + result.fold( + (member) { + if (!isClosed) { + add(SettingsAIEvent.refreshMember(member)); + } + }, + (err) { + Log.error(err); + }, + ); + }); + } } final UserListener _userListener; final UserProfilePB userProfile; + final UserBackendService _userService; @override Future close() async { @@ -62,6 +80,9 @@ class SettingsAIBloc extends Bloc { ), ); }, + refreshMember: (member) { + emit(state.copyWith(member: member)); + }, ); }); } @@ -112,6 +133,7 @@ class SettingsAIEvent with _$SettingsAIEvent { ) = _DidLoadWorkspaceSetting; const factory SettingsAIEvent.toggleAISearch() = _toggleAISearch; + const factory SettingsAIEvent.refreshMember(WorkspaceMemberPB member) = _RefreshMember; const factory SettingsAIEvent.selectModel(AIModelPB model) = _SelectAIModel; @@ -125,6 +147,7 @@ class SettingsAIState with _$SettingsAIState { const factory SettingsAIState({ required UserProfilePB userProfile, UseAISettingPB? aiSettings, + WorkspaceMemberPB? member, @Default(true) bool enableSearchIndexing, }) = _SettingsAIState; } diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/home/desktop_home_screen.dart b/frontend/appflowy_flutter/lib/workspace/presentation/home/desktop_home_screen.dart index f2e1515112..b2f9c89889 100644 --- a/frontend/appflowy_flutter/lib/workspace/presentation/home/desktop_home_screen.dart +++ b/frontend/appflowy_flutter/lib/workspace/presentation/home/desktop_home_screen.dart @@ -71,8 +71,7 @@ class DesktopHomeScreen extends StatelessWidget { key: ValueKey(userProfile.id), providers: [ BlocProvider.value( - value: getIt() - ..add(const ReminderEvent.started()), + value: getIt(), ), BlocProvider.value(value: getIt()), BlocProvider( diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/create_space_popup.dart b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/create_space_popup.dart index d901513d16..88c65a002c 100644 --- a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/create_space_popup.dart +++ b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/create_space_popup.dart @@ -2,6 +2,7 @@ import 'package:appflowy/generated/locale_keys.g.dart'; import 'package:appflowy/workspace/application/sidebar/space/space_bloc.dart'; import 'package:appflowy/workspace/presentation/home/menu/sidebar/space/_extension.dart'; import 'package:appflowy/workspace/presentation/home/menu/sidebar/space/shared_widget.dart'; +import 'package:appflowy/workspace/presentation/home/menu/sidebar/space/space_icon.dart'; import 'package:appflowy/workspace/presentation/home/menu/sidebar/space/space_icon_popup.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flowy_infra_ui/flowy_infra_ui.dart'; @@ -17,7 +18,7 @@ class CreateSpacePopup extends StatefulWidget { class _CreateSpacePopupState extends State { String spaceName = LocaleKeys.space_defaultSpaceName.tr(); - String? spaceIcon = builtInSpaceIcons.first; + String? spaceIcon = kDefaultSpaceIconId; String? spaceIconColor = builtInSpaceColors.first; SpacePermission spacePermission = SpacePermission.publicToAll; @@ -47,6 +48,7 @@ class _CreateSpacePopupState extends State { SizedBox.square( dimension: 56, child: SpaceIconPopup( + onIconChanged: (icon, iconColor) { spaceIcon = icon; spaceIconColor = iconColor; diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/manage_space_popup.dart b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/manage_space_popup.dart index 52f22c5e3d..eb8c54025d 100644 --- a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/manage_space_popup.dart +++ b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/manage_space_popup.dart @@ -99,6 +99,7 @@ class _SpaceNameTextField extends StatelessWidget { SizedBox.square( dimension: 40, child: SpaceIconPopup( + space: space, cornerRadius: 12, icon: space?.spaceIcon, iconColor: space?.spaceIconColor, diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/shared_widget.dart b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/shared_widget.dart index f3bf6309d5..8f97c59515 100644 --- a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/shared_widget.dart +++ b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/shared_widget.dart @@ -496,17 +496,13 @@ class CurrentSpace extends StatelessWidget { final child = Row( mainAxisSize: MainAxisSize.min, children: [ - if (space.spaceIcon != null) ...[ - SpaceIcon( - dimension: 22, - space: space, - svgSize: 12, - cornerRadius: 8.0, - ), - const HSpace(10), - ] else ...[ - const HSpace(2), - ], + SpaceIcon( + dimension: 22, + space: space, + svgSize: 12, + cornerRadius: 8.0, + ), + const HSpace(10), Flexible( child: FlowyText.medium( space.name, diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/sidebar_space_menu.dart b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/sidebar_space_menu.dart index 68cb4b0893..057a636698 100644 --- a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/sidebar_space_menu.dart +++ b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/sidebar_space_menu.dart @@ -87,6 +87,7 @@ class _SidebarSpaceMenuItem extends StatelessWidget { leftIcon: SpaceIcon( dimension: 20, space: space, + svgSize: 12.0, cornerRadius: 6.0, ), leftIconSize: const Size.square(20), diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/space_icon.dart b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/space_icon.dart index 3500085071..f55757fb30 100644 --- a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/space_icon.dart +++ b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/space_icon.dart @@ -1,35 +1,61 @@ import 'package:appflowy/generated/flowy_svgs.g.dart'; +import 'package:appflowy/plugins/document/presentation/editor_plugins/base/string_extension.dart'; +import 'package:appflowy/shared/icon_emoji_picker/icon_picker.dart'; import 'package:appflowy/workspace/application/view/view_ext.dart'; import 'package:appflowy/workspace/presentation/home/menu/sidebar/space/space_icon_popup.dart'; import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart'; +import 'package:flowy_infra_ui/flowy_infra_ui.dart'; import 'package:flutter/material.dart'; class SpaceIcon extends StatelessWidget { const SpaceIcon({ super.key, required this.dimension, + this.textDimension, this.cornerRadius = 0, required this.space, this.svgSize, }); final double dimension; + final double? textDimension; final double cornerRadius; final ViewPB space; final double? svgSize; @override Widget build(BuildContext context) { - final spaceIconColor = space.spaceIconColor; - final color = spaceIconColor != null - ? Color(int.parse(spaceIconColor)) - : Colors.transparent; - final svg = space.buildSpaceIconSvg( - context, - size: svgSize != null ? Size.square(svgSize!) : null, - ); - if (svg == null) { - return const SizedBox.shrink(); + // if space icon is null, use the first character of space name as icon + + final Color color; + final Widget icon; + + if (space.spaceIcon == null) { + final name = space.name.isNotEmpty ? space.name.capitalize()[0] : ''; + icon = FlowyText.medium( + name, + color: Theme.of(context).colorScheme.surface, + fontSize: svgSize, + figmaLineHeight: textDimension ?? dimension, + ); + color = Color(int.parse(builtInSpaceColors.first)); + } else { + final spaceIconColor = space.spaceIconColor; + color = spaceIconColor != null + ? Color(int.parse(spaceIconColor)) + : Colors.transparent; + final svg = space.buildSpaceIconSvg( + context, + size: svgSize != null ? Size.square(svgSize!) : null, + ); + if (svg == null) { + icon = const SizedBox.shrink(); + } else { + icon = + svgSize == null || space.spaceIcon?.contains('space_icon') == true + ? svg + : SizedBox.square(dimension: svgSize!, child: svg); + } } return ClipRRect( @@ -39,16 +65,15 @@ class SpaceIcon extends StatelessWidget { height: dimension, color: color, child: Center( - child: - svgSize == null || space.spaceIcon?.contains('space_icon') == true - ? svg - : SizedBox.square(dimension: svgSize!, child: svg), + child: icon, ), ), ); } } +const kDefaultSpaceIconId = 'interface_essential/home-3'; + class DefaultSpaceIcon extends StatelessWidget { const DefaultSpaceIcon({ super.key, @@ -63,7 +88,25 @@ class DefaultSpaceIcon extends StatelessWidget { @override Widget build(BuildContext context) { - final svg = builtInSpaceIcons.first; + final svgContent = kIconGroups?.findSvgContent( + kDefaultSpaceIconId, + ); + + final Widget svg; + if (svgContent != null) { + svg = FlowySvg.string( + svgContent, + size: Size.square(iconDimension), + color: Theme.of(context).colorScheme.surface, + ); + } else { + svg = FlowySvg( + FlowySvgData('assets/flowy_icons/16x/${builtInSpaceIcons.first}.svg'), + color: Theme.of(context).colorScheme.surface, + size: Size.square(iconDimension), + ); + } + final color = Color(int.parse(builtInSpaceColors.first)); return ClipRRect( borderRadius: BorderRadius.circular(cornerRadius), @@ -71,10 +114,8 @@ class DefaultSpaceIcon extends StatelessWidget { width: dimension, height: dimension, color: color, - child: FlowySvg( - FlowySvgData('assets/flowy_icons/16x/$svg.svg'), - color: Theme.of(context).colorScheme.surface, - size: Size.square(iconDimension), + child: Center( + child: svg, ), ), ); diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/space_icon_popup.dart b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/space_icon_popup.dart index 77f5513e97..fc9e462e9b 100644 --- a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/space_icon_popup.dart +++ b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/space_icon_popup.dart @@ -6,6 +6,7 @@ import 'package:appflowy/shared/icon_emoji_picker/flowy_icon_emoji_picker.dart'; import 'package:appflowy/shared/icon_emoji_picker/icon_picker.dart'; import 'package:appflowy/shared/icon_emoji_picker/tab.dart'; import 'package:appflowy/workspace/presentation/home/menu/sidebar/space/space_icon.dart'; +import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart'; import 'package:appflowy_popover/appflowy_popover.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flowy_infra_ui/flowy_infra_ui.dart'; @@ -40,11 +41,13 @@ class SpaceIconPopup extends StatefulWidget { this.icon, this.iconColor, this.cornerRadius = 16, + this.space, required this.onIconChanged, }); final String? icon; final String? iconColor; + final ViewPB? space; final void Function(String? icon, String? color) onIconChanged; final double cornerRadius; @@ -114,11 +117,20 @@ class _SpaceIconPopupState extends State { builder: (_, value, __) { Widget child; if (value == null) { - child = const DefaultSpaceIcon( - cornerRadius: 16.0, - dimension: 32, - iconDimension: 32, - ); + if (widget.space == null) { + child = DefaultSpaceIcon( + cornerRadius: widget.cornerRadius, + dimension: 32, + iconDimension: 32, + ); + } else { + child = SpaceIcon( + dimension: 32, + space: widget.space!, + svgSize: 24, + cornerRadius: widget.cornerRadius, + ); + } } else if (value.contains('space_icon')) { child = ClipRRect( borderRadius: BorderRadius.circular(widget.cornerRadius), diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/space_more_popup.dart b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/space_more_popup.dart index be827ccfa8..d773e8976f 100644 --- a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/space_more_popup.dart +++ b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/space/space_more_popup.dart @@ -108,7 +108,7 @@ class SpaceMoreActionTypeWrapper extends CustomActionCell { ) { final child = _buildActionButton(context, null); return AppFlowyPopover( - constraints: BoxConstraints.loose(const Size(380, 432)), + constraints: BoxConstraints.loose(const Size(360, 432)), margin: const EdgeInsets.all(0), clickHandler: PopoverClickHandler.gestureDetector, offset: const Offset(0, -40), diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/workspace/_sidebar_workspace_actions.dart b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/workspace/_sidebar_workspace_actions.dart index 1df1b0fe2a..5aaae7eec4 100644 --- a/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/workspace/_sidebar_workspace_actions.dart +++ b/frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/workspace/_sidebar_workspace_actions.dart @@ -85,14 +85,16 @@ class _WorkspaceMoreActionWrapper extends CustomActionCell { BuildContext context, PopoverController controller, ) { - return FlowyButton( - leftIcon: buildLeftIcon(context), + return FlowyIconTextButton( + leftIconBuilder: (onHover) => buildLeftIcon(context, onHover), iconPadding: 10.0, - text: FlowyText.regular( + textBuilder: (onHover) => FlowyText.regular( name, fontSize: 14.0, + figmaLineHeight: 18.0, color: [WorkspaceMoreAction.delete, WorkspaceMoreAction.leave] - .contains(inner) + .contains(inner) && + onHover ? Theme.of(context).colorScheme.error : null, ), @@ -161,12 +163,12 @@ class _WorkspaceMoreActionWrapper extends CustomActionCell { } } - Widget buildLeftIcon(BuildContext context) { + Widget buildLeftIcon(BuildContext context, bool onHover) { switch (inner) { case WorkspaceMoreAction.delete: return FlowySvg( FlowySvgs.delete_s, - color: Theme.of(context).colorScheme.error, + color: onHover ? Theme.of(context).colorScheme.error : null, ); case WorkspaceMoreAction.rename: return const FlowySvg(FlowySvgs.view_item_rename_s); diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/notifications/notification_dialog.dart b/frontend/appflowy_flutter/lib/workspace/presentation/notifications/notification_dialog.dart index 022e6b3876..d0392efb55 100644 --- a/frontend/appflowy_flutter/lib/workspace/presentation/notifications/notification_dialog.dart +++ b/frontend/appflowy_flutter/lib/workspace/presentation/notifications/notification_dialog.dart @@ -1,5 +1,3 @@ -import 'package:flutter/material.dart'; - import 'package:appflowy/startup/startup.dart'; import 'package:appflowy/user/application/notification_filter/notification_filter_bloc.dart'; import 'package:appflowy/user/application/reminder/reminder_bloc.dart'; @@ -11,6 +9,7 @@ import 'package:appflowy/workspace/presentation/notifications/widgets/notificati import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-user/reminder.pb.dart'; import 'package:appflowy_popover/appflowy_popover.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; class NotificationDialog extends StatefulWidget { @@ -64,12 +63,10 @@ class _NotificationDialogState extends State builder: (context, filterState) => BlocBuilder( builder: (context, state) { - final List pastReminders = state.pastReminders - .where((r) => filterState.showUnreadsOnly ? !r.isRead : true) - .sortByScheduledAt(); - - final List upcomingReminders = + final reminders = state.reminders.sortByScheduledAt(); + final upcomingReminders = state.upcomingReminders.sortByScheduledAt(); + final hasUnreads = reminders.any((r) => !r.isRead); return Column( mainAxisSize: MainAxisSize.min, @@ -82,14 +79,14 @@ class _NotificationDialogState extends State controller: _controller, children: [ NotificationsView( - shownReminders: pastReminders, + shownReminders: reminders, reminderBloc: _reminderBloc, views: widget.views, onDelete: _onDelete, onAction: _onAction, onReadChanged: _onReadChanged, actionBar: InboxActionBar( - hasUnreads: state.hasUnreads, + hasUnreads: hasUnreads, showUnreadsOnly: filterState.showUnreadsOnly, ), ), diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/notifications/widgets/notification_button.dart b/frontend/appflowy_flutter/lib/workspace/presentation/notifications/widgets/notification_button.dart index 0fe3fdf75c..433511929f 100644 --- a/frontend/appflowy_flutter/lib/workspace/presentation/notifications/widgets/notification_button.dart +++ b/frontend/appflowy_flutter/lib/workspace/presentation/notifications/widgets/notification_button.dart @@ -1,5 +1,3 @@ -import 'package:flutter/material.dart'; - import 'package:appflowy/generated/flowy_svgs.g.dart'; import 'package:appflowy/generated/locale_keys.g.dart'; import 'package:appflowy/startup/startup.dart'; @@ -11,6 +9,7 @@ import 'package:appflowy_popover/appflowy_popover.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flowy_infra/theme_extension.dart'; import 'package:flowy_infra_ui/flowy_infra_ui.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; class NotificationButton extends StatefulWidget { @@ -23,6 +22,12 @@ class NotificationButton extends StatefulWidget { class _NotificationButtonState extends State { final mutex = PopoverMutex(); + @override + void initState() { + super.initState(); + getIt().add(const ReminderEvent.started()); + } + @override void dispose() { mutex.dispose(); @@ -56,8 +61,10 @@ class _NotificationButtonState extends State { child: FlowyButton( useIntrinsicWidth: true, margin: EdgeInsets.zero, - text: - _buildNotificationIcon(context, state.hasUnreads), + text: _buildNotificationIcon( + context, + state.hasUnreads, + ), ), ), ), diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/notifications/widgets/notification_item.dart b/frontend/appflowy_flutter/lib/workspace/presentation/notifications/widgets/notification_item.dart index fed0bf4390..029f6e1145 100644 --- a/frontend/appflowy_flutter/lib/workspace/presentation/notifications/widgets/notification_item.dart +++ b/frontend/appflowy_flutter/lib/workspace/presentation/notifications/widgets/notification_item.dart @@ -1,10 +1,10 @@ import 'package:appflowy/generated/flowy_svgs.g.dart'; import 'package:appflowy/generated/locale_keys.g.dart'; -import 'package:appflowy/plugins/document/presentation/editor_configuration.dart'; -import 'package:appflowy/plugins/document/presentation/editor_style.dart'; +import 'package:appflowy/mobile/presentation/notifications/widgets/widgets.dart'; import 'package:appflowy/workspace/application/settings/appearance/appearance_cubit.dart'; import 'package:appflowy/workspace/application/settings/date_time/date_format_ext.dart'; import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart'; +import 'package:appflowy_backend/protobuf/flowy-user/protobuf.dart'; import 'package:appflowy_editor/appflowy_editor.dart'; import 'package:appflowy_popover/appflowy_popover.dart'; import 'package:easy_localization/easy_localization.dart'; @@ -18,7 +18,7 @@ import 'package:provider/provider.dart'; class NotificationItem extends StatefulWidget { const NotificationItem({ super.key, - required this.reminderId, + required this.reminder, required this.title, required this.scheduled, required this.body, @@ -32,7 +32,7 @@ class NotificationItem extends StatefulWidget { this.view, }); - final String reminderId; + final ReminderPB reminder; final String title; final Int64 scheduled; final String body; @@ -169,6 +169,7 @@ class _NotificationItemState extends State { ), child: _NotificationContent( block: widget.block, + reminder: widget.reminder, body: widget.body, ), ), @@ -214,10 +215,12 @@ class _NotificationItemState extends State { class _NotificationContent extends StatelessWidget { const _NotificationContent({ required this.body, + required this.reminder, required this.block, }); final String body; + final ReminderPB reminder; final Future? block; @override @@ -229,29 +232,10 @@ class _NotificationContent extends StatelessWidget { return FlowyText.regular(body, maxLines: 4); } - final editorState = EditorState( - document: Document(root: snapshot.data!), - ); - - final styleCustomizer = EditorStyleCustomizer( - context: context, - padding: EdgeInsets.zero, - ); - - return Transform.scale( - scale: .9, - alignment: Alignment.centerLeft, - child: AppFlowyEditor( - editorState: editorState, - editorStyle: styleCustomizer.style(), - editable: false, - shrinkWrap: true, - blockComponentBuilders: getEditorBuilderMap( - context: context, - editorState: editorState, - styleCustomizer: styleCustomizer, - editable: false, - ), + return IntrinsicHeight( + child: NotificationDocumentContent( + nodes: [snapshot.data!], + reminder: reminder, ), ); }, diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/notifications/widgets/notification_view.dart b/frontend/appflowy_flutter/lib/workspace/presentation/notifications/widgets/notification_view.dart index 42e5d50bfd..645be8b055 100644 --- a/frontend/appflowy_flutter/lib/workspace/presentation/notifications/widgets/notification_view.dart +++ b/frontend/appflowy_flutter/lib/workspace/presentation/notifications/widgets/notification_view.dart @@ -76,7 +76,7 @@ class NotificationsView extends StatelessWidget { final view = views.findView(reminder.objectId); return NotificationItem( - reminderId: reminder.id, + reminder: reminder, key: ValueKey(reminder.id), title: reminder.title, scheduled: reminder.scheduledAt, diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/settings/pages/setting_ai_view/settings_ai_view.dart b/frontend/appflowy_flutter/lib/workspace/presentation/settings/pages/setting_ai_view/settings_ai_view.dart index 2183c37c08..79f1de6da0 100644 --- a/frontend/appflowy_flutter/lib/workspace/presentation/settings/pages/setting_ai_view/settings_ai_view.dart +++ b/frontend/appflowy_flutter/lib/workspace/presentation/settings/pages/setting_ai_view/settings_ai_view.dart @@ -1,4 +1,5 @@ import 'package:appflowy/generated/flowy_svgs.g.dart'; +import 'package:appflowy/shared/af_role_pb_extension.dart'; import 'package:appflowy/shared/feature_flags.dart'; import 'package:appflowy/workspace/application/settings/ai/local_ai_on_boarding_bloc.dart'; import 'package:appflowy/workspace/application/settings/settings_dialog_bloc.dart'; @@ -37,15 +38,20 @@ class AIFeatureOnlySupportedWhenUsingAppFlowyCloud extends StatelessWidget { } class SettingsAIView extends StatelessWidget { - const SettingsAIView({super.key, required this.userProfile}); + const SettingsAIView({ + super.key, + required this.userProfile, + required this.member, + }); final UserProfilePB userProfile; + final WorkspaceMemberPB? member; @override Widget build(BuildContext context) { return BlocProvider( - create: (_) => - SettingsAIBloc(userProfile)..add(const SettingsAIEvent.started()), + create: (_) => SettingsAIBloc(userProfile, member) + ..add(const SettingsAIEvent.started()), child: BlocBuilder( builder: (context, state) { final children = [ @@ -53,11 +59,15 @@ class SettingsAIView extends StatelessWidget { ]; children.add(const _AISearchToggle(value: false)); - children.add( - _LocalAIOnBoarding( - workspaceId: userProfile.workspaceId, - ), - ); + + if (state.member != null) { + children.add( + _LocalAIOnBoarding( + userProfile: userProfile, + member: state.member!, + ), + ); + } return SettingsBody( title: LocaleKeys.settings_aiPage_title.tr(), @@ -116,8 +126,12 @@ class _AISearchToggle extends StatelessWidget { // ignore: unused_element class _LocalAIOnBoarding extends StatelessWidget { - const _LocalAIOnBoarding({required this.workspaceId}); - final String workspaceId; + const _LocalAIOnBoarding({ + required this.userProfile, + required this.member, + }); + final UserProfilePB userProfile; + final WorkspaceMemberPB member; @override Widget build(BuildContext context) { @@ -125,7 +139,7 @@ class _LocalAIOnBoarding extends StatelessWidget { return BillingGateGuard( builder: (context) { return BlocProvider( - create: (context) => LocalAIOnBoardingBloc(workspaceId) + create: (context) => LocalAIOnBoardingBloc(userProfile) ..add(const LocalAIOnBoardingEvent.started()), child: BlocBuilder( builder: (context, state) { @@ -133,16 +147,20 @@ class _LocalAIOnBoarding extends StatelessWidget { if (kDebugMode || state.isPurchaseAILocal) { return const LocalAISetting(); } else { - // Show the upgrade to AI Local plan button if the user has not purchased the AI Local plan - return _UpgradeToAILocalPlan( - onTap: () { - context.read().add( - const SettingsDialogEvent.setSelectedPage( - SettingsPage.plan, - ), - ); - }, - ); + if (member.role.isOwner) { + // Show the upgrade to AI Local plan button if the user has not purchased the AI Local plan + return _UpgradeToAILocalPlan( + onTap: () { + context.read().add( + const SettingsDialogEvent.setSelectedPage( + SettingsPage.plan, + ), + ); + }, + ); + } else { + return const _AskOwnerUpgradeToLocalAI(); + } } }, ), @@ -155,6 +173,18 @@ class _LocalAIOnBoarding extends StatelessWidget { } } +class _AskOwnerUpgradeToLocalAI extends StatelessWidget { + const _AskOwnerUpgradeToLocalAI(); + + @override + Widget build(BuildContext context) { + return FlowyText( + LocaleKeys.sideBar_askOwnerToUpgradeToLocalAI.tr(), + color: AFThemeExtension.of(context).strongText, + ); + } +} + class _UpgradeToAILocalPlan extends StatefulWidget { const _UpgradeToAILocalPlan({required this.onTap}); diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/settings/settings_dialog.dart b/frontend/appflowy_flutter/lib/workspace/presentation/settings/settings_dialog.dart index 6f6d605673..5a3905ed21 100644 --- a/frontend/appflowy_flutter/lib/workspace/presentation/settings/settings_dialog.dart +++ b/frontend/appflowy_flutter/lib/workspace/presentation/settings/settings_dialog.dart @@ -120,7 +120,7 @@ class SettingsDialog extends StatelessWidget { return const SettingsShortcutsView(); case SettingsPage.ai: if (user.authenticator == AuthenticatorPB.AppFlowyCloud) { - return SettingsAIView(userProfile: user); + return SettingsAIView(userProfile: user, member: member); } else { return const AIFeatureOnlySupportedWhenUsingAppFlowyCloud(); } diff --git a/frontend/appflowy_flutter/packages/flowy_infra_ui/lib/widget/flowy_tooltip.dart b/frontend/appflowy_flutter/packages/flowy_infra_ui/lib/widget/flowy_tooltip.dart index 960b8b3ad4..da3f804c8d 100644 --- a/frontend/appflowy_flutter/packages/flowy_infra_ui/lib/widget/flowy_tooltip.dart +++ b/frontend/appflowy_flutter/packages/flowy_infra_ui/lib/widget/flowy_tooltip.dart @@ -10,6 +10,7 @@ class FlowyTooltip extends StatelessWidget { this.preferBelow, this.showDuration, this.margin, + this.verticalOffset, this.child, }); @@ -19,6 +20,7 @@ class FlowyTooltip extends StatelessWidget { final Duration? showDuration; final EdgeInsetsGeometry? margin; final Widget? child; + final double? verticalOffset; @override Widget build(BuildContext context) { @@ -28,16 +30,14 @@ class FlowyTooltip extends StatelessWidget { return Tooltip( margin: margin, - verticalOffset: 16.0, - padding: const EdgeInsets.only( - left: 12.0, - right: 12.0, - top: 5.0, - bottom: 8.0, + verticalOffset: verticalOffset ?? 16.0, + padding: const EdgeInsets.symmetric( + horizontal: 12.0, + vertical: 8.0, ), decoration: BoxDecoration( color: context.tooltipBackgroundColor(), - borderRadius: BorderRadius.circular(12.0), + borderRadius: BorderRadius.circular(10.0), ), waitDuration: _tooltipWaitDuration, message: message, @@ -50,8 +50,8 @@ class FlowyTooltip extends StatelessWidget { } extension FlowyToolTipExtension on BuildContext { - double tooltipFontSize() => 13.0; - double tooltipHeight() => 18.0 / tooltipFontSize(); + double tooltipFontSize() => 14.0; + double tooltipHeight() => 20.0 / tooltipFontSize(); Color tooltipFontColor() => Theme.of(this).brightness == Brightness.light ? Colors.white : Colors.black; @@ -62,6 +62,7 @@ extension FlowyToolTipExtension on BuildContext { fontSize: tooltipFontSize(), fontWeight: FontWeight.w400, height: tooltipHeight(), + leadingDistribution: TextLeadingDistribution.even, ); } diff --git a/frontend/appflowy_flutter/pubspec.lock b/frontend/appflowy_flutter/pubspec.lock index 4827c94bbc..10f14ba563 100644 --- a/frontend/appflowy_flutter/pubspec.lock +++ b/frontend/appflowy_flutter/pubspec.lock @@ -53,8 +53,8 @@ packages: dependency: "direct main" description: path: "." - ref: c064543 - resolved-ref: c064543e0e40f862f1db2db36725d48465a8aea5 + ref: "4536488faf458ab45e304c1715850d4d1ae517ee" + resolved-ref: "4536488faf458ab45e304c1715850d4d1ae517ee" url: "https://github.com/AppFlowy-IO/appflowy-editor.git" source: git version: "3.1.0" diff --git a/frontend/appflowy_flutter/pubspec.yaml b/frontend/appflowy_flutter/pubspec.yaml index 17c37f3287..928766a845 100644 --- a/frontend/appflowy_flutter/pubspec.yaml +++ b/frontend/appflowy_flutter/pubspec.yaml @@ -199,7 +199,7 @@ dependency_overrides: appflowy_editor: git: url: https://github.com/AppFlowy-IO/appflowy-editor.git - ref: "c064543" + ref: "4536488faf458ab45e304c1715850d4d1ae517ee" appflowy_editor_plugins: git: diff --git a/frontend/appflowy_tauri/src-tauri/Cargo.lock b/frontend/appflowy_tauri/src-tauri/Cargo.lock index a95a7d2bd3..2f5b138d61 100644 --- a/frontend/appflowy_tauri/src-tauri/Cargo.lock +++ b/frontend/appflowy_tauri/src-tauri/Cargo.lock @@ -172,7 +172,7 @@ checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "app-error" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "bincode", @@ -192,7 +192,7 @@ dependencies = [ [[package]] name = "appflowy-ai-client" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "bytes", @@ -423,7 +423,7 @@ dependencies = [ "bitflags 2.4.0", "cexpr", "clang-sys", - "itertools 0.12.1", + "itertools 0.10.5", "lazy_static", "lazycell", "proc-macro2", @@ -826,7 +826,7 @@ dependencies = [ [[package]] name = "client-api" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "again", "anyhow", @@ -876,7 +876,7 @@ dependencies = [ [[package]] name = "client-api-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "collab-entity", "collab-rt-entity", @@ -888,7 +888,7 @@ dependencies = [ [[package]] name = "client-websocket" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "futures-channel", "futures-util", @@ -1132,7 +1132,7 @@ dependencies = [ [[package]] name = "collab-rt-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "bincode", @@ -1157,7 +1157,7 @@ dependencies = [ [[package]] name = "collab-rt-protocol" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "async-trait", @@ -1532,7 +1532,7 @@ checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" [[package]] name = "database-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "app-error", @@ -3051,7 +3051,7 @@ dependencies = [ [[package]] name = "gotrue" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "futures-util", @@ -3068,7 +3068,7 @@ dependencies = [ [[package]] name = "gotrue-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "app-error", @@ -3500,7 +3500,7 @@ dependencies = [ [[package]] name = "infra" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "bytes", @@ -6098,7 +6098,7 @@ dependencies = [ [[package]] name = "shared-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "app-error", diff --git a/frontend/appflowy_tauri/src-tauri/Cargo.toml b/frontend/appflowy_tauri/src-tauri/Cargo.toml index fcdc5490e0..103ea91b32 100644 --- a/frontend/appflowy_tauri/src-tauri/Cargo.toml +++ b/frontend/appflowy_tauri/src-tauri/Cargo.toml @@ -53,7 +53,7 @@ collab-user = { version = "0.2" } # Run the script: # scripts/tool/update_client_api_rev.sh new_rev_id # ⚠️⚠️⚠️️ -client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "a371912c61d79fa946ec78f0cb852fdd7d391356" } +client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "30c7acce96f1a7b8865c05e70b6e525eaa286b37" } [dependencies] serde_json.workspace = true diff --git a/frontend/appflowy_web_app/deploy/nginx.conf b/frontend/appflowy_web_app/deploy/nginx.conf index 28b3d7fe49..2ae55fae7b 100644 --- a/frontend/appflowy_web_app/deploy/nginx.conf +++ b/frontend/appflowy_web_app/deploy/nginx.conf @@ -75,6 +75,12 @@ http { access_log off; } + location /af_icons/ { + root /usr/share/nginx/html; + expires 30d; + access_log off; + } + error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; diff --git a/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-chip-spark.svg b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-chip-spark.svg new file mode 100644 index 0000000000..57bb666ba9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-chip-spark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-cloud-spark.svg b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-cloud-spark.svg new file mode 100644 index 0000000000..385aaf5a03 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-cloud-spark.svg @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-edit-spark.svg b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-edit-spark.svg new file mode 100644 index 0000000000..96fddfc558 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-edit-spark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-email-generator-spark.svg b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-email-generator-spark.svg new file mode 100644 index 0000000000..8238d69442 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-email-generator-spark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-gaming-spark.svg b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-gaming-spark.svg new file mode 100644 index 0000000000..a74a6eabb0 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-gaming-spark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-generate-landscape-image-spark.svg b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-generate-landscape-image-spark.svg new file mode 100644 index 0000000000..0759443d47 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-generate-landscape-image-spark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-generate-music-spark.svg b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-generate-music-spark.svg new file mode 100644 index 0000000000..98adcabbe6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-generate-music-spark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-generate-portrait-image-spark.svg b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-generate-portrait-image-spark.svg new file mode 100644 index 0000000000..ebd118dd62 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-generate-portrait-image-spark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-generate-variation-spark.svg b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-generate-variation-spark.svg new file mode 100644 index 0000000000..c4400c215a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-generate-variation-spark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-navigation-spark.svg b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-navigation-spark.svg new file mode 100644 index 0000000000..943e8354bd --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-navigation-spark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-network-spark.svg b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-network-spark.svg new file mode 100644 index 0000000000..ec21b6dc52 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-network-spark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-prompt-spark.svg b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-prompt-spark.svg new file mode 100644 index 0000000000..ecfcb6ad63 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-prompt-spark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-redo-spark.svg b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-redo-spark.svg new file mode 100644 index 0000000000..d67e5e3f1f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-redo-spark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-science-spark.svg b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-science-spark.svg new file mode 100644 index 0000000000..e9a0af9957 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-science-spark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-settings-spark.svg b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-settings-spark.svg new file mode 100644 index 0000000000..c0a1d6588b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-settings-spark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-technology-spark.svg b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-technology-spark.svg new file mode 100644 index 0000000000..27b27f152a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-technology-spark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-upscale-spark.svg b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-upscale-spark.svg new file mode 100644 index 0000000000..91975ee23c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-upscale-spark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-vehicle-spark-1.svg b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-vehicle-spark-1.svg new file mode 100644 index 0000000000..48f3eda8dd --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/ai-vehicle-spark-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/artificial-intelligence-spark.svg b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/artificial-intelligence-spark.svg new file mode 100644 index 0000000000..c4c7907937 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/artificial_intelligence/artificial-intelligence-spark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/VPN-connection.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/VPN-connection.svg new file mode 100644 index 0000000000..c8f7a2fcb0 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/VPN-connection.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/adobe.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/adobe.svg new file mode 100644 index 0000000000..877de4e094 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/adobe.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/alt.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/alt.svg new file mode 100644 index 0000000000..6e08a0f9a3 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/alt.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/amazon.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/amazon.svg new file mode 100644 index 0000000000..d02e8a27c2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/amazon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/android.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/android.svg new file mode 100644 index 0000000000..acc983a1a7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/android.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/app-store.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/app-store.svg new file mode 100644 index 0000000000..59f17cc197 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/app-store.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/apple.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/apple.svg new file mode 100644 index 0000000000..94bfcf6cec --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/apple.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/asterisk-1.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/asterisk-1.svg new file mode 100644 index 0000000000..c6b49a655d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/asterisk-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/battery-alert-1.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/battery-alert-1.svg new file mode 100644 index 0000000000..dbfd40fefb --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/battery-alert-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/battery-charging.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/battery-charging.svg new file mode 100644 index 0000000000..22aa568e4b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/battery-charging.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/battery-empty-1.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/battery-empty-1.svg new file mode 100644 index 0000000000..d64921afe2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/battery-empty-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/battery-empty-2.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/battery-empty-2.svg new file mode 100644 index 0000000000..d7bac48cc8 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/battery-empty-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/battery-full-1.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/battery-full-1.svg new file mode 100644 index 0000000000..4c7e68f5b5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/battery-full-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/battery-low-1.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/battery-low-1.svg new file mode 100644 index 0000000000..6524eb3300 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/battery-low-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/battery-medium-1.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/battery-medium-1.svg new file mode 100644 index 0000000000..4620aa3da4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/battery-medium-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/bluetooth-disabled.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/bluetooth-disabled.svg new file mode 100644 index 0000000000..47487db565 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/bluetooth-disabled.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/bluetooth-searching.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/bluetooth-searching.svg new file mode 100644 index 0000000000..4535898788 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/bluetooth-searching.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/bluetooth.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/bluetooth.svg new file mode 100644 index 0000000000..281960065f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/bluetooth.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/browser-wifi.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/browser-wifi.svg new file mode 100644 index 0000000000..a81eccedf2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/browser-wifi.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/chrome.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/chrome.svg new file mode 100644 index 0000000000..56fc7af710 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/chrome.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/command.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/command.svg new file mode 100644 index 0000000000..367a6e6117 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/command.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/computer-chip-1.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/computer-chip-1.svg new file mode 100644 index 0000000000..2a70e75274 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/computer-chip-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/computer-chip-2.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/computer-chip-2.svg new file mode 100644 index 0000000000..0ef3150bec --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/computer-chip-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/computer-pc-desktop.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/computer-pc-desktop.svg new file mode 100644 index 0000000000..98bea05196 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/computer-pc-desktop.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/controller-1.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/controller-1.svg new file mode 100644 index 0000000000..bf7bab0923 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/controller-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/controller-wireless.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/controller-wireless.svg new file mode 100644 index 0000000000..53045de283 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/controller-wireless.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/controller.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/controller.svg new file mode 100644 index 0000000000..87ba8122db --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/controller.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/cursor-click.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/cursor-click.svg new file mode 100644 index 0000000000..2ca4ede8d0 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/cursor-click.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/cyborg-2.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/cyborg-2.svg new file mode 100644 index 0000000000..f90dbd9ce3 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/cyborg-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/cyborg.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/cyborg.svg new file mode 100644 index 0000000000..cbdb10ea87 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/cyborg.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/database-check.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/database-check.svg new file mode 100644 index 0000000000..462f928903 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/database-check.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/database-lock.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/database-lock.svg new file mode 100644 index 0000000000..60ee0c76ba --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/database-lock.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/database-refresh.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/database-refresh.svg new file mode 100644 index 0000000000..0aeb96c499 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/database-refresh.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/database-remove.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/database-remove.svg new file mode 100644 index 0000000000..d4e9971017 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/database-remove.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/database-server-1.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/database-server-1.svg new file mode 100644 index 0000000000..0ca3030d20 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/database-server-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/database-server-2.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/database-server-2.svg new file mode 100644 index 0000000000..15196de131 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/database-server-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/database-setting.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/database-setting.svg new file mode 100644 index 0000000000..ec6b34e6c1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/database-setting.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/database-subtract-2-raid-storage-code-disk-programming-database-array-hard-disc-minus.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/database-subtract-2-raid-storage-code-disk-programming-database-array-hard-disc-minus.svg new file mode 100644 index 0000000000..e0c0e75c52 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/database-subtract-2-raid-storage-code-disk-programming-database-array-hard-disc-minus.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/database.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/database.svg new file mode 100644 index 0000000000..31f57ca895 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/database.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/delete-keyboard.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/delete-keyboard.svg new file mode 100644 index 0000000000..cb25e3d0b7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/delete-keyboard.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-chat.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-chat.svg new file mode 100644 index 0000000000..774d3464f0 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-chat.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-check.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-check.svg new file mode 100644 index 0000000000..3f2f30e2e8 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-check.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-code.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-code.svg new file mode 100644 index 0000000000..a4f0873ffc --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-code.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-delete.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-delete.svg new file mode 100644 index 0000000000..45038bb01a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-delete.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-dollar.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-dollar.svg new file mode 100644 index 0000000000..161a456ba0 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-dollar.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-emoji.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-emoji.svg new file mode 100644 index 0000000000..dd4cadfd51 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-emoji.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-favorite-star.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-favorite-star.svg new file mode 100644 index 0000000000..276cc7833e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-favorite-star.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-game.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-game.svg new file mode 100644 index 0000000000..fa98bc4d46 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-game.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-help.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-help.svg new file mode 100644 index 0000000000..d651603e71 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/desktop-help.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/device-database-encryption-1.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/device-database-encryption-1.svg new file mode 100644 index 0000000000..230e5f79a1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/device-database-encryption-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/discord.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/discord.svg new file mode 100644 index 0000000000..2cb14a8e6c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/discord.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/drone.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/drone.svg new file mode 100644 index 0000000000..8ad4a4f775 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/drone.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/dropbox.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/dropbox.svg new file mode 100644 index 0000000000..89f0cf0b8e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/dropbox.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/eject.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/eject.svg new file mode 100644 index 0000000000..acea3c2839 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/eject.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/electric-cord-1.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/electric-cord-1.svg new file mode 100644 index 0000000000..ef4bae5915 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/electric-cord-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/electric-cord-3.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/electric-cord-3.svg new file mode 100644 index 0000000000..59a85fabda --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/electric-cord-3.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/facebook-1.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/facebook-1.svg new file mode 100644 index 0000000000..7687d0331a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/facebook-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/figma.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/figma.svg new file mode 100644 index 0000000000..316aacd34e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/figma.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/floppy-disk.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/floppy-disk.svg new file mode 100644 index 0000000000..be1351ba03 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/floppy-disk.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/gmail.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/gmail.svg new file mode 100644 index 0000000000..ce9a3c7d36 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/gmail.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/google-drive.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/google-drive.svg new file mode 100644 index 0000000000..521fe55ad8 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/google-drive.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/google.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/google.svg new file mode 100644 index 0000000000..624af07bbb --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/google.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/hand-held-tablet-drawing.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/hand-held-tablet-drawing.svg new file mode 100644 index 0000000000..c9117d6916 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/hand-held-tablet-drawing.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/hand-held-tablet-writing.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/hand-held-tablet-writing.svg new file mode 100644 index 0000000000..d619e9d69a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/hand-held-tablet-writing.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/hand-held.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/hand-held.svg new file mode 100644 index 0000000000..2cff3d5e04 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/hand-held.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/hard-disk.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/hard-disk.svg new file mode 100644 index 0000000000..46a25c5d5a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/hard-disk.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/hard-drive-1.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/hard-drive-1.svg new file mode 100644 index 0000000000..929887c741 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/hard-drive-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/instagram.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/instagram.svg new file mode 100644 index 0000000000..2a0750b273 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/instagram.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/keyboard-virtual.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/keyboard-virtual.svg new file mode 100644 index 0000000000..914dddf994 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/keyboard-virtual.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/keyboard-wireless-2.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/keyboard-wireless-2.svg new file mode 100644 index 0000000000..c3fb38cc92 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/keyboard-wireless-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/keyboard.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/keyboard.svg new file mode 100644 index 0000000000..9a32238860 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/keyboard.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/laptop-charging.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/laptop-charging.svg new file mode 100644 index 0000000000..bbc233360c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/laptop-charging.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/linkedin.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/linkedin.svg new file mode 100644 index 0000000000..6ed8fd3d8c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/linkedin.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/local-storage-folder.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/local-storage-folder.svg new file mode 100644 index 0000000000..cb0673ab60 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/local-storage-folder.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/meta.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/meta.svg new file mode 100644 index 0000000000..d0937137b6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/meta.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/mouse-wireless-1.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/mouse-wireless-1.svg new file mode 100644 index 0000000000..697fb76677 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/mouse-wireless-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/mouse-wireless.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/mouse-wireless.svg new file mode 100644 index 0000000000..a2c554d6fb --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/mouse-wireless.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/mouse.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/mouse.svg new file mode 100644 index 0000000000..972f69c52f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/mouse.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/netflix.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/netflix.svg new file mode 100644 index 0000000000..6691a31086 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/netflix.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/network.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/network.svg new file mode 100644 index 0000000000..d33f91d839 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/network.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/next.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/next.svg new file mode 100644 index 0000000000..1c68f75e7e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/next.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/paypal.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/paypal.svg new file mode 100644 index 0000000000..e366f8e86e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/paypal.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/play-store.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/play-store.svg new file mode 100644 index 0000000000..c84f1ca4c1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/play-store.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/printer.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/printer.svg new file mode 100644 index 0000000000..79eefa06a4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/printer.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/return-2.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/return-2.svg new file mode 100644 index 0000000000..45666d72b4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/return-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/screen-1.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/screen-1.svg new file mode 100644 index 0000000000..e5007b7f5b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/screen-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/screen-2.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/screen-2.svg new file mode 100644 index 0000000000..4b87d934f4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/screen-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/screen-curve.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/screen-curve.svg new file mode 100644 index 0000000000..dc6418c205 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/screen-curve.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/screensaver-monitor-wallpaper.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/screensaver-monitor-wallpaper.svg new file mode 100644 index 0000000000..cc0431f192 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/screensaver-monitor-wallpaper.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/shift.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/shift.svg new file mode 100644 index 0000000000..3dfc9de387 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/shift.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/shredder.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/shredder.svg new file mode 100644 index 0000000000..f6c9f4bffa --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/shredder.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/signal-loading.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/signal-loading.svg new file mode 100644 index 0000000000..d04c5d1c44 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/signal-loading.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/slack.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/slack.svg new file mode 100644 index 0000000000..266a0018c4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/slack.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/spotify.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/spotify.svg new file mode 100644 index 0000000000..f0f0365ae8 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/spotify.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/telegram.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/telegram.svg new file mode 100644 index 0000000000..4bccbe1779 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/telegram.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/tiktok.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/tiktok.svg new file mode 100644 index 0000000000..8f03d36c6b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/tiktok.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/tinder.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/tinder.svg new file mode 100644 index 0000000000..ca0e251a7f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/tinder.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/twitter.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/twitter.svg new file mode 100644 index 0000000000..f8e13c447c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/twitter.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/usb-drive.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/usb-drive.svg new file mode 100644 index 0000000000..417555a5c3 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/usb-drive.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/virtual-reality.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/virtual-reality.svg new file mode 100644 index 0000000000..6521aa7661 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/virtual-reality.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/voice-mail-off.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/voice-mail-off.svg new file mode 100644 index 0000000000..175d036b30 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/voice-mail-off.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/voice-mail.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/voice-mail.svg new file mode 100644 index 0000000000..78d4bd13b5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/voice-mail.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/watch-1.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/watch-1.svg new file mode 100644 index 0000000000..54039f5b8e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/watch-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/watch-2.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/watch-2.svg new file mode 100644 index 0000000000..87f6e84bf8 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/watch-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/watch-circle-charging.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/watch-circle-charging.svg new file mode 100644 index 0000000000..95bf9a6a19 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/watch-circle-charging.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/watch-circle-heartbeat-monitor-1.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/watch-circle-heartbeat-monitor-1.svg new file mode 100644 index 0000000000..7e0a9419ed --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/watch-circle-heartbeat-monitor-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/watch-circle-heartbeat-monitor-2.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/watch-circle-heartbeat-monitor-2.svg new file mode 100644 index 0000000000..575a4cdaf1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/watch-circle-heartbeat-monitor-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/watch-circle-menu.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/watch-circle-menu.svg new file mode 100644 index 0000000000..f79637bcd5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/watch-circle-menu.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/watch-circle-time.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/watch-circle-time.svg new file mode 100644 index 0000000000..7b3145988d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/watch-circle-time.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/webcam-video-circle.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/webcam-video-circle.svg new file mode 100644 index 0000000000..d583495165 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/webcam-video-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/webcam-video-off.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/webcam-video-off.svg new file mode 100644 index 0000000000..9750416e99 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/webcam-video-off.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/webcam-video.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/webcam-video.svg new file mode 100644 index 0000000000..30407900c1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/webcam-video.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/webcam.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/webcam.svg new file mode 100644 index 0000000000..67007be1ac --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/webcam.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/whatsapp.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/whatsapp.svg new file mode 100644 index 0000000000..bb7da75eb6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/whatsapp.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/wifi-antenna.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/wifi-antenna.svg new file mode 100644 index 0000000000..b41ae562a4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/wifi-antenna.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/wifi-disabled.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/wifi-disabled.svg new file mode 100644 index 0000000000..a561d55e84 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/wifi-disabled.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/wifi-horizontal.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/wifi-horizontal.svg new file mode 100644 index 0000000000..9f0f3f20a6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/wifi-horizontal.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/wifi-router.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/wifi-router.svg new file mode 100644 index 0000000000..d7d9490b1a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/wifi-router.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/wifi.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/wifi.svg new file mode 100644 index 0000000000..c6ebd0432c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/wifi.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/computer_devices/windows.svg b/frontend/appflowy_web_app/public/af_icons/computer_devices/windows.svg new file mode 100644 index 0000000000..b1923cc5f9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/computer_devices/windows.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/christian-cross-1.svg b/frontend/appflowy_web_app/public/af_icons/culture/christian-cross-1.svg new file mode 100644 index 0000000000..8dea5f0109 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/christian-cross-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/christian-cross-2.svg b/frontend/appflowy_web_app/public/af_icons/culture/christian-cross-2.svg new file mode 100644 index 0000000000..4ac9b8ede7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/christian-cross-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/christianity.svg b/frontend/appflowy_web_app/public/af_icons/culture/christianity.svg new file mode 100644 index 0000000000..1a083b5329 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/christianity.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/dhammajak.svg b/frontend/appflowy_web_app/public/af_icons/culture/dhammajak.svg new file mode 100644 index 0000000000..00ad062081 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/dhammajak.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/hexagram.svg b/frontend/appflowy_web_app/public/af_icons/culture/hexagram.svg new file mode 100644 index 0000000000..e9a5fbe428 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/hexagram.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/hinduism.svg b/frontend/appflowy_web_app/public/af_icons/culture/hinduism.svg new file mode 100644 index 0000000000..cca8164592 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/hinduism.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/islam.svg b/frontend/appflowy_web_app/public/af_icons/culture/islam.svg new file mode 100644 index 0000000000..c2af2b380e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/islam.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/news-paper.svg b/frontend/appflowy_web_app/public/af_icons/culture/news-paper.svg new file mode 100644 index 0000000000..24d109d27d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/news-paper.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/peace-symbol.svg b/frontend/appflowy_web_app/public/af_icons/culture/peace-symbol.svg new file mode 100644 index 0000000000..0249f8402e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/peace-symbol.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/politics-compaign.svg b/frontend/appflowy_web_app/public/af_icons/culture/politics-compaign.svg new file mode 100644 index 0000000000..2333d4f883 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/politics-compaign.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/politics-speech.svg b/frontend/appflowy_web_app/public/af_icons/culture/politics-speech.svg new file mode 100644 index 0000000000..e199c705cb --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/politics-speech.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/politics-vote-2.svg b/frontend/appflowy_web_app/public/af_icons/culture/politics-vote-2.svg new file mode 100644 index 0000000000..846d1522e9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/politics-vote-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/ticket-1.svg b/frontend/appflowy_web_app/public/af_icons/culture/ticket-1.svg new file mode 100644 index 0000000000..67ecf10328 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/ticket-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/tickets.svg b/frontend/appflowy_web_app/public/af_icons/culture/tickets.svg new file mode 100644 index 0000000000..e06e36633f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/tickets.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/yin-yang-symbol.svg b/frontend/appflowy_web_app/public/af_icons/culture/yin-yang-symbol.svg new file mode 100644 index 0000000000..e645e68433 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/yin-yang-symbol.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/zodiac-1.svg b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-1.svg new file mode 100644 index 0000000000..721204e5e4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/zodiac-10.svg b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-10.svg new file mode 100644 index 0000000000..4fdf248b38 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-10.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/zodiac-11.svg b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-11.svg new file mode 100644 index 0000000000..447b9c56c9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-11.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/zodiac-12.svg b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-12.svg new file mode 100644 index 0000000000..fb2b1cb991 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-12.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/zodiac-2.svg b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-2.svg new file mode 100644 index 0000000000..d4425722d9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/zodiac-3.svg b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-3.svg new file mode 100644 index 0000000000..0208aea702 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-3.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/zodiac-4.svg b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-4.svg new file mode 100644 index 0000000000..0469f30ae0 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-4.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/zodiac-5.svg b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-5.svg new file mode 100644 index 0000000000..218ba4a391 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-5.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/zodiac-6.svg b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-6.svg new file mode 100644 index 0000000000..f02c49ee73 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-6.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/zodiac-7.svg b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-7.svg new file mode 100644 index 0000000000..b9de613da2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-7.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/zodiac-8.svg b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-8.svg new file mode 100644 index 0000000000..646ba98ea8 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-8.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/culture/zodiac-9.svg b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-9.svg new file mode 100644 index 0000000000..062bf1140f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/culture/zodiac-9.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/balloon.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/balloon.svg new file mode 100644 index 0000000000..328aaaaaf1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/balloon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/bow.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/bow.svg new file mode 100644 index 0000000000..2864709ca8 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/bow.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/button-fast-forward-1.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/button-fast-forward-1.svg new file mode 100644 index 0000000000..dd04b7e8c6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/button-fast-forward-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/button-fast-forward-2.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/button-fast-forward-2.svg new file mode 100644 index 0000000000..f3d3dc72bc --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/button-fast-forward-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/button-next.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/button-next.svg new file mode 100644 index 0000000000..c3b1a23a06 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/button-next.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/button-pause-2.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/button-pause-2.svg new file mode 100644 index 0000000000..983544897a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/button-pause-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/button-play.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/button-play.svg new file mode 100644 index 0000000000..a07ab94655 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/button-play.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/button-power-1.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/button-power-1.svg new file mode 100644 index 0000000000..ef9e77f877 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/button-power-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/button-previous.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/button-previous.svg new file mode 100644 index 0000000000..1f376dc16f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/button-previous.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/button-record-3.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/button-record-3.svg new file mode 100644 index 0000000000..0e9332cb25 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/button-record-3.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/button-rewind-1.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/button-rewind-1.svg new file mode 100644 index 0000000000..d36b320fd9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/button-rewind-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/button-rewind-2.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/button-rewind-2.svg new file mode 100644 index 0000000000..beb36d9804 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/button-rewind-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/button-stop.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/button-stop.svg new file mode 100644 index 0000000000..a3339d0b1b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/button-stop.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/camera-video.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/camera-video.svg new file mode 100644 index 0000000000..1dc4e57ea7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/camera-video.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/cards.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/cards.svg new file mode 100644 index 0000000000..aa54a4dcc6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/cards.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/chess-bishop.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/chess-bishop.svg new file mode 100644 index 0000000000..f667a4e84c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/chess-bishop.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/chess-king.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/chess-king.svg new file mode 100644 index 0000000000..6cdbf1a76e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/chess-king.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/chess-knight.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/chess-knight.svg new file mode 100644 index 0000000000..027afaedcc --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/chess-knight.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/chess-pawn.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/chess-pawn.svg new file mode 100644 index 0000000000..9e995acb97 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/chess-pawn.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/cloud-gaming-1.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/cloud-gaming-1.svg new file mode 100644 index 0000000000..874cac2023 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/cloud-gaming-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/clubs-symbol.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/clubs-symbol.svg new file mode 100644 index 0000000000..23207373a1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/clubs-symbol.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/diamonds-symbol.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/diamonds-symbol.svg new file mode 100644 index 0000000000..d184ba7455 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/diamonds-symbol.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/dice-1.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/dice-1.svg new file mode 100644 index 0000000000..adfab0f74c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/dice-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/dice-2.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/dice-2.svg new file mode 100644 index 0000000000..94ad5db18a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/dice-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/dice-3.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/dice-3.svg new file mode 100644 index 0000000000..0e7571ae95 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/dice-3.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/dice-4.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/dice-4.svg new file mode 100644 index 0000000000..37d68fcffc --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/dice-4.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/dice-5.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/dice-5.svg new file mode 100644 index 0000000000..eabbd0ed3b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/dice-5.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/dice-6.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/dice-6.svg new file mode 100644 index 0000000000..36a19135ae --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/dice-6.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/dices-entertainment-gaming-dices.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/dices-entertainment-gaming-dices.svg new file mode 100644 index 0000000000..ea1f1d84ad --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/dices-entertainment-gaming-dices.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/earpods.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/earpods.svg new file mode 100644 index 0000000000..890a89753e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/earpods.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/epic-games-1.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/epic-games-1.svg new file mode 100644 index 0000000000..d1eb2af8fe --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/epic-games-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/esports.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/esports.svg new file mode 100644 index 0000000000..3f7bcd4c41 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/esports.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/fireworks-rocket.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/fireworks-rocket.svg new file mode 100644 index 0000000000..fcc4d96bcd --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/fireworks-rocket.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/gameboy.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/gameboy.svg new file mode 100644 index 0000000000..402531f20a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/gameboy.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/gramophone.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/gramophone.svg new file mode 100644 index 0000000000..0ed2f0b26f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/gramophone.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/hearts-symbol.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/hearts-symbol.svg new file mode 100644 index 0000000000..fc6cce023f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/hearts-symbol.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/music-equalizer.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/music-equalizer.svg new file mode 100644 index 0000000000..9fbd4aba84 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/music-equalizer.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/music-note-1.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/music-note-1.svg new file mode 100644 index 0000000000..644ba5553d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/music-note-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/music-note-2.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/music-note-2.svg new file mode 100644 index 0000000000..96efe68daa --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/music-note-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/music-note-off-1.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/music-note-off-1.svg new file mode 100644 index 0000000000..5f5be24b37 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/music-note-off-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/music-note-off-2.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/music-note-off-2.svg new file mode 100644 index 0000000000..8e6cffcfbd --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/music-note-off-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/nintendo-switch.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/nintendo-switch.svg new file mode 100644 index 0000000000..31a17e97f1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/nintendo-switch.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/one-vesus-one.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/one-vesus-one.svg new file mode 100644 index 0000000000..31c3d7e265 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/one-vesus-one.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/pacman.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/pacman.svg new file mode 100644 index 0000000000..a42ee2bf02 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/pacman.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/party-popper.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/party-popper.svg new file mode 100644 index 0000000000..2d7033ddb3 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/party-popper.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/play-list-4.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/play-list-4.svg new file mode 100644 index 0000000000..6655dfb7d6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/play-list-4.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/play-list-5.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/play-list-5.svg new file mode 100644 index 0000000000..747bb3d86f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/play-list-5.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/play-list-8.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/play-list-8.svg new file mode 100644 index 0000000000..cda68aa414 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/play-list-8.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/play-list-9.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/play-list-9.svg new file mode 100644 index 0000000000..eb9df98361 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/play-list-9.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/play-list-folder.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/play-list-folder.svg new file mode 100644 index 0000000000..f6226c0d62 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/play-list-folder.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/play-station.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/play-station.svg new file mode 100644 index 0000000000..eb281023b8 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/play-station.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/radio.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/radio.svg new file mode 100644 index 0000000000..068af297a2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/radio.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/recording-tape-bubble-circle.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/recording-tape-bubble-circle.svg new file mode 100644 index 0000000000..fa5ba15b9e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/recording-tape-bubble-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/recording-tape-bubble-square.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/recording-tape-bubble-square.svg new file mode 100644 index 0000000000..69d0897329 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/recording-tape-bubble-square.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/song-recommendation.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/song-recommendation.svg new file mode 100644 index 0000000000..a53a018dae --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/song-recommendation.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/spades-symbol.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/spades-symbol.svg new file mode 100644 index 0000000000..36a510d14b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/spades-symbol.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/speaker-1.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/speaker-1.svg new file mode 100644 index 0000000000..105430d2ad --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/speaker-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/speaker-2.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/speaker-2.svg new file mode 100644 index 0000000000..79cf8682b6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/speaker-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/stream.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/stream.svg new file mode 100644 index 0000000000..188e0c1a8f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/stream.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/tape-cassette-record.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/tape-cassette-record.svg new file mode 100644 index 0000000000..1ecc8cb52f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/tape-cassette-record.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/volume-down.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/volume-down.svg new file mode 100644 index 0000000000..c86a4fd7d9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/volume-down.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/volume-level-high.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/volume-level-high.svg new file mode 100644 index 0000000000..b560324f28 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/volume-level-high.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/volume-level-low.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/volume-level-low.svg new file mode 100644 index 0000000000..726d2adef3 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/volume-level-low.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/volume-level-off.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/volume-level-off.svg new file mode 100644 index 0000000000..a4a4d827dd --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/volume-level-off.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/volume-mute.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/volume-mute.svg new file mode 100644 index 0000000000..02c8c1da05 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/volume-mute.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/volume-off.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/volume-off.svg new file mode 100644 index 0000000000..5d9afb737a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/volume-off.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/vr-headset-1.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/vr-headset-1.svg new file mode 100644 index 0000000000..99a7bea697 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/vr-headset-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/vr-headset-2.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/vr-headset-2.svg new file mode 100644 index 0000000000..88cd45c4ed --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/vr-headset-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/entertainment/xbox.svg b/frontend/appflowy_web_app/public/af_icons/entertainment/xbox.svg new file mode 100644 index 0000000000..47efc6bc54 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/entertainment/xbox.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/beer-mug.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/beer-mug.svg new file mode 100644 index 0000000000..01ecef5716 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/beer-mug.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/beer-pitch.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/beer-pitch.svg new file mode 100644 index 0000000000..6eda98884b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/beer-pitch.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/burger.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/burger.svg new file mode 100644 index 0000000000..12c6c9d249 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/burger.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/burrito-fastfood.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/burrito-fastfood.svg new file mode 100644 index 0000000000..88abc83543 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/burrito-fastfood.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/cake-slice.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/cake-slice.svg new file mode 100644 index 0000000000..ec6132a520 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/cake-slice.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/candy-cane.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/candy-cane.svg new file mode 100644 index 0000000000..12510b6fcb --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/candy-cane.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/champagne-party-alcohol.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/champagne-party-alcohol.svg new file mode 100644 index 0000000000..01c22f9955 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/champagne-party-alcohol.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/cheese.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/cheese.svg new file mode 100644 index 0000000000..721c865fb4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/cheese.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/cherries.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/cherries.svg new file mode 100644 index 0000000000..df3d75d719 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/cherries.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/chicken-grilled-stream.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/chicken-grilled-stream.svg new file mode 100644 index 0000000000..b3410829f2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/chicken-grilled-stream.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/cocktail.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/cocktail.svg new file mode 100644 index 0000000000..fa4f8a3c2f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/cocktail.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/coffee-bean.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/coffee-bean.svg new file mode 100644 index 0000000000..17cd87ef52 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/coffee-bean.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/coffee-mug.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/coffee-mug.svg new file mode 100644 index 0000000000..9d798f5761 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/coffee-mug.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/coffee-takeaway-cup.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/coffee-takeaway-cup.svg new file mode 100644 index 0000000000..c4db12c023 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/coffee-takeaway-cup.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/donut.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/donut.svg new file mode 100644 index 0000000000..9e43a78ce1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/donut.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/fork-knife.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/fork-knife.svg new file mode 100644 index 0000000000..c084ce727b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/fork-knife.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/fork-spoon.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/fork-spoon.svg new file mode 100644 index 0000000000..b1ac770721 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/fork-spoon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/ice-cream-2.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/ice-cream-2.svg new file mode 100644 index 0000000000..de00d2d5d7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/ice-cream-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/ice-cream-3.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/ice-cream-3.svg new file mode 100644 index 0000000000..8b4d864570 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/ice-cream-3.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/lemon-fruit-seasoning.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/lemon-fruit-seasoning.svg new file mode 100644 index 0000000000..3da07de679 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/lemon-fruit-seasoning.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/microwave.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/microwave.svg new file mode 100644 index 0000000000..162c26c96d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/microwave.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/milkshake.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/milkshake.svg new file mode 100644 index 0000000000..9a73d0d4e4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/milkshake.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/popcorn.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/popcorn.svg new file mode 100644 index 0000000000..33cf71d444 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/popcorn.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/pork-meat.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/pork-meat.svg new file mode 100644 index 0000000000..081e550618 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/pork-meat.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/refrigerator.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/refrigerator.svg new file mode 100644 index 0000000000..89f233c48d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/refrigerator.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/serving-dome.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/serving-dome.svg new file mode 100644 index 0000000000..1bdc48d306 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/serving-dome.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/shrimp.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/shrimp.svg new file mode 100644 index 0000000000..b9a5add6da --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/shrimp.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/strawberry.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/strawberry.svg new file mode 100644 index 0000000000..14aa7a9f8d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/strawberry.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/tea-cup.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/tea-cup.svg new file mode 100644 index 0000000000..e678274acc --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/tea-cup.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/toast.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/toast.svg new file mode 100644 index 0000000000..5aa9be15ad --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/toast.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/water-glass.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/water-glass.svg new file mode 100644 index 0000000000..8e9f674c8c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/water-glass.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/food_drink/wine.svg b/frontend/appflowy_web_app/public/af_icons/food_drink/wine.svg new file mode 100644 index 0000000000..1f6be74e61 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/food_drink/wine.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/ambulance.svg b/frontend/appflowy_web_app/public/af_icons/health/ambulance.svg new file mode 100644 index 0000000000..c0747996ff --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/ambulance.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/bacteria-virus-cells-biology.svg b/frontend/appflowy_web_app/public/af_icons/health/bacteria-virus-cells-biology.svg new file mode 100644 index 0000000000..39c0d6442a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/bacteria-virus-cells-biology.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/bandage.svg b/frontend/appflowy_web_app/public/af_icons/health/bandage.svg new file mode 100644 index 0000000000..ff4e17b118 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/bandage.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/blood-bag-donation.svg b/frontend/appflowy_web_app/public/af_icons/health/blood-bag-donation.svg new file mode 100644 index 0000000000..6a558d54de --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/blood-bag-donation.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/blood-donate-drop.svg b/frontend/appflowy_web_app/public/af_icons/health/blood-donate-drop.svg new file mode 100644 index 0000000000..6959a292d5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/blood-donate-drop.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/blood-drop-donation.svg b/frontend/appflowy_web_app/public/af_icons/health/blood-drop-donation.svg new file mode 100644 index 0000000000..8bd0bfc432 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/blood-drop-donation.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/brain-cognitive.svg b/frontend/appflowy_web_app/public/af_icons/health/brain-cognitive.svg new file mode 100644 index 0000000000..9fdb4125d4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/brain-cognitive.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/brain.svg b/frontend/appflowy_web_app/public/af_icons/health/brain.svg new file mode 100644 index 0000000000..e12682c2ef --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/brain.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/call-center-support-service.svg b/frontend/appflowy_web_app/public/af_icons/health/call-center-support-service.svg new file mode 100644 index 0000000000..1593b6c790 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/call-center-support-service.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/checkup-medical-report-clipboard.svg b/frontend/appflowy_web_app/public/af_icons/health/checkup-medical-report-clipboard.svg new file mode 100644 index 0000000000..2837b7f2e5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/checkup-medical-report-clipboard.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/ear-hearing.svg b/frontend/appflowy_web_app/public/af_icons/health/ear-hearing.svg new file mode 100644 index 0000000000..5fa596e560 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/ear-hearing.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/eye-optic.svg b/frontend/appflowy_web_app/public/af_icons/health/eye-optic.svg new file mode 100644 index 0000000000..1617190a8e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/eye-optic.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/flu-mask.svg b/frontend/appflowy_web_app/public/af_icons/health/flu-mask.svg new file mode 100644 index 0000000000..365d4cab84 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/flu-mask.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/health-care-2.svg b/frontend/appflowy_web_app/public/af_icons/health/health-care-2.svg new file mode 100644 index 0000000000..495a02dc3d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/health-care-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/heart-rate-pulse-graph.svg b/frontend/appflowy_web_app/public/af_icons/health/heart-rate-pulse-graph.svg new file mode 100644 index 0000000000..0351f05eb2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/heart-rate-pulse-graph.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/heart-rate-search.svg b/frontend/appflowy_web_app/public/af_icons/health/heart-rate-search.svg new file mode 100644 index 0000000000..e8a6faa1db --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/heart-rate-search.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/hospital-sign-circle.svg b/frontend/appflowy_web_app/public/af_icons/health/hospital-sign-circle.svg new file mode 100644 index 0000000000..964abce175 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/hospital-sign-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/hospital-sign-square.svg b/frontend/appflowy_web_app/public/af_icons/health/hospital-sign-square.svg new file mode 100644 index 0000000000..1648b17479 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/hospital-sign-square.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/insurance-hand.svg b/frontend/appflowy_web_app/public/af_icons/health/insurance-hand.svg new file mode 100644 index 0000000000..70ae0036b9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/insurance-hand.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/medical-bag.svg b/frontend/appflowy_web_app/public/af_icons/health/medical-bag.svg new file mode 100644 index 0000000000..c469e591d9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/medical-bag.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/medical-cross-sign-healthcare.svg b/frontend/appflowy_web_app/public/af_icons/health/medical-cross-sign-healthcare.svg new file mode 100644 index 0000000000..fc35cba77e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/medical-cross-sign-healthcare.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/medical-cross-symbol.svg b/frontend/appflowy_web_app/public/af_icons/health/medical-cross-symbol.svg new file mode 100644 index 0000000000..7906b49bd2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/medical-cross-symbol.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/medical-files-report-history.svg b/frontend/appflowy_web_app/public/af_icons/health/medical-files-report-history.svg new file mode 100644 index 0000000000..b18c22e979 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/medical-files-report-history.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/medical-ribbon-1.svg b/frontend/appflowy_web_app/public/af_icons/health/medical-ribbon-1.svg new file mode 100644 index 0000000000..c53c3ef448 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/medical-ribbon-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/medical-search-diagnosis.svg b/frontend/appflowy_web_app/public/af_icons/health/medical-search-diagnosis.svg new file mode 100644 index 0000000000..f5995068cc --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/medical-search-diagnosis.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/microscope-observation-sciene.svg b/frontend/appflowy_web_app/public/af_icons/health/microscope-observation-sciene.svg new file mode 100644 index 0000000000..be4a39d09e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/microscope-observation-sciene.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/nurse-assistant-emergency.svg b/frontend/appflowy_web_app/public/af_icons/health/nurse-assistant-emergency.svg new file mode 100644 index 0000000000..43e1a0fcbf --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/nurse-assistant-emergency.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/nurse-hat.svg b/frontend/appflowy_web_app/public/af_icons/health/nurse-hat.svg new file mode 100644 index 0000000000..e8f3ca9dc3 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/nurse-hat.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/online-medical-call-service.svg b/frontend/appflowy_web_app/public/af_icons/health/online-medical-call-service.svg new file mode 100644 index 0000000000..24190f5ed4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/online-medical-call-service.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/online-medical-service-monitor.svg b/frontend/appflowy_web_app/public/af_icons/health/online-medical-service-monitor.svg new file mode 100644 index 0000000000..85370f0d57 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/online-medical-service-monitor.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/online-medical-web-service.svg b/frontend/appflowy_web_app/public/af_icons/health/online-medical-web-service.svg new file mode 100644 index 0000000000..cf683b8d42 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/online-medical-web-service.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/petri-dish-lab-equipment.svg b/frontend/appflowy_web_app/public/af_icons/health/petri-dish-lab-equipment.svg new file mode 100644 index 0000000000..46409cf4d8 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/petri-dish-lab-equipment.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/pharmacy.svg b/frontend/appflowy_web_app/public/af_icons/health/pharmacy.svg new file mode 100644 index 0000000000..c2f871ae9b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/pharmacy.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/prescription-pills-drugs-healthcare.svg b/frontend/appflowy_web_app/public/af_icons/health/prescription-pills-drugs-healthcare.svg new file mode 100644 index 0000000000..0b297f59f0 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/prescription-pills-drugs-healthcare.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/sign-cross-square.svg b/frontend/appflowy_web_app/public/af_icons/health/sign-cross-square.svg new file mode 100644 index 0000000000..a3f893c951 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/sign-cross-square.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/sos-help-emergency-sign.svg b/frontend/appflowy_web_app/public/af_icons/health/sos-help-emergency-sign.svg new file mode 100644 index 0000000000..850b037136 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/sos-help-emergency-sign.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/stethoscope.svg b/frontend/appflowy_web_app/public/af_icons/health/stethoscope.svg new file mode 100644 index 0000000000..f78716a7f8 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/stethoscope.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/syringe.svg b/frontend/appflowy_web_app/public/af_icons/health/syringe.svg new file mode 100644 index 0000000000..07fe454cff --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/syringe.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/tablet-capsule.svg b/frontend/appflowy_web_app/public/af_icons/health/tablet-capsule.svg new file mode 100644 index 0000000000..9553c056c3 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/tablet-capsule.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/tooth.svg b/frontend/appflowy_web_app/public/af_icons/health/tooth.svg new file mode 100644 index 0000000000..6817c2b796 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/tooth.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/virus-antivirus.svg b/frontend/appflowy_web_app/public/af_icons/health/virus-antivirus.svg new file mode 100644 index 0000000000..ad972cff8b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/virus-antivirus.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/waiting-appointments-calendar.svg b/frontend/appflowy_web_app/public/af_icons/health/waiting-appointments-calendar.svg new file mode 100644 index 0000000000..59ab62e17f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/waiting-appointments-calendar.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/health/wheelchair.svg b/frontend/appflowy_web_app/public/af_icons/health/wheelchair.svg new file mode 100644 index 0000000000..a29e32ca48 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/health/wheelchair.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/icons.json b/frontend/appflowy_web_app/public/af_icons/icons.json new file mode 100644 index 0000000000..b76b0d051a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/icons.json @@ -0,0 +1 @@ +{ "artificial_intelligence": [ { "id": "artificial_intelligence/ai-chip-spark", "name": "ai-chip-spark", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "artificial_intelligence/ai-cloud-spark", "name": "ai-cloud-spark", "keywords": [], "content": "\n \n \n \n \n \n \n \n \n\n" }, { "id": "artificial_intelligence/ai-edit-spark", "name": "ai-edit-spark", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "artificial_intelligence/ai-email-generator-spark", "name": "ai-email-generator-spark", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "artificial_intelligence/ai-gaming-spark", "name": "ai-gaming-spark", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "artificial_intelligence/ai-generate-landscape-image-spark", "name": "ai-generate-landscape-image-spark", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n\n" }, { "id": "artificial_intelligence/ai-generate-music-spark", "name": "ai-generate-music-spark", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "artificial_intelligence/ai-generate-portrait-image-spark", "name": "ai-generate-portrait-image-spark", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "artificial_intelligence/ai-generate-variation-spark", "name": "ai-generate-variation-spark", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "artificial_intelligence/ai-navigation-spark", "name": "ai-navigation-spark", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "artificial_intelligence/ai-network-spark", "name": "ai-network-spark", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "artificial_intelligence/ai-prompt-spark", "name": "ai-prompt-spark", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "artificial_intelligence/ai-redo-spark", "name": "ai-redo-spark", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "artificial_intelligence/ai-science-spark", "name": "ai-science-spark", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "artificial_intelligence/ai-settings-spark", "name": "ai-settings-spark", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "artificial_intelligence/ai-technology-spark", "name": "ai-technology-spark", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "artificial_intelligence/ai-upscale-spark", "name": "ai-upscale-spark", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "artificial_intelligence/ai-vehicle-spark-1", "name": "ai-vehicle-spark-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "artificial_intelligence/artificial-intelligence-spark", "name": "artificial-intelligence-spark", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" } ], "computer_devices": [ { "id": "computer_devices/adobe", "name": "adobe", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/alt", "name": "alt", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/amazon", "name": "amazon", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/android", "name": "android", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/app-store", "name": "app-store", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/apple", "name": "apple", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/asterisk-1", "name": "asterisk-1", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/battery-alert-1", "name": "battery-alert-1", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/battery-charging", "name": "battery-charging", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/battery-empty-1", "name": "battery-empty-1", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/battery-empty-2", "name": "battery-empty-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/battery-full-1", "name": "battery-full-1", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/battery-low-1", "name": "battery-low-1", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/battery-medium-1", "name": "battery-medium-1", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/bluetooth-disabled", "name": "bluetooth-disabled", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/bluetooth-searching", "name": "bluetooth-searching", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/bluetooth", "name": "bluetooth", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/browser-wifi", "name": "browser-wifi", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/chrome", "name": "chrome", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/command", "name": "command", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/computer-chip-1", "name": "computer-chip-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/computer-chip-2", "name": "computer-chip-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/computer-pc-desktop", "name": "computer-pc-desktop", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/controller-1", "name": "controller-1", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/controller-wireless", "name": "controller-wireless", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/controller", "name": "controller", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/cursor-click", "name": "cursor-click", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/cyborg-2", "name": "cyborg-2", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/cyborg", "name": "cyborg", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/database-check", "name": "database-check", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/database-lock", "name": "database-lock", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/database-refresh", "name": "database-refresh", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/database-remove", "name": "database-remove", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/database-server-1", "name": "database-server-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/database-server-2", "name": "database-server-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/database-setting", "name": "database-setting", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/database-subtract-2-raid-storage-code-disk-programming-database-array-hard-disc-minus", "name": "database-subtract-2-raid-storage-code-disk-programming-database-array-hard-disc-minus", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/database", "name": "database", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/delete-keyboard", "name": "delete-keyboard", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/desktop-chat", "name": "desktop-chat", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/desktop-check", "name": "desktop-check", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/desktop-code", "name": "desktop-code", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/desktop-delete", "name": "desktop-delete", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/desktop-dollar", "name": "desktop-dollar", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/desktop-emoji", "name": "desktop-emoji", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/desktop-favorite-star", "name": "desktop-favorite-star", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/desktop-game", "name": "desktop-game", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/desktop-help", "name": "desktop-help", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/device-database-encryption-1", "name": "device-database-encryption-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/discord", "name": "discord", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/drone", "name": "drone", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/dropbox", "name": "dropbox", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/eject", "name": "eject", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/electric-cord-1", "name": "electric-cord-1", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/electric-cord-3", "name": "electric-cord-3", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/facebook-1", "name": "facebook-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/figma", "name": "figma", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/floppy-disk", "name": "floppy-disk", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/gmail", "name": "gmail", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/google-drive", "name": "google-drive", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/google", "name": "google", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/hand-held-tablet-drawing", "name": "hand-held-tablet-drawing", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/hand-held-tablet-writing", "name": "hand-held-tablet-writing", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/hand-held", "name": "hand-held", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/hard-disk", "name": "hard-disk", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/hard-drive-1", "name": "hard-drive-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/instagram", "name": "instagram", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/keyboard-virtual", "name": "keyboard-virtual", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/keyboard-wireless-2", "name": "keyboard-wireless-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/keyboard", "name": "keyboard", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/laptop-charging", "name": "laptop-charging", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/linkedin", "name": "linkedin", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/local-storage-folder", "name": "local-storage-folder", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/meta", "name": "meta", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/mouse-wireless-1", "name": "mouse-wireless-1", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/mouse-wireless", "name": "mouse-wireless", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/mouse", "name": "mouse", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/netflix", "name": "netflix", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/network", "name": "network", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/next", "name": "next", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/paypal", "name": "paypal", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/play-store", "name": "play-store", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/printer", "name": "printer", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/return-2", "name": "return-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/screen-1", "name": "screen-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/screen-2", "name": "screen-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/screen-curve", "name": "screen-curve", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/screensaver-monitor-wallpaper", "name": "screensaver-monitor-wallpaper", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/shift", "name": "shift", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/shredder", "name": "shredder", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/signal-loading", "name": "signal-loading", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/slack", "name": "slack", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/spotify", "name": "spotify", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/telegram", "name": "telegram", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/tiktok", "name": "tiktok", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/tinder", "name": "tinder", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/twitter", "name": "twitter", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/usb-drive", "name": "usb-drive", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/virtual-reality", "name": "virtual-reality", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/voice-mail-off", "name": "voice-mail-off", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/voice-mail", "name": "voice-mail", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/VPN-connection", "name": "VPN-connection", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/watch-1", "name": "watch-1", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/watch-2", "name": "watch-2", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/watch-circle-charging", "name": "watch-circle-charging", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/watch-circle-heartbeat-monitor-1", "name": "watch-circle-heartbeat-monitor-1", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/watch-circle-heartbeat-monitor-2", "name": "watch-circle-heartbeat-monitor-2", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/watch-circle-menu", "name": "watch-circle-menu", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/watch-circle-time", "name": "watch-circle-time", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/webcam-video-circle", "name": "webcam-video-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/webcam-video-off", "name": "webcam-video-off", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/webcam-video", "name": "webcam-video", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/webcam", "name": "webcam", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/whatsapp", "name": "whatsapp", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/wifi-antenna", "name": "wifi-antenna", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/wifi-disabled", "name": "wifi-disabled", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/wifi-horizontal", "name": "wifi-horizontal", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/wifi-router", "name": "wifi-router", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "computer_devices/wifi", "name": "wifi", "keywords": [], "content": "\n\n\n" }, { "id": "computer_devices/windows", "name": "windows", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" } ], "culture": [ { "id": "culture/christian-cross-1", "name": "christian-cross-1", "keywords": [], "content": "\n\n\n" }, { "id": "culture/christian-cross-2", "name": "christian-cross-2", "keywords": [], "content": "\n\n\n" }, { "id": "culture/christianity", "name": "christianity", "keywords": [], "content": "\n\n\n" }, { "id": "culture/dhammajak", "name": "dhammajak", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "culture/hexagram", "name": "hexagram", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "culture/hinduism", "name": "hinduism", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "culture/islam", "name": "islam", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "culture/news-paper", "name": "news-paper", "keywords": [], "content": "\n\n\n" }, { "id": "culture/peace-symbol", "name": "peace-symbol", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "culture/politics-compaign", "name": "politics-compaign", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "culture/politics-speech", "name": "politics-speech", "keywords": [], "content": "\n\n\n" }, { "id": "culture/politics-vote-2", "name": "politics-vote-2", "keywords": [], "content": "\n\n\n" }, { "id": "culture/ticket-1", "name": "ticket-1", "keywords": [], "content": "\n\n\n" }, { "id": "culture/tickets", "name": "tickets", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "culture/yin-yang-symbol", "name": "yin-yang-symbol", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "culture/zodiac-1", "name": "zodiac-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "culture/zodiac-10", "name": "zodiac-10", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "culture/zodiac-11", "name": "zodiac-11", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "culture/zodiac-12", "name": "zodiac-12", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "culture/zodiac-2", "name": "zodiac-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "culture/zodiac-3", "name": "zodiac-3", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "culture/zodiac-4", "name": "zodiac-4", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "culture/zodiac-5", "name": "zodiac-5", "keywords": [], "content": "\n\n\n" }, { "id": "culture/zodiac-6", "name": "zodiac-6", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "culture/zodiac-7", "name": "zodiac-7", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "culture/zodiac-8", "name": "zodiac-8", "keywords": [], "content": "\n\n\n" }, { "id": "culture/zodiac-9", "name": "zodiac-9", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" } ], "entertainment": [ { "id": "entertainment/balloon", "name": "balloon", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/bow", "name": "bow", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/button-fast-forward-1", "name": "button-fast-forward-1", "keywords": [], "content": "\n\n\n" }, { "id": "entertainment/button-fast-forward-2", "name": "button-fast-forward-2", "keywords": [], "content": "\n\n\n" }, { "id": "entertainment/button-next", "name": "button-next", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/button-pause-2", "name": "button-pause-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/button-play", "name": "button-play", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/button-power-1", "name": "button-power-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/button-previous", "name": "button-previous", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/button-record-3", "name": "button-record-3", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/button-rewind-1", "name": "button-rewind-1", "keywords": [], "content": "\n\n\n" }, { "id": "entertainment/button-rewind-2", "name": "button-rewind-2", "keywords": [], "content": "\n\n\n" }, { "id": "entertainment/button-stop", "name": "button-stop", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/camera-video", "name": "camera-video", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/cards", "name": "cards", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/chess-bishop", "name": "chess-bishop", "keywords": [], "content": "\n\n\n" }, { "id": "entertainment/chess-king", "name": "chess-king", "keywords": [], "content": "\n\n\n" }, { "id": "entertainment/chess-knight", "name": "chess-knight", "keywords": [], "content": "\n\n\n" }, { "id": "entertainment/chess-pawn", "name": "chess-pawn", "keywords": [], "content": "\n\n\n" }, { "id": "entertainment/cloud-gaming-1", "name": "cloud-gaming-1", "keywords": [], "content": "\n\n\n" }, { "id": "entertainment/clubs-symbol", "name": "clubs-symbol", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/diamonds-symbol", "name": "diamonds-symbol", "keywords": [], "content": "\n\n\n" }, { "id": "entertainment/dice-1", "name": "dice-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/dice-2", "name": "dice-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/dice-3", "name": "dice-3", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/dice-4", "name": "dice-4", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/dice-5", "name": "dice-5", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/dice-6", "name": "dice-6", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/dices-entertainment-gaming-dices", "name": "dices-entertainment-gaming-dices", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/earpods", "name": "earpods", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/epic-games-1", "name": "epic-games-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/esports", "name": "esports", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/fireworks-rocket", "name": "fireworks-rocket", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/gameboy", "name": "gameboy", "keywords": [], "content": "\n\n\n" }, { "id": "entertainment/gramophone", "name": "gramophone", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/hearts-symbol", "name": "hearts-symbol", "keywords": [], "content": "\n\n\n" }, { "id": "entertainment/music-equalizer", "name": "music-equalizer", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/music-note-1", "name": "music-note-1", "keywords": [], "content": "\n\n\n" }, { "id": "entertainment/music-note-2", "name": "music-note-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/music-note-off-1", "name": "music-note-off-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/music-note-off-2", "name": "music-note-off-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/nintendo-switch", "name": "nintendo-switch", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/one-vesus-one", "name": "one-vesus-one", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/pacman", "name": "pacman", "keywords": [], "content": "\n\n\n" }, { "id": "entertainment/party-popper", "name": "party-popper", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/play-list-4", "name": "play-list-4", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/play-list-5", "name": "play-list-5", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/play-list-8", "name": "play-list-8", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/play-list-9", "name": "play-list-9", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/play-list-folder", "name": "play-list-folder", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/play-station", "name": "play-station", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/radio", "name": "radio", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/recording-tape-bubble-circle", "name": "recording-tape-bubble-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/recording-tape-bubble-square", "name": "recording-tape-bubble-square", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/song-recommendation", "name": "song-recommendation", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/spades-symbol", "name": "spades-symbol", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/speaker-1", "name": "speaker-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/speaker-2", "name": "speaker-2", "keywords": [], "content": "\n\n\n" }, { "id": "entertainment/stream", "name": "stream", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/tape-cassette-record", "name": "tape-cassette-record", "keywords": [], "content": "\n\n\n" }, { "id": "entertainment/volume-down", "name": "volume-down", "keywords": [], "content": "\n\n\n" }, { "id": "entertainment/volume-level-high", "name": "volume-level-high", "keywords": [], "content": "\n\n\n" }, { "id": "entertainment/volume-level-low", "name": "volume-level-low", "keywords": [], "content": "\n\n\n" }, { "id": "entertainment/volume-level-off", "name": "volume-level-off", "keywords": [], "content": "\n\n\n" }, { "id": "entertainment/volume-mute", "name": "volume-mute", "keywords": [], "content": "\n\n\n" }, { "id": "entertainment/volume-off", "name": "volume-off", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/vr-headset-1", "name": "vr-headset-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/vr-headset-2", "name": "vr-headset-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "entertainment/xbox", "name": "xbox", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" } ], "food_drink": [ { "id": "food_drink/beer-mug", "name": "beer-mug", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/beer-pitch", "name": "beer-pitch", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/burger", "name": "burger", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/burrito-fastfood", "name": "burrito-fastfood", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/cake-slice", "name": "cake-slice", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/candy-cane", "name": "candy-cane", "keywords": [], "content": "\n\n\n" }, { "id": "food_drink/champagne-party-alcohol", "name": "champagne-party-alcohol", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/cheese", "name": "cheese", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/cherries", "name": "cherries", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/chicken-grilled-stream", "name": "chicken-grilled-stream", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/cocktail", "name": "cocktail", "keywords": [], "content": "\n\n\n" }, { "id": "food_drink/coffee-bean", "name": "coffee-bean", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/coffee-mug", "name": "coffee-mug", "keywords": [], "content": "\n\n\n" }, { "id": "food_drink/coffee-takeaway-cup", "name": "coffee-takeaway-cup", "keywords": [], "content": "\n\n\n" }, { "id": "food_drink/donut", "name": "donut", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/fork-knife", "name": "fork-knife", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/fork-spoon", "name": "fork-spoon", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/ice-cream-2", "name": "ice-cream-2", "keywords": [], "content": "\n\n\n" }, { "id": "food_drink/ice-cream-3", "name": "ice-cream-3", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/lemon-fruit-seasoning", "name": "lemon-fruit-seasoning", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/microwave", "name": "microwave", "keywords": [], "content": "\n\n\n" }, { "id": "food_drink/milkshake", "name": "milkshake", "keywords": [], "content": "\n\n\n" }, { "id": "food_drink/popcorn", "name": "popcorn", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/pork-meat", "name": "pork-meat", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/refrigerator", "name": "refrigerator", "keywords": [], "content": "\n\n\n" }, { "id": "food_drink/serving-dome", "name": "serving-dome", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/shrimp", "name": "shrimp", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/strawberry", "name": "strawberry", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/tea-cup", "name": "tea-cup", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/toast", "name": "toast", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/water-glass", "name": "water-glass", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "food_drink/wine", "name": "wine", "keywords": [], "content": "\n\n\n" } ], "health": [ { "id": "health/ambulance", "name": "ambulance", "keywords": [], "content": "\n\n\n" }, { "id": "health/bacteria-virus-cells-biology", "name": "bacteria-virus-cells-biology", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/bandage", "name": "bandage", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/blood-bag-donation", "name": "blood-bag-donation", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/blood-donate-drop", "name": "blood-donate-drop", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/blood-drop-donation", "name": "blood-drop-donation", "keywords": [], "content": "\n\n\n" }, { "id": "health/brain-cognitive", "name": "brain-cognitive", "keywords": [], "content": "\n\n\n" }, { "id": "health/brain", "name": "brain", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/call-center-support-service", "name": "call-center-support-service", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/checkup-medical-report-clipboard", "name": "checkup-medical-report-clipboard", "keywords": [], "content": "\n\n\n" }, { "id": "health/ear-hearing", "name": "ear-hearing", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/eye-optic", "name": "eye-optic", "keywords": [], "content": "\n\n\n" }, { "id": "health/flu-mask", "name": "flu-mask", "keywords": [], "content": "\n\n\n" }, { "id": "health/health-care-2", "name": "health-care-2", "keywords": [], "content": "\n\n\n" }, { "id": "health/heart-rate-pulse-graph", "name": "heart-rate-pulse-graph", "keywords": [], "content": "\n\n\n" }, { "id": "health/heart-rate-search", "name": "heart-rate-search", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/hospital-sign-circle", "name": "hospital-sign-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/hospital-sign-square", "name": "hospital-sign-square", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/insurance-hand", "name": "insurance-hand", "keywords": [], "content": "\n\n\n" }, { "id": "health/medical-bag", "name": "medical-bag", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/medical-cross-sign-healthcare", "name": "medical-cross-sign-healthcare", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/medical-cross-symbol", "name": "medical-cross-symbol", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/medical-files-report-history", "name": "medical-files-report-history", "keywords": [], "content": "\n\n\n" }, { "id": "health/medical-ribbon-1", "name": "medical-ribbon-1", "keywords": [], "content": "\n\n\n" }, { "id": "health/medical-search-diagnosis", "name": "medical-search-diagnosis", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/microscope-observation-sciene", "name": "microscope-observation-sciene", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/nurse-assistant-emergency", "name": "nurse-assistant-emergency", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/nurse-hat", "name": "nurse-hat", "keywords": [], "content": "\n\n\n" }, { "id": "health/online-medical-call-service", "name": "online-medical-call-service", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/online-medical-service-monitor", "name": "online-medical-service-monitor", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/online-medical-web-service", "name": "online-medical-web-service", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/petri-dish-lab-equipment", "name": "petri-dish-lab-equipment", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/pharmacy", "name": "pharmacy", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/prescription-pills-drugs-healthcare", "name": "prescription-pills-drugs-healthcare", "keywords": [], "content": "\n\n\n" }, { "id": "health/sign-cross-square", "name": "sign-cross-square", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/sos-help-emergency-sign", "name": "sos-help-emergency-sign", "keywords": [], "content": "\n\n\n" }, { "id": "health/stethoscope", "name": "stethoscope", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/syringe", "name": "syringe", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/tablet-capsule", "name": "tablet-capsule", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/tooth", "name": "tooth", "keywords": [], "content": "\n\n\n" }, { "id": "health/virus-antivirus", "name": "virus-antivirus", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/waiting-appointments-calendar", "name": "waiting-appointments-calendar", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "health/wheelchair", "name": "wheelchair", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" } ], "images_photography": [ { "id": "images_photography/auto-flash", "name": "auto-flash", "keywords": [], "content": "\n\n\n" }, { "id": "images_photography/camera-1", "name": "camera-1", "keywords": [], "content": "\n\n\n" }, { "id": "images_photography/camera-disabled", "name": "camera-disabled", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "images_photography/camera-loading", "name": "camera-loading", "keywords": [], "content": "\n\n\n" }, { "id": "images_photography/camera-square", "name": "camera-square", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "images_photography/composition-oval", "name": "composition-oval", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "images_photography/composition-vertical", "name": "composition-vertical", "keywords": [], "content": "\n\n\n" }, { "id": "images_photography/compsition-horizontal", "name": "compsition-horizontal", "keywords": [], "content": "\n\n\n" }, { "id": "images_photography/edit-image-photo", "name": "edit-image-photo", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "images_photography/film-roll-1", "name": "film-roll-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "images_photography/film-slate", "name": "film-slate", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "images_photography/flash-1", "name": "flash-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "images_photography/flash-2", "name": "flash-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "images_photography/flash-3", "name": "flash-3", "keywords": [], "content": "\n\n\n" }, { "id": "images_photography/flash-off", "name": "flash-off", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "images_photography/flower", "name": "flower", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "images_photography/focus-points", "name": "focus-points", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "images_photography/landscape-2", "name": "landscape-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "images_photography/landscape-setting", "name": "landscape-setting", "keywords": [], "content": "\n\n\n" }, { "id": "images_photography/laptop-camera", "name": "laptop-camera", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "images_photography/mobile-phone-camera", "name": "mobile-phone-camera", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "images_photography/orientation-landscape", "name": "orientation-landscape", "keywords": [], "content": "\n\n\n" }, { "id": "images_photography/orientation-portrait", "name": "orientation-portrait", "keywords": [], "content": "\n\n\n" }, { "id": "images_photography/polaroid-four", "name": "polaroid-four", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" } ], "interface_essential": [ { "id": "interface_essential/add-1", "name": "add-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/add-bell-notification", "name": "add-bell-notification", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/add-circle", "name": "add-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/add-layer-2", "name": "add-layer-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/add-square", "name": "add-square", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/alarm-clock", "name": "alarm-clock", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/align-back-1", "name": "align-back-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/align-center", "name": "align-center", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/align-front-1", "name": "align-front-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/align-left", "name": "align-left", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/align-right", "name": "align-right", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/ampersand", "name": "ampersand", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/archive-box", "name": "archive-box", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-bend-left-down-2", "name": "arrow-bend-left-down-2", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/arrow-bend-right-down-2", "name": "arrow-bend-right-down-2", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/arrow-crossover-down", "name": "arrow-crossover-down", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-crossover-left", "name": "arrow-crossover-left", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-crossover-right", "name": "arrow-crossover-right", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-crossover-up", "name": "arrow-crossover-up", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-cursor-1", "name": "arrow-cursor-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-cursor-2", "name": "arrow-cursor-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-curvy-up-down-1", "name": "arrow-curvy-up-down-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-curvy-up-down-2", "name": "arrow-curvy-up-down-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-down-2", "name": "arrow-down-2", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/arrow-down-dashed-square", "name": "arrow-down-dashed-square", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-expand", "name": "arrow-expand", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-infinite-loop", "name": "arrow-infinite-loop", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/arrow-move", "name": "arrow-move", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-reload-horizontal-1", "name": "arrow-reload-horizontal-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-reload-horizontal-2", "name": "arrow-reload-horizontal-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-reload-vertical-1", "name": "arrow-reload-vertical-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-reload-vertical-2", "name": "arrow-reload-vertical-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-roadmap", "name": "arrow-roadmap", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-round-left", "name": "arrow-round-left", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/arrow-round-right", "name": "arrow-round-right", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/arrow-shrink-diagonal-1", "name": "arrow-shrink-diagonal-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-shrink-diagonal-2", "name": "arrow-shrink-diagonal-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-shrink", "name": "arrow-shrink", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-transfer-diagonal-1", "name": "arrow-transfer-diagonal-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-transfer-diagonal-2", "name": "arrow-transfer-diagonal-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-transfer-diagonal-3", "name": "arrow-transfer-diagonal-3", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-up-1", "name": "arrow-up-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/arrow-up-dashed-square", "name": "arrow-up-dashed-square", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/ascending-number-order", "name": "ascending-number-order", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/attribution", "name": "attribution", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/blank-calendar", "name": "blank-calendar", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/blank-notepad", "name": "blank-notepad", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/block-bell-notification", "name": "block-bell-notification", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/bomb", "name": "bomb", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/bookmark", "name": "bookmark", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/braces-circle", "name": "braces-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/brightness-1", "name": "brightness-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/brightness-2", "name": "brightness-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/brightness-3", "name": "brightness-3", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/broken-link-2", "name": "broken-link-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/bullet-list", "name": "bullet-list", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/calendar-add", "name": "calendar-add", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/calendar-edit", "name": "calendar-edit", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/calendar-jump-to-date", "name": "calendar-jump-to-date", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/calendar-star", "name": "calendar-star", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/celsius", "name": "celsius", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/check-square", "name": "check-square", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/check", "name": "check", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/circle-clock", "name": "circle-clock", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/circle", "name": "circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/clipboard-add", "name": "clipboard-add", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/clipboard-check", "name": "clipboard-check", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/clipboard-remove", "name": "clipboard-remove", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/cloud", "name": "cloud", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/cog", "name": "cog", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/color-palette", "name": "color-palette", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/color-picker", "name": "color-picker", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/color-swatches", "name": "color-swatches", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/cone-shape", "name": "cone-shape", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/convert-PDF-2", "name": "convert-PDF-2", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/copy-paste", "name": "copy-paste", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/creative-commons", "name": "creative-commons", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/crop-selection", "name": "crop-selection", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/crown", "name": "crown", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/customer-support-1", "name": "customer-support-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/cut", "name": "cut", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/dark-dislay-mode", "name": "dark-dislay-mode", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/dashboard-3", "name": "dashboard-3", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/dashboard-circle", "name": "dashboard-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/delete-1", "name": "delete-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/descending-number-order", "name": "descending-number-order", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/disable-bell-notification", "name": "disable-bell-notification", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/disable-heart", "name": "disable-heart", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/division-circle", "name": "division-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/download-box-1", "name": "download-box-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/download-circle", "name": "download-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/download-computer", "name": "download-computer", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/download-file", "name": "download-file", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/empty-clipboard", "name": "empty-clipboard", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/equal-sign", "name": "equal-sign", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/expand-horizontal-1", "name": "expand-horizontal-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/expand-window-2", "name": "expand-window-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/expand", "name": "expand", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/face-scan-1", "name": "face-scan-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/factorial", "name": "factorial", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/fahrenheit", "name": "fahrenheit", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/fastforward-clock", "name": "fastforward-clock", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/file-add-alternate", "name": "file-add-alternate", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/file-delete-alternate", "name": "file-delete-alternate", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/file-remove-alternate", "name": "file-remove-alternate", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/filter-2", "name": "filter-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/fingerprint-1", "name": "fingerprint-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/fingerprint-2", "name": "fingerprint-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/fist", "name": "fist", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/fit-to-height-square", "name": "fit-to-height-square", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/flip-vertical-arrow-2", "name": "flip-vertical-arrow-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/flip-vertical-circle-1", "name": "flip-vertical-circle-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/flip-vertical-square-2", "name": "flip-vertical-square-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/folder-add", "name": "folder-add", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/folder-check", "name": "folder-check", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/folder-delete", "name": "folder-delete", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/front-camera", "name": "front-camera", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/gif-format", "name": "gif-format", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/give-gift", "name": "give-gift", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/glasses", "name": "glasses", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/half-star-1", "name": "half-star-1", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/hand-cursor", "name": "hand-cursor", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/hand-grab", "name": "hand-grab", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/heading-1-paragraph-styles-heading", "name": "heading-1-paragraph-styles-heading", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/heading-2-paragraph-styles-heading", "name": "heading-2-paragraph-styles-heading", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/heading-3-paragraph-styles-heading", "name": "heading-3-paragraph-styles-heading", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/heart", "name": "heart", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/help-chat-2", "name": "help-chat-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/help-question-1", "name": "help-question-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/hierarchy-10", "name": "hierarchy-10", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/hierarchy-13", "name": "hierarchy-13", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/hierarchy-14", "name": "hierarchy-14", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/hierarchy-2", "name": "hierarchy-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/hierarchy-4", "name": "hierarchy-4", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/hierarchy-7", "name": "hierarchy-7", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/home-3", "name": "home-3", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/home-4", "name": "home-4", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/horizontal-menu-circle", "name": "horizontal-menu-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/humidity-none", "name": "humidity-none", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/image-blur", "name": "image-blur", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/image-saturation", "name": "image-saturation", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/information-circle", "name": "information-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/input-box", "name": "input-box", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/insert-side", "name": "insert-side", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/insert-top-left", "name": "insert-top-left", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/insert-top-right", "name": "insert-top-right", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/invisible-1", "name": "invisible-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/invisible-2", "name": "invisible-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/jump-object", "name": "jump-object", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/key", "name": "key", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/keyhole-lock-circle", "name": "keyhole-lock-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/lasso-tool", "name": "lasso-tool", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/layers-1", "name": "layers-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/layers-2", "name": "layers-2", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/layout-window-1", "name": "layout-window-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/layout-window-11", "name": "layout-window-11", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/layout-window-2", "name": "layout-window-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/layout-window-8", "name": "layout-window-8", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/lightbulb", "name": "lightbulb", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/like-1", "name": "like-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/link-chain", "name": "link-chain", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/live-video", "name": "live-video", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/lock-rotation", "name": "lock-rotation", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/login-1", "name": "login-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/logout-1", "name": "logout-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/loop-1", "name": "loop-1", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/magic-wand-2", "name": "magic-wand-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/magnifying-glass-circle", "name": "magnifying-glass-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/magnifying-glass", "name": "magnifying-glass", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/manual-book", "name": "manual-book", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/megaphone-2", "name": "megaphone-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/minimize-window-2", "name": "minimize-window-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/moon-cloud", "name": "moon-cloud", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/move-left", "name": "move-left", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/move-right", "name": "move-right", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/multiple-file-2", "name": "multiple-file-2", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/music-folder-song", "name": "music-folder-song", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/new-file", "name": "new-file", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/new-folder", "name": "new-folder", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/new-sticky-note", "name": "new-sticky-note", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/not-equal-sign", "name": "not-equal-sign", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/ok-hand", "name": "ok-hand", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/one-finger-drag-horizontal", "name": "one-finger-drag-horizontal", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/one-finger-drag-vertical", "name": "one-finger-drag-vertical", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/one-finger-hold", "name": "one-finger-hold", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/one-finger-tap", "name": "one-finger-tap", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/open-book", "name": "open-book", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/open-umbrella", "name": "open-umbrella", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/padlock-square-1", "name": "padlock-square-1", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/page-setting", "name": "page-setting", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/paint-bucket", "name": "paint-bucket", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/paint-palette", "name": "paint-palette", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/paintbrush-1", "name": "paintbrush-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/paintbrush-2", "name": "paintbrush-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/paperclip-1", "name": "paperclip-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/paragraph", "name": "paragraph", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/pathfinder-divide", "name": "pathfinder-divide", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/pathfinder-exclude", "name": "pathfinder-exclude", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/pathfinder-intersect", "name": "pathfinder-intersect", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/pathfinder-merge", "name": "pathfinder-merge", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/pathfinder-minus-front-1", "name": "pathfinder-minus-front-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/pathfinder-trim", "name": "pathfinder-trim", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/pathfinder-union", "name": "pathfinder-union", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/peace-hand", "name": "peace-hand", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/pen-3", "name": "pen-3", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/pen-draw", "name": "pen-draw", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/pen-tool", "name": "pen-tool", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/pencil", "name": "pencil", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/pentagon", "name": "pentagon", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/pi-symbol-circle", "name": "pi-symbol-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/pictures-folder-memories", "name": "pictures-folder-memories", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/podium", "name": "podium", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/polygon", "name": "polygon", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/praying-hand", "name": "praying-hand", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/projector-board", "name": "projector-board", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/pyramid-shape", "name": "pyramid-shape", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/quotation-2", "name": "quotation-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/radioactive-2", "name": "radioactive-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/rain-cloud", "name": "rain-cloud", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/recycle-bin-2", "name": "recycle-bin-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/ringing-bell-notification", "name": "ringing-bell-notification", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/rock-and-roll-hand", "name": "rock-and-roll-hand", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/rotate-angle-45", "name": "rotate-angle-45", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/round-cap", "name": "round-cap", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/satellite-dish", "name": "satellite-dish", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/scanner", "name": "scanner", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/search-visual", "name": "search-visual", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/select-circle-area-1", "name": "select-circle-area-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/share-link", "name": "share-link", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/shield-1", "name": "shield-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/shield-2", "name": "shield-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/shield-check", "name": "shield-check", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/shield-cross", "name": "shield-cross", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/shrink-horizontal-1", "name": "shrink-horizontal-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/shuffle", "name": "shuffle", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/sigma", "name": "sigma", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/skull-1", "name": "skull-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/sleep", "name": "sleep", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/snow-flake", "name": "snow-flake", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/sort-descending", "name": "sort-descending", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/spiral-shape", "name": "spiral-shape", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/split-vertical", "name": "split-vertical", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/spray-paint", "name": "spray-paint", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/square-brackets-circle", "name": "square-brackets-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/square-cap", "name": "square-cap", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/square-clock", "name": "square-clock", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/square-root-x-circle", "name": "square-root-x-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/star-1", "name": "star-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/star-2", "name": "star-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/star-badge", "name": "star-badge", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/straight-cap", "name": "straight-cap", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/subtract-1", "name": "subtract-1", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/subtract-circle", "name": "subtract-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/subtract-square", "name": "subtract-square", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/sun-cloud", "name": "sun-cloud", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/synchronize-disable", "name": "synchronize-disable", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/synchronize-warning", "name": "synchronize-warning", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/table-lamp-1", "name": "table-lamp-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/tag", "name": "tag", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/text-flow-rows", "name": "text-flow-rows", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/text-square", "name": "text-square", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/text-style", "name": "text-style", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/thermometer", "name": "thermometer", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/trending-content", "name": "trending-content", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/trophy", "name": "trophy", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/two-finger-drag-hotizontal", "name": "two-finger-drag-hotizontal", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/two-finger-tap", "name": "two-finger-tap", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/underline-text-1", "name": "underline-text-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/upload-box-1", "name": "upload-box-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/upload-circle", "name": "upload-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/upload-computer", "name": "upload-computer", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/upload-file", "name": "upload-file", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/user-add-plus", "name": "user-add-plus", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/user-check-validate", "name": "user-check-validate", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/user-circle-single", "name": "user-circle-single", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/user-identifier-card", "name": "user-identifier-card", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/user-multiple-circle", "name": "user-multiple-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/user-multiple-group", "name": "user-multiple-group", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/user-profile-focus", "name": "user-profile-focus", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/user-protection-2", "name": "user-protection-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/user-remove-subtract", "name": "user-remove-subtract", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/user-single-neutral-male", "name": "user-single-neutral-male", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/user-sync-online-in-person", "name": "user-sync-online-in-person", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/vertical-slider-square", "name": "vertical-slider-square", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/video-swap-camera", "name": "video-swap-camera", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/visible", "name": "visible", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/voice-scan-2", "name": "voice-scan-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/waning-cresent-moon", "name": "waning-cresent-moon", "keywords": [], "content": "\n\n\n" }, { "id": "interface_essential/warning-octagon", "name": "warning-octagon", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "interface_essential/warning-triangle", "name": "warning-triangle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" } ], "mail": [ { "id": "mail/chat-bubble-oval-notification", "name": "chat-bubble-oval-notification", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/chat-bubble-oval-smiley-1", "name": "chat-bubble-oval-smiley-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/chat-bubble-oval-smiley-2", "name": "chat-bubble-oval-smiley-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/chat-bubble-oval", "name": "chat-bubble-oval", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/chat-bubble-square-block", "name": "chat-bubble-square-block", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/chat-bubble-square-question", "name": "chat-bubble-square-question", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/chat-bubble-square-warning", "name": "chat-bubble-square-warning", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/chat-bubble-square-write", "name": "chat-bubble-square-write", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/chat-bubble-text-square", "name": "chat-bubble-text-square", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/chat-bubble-typing-oval", "name": "chat-bubble-typing-oval", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/chat-two-bubbles-oval", "name": "chat-two-bubbles-oval", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/discussion-converstion-reply", "name": "discussion-converstion-reply", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/happy-face", "name": "happy-face", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/inbox-block", "name": "inbox-block", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/inbox-favorite-heart", "name": "inbox-favorite-heart", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/inbox-favorite", "name": "inbox-favorite", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/inbox-lock", "name": "inbox-lock", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/inbox-tray-1", "name": "inbox-tray-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/inbox-tray-2", "name": "inbox-tray-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/mail-incoming", "name": "mail-incoming", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/mail-search", "name": "mail-search", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/mail-send-email-message", "name": "mail-send-email-message", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/mail-send-envelope", "name": "mail-send-envelope", "keywords": [], "content": "\n\n\n" }, { "id": "mail/mail-send-reply-all", "name": "mail-send-reply-all", "keywords": [], "content": "\n\n\n" }, { "id": "mail/sad-face", "name": "sad-face", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/send-email", "name": "send-email", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/sign-at", "name": "sign-at", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/sign-hashtag", "name": "sign-hashtag", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/smiley-angry", "name": "smiley-angry", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/smiley-cool", "name": "smiley-cool", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/smiley-crying-1", "name": "smiley-crying-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/smiley-cute", "name": "smiley-cute", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/smiley-drool", "name": "smiley-drool", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/smiley-emoji-kiss-nervous", "name": "smiley-emoji-kiss-nervous", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/smiley-emoji-terrified", "name": "smiley-emoji-terrified", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/smiley-grumpy", "name": "smiley-grumpy", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/smiley-happy", "name": "smiley-happy", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/smiley-in-love", "name": "smiley-in-love", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/smiley-kiss", "name": "smiley-kiss", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "mail/smiley-laughing-3", "name": "smiley-laughing-3", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" } ], "map_travel": [ { "id": "map_travel/airplane", "name": "airplane", "keywords": [], "content": "\n\n\n" }, { "id": "map_travel/airport-plane-transit", "name": "airport-plane-transit", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/airport-plane", "name": "airport-plane", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/airport-security", "name": "airport-security", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/anchor", "name": "anchor", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/baggage", "name": "baggage", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/beach", "name": "beach", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/bicycle-bike", "name": "bicycle-bike", "keywords": [], "content": "\n\n\n" }, { "id": "map_travel/braille-blind", "name": "braille-blind", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/bus", "name": "bus", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/camping-tent", "name": "camping-tent", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/cane", "name": "cane", "keywords": [], "content": "\n\n\n" }, { "id": "map_travel/capitol", "name": "capitol", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/car-battery-charging", "name": "car-battery-charging", "keywords": [], "content": "\n\n\n" }, { "id": "map_travel/car-taxi-1", "name": "car-taxi-1", "keywords": [], "content": "\n\n\n\n\n" }, { "id": "map_travel/city-hall", "name": "city-hall", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/compass-navigator", "name": "compass-navigator", "keywords": [], "content": "\n\n\n" }, { "id": "map_travel/crutch", "name": "crutch", "keywords": [], "content": "\n\n\n" }, { "id": "map_travel/dangerous-zone-sign", "name": "dangerous-zone-sign", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/earth-1", "name": "earth-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/earth-airplane", "name": "earth-airplane", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/emergency-exit", "name": "emergency-exit", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/fire-alarm-2", "name": "fire-alarm-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/fire-extinguisher-sign", "name": "fire-extinguisher-sign", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/gas-station-fuel-petroleum", "name": "gas-station-fuel-petroleum", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/hearing-deaf-1", "name": "hearing-deaf-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/hearing-deaf-2", "name": "hearing-deaf-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/high-speed-train-front", "name": "high-speed-train-front", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/hot-spring", "name": "hot-spring", "keywords": [], "content": "\n\n\n" }, { "id": "map_travel/hotel-air-conditioner", "name": "hotel-air-conditioner", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/hotel-bed-2", "name": "hotel-bed-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/hotel-laundry", "name": "hotel-laundry", "keywords": [], "content": "\n\n\n" }, { "id": "map_travel/hotel-one-star", "name": "hotel-one-star", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/hotel-shower-head", "name": "hotel-shower-head", "keywords": [], "content": "\n\n\n" }, { "id": "map_travel/hotel-two-star", "name": "hotel-two-star", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/information-desk-customer", "name": "information-desk-customer", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/information-desk", "name": "information-desk", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/iron", "name": "iron", "keywords": [], "content": "\n\n\n" }, { "id": "map_travel/ladder", "name": "ladder", "keywords": [], "content": "\n\n\n" }, { "id": "map_travel/lift-disability", "name": "lift-disability", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/lift", "name": "lift", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/location-compass-1", "name": "location-compass-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/location-pin-3", "name": "location-pin-3", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/location-pin-disabled", "name": "location-pin-disabled", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/location-target-1", "name": "location-target-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/lost-and-found", "name": "lost-and-found", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/man-symbol", "name": "man-symbol", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/map-fold", "name": "map-fold", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/navigation-arrow-off", "name": "navigation-arrow-off", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/navigation-arrow-on", "name": "navigation-arrow-on", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/parking-sign", "name": "parking-sign", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/parliament", "name": "parliament", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/passport", "name": "passport", "keywords": [], "content": "\n\n\n" }, { "id": "map_travel/pet-paw", "name": "pet-paw", "keywords": [], "content": "\n\n\n" }, { "id": "map_travel/pets-allowed", "name": "pets-allowed", "keywords": [], "content": "\n\n\n" }, { "id": "map_travel/pool-ladder", "name": "pool-ladder", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/rock-slide", "name": "rock-slide", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/sail-ship", "name": "sail-ship", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/school-bus-side", "name": "school-bus-side", "keywords": [], "content": "\n\n\n" }, { "id": "map_travel/smoke-detector", "name": "smoke-detector", "keywords": [], "content": "\n\n\n" }, { "id": "map_travel/smoking-area", "name": "smoking-area", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/snorkle", "name": "snorkle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/steering-wheel", "name": "steering-wheel", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/street-road", "name": "street-road", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/street-sign", "name": "street-sign", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/take-off", "name": "take-off", "keywords": [], "content": "\n\n\n" }, { "id": "map_travel/toilet-man", "name": "toilet-man", "keywords": [], "content": "\n\n\n" }, { "id": "map_travel/toilet-sign-man-woman-2", "name": "toilet-sign-man-woman-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/toilet-women", "name": "toilet-women", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/traffic-cone", "name": "traffic-cone", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "map_travel/triangle-flag", "name": "triangle-flag", "keywords": [], "content": "\n\n\n" }, { "id": "map_travel/wheelchair-1", "name": "wheelchair-1", "keywords": [], "content": "\n\n\n" }, { "id": "map_travel/woman-symbol", "name": "woman-symbol", "keywords": [], "content": "\n\n\n" } ], "money_shopping": [ { "id": "money_shopping/annoncement-megaphone", "name": "annoncement-megaphone", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/backpack", "name": "backpack", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/bag-dollar", "name": "bag-dollar", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/bag-pound", "name": "bag-pound", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/bag-rupee", "name": "bag-rupee", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/bag-suitcase-1", "name": "bag-suitcase-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/bag-suitcase-2", "name": "bag-suitcase-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/bag-yen", "name": "bag-yen", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/bag", "name": "bag", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/ball", "name": "ball", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/bank", "name": "bank", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/beanie", "name": "beanie", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/bill-1", "name": "bill-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/bill-2", "name": "bill-2", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/bill-4", "name": "bill-4", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/bill-cashless", "name": "bill-cashless", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/binance-circle", "name": "binance-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/bitcoin", "name": "bitcoin", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/bow-tie", "name": "bow-tie", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/briefcase-dollar", "name": "briefcase-dollar", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/building-2", "name": "building-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/business-card", "name": "business-card", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/business-handshake", "name": "business-handshake", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/business-idea-money", "name": "business-idea-money", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/business-profession-home-office", "name": "business-profession-home-office", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/business-progress-bar-2", "name": "business-progress-bar-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/business-user-curriculum", "name": "business-user-curriculum", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/calculator-1", "name": "calculator-1", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/calculator-2", "name": "calculator-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/cane", "name": "cane", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/chair", "name": "chair", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/closet", "name": "closet", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/coin-share", "name": "coin-share", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/coins-stack", "name": "coins-stack", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/credit-card-1", "name": "credit-card-1", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/credit-card-2", "name": "credit-card-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/diamond-2", "name": "diamond-2", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/discount-percent-badge", "name": "discount-percent-badge", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/discount-percent-circle", "name": "discount-percent-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/discount-percent-coupon", "name": "discount-percent-coupon", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/discount-percent-cutout", "name": "discount-percent-cutout", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/discount-percent-fire", "name": "discount-percent-fire", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/dollar-coin-1", "name": "dollar-coin-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/dollar-coin", "name": "dollar-coin", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/dressing-table", "name": "dressing-table", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/ethereum-circle", "name": "ethereum-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/ethereum", "name": "ethereum", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/euro", "name": "euro", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/gift-2", "name": "gift-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/gift", "name": "gift", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/gold", "name": "gold", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/graph-arrow-decrease", "name": "graph-arrow-decrease", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/graph-arrow-increase", "name": "graph-arrow-increase", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/graph-bar-decrease", "name": "graph-bar-decrease", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/graph-bar-increase", "name": "graph-bar-increase", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/graph-dot", "name": "graph-dot", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/graph", "name": "graph", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/investment-selection", "name": "investment-selection", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/justice-hammer", "name": "justice-hammer", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/justice-scale-1", "name": "justice-scale-1", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/justice-scale-2", "name": "justice-scale-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/lipstick", "name": "lipstick", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/make-up-brush", "name": "make-up-brush", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/moustache", "name": "moustache", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/mouth-lip", "name": "mouth-lip", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/necklace", "name": "necklace", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/necktie", "name": "necktie", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/payment-10", "name": "payment-10", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/payment-cash-out-3", "name": "payment-cash-out-3", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/pie-chart", "name": "pie-chart", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/piggy-bank", "name": "piggy-bank", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/polka-dot-circle", "name": "polka-dot-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/production-belt", "name": "production-belt", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/qr-code", "name": "qr-code", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/receipt-add", "name": "receipt-add", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/receipt-check", "name": "receipt-check", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/receipt-subtract", "name": "receipt-subtract", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/receipt", "name": "receipt", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/safe-vault", "name": "safe-vault", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/scanner-3", "name": "scanner-3", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/scanner-bar-code", "name": "scanner-bar-code", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/shelf", "name": "shelf", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/shopping-bag-hand-bag-2", "name": "shopping-bag-hand-bag-2", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/shopping-basket-1", "name": "shopping-basket-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/shopping-basket-2", "name": "shopping-basket-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/shopping-cart-1", "name": "shopping-cart-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/shopping-cart-2", "name": "shopping-cart-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/shopping-cart-3", "name": "shopping-cart-3", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/shopping-cart-add", "name": "shopping-cart-add", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/shopping-cart-check", "name": "shopping-cart-check", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/shopping-cart-subtract", "name": "shopping-cart-subtract", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/signage-3", "name": "signage-3", "keywords": [], "content": "\n\n\n" }, { "id": "money_shopping/signage-4", "name": "signage-4", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/startup", "name": "startup", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/stock", "name": "stock", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/store-1", "name": "store-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/store-2", "name": "store-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/store-computer", "name": "store-computer", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/subscription-cashflow", "name": "subscription-cashflow", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/tag", "name": "tag", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/tall-hat", "name": "tall-hat", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/target-3", "name": "target-3", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/target", "name": "target", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/wallet-purse", "name": "wallet-purse", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/wallet", "name": "wallet", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/xrp-circle", "name": "xrp-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/yuan-circle", "name": "yuan-circle", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "money_shopping/yuan", "name": "yuan", "keywords": [], "content": "\n\n\n" } ], "nature_ecology": [ { "id": "nature_ecology/affordable-and-clean-energy", "name": "affordable-and-clean-energy", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/alien", "name": "alien", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/bone", "name": "bone", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/cat-1", "name": "cat-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/circle-flask", "name": "circle-flask", "keywords": [], "content": "\n\n\n" }, { "id": "nature_ecology/clean-water-and-sanitation", "name": "clean-water-and-sanitation", "keywords": [], "content": "\n\n\n" }, { "id": "nature_ecology/comet", "name": "comet", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/decent-work-and-economic-growth", "name": "decent-work-and-economic-growth", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/dna", "name": "dna", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/erlenmeyer-flask", "name": "erlenmeyer-flask", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/flower", "name": "flower", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/galaxy-1", "name": "galaxy-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/galaxy-2", "name": "galaxy-2", "keywords": [], "content": "\n\n\n" }, { "id": "nature_ecology/gender-equality", "name": "gender-equality", "keywords": [], "content": "\n\n\n" }, { "id": "nature_ecology/good-health-and-well-being", "name": "good-health-and-well-being", "keywords": [], "content": "\n\n\n" }, { "id": "nature_ecology/industry-innovation-and-infrastructure", "name": "industry-innovation-and-infrastructure", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/leaf", "name": "leaf", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/log", "name": "log", "keywords": [], "content": "\n\n\n" }, { "id": "nature_ecology/no-poverty", "name": "no-poverty", "keywords": [], "content": "\n\n\n" }, { "id": "nature_ecology/octopus", "name": "octopus", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/planet", "name": "planet", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/potted-flower-tulip", "name": "potted-flower-tulip", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/quality-education", "name": "quality-education", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/rainbow", "name": "rainbow", "keywords": [], "content": "\n\n\n" }, { "id": "nature_ecology/recycle-1", "name": "recycle-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/reduced-inequalities", "name": "reduced-inequalities", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/rose", "name": "rose", "keywords": [], "content": "\n\n\n" }, { "id": "nature_ecology/shell", "name": "shell", "keywords": [], "content": "\n\n\n" }, { "id": "nature_ecology/shovel-rake", "name": "shovel-rake", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/sprout", "name": "sprout", "keywords": [], "content": "\n\n\n" }, { "id": "nature_ecology/telescope", "name": "telescope", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/test-tube", "name": "test-tube", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/tidal-wave", "name": "tidal-wave", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/tree-2", "name": "tree-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/tree-3", "name": "tree-3", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/volcano", "name": "volcano", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "nature_ecology/windmill", "name": "windmill", "keywords": [], "content": "\n\n\n" }, { "id": "nature_ecology/zero-hunger", "name": "zero-hunger", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" } ], "phone": [ { "id": "phone/airplane-disabled", "name": "airplane-disabled", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "phone/airplane-enabled", "name": "airplane-enabled", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "phone/back-camera-1", "name": "back-camera-1", "keywords": [], "content": "\n\n\n" }, { "id": "phone/call-hang-up", "name": "call-hang-up", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "phone/cellular-network-4g", "name": "cellular-network-4g", "keywords": [], "content": "\n\n\n" }, { "id": "phone/cellular-network-5g", "name": "cellular-network-5g", "keywords": [], "content": "\n\n\n" }, { "id": "phone/cellular-network-lte", "name": "cellular-network-lte", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "phone/contact-phonebook-2", "name": "contact-phonebook-2", "keywords": [], "content": "\n\n\n" }, { "id": "phone/hang-up-1", "name": "hang-up-1", "keywords": [], "content": "\n\n\n" }, { "id": "phone/hang-up-2", "name": "hang-up-2", "keywords": [], "content": "\n\n\n" }, { "id": "phone/incoming-call", "name": "incoming-call", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "phone/missed-call", "name": "missed-call", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "phone/notification-alarm-2", "name": "notification-alarm-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "phone/notification-application-1", "name": "notification-application-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "phone/notification-application-2", "name": "notification-application-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "phone/notification-message-alert", "name": "notification-message-alert", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "phone/outgoing-call", "name": "outgoing-call", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "phone/phone-mobile-phone", "name": "phone-mobile-phone", "keywords": [], "content": "\n\n\n" }, { "id": "phone/phone-qr", "name": "phone-qr", "keywords": [], "content": "\n\n\n" }, { "id": "phone/phone-ringing-1", "name": "phone-ringing-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "phone/phone-ringing-2", "name": "phone-ringing-2", "keywords": [], "content": "\n\n\n" }, { "id": "phone/phone", "name": "phone", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "phone/signal-full", "name": "signal-full", "keywords": [], "content": "\n\n\n" }, { "id": "phone/signal-low", "name": "signal-low", "keywords": [], "content": "\n\n\n" }, { "id": "phone/signal-medium", "name": "signal-medium", "keywords": [], "content": "\n\n\n" }, { "id": "phone/signal-none", "name": "signal-none", "keywords": [], "content": "\n\n\n" } ], "programing": [ { "id": "programing/application-add", "name": "application-add", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/bracket", "name": "bracket", "keywords": [], "content": "\n\n\n" }, { "id": "programing/browser-add", "name": "browser-add", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/browser-block", "name": "browser-block", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/browser-build", "name": "browser-build", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/browser-check", "name": "browser-check", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/browser-delete", "name": "browser-delete", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/browser-hash", "name": "browser-hash", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/browser-lock", "name": "browser-lock", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/browser-multiple-window", "name": "browser-multiple-window", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/browser-remove", "name": "browser-remove", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/browser-website-1", "name": "browser-website-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/bug-antivirus-debugging", "name": "bug-antivirus-debugging", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/bug-antivirus-shield", "name": "bug-antivirus-shield", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/bug-virus-browser", "name": "bug-virus-browser", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/bug-virus-document", "name": "bug-virus-document", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/bug-virus-folder", "name": "bug-virus-folder", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/bug", "name": "bug", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/cloud-add", "name": "cloud-add", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/cloud-block", "name": "cloud-block", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/cloud-check", "name": "cloud-check", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/cloud-data-transfer", "name": "cloud-data-transfer", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/cloud-refresh", "name": "cloud-refresh", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/cloud-share", "name": "cloud-share", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/cloud-warning", "name": "cloud-warning", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/cloud-wifi", "name": "cloud-wifi", "keywords": [], "content": "\n\n\n" }, { "id": "programing/code-analysis", "name": "code-analysis", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/code-monitor-1", "name": "code-monitor-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/code-monitor-2", "name": "code-monitor-2", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/css-three", "name": "css-three", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/curly-brackets", "name": "curly-brackets", "keywords": [], "content": "\n\n\n" }, { "id": "programing/file-code-1", "name": "file-code-1", "keywords": [], "content": "\n\n\n" }, { "id": "programing/incognito-mode", "name": "incognito-mode", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/insert-cloud-video", "name": "insert-cloud-video", "keywords": [], "content": "\n\n\n" }, { "id": "programing/markdown-circle-programming", "name": "markdown-circle-programming", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/markdown-document-programming", "name": "markdown-document-programming", "keywords": [], "content": "\n\n\n" }, { "id": "programing/module-puzzle-1", "name": "module-puzzle-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/module-puzzle-3", "name": "module-puzzle-3", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/module-three", "name": "module-three", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "programing/rss-square", "name": "rss-square", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" } ], "shipping": [ { "id": "shipping/box-sign", "name": "box-sign", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "shipping/container", "name": "container", "keywords": [], "content": "\n\n\n" }, { "id": "shipping/fragile", "name": "fragile", "keywords": [], "content": "\n\n\n" }, { "id": "shipping/parachute-drop", "name": "parachute-drop", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "shipping/shipment-add", "name": "shipment-add", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "shipping/shipment-check", "name": "shipment-check", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "shipping/shipment-download", "name": "shipment-download", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "shipping/shipment-remove", "name": "shipment-remove", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "shipping/shipment-upload", "name": "shipment-upload", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "shipping/shipping-box-1", "name": "shipping-box-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "shipping/shipping-truck", "name": "shipping-truck", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "shipping/transfer-motorcycle", "name": "transfer-motorcycle", "keywords": [], "content": "\n\n\n" }, { "id": "shipping/transfer-van", "name": "transfer-van", "keywords": [], "content": "\n\n\n" }, { "id": "shipping/warehouse-1", "name": "warehouse-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" } ], "work_education": [ { "id": "work_education/book-reading", "name": "book-reading", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "work_education/class-lesson", "name": "class-lesson", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "work_education/collaborations-idea", "name": "collaborations-idea", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "work_education/definition-search-book", "name": "definition-search-book", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "work_education/dictionary-language-book", "name": "dictionary-language-book", "keywords": [], "content": "\n\n\n" }, { "id": "work_education/global-learning", "name": "global-learning", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "work_education/graduation-cap", "name": "graduation-cap", "keywords": [], "content": "\n\n\n" }, { "id": "work_education/group-meeting-call", "name": "group-meeting-call", "keywords": [], "content": "\n\n\n" }, { "id": "work_education/office-building-1", "name": "office-building-1", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "work_education/office-worker", "name": "office-worker", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "work_education/search-dollar", "name": "search-dollar", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" }, { "id": "work_education/strategy-tasks", "name": "strategy-tasks", "keywords": [], "content": "\n\n\n" }, { "id": "work_education/task-list", "name": "task-list", "keywords": [], "content": "\n\n\n" }, { "id": "work_education/workspace-desk", "name": "workspace-desk", "keywords": [], "content": "\n\n\n\n\n\n\n\n\n\n" } ] } \ No newline at end of file diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/auto-flash.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/auto-flash.svg new file mode 100644 index 0000000000..0c1936fb80 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/auto-flash.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/camera-1.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/camera-1.svg new file mode 100644 index 0000000000..6b6609071c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/camera-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/camera-disabled.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/camera-disabled.svg new file mode 100644 index 0000000000..4f4c45d181 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/camera-disabled.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/camera-loading.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/camera-loading.svg new file mode 100644 index 0000000000..ad3ec3d08d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/camera-loading.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/camera-square.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/camera-square.svg new file mode 100644 index 0000000000..f90f048eaf --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/camera-square.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/composition-oval.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/composition-oval.svg new file mode 100644 index 0000000000..1799610d70 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/composition-oval.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/composition-vertical.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/composition-vertical.svg new file mode 100644 index 0000000000..758a66a9a2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/composition-vertical.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/compsition-horizontal.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/compsition-horizontal.svg new file mode 100644 index 0000000000..b4b5ed760d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/compsition-horizontal.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/edit-image-photo.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/edit-image-photo.svg new file mode 100644 index 0000000000..fc9c7e8b3f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/edit-image-photo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/film-roll-1.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/film-roll-1.svg new file mode 100644 index 0000000000..d657abec5d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/film-roll-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/film-slate.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/film-slate.svg new file mode 100644 index 0000000000..8fd8f3fed8 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/film-slate.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/flash-1.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/flash-1.svg new file mode 100644 index 0000000000..f1814e8186 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/flash-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/flash-2.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/flash-2.svg new file mode 100644 index 0000000000..24d2d68e07 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/flash-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/flash-3.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/flash-3.svg new file mode 100644 index 0000000000..e98c8193e9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/flash-3.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/flash-off.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/flash-off.svg new file mode 100644 index 0000000000..4260106b57 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/flash-off.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/flower.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/flower.svg new file mode 100644 index 0000000000..87981fa4a1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/flower.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/focus-points.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/focus-points.svg new file mode 100644 index 0000000000..149495c4af --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/focus-points.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/landscape-2.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/landscape-2.svg new file mode 100644 index 0000000000..ec970a9893 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/landscape-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/landscape-setting.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/landscape-setting.svg new file mode 100644 index 0000000000..c87b58d38b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/landscape-setting.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/laptop-camera.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/laptop-camera.svg new file mode 100644 index 0000000000..88d1c7bb8f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/laptop-camera.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/mobile-phone-camera.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/mobile-phone-camera.svg new file mode 100644 index 0000000000..b7b69aa738 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/mobile-phone-camera.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/orientation-landscape.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/orientation-landscape.svg new file mode 100644 index 0000000000..c432b7b046 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/orientation-landscape.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/orientation-portrait.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/orientation-portrait.svg new file mode 100644 index 0000000000..deaf60faf6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/orientation-portrait.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/images_photography/polaroid-four.svg b/frontend/appflowy_web_app/public/af_icons/images_photography/polaroid-four.svg new file mode 100644 index 0000000000..6e9121cd50 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/images_photography/polaroid-four.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/add-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/add-1.svg new file mode 100644 index 0000000000..dedf45912b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/add-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/add-bell-notification.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/add-bell-notification.svg new file mode 100644 index 0000000000..d8af9e31e5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/add-bell-notification.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/add-circle.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/add-circle.svg new file mode 100644 index 0000000000..4e6af27c9a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/add-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/add-layer-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/add-layer-2.svg new file mode 100644 index 0000000000..5027acb248 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/add-layer-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/add-square.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/add-square.svg new file mode 100644 index 0000000000..1900a45c11 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/add-square.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/alarm-clock.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/alarm-clock.svg new file mode 100644 index 0000000000..773ca81fe6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/alarm-clock.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/align-back-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/align-back-1.svg new file mode 100644 index 0000000000..8045f92e3d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/align-back-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/align-center.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/align-center.svg new file mode 100644 index 0000000000..25dd359f6a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/align-center.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/align-front-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/align-front-1.svg new file mode 100644 index 0000000000..402eb326da --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/align-front-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/align-left.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/align-left.svg new file mode 100644 index 0000000000..e19e815cfb --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/align-left.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/align-right.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/align-right.svg new file mode 100644 index 0000000000..3ff840a813 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/align-right.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/ampersand.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/ampersand.svg new file mode 100644 index 0000000000..11da33fb20 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/ampersand.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/archive-box.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/archive-box.svg new file mode 100644 index 0000000000..3816bf9f6c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/archive-box.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-bend-left-down-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-bend-left-down-2.svg new file mode 100644 index 0000000000..7df296c604 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-bend-left-down-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-bend-right-down-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-bend-right-down-2.svg new file mode 100644 index 0000000000..4d351c0f8e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-bend-right-down-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-crossover-down.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-crossover-down.svg new file mode 100644 index 0000000000..c824a1d2aa --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-crossover-down.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-crossover-left.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-crossover-left.svg new file mode 100644 index 0000000000..c64e0771b0 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-crossover-left.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-crossover-right.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-crossover-right.svg new file mode 100644 index 0000000000..1e87e2927b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-crossover-right.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-crossover-up.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-crossover-up.svg new file mode 100644 index 0000000000..8707846460 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-crossover-up.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-cursor-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-cursor-1.svg new file mode 100644 index 0000000000..1d4948c62e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-cursor-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-cursor-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-cursor-2.svg new file mode 100644 index 0000000000..2fddfa485d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-cursor-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-curvy-up-down-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-curvy-up-down-1.svg new file mode 100644 index 0000000000..7df202b6df --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-curvy-up-down-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-curvy-up-down-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-curvy-up-down-2.svg new file mode 100644 index 0000000000..65762b3f51 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-curvy-up-down-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-down-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-down-2.svg new file mode 100644 index 0000000000..1eacf2b68d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-down-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-down-dashed-square.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-down-dashed-square.svg new file mode 100644 index 0000000000..7e3f1a5a40 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-down-dashed-square.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-expand.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-expand.svg new file mode 100644 index 0000000000..6a282421ea --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-expand.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-infinite-loop.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-infinite-loop.svg new file mode 100644 index 0000000000..a586e55081 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-infinite-loop.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-move.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-move.svg new file mode 100644 index 0000000000..b106268e87 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-move.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-reload-horizontal-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-reload-horizontal-1.svg new file mode 100644 index 0000000000..0b0a93b630 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-reload-horizontal-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-reload-horizontal-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-reload-horizontal-2.svg new file mode 100644 index 0000000000..a649467631 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-reload-horizontal-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-reload-vertical-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-reload-vertical-1.svg new file mode 100644 index 0000000000..933f27a9e9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-reload-vertical-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-reload-vertical-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-reload-vertical-2.svg new file mode 100644 index 0000000000..a307381d2c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-reload-vertical-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-roadmap.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-roadmap.svg new file mode 100644 index 0000000000..70870883bb --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-roadmap.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-round-left.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-round-left.svg new file mode 100644 index 0000000000..f952023502 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-round-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-round-right.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-round-right.svg new file mode 100644 index 0000000000..e335b2a94f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-round-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-shrink-diagonal-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-shrink-diagonal-1.svg new file mode 100644 index 0000000000..613ce1cabf --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-shrink-diagonal-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-shrink-diagonal-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-shrink-diagonal-2.svg new file mode 100644 index 0000000000..286c959465 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-shrink-diagonal-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-shrink.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-shrink.svg new file mode 100644 index 0000000000..19489b132a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-shrink.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-transfer-diagonal-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-transfer-diagonal-1.svg new file mode 100644 index 0000000000..3e6efceb00 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-transfer-diagonal-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-transfer-diagonal-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-transfer-diagonal-2.svg new file mode 100644 index 0000000000..db9160cbfd --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-transfer-diagonal-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-transfer-diagonal-3.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-transfer-diagonal-3.svg new file mode 100644 index 0000000000..63b8361656 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-transfer-diagonal-3.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-up-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-up-1.svg new file mode 100644 index 0000000000..6554aeefb4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-up-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-up-dashed-square.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-up-dashed-square.svg new file mode 100644 index 0000000000..e583df64a3 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/arrow-up-dashed-square.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/ascending-number-order.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/ascending-number-order.svg new file mode 100644 index 0000000000..8b8fe17bb3 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/ascending-number-order.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/attribution.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/attribution.svg new file mode 100644 index 0000000000..9118a362ed --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/attribution.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/blank-calendar.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/blank-calendar.svg new file mode 100644 index 0000000000..cdbe62e663 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/blank-calendar.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/blank-notepad.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/blank-notepad.svg new file mode 100644 index 0000000000..b1f814264b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/blank-notepad.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/block-bell-notification.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/block-bell-notification.svg new file mode 100644 index 0000000000..fd9389548a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/block-bell-notification.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/bomb.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/bomb.svg new file mode 100644 index 0000000000..972746f65e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/bomb.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/bookmark.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/bookmark.svg new file mode 100644 index 0000000000..808752dc47 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/bookmark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/braces-circle.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/braces-circle.svg new file mode 100644 index 0000000000..9ce91cffd0 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/braces-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/brightness-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/brightness-1.svg new file mode 100644 index 0000000000..8374202149 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/brightness-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/brightness-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/brightness-2.svg new file mode 100644 index 0000000000..343c13113d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/brightness-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/brightness-3.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/brightness-3.svg new file mode 100644 index 0000000000..d18adb4fc8 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/brightness-3.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/broken-link-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/broken-link-2.svg new file mode 100644 index 0000000000..f2dc320b50 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/broken-link-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/bullet-list.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/bullet-list.svg new file mode 100644 index 0000000000..a282a82f70 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/bullet-list.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/calendar-add.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/calendar-add.svg new file mode 100644 index 0000000000..36d0fd2ef4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/calendar-add.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/calendar-edit.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/calendar-edit.svg new file mode 100644 index 0000000000..2d5296ae1c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/calendar-edit.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/calendar-jump-to-date.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/calendar-jump-to-date.svg new file mode 100644 index 0000000000..b9b39c8dbb --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/calendar-jump-to-date.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/calendar-star.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/calendar-star.svg new file mode 100644 index 0000000000..18de81b0bf --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/calendar-star.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/celsius.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/celsius.svg new file mode 100644 index 0000000000..42c694210d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/celsius.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/check-square.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/check-square.svg new file mode 100644 index 0000000000..fd78970303 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/check-square.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/check.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/check.svg new file mode 100644 index 0000000000..1a0d205a49 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/check.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/circle-clock.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/circle-clock.svg new file mode 100644 index 0000000000..66fea10946 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/circle-clock.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/circle.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/circle.svg new file mode 100644 index 0000000000..fc16218333 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/clipboard-add.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/clipboard-add.svg new file mode 100644 index 0000000000..ceea0cddff --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/clipboard-add.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/clipboard-check.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/clipboard-check.svg new file mode 100644 index 0000000000..5ac2b85299 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/clipboard-check.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/clipboard-remove.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/clipboard-remove.svg new file mode 100644 index 0000000000..db6feb1ee1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/clipboard-remove.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/cloud.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/cloud.svg new file mode 100644 index 0000000000..22a7dfa2cf --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/cloud.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/cog.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/cog.svg new file mode 100644 index 0000000000..f951e92137 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/cog.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/color-palette.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/color-palette.svg new file mode 100644 index 0000000000..05b7489367 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/color-palette.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/color-picker.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/color-picker.svg new file mode 100644 index 0000000000..9fde8baaa2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/color-picker.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/color-swatches.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/color-swatches.svg new file mode 100644 index 0000000000..5071d67161 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/color-swatches.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/cone-shape.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/cone-shape.svg new file mode 100644 index 0000000000..e5623415c6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/cone-shape.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/convert-PDF-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/convert-PDF-2.svg new file mode 100644 index 0000000000..ed7db40584 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/convert-PDF-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/copy-paste.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/copy-paste.svg new file mode 100644 index 0000000000..ce0fd6383c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/copy-paste.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/creative-commons.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/creative-commons.svg new file mode 100644 index 0000000000..7a3997e636 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/creative-commons.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/crop-selection.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/crop-selection.svg new file mode 100644 index 0000000000..4c5166cb65 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/crop-selection.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/crown.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/crown.svg new file mode 100644 index 0000000000..951fb68553 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/crown.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/customer-support-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/customer-support-1.svg new file mode 100644 index 0000000000..5593196fbf --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/customer-support-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/cut.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/cut.svg new file mode 100644 index 0000000000..8d63408f39 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/cut.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/dark-dislay-mode.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/dark-dislay-mode.svg new file mode 100644 index 0000000000..b5fddc9f7d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/dark-dislay-mode.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/dashboard-3.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/dashboard-3.svg new file mode 100644 index 0000000000..54eb799a01 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/dashboard-3.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/dashboard-circle.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/dashboard-circle.svg new file mode 100644 index 0000000000..e60ce62cdf --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/dashboard-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/delete-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/delete-1.svg new file mode 100644 index 0000000000..534ae11cba --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/delete-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/descending-number-order.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/descending-number-order.svg new file mode 100644 index 0000000000..9ce81193f3 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/descending-number-order.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/disable-bell-notification.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/disable-bell-notification.svg new file mode 100644 index 0000000000..2e1a02036a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/disable-bell-notification.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/disable-heart.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/disable-heart.svg new file mode 100644 index 0000000000..d3943473ef --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/disable-heart.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/division-circle.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/division-circle.svg new file mode 100644 index 0000000000..2695bb2aaa --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/division-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/download-box-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/download-box-1.svg new file mode 100644 index 0000000000..11bb09caba --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/download-box-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/download-circle.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/download-circle.svg new file mode 100644 index 0000000000..bf14c7df8d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/download-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/download-computer.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/download-computer.svg new file mode 100644 index 0000000000..d7ea9900f4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/download-computer.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/download-file.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/download-file.svg new file mode 100644 index 0000000000..a298a8eec1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/download-file.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/empty-clipboard.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/empty-clipboard.svg new file mode 100644 index 0000000000..5ea444ac50 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/empty-clipboard.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/equal-sign.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/equal-sign.svg new file mode 100644 index 0000000000..94fa93fc41 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/equal-sign.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/expand-horizontal-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/expand-horizontal-1.svg new file mode 100644 index 0000000000..108286e4b2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/expand-horizontal-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/expand-window-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/expand-window-2.svg new file mode 100644 index 0000000000..f04b40d461 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/expand-window-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/expand.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/expand.svg new file mode 100644 index 0000000000..adad5b6fc5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/expand.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/face-scan-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/face-scan-1.svg new file mode 100644 index 0000000000..468f7b9d25 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/face-scan-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/factorial.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/factorial.svg new file mode 100644 index 0000000000..127c8e2324 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/factorial.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/fahrenheit.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/fahrenheit.svg new file mode 100644 index 0000000000..3336086ece --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/fahrenheit.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/fastforward-clock.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/fastforward-clock.svg new file mode 100644 index 0000000000..c7d02240ea --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/fastforward-clock.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/file-add-alternate.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/file-add-alternate.svg new file mode 100644 index 0000000000..1df2d54768 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/file-add-alternate.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/file-delete-alternate.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/file-delete-alternate.svg new file mode 100644 index 0000000000..1dc099eaa6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/file-delete-alternate.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/file-remove-alternate.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/file-remove-alternate.svg new file mode 100644 index 0000000000..9c019dea7a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/file-remove-alternate.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/filter-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/filter-2.svg new file mode 100644 index 0000000000..b8f72f9e89 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/filter-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/fingerprint-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/fingerprint-1.svg new file mode 100644 index 0000000000..2d481b1916 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/fingerprint-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/fingerprint-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/fingerprint-2.svg new file mode 100644 index 0000000000..8216298e20 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/fingerprint-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/fist.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/fist.svg new file mode 100644 index 0000000000..7f9e043096 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/fist.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/fit-to-height-square.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/fit-to-height-square.svg new file mode 100644 index 0000000000..b8976428b2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/fit-to-height-square.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/flip-vertical-arrow-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/flip-vertical-arrow-2.svg new file mode 100644 index 0000000000..758b31b29a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/flip-vertical-arrow-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/flip-vertical-circle-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/flip-vertical-circle-1.svg new file mode 100644 index 0000000000..1be2ef6ffb --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/flip-vertical-circle-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/flip-vertical-square-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/flip-vertical-square-2.svg new file mode 100644 index 0000000000..dfbb30b0c1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/flip-vertical-square-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/folder-add.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/folder-add.svg new file mode 100644 index 0000000000..d21b28a584 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/folder-add.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/folder-check.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/folder-check.svg new file mode 100644 index 0000000000..e838527d46 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/folder-check.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/folder-delete.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/folder-delete.svg new file mode 100644 index 0000000000..7f39330a0b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/folder-delete.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/front-camera.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/front-camera.svg new file mode 100644 index 0000000000..1373e61f2d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/front-camera.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/gif-format.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/gif-format.svg new file mode 100644 index 0000000000..432e410130 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/gif-format.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/give-gift.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/give-gift.svg new file mode 100644 index 0000000000..8040687c5e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/give-gift.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/glasses.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/glasses.svg new file mode 100644 index 0000000000..d5feb7462d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/glasses.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/half-star-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/half-star-1.svg new file mode 100644 index 0000000000..57e9efaf7c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/half-star-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/hand-cursor.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/hand-cursor.svg new file mode 100644 index 0000000000..2d09bc7926 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/hand-cursor.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/hand-grab.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/hand-grab.svg new file mode 100644 index 0000000000..24eec4e453 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/hand-grab.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/heading-1-paragraph-styles-heading.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/heading-1-paragraph-styles-heading.svg new file mode 100644 index 0000000000..7bdad9cff9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/heading-1-paragraph-styles-heading.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/heading-2-paragraph-styles-heading.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/heading-2-paragraph-styles-heading.svg new file mode 100644 index 0000000000..53c948d7b2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/heading-2-paragraph-styles-heading.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/heading-3-paragraph-styles-heading.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/heading-3-paragraph-styles-heading.svg new file mode 100644 index 0000000000..69d6db3d3d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/heading-3-paragraph-styles-heading.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/heart.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/heart.svg new file mode 100644 index 0000000000..e525ec4e3d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/heart.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/help-chat-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/help-chat-2.svg new file mode 100644 index 0000000000..ee9b036743 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/help-chat-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/help-question-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/help-question-1.svg new file mode 100644 index 0000000000..e709c34077 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/help-question-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/hierarchy-10.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/hierarchy-10.svg new file mode 100644 index 0000000000..a39558ce91 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/hierarchy-10.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/hierarchy-13.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/hierarchy-13.svg new file mode 100644 index 0000000000..7a95cd6bb0 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/hierarchy-13.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/hierarchy-14.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/hierarchy-14.svg new file mode 100644 index 0000000000..8d7650b3ef --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/hierarchy-14.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/hierarchy-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/hierarchy-2.svg new file mode 100644 index 0000000000..7308894854 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/hierarchy-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/hierarchy-4.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/hierarchy-4.svg new file mode 100644 index 0000000000..24e31540de --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/hierarchy-4.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/hierarchy-7.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/hierarchy-7.svg new file mode 100644 index 0000000000..3485bea5e0 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/hierarchy-7.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/home-3.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/home-3.svg new file mode 100644 index 0000000000..36d1d77fbb --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/home-3.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/home-4.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/home-4.svg new file mode 100644 index 0000000000..c7bc580449 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/home-4.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/horizontal-menu-circle.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/horizontal-menu-circle.svg new file mode 100644 index 0000000000..a3091c3357 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/horizontal-menu-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/humidity-none.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/humidity-none.svg new file mode 100644 index 0000000000..c81c318039 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/humidity-none.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/image-blur.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/image-blur.svg new file mode 100644 index 0000000000..132f437695 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/image-blur.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/image-saturation.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/image-saturation.svg new file mode 100644 index 0000000000..5bfd1feb04 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/image-saturation.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/information-circle.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/information-circle.svg new file mode 100644 index 0000000000..8ea9d8a04b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/information-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/input-box.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/input-box.svg new file mode 100644 index 0000000000..6369712e83 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/input-box.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/insert-side.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/insert-side.svg new file mode 100644 index 0000000000..a8cb471c5b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/insert-side.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/insert-top-left.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/insert-top-left.svg new file mode 100644 index 0000000000..248fa83cb8 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/insert-top-left.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/insert-top-right.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/insert-top-right.svg new file mode 100644 index 0000000000..e8729e632b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/insert-top-right.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/invisible-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/invisible-1.svg new file mode 100644 index 0000000000..2faf921e82 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/invisible-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/invisible-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/invisible-2.svg new file mode 100644 index 0000000000..df9c4e5e42 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/invisible-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/jump-object.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/jump-object.svg new file mode 100644 index 0000000000..2859e74ef9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/jump-object.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/key.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/key.svg new file mode 100644 index 0000000000..738976a249 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/key.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/keyhole-lock-circle.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/keyhole-lock-circle.svg new file mode 100644 index 0000000000..ef1cd3be8e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/keyhole-lock-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/lasso-tool.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/lasso-tool.svg new file mode 100644 index 0000000000..ff0238cdf7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/lasso-tool.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/layers-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/layers-1.svg new file mode 100644 index 0000000000..8475e73e3b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/layers-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/layers-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/layers-2.svg new file mode 100644 index 0000000000..80ad0566b4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/layers-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/layout-window-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/layout-window-1.svg new file mode 100644 index 0000000000..111f879265 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/layout-window-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/layout-window-11.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/layout-window-11.svg new file mode 100644 index 0000000000..5ecd8b291b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/layout-window-11.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/layout-window-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/layout-window-2.svg new file mode 100644 index 0000000000..9539f79aca --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/layout-window-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/layout-window-8.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/layout-window-8.svg new file mode 100644 index 0000000000..8ddfa4d969 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/layout-window-8.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/lightbulb.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/lightbulb.svg new file mode 100644 index 0000000000..84f1978687 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/lightbulb.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/like-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/like-1.svg new file mode 100644 index 0000000000..ab7b5ac62c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/like-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/link-chain.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/link-chain.svg new file mode 100644 index 0000000000..1e8c9ebf03 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/link-chain.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/live-video.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/live-video.svg new file mode 100644 index 0000000000..74eaac7e5d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/live-video.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/lock-rotation.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/lock-rotation.svg new file mode 100644 index 0000000000..641f61bca4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/lock-rotation.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/login-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/login-1.svg new file mode 100644 index 0000000000..1bed479e06 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/login-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/logout-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/logout-1.svg new file mode 100644 index 0000000000..d5aa2c018b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/logout-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/loop-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/loop-1.svg new file mode 100644 index 0000000000..2ec2b2bd1b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/loop-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/magic-wand-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/magic-wand-2.svg new file mode 100644 index 0000000000..4ddba53433 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/magic-wand-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/magnifying-glass-circle.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/magnifying-glass-circle.svg new file mode 100644 index 0000000000..7c34859cc8 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/magnifying-glass-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/magnifying-glass.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/magnifying-glass.svg new file mode 100644 index 0000000000..d7884201c5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/magnifying-glass.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/manual-book.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/manual-book.svg new file mode 100644 index 0000000000..2057e661ed --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/manual-book.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/megaphone-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/megaphone-2.svg new file mode 100644 index 0000000000..4f3236db97 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/megaphone-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/minimize-window-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/minimize-window-2.svg new file mode 100644 index 0000000000..0c898ad6b3 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/minimize-window-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/moon-cloud.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/moon-cloud.svg new file mode 100644 index 0000000000..75a3f4d90e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/moon-cloud.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/move-left.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/move-left.svg new file mode 100644 index 0000000000..3d1f5c3b1f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/move-left.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/move-right.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/move-right.svg new file mode 100644 index 0000000000..333693da80 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/move-right.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/multiple-file-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/multiple-file-2.svg new file mode 100644 index 0000000000..a65117c01f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/multiple-file-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/music-folder-song.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/music-folder-song.svg new file mode 100644 index 0000000000..13e2814e47 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/music-folder-song.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/new-file.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/new-file.svg new file mode 100644 index 0000000000..0618a6f84e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/new-file.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/new-folder.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/new-folder.svg new file mode 100644 index 0000000000..897ec68112 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/new-folder.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/new-sticky-note.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/new-sticky-note.svg new file mode 100644 index 0000000000..2b9c67b187 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/new-sticky-note.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/not-equal-sign.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/not-equal-sign.svg new file mode 100644 index 0000000000..f24755f0d1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/not-equal-sign.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/ok-hand.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/ok-hand.svg new file mode 100644 index 0000000000..7a101d56e1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/ok-hand.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/one-finger-drag-horizontal.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/one-finger-drag-horizontal.svg new file mode 100644 index 0000000000..0f20eee768 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/one-finger-drag-horizontal.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/one-finger-drag-vertical.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/one-finger-drag-vertical.svg new file mode 100644 index 0000000000..44d28b3a69 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/one-finger-drag-vertical.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/one-finger-hold.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/one-finger-hold.svg new file mode 100644 index 0000000000..1945cd18fe --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/one-finger-hold.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/one-finger-tap.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/one-finger-tap.svg new file mode 100644 index 0000000000..af6d35a12f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/one-finger-tap.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/open-book.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/open-book.svg new file mode 100644 index 0000000000..7d0258d9ae --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/open-book.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/open-umbrella.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/open-umbrella.svg new file mode 100644 index 0000000000..694edaee6e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/open-umbrella.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/padlock-square-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/padlock-square-1.svg new file mode 100644 index 0000000000..c15e161f51 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/padlock-square-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/page-setting.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/page-setting.svg new file mode 100644 index 0000000000..05a50047b7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/page-setting.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/paint-bucket.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/paint-bucket.svg new file mode 100644 index 0000000000..bc0bb97da8 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/paint-bucket.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/paint-palette.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/paint-palette.svg new file mode 100644 index 0000000000..05a7cd2c17 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/paint-palette.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/paintbrush-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/paintbrush-1.svg new file mode 100644 index 0000000000..ac1d931e84 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/paintbrush-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/paintbrush-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/paintbrush-2.svg new file mode 100644 index 0000000000..ac8cbe43b4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/paintbrush-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/paperclip-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/paperclip-1.svg new file mode 100644 index 0000000000..2c42341300 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/paperclip-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/paragraph.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/paragraph.svg new file mode 100644 index 0000000000..077a43d46a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/paragraph.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/pathfinder-divide.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/pathfinder-divide.svg new file mode 100644 index 0000000000..11617189b9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/pathfinder-divide.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/pathfinder-exclude.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/pathfinder-exclude.svg new file mode 100644 index 0000000000..6e791326e0 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/pathfinder-exclude.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/pathfinder-intersect.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/pathfinder-intersect.svg new file mode 100644 index 0000000000..84050733ca --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/pathfinder-intersect.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/pathfinder-merge.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/pathfinder-merge.svg new file mode 100644 index 0000000000..81e6775419 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/pathfinder-merge.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/pathfinder-minus-front-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/pathfinder-minus-front-1.svg new file mode 100644 index 0000000000..ee9f455c92 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/pathfinder-minus-front-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/pathfinder-trim.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/pathfinder-trim.svg new file mode 100644 index 0000000000..6a8d72d908 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/pathfinder-trim.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/pathfinder-union.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/pathfinder-union.svg new file mode 100644 index 0000000000..470996d2bb --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/pathfinder-union.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/peace-hand.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/peace-hand.svg new file mode 100644 index 0000000000..6791449f42 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/peace-hand.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/pen-3.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/pen-3.svg new file mode 100644 index 0000000000..651b4a383a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/pen-3.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/pen-draw.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/pen-draw.svg new file mode 100644 index 0000000000..1923942612 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/pen-draw.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/pen-tool.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/pen-tool.svg new file mode 100644 index 0000000000..db0e8c253f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/pen-tool.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/pencil.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/pencil.svg new file mode 100644 index 0000000000..95251d86d9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/pencil.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/pentagon.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/pentagon.svg new file mode 100644 index 0000000000..c3a5663ef7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/pentagon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/pi-symbol-circle.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/pi-symbol-circle.svg new file mode 100644 index 0000000000..5656f8155a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/pi-symbol-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/pictures-folder-memories.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/pictures-folder-memories.svg new file mode 100644 index 0000000000..f7db57e6e7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/pictures-folder-memories.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/podium.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/podium.svg new file mode 100644 index 0000000000..5914889c53 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/podium.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/polygon.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/polygon.svg new file mode 100644 index 0000000000..93d003ae12 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/polygon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/praying-hand.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/praying-hand.svg new file mode 100644 index 0000000000..64e54f8d71 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/praying-hand.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/projector-board.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/projector-board.svg new file mode 100644 index 0000000000..e79950e656 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/projector-board.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/pyramid-shape.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/pyramid-shape.svg new file mode 100644 index 0000000000..a8544363c6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/pyramid-shape.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/quotation-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/quotation-2.svg new file mode 100644 index 0000000000..941b957351 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/quotation-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/radioactive-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/radioactive-2.svg new file mode 100644 index 0000000000..4bb4a1ad8f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/radioactive-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/rain-cloud.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/rain-cloud.svg new file mode 100644 index 0000000000..0ea0fc0369 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/rain-cloud.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/recycle-bin-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/recycle-bin-2.svg new file mode 100644 index 0000000000..71e8570525 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/recycle-bin-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/ringing-bell-notification.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/ringing-bell-notification.svg new file mode 100644 index 0000000000..fc194e471c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/ringing-bell-notification.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/rock-and-roll-hand.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/rock-and-roll-hand.svg new file mode 100644 index 0000000000..12b685624f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/rock-and-roll-hand.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/rotate-angle-45.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/rotate-angle-45.svg new file mode 100644 index 0000000000..697a2d232a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/rotate-angle-45.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/round-cap.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/round-cap.svg new file mode 100644 index 0000000000..ca90db1ada --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/round-cap.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/satellite-dish.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/satellite-dish.svg new file mode 100644 index 0000000000..900f43faa2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/satellite-dish.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/scanner.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/scanner.svg new file mode 100644 index 0000000000..a539ba8bcc --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/scanner.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/search-visual.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/search-visual.svg new file mode 100644 index 0000000000..01ae1a1551 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/search-visual.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/select-circle-area-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/select-circle-area-1.svg new file mode 100644 index 0000000000..aa4caab372 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/select-circle-area-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/share-link.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/share-link.svg new file mode 100644 index 0000000000..b7871bc70d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/share-link.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/shield-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/shield-1.svg new file mode 100644 index 0000000000..55ec4a5498 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/shield-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/shield-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/shield-2.svg new file mode 100644 index 0000000000..95eac8b8d1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/shield-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/shield-check.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/shield-check.svg new file mode 100644 index 0000000000..a50dedecf3 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/shield-check.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/shield-cross.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/shield-cross.svg new file mode 100644 index 0000000000..a9d68aeb87 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/shield-cross.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/shrink-horizontal-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/shrink-horizontal-1.svg new file mode 100644 index 0000000000..5211f9f9b0 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/shrink-horizontal-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/shuffle.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/shuffle.svg new file mode 100644 index 0000000000..794fdec2c4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/shuffle.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/sigma.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/sigma.svg new file mode 100644 index 0000000000..c552e8c07d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/sigma.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/skull-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/skull-1.svg new file mode 100644 index 0000000000..44937e48cc --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/skull-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/sleep.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/sleep.svg new file mode 100644 index 0000000000..20d55c012a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/sleep.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/snow-flake.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/snow-flake.svg new file mode 100644 index 0000000000..d1bb1f1d45 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/snow-flake.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/sort-descending.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/sort-descending.svg new file mode 100644 index 0000000000..912b92b88c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/sort-descending.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/spiral-shape.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/spiral-shape.svg new file mode 100644 index 0000000000..dfd002ef8b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/spiral-shape.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/split-vertical.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/split-vertical.svg new file mode 100644 index 0000000000..ce7c2bda52 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/split-vertical.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/spray-paint.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/spray-paint.svg new file mode 100644 index 0000000000..8e18a39c40 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/spray-paint.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/square-brackets-circle.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/square-brackets-circle.svg new file mode 100644 index 0000000000..3b75475809 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/square-brackets-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/square-cap.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/square-cap.svg new file mode 100644 index 0000000000..91c82353fc --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/square-cap.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/square-clock.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/square-clock.svg new file mode 100644 index 0000000000..cdcaf984fa --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/square-clock.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/square-root-x-circle.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/square-root-x-circle.svg new file mode 100644 index 0000000000..3b2dc980b8 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/square-root-x-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/star-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/star-1.svg new file mode 100644 index 0000000000..58a5c88759 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/star-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/star-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/star-2.svg new file mode 100644 index 0000000000..660bbbe347 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/star-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/star-badge.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/star-badge.svg new file mode 100644 index 0000000000..78307418c7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/star-badge.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/straight-cap.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/straight-cap.svg new file mode 100644 index 0000000000..a1b64c1675 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/straight-cap.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/subtract-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/subtract-1.svg new file mode 100644 index 0000000000..32300958c5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/subtract-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/subtract-circle.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/subtract-circle.svg new file mode 100644 index 0000000000..6bcdece9d1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/subtract-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/subtract-square.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/subtract-square.svg new file mode 100644 index 0000000000..0384f63da5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/subtract-square.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/sun-cloud.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/sun-cloud.svg new file mode 100644 index 0000000000..1606b89874 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/sun-cloud.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/synchronize-disable.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/synchronize-disable.svg new file mode 100644 index 0000000000..fe5ae9bc25 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/synchronize-disable.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/synchronize-warning.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/synchronize-warning.svg new file mode 100644 index 0000000000..3f773ad3ff --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/synchronize-warning.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/table-lamp-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/table-lamp-1.svg new file mode 100644 index 0000000000..a5859f39fc --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/table-lamp-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/tag.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/tag.svg new file mode 100644 index 0000000000..b79a4ff92f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/tag.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/text-flow-rows.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/text-flow-rows.svg new file mode 100644 index 0000000000..15977a72f7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/text-flow-rows.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/text-square.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/text-square.svg new file mode 100644 index 0000000000..b297b154de --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/text-square.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/text-style.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/text-style.svg new file mode 100644 index 0000000000..9c5ae09c44 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/text-style.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/thermometer.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/thermometer.svg new file mode 100644 index 0000000000..362672a374 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/thermometer.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/trending-content.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/trending-content.svg new file mode 100644 index 0000000000..42e3618f54 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/trending-content.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/trophy.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/trophy.svg new file mode 100644 index 0000000000..d05a23292b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/trophy.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/two-finger-drag-hotizontal.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/two-finger-drag-hotizontal.svg new file mode 100644 index 0000000000..fc07dc2fb2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/two-finger-drag-hotizontal.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/two-finger-tap.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/two-finger-tap.svg new file mode 100644 index 0000000000..638319a091 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/two-finger-tap.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/underline-text-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/underline-text-1.svg new file mode 100644 index 0000000000..daa443a4d9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/underline-text-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/upload-box-1.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/upload-box-1.svg new file mode 100644 index 0000000000..787314f476 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/upload-box-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/upload-circle.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/upload-circle.svg new file mode 100644 index 0000000000..886fa014f3 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/upload-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/upload-computer.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/upload-computer.svg new file mode 100644 index 0000000000..8784850a7e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/upload-computer.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/upload-file.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/upload-file.svg new file mode 100644 index 0000000000..c0696194ef --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/upload-file.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/user-add-plus.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/user-add-plus.svg new file mode 100644 index 0000000000..a95ceab231 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/user-add-plus.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/user-check-validate.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/user-check-validate.svg new file mode 100644 index 0000000000..d9bd0051e6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/user-check-validate.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/user-circle-single.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/user-circle-single.svg new file mode 100644 index 0000000000..a40b12549e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/user-circle-single.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/user-identifier-card.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/user-identifier-card.svg new file mode 100644 index 0000000000..bab5c06ac5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/user-identifier-card.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/user-multiple-circle.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/user-multiple-circle.svg new file mode 100644 index 0000000000..6740649fa4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/user-multiple-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/user-multiple-group.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/user-multiple-group.svg new file mode 100644 index 0000000000..07c4e2ffd0 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/user-multiple-group.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/user-profile-focus.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/user-profile-focus.svg new file mode 100644 index 0000000000..72f1381092 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/user-profile-focus.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/user-protection-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/user-protection-2.svg new file mode 100644 index 0000000000..adcd16e31d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/user-protection-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/user-remove-subtract.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/user-remove-subtract.svg new file mode 100644 index 0000000000..8b84f56060 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/user-remove-subtract.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/user-single-neutral-male.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/user-single-neutral-male.svg new file mode 100644 index 0000000000..7f81c29bfb --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/user-single-neutral-male.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/user-sync-online-in-person.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/user-sync-online-in-person.svg new file mode 100644 index 0000000000..71b68e2f37 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/user-sync-online-in-person.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/vertical-slider-square.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/vertical-slider-square.svg new file mode 100644 index 0000000000..0cf86e26e0 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/vertical-slider-square.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/video-swap-camera.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/video-swap-camera.svg new file mode 100644 index 0000000000..f7cdad5918 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/video-swap-camera.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/visible.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/visible.svg new file mode 100644 index 0000000000..343ffa0ca9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/visible.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/voice-scan-2.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/voice-scan-2.svg new file mode 100644 index 0000000000..8a083f13ad --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/voice-scan-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/waning-cresent-moon.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/waning-cresent-moon.svg new file mode 100644 index 0000000000..91dde28366 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/waning-cresent-moon.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/warning-octagon.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/warning-octagon.svg new file mode 100644 index 0000000000..52cc420522 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/warning-octagon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/interface_essential/warning-triangle.svg b/frontend/appflowy_web_app/public/af_icons/interface_essential/warning-triangle.svg new file mode 100644 index 0000000000..5f205c4c95 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/interface_essential/warning-triangle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-oval-notification.svg b/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-oval-notification.svg new file mode 100644 index 0000000000..320ab16d19 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-oval-notification.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-oval-smiley-1.svg b/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-oval-smiley-1.svg new file mode 100644 index 0000000000..b79fed59f7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-oval-smiley-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-oval-smiley-2.svg b/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-oval-smiley-2.svg new file mode 100644 index 0000000000..6f20c07292 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-oval-smiley-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-oval.svg b/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-oval.svg new file mode 100644 index 0000000000..74bfb2b1f1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-oval.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-square-block.svg b/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-square-block.svg new file mode 100644 index 0000000000..81e9132b68 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-square-block.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-square-question.svg b/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-square-question.svg new file mode 100644 index 0000000000..b09ee92a09 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-square-question.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-square-warning.svg b/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-square-warning.svg new file mode 100644 index 0000000000..e784e77e10 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-square-warning.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-square-write.svg b/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-square-write.svg new file mode 100644 index 0000000000..9dc5174dca --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-square-write.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-text-square.svg b/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-text-square.svg new file mode 100644 index 0000000000..60f7c3032b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-text-square.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-typing-oval.svg b/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-typing-oval.svg new file mode 100644 index 0000000000..05f9dc722d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/chat-bubble-typing-oval.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/chat-two-bubbles-oval.svg b/frontend/appflowy_web_app/public/af_icons/mail/chat-two-bubbles-oval.svg new file mode 100644 index 0000000000..068e2de39e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/chat-two-bubbles-oval.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/discussion-converstion-reply.svg b/frontend/appflowy_web_app/public/af_icons/mail/discussion-converstion-reply.svg new file mode 100644 index 0000000000..4d63be9a85 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/discussion-converstion-reply.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/happy-face.svg b/frontend/appflowy_web_app/public/af_icons/mail/happy-face.svg new file mode 100644 index 0000000000..1f5f581da6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/happy-face.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/inbox-block.svg b/frontend/appflowy_web_app/public/af_icons/mail/inbox-block.svg new file mode 100644 index 0000000000..251a31897f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/inbox-block.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/inbox-favorite-heart.svg b/frontend/appflowy_web_app/public/af_icons/mail/inbox-favorite-heart.svg new file mode 100644 index 0000000000..68d266fe49 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/inbox-favorite-heart.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/inbox-favorite.svg b/frontend/appflowy_web_app/public/af_icons/mail/inbox-favorite.svg new file mode 100644 index 0000000000..9a27890605 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/inbox-favorite.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/inbox-lock.svg b/frontend/appflowy_web_app/public/af_icons/mail/inbox-lock.svg new file mode 100644 index 0000000000..721163917d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/inbox-lock.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/inbox-tray-1.svg b/frontend/appflowy_web_app/public/af_icons/mail/inbox-tray-1.svg new file mode 100644 index 0000000000..25cf8d1ace --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/inbox-tray-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/inbox-tray-2.svg b/frontend/appflowy_web_app/public/af_icons/mail/inbox-tray-2.svg new file mode 100644 index 0000000000..2d2b6afa4c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/inbox-tray-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/mail-incoming.svg b/frontend/appflowy_web_app/public/af_icons/mail/mail-incoming.svg new file mode 100644 index 0000000000..e3cebdbffa --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/mail-incoming.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/mail-search.svg b/frontend/appflowy_web_app/public/af_icons/mail/mail-search.svg new file mode 100644 index 0000000000..280d7cb363 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/mail-search.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/mail-send-email-message.svg b/frontend/appflowy_web_app/public/af_icons/mail/mail-send-email-message.svg new file mode 100644 index 0000000000..5a01764607 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/mail-send-email-message.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/mail-send-envelope.svg b/frontend/appflowy_web_app/public/af_icons/mail/mail-send-envelope.svg new file mode 100644 index 0000000000..ee32a0d2d5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/mail-send-envelope.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/mail-send-reply-all.svg b/frontend/appflowy_web_app/public/af_icons/mail/mail-send-reply-all.svg new file mode 100644 index 0000000000..5a4bbd13ae --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/mail-send-reply-all.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/sad-face.svg b/frontend/appflowy_web_app/public/af_icons/mail/sad-face.svg new file mode 100644 index 0000000000..cb07b814ff --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/sad-face.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/send-email.svg b/frontend/appflowy_web_app/public/af_icons/mail/send-email.svg new file mode 100644 index 0000000000..0431ab66eb --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/send-email.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/sign-at.svg b/frontend/appflowy_web_app/public/af_icons/mail/sign-at.svg new file mode 100644 index 0000000000..764b2bf312 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/sign-at.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/sign-hashtag.svg b/frontend/appflowy_web_app/public/af_icons/mail/sign-hashtag.svg new file mode 100644 index 0000000000..545e661007 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/sign-hashtag.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/smiley-angry.svg b/frontend/appflowy_web_app/public/af_icons/mail/smiley-angry.svg new file mode 100644 index 0000000000..3e9ad9ee33 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/smiley-angry.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/smiley-cool.svg b/frontend/appflowy_web_app/public/af_icons/mail/smiley-cool.svg new file mode 100644 index 0000000000..71d44d8279 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/smiley-cool.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/smiley-crying-1.svg b/frontend/appflowy_web_app/public/af_icons/mail/smiley-crying-1.svg new file mode 100644 index 0000000000..c5cfe2df8d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/smiley-crying-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/smiley-cute.svg b/frontend/appflowy_web_app/public/af_icons/mail/smiley-cute.svg new file mode 100644 index 0000000000..918f29f705 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/smiley-cute.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/smiley-drool.svg b/frontend/appflowy_web_app/public/af_icons/mail/smiley-drool.svg new file mode 100644 index 0000000000..acc73cee7c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/smiley-drool.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/smiley-emoji-kiss-nervous.svg b/frontend/appflowy_web_app/public/af_icons/mail/smiley-emoji-kiss-nervous.svg new file mode 100644 index 0000000000..2e8ce83c87 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/smiley-emoji-kiss-nervous.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/smiley-emoji-terrified.svg b/frontend/appflowy_web_app/public/af_icons/mail/smiley-emoji-terrified.svg new file mode 100644 index 0000000000..2ee952b07c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/smiley-emoji-terrified.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/smiley-grumpy.svg b/frontend/appflowy_web_app/public/af_icons/mail/smiley-grumpy.svg new file mode 100644 index 0000000000..e0f6d4c939 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/smiley-grumpy.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/smiley-happy.svg b/frontend/appflowy_web_app/public/af_icons/mail/smiley-happy.svg new file mode 100644 index 0000000000..1849e6fc5f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/smiley-happy.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/smiley-in-love.svg b/frontend/appflowy_web_app/public/af_icons/mail/smiley-in-love.svg new file mode 100644 index 0000000000..cb3f446338 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/smiley-in-love.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/smiley-kiss.svg b/frontend/appflowy_web_app/public/af_icons/mail/smiley-kiss.svg new file mode 100644 index 0000000000..f86db7c10c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/smiley-kiss.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/mail/smiley-laughing-3.svg b/frontend/appflowy_web_app/public/af_icons/mail/smiley-laughing-3.svg new file mode 100644 index 0000000000..df01420baa --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/mail/smiley-laughing-3.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/airplane.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/airplane.svg new file mode 100644 index 0000000000..85b9018e5b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/airplane.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/airport-plane-transit.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/airport-plane-transit.svg new file mode 100644 index 0000000000..723a23d913 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/airport-plane-transit.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/airport-plane.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/airport-plane.svg new file mode 100644 index 0000000000..6731fd8992 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/airport-plane.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/airport-security.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/airport-security.svg new file mode 100644 index 0000000000..30d2c370a6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/airport-security.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/anchor.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/anchor.svg new file mode 100644 index 0000000000..8b05191e02 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/anchor.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/baggage.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/baggage.svg new file mode 100644 index 0000000000..674be5b254 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/baggage.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/beach.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/beach.svg new file mode 100644 index 0000000000..8e38eaea77 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/beach.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/bicycle-bike.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/bicycle-bike.svg new file mode 100644 index 0000000000..0f01d9cdd1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/bicycle-bike.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/braille-blind.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/braille-blind.svg new file mode 100644 index 0000000000..8c8f531003 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/braille-blind.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/bus.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/bus.svg new file mode 100644 index 0000000000..2bf0c8ab84 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/bus.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/camping-tent.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/camping-tent.svg new file mode 100644 index 0000000000..46d9e7fcc7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/camping-tent.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/cane.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/cane.svg new file mode 100644 index 0000000000..6778b91182 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/cane.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/capitol.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/capitol.svg new file mode 100644 index 0000000000..c9f7106687 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/capitol.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/car-battery-charging.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/car-battery-charging.svg new file mode 100644 index 0000000000..610323ea42 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/car-battery-charging.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/car-taxi-1.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/car-taxi-1.svg new file mode 100644 index 0000000000..156ee2113a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/car-taxi-1.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/city-hall.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/city-hall.svg new file mode 100644 index 0000000000..379f9a974a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/city-hall.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/compass-navigator.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/compass-navigator.svg new file mode 100644 index 0000000000..63ead58975 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/compass-navigator.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/crutch.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/crutch.svg new file mode 100644 index 0000000000..6f46d47b87 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/crutch.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/dangerous-zone-sign.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/dangerous-zone-sign.svg new file mode 100644 index 0000000000..675fbfb386 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/dangerous-zone-sign.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/earth-1.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/earth-1.svg new file mode 100644 index 0000000000..b38deea54b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/earth-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/earth-airplane.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/earth-airplane.svg new file mode 100644 index 0000000000..44103e0c82 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/earth-airplane.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/emergency-exit.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/emergency-exit.svg new file mode 100644 index 0000000000..047192a9f1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/emergency-exit.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/fire-alarm-2.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/fire-alarm-2.svg new file mode 100644 index 0000000000..17cd4f4304 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/fire-alarm-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/fire-extinguisher-sign.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/fire-extinguisher-sign.svg new file mode 100644 index 0000000000..54da68657a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/fire-extinguisher-sign.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/gas-station-fuel-petroleum.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/gas-station-fuel-petroleum.svg new file mode 100644 index 0000000000..3fb3f024a7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/gas-station-fuel-petroleum.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/hearing-deaf-1.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/hearing-deaf-1.svg new file mode 100644 index 0000000000..5abe2f60a0 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/hearing-deaf-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/hearing-deaf-2.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/hearing-deaf-2.svg new file mode 100644 index 0000000000..7623a86ae7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/hearing-deaf-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/high-speed-train-front.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/high-speed-train-front.svg new file mode 100644 index 0000000000..0334e072ee --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/high-speed-train-front.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/hot-spring.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/hot-spring.svg new file mode 100644 index 0000000000..3f72df09e3 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/hot-spring.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/hotel-air-conditioner.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/hotel-air-conditioner.svg new file mode 100644 index 0000000000..b8006f8ab8 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/hotel-air-conditioner.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/hotel-bed-2.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/hotel-bed-2.svg new file mode 100644 index 0000000000..2af7f57ce1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/hotel-bed-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/hotel-laundry.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/hotel-laundry.svg new file mode 100644 index 0000000000..5a7291b7da --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/hotel-laundry.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/hotel-one-star.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/hotel-one-star.svg new file mode 100644 index 0000000000..c7d69e2d42 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/hotel-one-star.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/hotel-shower-head.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/hotel-shower-head.svg new file mode 100644 index 0000000000..5e3cf1de40 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/hotel-shower-head.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/hotel-two-star.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/hotel-two-star.svg new file mode 100644 index 0000000000..c1ae54056c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/hotel-two-star.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/information-desk-customer.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/information-desk-customer.svg new file mode 100644 index 0000000000..7add1d0610 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/information-desk-customer.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/information-desk.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/information-desk.svg new file mode 100644 index 0000000000..d13cba2fc5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/information-desk.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/iron.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/iron.svg new file mode 100644 index 0000000000..641099f09a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/iron.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/ladder.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/ladder.svg new file mode 100644 index 0000000000..9963129445 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/ladder.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/lift-disability.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/lift-disability.svg new file mode 100644 index 0000000000..588edf9c83 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/lift-disability.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/lift.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/lift.svg new file mode 100644 index 0000000000..aafccb263e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/lift.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/location-compass-1.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/location-compass-1.svg new file mode 100644 index 0000000000..00647fbe0f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/location-compass-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/location-pin-3.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/location-pin-3.svg new file mode 100644 index 0000000000..bc88a620b8 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/location-pin-3.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/location-pin-disabled.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/location-pin-disabled.svg new file mode 100644 index 0000000000..2ff5e3cbd3 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/location-pin-disabled.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/location-target-1.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/location-target-1.svg new file mode 100644 index 0000000000..9c015e2f47 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/location-target-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/lost-and-found.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/lost-and-found.svg new file mode 100644 index 0000000000..047a764906 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/lost-and-found.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/man-symbol.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/man-symbol.svg new file mode 100644 index 0000000000..0f2a3dcef7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/man-symbol.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/map-fold.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/map-fold.svg new file mode 100644 index 0000000000..5f059cb98b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/map-fold.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/navigation-arrow-off.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/navigation-arrow-off.svg new file mode 100644 index 0000000000..d40bbffe6f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/navigation-arrow-off.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/navigation-arrow-on.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/navigation-arrow-on.svg new file mode 100644 index 0000000000..ca83a1f7b6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/navigation-arrow-on.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/parking-sign.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/parking-sign.svg new file mode 100644 index 0000000000..3708cca823 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/parking-sign.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/parliament.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/parliament.svg new file mode 100644 index 0000000000..aae1a5f440 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/parliament.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/passport.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/passport.svg new file mode 100644 index 0000000000..848f049fbc --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/passport.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/pet-paw.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/pet-paw.svg new file mode 100644 index 0000000000..27cf85c318 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/pet-paw.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/pets-allowed.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/pets-allowed.svg new file mode 100644 index 0000000000..48bd43e11a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/pets-allowed.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/pool-ladder.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/pool-ladder.svg new file mode 100644 index 0000000000..dabe71440e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/pool-ladder.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/rock-slide.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/rock-slide.svg new file mode 100644 index 0000000000..0a6a5a711d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/rock-slide.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/sail-ship.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/sail-ship.svg new file mode 100644 index 0000000000..982767a3c5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/sail-ship.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/school-bus-side.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/school-bus-side.svg new file mode 100644 index 0000000000..7b5856e7ff --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/school-bus-side.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/smoke-detector.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/smoke-detector.svg new file mode 100644 index 0000000000..89862439b9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/smoke-detector.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/smoking-area.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/smoking-area.svg new file mode 100644 index 0000000000..4e39d94df2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/smoking-area.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/snorkle.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/snorkle.svg new file mode 100644 index 0000000000..626e2cf484 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/snorkle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/steering-wheel.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/steering-wheel.svg new file mode 100644 index 0000000000..2b3adeb5bb --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/steering-wheel.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/street-road.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/street-road.svg new file mode 100644 index 0000000000..5ff4e3c03c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/street-road.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/street-sign.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/street-sign.svg new file mode 100644 index 0000000000..d5f80c30a8 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/street-sign.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/take-off.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/take-off.svg new file mode 100644 index 0000000000..7d5aafc2c3 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/take-off.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/toilet-man.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/toilet-man.svg new file mode 100644 index 0000000000..67df34ada5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/toilet-man.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/toilet-sign-man-woman-2.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/toilet-sign-man-woman-2.svg new file mode 100644 index 0000000000..44f3680273 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/toilet-sign-man-woman-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/toilet-women.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/toilet-women.svg new file mode 100644 index 0000000000..916f4591c7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/toilet-women.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/traffic-cone.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/traffic-cone.svg new file mode 100644 index 0000000000..1cd16d0c2f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/traffic-cone.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/triangle-flag.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/triangle-flag.svg new file mode 100644 index 0000000000..a6f86c16b3 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/triangle-flag.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/wheelchair-1.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/wheelchair-1.svg new file mode 100644 index 0000000000..a0d539594c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/wheelchair-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/map_travel/woman-symbol.svg b/frontend/appflowy_web_app/public/af_icons/map_travel/woman-symbol.svg new file mode 100644 index 0000000000..a9c4377ec1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/map_travel/woman-symbol.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/annoncement-megaphone.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/annoncement-megaphone.svg new file mode 100644 index 0000000000..472f766f0e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/annoncement-megaphone.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/backpack.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/backpack.svg new file mode 100644 index 0000000000..d9800f6d76 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/backpack.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/bag-dollar.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/bag-dollar.svg new file mode 100644 index 0000000000..176e8d38de --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/bag-dollar.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/bag-pound.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/bag-pound.svg new file mode 100644 index 0000000000..a282df85fb --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/bag-pound.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/bag-rupee.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/bag-rupee.svg new file mode 100644 index 0000000000..eb5c02be60 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/bag-rupee.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/bag-suitcase-1.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/bag-suitcase-1.svg new file mode 100644 index 0000000000..82a1e7ff31 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/bag-suitcase-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/bag-suitcase-2.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/bag-suitcase-2.svg new file mode 100644 index 0000000000..706aab5df3 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/bag-suitcase-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/bag-yen.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/bag-yen.svg new file mode 100644 index 0000000000..2a54180e78 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/bag-yen.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/bag.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/bag.svg new file mode 100644 index 0000000000..d1abe11443 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/bag.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/ball.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/ball.svg new file mode 100644 index 0000000000..6f7e278919 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/ball.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/bank.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/bank.svg new file mode 100644 index 0000000000..fd6cf58939 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/bank.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/beanie.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/beanie.svg new file mode 100644 index 0000000000..374557ac4f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/beanie.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/bill-1.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/bill-1.svg new file mode 100644 index 0000000000..6df0d554df --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/bill-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/bill-2.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/bill-2.svg new file mode 100644 index 0000000000..61f55ac5d5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/bill-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/bill-4.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/bill-4.svg new file mode 100644 index 0000000000..2ffbf22977 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/bill-4.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/bill-cashless.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/bill-cashless.svg new file mode 100644 index 0000000000..aa77bf8d67 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/bill-cashless.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/binance-circle.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/binance-circle.svg new file mode 100644 index 0000000000..6b489a693e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/binance-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/bitcoin.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/bitcoin.svg new file mode 100644 index 0000000000..211aee40c6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/bitcoin.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/bow-tie.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/bow-tie.svg new file mode 100644 index 0000000000..2f2bbdaa55 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/bow-tie.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/briefcase-dollar.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/briefcase-dollar.svg new file mode 100644 index 0000000000..14c68c87c4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/briefcase-dollar.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/building-2.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/building-2.svg new file mode 100644 index 0000000000..56c3585f37 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/building-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/business-card.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/business-card.svg new file mode 100644 index 0000000000..f980629bce --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/business-card.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/business-handshake.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/business-handshake.svg new file mode 100644 index 0000000000..62ce5e55c4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/business-handshake.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/business-idea-money.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/business-idea-money.svg new file mode 100644 index 0000000000..d4eb07175f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/business-idea-money.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/business-profession-home-office.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/business-profession-home-office.svg new file mode 100644 index 0000000000..f634c96f5f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/business-profession-home-office.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/business-progress-bar-2.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/business-progress-bar-2.svg new file mode 100644 index 0000000000..b73b5e9015 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/business-progress-bar-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/business-user-curriculum.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/business-user-curriculum.svg new file mode 100644 index 0000000000..19714b52b1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/business-user-curriculum.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/calculator-1.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/calculator-1.svg new file mode 100644 index 0000000000..d14d7b0050 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/calculator-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/calculator-2.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/calculator-2.svg new file mode 100644 index 0000000000..bf48853eaa --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/calculator-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/cane.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/cane.svg new file mode 100644 index 0000000000..4c7c27073c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/cane.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/chair.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/chair.svg new file mode 100644 index 0000000000..a6d33f000f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/chair.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/closet.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/closet.svg new file mode 100644 index 0000000000..16991a60e9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/closet.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/coin-share.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/coin-share.svg new file mode 100644 index 0000000000..9aa28f013f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/coin-share.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/coins-stack.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/coins-stack.svg new file mode 100644 index 0000000000..fceb62950c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/coins-stack.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/credit-card-1.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/credit-card-1.svg new file mode 100644 index 0000000000..e730a703d5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/credit-card-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/credit-card-2.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/credit-card-2.svg new file mode 100644 index 0000000000..f6ba16a213 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/credit-card-2.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/diamond-2.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/diamond-2.svg new file mode 100644 index 0000000000..e226caaf38 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/diamond-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/discount-percent-badge.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/discount-percent-badge.svg new file mode 100644 index 0000000000..5cda678b87 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/discount-percent-badge.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/discount-percent-circle.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/discount-percent-circle.svg new file mode 100644 index 0000000000..6fa8b79900 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/discount-percent-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/discount-percent-coupon.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/discount-percent-coupon.svg new file mode 100644 index 0000000000..9ff5dac1f4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/discount-percent-coupon.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/discount-percent-cutout.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/discount-percent-cutout.svg new file mode 100644 index 0000000000..82a7587a6e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/discount-percent-cutout.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/discount-percent-fire.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/discount-percent-fire.svg new file mode 100644 index 0000000000..00a78332c4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/discount-percent-fire.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/dollar-coin-1.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/dollar-coin-1.svg new file mode 100644 index 0000000000..0db0836aca --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/dollar-coin-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/dollar-coin.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/dollar-coin.svg new file mode 100644 index 0000000000..b285d8d4b2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/dollar-coin.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/dressing-table.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/dressing-table.svg new file mode 100644 index 0000000000..90e453e2b7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/dressing-table.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/ethereum-circle.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/ethereum-circle.svg new file mode 100644 index 0000000000..06db44f70d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/ethereum-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/ethereum.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/ethereum.svg new file mode 100644 index 0000000000..40f205e9d7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/ethereum.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/euro.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/euro.svg new file mode 100644 index 0000000000..73121ce282 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/euro.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/gift-2.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/gift-2.svg new file mode 100644 index 0000000000..e64b42428e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/gift-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/gift.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/gift.svg new file mode 100644 index 0000000000..ba78839102 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/gift.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/gold.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/gold.svg new file mode 100644 index 0000000000..33ef845ad2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/gold.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/graph-arrow-decrease.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/graph-arrow-decrease.svg new file mode 100644 index 0000000000..1177b1acfb --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/graph-arrow-decrease.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/graph-arrow-increase.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/graph-arrow-increase.svg new file mode 100644 index 0000000000..82415d32c6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/graph-arrow-increase.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/graph-bar-decrease.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/graph-bar-decrease.svg new file mode 100644 index 0000000000..79f523f8d9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/graph-bar-decrease.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/graph-bar-increase.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/graph-bar-increase.svg new file mode 100644 index 0000000000..801daa256b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/graph-bar-increase.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/graph-dot.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/graph-dot.svg new file mode 100644 index 0000000000..7ca8308d52 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/graph-dot.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/graph.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/graph.svg new file mode 100644 index 0000000000..4c692f6ca0 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/graph.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/investment-selection.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/investment-selection.svg new file mode 100644 index 0000000000..478b852ad1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/investment-selection.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/justice-hammer.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/justice-hammer.svg new file mode 100644 index 0000000000..d9bf64217e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/justice-hammer.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/justice-scale-1.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/justice-scale-1.svg new file mode 100644 index 0000000000..6e531dd1b8 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/justice-scale-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/justice-scale-2.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/justice-scale-2.svg new file mode 100644 index 0000000000..e90aa2594b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/justice-scale-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/lipstick.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/lipstick.svg new file mode 100644 index 0000000000..e2ffa968c6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/lipstick.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/make-up-brush.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/make-up-brush.svg new file mode 100644 index 0000000000..d5e28774ae --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/make-up-brush.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/moustache.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/moustache.svg new file mode 100644 index 0000000000..049e343f18 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/moustache.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/mouth-lip.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/mouth-lip.svg new file mode 100644 index 0000000000..22cb09ed17 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/mouth-lip.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/necklace.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/necklace.svg new file mode 100644 index 0000000000..7e615d5fc1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/necklace.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/necktie.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/necktie.svg new file mode 100644 index 0000000000..dd502d68ec --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/necktie.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/payment-10.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/payment-10.svg new file mode 100644 index 0000000000..42935055e5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/payment-10.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/payment-cash-out-3.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/payment-cash-out-3.svg new file mode 100644 index 0000000000..8f451cb9f8 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/payment-cash-out-3.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/pie-chart.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/pie-chart.svg new file mode 100644 index 0000000000..2966a8ef8f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/pie-chart.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/piggy-bank.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/piggy-bank.svg new file mode 100644 index 0000000000..ef796838b2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/piggy-bank.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/polka-dot-circle.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/polka-dot-circle.svg new file mode 100644 index 0000000000..f50f1edc76 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/polka-dot-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/production-belt.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/production-belt.svg new file mode 100644 index 0000000000..b56f95f19f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/production-belt.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/qr-code.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/qr-code.svg new file mode 100644 index 0000000000..c93d63f060 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/qr-code.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/receipt-add.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/receipt-add.svg new file mode 100644 index 0000000000..50cc1f57da --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/receipt-add.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/receipt-check.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/receipt-check.svg new file mode 100644 index 0000000000..99762d138f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/receipt-check.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/receipt-subtract.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/receipt-subtract.svg new file mode 100644 index 0000000000..9a18ed6d06 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/receipt-subtract.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/receipt.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/receipt.svg new file mode 100644 index 0000000000..da4dab6340 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/receipt.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/safe-vault.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/safe-vault.svg new file mode 100644 index 0000000000..9c3d9d7230 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/safe-vault.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/scanner-3.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/scanner-3.svg new file mode 100644 index 0000000000..f7db012503 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/scanner-3.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/scanner-bar-code.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/scanner-bar-code.svg new file mode 100644 index 0000000000..b60571a669 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/scanner-bar-code.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/shelf.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/shelf.svg new file mode 100644 index 0000000000..3ea11815bf --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/shelf.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-bag-hand-bag-2.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-bag-hand-bag-2.svg new file mode 100644 index 0000000000..ae8ef2d315 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-bag-hand-bag-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-basket-1.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-basket-1.svg new file mode 100644 index 0000000000..b33b5304fb --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-basket-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-basket-2.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-basket-2.svg new file mode 100644 index 0000000000..f2610aab4c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-basket-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-cart-1.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-cart-1.svg new file mode 100644 index 0000000000..74529f1ae5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-cart-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-cart-2.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-cart-2.svg new file mode 100644 index 0000000000..eecaeadf06 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-cart-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-cart-3.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-cart-3.svg new file mode 100644 index 0000000000..681b1653e9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-cart-3.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-cart-add.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-cart-add.svg new file mode 100644 index 0000000000..50d05a70b7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-cart-add.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-cart-check.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-cart-check.svg new file mode 100644 index 0000000000..6d7b9fb635 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-cart-check.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-cart-subtract.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-cart-subtract.svg new file mode 100644 index 0000000000..41c96d3ec9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/shopping-cart-subtract.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/signage-3.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/signage-3.svg new file mode 100644 index 0000000000..92c321b4b5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/signage-3.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/signage-4.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/signage-4.svg new file mode 100644 index 0000000000..42b4f8c6a9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/signage-4.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/startup.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/startup.svg new file mode 100644 index 0000000000..77ed266e67 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/startup.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/stock.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/stock.svg new file mode 100644 index 0000000000..d350449bcf --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/stock.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/store-1.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/store-1.svg new file mode 100644 index 0000000000..53751414d5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/store-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/store-2.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/store-2.svg new file mode 100644 index 0000000000..7e2312aa57 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/store-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/store-computer.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/store-computer.svg new file mode 100644 index 0000000000..4ea808bf31 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/store-computer.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/subscription-cashflow.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/subscription-cashflow.svg new file mode 100644 index 0000000000..c7f45631ac --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/subscription-cashflow.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/tag.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/tag.svg new file mode 100644 index 0000000000..3aae6ba5c3 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/tag.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/tall-hat.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/tall-hat.svg new file mode 100644 index 0000000000..1f5650785c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/tall-hat.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/target-3.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/target-3.svg new file mode 100644 index 0000000000..35591b9238 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/target-3.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/target.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/target.svg new file mode 100644 index 0000000000..632d7c4c3c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/target.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/wallet-purse.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/wallet-purse.svg new file mode 100644 index 0000000000..6df7533528 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/wallet-purse.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/wallet.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/wallet.svg new file mode 100644 index 0000000000..39042c9f04 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/wallet.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/xrp-circle.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/xrp-circle.svg new file mode 100644 index 0000000000..4250e70555 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/xrp-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/yuan-circle.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/yuan-circle.svg new file mode 100644 index 0000000000..138056c639 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/yuan-circle.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/money_shopping/yuan.svg b/frontend/appflowy_web_app/public/af_icons/money_shopping/yuan.svg new file mode 100644 index 0000000000..65976287fe --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/money_shopping/yuan.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/affordable-and-clean-energy.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/affordable-and-clean-energy.svg new file mode 100644 index 0000000000..70421c5d33 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/affordable-and-clean-energy.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/alien.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/alien.svg new file mode 100644 index 0000000000..5cfaf813bf --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/alien.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/bone.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/bone.svg new file mode 100644 index 0000000000..669f8e9755 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/bone.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/cat-1.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/cat-1.svg new file mode 100644 index 0000000000..d23a378b47 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/cat-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/circle-flask.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/circle-flask.svg new file mode 100644 index 0000000000..fc75c75d0d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/circle-flask.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/clean-water-and-sanitation.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/clean-water-and-sanitation.svg new file mode 100644 index 0000000000..c7b4738cee --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/clean-water-and-sanitation.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/comet.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/comet.svg new file mode 100644 index 0000000000..3d0012a1fc --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/comet.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/decent-work-and-economic-growth.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/decent-work-and-economic-growth.svg new file mode 100644 index 0000000000..3aa52629d7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/decent-work-and-economic-growth.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/dna.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/dna.svg new file mode 100644 index 0000000000..dda09e350c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/dna.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/erlenmeyer-flask.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/erlenmeyer-flask.svg new file mode 100644 index 0000000000..14e078c476 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/erlenmeyer-flask.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/flower.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/flower.svg new file mode 100644 index 0000000000..675f917956 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/flower.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/galaxy-1.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/galaxy-1.svg new file mode 100644 index 0000000000..59d4638f8c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/galaxy-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/galaxy-2.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/galaxy-2.svg new file mode 100644 index 0000000000..d8948d5f35 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/galaxy-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/gender-equality.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/gender-equality.svg new file mode 100644 index 0000000000..3f0a9cdecc --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/gender-equality.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/good-health-and-well-being.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/good-health-and-well-being.svg new file mode 100644 index 0000000000..c92374cff5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/good-health-and-well-being.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/industry-innovation-and-infrastructure.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/industry-innovation-and-infrastructure.svg new file mode 100644 index 0000000000..7a58eecbca --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/industry-innovation-and-infrastructure.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/leaf.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/leaf.svg new file mode 100644 index 0000000000..2a53ca6fd5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/leaf.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/log.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/log.svg new file mode 100644 index 0000000000..1a3deaa880 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/log.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/no-poverty.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/no-poverty.svg new file mode 100644 index 0000000000..f12c0b4111 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/no-poverty.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/octopus.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/octopus.svg new file mode 100644 index 0000000000..38855cbe54 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/octopus.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/planet.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/planet.svg new file mode 100644 index 0000000000..9ee346f584 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/planet.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/potted-flower-tulip.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/potted-flower-tulip.svg new file mode 100644 index 0000000000..2be0dc0cb5 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/potted-flower-tulip.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/quality-education.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/quality-education.svg new file mode 100644 index 0000000000..c6e0335e9b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/quality-education.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/rainbow.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/rainbow.svg new file mode 100644 index 0000000000..8c99192cee --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/rainbow.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/recycle-1.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/recycle-1.svg new file mode 100644 index 0000000000..30ebcf8fb2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/recycle-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/reduced-inequalities.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/reduced-inequalities.svg new file mode 100644 index 0000000000..cc3de7a365 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/reduced-inequalities.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/rose.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/rose.svg new file mode 100644 index 0000000000..3459894b5b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/rose.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/shell.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/shell.svg new file mode 100644 index 0000000000..bde5159a0a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/shell.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/shovel-rake.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/shovel-rake.svg new file mode 100644 index 0000000000..832d2a4f1d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/shovel-rake.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/sprout.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/sprout.svg new file mode 100644 index 0000000000..3b8ea11ba3 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/sprout.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/telescope.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/telescope.svg new file mode 100644 index 0000000000..9a29c5483d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/telescope.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/test-tube.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/test-tube.svg new file mode 100644 index 0000000000..01d12af810 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/test-tube.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/tidal-wave.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/tidal-wave.svg new file mode 100644 index 0000000000..56c80ec200 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/tidal-wave.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/tree-2.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/tree-2.svg new file mode 100644 index 0000000000..da32de6697 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/tree-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/tree-3.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/tree-3.svg new file mode 100644 index 0000000000..db8bfe987b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/tree-3.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/volcano.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/volcano.svg new file mode 100644 index 0000000000..989f5e68b9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/volcano.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/windmill.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/windmill.svg new file mode 100644 index 0000000000..edfb759883 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/windmill.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/nature_ecology/zero-hunger.svg b/frontend/appflowy_web_app/public/af_icons/nature_ecology/zero-hunger.svg new file mode 100644 index 0000000000..7cd7b52a34 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/nature_ecology/zero-hunger.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/airplane-disabled.svg b/frontend/appflowy_web_app/public/af_icons/phone/airplane-disabled.svg new file mode 100644 index 0000000000..dd6bf8d91a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/airplane-disabled.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/airplane-enabled.svg b/frontend/appflowy_web_app/public/af_icons/phone/airplane-enabled.svg new file mode 100644 index 0000000000..af74878ae4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/airplane-enabled.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/back-camera-1.svg b/frontend/appflowy_web_app/public/af_icons/phone/back-camera-1.svg new file mode 100644 index 0000000000..9c38dd55e2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/back-camera-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/call-hang-up.svg b/frontend/appflowy_web_app/public/af_icons/phone/call-hang-up.svg new file mode 100644 index 0000000000..41d0886a0e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/call-hang-up.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/cellular-network-4g.svg b/frontend/appflowy_web_app/public/af_icons/phone/cellular-network-4g.svg new file mode 100644 index 0000000000..559284654e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/cellular-network-4g.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/cellular-network-5g.svg b/frontend/appflowy_web_app/public/af_icons/phone/cellular-network-5g.svg new file mode 100644 index 0000000000..a4b9a8626f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/cellular-network-5g.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/cellular-network-lte.svg b/frontend/appflowy_web_app/public/af_icons/phone/cellular-network-lte.svg new file mode 100644 index 0000000000..373d8e8640 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/cellular-network-lte.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/contact-phonebook-2.svg b/frontend/appflowy_web_app/public/af_icons/phone/contact-phonebook-2.svg new file mode 100644 index 0000000000..8968279a29 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/contact-phonebook-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/hang-up-1.svg b/frontend/appflowy_web_app/public/af_icons/phone/hang-up-1.svg new file mode 100644 index 0000000000..fb4c797028 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/hang-up-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/hang-up-2.svg b/frontend/appflowy_web_app/public/af_icons/phone/hang-up-2.svg new file mode 100644 index 0000000000..dbd92cb2a3 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/hang-up-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/incoming-call.svg b/frontend/appflowy_web_app/public/af_icons/phone/incoming-call.svg new file mode 100644 index 0000000000..dfb4e8a02e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/incoming-call.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/missed-call.svg b/frontend/appflowy_web_app/public/af_icons/phone/missed-call.svg new file mode 100644 index 0000000000..9efc8a2eb9 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/missed-call.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/notification-alarm-2.svg b/frontend/appflowy_web_app/public/af_icons/phone/notification-alarm-2.svg new file mode 100644 index 0000000000..7eec376825 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/notification-alarm-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/notification-application-1.svg b/frontend/appflowy_web_app/public/af_icons/phone/notification-application-1.svg new file mode 100644 index 0000000000..4908995f02 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/notification-application-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/notification-application-2.svg b/frontend/appflowy_web_app/public/af_icons/phone/notification-application-2.svg new file mode 100644 index 0000000000..32db7b5be0 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/notification-application-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/notification-message-alert.svg b/frontend/appflowy_web_app/public/af_icons/phone/notification-message-alert.svg new file mode 100644 index 0000000000..7d1123fbee --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/notification-message-alert.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/outgoing-call.svg b/frontend/appflowy_web_app/public/af_icons/phone/outgoing-call.svg new file mode 100644 index 0000000000..70ea90ca9e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/outgoing-call.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/phone-mobile-phone.svg b/frontend/appflowy_web_app/public/af_icons/phone/phone-mobile-phone.svg new file mode 100644 index 0000000000..299a57b66c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/phone-mobile-phone.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/phone-qr.svg b/frontend/appflowy_web_app/public/af_icons/phone/phone-qr.svg new file mode 100644 index 0000000000..f572d984d6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/phone-qr.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/phone-ringing-1.svg b/frontend/appflowy_web_app/public/af_icons/phone/phone-ringing-1.svg new file mode 100644 index 0000000000..1b13856b30 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/phone-ringing-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/phone-ringing-2.svg b/frontend/appflowy_web_app/public/af_icons/phone/phone-ringing-2.svg new file mode 100644 index 0000000000..889998fa68 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/phone-ringing-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/phone.svg b/frontend/appflowy_web_app/public/af_icons/phone/phone.svg new file mode 100644 index 0000000000..fc6ab0ad9c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/phone.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/signal-full.svg b/frontend/appflowy_web_app/public/af_icons/phone/signal-full.svg new file mode 100644 index 0000000000..58823e23ea --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/signal-full.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/signal-low.svg b/frontend/appflowy_web_app/public/af_icons/phone/signal-low.svg new file mode 100644 index 0000000000..e96c4af8a2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/signal-low.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/signal-medium.svg b/frontend/appflowy_web_app/public/af_icons/phone/signal-medium.svg new file mode 100644 index 0000000000..1af4305dd0 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/signal-medium.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/phone/signal-none.svg b/frontend/appflowy_web_app/public/af_icons/phone/signal-none.svg new file mode 100644 index 0000000000..a4eb9031e2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/phone/signal-none.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/application-add.svg b/frontend/appflowy_web_app/public/af_icons/programing/application-add.svg new file mode 100644 index 0000000000..3206d90bff --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/application-add.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/bracket.svg b/frontend/appflowy_web_app/public/af_icons/programing/bracket.svg new file mode 100644 index 0000000000..19ec5e423d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/bracket.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/browser-add.svg b/frontend/appflowy_web_app/public/af_icons/programing/browser-add.svg new file mode 100644 index 0000000000..f202217042 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/browser-add.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/browser-block.svg b/frontend/appflowy_web_app/public/af_icons/programing/browser-block.svg new file mode 100644 index 0000000000..6eb1b7be24 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/browser-block.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/browser-build.svg b/frontend/appflowy_web_app/public/af_icons/programing/browser-build.svg new file mode 100644 index 0000000000..2fb2366c85 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/browser-build.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/browser-check.svg b/frontend/appflowy_web_app/public/af_icons/programing/browser-check.svg new file mode 100644 index 0000000000..198d2aad19 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/browser-check.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/browser-delete.svg b/frontend/appflowy_web_app/public/af_icons/programing/browser-delete.svg new file mode 100644 index 0000000000..f6dc39ae72 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/browser-delete.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/browser-hash.svg b/frontend/appflowy_web_app/public/af_icons/programing/browser-hash.svg new file mode 100644 index 0000000000..92664d39a7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/browser-hash.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/browser-lock.svg b/frontend/appflowy_web_app/public/af_icons/programing/browser-lock.svg new file mode 100644 index 0000000000..fec83df52f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/browser-lock.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/browser-multiple-window.svg b/frontend/appflowy_web_app/public/af_icons/programing/browser-multiple-window.svg new file mode 100644 index 0000000000..7c8b3043cd --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/browser-multiple-window.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/browser-remove.svg b/frontend/appflowy_web_app/public/af_icons/programing/browser-remove.svg new file mode 100644 index 0000000000..eb5a5b1741 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/browser-remove.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/browser-website-1.svg b/frontend/appflowy_web_app/public/af_icons/programing/browser-website-1.svg new file mode 100644 index 0000000000..a49315daca --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/browser-website-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/bug-antivirus-debugging.svg b/frontend/appflowy_web_app/public/af_icons/programing/bug-antivirus-debugging.svg new file mode 100644 index 0000000000..be5811df0f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/bug-antivirus-debugging.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/bug-antivirus-shield.svg b/frontend/appflowy_web_app/public/af_icons/programing/bug-antivirus-shield.svg new file mode 100644 index 0000000000..84af3bb9cc --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/bug-antivirus-shield.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/bug-virus-browser.svg b/frontend/appflowy_web_app/public/af_icons/programing/bug-virus-browser.svg new file mode 100644 index 0000000000..4f42f54326 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/bug-virus-browser.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/bug-virus-document.svg b/frontend/appflowy_web_app/public/af_icons/programing/bug-virus-document.svg new file mode 100644 index 0000000000..a7c24e2ce6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/bug-virus-document.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/bug-virus-folder.svg b/frontend/appflowy_web_app/public/af_icons/programing/bug-virus-folder.svg new file mode 100644 index 0000000000..eeea1baf39 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/bug-virus-folder.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/bug.svg b/frontend/appflowy_web_app/public/af_icons/programing/bug.svg new file mode 100644 index 0000000000..a2d2795e45 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/bug.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/cloud-add.svg b/frontend/appflowy_web_app/public/af_icons/programing/cloud-add.svg new file mode 100644 index 0000000000..00a46324d0 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/cloud-add.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/cloud-block.svg b/frontend/appflowy_web_app/public/af_icons/programing/cloud-block.svg new file mode 100644 index 0000000000..b321169629 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/cloud-block.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/cloud-check.svg b/frontend/appflowy_web_app/public/af_icons/programing/cloud-check.svg new file mode 100644 index 0000000000..a56b3fbbff --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/cloud-check.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/cloud-data-transfer.svg b/frontend/appflowy_web_app/public/af_icons/programing/cloud-data-transfer.svg new file mode 100644 index 0000000000..74d319d7f1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/cloud-data-transfer.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/cloud-refresh.svg b/frontend/appflowy_web_app/public/af_icons/programing/cloud-refresh.svg new file mode 100644 index 0000000000..9096ac8796 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/cloud-refresh.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/cloud-share.svg b/frontend/appflowy_web_app/public/af_icons/programing/cloud-share.svg new file mode 100644 index 0000000000..e69919e88c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/cloud-share.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/cloud-warning.svg b/frontend/appflowy_web_app/public/af_icons/programing/cloud-warning.svg new file mode 100644 index 0000000000..ebd5917d01 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/cloud-warning.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/cloud-wifi.svg b/frontend/appflowy_web_app/public/af_icons/programing/cloud-wifi.svg new file mode 100644 index 0000000000..51072ad76f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/cloud-wifi.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/code-analysis.svg b/frontend/appflowy_web_app/public/af_icons/programing/code-analysis.svg new file mode 100644 index 0000000000..ef9dd46dbd --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/code-analysis.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/code-monitor-1.svg b/frontend/appflowy_web_app/public/af_icons/programing/code-monitor-1.svg new file mode 100644 index 0000000000..34c51a7ab2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/code-monitor-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/code-monitor-2.svg b/frontend/appflowy_web_app/public/af_icons/programing/code-monitor-2.svg new file mode 100644 index 0000000000..5719d9699f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/code-monitor-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/css-three.svg b/frontend/appflowy_web_app/public/af_icons/programing/css-three.svg new file mode 100644 index 0000000000..f20ce41833 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/css-three.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/curly-brackets.svg b/frontend/appflowy_web_app/public/af_icons/programing/curly-brackets.svg new file mode 100644 index 0000000000..6b6eb7d645 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/curly-brackets.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/file-code-1.svg b/frontend/appflowy_web_app/public/af_icons/programing/file-code-1.svg new file mode 100644 index 0000000000..7e12e3847b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/file-code-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/incognito-mode.svg b/frontend/appflowy_web_app/public/af_icons/programing/incognito-mode.svg new file mode 100644 index 0000000000..84197023a4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/incognito-mode.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/insert-cloud-video.svg b/frontend/appflowy_web_app/public/af_icons/programing/insert-cloud-video.svg new file mode 100644 index 0000000000..4f883df73f --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/insert-cloud-video.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/markdown-circle-programming.svg b/frontend/appflowy_web_app/public/af_icons/programing/markdown-circle-programming.svg new file mode 100644 index 0000000000..7c03684a41 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/markdown-circle-programming.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/markdown-document-programming.svg b/frontend/appflowy_web_app/public/af_icons/programing/markdown-document-programming.svg new file mode 100644 index 0000000000..514d68e7f8 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/markdown-document-programming.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/module-puzzle-1.svg b/frontend/appflowy_web_app/public/af_icons/programing/module-puzzle-1.svg new file mode 100644 index 0000000000..c285965ff6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/module-puzzle-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/module-puzzle-3.svg b/frontend/appflowy_web_app/public/af_icons/programing/module-puzzle-3.svg new file mode 100644 index 0000000000..60c754e08d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/module-puzzle-3.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/module-three.svg b/frontend/appflowy_web_app/public/af_icons/programing/module-three.svg new file mode 100644 index 0000000000..d517266362 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/module-three.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/programing/rss-square.svg b/frontend/appflowy_web_app/public/af_icons/programing/rss-square.svg new file mode 100644 index 0000000000..d84eeaabd1 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/programing/rss-square.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/shipping/box-sign.svg b/frontend/appflowy_web_app/public/af_icons/shipping/box-sign.svg new file mode 100644 index 0000000000..4edefc3583 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/shipping/box-sign.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/shipping/container.svg b/frontend/appflowy_web_app/public/af_icons/shipping/container.svg new file mode 100644 index 0000000000..6b85af7c6c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/shipping/container.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/shipping/fragile.svg b/frontend/appflowy_web_app/public/af_icons/shipping/fragile.svg new file mode 100644 index 0000000000..0c69404528 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/shipping/fragile.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/shipping/parachute-drop.svg b/frontend/appflowy_web_app/public/af_icons/shipping/parachute-drop.svg new file mode 100644 index 0000000000..b4a08a3417 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/shipping/parachute-drop.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/shipping/shipment-add.svg b/frontend/appflowy_web_app/public/af_icons/shipping/shipment-add.svg new file mode 100644 index 0000000000..96060a0e5c --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/shipping/shipment-add.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/shipping/shipment-check.svg b/frontend/appflowy_web_app/public/af_icons/shipping/shipment-check.svg new file mode 100644 index 0000000000..80046da591 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/shipping/shipment-check.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/shipping/shipment-download.svg b/frontend/appflowy_web_app/public/af_icons/shipping/shipment-download.svg new file mode 100644 index 0000000000..aff16bb56a --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/shipping/shipment-download.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/shipping/shipment-remove.svg b/frontend/appflowy_web_app/public/af_icons/shipping/shipment-remove.svg new file mode 100644 index 0000000000..cb2759d0c7 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/shipping/shipment-remove.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/shipping/shipment-upload.svg b/frontend/appflowy_web_app/public/af_icons/shipping/shipment-upload.svg new file mode 100644 index 0000000000..aa76150c54 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/shipping/shipment-upload.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/shipping/shipping-box-1.svg b/frontend/appflowy_web_app/public/af_icons/shipping/shipping-box-1.svg new file mode 100644 index 0000000000..42a5129d1e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/shipping/shipping-box-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/shipping/shipping-truck.svg b/frontend/appflowy_web_app/public/af_icons/shipping/shipping-truck.svg new file mode 100644 index 0000000000..6835708103 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/shipping/shipping-truck.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/shipping/transfer-motorcycle.svg b/frontend/appflowy_web_app/public/af_icons/shipping/transfer-motorcycle.svg new file mode 100644 index 0000000000..2ab10a3db4 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/shipping/transfer-motorcycle.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/shipping/transfer-van.svg b/frontend/appflowy_web_app/public/af_icons/shipping/transfer-van.svg new file mode 100644 index 0000000000..8c4a0cebc2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/shipping/transfer-van.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/shipping/warehouse-1.svg b/frontend/appflowy_web_app/public/af_icons/shipping/warehouse-1.svg new file mode 100644 index 0000000000..57e18260f0 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/shipping/warehouse-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/work_education/book-reading.svg b/frontend/appflowy_web_app/public/af_icons/work_education/book-reading.svg new file mode 100644 index 0000000000..c792c95b11 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/work_education/book-reading.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/work_education/class-lesson.svg b/frontend/appflowy_web_app/public/af_icons/work_education/class-lesson.svg new file mode 100644 index 0000000000..ea2bef46a0 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/work_education/class-lesson.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/work_education/collaborations-idea.svg b/frontend/appflowy_web_app/public/af_icons/work_education/collaborations-idea.svg new file mode 100644 index 0000000000..633d1811a6 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/work_education/collaborations-idea.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/work_education/definition-search-book.svg b/frontend/appflowy_web_app/public/af_icons/work_education/definition-search-book.svg new file mode 100644 index 0000000000..14039daefb --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/work_education/definition-search-book.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/work_education/dictionary-language-book.svg b/frontend/appflowy_web_app/public/af_icons/work_education/dictionary-language-book.svg new file mode 100644 index 0000000000..60591372bb --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/work_education/dictionary-language-book.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/work_education/global-learning.svg b/frontend/appflowy_web_app/public/af_icons/work_education/global-learning.svg new file mode 100644 index 0000000000..bbcea6ce49 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/work_education/global-learning.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/work_education/graduation-cap.svg b/frontend/appflowy_web_app/public/af_icons/work_education/graduation-cap.svg new file mode 100644 index 0000000000..10dcd1e834 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/work_education/graduation-cap.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/work_education/group-meeting-call.svg b/frontend/appflowy_web_app/public/af_icons/work_education/group-meeting-call.svg new file mode 100644 index 0000000000..786fad824d --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/work_education/group-meeting-call.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/work_education/office-building-1.svg b/frontend/appflowy_web_app/public/af_icons/work_education/office-building-1.svg new file mode 100644 index 0000000000..cba001bb4e --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/work_education/office-building-1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/work_education/office-worker.svg b/frontend/appflowy_web_app/public/af_icons/work_education/office-worker.svg new file mode 100644 index 0000000000..42e2938530 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/work_education/office-worker.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/work_education/search-dollar.svg b/frontend/appflowy_web_app/public/af_icons/work_education/search-dollar.svg new file mode 100644 index 0000000000..acb98adab2 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/work_education/search-dollar.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/public/af_icons/work_education/strategy-tasks.svg b/frontend/appflowy_web_app/public/af_icons/work_education/strategy-tasks.svg new file mode 100644 index 0000000000..3938e55804 --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/work_education/strategy-tasks.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/work_education/task-list.svg b/frontend/appflowy_web_app/public/af_icons/work_education/task-list.svg new file mode 100644 index 0000000000..24f3080a8b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/work_education/task-list.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/appflowy_web_app/public/af_icons/work_education/workspace-desk.svg b/frontend/appflowy_web_app/public/af_icons/work_education/workspace-desk.svg new file mode 100644 index 0000000000..9c2e287d7b --- /dev/null +++ b/frontend/appflowy_web_app/public/af_icons/work_education/workspace-desk.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/appflowy_web_app/scripts/generate_af_icons.cjs b/frontend/appflowy_web_app/scripts/generate_af_icons.cjs new file mode 100644 index 0000000000..9763beba56 --- /dev/null +++ b/frontend/appflowy_web_app/scripts/generate_af_icons.cjs @@ -0,0 +1,64 @@ +const fs = require('fs'); +const path = require('path'); + +const getIconsDir = () => path.resolve(__dirname, '../public/af_icons'); + +const readSvgFile = (filePath) => { + return fs.readFileSync(filePath, 'utf8'); +}; + +const renameSvgFile = (filePath, newName) => { + const newPath = path.join(path.dirname(filePath), newName); + fs.renameSync(filePath, newPath); +}; + +const processSvgFiles = (dirPath) => { + const categories = {}; + + const traverseDir = (currentPath) => { + const items = fs.readdirSync(currentPath); + + items.forEach((item) => { + const itemPath = path.join(currentPath, item); + const stat = fs.statSync(itemPath); + + if (stat.isDirectory()) { + traverseDir(itemPath); + } else if (stat.isFile() && path.extname(item) === '.svg') { + const category = path.basename(currentPath); + const [namePart, ...keywordParts] = path.basename(item, '.svg').split('--'); + const name = namePart; + const keywords = keywordParts.length > 0 ? keywordParts[0].split('-') : []; + const svgContent = readSvgFile(itemPath); + renameSvgFile(itemPath, `${name}.svg`); + if (!categories[category]) { + categories[category] = []; + } + + categories[category].push({ + id: `${category}/${name}`, + name, + keywords, + content: svgContent, + }); + } + }); + }; + + traverseDir(dirPath); + return categories; +}; + +const outputJson = (data, outputFilePath) => { + fs.writeFileSync(outputFilePath, JSON.stringify(data, null, 2)); +}; + +const main = () => { + const iconsDirPath = getIconsDir(); + const categories = processSvgFiles(iconsDirPath); + const outputFilePath = path.join(iconsDirPath, 'icons.json'); + outputJson(categories, outputFilePath); + console.log(`JSON data has been written to ${outputFilePath}`); +}; + +main(); diff --git a/frontend/appflowy_web_app/src-tauri/Cargo.lock b/frontend/appflowy_web_app/src-tauri/Cargo.lock index f44e96c08a..9f8bf03b05 100644 --- a/frontend/appflowy_web_app/src-tauri/Cargo.lock +++ b/frontend/appflowy_web_app/src-tauri/Cargo.lock @@ -163,7 +163,7 @@ checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "app-error" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "bincode", @@ -183,7 +183,7 @@ dependencies = [ [[package]] name = "appflowy-ai-client" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "bytes", @@ -800,7 +800,7 @@ dependencies = [ [[package]] name = "client-api" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "again", "anyhow", @@ -850,7 +850,7 @@ dependencies = [ [[package]] name = "client-api-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "collab-entity", "collab-rt-entity", @@ -862,7 +862,7 @@ dependencies = [ [[package]] name = "client-websocket" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "futures-channel", "futures-util", @@ -1115,7 +1115,7 @@ dependencies = [ [[package]] name = "collab-rt-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "bincode", @@ -1140,7 +1140,7 @@ dependencies = [ [[package]] name = "collab-rt-protocol" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "async-trait", @@ -1411,7 +1411,7 @@ dependencies = [ "cssparser-macros", "dtoa-short", "itoa 1.0.10", - "phf 0.11.2", + "phf 0.8.0", "smallvec", ] @@ -1522,7 +1522,7 @@ checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" [[package]] name = "database-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "app-error", @@ -3118,7 +3118,7 @@ dependencies = [ [[package]] name = "gotrue" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "futures-util", @@ -3135,7 +3135,7 @@ dependencies = [ [[package]] name = "gotrue-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "app-error", @@ -3572,7 +3572,7 @@ dependencies = [ [[package]] name = "infra" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "bytes", @@ -6162,7 +6162,7 @@ dependencies = [ [[package]] name = "shared-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "app-error", diff --git a/frontend/appflowy_web_app/src-tauri/Cargo.toml b/frontend/appflowy_web_app/src-tauri/Cargo.toml index bd8c4f9def..7815cbbe03 100644 --- a/frontend/appflowy_web_app/src-tauri/Cargo.toml +++ b/frontend/appflowy_web_app/src-tauri/Cargo.toml @@ -52,7 +52,7 @@ collab-user = { version = "0.2" } # Run the script: # scripts/tool/update_client_api_rev.sh new_rev_id # ⚠️⚠️⚠️️ -client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "a371912c61d79fa946ec78f0cb852fdd7d391356" } +client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "30c7acce96f1a7b8865c05e70b6e525eaa286b37" } [dependencies] serde_json.workspace = true diff --git a/frontend/appflowy_web_app/src/components/_shared/emoji-picker/EmojiPickerCategories.tsx b/frontend/appflowy_web_app/src/components/_shared/emoji-picker/EmojiPickerCategories.tsx index 0ea988ca8b..9b07222967 100644 --- a/frontend/appflowy_web_app/src/components/_shared/emoji-picker/EmojiPickerCategories.tsx +++ b/frontend/appflowy_web_app/src/components/_shared/emoji-picker/EmojiPickerCategories.tsx @@ -19,7 +19,7 @@ function EmojiPickerCategories({ onEscape?: () => void; defaultEmoji?: string; }) { - const scrollRef = React.useRef(null); + const scrollRef = useRef(null); const { t } = useTranslation(); const [selectCell, setSelectCell] = React.useState({ row: 1, diff --git a/frontend/appflowy_web_app/src/components/editor/components/blocks/text/StartIcon.hooks.tsx b/frontend/appflowy_web_app/src/components/editor/components/blocks/text/StartIcon.hooks.tsx index faae3fb358..2d11329153 100644 --- a/frontend/appflowy_web_app/src/components/editor/components/blocks/text/StartIcon.hooks.tsx +++ b/frontend/appflowy_web_app/src/components/editor/components/blocks/text/StartIcon.hooks.tsx @@ -43,7 +43,7 @@ export function useStartIcon(node: TextNode) { const classList = ['text-block-icon relative w-[24px]']; if (block.type === BlockType.QuoteBlock) { - classList.push('h-full'); + classList.push('h-full min-w-[24px]'); } else { classList.push('h-6'); } diff --git a/frontend/appflowy_web_app/src/components/publish/header/SpaceIcon.tsx b/frontend/appflowy_web_app/src/components/publish/header/SpaceIcon.tsx index de4baba493..4ea38df6f8 100644 --- a/frontend/appflowy_web_app/src/components/publish/header/SpaceIcon.tsx +++ b/frontend/appflowy_web_app/src/components/publish/header/SpaceIcon.tsx @@ -1,4 +1,5 @@ -import React from 'react'; +import { getIconSvgEncodedContent } from '@/utils/emoji'; +import React, { useEffect, useMemo, useState } from 'react'; import { ReactComponent as SpaceIcon1 } from '@/assets/space_icon/space_icon_1.svg'; import { ReactComponent as SpaceIcon2 } from '@/assets/space_icon/space_icon_2.svg'; import { ReactComponent as SpaceIcon3 } from '@/assets/space_icon/space_icon_3.svg'; @@ -18,6 +19,7 @@ import { ReactComponent as SpaceIcon15 } from '@/assets/space_icon/space_icon_15 export const getIconComponent = (icon: string) => { switch (icon) { case 'space_icon_1': + case '': return SpaceIcon1; case 'space_icon_2': return SpaceIcon2; @@ -47,15 +49,40 @@ export const getIconComponent = (icon: string) => { return SpaceIcon14; case 'space_icon_15': return SpaceIcon15; + default: - return SpaceIcon1; + return null; } }; function SpaceIcon({ value }: { value: string }) { const IconComponent = getIconComponent(value); + const [iconEncodeContent, setIconEncodeContent] = useState(null); - return ; + useEffect(() => { + if (value && !IconComponent) { + void getIconSvgEncodedContent(value, 'white').then((res) => { + setIconEncodeContent(res); + }); + } + }, [IconComponent, value]); + + const customIcon = useMemo(() => { + if (!iconEncodeContent) { + return null; + } + + /** + * value eg: 'artificial_intelligence/ai-cloud-spark'; + */ + return {value}; + }, [iconEncodeContent, value]); + + if (!IconComponent) { + return customIcon; + } + + return ; } export default SpaceIcon; diff --git a/frontend/appflowy_web_app/src/utils/emoji.ts b/frontend/appflowy_web_app/src/utils/emoji.ts index 054effb33d..4eee13aab2 100644 --- a/frontend/appflowy_web_app/src/utils/emoji.ts +++ b/frontend/appflowy_web_app/src/utils/emoji.ts @@ -1,4 +1,5 @@ import { EmojiMartData } from '@emoji-mart/data'; +import axios from 'axios'; export async function randomEmoji(skin = 0) { const emojiData = await loadEmojiData(); @@ -16,3 +17,49 @@ export async function loadEmojiData() { export function isFlagEmoji(emoji: string) { return /\uD83C[\uDDE6-\uDDFF]/.test(emoji); } + +export enum ICON_CATEGORY { + artificial_intelligence = 'artificial_intelligence', + computer_devices = 'computer_devices', + culture = 'culture', + entertainment = 'entertainment', + food_drink = 'food_drink', + health = 'health', + images_photography = 'images_photography', + interface_essential = 'interface_essential', + mail = 'mail', + map_travel = 'map_travel', + money_shopping = 'money_shopping', + nature_ecology = 'nature_ecology', + phone = 'phone', + programing = 'programing', + shipping = 'shipping', + work_education = 'work_education', +} + +export async function loadIcons(): Promise< + Record< + ICON_CATEGORY, + { + id: string; + name: string; + content: string; + keywords: string[]; + }[] + > +> { + return axios.get('/af_icons/icons.json').then((res) => res.data); +} + +export async function getIconSvgEncodedContent(id: string, color: string) { + try { + const { data } = await axios.get(`/af_icons/${id}.svg`); + + const urlEncodedContent = encodeURIComponent(data.replaceAll('black', color)); + + return `data:image/svg+xml;utf8,${urlEncodedContent}`; + } catch (e) { + console.error(e); + return null; + } +} diff --git a/frontend/resources/flowy_icons/16x/ai_attachment.svg b/frontend/resources/flowy_icons/16x/ai_attachment.svg new file mode 100644 index 0000000000..60a3cd5177 --- /dev/null +++ b/frontend/resources/flowy_icons/16x/ai_attachment.svg @@ -0,0 +1 @@ +Paperclip 1 Streamline Icon: https://streamlinehq.com \ No newline at end of file diff --git a/frontend/resources/flowy_icons/16x/flowy_logo.svg b/frontend/resources/flowy_icons/16x/flowy_logo.svg new file mode 100644 index 0000000000..96af87f8ff --- /dev/null +++ b/frontend/resources/flowy_icons/16x/flowy_logo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/frontend/resources/flowy_icons/16x/send.svg b/frontend/resources/flowy_icons/16x/send.svg index a5f933a8ca..b141b255b0 100644 --- a/frontend/resources/flowy_icons/16x/send.svg +++ b/frontend/resources/flowy_icons/16x/send.svg @@ -1,3 +1 @@ - - - +Arrow Up Streamline Icon: https://streamlinehq.com \ No newline at end of file diff --git a/frontend/resources/translations/en.json b/frontend/resources/translations/en.json index c5018f5d4e..e4c3386bb2 100644 --- a/frontend/resources/translations/en.json +++ b/frontend/resources/translations/en.json @@ -177,6 +177,7 @@ "referenceSource": "{} source found", "referenceSources": "{} sources found", "clickToMention": "Click to mention a page", + "uploadFile": "Upload PDFs, md or txt files to chat with", "indexingFile": "Indexing {}" }, "trash": { @@ -301,7 +302,8 @@ "askOwnerToUpgradeToAIMax": "Your workspace is running out of free AI responses. Please ask your workspace owner to upgrade the plan or purchase AI add-ons", "purchaseStorageSpace": "Purchase Storage Space", "purchaseAIResponse": "Purchase ", - "upgradeToAILocal": "AI offline on your device" + "askOwnerToUpgradeToLocalAI": "Ask workspace owner to enable AI On-device", + "upgradeToAILocal": "AI On-device on your device" }, "notifications": { "export": { @@ -654,7 +656,7 @@ "menuLabel": "AI Settings", "keys": { "enableAISearchTitle": "AI Search", - "aiSettingsDescription": "Select or configure AI models used on @:appName. For best performance we recommend using the default model options", + "aiSettingsDescription": "Choose your preferred model to power AppFlowy AI. Now includes GPT 4-o, Claude 3,5, Llama 3.1, and Mistral 7B", "loginToEnableAIFeature": "AI features are only enabled after logging in with @:appName Cloud. If you don't have an @:appName account, go to 'My Account' to sign up", "llmModel": "Language Model", "llmModelType": "Language Model Type", @@ -778,7 +780,7 @@ }, "aiOnDevice": { "label": "AI On-device for Mac", - "description": "Unlock unlimited AI offline on your device", + "description": "Unlock unlimited AI On-device on your device", "activeDescription": "Next invoice due on {}", "canceledDescription": "AI On-device for Mac will be available until {}" }, @@ -1477,7 +1479,7 @@ "autoGeneratorRewrite": "Rewrite", "smartEdit": "AI Assistants", "aI": "AI", - "smartEditFixSpelling": "Fix spelling", + "smartEditFixSpelling": "Fix spelling & grammar", "warning": "⚠️ AI responses can be inaccurate or misleading.", "smartEditSummarize": "Summarize", "smartEditImproveWriting": "Improve writing", @@ -1906,7 +1908,8 @@ "medium": "Medium", "mediumDark": "Medium-Dark", "dark": "Dark" - } + }, + "openSourceIconsFrom": "Open source icons from" }, "inlineActions": { "noResults": "No results", @@ -2374,4 +2377,4 @@ "commentAddedSuccessfully": "Comment added successfully.", "commentAddedSuccessTip": "You've just added or replied to a comment. Would you like to jump to the top to see the latest comments?" } -} \ No newline at end of file +} diff --git a/frontend/rust-lib/Cargo.lock b/frontend/rust-lib/Cargo.lock index a5098629f3..9d993c5e22 100644 --- a/frontend/rust-lib/Cargo.lock +++ b/frontend/rust-lib/Cargo.lock @@ -163,7 +163,7 @@ checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "app-error" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "bincode", @@ -183,7 +183,7 @@ dependencies = [ [[package]] name = "appflowy-ai-client" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "bytes", @@ -718,7 +718,7 @@ dependencies = [ [[package]] name = "client-api" version = "0.2.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "again", "anyhow", @@ -768,7 +768,7 @@ dependencies = [ [[package]] name = "client-api-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "collab-entity", "collab-rt-entity", @@ -780,7 +780,7 @@ dependencies = [ [[package]] name = "client-websocket" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "futures-channel", "futures-util", @@ -993,7 +993,7 @@ dependencies = [ [[package]] name = "collab-rt-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "bincode", @@ -1018,7 +1018,7 @@ dependencies = [ [[package]] name = "collab-rt-protocol" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "async-trait", @@ -1256,7 +1256,7 @@ dependencies = [ "cssparser-macros", "dtoa-short", "itoa", - "phf 0.8.0", + "phf 0.11.2", "smallvec", ] @@ -1356,7 +1356,7 @@ checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" [[package]] name = "database-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "app-error", @@ -2730,7 +2730,7 @@ dependencies = [ [[package]] name = "gotrue" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "futures-util", @@ -2747,7 +2747,7 @@ dependencies = [ [[package]] name = "gotrue-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "app-error", @@ -3112,7 +3112,7 @@ dependencies = [ [[package]] name = "infra" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "bytes", @@ -4068,7 +4068,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" dependencies = [ - "phf_macros", + "phf_macros 0.8.0", "phf_shared 0.8.0", "proc-macro-hack", ] @@ -4088,6 +4088,7 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" dependencies = [ + "phf_macros 0.11.2", "phf_shared 0.11.2", ] @@ -4155,6 +4156,19 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator 0.11.2", + "phf_shared 0.11.2", + "proc-macro2", + "quote", + "syn 2.0.47", +] + [[package]] name = "phf_shared" version = "0.8.0" @@ -5307,7 +5321,7 @@ dependencies = [ [[package]] name = "shared-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=a371912c61d79fa946ec78f0cb852fdd7d391356#a371912c61d79fa946ec78f0cb852fdd7d391356" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=30c7acce96f1a7b8865c05e70b6e525eaa286b37#30c7acce96f1a7b8865c05e70b6e525eaa286b37" dependencies = [ "anyhow", "app-error", diff --git a/frontend/rust-lib/Cargo.toml b/frontend/rust-lib/Cargo.toml index 1611828c0c..8fd538c6fb 100644 --- a/frontend/rust-lib/Cargo.toml +++ b/frontend/rust-lib/Cargo.toml @@ -99,8 +99,8 @@ zip = "2.1.3" # Run the script.add_workspace_members: # scripts/tool/update_client_api_rev.sh new_rev_id # ⚠️⚠️⚠️️ -client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "a371912c61d79fa946ec78f0cb852fdd7d391356" } -client-api-entity = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "a371912c61d79fa946ec78f0cb852fdd7d391356" } +client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "30c7acce96f1a7b8865c05e70b6e525eaa286b37" } +client-api-entity = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "30c7acce96f1a7b8865c05e70b6e525eaa286b37" } [profile.dev] opt-level = 0 diff --git a/frontend/rust-lib/flowy-ai-pub/src/cloud.rs b/frontend/rust-lib/flowy-ai-pub/src/cloud.rs index 8d7932dc01..2793cd18a6 100644 --- a/frontend/rust-lib/flowy-ai-pub/src/cloud.rs +++ b/frontend/rust-lib/flowy-ai-pub/src/cloud.rs @@ -12,7 +12,7 @@ use flowy_error::FlowyError; use futures::stream::BoxStream; use lib_infra::async_trait::async_trait; use lib_infra::future::FutureResult; -use std::path::PathBuf; +use std::path::Path; pub type ChatMessageStream = BoxStream<'static, Result>; pub type StreamAnswer = BoxStream<'static, Result>; @@ -83,7 +83,7 @@ pub trait ChatCloudService: Send + Sync + 'static { async fn index_file( &self, workspace_id: &str, - file_path: PathBuf, + file_path: &Path, chat_id: &str, ) -> Result<(), FlowyError>; diff --git a/frontend/rust-lib/flowy-ai/src/ai_manager.rs b/frontend/rust-lib/flowy-ai/src/ai_manager.rs index c0ae334f9f..424b141e4d 100644 --- a/frontend/rust-lib/flowy-ai/src/ai_manager.rs +++ b/frontend/rust-lib/flowy-ai/src/ai_manager.rs @@ -1,22 +1,19 @@ use crate::chat::Chat; use crate::entities::{ - ChatMessageListPB, ChatMessagePB, CreateChatContextPB, RepeatedRelatedQuestionPB, + ChatInfoPB, ChatMessageListPB, ChatMessagePB, FilePB, RepeatedRelatedQuestionPB, }; use crate::local_ai::local_llm_chat::LocalAIController; use crate::middleware::chat_service_mw::AICloudServiceMiddleware; -use crate::persistence::{insert_chat, ChatTable}; +use crate::persistence::{insert_chat, read_chat_metadata, ChatTable}; use appflowy_plugin::manager::PluginManager; use dashmap::DashMap; -use flowy_ai_pub::cloud::{ - ChatCloudService, ChatMessageMetadata, ChatMessageType, CreateTextChatContext, -}; +use flowy_ai_pub::cloud::{ChatCloudService, ChatMessageMetadata, ChatMessageType}; use flowy_error::{FlowyError, FlowyResult}; use flowy_sqlite::kv::KVStorePreferences; use flowy_sqlite::DBConnection; use lib_infra::util::timestamp; -use serde_json::json; use std::path::PathBuf; use std::sync::Arc; use tracing::{info, trace}; @@ -106,25 +103,22 @@ impl AIManager { Ok(()) } - pub async fn create_chat_context(&self, context: CreateChatContextPB) -> FlowyResult<()> { - let workspace_id = self.user_service.workspace_id()?; - let context = CreateTextChatContext { - chat_id: context.chat_id, - content_type: context.content_type, - text: context.text, - chunk_size: 2000, - chunk_overlap: 20, - metadata: context - .metadata - .into_iter() - .map(|(k, v)| (k, json!(v))) - .collect(), - }; - self - .cloud_service_wm - .create_chat_context(&workspace_id, context) - .await?; - Ok(()) + pub async fn get_chat_info(&self, chat_id: &str) -> FlowyResult { + let mut conn = self.user_service.sqlite_connection(0)?; + let metadata = read_chat_metadata(&mut conn, chat_id)?; + let files = metadata + .files + .into_iter() + .map(|file| FilePB { + id: file.id, + name: file.name, + }) + .collect(); + + Ok(ChatInfoPB { + chat_id: chat_id.to_string(), + files, + }) } pub async fn create_chat(&self, uid: &i64, chat_id: &str) -> Result, FlowyError> { @@ -260,10 +254,10 @@ fn save_chat(conn: DBConnection, chat_id: &str) -> FlowyResult<()> { chat_id: chat_id.to_string(), created_at: timestamp(), name: "".to_string(), - local_model_path: "".to_string(), - local_model_name: "".to_string(), + local_files: "".to_string(), + metadata: "".to_string(), local_enabled: false, - sync_to_cloud: true, + sync_to_cloud: false, }; insert_chat(conn, &row)?; diff --git a/frontend/rust-lib/flowy-ai/src/chat.rs b/frontend/rust-lib/flowy-ai/src/chat.rs index e3b0808afd..11116f451f 100644 --- a/frontend/rust-lib/flowy-ai/src/chat.rs +++ b/frontend/rust-lib/flowy-ai/src/chat.rs @@ -4,7 +4,10 @@ use crate::entities::{ }; use crate::middleware::chat_service_mw::AICloudServiceMiddleware; use crate::notification::{make_notification, ChatNotification}; -use crate::persistence::{insert_chat_messages, select_chat_messages, ChatMessageTable}; +use crate::persistence::{ + insert_chat_messages, read_chat_metadata, select_chat_messages, update_chat, ChatMessageTable, + ChatTableChangeset, +}; use allo_isolate::Isolate; use flowy_ai_pub::cloud::{ ChatCloudService, ChatMessage, ChatMessageMetadata, ChatMessageType, MessageCursor, @@ -481,9 +484,37 @@ impl Chat { ); self .chat_service - .index_file(&self.user_service.workspace_id()?, file_path, &self.chat_id) + .index_file( + &self.user_service.workspace_id()?, + &file_path, + &self.chat_id, + ) .await?; + let file_name = file_path + .file_name() + .unwrap_or_default() + .to_str() + .unwrap_or_default(); + + let mut conn = self.user_service.sqlite_connection(self.uid)?; + conn.immediate_transaction(|conn| { + let mut metadata = read_chat_metadata(conn, &self.chat_id)?; + metadata.add_file( + file_name.to_string(), + file_path.to_str().unwrap_or_default().to_string(), + ); + let changeset = ChatTableChangeset::from_metadata(metadata); + update_chat(conn, changeset)?; + Ok::<(), FlowyError>(()) + })?; + + trace!( + "[Chat] created index file record: chat_id={}, file_path={:?}", + self.chat_id, + file_path + ); + Ok(()) } } diff --git a/frontend/rust-lib/flowy-ai/src/entities.rs b/frontend/rust-lib/flowy-ai/src/entities.rs index 21f17a0d98..5ff3cd5bd3 100644 --- a/frontend/rust-lib/flowy-ai/src/entities.rs +++ b/frontend/rust-lib/flowy-ai/src/entities.rs @@ -9,6 +9,29 @@ use flowy_ai_pub::cloud::{ use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; use lib_infra::validator_fn::required_not_empty_str; use validator::Validate; +#[derive(Default, ProtoBuf, Validate, Clone, Debug)] +pub struct ChatId { + #[pb(index = 1)] + #[validate(custom = "required_not_empty_str")] + pub value: String, +} + +#[derive(Default, ProtoBuf, Clone, Debug)] +pub struct ChatInfoPB { + #[pb(index = 1)] + pub chat_id: String, + + #[pb(index = 2)] + pub files: Vec, +} + +#[derive(Default, ProtoBuf, Clone, Debug)] +pub struct FilePB { + #[pb(index = 1)] + pub id: String, + #[pb(index = 2)] + pub name: String, +} #[derive(Default, ProtoBuf, Validate, Clone, Debug)] pub struct SendChatPayloadPB { @@ -53,7 +76,10 @@ pub struct ChatMessageMetaPB { pub name: String, #[pb(index = 3)] - pub text: String, + pub data: String, + + #[pb(index = 4)] + pub source: String, } #[derive(Default, ProtoBuf, Validate, Clone, Debug)] diff --git a/frontend/rust-lib/flowy-ai/src/event_handler.rs b/frontend/rust-lib/flowy-ai/src/event_handler.rs index bb8af3f7a3..dd8e984ee4 100644 --- a/frontend/rust-lib/flowy-ai/src/event_handler.rs +++ b/frontend/rust-lib/flowy-ai/src/event_handler.rs @@ -1,3 +1,4 @@ +use std::fs; use std::path::PathBuf; use crate::ai_manager::AIManager; @@ -39,10 +40,11 @@ pub(crate) async fn stream_chat_message_handler( .metadata .into_iter() .map(|metadata| ChatMessageMetadata { - data: ChatMetadataData::new_text(metadata.text), + data: ChatMetadataData::new_text(metadata.data), id: metadata.id, name: metadata.name.clone(), - source: metadata.name, + source: metadata.source, + extract: None, }) .collect::>(); @@ -231,6 +233,24 @@ pub(crate) async fn chat_file_handler( "Only support pdf,md and txt", )); } + let file_size = fs::metadata(&file_path) + .map_err(|_| { + FlowyError::new( + ErrorCode::UnsupportedFileFormat, + "Failed to get file metadata", + ) + })? + .len(); + + const MAX_FILE_SIZE: u64 = 10 * 1024 * 1024; + if file_size > MAX_FILE_SIZE { + return Err(FlowyError::new( + ErrorCode::PayloadTooLarge, + "File size is too large. Max file size is 10MB", + )); + } + + tracing::debug!("File size: {} bytes", file_size); let (tx, rx) = oneshot::channel::>(); tokio::spawn(async move { @@ -406,3 +426,14 @@ pub(crate) async fn create_chat_context_handler( Ok(()) } + +#[tracing::instrument(level = "debug", skip_all, err)] +pub(crate) async fn get_chat_info_handler( + data: AFPluginData, + ai_manager: AFPluginState>, +) -> DataResult { + let chat_id = data.try_into_inner()?.value; + let ai_manager = upgrade_ai_manager(ai_manager)?; + let pb = ai_manager.get_chat_info(&chat_id).await?; + data_result_ok(pb) +} diff --git a/frontend/rust-lib/flowy-ai/src/event_map.rs b/frontend/rust-lib/flowy-ai/src/event_map.rs index e4e9d03b4c..109be1a253 100644 --- a/frontend/rust-lib/flowy-ai/src/event_map.rs +++ b/frontend/rust-lib/flowy-ai/src/event_map.rs @@ -56,6 +56,7 @@ pub fn init(ai_manager: Weak) -> AFPlugin { ) .event(AIEvent::GetOfflineAIAppLink, get_offline_app_handler) .event(AIEvent::CreateChatContext, create_chat_context_handler) + .event(AIEvent::GetChatInfo, create_chat_context_handler) } #[derive(Clone, Copy, PartialEq, Eq, Debug, Display, Hash, ProtoBuf_Enum, Flowy_Event)] @@ -138,4 +139,7 @@ pub enum AIEvent { #[event(input = "CreateChatContextPB")] CreateChatContext = 23, + + #[event(input = "ChatId", output = "ChatInfoPB")] + GetChatInfo = 24, } diff --git a/frontend/rust-lib/flowy-ai/src/middleware/chat_service_mw.rs b/frontend/rust-lib/flowy-ai/src/middleware/chat_service_mw.rs index 712e452d39..76a961531c 100644 --- a/frontend/rust-lib/flowy-ai/src/middleware/chat_service_mw.rs +++ b/frontend/rust-lib/flowy-ai/src/middleware/chat_service_mw.rs @@ -16,7 +16,7 @@ use lib_infra::async_trait::async_trait; use lib_infra::future::FutureResult; use crate::local_ai::stream_util::LocalAIStreamAdaptor; -use std::path::PathBuf; +use std::path::Path; use std::sync::Arc; pub struct AICloudServiceMiddleware { @@ -242,13 +242,13 @@ impl ChatCloudService for AICloudServiceMiddleware { async fn index_file( &self, workspace_id: &str, - file_path: PathBuf, + file_path: &Path, chat_id: &str, ) -> Result<(), FlowyError> { if self.local_llm_controller.is_running() { self .local_llm_controller - .index_file(chat_id, file_path) + .index_file(chat_id, file_path.to_path_buf()) .await .map_err(|err| FlowyError::local_ai().with_context(err))?; Ok(()) diff --git a/frontend/rust-lib/flowy-ai/src/persistence/chat_sql.rs b/frontend/rust-lib/flowy-ai/src/persistence/chat_sql.rs index 9971713afb..6086c8e466 100644 --- a/frontend/rust-lib/flowy-ai/src/persistence/chat_sql.rs +++ b/frontend/rust-lib/flowy-ai/src/persistence/chat_sql.rs @@ -1,4 +1,5 @@ use diesel::sqlite::SqliteConnection; +use flowy_error::FlowyResult; use flowy_sqlite::upsert::excluded; use flowy_sqlite::{ diesel, @@ -6,6 +7,7 @@ use flowy_sqlite::{ schema::{chat_table, chat_table::dsl}, AsChangeset, DBConnection, ExpressionMethods, Identifiable, Insertable, QueryResult, Queryable, }; +use serde::{Deserialize, Serialize}; #[derive(Clone, Default, Queryable, Insertable, Identifiable)] #[diesel(table_name = chat_table)] @@ -14,24 +16,54 @@ pub struct ChatTable { pub chat_id: String, pub created_at: i64, pub name: String, - pub local_model_path: String, - pub local_model_name: String, + pub local_files: String, + pub metadata: String, pub local_enabled: bool, pub sync_to_cloud: bool, } +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +pub struct ChatTableMetadata { + pub files: Vec, +} + +impl ChatTableMetadata { + pub fn add_file(&mut self, name: String, id: String) { + if let Some(file) = self.files.iter_mut().find(|f| f.name == name) { + file.id = id; + } else { + self.files.push(ChatTableFile { name, id }); + } + } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ChatTableFile { + pub name: String, + pub id: String, +} + #[derive(AsChangeset, Identifiable, Default, Debug)] #[diesel(table_name = chat_table)] #[diesel(primary_key(chat_id))] pub struct ChatTableChangeset { pub chat_id: String, pub name: Option, - pub local_model_path: Option, - pub local_model_name: Option, + pub local_files: Option, + pub metadata: Option, pub local_enabled: Option, pub sync_to_cloud: Option, } +impl ChatTableChangeset { + pub fn from_metadata(metadata: ChatTableMetadata) -> Self { + ChatTableChangeset { + metadata: serde_json::to_string(&metadata).ok(), + ..Default::default() + } + } +} + pub fn insert_chat(mut conn: DBConnection, new_chat: &ChatTable) -> QueryResult { diesel::insert_into(chat_table::table) .values(new_chat) @@ -44,8 +76,7 @@ pub fn insert_chat(mut conn: DBConnection, new_chat: &ChatTable) -> QueryResult< .execute(&mut *conn) } -#[allow(dead_code)] -pub fn update_chat_local_model( +pub fn update_chat( conn: &mut SqliteConnection, changeset: ChatTableChangeset, ) -> QueryResult { @@ -62,6 +93,18 @@ pub fn read_chat(mut conn: DBConnection, chat_id_val: &str) -> QueryResult FlowyResult { + let metadata_str = dsl::chat_table + .select(chat_table::metadata) + .filter(chat_table::chat_id.eq(chat_id_val)) + .first::(&mut *conn)?; + let value = serde_json::from_str(&metadata_str).unwrap_or_default(); + Ok(value) +} + #[allow(dead_code)] pub fn update_chat_name( mut conn: DBConnection, diff --git a/frontend/rust-lib/flowy-core/src/integrate/trait_impls.rs b/frontend/rust-lib/flowy-core/src/integrate/trait_impls.rs index 0f6d414233..da2d9d41e6 100644 --- a/frontend/rust-lib/flowy-core/src/integrate/trait_impls.rs +++ b/frontend/rust-lib/flowy-core/src/integrate/trait_impls.rs @@ -1,6 +1,6 @@ use client_api::entity::search_dto::SearchDocumentResponseItem; use flowy_search_pub::cloud::SearchCloudService; -use std::path::PathBuf; +use std::path::Path; use std::sync::Arc; use anyhow::Error; @@ -729,7 +729,7 @@ impl ChatCloudService for ServerProvider { async fn index_file( &self, workspace_id: &str, - file_path: PathBuf, + file_path: &Path, chat_id: &str, ) -> Result<(), FlowyError> { self diff --git a/frontend/rust-lib/flowy-error/src/code.rs b/frontend/rust-lib/flowy-error/src/code.rs index 3c71bff3b0..fc12ed4606 100644 --- a/frontend/rust-lib/flowy-error/src/code.rs +++ b/frontend/rust-lib/flowy-error/src/code.rs @@ -257,8 +257,8 @@ pub enum ErrorCode { #[error("AppFlowy data folder import error")] AppFlowyDataFolderImportError = 89, - #[error("Cloud request payload too large")] - CloudRequestPayloadTooLarge = 90, + #[error("payload too large")] + PayloadTooLarge = 90, #[error("Workspace limit exceeded")] WorkspaceLimitExceeded = 91, @@ -304,6 +304,9 @@ pub enum ErrorCode { #[error("AI offline not started")] AIOfflineNotInstalled = 105, + + #[error("Invalid Request")] + InvalidRequest = 106, } impl ErrorCode { diff --git a/frontend/rust-lib/flowy-error/src/impl_from/cloud.rs b/frontend/rust-lib/flowy-error/src/impl_from/cloud.rs index bb4059164f..c857fc7ec9 100644 --- a/frontend/rust-lib/flowy-error/src/impl_from/cloud.rs +++ b/frontend/rust-lib/flowy-error/src/impl_from/cloud.rs @@ -15,12 +15,12 @@ impl From for FlowyError { AppErrorCode::MissingPayload => ErrorCode::MissingPayload, AppErrorCode::OpenError => ErrorCode::Internal, AppErrorCode::InvalidUrl => ErrorCode::InvalidURL, - AppErrorCode::InvalidRequest => ErrorCode::InvalidParams, + AppErrorCode::InvalidRequest => ErrorCode::InvalidRequest, AppErrorCode::InvalidOAuthProvider => ErrorCode::InvalidAuthConfig, AppErrorCode::NotLoggedIn => ErrorCode::UserUnauthorized, AppErrorCode::NotEnoughPermissions => ErrorCode::NotEnoughPermissions, AppErrorCode::NetworkError => ErrorCode::HttpError, - AppErrorCode::PayloadTooLarge => ErrorCode::CloudRequestPayloadTooLarge, + AppErrorCode::PayloadTooLarge => ErrorCode::PayloadTooLarge, AppErrorCode::UserUnAuthorized => ErrorCode::UserUnauthorized, AppErrorCode::WorkspaceLimitExceeded => ErrorCode::WorkspaceLimitExceeded, AppErrorCode::WorkspaceMemberLimitExceeded => ErrorCode::WorkspaceMemberLimitExceeded, diff --git a/frontend/rust-lib/flowy-server/src/af_cloud/impls/chat.rs b/frontend/rust-lib/flowy-server/src/af_cloud/impls/chat.rs index 77a0198a97..ca07dbc285 100644 --- a/frontend/rust-lib/flowy-server/src/af_cloud/impls/chat.rs +++ b/frontend/rust-lib/flowy-server/src/af_cloud/impls/chat.rs @@ -16,7 +16,7 @@ use lib_infra::async_trait::async_trait; use lib_infra::future::FutureResult; use lib_infra::util::{get_operating_system, OperatingSystem}; use serde_json::json; -use std::path::PathBuf; +use std::path::Path; pub(crate) struct AFCloudChatCloudServiceImpl { pub inner: T, @@ -192,7 +192,7 @@ where async fn index_file( &self, _workspace_id: &str, - _file_path: PathBuf, + _file_path: &Path, _chat_id: &str, ) -> Result<(), FlowyError> { return Err( diff --git a/frontend/rust-lib/flowy-server/src/default_impl.rs b/frontend/rust-lib/flowy-server/src/default_impl.rs index c2fde180d8..22f6688ba9 100644 --- a/frontend/rust-lib/flowy-server/src/default_impl.rs +++ b/frontend/rust-lib/flowy-server/src/default_impl.rs @@ -6,7 +6,7 @@ use flowy_ai_pub::cloud::{ use flowy_error::FlowyError; use lib_infra::async_trait::async_trait; use lib_infra::future::FutureResult; -use std::path::PathBuf; +use std::path::Path; pub(crate) struct DefaultChatCloudServiceImpl; @@ -100,7 +100,7 @@ impl ChatCloudService for DefaultChatCloudServiceImpl { async fn index_file( &self, _workspace_id: &str, - _file_path: PathBuf, + _file_path: &Path, _chat_id: &str, ) -> Result<(), FlowyError> { Err(FlowyError::not_support().with_context("indexing file is not supported in local server.")) diff --git a/frontend/rust-lib/flowy-sqlite/migrations/2024-08-07-093650_chat_metadata/down.sql b/frontend/rust-lib/flowy-sqlite/migrations/2024-08-07-093650_chat_metadata/down.sql new file mode 100644 index 0000000000..d9a93fe9a1 --- /dev/null +++ b/frontend/rust-lib/flowy-sqlite/migrations/2024-08-07-093650_chat_metadata/down.sql @@ -0,0 +1 @@ +-- This file should undo anything in `up.sql` diff --git a/frontend/rust-lib/flowy-sqlite/migrations/2024-08-07-093650_chat_metadata/up.sql b/frontend/rust-lib/flowy-sqlite/migrations/2024-08-07-093650_chat_metadata/up.sql new file mode 100644 index 0000000000..948cf866a7 --- /dev/null +++ b/frontend/rust-lib/flowy-sqlite/migrations/2024-08-07-093650_chat_metadata/up.sql @@ -0,0 +1,4 @@ +-- Your SQL goes here +ALTER TABLE chat_table RENAME COLUMN local_model_path TO local_files; +ALTER TABLE chat_table RENAME COLUMN local_model_name TO metadata; + diff --git a/frontend/rust-lib/flowy-sqlite/src/schema.rs b/frontend/rust-lib/flowy-sqlite/src/schema.rs index b65e026f6a..28d278c6a4 100644 --- a/frontend/rust-lib/flowy-sqlite/src/schema.rs +++ b/frontend/rust-lib/flowy-sqlite/src/schema.rs @@ -26,8 +26,8 @@ diesel::table! { chat_id -> Text, created_at -> BigInt, name -> Text, - local_model_path -> Text, - local_model_name -> Text, + local_files -> Text, + metadata -> Text, local_enabled -> Bool, sync_to_cloud -> Bool, }