feat(ai-scribe): Optimize imports to avoid having too many lines of code in a single file

This commit is contained in:
dab246
2025-12-18 09:48:03 +07:00
committed by Dat H. Pham
parent 860393fc90
commit af5f316e31
29 changed files with 71 additions and 118 deletions
+20
View File
@@ -6,17 +6,37 @@ export 'scribe/ai/domain/model/ai_response.dart';
export 'scribe/ai/domain/repository/ai_scribe_repository.dart';
export 'scribe/ai/domain/state/generate_ai_text_state.dart';
export 'scribe/ai/domain/usecases/generate_ai_text_interactor.dart';
export 'scribe/ai/localizations/scribe_localizations.dart';
export 'scribe/ai/presentation/model/ai_action.dart';
export 'scribe/ai/presentation/model/ai_capability.dart';
export 'scribe/ai/presentation/model/ai_scribe_menu_action.dart';
export 'scribe/ai/presentation/model/context_menu/ai_scribe_action_context_menu_action.dart';
export 'scribe/ai/presentation/model/context_menu/ai_scribe_category_context_menu_action.dart';
export 'scribe/ai/presentation/model/context_menu/ai_scribe_context_menu_action.dart';
export 'scribe/ai/presentation/model/context_menu/ai_scribe_suggestion_actions.dart';
export 'scribe/ai/presentation/model/modal/anchored_modal_layout_input.dart';
export 'scribe/ai/presentation/model/modal/anchored_modal_layout_result.dart';
export 'scribe/ai/presentation/model/modal/modal_cross_axis_alignment.dart';
export 'scribe/ai/presentation/model/modal/modal_placement.dart';
export 'scribe/ai/presentation/model/text_selection_model.dart';
export 'scribe/ai/presentation/styles/ai_scribe_styles.dart';
export 'scribe/ai/presentation/utils/ai_scribe_constants.dart';
export 'scribe/ai/presentation/utils/context_menu/hover_submenu_controller.dart';
export 'scribe/ai/presentation/utils/context_menu/popup_submenu_controller.dart';
export 'scribe/ai/presentation/utils/modal/ai_scribe_modal_manager.dart';
export 'scribe/ai/presentation/utils/modal/anchored_modal_layout_calculator.dart';
export 'scribe/ai/presentation/widgets/button/ai_assistant_button.dart';
export 'scribe/ai/presentation/widgets/button/inline_ai_assist_button.dart';
export 'scribe/ai/presentation/widgets/context_menu/ai_scribe_context_menu.dart';
export 'scribe/ai/presentation/widgets/context_menu/ai_scribe_context_menu_item.dart';
export 'scribe/ai/presentation/widgets/context_menu/ai_scribe_submenu.dart';
export 'scribe/ai/presentation/widgets/context_menu/ai_scribe_submenu_item.dart';
export 'scribe/ai/presentation/widgets/modal/ai_scribe_modal_widget.dart';
export 'scribe/ai/presentation/widgets/modal/ai_scribe_suggestion_widget.dart';
export 'scribe/ai/presentation/widgets/modal/suggestion/ai_scribe_suggestion_error.dart';
export 'scribe/ai/presentation/widgets/modal/suggestion/ai_scribe_suggestion_header.dart';
export 'scribe/ai/presentation/widgets/modal/suggestion/ai_scribe_suggestion_loading.dart';
export 'scribe/ai/presentation/widgets/modal/suggestion/ai_scribe_suggestion_success.dart';
export 'scribe/ai/presentation/widgets/modal/suggestion/ai_scribe_suggestion_success_list_actions.dart';
export 'scribe/ai/presentation/widgets/overlay/ai_selection_overlay.dart';
export 'scribe/ai/presentation/widgets/search/ai_scribe_bar.dart';
@@ -6,11 +6,10 @@ part 'ai_api_response.g.dart';
class AIApiResponse {
final List<Choice> choices;
const AIApiResponse({
required this.choices
});
const AIApiResponse({required this.choices});
factory AIApiResponse.fromJson(Map<String, dynamic> json) => _$AIApiResponseFromJson(json);
factory AIApiResponse.fromJson(Map<String, dynamic> json) =>
_$AIApiResponseFromJson(json);
Map<String, dynamic> toJson() => _$AIApiResponseToJson(this);
@@ -21,9 +20,7 @@ class AIApiResponse {
class Choice {
final Message message;
const Choice({
required this.message
});
const Choice({required this.message});
factory Choice.fromJson(Map<String, dynamic> json) => _$ChoiceFromJson(json);
@@ -34,11 +31,10 @@ class Choice {
class Message {
final String content;
const Message({
required this.content
});
const Message({required this.content});
factory Message.fromJson(Map<String, dynamic> json) => _$MessageFromJson(json);
factory Message.fromJson(Map<String, dynamic> json) =>
_$MessageFromJson(json);
Map<String, dynamic> toJson() => _$MessageToJson(this);
}
@@ -6,8 +6,10 @@ import 'package:scribe/scribe/ai/presentation/model/ai_scribe_menu_action.dart';
class AIPrompts {
static String buildPrompt(AIAction action, String? text) {
return switch (action) {
PredefinedAction(action: final menuAction) => buildPredefinedPrompt(menuAction, text ?? ''),
CustomPromptAction(prompt: final customPrompt) => buildCustomPrompt(customPrompt, text),
PredefinedAction(action: final menuAction) =>
buildPredefinedPrompt(menuAction, text ?? ''),
CustomPromptAction(prompt: final customPrompt) =>
buildCustomPrompt(customPrompt, text),
};
}
@@ -1,4 +1,5 @@
import 'package:core/core.dart';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:scribe/scribe/ai/domain/model/ai_response.dart';
class GenerateAITextLoading extends LoadingState {}
@@ -1,14 +1,10 @@
import 'package:core/core.dart';
import 'package:core/data/network/dio_client.dart';
import 'package:get/get.dart';
import 'package:scribe/scribe/ai/data/datasource/ai_datasource.dart';
import 'package:scribe/scribe.dart';
import 'package:scribe/scribe/ai/data/datasource_impl/ai_datasource_impl.dart';
import 'package:scribe/scribe/ai/data/network/ai_api.dart';
import 'package:scribe/scribe/ai/data/repository/ai_repository_impl.dart';
import 'package:scribe/scribe/ai/domain/repository/ai_scribe_repository.dart';
import 'package:scribe/scribe/ai/domain/usecases/generate_ai_text_interactor.dart';
class AIScribeBindings extends Bindings {
final String aiEndpoint;
AIScribeBindings(this.aiEndpoint);
@@ -1,5 +1,4 @@
import 'package:scribe/scribe/ai/localizations/scribe_localizations.dart';
import 'package:scribe/scribe/ai/presentation/model/ai_scribe_menu_action.dart';
import 'package:scribe/scribe.dart';
sealed class AIAction {
const AIAction();
@@ -9,13 +9,16 @@ class AICapability extends CapabilityProperties {
final String? scribeEndpoint;
factory AICapability.fromJson(Map<String, dynamic> json) => _$AICapabilityFromJson(json);
factory AICapability.fromJson(Map<String, dynamic> json) =>
_$AICapabilityFromJson(json);
Map<String, dynamic> toJson() => _$AICapabilityToJson(this);
factory AICapability.deserialize(Map<String, dynamic> json) => _$AICapabilityFromJson(json);
factory AICapability.deserialize(Map<String, dynamic> json) =>
_$AICapabilityFromJson(json);
bool get isScribeEndpointAvailable => scribeEndpoint?.trim().isNotEmpty == true;
bool get isScribeEndpointAvailable =>
scribeEndpoint?.trim().isNotEmpty == true;
@override
List<Object?> get props => [scribeEndpoint];
@@ -1,7 +1,5 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:scribe/scribe/ai/localizations/scribe_localizations.dart';
import 'package:scribe/scribe/ai/presentation/model/ai_scribe_menu_action.dart';
import 'package:scribe/scribe/ai/presentation/model/context_menu/ai_scribe_context_menu_action.dart';
import 'package:scribe/scribe.dart';
class AiScribeActionContextMenuAction
extends AiScribeContextMenuAction<AIScribeMenuAction> {
@@ -1,8 +1,5 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:scribe/scribe/ai/localizations/scribe_localizations.dart';
import 'package:scribe/scribe/ai/presentation/model/ai_scribe_menu_action.dart';
import 'package:scribe/scribe/ai/presentation/model/context_menu/ai_scribe_action_context_menu_action.dart';
import 'package:scribe/scribe/ai/presentation/model/context_menu/ai_scribe_context_menu_action.dart';
import 'package:scribe/scribe.dart';
class AiScribeCategoryContextMenuAction
extends AiScribeContextMenuAction<AIScribeMenuCategory> {
@@ -12,4 +12,4 @@ enum AiScribeSuggestionActions {
return localizations.insert;
}
}
}
}
@@ -1,6 +1,5 @@
import 'package:flutter/animation.dart';
import 'package:scribe/scribe/ai/presentation/model/modal/modal_cross_axis_alignment.dart';
import 'package:scribe/scribe/ai/presentation/model/modal/modal_placement.dart';
import 'package:scribe/scribe.dart';
class AnchoredModalLayoutInput {
final Size screenSize;
@@ -1,6 +1 @@
enum ModalPlacement {
right,
bottom,
top,
left
}
enum ModalPlacement { right, bottom, top, left }
@@ -68,21 +68,24 @@ abstract final class AIScribeTextStyles {
color: Colors.black.withValues(alpha: 0.85),
);
static final TextStyle suggestionTitle = ThemeUtils.textStyleInter700().copyWith(
static final TextStyle suggestionTitle =
ThemeUtils.textStyleInter700().copyWith(
fontSize: 14,
height: 22 / 14,
letterSpacing: 0.4,
color: AppColor.black1A1A1A.withValues(alpha: 0.85),
);
static final TextStyle suggestionLoading = ThemeUtils.textStyleInter400.copyWith(
static final TextStyle suggestionLoading =
ThemeUtils.textStyleInter400.copyWith(
fontSize: 14,
height: 22 / 14,
letterSpacing: 0.4,
color: AppColor.black1A1A1A.withValues(alpha: 0.85),
);
static final TextStyle suggestionContent = ThemeUtils.textStyleInter400.copyWith(
static final TextStyle suggestionContent =
ThemeUtils.textStyleInter400.copyWith(
fontSize: 14,
height: 22 / 14,
letterSpacing: 0.4,
@@ -1,15 +1,7 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:scribe/scribe/ai/presentation/model/ai_action.dart';
import 'package:scribe/scribe/ai/presentation/model/ai_scribe_menu_action.dart';
import 'package:scribe/scribe/ai/presentation/model/modal/modal_cross_axis_alignment.dart';
import 'package:scribe/scribe/ai/presentation/model/modal/modal_placement.dart';
import 'package:scribe/scribe/ai/presentation/styles/ai_scribe_styles.dart';
import 'package:scribe/scribe/ai/presentation/utils/context_menu/popup_submenu_controller.dart';
import 'package:scribe/scribe/ai/presentation/widgets/modal/ai_scribe_modal_widget.dart';
import 'package:scribe/scribe/ai/presentation/widgets/modal/ai_scribe_suggestion_widget.dart';
import 'package:scribe/scribe/ai/presentation/widgets/modal/suggestion/ai_scribe_suggestion_success_list_actions.dart';
import 'package:scribe/scribe.dart';
class AiScribeModalManager {
AiScribeModalManager._();
@@ -1,8 +1,5 @@
import 'package:flutter/animation.dart';
import 'package:scribe/scribe/ai/presentation/model/modal/anchored_modal_layout_input.dart';
import 'package:scribe/scribe/ai/presentation/model/modal/anchored_modal_layout_result.dart';
import 'package:scribe/scribe/ai/presentation/model/modal/modal_cross_axis_alignment.dart';
import 'package:scribe/scribe/ai/presentation/model/modal/modal_placement.dart';
import 'package:scribe/scribe.dart';
class AnchoredModalLayoutCalculator {
static AnchoredModalLayoutResult calculate({
@@ -1,8 +1,7 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/views/button/tmail_button_widget.dart';
import 'package:flutter/material.dart';
import 'package:scribe/scribe/ai/localizations/scribe_localizations.dart';
import 'package:scribe/scribe/ai/presentation/styles/ai_scribe_styles.dart';
import 'package:scribe/scribe.dart';
typedef OnOpenAiAssistantModal = void Function(
Offset? position,
@@ -1,10 +1,7 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/views/button/tmail_button_widget.dart';
import 'package:flutter/material.dart';
import 'package:scribe/scribe/ai/presentation/model/ai_scribe_menu_action.dart';
import 'package:scribe/scribe/ai/presentation/styles/ai_scribe_styles.dart';
import 'package:scribe/scribe/ai/presentation/utils/modal/ai_scribe_modal_manager.dart';
import 'package:scribe/scribe/ai/presentation/widgets/modal/suggestion/ai_scribe_suggestion_success_list_actions.dart';
import 'package:scribe/scribe.dart';
class InlineAiAssistButton extends StatelessWidget {
final ImagePaths imagePaths;
@@ -1,10 +1,6 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:flutter/material.dart';
import 'package:scribe/scribe/ai/presentation/model/context_menu/ai_scribe_context_menu_action.dart';
import 'package:scribe/scribe/ai/presentation/styles/ai_scribe_styles.dart';
import 'package:scribe/scribe/ai/presentation/utils/context_menu/popup_submenu_controller.dart';
import 'package:scribe/scribe/ai/presentation/widgets/context_menu/ai_scribe_context_menu_item.dart';
import 'package:scribe/scribe/ai/presentation/widgets/context_menu/ai_scribe_submenu.dart';
import 'package:scribe/scribe.dart';
class AiScribeContextMenu extends StatefulWidget {
final ImagePaths imagePaths;
@@ -2,9 +2,7 @@ import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:scribe/scribe/ai/presentation/model/context_menu/ai_scribe_context_menu_action.dart';
import 'package:scribe/scribe/ai/presentation/styles/ai_scribe_styles.dart';
import 'package:scribe/scribe/ai/presentation/utils/context_menu/hover_submenu_controller.dart';
import 'package:scribe/scribe.dart';
class AiScribeContextMenuItem extends StatefulWidget {
final AiScribeContextMenuAction menuAction;
@@ -1,7 +1,5 @@
import 'package:flutter/material.dart';
import 'package:scribe/scribe/ai/presentation/model/context_menu/ai_scribe_context_menu_action.dart';
import 'package:scribe/scribe/ai/presentation/styles/ai_scribe_styles.dart';
import 'package:scribe/scribe/ai/presentation/widgets/context_menu/ai_scribe_submenu_item.dart';
import 'package:scribe/scribe.dart';
class AiScribeSubmenu extends StatelessWidget {
final List<AiScribeContextMenuAction> menuActions;
@@ -1,8 +1,7 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:scribe/scribe/ai/presentation/model/context_menu/ai_scribe_context_menu_action.dart';
import 'package:scribe/scribe/ai/presentation/styles/ai_scribe_styles.dart';
import 'package:scribe/scribe.dart';
class AiScribeSubmenuItem extends StatelessWidget {
final AiScribeContextMenuAction menuAction;
@@ -3,20 +3,7 @@ import 'dart:math';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:flutter/material.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:scribe/scribe/ai/localizations/scribe_localizations.dart';
import 'package:scribe/scribe/ai/presentation/model/ai_action.dart';
import 'package:scribe/scribe/ai/presentation/model/ai_scribe_menu_action.dart';
import 'package:scribe/scribe/ai/presentation/model/context_menu/ai_scribe_action_context_menu_action.dart';
import 'package:scribe/scribe/ai/presentation/model/context_menu/ai_scribe_category_context_menu_action.dart';
import 'package:scribe/scribe/ai/presentation/model/context_menu/ai_scribe_context_menu_action.dart';
import 'package:scribe/scribe/ai/presentation/model/modal/anchored_modal_layout_input.dart';
import 'package:scribe/scribe/ai/presentation/model/modal/modal_cross_axis_alignment.dart';
import 'package:scribe/scribe/ai/presentation/model/modal/modal_placement.dart';
import 'package:scribe/scribe/ai/presentation/styles/ai_scribe_styles.dart';
import 'package:scribe/scribe/ai/presentation/utils/context_menu/popup_submenu_controller.dart';
import 'package:scribe/scribe/ai/presentation/utils/modal/anchored_modal_layout_calculator.dart';
import 'package:scribe/scribe/ai/presentation/widgets/context_menu/ai_scribe_context_menu.dart';
import 'package:scribe/scribe/ai/presentation/widgets/search/ai_scribe_bar.dart';
import 'package:scribe/scribe.dart';
class AiScribeModalWidget extends StatelessWidget {
final ImagePaths imagePaths;
@@ -5,20 +5,7 @@ import 'package:dartz/dartz.dart' as dartz;
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:scribe/scribe/ai/domain/state/generate_ai_text_state.dart';
import 'package:scribe/scribe/ai/domain/usecases/generate_ai_text_interactor.dart';
import 'package:scribe/scribe/ai/localizations/scribe_localizations.dart';
import 'package:scribe/scribe/ai/presentation/model/ai_action.dart';
import 'package:scribe/scribe/ai/presentation/model/modal/anchored_modal_layout_input.dart';
import 'package:scribe/scribe/ai/presentation/model/modal/modal_cross_axis_alignment.dart';
import 'package:scribe/scribe/ai/presentation/model/modal/modal_placement.dart';
import 'package:scribe/scribe/ai/presentation/styles/ai_scribe_styles.dart';
import 'package:scribe/scribe/ai/presentation/utils/modal/anchored_modal_layout_calculator.dart';
import 'package:scribe/scribe/ai/presentation/widgets/modal/suggestion/ai_scribe_suggestion_error.dart';
import 'package:scribe/scribe/ai/presentation/widgets/modal/suggestion/ai_scribe_suggestion_header.dart';
import 'package:scribe/scribe/ai/presentation/widgets/modal/suggestion/ai_scribe_suggestion_loading.dart';
import 'package:scribe/scribe/ai/presentation/widgets/modal/suggestion/ai_scribe_suggestion_success.dart';
import 'package:scribe/scribe/ai/presentation/widgets/modal/suggestion/ai_scribe_suggestion_success_list_actions.dart';
import 'package:scribe/scribe.dart';
class AiScribeSuggestionWidget extends StatefulWidget {
final AIAction aiAction;
@@ -1,8 +1,7 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:scribe/scribe/ai/localizations/scribe_localizations.dart';
import 'package:scribe/scribe/ai/presentation/styles/ai_scribe_styles.dart';
import 'package:scribe/scribe.dart';
class AiScribeSuggestionError extends StatelessWidget {
final ImagePaths imagePaths;
@@ -2,8 +2,7 @@ import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:scribe/scribe/ai/localizations/scribe_localizations.dart';
import 'package:scribe/scribe/ai/presentation/styles/ai_scribe_styles.dart';
import 'package:scribe/scribe.dart';
class AiScribeSuggestionLoading extends StatelessWidget {
final ImagePaths imagePaths;
@@ -1,7 +1,6 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:flutter/material.dart';
import 'package:scribe/scribe/ai/presentation/styles/ai_scribe_styles.dart';
import 'package:scribe/scribe/ai/presentation/widgets/modal/suggestion/ai_scribe_suggestion_success_list_actions.dart';
import 'package:scribe/scribe.dart';
class AiScribeSuggestionSuccess extends StatelessWidget {
final ImagePaths imagePaths;
@@ -1,8 +1,8 @@
import 'package:core/core.dart';
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/views/dialog/confirm_dialog_button.dart';
import 'package:flutter/material.dart';
import 'package:scribe/scribe/ai/localizations/scribe_localizations.dart';
import 'package:scribe/scribe/ai/presentation/model/context_menu/ai_scribe_suggestion_actions.dart';
import 'package:scribe/scribe.dart';
typedef OnSelectAiScribeSuggestionAction = void Function(
AiScribeSuggestionActions action,
@@ -1,9 +1,7 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:flutter/material.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:scribe/scribe/ai/presentation/model/text_selection_model.dart';
import 'package:scribe/scribe/ai/presentation/widgets/button/inline_ai_assist_button.dart';
import 'package:scribe/scribe/ai/presentation/widgets/modal/suggestion/ai_scribe_suggestion_success_list_actions.dart';
import 'package:scribe/scribe.dart';
class AiSelectionOverlay extends StatelessWidget {
const AiSelectionOverlay({
@@ -1,8 +1,7 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/views/button/tmail_button_widget.dart';
import 'package:flutter/material.dart';
import 'package:scribe/scribe/ai/localizations/scribe_localizations.dart';
import 'package:scribe/scribe/ai/presentation/styles/ai_scribe_styles.dart';
import 'package:scribe/scribe.dart';
typedef OnCustomPromptCallback = void Function(String customPrompt);