From 33e7c46288db926579e40b067dbd910c45d5317d Mon Sep 17 00:00:00 2001 From: Ellet <73608287+freshtechtips@users.noreply.github.com> Date: Fri, 15 Dec 2023 14:23:29 +0300 Subject: [PATCH] New merge from dev branch (#1602) * Prepare to release 9.0.2 --- .github/workflows/main.yml | 3 + CHANGELOG.md | 24 ++ README.md | 1 - example/lib/main.dart | 18 +- .../presentation/quill/my_quill_editor.dart | 16 ++ .../presentation/quill/my_quill_toolbar.dart | 27 ++- .../lib/presentation/quill/quill_screen.dart | 16 +- flutter_quill_extensions/CHANGELOG.md | 24 ++ flutter_quill_extensions/README.md | 31 --- .../lib/flutter_quill_extensions.dart | 6 +- .../models/config/toolbar/buttons/camera.dart | 1 - .../models/config/toolbar/buttons/image.dart | 1 - .../config/toolbar/buttons/media_button.dart | 1 - .../models/config/toolbar/buttons/video.dart | 1 - flutter_quill_extensions/pubspec.yaml | 2 +- flutter_quill_test/CHANGELOG.md | 24 ++ flutter_quill_test/pubspec.yaml | 2 +- lib/flutter_quill.dart | 3 +- .../l10n/generated/quill_localizations.dart | 18 ++ .../generated/quill_localizations_ar.dart | 9 + .../generated/quill_localizations_bg.dart | 9 + .../generated/quill_localizations_bn.dart | 9 + .../generated/quill_localizations_cs.dart | 9 + .../generated/quill_localizations_da.dart | 9 + .../generated/quill_localizations_de.dart | 9 + .../generated/quill_localizations_en.dart | 9 + .../generated/quill_localizations_es.dart | 9 + .../generated/quill_localizations_fa.dart | 9 + .../generated/quill_localizations_fr.dart | 9 + .../generated/quill_localizations_he.dart | 9 + .../generated/quill_localizations_hi.dart | 9 + .../generated/quill_localizations_id.dart | 9 + .../generated/quill_localizations_it.dart | 9 + .../generated/quill_localizations_ja.dart | 9 + .../generated/quill_localizations_ko.dart | 9 + .../generated/quill_localizations_ms.dart | 9 + .../generated/quill_localizations_nl.dart | 9 + .../generated/quill_localizations_no.dart | 9 + .../generated/quill_localizations_pl.dart | 9 + .../generated/quill_localizations_pt.dart | 9 + .../generated/quill_localizations_ru.dart | 21 +- .../generated/quill_localizations_sr.dart | 9 + .../generated/quill_localizations_sw.dart | 9 + .../generated/quill_localizations_tk.dart | 9 + .../generated/quill_localizations_tr.dart | 9 + .../generated/quill_localizations_uk.dart | 32 ++- .../generated/quill_localizations_ur.dart | 9 + .../generated/quill_localizations_vi.dart | 9 + .../generated/quill_localizations_zh.dart | 9 + lib/src/l10n/quill_en.arb | 3 + lib/src/l10n/quill_ru.arb | 7 +- lib/src/l10n/quill_uk.arb | 15 +- lib/src/l10n/untranslated.json | 114 +++++++-- .../editor/elements/list/ordered_list.dart | 9 +- .../editor/elements/list/unordered_list.dart | 9 +- ...s.dart => base_button_configurations.dart} | 16 +- .../buttons/clear_format_configurations.dart | 1 - .../toolbar/buttons/color_configurations.dart | 3 +- .../buttons/custom_button_configurations.dart | 3 +- .../buttons/font_family_configurations.dart | 4 - .../buttons/font_size_configurations.dart | 4 - .../buttons/history_configurations.dart | 1 - .../buttons/indent_configurations.dart | 3 +- .../buttons/link_style2_configurations.dart | 3 +- .../buttons/link_style_configurations.dart | 1 - .../buttons/search_configurations.dart | 1 - .../select_alignment_configurations.dart | 3 +- ..._header_style_buttons_configurations.dart} | 10 +- ..._style_dropdown_button_configurations.dart | 134 ++++++++++ .../toggle_check_list_configurations.dart | 1 - .../buttons/toggle_style_configurations.dart | 3 +- .../simple_toolbar_button_options.dart | 136 +++++++++++ .../simple_toolbar_configurations.dart | 147 ++--------- .../toolbar/toolbar_configurations.dart | 4 +- .../toolbar_shared_configurations.dart | 6 +- lib/src/models/documents/attribute.dart | 12 + lib/src/models/documents/document.dart | 39 +++ lib/src/models/themes/quill_icon_theme.dart | 2 +- lib/src/utils/font.dart | 31 +++ lib/src/utils/string.dart | 12 +- lib/src/widgets/others/default_styles.dart | 118 +++++++-- lib/src/widgets/quill/quill_controller.dart | 91 ++++--- lib/src/widgets/quill/text_block.dart | 60 ++++- lib/src/widgets/quill/text_line.dart | 9 +- .../widgets/raw_editor/raw_editor_state.dart | 23 +- ..._editor_state_text_input_client_mixin.dart | 22 +- .../widgets/style_widgets/bullet_point.dart | 15 +- .../widgets/style_widgets/number_point.dart | 19 +- lib/src/widgets/toolbar/base_toolbar.dart | 3 +- .../toolbar/buttons/clear_format_button.dart | 1 - .../toolbar/buttons/color/color_button.dart | 1 + .../toolbar/buttons/custom_button_button.dart | 1 - .../toolbar/buttons/font_size_button.dart | 1 - .../select_header_style_button.dart | 145 ----------- .../select_header_style_buttons.dart | 2 +- .../select_header_style_dropdown_button.dart | 199 +++++++++++++++ .../toolbar/buttons/history_button.dart | 1 - .../toolbar/buttons/link_style_button.dart | 1 - .../toolbar/buttons/quill_icon_button.dart | 6 +- .../toolbar/buttons/search/search_button.dart | 1 - .../buttons/toggle_check_list_button.dart | 3 +- .../toolbar/buttons/toggle_style_button.dart | 13 +- lib/src/widgets/toolbar/simple_toolbar.dart | 228 +++++------------- pubspec.yaml | 2 +- quill_html_converter/CHANGELOG.md | 24 ++ quill_html_converter/pubspec.yaml | 2 +- version.dart | 2 +- 107 files changed, 1536 insertions(+), 718 deletions(-) rename lib/src/models/config/toolbar/{buttons/base_configurations.dart => base_button_configurations.dart} (82%) rename lib/src/models/config/toolbar/buttons/{select_header_style_configurations.dart => select_header_style_buttons_configurations.dart} (83%) create mode 100644 lib/src/models/config/toolbar/buttons/select_header_style_dropdown_button_configurations.dart create mode 100644 lib/src/models/config/toolbar/simple_toolbar_button_options.dart delete mode 100644 lib/src/widgets/toolbar/buttons/hearder_style/select_header_style_button.dart create mode 100644 lib/src/widgets/toolbar/buttons/hearder_style/select_header_style_dropdown_button.dart diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c4528f8d..8874783a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -25,6 +25,9 @@ jobs: - name: Install dependencies run: flutter pub get + + - name: Install dart_quill_delta dependencies + run: flutter pub get -C dart_quill_delta - name: Install flutter_quill_extensions dependencies run: flutter pub get -C flutter_quill_extensions diff --git a/CHANGELOG.md b/CHANGELOG.md index a4d0bba2..cb368a9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,30 @@ All notable changes to this project will be documented in this file. +## 9.0.2 +* Release instead of pre-release + +## 9.0.2-dev.3 +* Export `QuillSingleChildScrollView` + +## 9.0.2-dev.2 +* Add the new translations for ru, uk arb files by [#1575](https://github.com/singerdmx/flutter-quill/pull/1575) +* Add a new dropdown button by [#1575](https://github.com/singerdmx/flutter-quill/pull/1575) +* Update the default style values by [#1575](https://github.com/singerdmx/flutter-quill/pull/1575) +* Fix bug [#1562](https://github.com/singerdmx/flutter-quill/issues/1562) +* Fix the second bug of [#1480](https://github.com/singerdmx/flutter-quill/issues/1480) + +## 9.0.2-dev.1 +* Add configurations for the new dropdown `QuillToolbarSelectHeaderStyleButton`, you can use the orignal one or this +* Fix the [issue](https://github.com/singerdmx/flutter-quill/issues/1119) when enter is pressed, all font settings is lost + +## 9.0.2-dev +* **Breaking change** Remove the spacer widget, removed the controller option for each button +* Add `toolbarRunSpacing` property to the simple toolbar + +## 9.0.1 +* Fix default icon size + ## 9.0.0 * This version is quite stable but it's not how we wanted to be, because the lack of time and there are not too many maintainers active, we decided to publish it, we might make a new breaking changes verion diff --git a/README.md b/README.md index c946aefe..34ec54f3 100644 --- a/README.md +++ b/README.md @@ -127,7 +127,6 @@ QuillController _controller = QuillController.basic(); And then use the `QuillEditor`, `QuillToolbar` widgets, connect the `QuillController` to them -using `QuillProvider` inherited widget ```dart QuillToolbar.simple( diff --git a/example/lib/main.dart b/example/lib/main.dart index e263fb25..089042b0 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -47,8 +47,22 @@ class MyApp extends StatelessWidget { builder: (context, state) { return MaterialApp( title: 'Flutter Quill Demo', - theme: ThemeData.light(useMaterial3: true), - darkTheme: ThemeData.dark(useMaterial3: true), + theme: ThemeData( + useMaterial3: true, + visualDensity: VisualDensity.adaptivePlatformDensity, + colorScheme: ColorScheme.fromSeed( + brightness: Brightness.light, + seedColor: Colors.red, + ), + ), + darkTheme: ThemeData( + useMaterial3: true, + visualDensity: VisualDensity.adaptivePlatformDensity, + colorScheme: ColorScheme.fromSeed( + brightness: Brightness.dark, + seedColor: Colors.red, + ), + ), themeMode: state.themeMode, debugShowCheckedModeBanner: false, localizationsDelegates: const [ diff --git a/example/lib/presentation/quill/my_quill_editor.dart b/example/lib/presentation/quill/my_quill_editor.dart index 390f0857..75277f1e 100644 --- a/example/lib/presentation/quill/my_quill_editor.dart +++ b/example/lib/presentation/quill/my_quill_editor.dart @@ -33,6 +33,22 @@ class MyQuillEditor extends StatelessWidget { scrollController: scrollController, focusNode: focusNode, configurations: configurations.copyWith( + elementOptions: const QuillEditorElementOptions( + codeBlock: QuillEditorCodeBlockElementOptions( + enableLineNumbers: true, + ), + // orderedList: QuillEditorOrderedListElementOptions( + // backgroundColor: Colors.amber, + // fontColor: Colors.black, + // ), + // unorderedList: QuillEditorUnOrderedListElementOptions( + // backgroundColor: Colors.green, + // fontColor: Colors.red, + // ), + unorderedList: QuillEditorUnOrderedListElementOptions( + useTextColorForDot: false, + ), + ), customStyles: const DefaultStyles( h1: DefaultTextBlockStyle( TextStyle( diff --git a/example/lib/presentation/quill/my_quill_toolbar.dart b/example/lib/presentation/quill/my_quill_toolbar.dart index f7c22b1b..2cb73009 100644 --- a/example/lib/presentation/quill/my_quill_toolbar.dart +++ b/example/lib/presentation/quill/my_quill_toolbar.dart @@ -100,17 +100,10 @@ class MyQuillToolbar extends StatelessWidget { // For more info // https://github.com/singerdmx/flutter-quill/blob/master/doc/custom_toolbar.md return QuillToolbar( - configurations: const QuillToolbarConfigurations( - buttonOptions: QuillToolbarButtonOptions( - base: QuillToolbarBaseButtonOptions( - globalIconSize: 20, - globalIconButtonFactor: 1.4, - ), - ), - ), + configurations: const QuillToolbarConfigurations(), child: SingleChildScrollView( scrollDirection: Axis.horizontal, - child: Row( + child: Wrap( children: [ IconButton( onPressed: () => context @@ -166,7 +159,7 @@ class MyQuillToolbar extends StatelessWidget { isBackground: true, ), const VerticalDivider(), - QuillToolbarSelectHeaderStyleButton( + QuillToolbarSelectHeaderStyleDropdownButton( controller: controller, ), const VerticalDivider(), @@ -204,14 +197,24 @@ class MyQuillToolbar extends StatelessWidget { ), ); } - return QuillSimpleToolbar( + return QuillToolbar.simple( configurations: QuillSimpleToolbarConfigurations( controller: controller, showAlignmentButtons: true, - buttonOptions: QuillToolbarButtonOptions( + buttonOptions: QuillSimpleToolbarButtonOptions( base: QuillToolbarBaseButtonOptions( // Request editor focus when any button is pressed afterButtonPressed: focusNode.requestFocus, + globalIconSize: 18, + ), + selectHeaderStyleDropdownButton: + const QuillToolbarSelectHeaderStyleDropdownButtonOptions( + textStyle: TextStyle( + fontSize: 20, + ), + iconTheme: QuillIconTheme( + iconSelectedColor: Colors.red, + ), ), ), customButtons: [ diff --git a/example/lib/presentation/quill/quill_screen.dart b/example/lib/presentation/quill/quill_screen.dart index b3b73eee..991dd633 100644 --- a/example/lib/presentation/quill/quill_screen.dart +++ b/example/lib/presentation/quill/quill_screen.dart @@ -76,7 +76,7 @@ class _QuillScreenState extends State { onPressed: () { final html = _controller.document.toDelta().toHtml(); _controller.document = - Document.fromDelta(QuillController.fromHtml(html)); + Document.fromDelta(Document.fromHtml(html)); }, icon: const Icon(Icons.html), ), @@ -126,20 +126,6 @@ class _QuillScreenState extends State { sharedConfigurations: _sharedConfigurations, controller: _controller, readOnly: _isReadOnly, - customStyles: const DefaultStyles(), - elementOptions: const QuillEditorElementOptions( - codeBlock: QuillEditorCodeBlockElementOptions( - enableLineNumbers: true, - ), - // orderedList: QuillEditorOrderedListElementOptions( - // backgroundColor: Colors.amber, - // fontColor: Colors.black, - // ), - // unorderedList: QuillEditorUnOrderedListElementOptions( - // backgroundColor: Colors.green, - // fontColor: Colors.red, - // ), - ), ), scrollController: _editorScrollController, focusNode: _editorFocusNode, diff --git a/flutter_quill_extensions/CHANGELOG.md b/flutter_quill_extensions/CHANGELOG.md index a4d0bba2..cb368a9b 100644 --- a/flutter_quill_extensions/CHANGELOG.md +++ b/flutter_quill_extensions/CHANGELOG.md @@ -2,6 +2,30 @@ All notable changes to this project will be documented in this file. +## 9.0.2 +* Release instead of pre-release + +## 9.0.2-dev.3 +* Export `QuillSingleChildScrollView` + +## 9.0.2-dev.2 +* Add the new translations for ru, uk arb files by [#1575](https://github.com/singerdmx/flutter-quill/pull/1575) +* Add a new dropdown button by [#1575](https://github.com/singerdmx/flutter-quill/pull/1575) +* Update the default style values by [#1575](https://github.com/singerdmx/flutter-quill/pull/1575) +* Fix bug [#1562](https://github.com/singerdmx/flutter-quill/issues/1562) +* Fix the second bug of [#1480](https://github.com/singerdmx/flutter-quill/issues/1480) + +## 9.0.2-dev.1 +* Add configurations for the new dropdown `QuillToolbarSelectHeaderStyleButton`, you can use the orignal one or this +* Fix the [issue](https://github.com/singerdmx/flutter-quill/issues/1119) when enter is pressed, all font settings is lost + +## 9.0.2-dev +* **Breaking change** Remove the spacer widget, removed the controller option for each button +* Add `toolbarRunSpacing` property to the simple toolbar + +## 9.0.1 +* Fix default icon size + ## 9.0.0 * This version is quite stable but it's not how we wanted to be, because the lack of time and there are not too many maintainers active, we decided to publish it, we might make a new breaking changes verion diff --git a/flutter_quill_extensions/README.md b/flutter_quill_extensions/README.md index 26d2fb02..c1cab88a 100644 --- a/flutter_quill_extensions/README.md +++ b/flutter_quill_extensions/README.md @@ -93,37 +93,6 @@ Expanded( ) ``` -They both should have a parent `QuillProvider` in the widget tree and set properly
-Example: - -```dart -QuillProvider( - configurations: QuillConfigurations( - controller: _controller, - sharedConfigurations: const QuillSharedConfigurations(), - ), - child: Column( - children: [ - QuillToolbar( - configurations: QuillToolbarConfigurations( - embedButtons: FlutterQuillEmbeds.toolbarButtons( - imageButtonOptions: QuillToolbarImageButtonOptions(), - ), - ), - ), - Expanded( - child: QuillEditor.basic( - configurations: QuillEditorConfigurations( - padding: const EdgeInsets.all(16), - embedBuilders: kIsWeb ? FlutterQuillEmbeds.editorWebBuilders() : FlutterQuillEmbeds.editorBuilders(), - ), - ), - ) - ], - ), -) -``` - ## Embed Blocks As of version [flutter_quill](https://pub.dev/packages/flutter_quill) 6.0, embed blocks are not provided by default as part of Flutter quill. Instead, it provides an interface for all the users to provide their implementations for embed blocks. Implementations for image, video, and formula embed blocks are proved in this package diff --git a/flutter_quill_extensions/lib/flutter_quill_extensions.dart b/flutter_quill_extensions/lib/flutter_quill_extensions.dart index d7492043..fc4297d2 100644 --- a/flutter_quill_extensions/lib/flutter_quill_extensions.dart +++ b/flutter_quill_extensions/lib/flutter_quill_extensions.dart @@ -180,19 +180,19 @@ class FlutterQuillEmbeds { if (imageButtonOptions != null) (controller, toolbarIconSize, iconTheme, dialogTheme) => QuillToolbarImageButton( - controller: imageButtonOptions.controller ?? controller, + controller: controller, options: imageButtonOptions, ), if (videoButtonOptions != null) (controller, toolbarIconSize, iconTheme, dialogTheme) => QuillToolbarVideoButton( - controller: videoButtonOptions.controller ?? controller, + controller: controller, options: videoButtonOptions, ), if (cameraButtonOptions != null) (controller, toolbarIconSize, iconTheme, dialogTheme) => QuillToolbarCameraButton( - controller: cameraButtonOptions.controller ?? controller, + controller: controller, options: cameraButtonOptions, ), // TODO: We will return the support for this later diff --git a/flutter_quill_extensions/lib/models/config/toolbar/buttons/camera.dart b/flutter_quill_extensions/lib/models/config/toolbar/buttons/camera.dart index 32e2f754..97e9accf 100644 --- a/flutter_quill_extensions/lib/models/config/toolbar/buttons/camera.dart +++ b/flutter_quill_extensions/lib/models/config/toolbar/buttons/camera.dart @@ -24,7 +24,6 @@ class QuillToolbarCameraButtonOptions extends QuillToolbarBaseButtonOptions< super.tooltip, super.iconTheme, super.childBuilder, - super.controller, }); final double? iconSize; diff --git a/flutter_quill_extensions/lib/models/config/toolbar/buttons/image.dart b/flutter_quill_extensions/lib/models/config/toolbar/buttons/image.dart index 61e8901a..79ff1034 100644 --- a/flutter_quill_extensions/lib/models/config/toolbar/buttons/image.dart +++ b/flutter_quill_extensions/lib/models/config/toolbar/buttons/image.dart @@ -18,7 +18,6 @@ class QuillToolbarImageButtonOptions extends QuillToolbarBaseButtonOptions< QuillToolbarImageButtonOptions, QuillToolbarImageButtonExtraOptions> { const QuillToolbarImageButtonOptions({ super.iconData, - super.controller, this.iconSize, this.iconButtonFactor, diff --git a/flutter_quill_extensions/lib/models/config/toolbar/buttons/media_button.dart b/flutter_quill_extensions/lib/models/config/toolbar/buttons/media_button.dart index d55f20f1..c263ee0c 100644 --- a/flutter_quill_extensions/lib/models/config/toolbar/buttons/media_button.dart +++ b/flutter_quill_extensions/lib/models/config/toolbar/buttons/media_button.dart @@ -38,7 +38,6 @@ class QuillToolbarMediaButtonOptions extends QuillToolbarBaseButtonOptions< super.tooltip, super.iconTheme, super.childBuilder, - super.controller, }); final double? iconSize; diff --git a/flutter_quill_extensions/lib/models/config/toolbar/buttons/video.dart b/flutter_quill_extensions/lib/models/config/toolbar/buttons/video.dart index e1f86a76..f7d5c7a7 100644 --- a/flutter_quill_extensions/lib/models/config/toolbar/buttons/video.dart +++ b/flutter_quill_extensions/lib/models/config/toolbar/buttons/video.dart @@ -25,7 +25,6 @@ class QuillToolbarVideoButtonOptions extends QuillToolbarBaseButtonOptions< super.tooltip, super.iconTheme, super.childBuilder, - super.controller, this.videoConfigurations = const QuillToolbarVideoConfigurations(), }); diff --git a/flutter_quill_extensions/pubspec.yaml b/flutter_quill_extensions/pubspec.yaml index 5c26fbe5..316fe481 100644 --- a/flutter_quill_extensions/pubspec.yaml +++ b/flutter_quill_extensions/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_quill_extensions description: Embed extensions for flutter_quill including image, video, formula and etc. -version: 9.0.0 +version: 9.0.2 homepage: https://github.com/singerdmx/flutter-quill/tree/master/flutter_quill_extensions/ repository: https://github.com/singerdmx/flutter-quill/tree/master/flutter_quill_extensions/ issue_tracker: https://github.com/singerdmx/flutter-quill/issues/ diff --git a/flutter_quill_test/CHANGELOG.md b/flutter_quill_test/CHANGELOG.md index a4d0bba2..cb368a9b 100644 --- a/flutter_quill_test/CHANGELOG.md +++ b/flutter_quill_test/CHANGELOG.md @@ -2,6 +2,30 @@ All notable changes to this project will be documented in this file. +## 9.0.2 +* Release instead of pre-release + +## 9.0.2-dev.3 +* Export `QuillSingleChildScrollView` + +## 9.0.2-dev.2 +* Add the new translations for ru, uk arb files by [#1575](https://github.com/singerdmx/flutter-quill/pull/1575) +* Add a new dropdown button by [#1575](https://github.com/singerdmx/flutter-quill/pull/1575) +* Update the default style values by [#1575](https://github.com/singerdmx/flutter-quill/pull/1575) +* Fix bug [#1562](https://github.com/singerdmx/flutter-quill/issues/1562) +* Fix the second bug of [#1480](https://github.com/singerdmx/flutter-quill/issues/1480) + +## 9.0.2-dev.1 +* Add configurations for the new dropdown `QuillToolbarSelectHeaderStyleButton`, you can use the orignal one or this +* Fix the [issue](https://github.com/singerdmx/flutter-quill/issues/1119) when enter is pressed, all font settings is lost + +## 9.0.2-dev +* **Breaking change** Remove the spacer widget, removed the controller option for each button +* Add `toolbarRunSpacing` property to the simple toolbar + +## 9.0.1 +* Fix default icon size + ## 9.0.0 * This version is quite stable but it's not how we wanted to be, because the lack of time and there are not too many maintainers active, we decided to publish it, we might make a new breaking changes verion diff --git a/flutter_quill_test/pubspec.yaml b/flutter_quill_test/pubspec.yaml index 7b1a400f..a3febfab 100644 --- a/flutter_quill_test/pubspec.yaml +++ b/flutter_quill_test/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_quill_test description: Test utilities for flutter_quill which includes methods to simplify interacting with the editor in test cases. -version: 9.0.0 +version: 9.0.2 homepage: https://github.com/singerdmx/flutter-quill/tree/master/flutter_quill_test/ repository: https://github.com/singerdmx/flutter-quill/tree/master/flutter_quill_test/ issue_tracker: https://github.com/singerdmx/flutter-quill/issues/ diff --git a/lib/flutter_quill.dart b/lib/flutter_quill.dart index 791a371c..5186a444 100644 --- a/lib/flutter_quill.dart +++ b/lib/flutter_quill.dart @@ -1,5 +1,6 @@ library flutter_quill; +export '/src/widgets/raw_editor/quill_single_child_scroll_view.dart'; export 'src/extensions/quill_configurations_ext.dart'; export 'src/models/config/quill_configurations.dart'; export 'src/models/config/raw_editor/raw_editor_configurations.dart'; @@ -32,6 +33,6 @@ export 'src/widgets/raw_editor/raw_editor.dart'; export 'src/widgets/raw_editor/raw_editor_state.dart'; export 'src/widgets/style_widgets/style_widgets.dart'; export 'src/widgets/toolbar/base_toolbar.dart'; -export 'src/widgets/toolbar/buttons/hearder_style/select_header_style_button.dart'; +export 'src/widgets/toolbar/buttons/hearder_style/select_header_style_dropdown_button.dart'; export 'src/widgets/toolbar/simple_toolbar.dart'; export 'src/widgets/utils/provider.dart'; diff --git a/lib/src/l10n/generated/quill_localizations.dart b/lib/src/l10n/generated/quill_localizations.dart index abd411ab..c4005e5e 100644 --- a/lib/src/l10n/generated/quill_localizations.dart +++ b/lib/src/l10n/generated/quill_localizations.dart @@ -445,6 +445,24 @@ abstract class FlutterQuillLocalizations { /// **'Heading 3'** String get heading3; + /// No description provided for @heading4. + /// + /// In en, this message translates to: + /// **'Heading 4'** + String get heading4; + + /// No description provided for @heading5. + /// + /// In en, this message translates to: + /// **'Heading 5'** + String get heading5; + + /// No description provided for @heading6. + /// + /// In en, this message translates to: + /// **'Heading 6'** + String get heading6; + /// No description provided for @numberedList. /// /// In en, this message translates to: diff --git a/lib/src/l10n/generated/quill_localizations_ar.dart b/lib/src/l10n/generated/quill_localizations_ar.dart index b7211f5c..c5b87a49 100644 --- a/lib/src/l10n/generated/quill_localizations_ar.dart +++ b/lib/src/l10n/generated/quill_localizations_ar.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsAr extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'قائمة مرقمة'; diff --git a/lib/src/l10n/generated/quill_localizations_bg.dart b/lib/src/l10n/generated/quill_localizations_bg.dart index dd9a1bfe..e611e80a 100644 --- a/lib/src/l10n/generated/quill_localizations_bg.dart +++ b/lib/src/l10n/generated/quill_localizations_bg.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsBg extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'Номериран списък'; diff --git a/lib/src/l10n/generated/quill_localizations_bn.dart b/lib/src/l10n/generated/quill_localizations_bn.dart index fb41d3c2..222f07a2 100644 --- a/lib/src/l10n/generated/quill_localizations_bn.dart +++ b/lib/src/l10n/generated/quill_localizations_bn.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsBn extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'সংখ্যাযুক্ত তালিকা'; diff --git a/lib/src/l10n/generated/quill_localizations_cs.dart b/lib/src/l10n/generated/quill_localizations_cs.dart index 375fe13f..5c692ef0 100644 --- a/lib/src/l10n/generated/quill_localizations_cs.dart +++ b/lib/src/l10n/generated/quill_localizations_cs.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsCs extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'Číslovaný seznam'; diff --git a/lib/src/l10n/generated/quill_localizations_da.dart b/lib/src/l10n/generated/quill_localizations_da.dart index fc7926e8..8136fbd1 100644 --- a/lib/src/l10n/generated/quill_localizations_da.dart +++ b/lib/src/l10n/generated/quill_localizations_da.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsDa extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'Numbered list'; diff --git a/lib/src/l10n/generated/quill_localizations_de.dart b/lib/src/l10n/generated/quill_localizations_de.dart index 79e847b9..36877200 100644 --- a/lib/src/l10n/generated/quill_localizations_de.dart +++ b/lib/src/l10n/generated/quill_localizations_de.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsDe extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'Nummerierte Liste'; diff --git a/lib/src/l10n/generated/quill_localizations_en.dart b/lib/src/l10n/generated/quill_localizations_en.dart index 192d8c6c..f4d84aa2 100644 --- a/lib/src/l10n/generated/quill_localizations_en.dart +++ b/lib/src/l10n/generated/quill_localizations_en.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsEn extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'Numbered list'; diff --git a/lib/src/l10n/generated/quill_localizations_es.dart b/lib/src/l10n/generated/quill_localizations_es.dart index 63c9a766..46408ebb 100644 --- a/lib/src/l10n/generated/quill_localizations_es.dart +++ b/lib/src/l10n/generated/quill_localizations_es.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsEs extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'Numbered list'; diff --git a/lib/src/l10n/generated/quill_localizations_fa.dart b/lib/src/l10n/generated/quill_localizations_fa.dart index 759674bf..1bf728c3 100644 --- a/lib/src/l10n/generated/quill_localizations_fa.dart +++ b/lib/src/l10n/generated/quill_localizations_fa.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsFa extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'لیست شماره‌دار'; diff --git a/lib/src/l10n/generated/quill_localizations_fr.dart b/lib/src/l10n/generated/quill_localizations_fr.dart index f0644c76..2d0ce9f2 100644 --- a/lib/src/l10n/generated/quill_localizations_fr.dart +++ b/lib/src/l10n/generated/quill_localizations_fr.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsFr extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'Liste numérotée'; diff --git a/lib/src/l10n/generated/quill_localizations_he.dart b/lib/src/l10n/generated/quill_localizations_he.dart index 5fea7ff5..3fe164c8 100644 --- a/lib/src/l10n/generated/quill_localizations_he.dart +++ b/lib/src/l10n/generated/quill_localizations_he.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsHe extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'רשימה ממוספרת'; diff --git a/lib/src/l10n/generated/quill_localizations_hi.dart b/lib/src/l10n/generated/quill_localizations_hi.dart index 103ded14..dcec8fb2 100644 --- a/lib/src/l10n/generated/quill_localizations_hi.dart +++ b/lib/src/l10n/generated/quill_localizations_hi.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsHi extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'संख्याबद्ध सूची'; diff --git a/lib/src/l10n/generated/quill_localizations_id.dart b/lib/src/l10n/generated/quill_localizations_id.dart index fbd1a0e3..af3658b9 100644 --- a/lib/src/l10n/generated/quill_localizations_id.dart +++ b/lib/src/l10n/generated/quill_localizations_id.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsId extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'Daftar Bernomor'; diff --git a/lib/src/l10n/generated/quill_localizations_it.dart b/lib/src/l10n/generated/quill_localizations_it.dart index bf90ba95..14abcb81 100644 --- a/lib/src/l10n/generated/quill_localizations_it.dart +++ b/lib/src/l10n/generated/quill_localizations_it.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsIt extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'Elenco numerato'; diff --git a/lib/src/l10n/generated/quill_localizations_ja.dart b/lib/src/l10n/generated/quill_localizations_ja.dart index 65569dd0..0866f75c 100644 --- a/lib/src/l10n/generated/quill_localizations_ja.dart +++ b/lib/src/l10n/generated/quill_localizations_ja.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsJa extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => '順序付きリスト'; diff --git a/lib/src/l10n/generated/quill_localizations_ko.dart b/lib/src/l10n/generated/quill_localizations_ko.dart index 8cf56ecb..fdd063d0 100644 --- a/lib/src/l10n/generated/quill_localizations_ko.dart +++ b/lib/src/l10n/generated/quill_localizations_ko.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsKo extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'Numbered list'; diff --git a/lib/src/l10n/generated/quill_localizations_ms.dart b/lib/src/l10n/generated/quill_localizations_ms.dart index e561d2a4..445bfd4a 100644 --- a/lib/src/l10n/generated/quill_localizations_ms.dart +++ b/lib/src/l10n/generated/quill_localizations_ms.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsMs extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'Numbered list'; diff --git a/lib/src/l10n/generated/quill_localizations_nl.dart b/lib/src/l10n/generated/quill_localizations_nl.dart index 3ddd6a55..584f4f84 100644 --- a/lib/src/l10n/generated/quill_localizations_nl.dart +++ b/lib/src/l10n/generated/quill_localizations_nl.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsNl extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'Numbered list'; diff --git a/lib/src/l10n/generated/quill_localizations_no.dart b/lib/src/l10n/generated/quill_localizations_no.dart index 66576105..8d005ead 100644 --- a/lib/src/l10n/generated/quill_localizations_no.dart +++ b/lib/src/l10n/generated/quill_localizations_no.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsNo extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'Nummerert liste'; diff --git a/lib/src/l10n/generated/quill_localizations_pl.dart b/lib/src/l10n/generated/quill_localizations_pl.dart index 34852140..7c509ccb 100644 --- a/lib/src/l10n/generated/quill_localizations_pl.dart +++ b/lib/src/l10n/generated/quill_localizations_pl.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsPl extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'Numbered list'; diff --git a/lib/src/l10n/generated/quill_localizations_pt.dart b/lib/src/l10n/generated/quill_localizations_pt.dart index 048cddec..76e361e5 100644 --- a/lib/src/l10n/generated/quill_localizations_pt.dart +++ b/lib/src/l10n/generated/quill_localizations_pt.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsPt extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'Numbered list'; diff --git a/lib/src/l10n/generated/quill_localizations_ru.dart b/lib/src/l10n/generated/quill_localizations_ru.dart index c2afd16f..1b63e8a0 100644 --- a/lib/src/l10n/generated/quill_localizations_ru.dart +++ b/lib/src/l10n/generated/quill_localizations_ru.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsRu extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'Numbered list'; @@ -241,19 +250,21 @@ class FlutterQuillLocalizationsRu extends FlutterQuillLocalizations { String get insertImage => 'Вставить изображение'; @override - String get pickAPhotoFromYourGallery => 'Pick a photo from your gallery'; + String get pickAPhotoFromYourGallery => 'Выберите фотографю из вашей галереи'; @override - String get takeAPhotoUsingYourCamera => 'Take a photo using your camera'; + String get takeAPhotoUsingYourCamera => + 'Создайте фотографю, использую фотокамеру'; @override - String get pasteAPhotoUsingALink => 'Paste a photo using a link'; + String get pasteAPhotoUsingALink => 'Вставьте фотографию, используя ссылку'; @override - String get pickAVideoFromYourGallery => 'Pick a video from your gallery'; + String get pickAVideoFromYourGallery => 'Выберете видео из вашей галереи'; @override - String get recordAVideoUsingYourCamera => 'Record a video using your camera'; + String get recordAVideoUsingYourCamera => + 'Запишите видео, используя вдеокамеру'; @override String get pasteAVideoUsingALink => 'Paste a video using a link'; diff --git a/lib/src/l10n/generated/quill_localizations_sr.dart b/lib/src/l10n/generated/quill_localizations_sr.dart index 4b2e8c4e..7127b982 100644 --- a/lib/src/l10n/generated/quill_localizations_sr.dart +++ b/lib/src/l10n/generated/quill_localizations_sr.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsSr extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'Numerisana lista'; diff --git a/lib/src/l10n/generated/quill_localizations_sw.dart b/lib/src/l10n/generated/quill_localizations_sw.dart index 53d03887..75832d39 100644 --- a/lib/src/l10n/generated/quill_localizations_sw.dart +++ b/lib/src/l10n/generated/quill_localizations_sw.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsSw extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'Orodha ya Nambari'; diff --git a/lib/src/l10n/generated/quill_localizations_tk.dart b/lib/src/l10n/generated/quill_localizations_tk.dart index 4018d333..79e4b57d 100644 --- a/lib/src/l10n/generated/quill_localizations_tk.dart +++ b/lib/src/l10n/generated/quill_localizations_tk.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsTk extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'Sanly sanaw'; diff --git a/lib/src/l10n/generated/quill_localizations_tr.dart b/lib/src/l10n/generated/quill_localizations_tr.dart index fa6da123..69f82bb2 100644 --- a/lib/src/l10n/generated/quill_localizations_tr.dart +++ b/lib/src/l10n/generated/quill_localizations_tr.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsTr extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'Numaralı Liste'; diff --git a/lib/src/l10n/generated/quill_localizations_uk.dart b/lib/src/l10n/generated/quill_localizations_uk.dart index 0c79a570..a7b975a0 100644 --- a/lib/src/l10n/generated/quill_localizations_uk.dart +++ b/lib/src/l10n/generated/quill_localizations_uk.dart @@ -137,16 +137,25 @@ class FlutterQuillLocalizationsUk extends FlutterQuillLocalizations { String get headerStyle => 'Стиль заголовка'; @override - String get normal => 'Normal'; + String get normal => 'Звичайний'; @override - String get heading1 => 'Heading 1'; + String get heading1 => 'Заголовок 1'; @override - String get heading2 => 'Heading 2'; + String get heading2 => 'Заголовок 2'; @override - String get heading3 => 'Heading 3'; + String get heading3 => 'Заголовок 3'; + + @override + String get heading4 => 'Заголовок 4'; + + @override + String get heading5 => 'Заголовок 5'; + + @override + String get heading6 => 'Заголовок 6'; @override String get numberedList => 'Нумерований список'; @@ -243,20 +252,23 @@ class FlutterQuillLocalizationsUk extends FlutterQuillLocalizations { String get insertImage => 'Вставити зображення'; @override - String get pickAPhotoFromYourGallery => 'Pick a photo from your gallery'; + String get pickAPhotoFromYourGallery => 'Оберіть фотографію з вашої галереї'; @override - String get takeAPhotoUsingYourCamera => 'Take a photo using your camera'; + String get takeAPhotoUsingYourCamera => + 'Створіть фотографію, використовуючи фотокамеру'; @override - String get pasteAPhotoUsingALink => 'Paste a photo using a link'; + String get pasteAPhotoUsingALink => + 'Вставте фотографію, використовуючи посилання'; @override - String get pickAVideoFromYourGallery => 'Pick a video from your gallery'; + String get pickAVideoFromYourGallery => 'Оберіть відео з вашої галереї'; @override - String get recordAVideoUsingYourCamera => 'Record a video using your camera'; + String get recordAVideoUsingYourCamera => + 'Запишіть відео, використовуючи відеокамеру'; @override - String get pasteAVideoUsingALink => 'Paste a video using a link'; + String get pasteAVideoUsingALink => 'Вставте відео, використовуючи посилання'; } diff --git a/lib/src/l10n/generated/quill_localizations_ur.dart b/lib/src/l10n/generated/quill_localizations_ur.dart index c984f318..faa28b47 100644 --- a/lib/src/l10n/generated/quill_localizations_ur.dart +++ b/lib/src/l10n/generated/quill_localizations_ur.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsUr extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'مرقم فہرست'; diff --git a/lib/src/l10n/generated/quill_localizations_vi.dart b/lib/src/l10n/generated/quill_localizations_vi.dart index 817a9701..6122fd70 100644 --- a/lib/src/l10n/generated/quill_localizations_vi.dart +++ b/lib/src/l10n/generated/quill_localizations_vi.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsVi extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => 'Danh sách có số'; diff --git a/lib/src/l10n/generated/quill_localizations_zh.dart b/lib/src/l10n/generated/quill_localizations_zh.dart index ca4c41d3..041931d6 100644 --- a/lib/src/l10n/generated/quill_localizations_zh.dart +++ b/lib/src/l10n/generated/quill_localizations_zh.dart @@ -148,6 +148,15 @@ class FlutterQuillLocalizationsZh extends FlutterQuillLocalizations { @override String get heading3 => 'Heading 3'; + @override + String get heading4 => 'Heading 4'; + + @override + String get heading5 => 'Heading 5'; + + @override + String get heading6 => 'Heading 6'; + @override String get numberedList => '编号列表'; diff --git a/lib/src/l10n/quill_en.arb b/lib/src/l10n/quill_en.arb index 58c6884c..986e35c5 100644 --- a/lib/src/l10n/quill_en.arb +++ b/lib/src/l10n/quill_en.arb @@ -48,6 +48,9 @@ "heading1": "Heading 1", "heading2": "Heading 2", "heading3": "Heading 3", + "heading4": "Heading 4", + "heading5": "Heading 5", + "heading6": "Heading 6", "numberedList": "Numbered list", "bulletList": "Bullet list", "checkedList": "Checked list", diff --git a/lib/src/l10n/quill_ru.arb b/lib/src/l10n/quill_ru.arb index 20e035c7..15221822 100644 --- a/lib/src/l10n/quill_ru.arb +++ b/lib/src/l10n/quill_ru.arb @@ -73,6 +73,11 @@ "photo": "Фото", "image": "Изображение", "caseSensitivityAndWholeWordSearch": "Чувствительность к регистру и поиск целых слов", - "insertImage": "Вставить изображение" + "insertImage": "Вставить изображение", + "pickAPhotoFromYourGallery": "Выберите фотографю из вашей галереи", + "takeAPhotoUsingYourCamera": "Создайте фотографю, использую фотокамеру", + "pasteAPhotoUsingALink": "Вставьте фотографию, используя ссылку", + "pickAVideoFromYourGallery": "Выберете видео из вашей галереи", + "recordAVideoUsingYourCamera": "Запишите видео, используя вдеокамеру" } \ No newline at end of file diff --git a/lib/src/l10n/quill_uk.arb b/lib/src/l10n/quill_uk.arb index 983a7ec0..467da155 100644 --- a/lib/src/l10n/quill_uk.arb +++ b/lib/src/l10n/quill_uk.arb @@ -73,6 +73,19 @@ "errorWhileSavingImage": "Помилка при збереженні зображення", "pleaseEnterTextForYourLink": "Наприклад, 'Дізнатися більше'", "pleaseEnterTheLinkURL": "Наприклад, 'https://example.com'", - "pleaseEnterAValidImageURL": "Будь ласка, введіть правильний URL-адресу зображення" + "pleaseEnterAValidImageURL": "Будь ласка, введіть правильний URL-адресу зображення", + "pickAPhotoFromYourGallery": "Оберіть фотографію з вашої галереї", + "takeAPhotoUsingYourCamera": "Створіть фотографію, використовуючи фотокамеру", + "pasteAPhotoUsingALink": "Вставте фотографію, використовуючи посилання", + "pickAVideoFromYourGallery": "Оберіть відео з вашої галереї", + "recordAVideoUsingYourCamera": "Запишіть відео, використовуючи відеокамеру", + "pasteAVideoUsingALink": "Вставте відео, використовуючи посилання", + "normal": "Звичайний", + "heading1": "Заголовок 1", + "heading2": "Заголовок 2", + "heading3": "Заголовок 3", + "heading4": "Заголовок 4", + "heading5": "Заголовок 5", + "heading6": "Заголовок 6" } \ No newline at end of file diff --git a/lib/src/l10n/untranslated.json b/lib/src/l10n/untranslated.json index d6a5a21a..3b002d3e 100644 --- a/lib/src/l10n/untranslated.json +++ b/lib/src/l10n/untranslated.json @@ -4,6 +4,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -17,6 +20,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -30,6 +36,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -43,6 +52,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -56,6 +68,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -69,6 +84,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -82,6 +100,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -95,6 +116,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -108,6 +132,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -121,6 +148,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -134,6 +164,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -147,6 +180,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -160,6 +196,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -173,6 +212,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -186,6 +228,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -199,6 +244,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -212,6 +260,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -225,6 +276,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -238,6 +292,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -251,6 +308,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -264,6 +324,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -277,6 +340,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -290,11 +356,9 @@ "heading1", "heading2", "heading3", - "pickAPhotoFromYourGallery", - "takeAPhotoUsingYourCamera", - "pasteAPhotoUsingALink", - "pickAVideoFromYourGallery", - "recordAVideoUsingYourCamera", + "heading4", + "heading5", + "heading6", "pasteAVideoUsingALink" ], @@ -303,6 +367,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -316,6 +383,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -329,6 +399,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -342,19 +415,9 @@ "heading1", "heading2", "heading3", - "pickAPhotoFromYourGallery", - "takeAPhotoUsingYourCamera", - "pasteAPhotoUsingALink", - "pickAVideoFromYourGallery", - "recordAVideoUsingYourCamera", - "pasteAVideoUsingALink" - ], - - "uk": [ - "normal", - "heading1", - "heading2", - "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -368,6 +431,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -381,6 +447,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -394,6 +463,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -407,6 +479,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -420,6 +495,9 @@ "heading1", "heading2", "heading3", + "heading4", + "heading5", + "heading6", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", diff --git a/lib/src/models/config/editor/elements/list/ordered_list.dart b/lib/src/models/config/editor/elements/list/ordered_list.dart index b4825299..62603855 100644 --- a/lib/src/models/config/editor/elements/list/ordered_list.dart +++ b/lib/src/models/config/editor/elements/list/ordered_list.dart @@ -1,14 +1,13 @@ import 'package:equatable/equatable.dart'; import 'package:flutter/foundation.dart' show immutable; -import 'package:flutter/widgets.dart' show Color; @immutable class QuillEditorOrderedListElementOptions extends Equatable { - const QuillEditorOrderedListElementOptions( - {this.backgroundColor, this.fontColor}); + const QuillEditorOrderedListElementOptions({ + this.useTextColorForDot = true, + }); - final Color? backgroundColor; - final Color? fontColor; + final bool useTextColorForDot; @override List get props => []; } diff --git a/lib/src/models/config/editor/elements/list/unordered_list.dart b/lib/src/models/config/editor/elements/list/unordered_list.dart index 3fe570eb..77a2e7b6 100644 --- a/lib/src/models/config/editor/elements/list/unordered_list.dart +++ b/lib/src/models/config/editor/elements/list/unordered_list.dart @@ -1,14 +1,13 @@ import 'package:equatable/equatable.dart'; import 'package:flutter/foundation.dart' show immutable; -import 'package:flutter/widgets.dart' show Color; @immutable class QuillEditorUnOrderedListElementOptions extends Equatable { - const QuillEditorUnOrderedListElementOptions( - {this.backgroundColor, this.fontColor}); + const QuillEditorUnOrderedListElementOptions({ + this.useTextColorForDot = true, + }); - final Color? backgroundColor; - final Color? fontColor; + final bool useTextColorForDot; @override List get props => []; } diff --git a/lib/src/models/config/toolbar/buttons/base_configurations.dart b/lib/src/models/config/toolbar/base_button_configurations.dart similarity index 82% rename from lib/src/models/config/toolbar/buttons/base_configurations.dart rename to lib/src/models/config/toolbar/base_button_configurations.dart index 91058591..c4edf36c 100644 --- a/lib/src/models/config/toolbar/buttons/base_configurations.dart +++ b/lib/src/models/config/toolbar/base_button_configurations.dart @@ -2,10 +2,9 @@ import 'package:equatable/equatable.dart'; import 'package:flutter/foundation.dart' show VoidCallback, immutable; import 'package:flutter/widgets.dart' show BuildContext, IconData, Widget; -import '../../../../../flutter_quill.dart' show QuillController; -import '../../../themes/quill_icon_theme.dart' show QuillIconTheme; -import '../../quill_configurations.dart' - show kDefaultIconSize, kIconButtonFactor; +import '../../../../flutter_quill.dart' show QuillController; +import '../../themes/quill_icon_theme.dart' show QuillIconTheme; +import '../quill_configurations.dart' show kDefaultIconSize, kIconButtonFactor; class QuillToolbarBaseButtonExtraOptionsIsToggled extends Equatable { const QuillToolbarBaseButtonExtraOptionsIsToggled(this.isToggled); @@ -52,7 +51,6 @@ class QuillToolbarBaseButtonOptions extends Equatable { this.tooltip, this.iconTheme, this.childBuilder, - this.controller, }); /// By default it will use a Icon data from Icons which comes from material @@ -81,13 +79,6 @@ class QuillToolbarBaseButtonOptions extends Equatable { /// If you want to dispaly a differnet widget based using a builder final QuillToolbarButtonOptionsChildBuilder childBuilder; - /// By default it will be from the one in [QuillEditor] or [QuillToolbar] - /// To override it you must pass not null controller - /// if you wish to use the controller in the [childBuilder], please use the - /// one from the extraOptions since it will be not null and will be the one - /// which will be used from the quill toolbar - final QuillController? controller; - @override List get props => [ iconData, @@ -96,7 +87,6 @@ class QuillToolbarBaseButtonOptions extends Equatable { tooltip, iconTheme, childBuilder, - controller, ]; } diff --git a/lib/src/models/config/toolbar/buttons/clear_format_configurations.dart b/lib/src/models/config/toolbar/buttons/clear_format_configurations.dart index d34eef84..04bb8b05 100644 --- a/lib/src/models/config/toolbar/buttons/clear_format_configurations.dart +++ b/lib/src/models/config/toolbar/buttons/clear_format_configurations.dart @@ -16,7 +16,6 @@ class QuillToolbarClearFormatButtonOptions super.iconData, super.afterButtonPressed, super.childBuilder, - super.controller, super.iconTheme, super.tooltip, this.iconSize, diff --git a/lib/src/models/config/toolbar/buttons/color_configurations.dart b/lib/src/models/config/toolbar/buttons/color_configurations.dart index b3c08c25..5a00e0e5 100644 --- a/lib/src/models/config/toolbar/buttons/color_configurations.dart +++ b/lib/src/models/config/toolbar/buttons/color_configurations.dart @@ -2,7 +2,7 @@ import 'package:flutter/widgets.dart' show Color; import '../../../../widgets/quill/quill_controller.dart'; import '../../quill_shared_configurations.dart' show QuillSharedConfigurations; -import 'base_configurations.dart'; +import '../base_button_configurations.dart'; class QuillToolbarColorButtonExtraOptions extends QuillToolbarBaseButtonExtraOptions { @@ -31,7 +31,6 @@ class QuillToolbarColorButtonOptions extends QuillToolbarBaseButtonOptions< super.iconData, super.afterButtonPressed, super.childBuilder, - super.controller, super.iconTheme, super.tooltip, this.customOnPressedCallback, diff --git a/lib/src/models/config/toolbar/buttons/custom_button_configurations.dart b/lib/src/models/config/toolbar/buttons/custom_button_configurations.dart index 3c6f3d7b..44fc79fb 100644 --- a/lib/src/models/config/toolbar/buttons/custom_button_configurations.dart +++ b/lib/src/models/config/toolbar/buttons/custom_button_configurations.dart @@ -1,6 +1,6 @@ import 'package:flutter/widgets.dart' show VoidCallback, Widget; -import 'base_configurations.dart'; +import '../base_button_configurations.dart'; class QuillToolbarCustomButtonExtraOptions extends QuillToolbarBaseButtonExtraOptions { @@ -21,7 +21,6 @@ class QuillToolbarCustomButtonOptions extends QuillToolbarBaseButtonOptions< super.tooltip, super.iconTheme, super.childBuilder, - super.controller, this.onPressed, }); diff --git a/lib/src/models/config/toolbar/buttons/font_family_configurations.dart b/lib/src/models/config/toolbar/buttons/font_family_configurations.dart index 74b9f35b..8d7daf9e 100644 --- a/lib/src/models/config/toolbar/buttons/font_family_configurations.dart +++ b/lib/src/models/config/toolbar/buttons/font_family_configurations.dart @@ -33,7 +33,6 @@ class QuillToolbarFontFamilyButtonOptions extends QuillToolbarBaseButtonOptions< const QuillToolbarFontFamilyButtonOptions({ this.attribute = Attribute.font, this.rawItemsMap, - super.controller, super.iconData, super.afterButtonPressed, super.tooltip, @@ -92,8 +91,6 @@ class QuillToolbarFontFamilyButtonOptions extends QuillToolbarBaseButtonOptions< Color? defaultItemColor, double? iconSize, double? iconButtonFactor, - // Add properties to override inherited properties - QuillController? controller, IconData? iconData, VoidCallback? afterButtonPressed, String? tooltip, @@ -102,7 +99,6 @@ class QuillToolbarFontFamilyButtonOptions extends QuillToolbarBaseButtonOptions< return QuillToolbarFontFamilyButtonOptions( attribute: attribute ?? this.attribute, rawItemsMap: rawItemsMap ?? this.rawItemsMap, - controller: controller ?? this.controller, iconData: iconData ?? this.iconData, afterButtonPressed: afterButtonPressed ?? this.afterButtonPressed, tooltip: tooltip ?? this.tooltip, diff --git a/lib/src/models/config/toolbar/buttons/font_size_configurations.dart b/lib/src/models/config/toolbar/buttons/font_size_configurations.dart index 37ba61f1..efd31e6e 100644 --- a/lib/src/models/config/toolbar/buttons/font_size_configurations.dart +++ b/lib/src/models/config/toolbar/buttons/font_size_configurations.dart @@ -12,7 +12,6 @@ import 'package:flutter/widgets.dart' TextOverflow, TextStyle; -import '../../../../widgets/quill/quill_controller.dart'; import '../../../documents/attribute.dart'; import '../../quill_configurations.dart'; @@ -39,7 +38,6 @@ class QuillToolbarFontSizeButtonOptions extends QuillToolbarBaseButtonOptions< this.rawItemsMap, this.onSelected, this.attribute = Attribute.size, - super.controller, super.afterButtonPressed, super.tooltip, this.padding, @@ -93,7 +91,6 @@ class QuillToolbarFontSizeButtonOptions extends QuillToolbarBaseButtonOptions< Color? defaultItemColor, VoidCallback? afterButtonPressed, String? tooltip, - QuillController? controller, OutlinedBorder? shape, }) { return QuillToolbarFontSizeButtonOptions( @@ -112,7 +109,6 @@ class QuillToolbarFontSizeButtonOptions extends QuillToolbarBaseButtonOptions< defaultItemColor: defaultItemColor ?? this.defaultItemColor, tooltip: tooltip ?? super.tooltip, afterButtonPressed: afterButtonPressed ?? super.afterButtonPressed, - controller: controller ?? super.controller, ); } } diff --git a/lib/src/models/config/toolbar/buttons/history_configurations.dart b/lib/src/models/config/toolbar/buttons/history_configurations.dart index 5766c380..1a146679 100644 --- a/lib/src/models/config/toolbar/buttons/history_configurations.dart +++ b/lib/src/models/config/toolbar/buttons/history_configurations.dart @@ -21,7 +21,6 @@ class QuillToolbarHistoryButtonOptions extends QuillToolbarBaseButtonOptions< QuillToolbarHistoryButtonOptions, QuillToolbarHistoryButtonExtraOptions> { const QuillToolbarHistoryButtonOptions({ super.iconData, - super.controller, super.iconTheme, super.afterButtonPressed, super.tooltip, diff --git a/lib/src/models/config/toolbar/buttons/indent_configurations.dart b/lib/src/models/config/toolbar/buttons/indent_configurations.dart index 559217e7..d5e3ee99 100644 --- a/lib/src/models/config/toolbar/buttons/indent_configurations.dart +++ b/lib/src/models/config/toolbar/buttons/indent_configurations.dart @@ -1,6 +1,6 @@ import 'package:flutter/foundation.dart'; -import 'base_configurations.dart'; +import '../base_button_configurations.dart'; class QuillToolbarIndentButtonExtraOptions extends QuillToolbarBaseButtonExtraOptions { @@ -18,7 +18,6 @@ class QuillToolbarIndentButtonOptions extends QuillToolbarBaseButtonOptions< super.iconData, super.afterButtonPressed, super.childBuilder, - super.controller, super.iconTheme, super.tooltip, this.iconSize, diff --git a/lib/src/models/config/toolbar/buttons/link_style2_configurations.dart b/lib/src/models/config/toolbar/buttons/link_style2_configurations.dart index 6c977f64..170369f0 100644 --- a/lib/src/models/config/toolbar/buttons/link_style2_configurations.dart +++ b/lib/src/models/config/toolbar/buttons/link_style2_configurations.dart @@ -1,7 +1,7 @@ import 'package:flutter/widgets.dart'; import '../../../themes/quill_dialog_theme.dart'; -import 'base_configurations.dart'; +import '../base_button_configurations.dart'; class QuillToolbarLinkStyleButton2ExtraOptions extends QuillToolbarBaseButtonExtraOptions { @@ -33,7 +33,6 @@ class QuillToolbarLinkStyleButton2Options extends QuillToolbarBaseButtonOptions< super.tooltip, super.iconTheme, super.childBuilder, - super.controller, }); final double? iconSize; diff --git a/lib/src/models/config/toolbar/buttons/link_style_configurations.dart b/lib/src/models/config/toolbar/buttons/link_style_configurations.dart index e82d750e..4d5a2d39 100644 --- a/lib/src/models/config/toolbar/buttons/link_style_configurations.dart +++ b/lib/src/models/config/toolbar/buttons/link_style_configurations.dart @@ -29,7 +29,6 @@ class QuillToolbarLinkStyleButtonOptions extends QuillToolbarBaseButtonOptions< super.tooltip, super.iconTheme, super.childBuilder, - super.controller, }); final double? iconSize; diff --git a/lib/src/models/config/toolbar/buttons/search_configurations.dart b/lib/src/models/config/toolbar/buttons/search_configurations.dart index 6d18fad2..45c0ecc9 100644 --- a/lib/src/models/config/toolbar/buttons/search_configurations.dart +++ b/lib/src/models/config/toolbar/buttons/search_configurations.dart @@ -14,7 +14,6 @@ class QuillToolbarSearchButtonExtraOptions class QuillToolbarSearchButtonOptions extends QuillToolbarBaseButtonOptions { const QuillToolbarSearchButtonOptions({ super.iconData, - super.controller, super.childBuilder, super.tooltip, super.afterButtonPressed, diff --git a/lib/src/models/config/toolbar/buttons/select_alignment_configurations.dart b/lib/src/models/config/toolbar/buttons/select_alignment_configurations.dart index 7870e9a1..b3919470 100644 --- a/lib/src/models/config/toolbar/buttons/select_alignment_configurations.dart +++ b/lib/src/models/config/toolbar/buttons/select_alignment_configurations.dart @@ -1,5 +1,5 @@ import 'package:flutter/widgets.dart' show IconData, immutable; -import 'base_configurations.dart'; +import '../base_button_configurations.dart'; class QuillToolbarSelectAlignmentButtonExtraOptions extends QuillToolbarBaseButtonExtraOptions { @@ -23,7 +23,6 @@ class QuillToolbarSelectAlignmentButtonOptions /// This will called on every select alignment button super.childBuilder, - super.controller, super.iconTheme, }); final double? iconSize; diff --git a/lib/src/models/config/toolbar/buttons/select_header_style_configurations.dart b/lib/src/models/config/toolbar/buttons/select_header_style_buttons_configurations.dart similarity index 83% rename from lib/src/models/config/toolbar/buttons/select_header_style_configurations.dart rename to lib/src/models/config/toolbar/buttons/select_header_style_buttons_configurations.dart index 975b4770..f640b614 100644 --- a/lib/src/models/config/toolbar/buttons/select_header_style_configurations.dart +++ b/lib/src/models/config/toolbar/buttons/select_header_style_buttons_configurations.dart @@ -3,9 +3,9 @@ import 'package:flutter/widgets.dart' show Axis; import '../../../../widgets/toolbar/base_toolbar.dart'; import '../../../documents/attribute.dart'; -class QuillToolbarSelectHeaderStyleButtonExtraOptions +class QuillToolbarSelectHeaderStyleButtonsExtraOptions extends QuillToolbarBaseButtonExtraOptions { - const QuillToolbarSelectHeaderStyleButtonExtraOptions({ + const QuillToolbarSelectHeaderStyleButtonsExtraOptions({ required super.controller, required super.context, required super.onPressed, @@ -15,11 +15,10 @@ class QuillToolbarSelectHeaderStyleButtonExtraOptions class QuillToolbarSelectHeaderStyleButtonsOptions extends QuillToolbarBaseButtonOptions< QuillToolbarSelectHeaderStyleButtonsOptions, - QuillToolbarSelectHeaderStyleButtonExtraOptions> { + QuillToolbarSelectHeaderStyleButtonsExtraOptions> { const QuillToolbarSelectHeaderStyleButtonsOptions({ super.afterButtonPressed, super.childBuilder, - super.controller, super.iconTheme, super.tooltip, this.axis, @@ -29,12 +28,15 @@ class QuillToolbarSelectHeaderStyleButtonsOptions }); /// Default value: + /// + /// ```dart /// const [ /// Attribute.header, /// Attribute.h1, /// Attribute.h2, /// Attribute.h3, /// ] + /// ``` final List? attributes; /// By default we will the toolbar axis from [QuillSimpleToolbarConfigurations] diff --git a/lib/src/models/config/toolbar/buttons/select_header_style_dropdown_button_configurations.dart b/lib/src/models/config/toolbar/buttons/select_header_style_dropdown_button_configurations.dart new file mode 100644 index 00000000..8cc6659e --- /dev/null +++ b/lib/src/models/config/toolbar/buttons/select_header_style_dropdown_button_configurations.dart @@ -0,0 +1,134 @@ +import 'package:flutter/material.dart' show PopupMenuEntry; +import 'package:flutter/widgets.dart' + show + Color, + EdgeInsets, + EdgeInsetsGeometry, + IconData, + TextOverflow, + TextStyle, + ValueChanged, + VoidCallback; + +import '../../../../widgets/toolbar/base_toolbar.dart'; +import '../../../documents/attribute.dart'; +import '../../../themes/quill_icon_theme.dart'; + +class QuillToolbarSelectHeaderStyleDropdownButtonExtraOptions + extends QuillToolbarBaseButtonExtraOptions { + const QuillToolbarSelectHeaderStyleDropdownButtonExtraOptions({ + required super.controller, + required super.context, + required super.onPressed, + required this.currentValue, + }); + final Attribute currentValue; +} + +class QuillToolbarSelectHeaderStyleDropdownButtonOptions + extends QuillToolbarBaseButtonOptions< + QuillToolbarSelectHeaderStyleDropdownButtonOptions, + QuillToolbarSelectHeaderStyleDropdownButtonExtraOptions> { + const QuillToolbarSelectHeaderStyleDropdownButtonOptions({ + super.afterButtonPressed, + super.childBuilder, + super.iconTheme, + super.tooltip, + this.iconSize, + this.iconButtonFactor, + this.textStyle, + super.iconData, + this.fillColor, + this.hoverElevation = 1, + this.highlightElevation = 1, + this.onSelected, + this.attributes, + this.padding, + this.style, + this.width, + this.labelOverflow = TextOverflow.visible, + this.itemHeight, + this.itemPadding, + this.defaultItemColor, + this.renderItemTextStyle = false, + }); + + /// By default we will the toolbar axis from [QuillSimpleToolbarConfigurations] + final double? iconSize; + final double? iconButtonFactor; + final TextStyle? textStyle; + + final Color? fillColor; + final double hoverElevation; + final double highlightElevation; + final ValueChanged? onSelected; + + /// Header attributes, defaults to: + /// ```dart + /// [ + /// Attribute.h1, + /// Attribute.h2, + /// Attribute.h3, + /// Attribute.h4, + /// Attribute.h5, + /// Attribute.h6, + /// Attribute.header, + /// ] + /// ``` + final List>? attributes; + final EdgeInsetsGeometry? padding; + final TextStyle? style; + final double? width; + final TextOverflow labelOverflow; + final double? itemHeight; + final EdgeInsets? itemPadding; + final Color? defaultItemColor; + final bool renderItemTextStyle; + + QuillToolbarSelectHeaderStyleDropdownButtonOptions copyWith({ + Color? fillColor, + double? hoverElevation, + double? highlightElevation, + List>? items, + ValueChanged? onSelected, + List>? attributes, + EdgeInsetsGeometry? padding, + TextStyle? style, + double? width, + TextOverflow? labelOverflow, + bool? renderFontFamilies, + bool? overrideTooltipByFontFamily, + double? itemHeight, + EdgeInsets? itemPadding, + Color? defaultItemColor, + double? iconSize, + double? iconButtonFactor, + IconData? iconData, + VoidCallback? afterButtonPressed, + String? tooltip, + QuillIconTheme? iconTheme, + bool? renderItemTextStyle, + }) { + return QuillToolbarSelectHeaderStyleDropdownButtonOptions( + attributes: attributes ?? this.attributes, + iconData: iconData ?? this.iconData, + afterButtonPressed: afterButtonPressed ?? this.afterButtonPressed, + tooltip: tooltip ?? this.tooltip, + iconTheme: iconTheme ?? this.iconTheme, + onSelected: onSelected ?? this.onSelected, + padding: padding ?? this.padding, + style: style ?? this.style, + width: width ?? this.width, + labelOverflow: labelOverflow ?? this.labelOverflow, + itemHeight: itemHeight ?? this.itemHeight, + itemPadding: itemPadding ?? this.itemPadding, + defaultItemColor: defaultItemColor ?? this.defaultItemColor, + iconSize: iconSize ?? this.iconSize, + iconButtonFactor: iconButtonFactor ?? this.iconButtonFactor, + fillColor: fillColor ?? this.fillColor, + hoverElevation: hoverElevation ?? this.hoverElevation, + highlightElevation: highlightElevation ?? this.highlightElevation, + renderItemTextStyle: renderItemTextStyle ?? this.renderItemTextStyle, + ); + } +} diff --git a/lib/src/models/config/toolbar/buttons/toggle_check_list_configurations.dart b/lib/src/models/config/toolbar/buttons/toggle_check_list_configurations.dart index 54d456b9..de9dfe65 100644 --- a/lib/src/models/config/toolbar/buttons/toggle_check_list_configurations.dart +++ b/lib/src/models/config/toolbar/buttons/toggle_check_list_configurations.dart @@ -26,7 +26,6 @@ class QuillToolbarToggleCheckListButtonOptions this.fillColor, this.attribute = Attribute.unchecked, this.isShouldRequestKeyboard = false, - super.controller, super.iconTheme, super.tooltip, super.iconData, diff --git a/lib/src/models/config/toolbar/buttons/toggle_style_configurations.dart b/lib/src/models/config/toolbar/buttons/toggle_style_configurations.dart index 4ea2ea0f..d8d0e3e2 100644 --- a/lib/src/models/config/toolbar/buttons/toggle_style_configurations.dart +++ b/lib/src/models/config/toolbar/buttons/toggle_style_configurations.dart @@ -2,7 +2,7 @@ import 'package:flutter/foundation.dart' show immutable; import 'package:flutter/widgets.dart' show Color; -import 'base_configurations.dart'; +import '../base_button_configurations.dart'; class QuillToolbarToggleStyleButtonExtraOptions extends QuillToolbarBaseButtonExtraOptions @@ -31,7 +31,6 @@ class QuillToolbarToggleStyleButtonOptions super.afterButtonPressed, super.iconTheme, super.childBuilder, - super.controller, }); final double? iconSize; diff --git a/lib/src/models/config/toolbar/simple_toolbar_button_options.dart b/lib/src/models/config/toolbar/simple_toolbar_button_options.dart new file mode 100644 index 00000000..8108f86d --- /dev/null +++ b/lib/src/models/config/toolbar/simple_toolbar_button_options.dart @@ -0,0 +1,136 @@ +// ignore_for_file: public_member_api_docs, sort_constructors_first +import 'package:equatable/equatable.dart'; +import 'package:flutter/foundation.dart' show immutable; + +import 'base_button_configurations.dart'; +import 'buttons/clear_format_configurations.dart'; +import 'buttons/color_configurations.dart'; +import 'buttons/custom_button_configurations.dart'; +import 'buttons/font_family_configurations.dart'; +import 'buttons/font_size_configurations.dart'; +import 'buttons/history_configurations.dart'; +import 'buttons/indent_configurations.dart'; +import 'buttons/link_style2_configurations.dart'; +import 'buttons/link_style_configurations.dart'; +import 'buttons/search_configurations.dart'; +import 'buttons/select_alignment_configurations.dart'; +import 'buttons/select_header_style_buttons_configurations.dart'; +import 'buttons/select_header_style_dropdown_button_configurations.dart'; +import 'buttons/toggle_check_list_configurations.dart'; +import 'buttons/toggle_style_configurations.dart'; + +export './../../../widgets/toolbar/buttons/search/search_dialog.dart'; +export 'base_button_configurations.dart'; +export 'buttons/clear_format_configurations.dart'; +export 'buttons/color_configurations.dart'; +export 'buttons/custom_button_configurations.dart'; +export 'buttons/font_family_configurations.dart'; +export 'buttons/font_size_configurations.dart'; +export 'buttons/history_configurations.dart'; +export 'buttons/indent_configurations.dart'; +export 'buttons/link_style2_configurations.dart'; +export 'buttons/link_style_configurations.dart'; +export 'buttons/search_configurations.dart'; +export 'buttons/select_alignment_configurations.dart'; +export 'buttons/select_header_style_buttons_configurations.dart'; +export 'buttons/select_header_style_dropdown_button_configurations.dart'; +export 'buttons/toggle_check_list_configurations.dart'; +export 'buttons/toggle_style_configurations.dart'; + +/// The configurations for the buttons of the toolbar widget of flutter quill +@immutable +class QuillSimpleToolbarButtonOptions extends Equatable { + const QuillSimpleToolbarButtonOptions({ + this.base = const QuillToolbarBaseButtonOptions(), + this.undoHistory = const QuillToolbarHistoryButtonOptions(), + this.redoHistory = const QuillToolbarHistoryButtonOptions(), + this.fontFamily = const QuillToolbarFontFamilyButtonOptions(), + this.fontSize = const QuillToolbarFontSizeButtonOptions(), + this.bold = const QuillToolbarToggleStyleButtonOptions(), + this.subscript = const QuillToolbarToggleStyleButtonOptions(), + this.superscript = const QuillToolbarToggleStyleButtonOptions(), + this.italic = const QuillToolbarToggleStyleButtonOptions(), + this.small = const QuillToolbarToggleStyleButtonOptions(), + this.underLine = const QuillToolbarToggleStyleButtonOptions(), + this.strikeThrough = const QuillToolbarToggleStyleButtonOptions(), + this.inlineCode = const QuillToolbarToggleStyleButtonOptions(), + this.direction = const QuillToolbarToggleStyleButtonOptions(), + this.listNumbers = const QuillToolbarToggleStyleButtonOptions(), + this.listBullets = const QuillToolbarToggleStyleButtonOptions(), + this.codeBlock = const QuillToolbarToggleStyleButtonOptions(), + this.quote = const QuillToolbarToggleStyleButtonOptions(), + this.toggleCheckList = const QuillToolbarToggleCheckListButtonOptions(), + this.indentIncrease = const QuillToolbarIndentButtonOptions(), + this.indentDecrease = const QuillToolbarIndentButtonOptions(), + this.color = const QuillToolbarColorButtonOptions(), + this.backgroundColor = const QuillToolbarColorButtonOptions(), + this.clearFormat = const QuillToolbarClearFormatButtonOptions(), + this.selectAlignmentButtons = + const QuillToolbarSelectAlignmentButtonOptions(), + this.search = const QuillToolbarSearchButtonOptions(), + this.selectHeaderStyleButtons = + const QuillToolbarSelectHeaderStyleButtonsOptions(), + this.selectHeaderStyleDropdownButton = + const QuillToolbarSelectHeaderStyleDropdownButtonOptions(), + this.linkStyle = const QuillToolbarLinkStyleButtonOptions(), + this.linkStyle2 = const QuillToolbarLinkStyleButton2Options(), + this.customButtons = const QuillToolbarCustomButtonOptions(), + }); + + /// The base configurations for all the buttons which will apply to all + /// but if the options overrided in the spesefic button options + /// then it will use that instead + final QuillToolbarBaseButtonOptions base; + final QuillToolbarHistoryButtonOptions undoHistory; + final QuillToolbarHistoryButtonOptions redoHistory; + final QuillToolbarFontFamilyButtonOptions fontFamily; + final QuillToolbarFontSizeButtonOptions fontSize; + final QuillToolbarToggleStyleButtonOptions bold; + final QuillToolbarToggleStyleButtonOptions subscript; + final QuillToolbarToggleStyleButtonOptions superscript; + final QuillToolbarToggleStyleButtonOptions italic; + final QuillToolbarToggleStyleButtonOptions small; + final QuillToolbarToggleStyleButtonOptions underLine; + final QuillToolbarToggleStyleButtonOptions strikeThrough; + final QuillToolbarToggleStyleButtonOptions inlineCode; + final QuillToolbarToggleStyleButtonOptions direction; + final QuillToolbarToggleStyleButtonOptions listNumbers; + final QuillToolbarToggleStyleButtonOptions listBullets; + final QuillToolbarToggleStyleButtonOptions codeBlock; + final QuillToolbarToggleStyleButtonOptions quote; + final QuillToolbarToggleCheckListButtonOptions toggleCheckList; + final QuillToolbarIndentButtonOptions indentIncrease; + final QuillToolbarIndentButtonOptions indentDecrease; + final QuillToolbarColorButtonOptions color; + final QuillToolbarColorButtonOptions backgroundColor; + final QuillToolbarClearFormatButtonOptions clearFormat; + + /// The reason we call this buttons in the end because this is responsible + /// for all the alignment buttons and not just one, you still + /// can customize the icons and tooltips + /// and you have child builder + final QuillToolbarSelectAlignmentButtonOptions selectAlignmentButtons; + + final QuillToolbarSearchButtonOptions search; + + /// The reason we call this buttons in the end because this is responsible + /// for all the header style buttons and not just one, you still + /// can customize it and you also have child builder + final QuillToolbarSelectHeaderStyleButtonsOptions selectHeaderStyleButtons; + + /// The reason we call this buttons in the end because this is responsible + /// for all the header style buttons and not just one, you still + /// can customize it and you also have child builder + final QuillToolbarSelectHeaderStyleDropdownButtonOptions + selectHeaderStyleDropdownButton; + + final QuillToolbarLinkStyleButtonOptions linkStyle; + final QuillToolbarLinkStyleButton2Options linkStyle2; + + final QuillToolbarCustomButtonOptions customButtons; + + @override + List get props => [ + base, + ]; +} diff --git a/lib/src/models/config/toolbar/simple_toolbar_configurations.dart b/lib/src/models/config/toolbar/simple_toolbar_configurations.dart index c9f0ffeb..f4c9d62e 100644 --- a/lib/src/models/config/toolbar/simple_toolbar_configurations.dart +++ b/lib/src/models/config/toolbar/simple_toolbar_configurations.dart @@ -1,32 +1,16 @@ -// ignore_for_file: public_member_api_docs, sort_constructors_first -import 'package:equatable/equatable.dart'; import 'package:flutter/foundation.dart' show immutable; import 'package:flutter/widgets.dart' - show Axis, Widget, WrapAlignment, WrapCrossAlignment; + show Axis, WrapAlignment, WrapCrossAlignment; import '../../../widgets/quill/embeds.dart'; import '../../../widgets/quill/quill_controller.dart'; import '../../themes/quill_dialog_theme.dart'; import '../../themes/quill_icon_theme.dart'; -import 'buttons/base_configurations.dart'; -import 'buttons/clear_format_configurations.dart'; -import 'buttons/color_configurations.dart'; -import 'buttons/custom_button_configurations.dart'; -import 'buttons/font_family_configurations.dart'; -import 'buttons/font_size_configurations.dart'; -import 'buttons/history_configurations.dart'; -import 'buttons/indent_configurations.dart'; -import 'buttons/link_style2_configurations.dart'; -import 'buttons/link_style_configurations.dart'; -import 'buttons/search_configurations.dart'; -import 'buttons/select_alignment_configurations.dart'; -import 'buttons/select_header_style_configurations.dart'; -import 'buttons/toggle_check_list_configurations.dart'; -import 'buttons/toggle_style_configurations.dart'; +import 'simple_toolbar_button_options.dart'; import 'toolbar_shared_configurations.dart'; export './../../../widgets/toolbar/buttons/search/search_dialog.dart'; -export 'buttons/base_configurations.dart'; +export 'base_button_configurations.dart'; export 'buttons/clear_format_configurations.dart'; export 'buttons/color_configurations.dart'; export 'buttons/custom_button_configurations.dart'; @@ -38,12 +22,14 @@ export 'buttons/link_style2_configurations.dart'; export 'buttons/link_style_configurations.dart'; export 'buttons/search_configurations.dart'; export 'buttons/select_alignment_configurations.dart'; -export 'buttons/select_header_style_configurations.dart'; +export 'buttons/select_header_style_buttons_configurations.dart'; +export 'buttons/select_header_style_dropdown_button_configurations.dart'; export 'buttons/toggle_check_list_configurations.dart'; export 'buttons/toggle_style_configurations.dart'; +export 'simple_toolbar_button_options.dart'; /// The default size of the icon of a button. -const double kDefaultIconSize = 18; +const double kDefaultIconSize = 15; /// The default size for the toolbar (width, height) const double defaultToolbarSize = kDefaultIconSize * 2; @@ -65,6 +51,17 @@ enum LinkStyleType { bool get isAlternative => this == LinkStyleType.alternative; } +enum HeaderStyleType { + /// Defines the original [QuillToolbarSelectHeaderStyleButtons]. + original, + + /// Defines the alternative [QuillToolbarSelectHeaderStyleDropdownButton]. + dropdown; + + bool get isOriginal => this == HeaderStyleType.original; + bool get isDropdown => this == HeaderStyleType.dropdown; +} + /// The configurations for the toolbar widget of flutter quill @immutable class QuillSimpleToolbarConfigurations extends QuillSharedToolbarProperties { @@ -74,7 +71,7 @@ class QuillSimpleToolbarConfigurations extends QuillSharedToolbarProperties { super.toolbarSectionSpacing = kToolbarSectionSpacing, super.toolbarIconAlignment = WrapAlignment.center, super.toolbarIconCrossAlignment = WrapCrossAlignment.center, - super.buttonOptions = const QuillToolbarButtonOptions(), + super.buttonOptions = const QuillSimpleToolbarButtonOptions(), this.customButtons = const [], this.fontFamilyValues, super.multiRowsDisplay = true, @@ -111,6 +108,7 @@ class QuillSimpleToolbarConfigurations extends QuillSharedToolbarProperties { this.showSubscript = true, this.showSuperscript = true, this.linkStyleType = LinkStyleType.original, + this.headerStyleType = HeaderStyleType.original, /// The decoration to use for the toolbar. super.decoration, @@ -126,7 +124,6 @@ class QuillSimpleToolbarConfigurations extends QuillSharedToolbarProperties { super.color, super.sectionDividerColor, super.sectionDividerSpace, - this.spacerWidget, /// By default it will calculated based on the [globalIconSize] from /// [base] in [QuillToolbarButtonOptions] @@ -152,17 +149,8 @@ class QuillSimpleToolbarConfigurations extends QuillSharedToolbarProperties { final QuillController controller; - /// A widget that will placed between each button in the toolbar - /// can be used as a spacer - /// it will not used before the first button - /// it will not used after the last button - /// it will also not used in the toolbar dividers - /// Default value will be [SizedBox.shrink()] - /// some widgets like the header styles will be considered as one widget - final Widget? spacerWidget; - /// By default it will be - /// ``` + /// ```dart /// { /// 'Small'.i18n: 'small', /// 'Large'.i18n: 'large', @@ -221,6 +209,9 @@ class QuillSimpleToolbarConfigurations extends QuillSharedToolbarProperties { /// Defines which dialog is used for applying link attribute. final LinkStyleType linkStyleType; + /// Defines which dialog is used for applying header attribute. + final HeaderStyleType headerStyleType; + @override List get props => [ buttonOptions, @@ -230,93 +221,3 @@ class QuillSimpleToolbarConfigurations extends QuillSharedToolbarProperties { axis, ]; } - -/// The configurations for the buttons of the toolbar widget of flutter quill -@immutable -class QuillToolbarButtonOptions extends Equatable { - const QuillToolbarButtonOptions({ - this.base = const QuillToolbarBaseButtonOptions(), - this.undoHistory = const QuillToolbarHistoryButtonOptions(), - this.redoHistory = const QuillToolbarHistoryButtonOptions(), - this.fontFamily = const QuillToolbarFontFamilyButtonOptions(), - this.fontSize = const QuillToolbarFontSizeButtonOptions(), - this.bold = const QuillToolbarToggleStyleButtonOptions(), - this.subscript = const QuillToolbarToggleStyleButtonOptions(), - this.superscript = const QuillToolbarToggleStyleButtonOptions(), - this.italic = const QuillToolbarToggleStyleButtonOptions(), - this.small = const QuillToolbarToggleStyleButtonOptions(), - this.underLine = const QuillToolbarToggleStyleButtonOptions(), - this.strikeThrough = const QuillToolbarToggleStyleButtonOptions(), - this.inlineCode = const QuillToolbarToggleStyleButtonOptions(), - this.direction = const QuillToolbarToggleStyleButtonOptions(), - this.listNumbers = const QuillToolbarToggleStyleButtonOptions(), - this.listBullets = const QuillToolbarToggleStyleButtonOptions(), - this.codeBlock = const QuillToolbarToggleStyleButtonOptions(), - this.quote = const QuillToolbarToggleStyleButtonOptions(), - this.toggleCheckList = const QuillToolbarToggleCheckListButtonOptions(), - this.indentIncrease = const QuillToolbarIndentButtonOptions(), - this.indentDecrease = const QuillToolbarIndentButtonOptions(), - this.color = const QuillToolbarColorButtonOptions(), - this.backgroundColor = const QuillToolbarColorButtonOptions(), - this.clearFormat = const QuillToolbarClearFormatButtonOptions(), - this.selectAlignmentButtons = - const QuillToolbarSelectAlignmentButtonOptions(), - this.search = const QuillToolbarSearchButtonOptions(), - this.selectHeaderStyleButtons = - const QuillToolbarSelectHeaderStyleButtonsOptions(), - this.linkStyle = const QuillToolbarLinkStyleButtonOptions(), - this.linkStyle2 = const QuillToolbarLinkStyleButton2Options(), - this.customButtons = const QuillToolbarCustomButtonOptions(), - }); - - /// The base configurations for all the buttons which will apply to all - /// but if the options overrided in the spesefic button options - /// then it will use that instead - final QuillToolbarBaseButtonOptions base; - final QuillToolbarHistoryButtonOptions undoHistory; - final QuillToolbarHistoryButtonOptions redoHistory; - final QuillToolbarFontFamilyButtonOptions fontFamily; - final QuillToolbarFontSizeButtonOptions fontSize; - final QuillToolbarToggleStyleButtonOptions bold; - final QuillToolbarToggleStyleButtonOptions subscript; - final QuillToolbarToggleStyleButtonOptions superscript; - final QuillToolbarToggleStyleButtonOptions italic; - final QuillToolbarToggleStyleButtonOptions small; - final QuillToolbarToggleStyleButtonOptions underLine; - final QuillToolbarToggleStyleButtonOptions strikeThrough; - final QuillToolbarToggleStyleButtonOptions inlineCode; - final QuillToolbarToggleStyleButtonOptions direction; - final QuillToolbarToggleStyleButtonOptions listNumbers; - final QuillToolbarToggleStyleButtonOptions listBullets; - final QuillToolbarToggleStyleButtonOptions codeBlock; - final QuillToolbarToggleStyleButtonOptions quote; - final QuillToolbarToggleCheckListButtonOptions toggleCheckList; - final QuillToolbarIndentButtonOptions indentIncrease; - final QuillToolbarIndentButtonOptions indentDecrease; - final QuillToolbarColorButtonOptions color; - final QuillToolbarColorButtonOptions backgroundColor; - final QuillToolbarClearFormatButtonOptions clearFormat; - - /// The reason we call this buttons in the end because this is responsible - /// for all the alignment buttons and not just one, you still - /// can customize the icons and tooltips - /// and you have child builder - final QuillToolbarSelectAlignmentButtonOptions selectAlignmentButtons; - - final QuillToolbarSearchButtonOptions search; - - /// The reason we call this buttons in the end because this is responsible - /// for all the header style buttons and not just one, you still - /// can customize it and you also have child builder - final QuillToolbarSelectHeaderStyleButtonsOptions selectHeaderStyleButtons; - - final QuillToolbarLinkStyleButtonOptions linkStyle; - final QuillToolbarLinkStyleButton2Options linkStyle2; - - final QuillToolbarCustomButtonOptions customButtons; - - @override - List get props => [ - base, - ]; -} diff --git a/lib/src/models/config/toolbar/toolbar_configurations.dart b/lib/src/models/config/toolbar/toolbar_configurations.dart index 4e318c5c..42c45ffb 100644 --- a/lib/src/models/config/toolbar/toolbar_configurations.dart +++ b/lib/src/models/config/toolbar/toolbar_configurations.dart @@ -1,6 +1,6 @@ import 'package:flutter/widgets.dart' show immutable; -import '../../../widgets/toolbar/base_toolbar.dart'; +import 'simple_toolbar_button_options.dart'; import 'toolbar_shared_configurations.dart'; @immutable @@ -10,7 +10,7 @@ class QuillToolbarConfigurations extends QuillSharedToolbarProperties { /// Note this only used when you using the quill toolbar buttons like /// `QuillToolbarHistoryButton` inside it - super.buttonOptions = const QuillToolbarButtonOptions(), + super.buttonOptions = const QuillSimpleToolbarButtonOptions(), }); @override diff --git a/lib/src/models/config/toolbar/toolbar_shared_configurations.dart b/lib/src/models/config/toolbar/toolbar_shared_configurations.dart index aff603a5..041592a8 100644 --- a/lib/src/models/config/toolbar/toolbar_shared_configurations.dart +++ b/lib/src/models/config/toolbar/toolbar_shared_configurations.dart @@ -20,12 +20,14 @@ abstract class QuillSharedToolbarProperties extends Equatable { this.linkDialogAction, this.multiRowsDisplay = true, this.decoration, - this.buttonOptions = const QuillToolbarButtonOptions(), + this.buttonOptions = const QuillSimpleToolbarButtonOptions(), + this.toolbarRunSpacing = 4, }); final Axis axis; final double toolbarSectionSpacing; final WrapAlignment toolbarIconAlignment; final WrapCrossAlignment toolbarIconCrossAlignment; + final double toolbarRunSpacing; final double? toolbarSize; // Overrides the action in the _LinkDialog widget @@ -54,7 +56,7 @@ abstract class QuillSharedToolbarProperties extends Equatable { /// If you want change spesefic buttons or all of them /// then you came to the right place - final QuillToolbarButtonOptions buttonOptions; + final QuillSimpleToolbarButtonOptions buttonOptions; final QuillSharedConfigurations sharedConfigurations; } diff --git a/lib/src/models/documents/attribute.dart b/lib/src/models/documents/attribute.dart index a30f258c..51fc8af5 100644 --- a/lib/src/models/documents/attribute.dart +++ b/lib/src/models/documents/attribute.dart @@ -158,12 +158,24 @@ class Attribute extends Equatable { Attribute.video.key, }; + /// "attributes":{"header": 1 } static const Attribute h1 = HeaderAttribute(level: 1); + /// "attributes":{"header": 2 } static const Attribute h2 = HeaderAttribute(level: 2); + /// "attributes":{"header": 3 } static const Attribute h3 = HeaderAttribute(level: 3); + /// "attributes":{"header": 4 } + static const Attribute h4 = HeaderAttribute(level: 4); + + /// "attributes":{"header": 5 } + static const Attribute h5 = HeaderAttribute(level: 5); + + /// "attributes":{"header": 6 } + static const Attribute h6 = HeaderAttribute(level: 6); + // "attributes":{"align":"left"} static const Attribute leftAlignment = AlignAttribute('left'); diff --git a/lib/src/models/documents/document.dart b/lib/src/models/documents/document.dart index aa0495a2..2945e755 100644 --- a/lib/src/models/documents/document.dart +++ b/lib/src/models/documents/document.dart @@ -1,5 +1,10 @@ import 'dart:async' show StreamController; +import 'package:html2md/html2md.dart' as html2md; +import 'package:markdown/markdown.dart' as md; + +import '../../../markdown_quill.dart'; + import '../../../quill_delta.dart'; import '../../widgets/quill/embeds.dart'; import '../rules/rule.dart'; @@ -442,6 +447,40 @@ class Document { delta.first.data == '\n' && delta.first.key == 'insert'; } + + /// Convert the HTML Raw string to [Delta] + /// + /// It will run using the following steps: + /// + /// 1. Convert the html to markdown string using `html2md` package + /// 2. Convert the markdown string to quill delta json string + /// 3. Decode the delta json string to [Delta] + /// + /// for more [info](https://github.com/singerdmx/flutter-quill/issues/1100) + static Delta fromHtml(String html) { + final markdown = html2md + .convert( + html, + ) + .replaceAll('unsafe:', ''); + + final mdDocument = md.Document(encodeHtml: false); + + final mdToDelta = MarkdownToDelta(markdownDocument: mdDocument); + + return mdToDelta.convert(markdown); + + // final deltaJsonString = markdownToDelta(markdown); + // final deltaJson = jsonDecode(deltaJsonString); + // if (deltaJson is! List) { + // throw ArgumentError( + // 'The delta json string should be of type list when jsonDecode() it', + // ); + // } + // return Delta.fromJson( + // deltaJson, + // ); + } } /// Source of a [Change]. diff --git a/lib/src/models/themes/quill_icon_theme.dart b/lib/src/models/themes/quill_icon_theme.dart index c93e3857..65669668 100644 --- a/lib/src/models/themes/quill_icon_theme.dart +++ b/lib/src/models/themes/quill_icon_theme.dart @@ -34,5 +34,5 @@ class QuillIconTheme { final double? borderRadius; ///The padding for icons - final EdgeInsets? padding; + final EdgeInsets? padding; } diff --git a/lib/src/utils/font.dart b/lib/src/utils/font.dart index 5d1aa018..423c9581 100644 --- a/lib/src/utils/font.dart +++ b/lib/src/utils/font.dart @@ -1,3 +1,5 @@ +import '../../flutter_quill.dart'; + dynamic getFontSize(dynamic sizeValue) { if (sizeValue is String && ['small', 'normal', 'large', 'huge'].contains(sizeValue)) { @@ -19,3 +21,32 @@ dynamic getFontSize(dynamic sizeValue) { } return fontSize; } + +double? getFontSizeAsDouble(dynamic sizeValue, + {required DefaultStyles defaultStyles}) { + if (sizeValue is String && + ['small', 'normal', 'large', 'huge'].contains(sizeValue)) { + return switch (sizeValue) { + 'small' => defaultStyles.sizeSmall?.fontSize, + 'normal' => null, + 'large' => defaultStyles.sizeLarge?.fontSize, + 'huge' => defaultStyles.sizeHuge?.fontSize, + String() => throw ArgumentError(), + }; + } + + if (sizeValue is double) { + return sizeValue; + } + + if (sizeValue is int) { + return sizeValue.toDouble(); + } + + assert(sizeValue is String); + final fontSize = double.tryParse(sizeValue); + if (fontSize == null) { + throw ArgumentError('Invalid size $sizeValue'); + } + return fontSize; +} diff --git a/lib/src/utils/string.dart b/lib/src/utils/string.dart index 3a67fc23..5ca63699 100644 --- a/lib/src/utils/string.dart +++ b/lib/src/utils/string.dart @@ -1,4 +1,4 @@ -import 'package:flutter/cupertino.dart'; +import 'package:flutter/widgets.dart' show Alignment, TextAlign; Map parseKeyValuePairs(String s, Set targetKeys) { final result = {}; @@ -51,3 +51,13 @@ Alignment getAlignment(String? cssAlignment) { Alignment.bottomRight ][index]; } + +TextAlign? getTextAlign(String value) { + return switch (value) { + 'center' => TextAlign.center, + 'right' => TextAlign.right, + 'left' => TextAlign.left, + 'justify' => null, + Object() => null, + }; +} diff --git a/lib/src/widgets/others/default_styles.dart b/lib/src/widgets/others/default_styles.dart index 575a5273..ee0d0788 100644 --- a/lib/src/widgets/others/default_styles.dart +++ b/lib/src/widgets/others/default_styles.dart @@ -67,6 +67,9 @@ class InlineCodeStyle { this.header1, this.header2, this.header3, + this.header4, + this.header5, + this.header6, this.backgroundColor, this.radius, }); @@ -83,6 +86,15 @@ class InlineCodeStyle { /// Style override for inline code in headings level 3. final TextStyle? header3; + /// Style override for inline code in headings level 4. + final TextStyle? header4; + + /// Style override for inline code in headings level 5. + final TextStyle? header5; + + /// Style override for inline code in headings level 6. + final TextStyle? header6; + /// Background color for inline code. final Color? backgroundColor; @@ -101,6 +113,15 @@ class InlineCodeStyle { if (lineStyle.containsKey(Attribute.h3.key)) { return header3 ?? style; } + if (lineStyle.containsKey(Attribute.h4.key)) { + return header4 ?? style; + } + if (lineStyle.containsKey(Attribute.h5.key)) { + return header5 ?? style; + } + if (lineStyle.containsKey(Attribute.h6.key)) { + return header6 ?? style; + } return style; } @@ -116,13 +137,16 @@ class InlineCodeStyle { other.header1 == header1 && other.header2 == header2 && other.header3 == header3 && + other.header4 == header4 && + other.header5 == header5 && + other.header6 == header6 && other.backgroundColor == backgroundColor && other.radius == radius; } @override - int get hashCode => - Object.hash(style, header1, header2, header3, backgroundColor, radius); + int get hashCode => Object.hash(style, header1, header2, header3, header4, + header5, header6, backgroundColor, radius); } @immutable @@ -144,6 +168,9 @@ class DefaultStyles { this.h1, this.h2, this.h3, + this.h4, + this.h5, + this.h6, this.paragraph, this.bold, this.subscript, @@ -170,6 +197,9 @@ class DefaultStyles { final DefaultTextBlockStyle? h1; final DefaultTextBlockStyle? h2; final DefaultTextBlockStyle? h3; + final DefaultTextBlockStyle? h4; + final DefaultTextBlockStyle? h5; + final DefaultTextBlockStyle? h6; final DefaultTextBlockStyle? paragraph; final TextStyle? bold; final TextStyle? subscript; @@ -220,9 +250,10 @@ class DefaultStyles { h1: DefaultTextBlockStyle( defaultTextStyle.style.copyWith( fontSize: 34, - color: defaultTextStyle.style.color!.withOpacity(0.70), - height: 1.15, - fontWeight: FontWeight.w300, + color: defaultTextStyle.style.color, + letterSpacing: -1, + height: 1, + fontWeight: FontWeight.bold, decoration: TextDecoration.none, ), const VerticalSpacing(16, 0), @@ -230,10 +261,11 @@ class DefaultStyles { null), h2: DefaultTextBlockStyle( defaultTextStyle.style.copyWith( - fontSize: 24, - color: defaultTextStyle.style.color!.withOpacity(0.70), - height: 1.15, - fontWeight: FontWeight.normal, + fontSize: 30, + color: defaultTextStyle.style.color, + letterSpacing: -0.8, + height: 1.067, + fontWeight: FontWeight.bold, decoration: TextDecoration.none, ), const VerticalSpacing(8, 0), @@ -241,26 +273,72 @@ class DefaultStyles { null), h3: DefaultTextBlockStyle( defaultTextStyle.style.copyWith( - fontSize: 20, - color: defaultTextStyle.style.color!.withOpacity(0.70), - height: 1.25, - fontWeight: FontWeight.w500, + fontSize: 24, + color: defaultTextStyle.style.color, + letterSpacing: -0.5, + height: 1.083, + fontWeight: FontWeight.bold, decoration: TextDecoration.none, ), const VerticalSpacing(8, 0), const VerticalSpacing(0, 0), null, ), - paragraph: DefaultTextBlockStyle(baseStyle, const VerticalSpacing(0, 0), - const VerticalSpacing(0, 0), null), + h4: DefaultTextBlockStyle( + defaultTextStyle.style.copyWith( + fontSize: 20, + color: defaultTextStyle.style.color, + letterSpacing: -0.4, + height: 1.1, + fontWeight: FontWeight.bold, + decoration: TextDecoration.none, + ), + const VerticalSpacing(6, 0), + const VerticalSpacing(0, 0), + null, + ), + h5: DefaultTextBlockStyle( + defaultTextStyle.style.copyWith( + fontSize: 18, + color: defaultTextStyle.style.color, + letterSpacing: -0.2, + height: 1.11, + fontWeight: FontWeight.bold, + decoration: TextDecoration.none, + ), + const VerticalSpacing(6, 0), + const VerticalSpacing(0, 0), + null, + ), + h6: DefaultTextBlockStyle( + defaultTextStyle.style.copyWith( + fontSize: 16, + color: defaultTextStyle.style.color, + letterSpacing: -0.1, + height: 1.125, + fontWeight: FontWeight.bold, + decoration: TextDecoration.none, + ), + const VerticalSpacing(4, 0), + const VerticalSpacing(0, 0), + null, + ), + paragraph: DefaultTextBlockStyle( + baseStyle, + const VerticalSpacing(0, 0), + const VerticalSpacing(0, 0), + null, + ), bold: const TextStyle(fontWeight: FontWeight.bold), subscript: const TextStyle( fontFeatures: [ + FontFeature.liningFigures(), FontFeature.subscripts(), ], ), superscript: const TextStyle( fontFeatures: [ + FontFeature.liningFigures(), FontFeature.superscripts(), ], ), @@ -274,9 +352,12 @@ class DefaultStyles { style: inlineCodeStyle, header1: inlineCodeStyle.copyWith( fontSize: 32, - fontWeight: FontWeight.w300, + fontWeight: FontWeight.w500, + ), + header2: inlineCodeStyle.copyWith( + fontSize: 22, + fontWeight: FontWeight.w500, ), - header2: inlineCodeStyle.copyWith(fontSize: 22), header3: inlineCodeStyle.copyWith( fontSize: 18, fontWeight: FontWeight.w500, @@ -353,6 +434,9 @@ class DefaultStyles { h1: other.h1 ?? h1, h2: other.h2 ?? h2, h3: other.h3 ?? h3, + h4: other.h4 ?? h4, + h5: other.h5 ?? h5, + h6: other.h6 ?? h6, paragraph: other.paragraph ?? paragraph, bold: other.bold ?? bold, subscript: other.subscript ?? subscript, diff --git a/lib/src/widgets/quill/quill_controller.dart b/lib/src/widgets/quill/quill_controller.dart index 11c8951b..31908d7d 100644 --- a/lib/src/widgets/quill/quill_controller.dart +++ b/lib/src/widgets/quill/quill_controller.dart @@ -1,11 +1,9 @@ import 'dart:math' as math; -import 'package:flutter/services.dart'; +import 'package:flutter/services.dart' show ClipboardData, Clipboard; import 'package:flutter/widgets.dart'; -import 'package:html2md/html2md.dart' as html2md; -import 'package:markdown/markdown.dart' as md; +import 'package:meta/meta.dart'; -import '../../../markdown_quill.dart'; import '../../../quill_delta.dart'; import '../../models/documents/attribute.dart'; import '../../models/documents/document.dart'; @@ -16,6 +14,7 @@ import '../../models/structs/doc_change.dart'; import '../../models/structs/image_url.dart'; import '../../models/structs/offset_value.dart'; import '../../utils/delta.dart'; +import '../toolbar/buttons/toggle_style_button.dart'; typedef ReplaceTextCallback = bool Function(int index, int len, Object? data); typedef DeleteCallback = void Function(int cursorPosition, bool forward); @@ -24,14 +23,13 @@ class QuillController extends ChangeNotifier { QuillController({ required Document document, required TextSelection selection, - bool keepStyleOnNewLine = false, + this.keepStyleOnNewLine = true, this.onReplaceText, this.onDelete, this.onSelectionCompleted, this.onSelectionChanged, }) : _document = document, - _selection = selection, - _keepStyleOnNewLine = keepStyleOnNewLine; + _selection = selection; factory QuillController.basic() { return QuillController( @@ -54,6 +52,7 @@ class QuillController extends ChangeNotifier { notifyListeners(); } + @experimental void setContents( Delta delta, { ChangeSource changeSource = ChangeSource.local, @@ -68,6 +67,9 @@ class QuillController extends ChangeNotifier { notifyListeners(); } + // Thoses are the values that the user selects and not the one + // from the current line + /// The current font family, null to use the default one String? _selectedFontFamily; @@ -88,9 +90,20 @@ class QuillController extends ChangeNotifier { _selectedFontSize = newFontSize; } + /// For the [QuillToolbarToggleStyleButton] + final Map _selectedStyles = {}; + + /// For the [QuillToolbarToggleStyleButton] + Map get selectedStyles => _selectedStyles; + + /// For the [QuillToolbarToggleStyleButton] + void selectStyle(Attribute attribute, bool value) { + _selectedStyles[attribute] = value; + } + /// Tells whether to keep or reset the [toggledStyle] /// when user adds a new line. - final bool _keepStyleOnNewLine; + final bool keepStyleOnNewLine; /// Currently selected text within the [document]. TextSelection get selection => _selection; @@ -269,6 +282,7 @@ class QuillController extends ChangeNotifier { Object? data, TextSelection? textSelection, { bool ignoreFocus = false, + bool shouldNotifyListeners = true, }) { assert(data is String || data is Embeddable); @@ -324,7 +338,9 @@ class QuillController extends ChangeNotifier { if (ignoreFocus) { ignoreFocusOnTextChange = true; } - notifyListeners(); + if (shouldNotifyListeners) { + notifyListeners(); + } ignoreFocusOnTextChange = false; } @@ -342,7 +358,12 @@ class QuillController extends ChangeNotifier { }); } - void formatText(int index, int len, Attribute? attribute) { + void formatText( + int index, + int len, + Attribute? attribute, { + bool shouldNotifyListeners = true, + }) { if (len == 0 && attribute!.isInline && attribute.key != Attribute.link.key) { @@ -361,11 +382,19 @@ class QuillController extends ChangeNotifier { if (selection != adjustedSelection) { _updateSelection(adjustedSelection, ChangeSource.local); } - notifyListeners(); + if (shouldNotifyListeners) { + notifyListeners(); + } } - void formatSelection(Attribute? attribute) { - formatText(selection.start, selection.end - selection.start, attribute); + void formatSelection(Attribute? attribute, + {bool shouldNotifyListeners = true}) { + formatText( + selection.start, + selection.end - selection.start, + attribute, + shouldNotifyListeners: shouldNotifyListeners, + ); } void moveCursorToStart() { @@ -447,7 +476,7 @@ class QuillController extends ChangeNotifier { _selection = selection.copyWith( baseOffset: math.min(selection.baseOffset, end), extentOffset: math.min(selection.extentOffset, end)); - if (_keepStyleOnNewLine) { + if (keepStyleOnNewLine) { final style = getSelectionStyle(); final ignoredStyles = style.attributes.values.where( (s) => !s.isInline || s.key == Attribute.link.key, @@ -476,38 +505,4 @@ class QuillController extends ChangeNotifier { // Notify toolbar buttons directly with attributes Map toolbarButtonToggler = const {}; - - /// Convert the HTML Raw string to [Delta] - /// - /// It will run using the following steps: - /// - /// 1. Convert the html to markdown string using `html2md` package - /// 2. Convert the markdown string to quill delta json string - /// 3. Decode the delta json string to [Delta] - /// - /// for more [info](https://github.com/singerdmx/flutter-quill/issues/1100) - static Delta fromHtml(String html) { - final markdown = html2md - .convert( - html, - ) - .replaceAll('unsafe:', ''); - - final mdDocument = md.Document(encodeHtml: false); - - final mdToDelta = MarkdownToDelta(markdownDocument: mdDocument); - - return mdToDelta.convert(markdown); - - // final deltaJsonString = markdownToDelta(markdown); - // final deltaJson = jsonDecode(deltaJsonString); - // if (deltaJson is! List) { - // throw ArgumentError( - // 'The delta json string should be of type list when jsonDecode() it', - // ); - // } - // return Delta.fromJson( - // deltaJson, - // ); - } } diff --git a/lib/src/widgets/quill/text_block.dart b/lib/src/widgets/quill/text_block.dart index 6510357d..8fb89191 100644 --- a/lib/src/widgets/quill/text_block.dart +++ b/lib/src/widgets/quill/text_block.dart @@ -7,6 +7,7 @@ import '../../models/documents/nodes/block.dart'; import '../../models/documents/nodes/line.dart'; import '../../models/structs/vertical_spacing.dart'; import '../../utils/delta.dart'; +import '../../utils/font.dart'; import '../editor/editor.dart'; import '../others/box.dart'; import '../others/cursor.dart'; @@ -17,6 +18,7 @@ import '../others/text_selection.dart'; import '../style_widgets/bullet_point.dart'; import '../style_widgets/checkbox_point.dart'; import '../style_widgets/number_point.dart'; +import '../toolbar/base_toolbar.dart'; import 'quill_controller.dart'; import 'text_line.dart'; @@ -211,12 +213,45 @@ class EditableTextBlock extends StatelessWidget { final fontSize = defaultStyles.paragraph?.style.fontSize ?? 16; final attrs = line.style.attributes; + // Of the color button + final fontColor = + line.toDelta().operations.first.attributes?[Attribute.color.key] != null + ? hexToColor( + line + .toDelta() + .operations + .first + .attributes?[Attribute.color.key], + ) + : null; + + // Of the size button + final size = + line.toDelta().operations.first.attributes?[Attribute.size.key] != null + ? getFontSizeAsDouble( + line.toDelta().operations.first.attributes?[Attribute.size.key], + defaultStyles: defaultStyles, + ) + : null; + + // Of the alignment buttons + // final textAlign = line.style.attributes[Attribute.align.key]?.value != null + // ? getTextAlign(line.style.attributes[Attribute.align.key]?.value) + // : null; + if (attrs[Attribute.list.key] == Attribute.ol) { return QuillEditorNumberPoint( index: index, indentLevelCounts: indentLevelCounts, count: count, - style: defaultStyles.leading!.style, + style: defaultStyles.leading!.style.copyWith( + fontSize: size, + color: context.quillEditorElementOptions?.orderedList + .useTextColorForDot == + true + ? fontColor + : null, + ), attrs: attrs, width: _numberPointWidth(fontSize, count), padding: fontSize / 2, @@ -225,8 +260,15 @@ class EditableTextBlock extends StatelessWidget { if (attrs[Attribute.list.key] == Attribute.ul) { return QuillEditorBulletPoint( - style: - defaultStyles.leading!.style.copyWith(fontWeight: FontWeight.bold), + style: defaultStyles.leading!.style.copyWith( + fontWeight: FontWeight.bold, + fontSize: size, + color: context.quillEditorElementOptions?.unorderedList + .useTextColorForDot == + true + ? fontColor + : null, + ), width: fontSize * 2, padding: fontSize / 2, ); @@ -312,6 +354,18 @@ class EditableTextBlock extends StatelessWidget { top = defaultStyles!.h3!.verticalSpacing.top; bottom = defaultStyles.h3!.verticalSpacing.bottom; break; + case 4: + top = defaultStyles!.h4!.verticalSpacing.top; + bottom = defaultStyles.h4!.verticalSpacing.bottom; + break; + case 5: + top = defaultStyles!.h5!.verticalSpacing.top; + bottom = defaultStyles.h5!.verticalSpacing.bottom; + break; + case 6: + top = defaultStyles!.h6!.verticalSpacing.top; + bottom = defaultStyles.h6!.verticalSpacing.bottom; + break; default: throw ArgumentError('Invalid level $level'); } diff --git a/lib/src/widgets/quill/text_line.dart b/lib/src/widgets/quill/text_line.dart index cdf493ff..0889d8aa 100644 --- a/lib/src/widgets/quill/text_line.dart +++ b/lib/src/widgets/quill/text_line.dart @@ -276,6 +276,9 @@ class _TextLineState extends State { Attribute.h1: defaultStyles.h1!.style, Attribute.h2: defaultStyles.h2!.style, Attribute.h3: defaultStyles.h3!.style, + Attribute.h4: defaultStyles.h4!.style, + Attribute.h5: defaultStyles.h5!.style, + Attribute.h6: defaultStyles.h6!.style, }; textStyle = textStyle.merge(m[header] ?? defaultStyles.paragraph!.style); @@ -401,7 +404,11 @@ class _TextLineState extends State { res = res.merge(defaultStyles.sizeHuge); break; default: - res = res.merge(TextStyle(fontSize: getFontSize(size.value))); + res = res.merge(TextStyle( + fontSize: getFontSize( + size.value, + ), + )); } } diff --git a/lib/src/widgets/raw_editor/raw_editor_state.dart b/lib/src/widgets/raw_editor/raw_editor_state.dart index b8adf76e..4162e533 100644 --- a/lib/src/widgets/raw_editor/raw_editor_state.dart +++ b/lib/src/widgets/raw_editor/raw_editor_state.dart @@ -213,7 +213,7 @@ class QuillRawEditorState extends EditorState if (html == null) { return; } - final deltaFromCliboard = QuillController.fromHtml(html); + final deltaFromCliboard = Document.fromHtml(html); final delta = deltaFromCliboard.compose(controller.document.toDelta()); controller @@ -701,6 +701,21 @@ class QuillRawEditorState extends EditorState control: !isDesktopMacOS, meta: isDesktopMacOS, ): const QuillEditorApplyHeaderIntent(Attribute.h3), + SingleActivator( + LogicalKeyboardKey.digit4, + control: !isDesktopMacOS, + meta: isDesktopMacOS, + ): const QuillEditorApplyHeaderIntent(Attribute.h4), + SingleActivator( + LogicalKeyboardKey.digit5, + control: !isDesktopMacOS, + meta: isDesktopMacOS, + ): const QuillEditorApplyHeaderIntent(Attribute.h5), + SingleActivator( + LogicalKeyboardKey.digit6, + control: !isDesktopMacOS, + meta: isDesktopMacOS, + ): const QuillEditorApplyHeaderIntent(Attribute.h6), SingleActivator( LogicalKeyboardKey.digit0, control: !isDesktopMacOS, @@ -1061,6 +1076,12 @@ class QuillRawEditorState extends EditorState return defaultStyles!.h2!.verticalSpacing; case 3: return defaultStyles!.h3!.verticalSpacing; + case 4: + return defaultStyles!.h4!.verticalSpacing; + case 5: + return defaultStyles!.h5!.verticalSpacing; + case 6: + return defaultStyles!.h6!.verticalSpacing; default: throw ArgumentError('Invalid level $level'); } diff --git a/lib/src/widgets/raw_editor/raw_editor_state_text_input_client_mixin.dart b/lib/src/widgets/raw_editor/raw_editor_state_text_input_client_mixin.dart index aeb2135e..cb46bab7 100644 --- a/lib/src/widgets/raw_editor/raw_editor_state_text_input_client_mixin.dart +++ b/lib/src/widgets/raw_editor/raw_editor_state_text_input_client_mixin.dart @@ -208,12 +208,8 @@ mixin RawEditorStateTextInputClientMixin on EditorState value.selection, ); - // TODO: There is a bug here, the first character is not being formatted - if (widget.configurations.controller.selectedFontFamily != null) { - widget.configurations.controller.formatText( - diff.start, - diff.deleted.length, + widget.configurations.controller.formatSelection( Attribute.fromKeyValue( Attribute.font.key, widget.configurations.controller.selectedFontFamily, @@ -221,21 +217,25 @@ mixin RawEditorStateTextInputClientMixin on EditorState ); } - // TODO: A bug here too - if (widget.configurations.controller.selectedFontSize != null) { - widget.configurations.controller.formatText( - diff.start, - diff.deleted.length, + widget.configurations.controller.formatSelection( Attribute.fromKeyValue( Attribute.size.key, widget.configurations.controller.selectedFontSize == '0' ? null : getFontSize( - widget.configurations.controller.selectedFontSize), + widget.configurations.controller.selectedFontSize, + ), ), ); } + // if (widget.configurations.controller.keepStyleOnNewLine) { + // widget.configurations.controller.selectedStyles.forEach((key, value) { + // if (value ?? false) { + // widget.configurations.controller.formatSelection(key); + // } + // }); + // } } } diff --git a/lib/src/widgets/style_widgets/bullet_point.dart b/lib/src/widgets/style_widgets/bullet_point.dart index 629c68e6..c7eef3f7 100644 --- a/lib/src/widgets/style_widgets/bullet_point.dart +++ b/lib/src/widgets/style_widgets/bullet_point.dart @@ -1,18 +1,20 @@ -import 'package:flutter/material.dart'; - -import '../../extensions/quill_configurations_ext.dart'; +import 'package:flutter/widgets.dart'; class QuillEditorBulletPoint extends StatelessWidget { const QuillEditorBulletPoint({ required this.style, required this.width, this.padding = 0, + this.backgroundColor, + this.textAlign, super.key, }); final TextStyle style; final double width; final double padding; + final Color? backgroundColor; + final TextAlign? textAlign; @override Widget build(BuildContext context) { @@ -20,12 +22,11 @@ class QuillEditorBulletPoint extends StatelessWidget { alignment: AlignmentDirectional.topEnd, width: width, padding: EdgeInsetsDirectional.only(end: padding), - color: context.quillEditorElementOptions?.unorderedList.backgroundColor, + color: backgroundColor, child: Text( '•', - style: style.copyWith( - color: context.quillEditorElementOptions?.unorderedList.fontColor, - ), + style: style, + textAlign: textAlign, ), ); } diff --git a/lib/src/widgets/style_widgets/number_point.dart b/lib/src/widgets/style_widgets/number_point.dart index ed5d96c8..ca3164f3 100644 --- a/lib/src/widgets/style_widgets/number_point.dart +++ b/lib/src/widgets/style_widgets/number_point.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; -import '../../extensions/quill_configurations_ext.dart'; import '../../models/documents/attribute.dart'; import '../quill/text_block.dart'; @@ -12,9 +11,11 @@ class QuillEditorNumberPoint extends StatelessWidget { required this.style, required this.width, required this.attrs, + this.textAlign, this.withDot = true, this.padding = 0.0, super.key, + this.backgroundColor, }); final int index; @@ -25,6 +26,8 @@ class QuillEditorNumberPoint extends StatelessWidget { final Map attrs; final bool withDot; final double padding; + final Color? backgroundColor; + final TextAlign? textAlign; @override Widget build(BuildContext context) { @@ -37,12 +40,11 @@ class QuillEditorNumberPoint extends StatelessWidget { alignment: AlignmentDirectional.topEnd, width: width, padding: EdgeInsetsDirectional.only(end: padding), - color: context.quillEditorElementOptions?.orderedList.backgroundColor, + color: backgroundColor, child: Text( withDot ? '$s.' : s, - style: style.copyWith( - color: context.quillEditorElementOptions?.orderedList.fontColor, - ), + style: style, + textAlign: textAlign, ), ); } @@ -74,12 +76,11 @@ class QuillEditorNumberPoint extends StatelessWidget { alignment: AlignmentDirectional.topEnd, width: width, padding: EdgeInsetsDirectional.only(end: padding), - color: context.quillEditorElementOptions?.orderedList.backgroundColor, + color: backgroundColor, child: Text( withDot ? '$s.' : s, - style: style.copyWith( - color: context.quillEditorElementOptions?.orderedList.fontColor, - ), + style: style, + textAlign: textAlign, ), ); } diff --git a/lib/src/widgets/toolbar/base_toolbar.dart b/lib/src/widgets/toolbar/base_toolbar.dart index bd051cc9..ab1b483e 100644 --- a/lib/src/widgets/toolbar/base_toolbar.dart +++ b/lib/src/widgets/toolbar/base_toolbar.dart @@ -7,7 +7,7 @@ import '../../models/config/toolbar/simple_toolbar_configurations.dart'; import '../../models/config/toolbar/toolbar_configurations.dart'; import 'simple_toolbar.dart'; -export '../../models/config/toolbar/buttons/base_configurations.dart'; +export '../../models/config/toolbar/base_button_configurations.dart'; export '../../models/config/toolbar/simple_toolbar_configurations.dart'; export 'buttons/clear_format_button.dart'; export 'buttons/color/color_button.dart'; @@ -15,6 +15,7 @@ export 'buttons/custom_button_button.dart'; export 'buttons/font_family_button.dart'; export 'buttons/font_size_button.dart'; export 'buttons/hearder_style/select_header_style_buttons.dart'; +export 'buttons/hearder_style/select_header_style_dropdown_button.dart'; export 'buttons/history_button.dart'; export 'buttons/indent_button.dart'; export 'buttons/link_style2_button.dart'; diff --git a/lib/src/widgets/toolbar/buttons/clear_format_button.dart b/lib/src/widgets/toolbar/buttons/clear_format_button.dart index 75147411..88e9a459 100644 --- a/lib/src/widgets/toolbar/buttons/clear_format_button.dart +++ b/lib/src/widgets/toolbar/buttons/clear_format_button.dart @@ -87,7 +87,6 @@ class QuillToolbarClearFormatButton extends StatelessWidget { return childBuilder( QuillToolbarClearFormatButtonOptions( afterButtonPressed: afterButtonPressed, - controller: controller, iconData: iconData, iconSize: iconSize, iconButtonFactor: iconButtonFactor, diff --git a/lib/src/widgets/toolbar/buttons/color/color_button.dart b/lib/src/widgets/toolbar/buttons/color/color_button.dart index 2140afc4..b4d03e3f 100644 --- a/lib/src/widgets/toolbar/buttons/color/color_button.dart +++ b/lib/src/widgets/toolbar/buttons/color/color_button.dart @@ -32,6 +32,7 @@ class QuillToolbarColorButton extends StatefulWidget { QuillToolbarColorButtonState createState() => QuillToolbarColorButtonState(); } +// TODO: This button shouldn't require anything to use it class QuillToolbarColorButtonState extends State { late bool _isToggledColor; late bool _isToggledBackground; diff --git a/lib/src/widgets/toolbar/buttons/custom_button_button.dart b/lib/src/widgets/toolbar/buttons/custom_button_button.dart index 825b3d2f..f77b4a1e 100644 --- a/lib/src/widgets/toolbar/buttons/custom_button_button.dart +++ b/lib/src/widgets/toolbar/buttons/custom_button_button.dart @@ -67,7 +67,6 @@ class QuillToolbarCustomButton extends StatelessWidget { iconButtonFactor: iconButtonFactor, iconSize: iconSize, afterButtonPressed: afterButtonPressed, - controller: controller, iconTheme: iconTheme, tooltip: tooltip, icon: options.icon, diff --git a/lib/src/widgets/toolbar/buttons/font_size_button.dart b/lib/src/widgets/toolbar/buttons/font_size_button.dart index 54a14b6b..aa2c94ad 100644 --- a/lib/src/widgets/toolbar/buttons/font_size_button.dart +++ b/lib/src/widgets/toolbar/buttons/font_size_button.dart @@ -127,7 +127,6 @@ class QuillToolbarFontSizeButtonState iconSize: iconSize, iconButtonFactor: iconButtonFactor, afterButtonPressed: afterButtonPressed, - controller: controller, ), QuillToolbarFontSizeButtonExtraOptions( controller: controller, diff --git a/lib/src/widgets/toolbar/buttons/hearder_style/select_header_style_button.dart b/lib/src/widgets/toolbar/buttons/hearder_style/select_header_style_button.dart deleted file mode 100644 index 27a51319..00000000 --- a/lib/src/widgets/toolbar/buttons/hearder_style/select_header_style_button.dart +++ /dev/null @@ -1,145 +0,0 @@ -import 'package:flutter/material.dart'; - -import '../../../../../translations.dart'; -import '../../../../models/config/toolbar/buttons/select_header_style_configurations.dart'; -import '../../../../models/documents/attribute.dart'; -import '../../../quill/quill_controller.dart'; - -enum _HeaderStyleOptions { - normal, - headingOne, - headingTwo, - headingThree, -} - -class QuillToolbarSelectHeaderStyleButton extends StatefulWidget { - const QuillToolbarSelectHeaderStyleButton({ - required this.controller, - this.options = const QuillToolbarSelectHeaderStyleButtonsOptions(), - super.key, - }); - - final QuillController controller; - // TODO: Needs to be reviewed - final QuillToolbarSelectHeaderStyleButtonsOptions options; - - @override - State createState() => - _QuillToolbarSelectHeaderStyleButtonState(); -} - -class _QuillToolbarSelectHeaderStyleButtonState - extends State { - var _selectedItem = _HeaderStyleOptions.normal; - final _controller = MenuController(); - @override - void initState() { - super.initState(); - widget.controller.addListener(_didChangeEditingValue); - } - - @override - void dispose() { - widget.controller.removeListener(_didChangeEditingValue); - super.dispose(); - } - - @override - void didUpdateWidget( - covariant QuillToolbarSelectHeaderStyleButton oldWidget) { - super.didUpdateWidget(oldWidget); - if (oldWidget.controller == widget.controller) { - return; - } - widget.controller - ..removeListener(_didChangeEditingValue) - ..addListener(_didChangeEditingValue); - } - - void _didChangeEditingValue() { - final newSelectedItem = _getOptionsItemByAttribute(_getHeaderValue()); - if (newSelectedItem == _selectedItem) { - return; - } - setState(() { - _selectedItem = newSelectedItem; - }); - } - - Attribute _getHeaderValue() { - final attr = widget.controller.toolbarButtonToggler[Attribute.header.key]; - if (attr != null) { - // checkbox tapping causes controller.selection to go to offset 0 - widget.controller.toolbarButtonToggler.remove(Attribute.header.key); - return attr; - } - return widget.controller - .getSelectionStyle() - .attributes[Attribute.header.key] ?? - Attribute.header; - } - - String _label(_HeaderStyleOptions value) { - final label = switch (value) { - _HeaderStyleOptions.normal => context.loc.normal, - _HeaderStyleOptions.headingOne => context.loc.heading1, - _HeaderStyleOptions.headingTwo => context.loc.heading2, - _HeaderStyleOptions.headingThree => context.loc.heading3, - }; - return label; - } - - Attribute? getAttributeByOptionsItem(_HeaderStyleOptions option) { - return switch (option) { - _HeaderStyleOptions.normal => Attribute.header, - _HeaderStyleOptions.headingOne => Attribute.h1, - _HeaderStyleOptions.headingTwo => Attribute.h2, - _HeaderStyleOptions.headingThree => Attribute.h3, - }; - } - - _HeaderStyleOptions _getOptionsItemByAttribute( - Attribute? attribute) { - return switch (attribute) { - Attribute.h1 => _HeaderStyleOptions.headingOne, - Attribute.h2 => _HeaderStyleOptions.headingTwo, - Attribute.h2 => _HeaderStyleOptions.headingThree, - Attribute() => _HeaderStyleOptions.normal, - null => _HeaderStyleOptions.normal, - }; - } - - @override - Widget build(BuildContext context) { - return MenuAnchor( - controller: _controller, - menuChildren: _HeaderStyleOptions.values - .map( - (e) => MenuItemButton( - child: Text(_label(e)), - onPressed: () { - widget.controller.formatSelection(getAttributeByOptionsItem(e)); - setState(() => _selectedItem = e); - }, - ), - ) - .toList(), - child: IconButton( - onPressed: () { - if (_controller.isOpen) { - _controller.close(); - return; - } - _controller.open(); - }, - icon: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Text(_label(_selectedItem)), - const Icon(Icons.arrow_drop_down), - ], - ), - ), - ); - } -} diff --git a/lib/src/widgets/toolbar/buttons/hearder_style/select_header_style_buttons.dart b/lib/src/widgets/toolbar/buttons/hearder_style/select_header_style_buttons.dart index 9f762aa0..f551f7a0 100644 --- a/lib/src/widgets/toolbar/buttons/hearder_style/select_header_style_buttons.dart +++ b/lib/src/widgets/toolbar/buttons/hearder_style/select_header_style_buttons.dart @@ -140,7 +140,7 @@ class QuillToolbarSelectHeaderStyleButtonsState iconTheme: iconTheme, tooltip: tooltip, ), - QuillToolbarSelectHeaderStyleButtonExtraOptions( + QuillToolbarSelectHeaderStyleButtonsExtraOptions( controller: controller, context: context, onPressed: () => _sharedOnPressed(attribute), diff --git a/lib/src/widgets/toolbar/buttons/hearder_style/select_header_style_dropdown_button.dart b/lib/src/widgets/toolbar/buttons/hearder_style/select_header_style_dropdown_button.dart new file mode 100644 index 00000000..698c42a9 --- /dev/null +++ b/lib/src/widgets/toolbar/buttons/hearder_style/select_header_style_dropdown_button.dart @@ -0,0 +1,199 @@ +import 'package:flutter/material.dart'; + +import '../../../../../translations.dart'; +import '../../../../extensions/quill_configurations_ext.dart'; +import '../../../../models/documents/attribute.dart'; +import '../../../../models/themes/quill_icon_theme.dart'; +import '../../../quill/quill_controller.dart'; +import '../../base_toolbar.dart'; + +class QuillToolbarSelectHeaderStyleDropdownButton extends StatefulWidget { + const QuillToolbarSelectHeaderStyleDropdownButton({ + required this.controller, + this.options = const QuillToolbarSelectHeaderStyleDropdownButtonOptions(), + super.key, + }); + + final QuillController controller; + final QuillToolbarSelectHeaderStyleDropdownButtonOptions options; + + @override + State createState() => + _QuillToolbarSelectHeaderStyleDropdownButtonState(); +} + +class _QuillToolbarSelectHeaderStyleDropdownButtonState + extends State { + Attribute _selectedItem = Attribute.header; + + final _controller = MenuController(); + @override + void initState() { + super.initState(); + widget.controller.addListener(_didChangeEditingValue); + } + + @override + void dispose() { + widget.controller.removeListener(_didChangeEditingValue); + super.dispose(); + } + + @override + void didUpdateWidget( + covariant QuillToolbarSelectHeaderStyleDropdownButton oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.controller == widget.controller) { + return; + } + widget.controller + ..removeListener(_didChangeEditingValue) + ..addListener(_didChangeEditingValue); + } + + void _didChangeEditingValue() { + final newSelectedItem = _getHeaderValue(); + if (newSelectedItem == _selectedItem) { + return; + } + setState(() { + _selectedItem = newSelectedItem; + }); + } + + Attribute _getHeaderValue() { + final attr = widget.controller.toolbarButtonToggler[Attribute.header.key]; + if (attr != null) { + // checkbox tapping causes controller.selection to go to offset 0 + widget.controller.toolbarButtonToggler.remove(Attribute.header.key); + return attr; + } + return widget.controller + .getSelectionStyle() + .attributes[Attribute.header.key] ?? + Attribute.header; + } + + String _label(Attribute value) { + final label = switch (value) { + Attribute.h1 => context.loc.heading1, + Attribute.h2 => context.loc.heading2, + Attribute.h3 => context.loc.heading3, + Attribute.h4 => context.loc.heading4, + Attribute.h5 => context.loc.heading5, + Attribute.h6 => context.loc.heading6, + Attribute.header => context.loc.normal, + Attribute() => throw ArgumentError(), + }; + return label; + } + + double get iconSize { + final baseFontSize = context.quillToolbarBaseButtonOptions?.globalIconSize; + final iconSize = widget.options.iconSize; + return iconSize ?? baseFontSize ?? kDefaultIconSize; + } + + double get iconButtonFactor { + final baseIconFactor = + context.quillToolbarBaseButtonOptions?.globalIconButtonFactor; + final iconButtonFactor = widget.options.iconButtonFactor; + return iconButtonFactor ?? baseIconFactor ?? kIconButtonFactor; + } + + QuillIconTheme? get iconTheme { + return widget.options.iconTheme ?? + context.quillToolbarBaseButtonOptions?.iconTheme; + } + + List> get headerAttributes { + return widget.options.attributes ?? + [ + Attribute.h1, + Attribute.h2, + Attribute.h3, + Attribute.h4, + Attribute.h5, + Attribute.h6, + Attribute.header, + ]; + } + + QuillToolbarBaseButtonOptions get baseButtonExtraOptions { + return context.requireQuillToolbarBaseButtonOptions; + } + + VoidCallback? get afterButtonPressed { + return widget.options.afterButtonPressed ?? + baseButtonExtraOptions.afterButtonPressed; + } + + void _onPressed(Attribute e) { + setState(() => _selectedItem = e); + widget.controller.formatSelection(_selectedItem); + } + + @override + Widget build(BuildContext context) { + final baseButtonConfigurations = + context.requireQuillToolbarBaseButtonOptions; + final childBuilder = + widget.options.childBuilder ?? baseButtonConfigurations.childBuilder; + if (childBuilder != null) { + return childBuilder( + widget.options.copyWith( + iconSize: iconSize, + iconTheme: iconTheme, + afterButtonPressed: afterButtonPressed, + ), + QuillToolbarSelectHeaderStyleDropdownButtonExtraOptions( + currentValue: _selectedItem, + context: context, + controller: widget.controller, + onPressed: () { + throw UnimplementedError('Not implemented yet.'); + }, + ), + ); + } + + return MenuAnchor( + controller: _controller, + menuChildren: headerAttributes + .map( + (e) => MenuItemButton( + onPressed: () { + _onPressed(e); + }, + child: Text(_label(e)), + ), + ) + .toList(), + child: IconButton( + onPressed: () { + if (_controller.isOpen) { + _controller.close(); + return; + } + _controller.open(); + }, + icon: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + _label(_selectedItem), + style: widget.options.textStyle ?? + TextStyle( + fontSize: iconSize / 1.15, + ), + ), + Icon( + Icons.arrow_drop_down, + size: iconSize * iconButtonFactor, + ), + ], + ), + ), + ); + } +} diff --git a/lib/src/widgets/toolbar/buttons/history_button.dart b/lib/src/widgets/toolbar/buttons/history_button.dart index 5436e74c..1c778f11 100644 --- a/lib/src/widgets/toolbar/buttons/history_button.dart +++ b/lib/src/widgets/toolbar/buttons/history_button.dart @@ -77,7 +77,6 @@ class QuillToolbarHistoryButtonState extends State { return childBuilder( QuillToolbarHistoryButtonOptions( afterButtonPressed: afterButtonPressed, - controller: controller, iconData: iconData, iconSize: iconSize, iconButtonFactor: iconButtonFactor, diff --git a/lib/src/widgets/toolbar/buttons/link_style_button.dart b/lib/src/widgets/toolbar/buttons/link_style_button.dart index 33ae60e9..2fa6047a 100644 --- a/lib/src/widgets/toolbar/buttons/link_style_button.dart +++ b/lib/src/widgets/toolbar/buttons/link_style_button.dart @@ -117,7 +117,6 @@ class QuillToolbarLinkStyleButtonState return childBuilder( QuillToolbarLinkStyleButtonOptions( afterButtonPressed: afterButtonPressed, - controller: controller, dialogBarrierColor: dialogBarrierColor, dialogTheme: options.dialogTheme, iconData: iconData, diff --git a/lib/src/widgets/toolbar/buttons/quill_icon_button.dart b/lib/src/widgets/toolbar/buttons/quill_icon_button.dart index 6b4d53d2..22c2fa99 100644 --- a/lib/src/widgets/toolbar/buttons/quill_icon_button.dart +++ b/lib/src/widgets/toolbar/buttons/quill_icon_button.dart @@ -24,12 +24,12 @@ class QuillToolbarIconButton extends StatelessWidget { if (isFilled) { return IconButton.filled( padding: padding, - constraints: const BoxConstraints(), - onPressed: onPressed, icon: icon); + onPressed: onPressed, + icon: icon, + ); } return IconButton( padding: padding, - constraints: const BoxConstraints(), onPressed: () { onPressed?.call(); afterPressed?.call(); diff --git a/lib/src/widgets/toolbar/buttons/search/search_button.dart b/lib/src/widgets/toolbar/buttons/search/search_button.dart index 78936d35..572d4885 100644 --- a/lib/src/widgets/toolbar/buttons/search/search_button.dart +++ b/lib/src/widgets/toolbar/buttons/search/search_button.dart @@ -87,7 +87,6 @@ class QuillToolbarSearchButton extends StatelessWidget { return childBuilder( QuillToolbarSearchButtonOptions( afterButtonPressed: afterButtonPressed, - controller: controller, dialogBarrierColor: _dialogBarrierColor(context), dialogTheme: _dialogTheme(context), fillColor: options.fillColor, diff --git a/lib/src/widgets/toolbar/buttons/toggle_check_list_button.dart b/lib/src/widgets/toolbar/buttons/toggle_check_list_button.dart index 7c2ba94f..32527165 100644 --- a/lib/src/widgets/toolbar/buttons/toggle_check_list_button.dart +++ b/lib/src/widgets/toolbar/buttons/toggle_check_list_button.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import '../../../extensions/quill_configurations_ext.dart'; import '../../../l10n/extensions/localizations.dart'; -import '../../../models/config/toolbar/buttons/base_configurations.dart'; +import '../../../models/config/toolbar/base_button_configurations.dart'; import '../../../models/config/toolbar/buttons/toggle_check_list_configurations.dart'; import '../../../models/documents/attribute.dart'; import '../../../models/documents/style.dart'; @@ -133,7 +133,6 @@ class QuillToolbarToggleCheckListButtonState QuillToolbarToggleCheckListButtonOptions( afterButtonPressed: afterButtonPressed, iconTheme: iconTheme, - controller: controller, iconSize: iconSize, iconButtonFactor: iconButtonFactor, tooltip: tooltip, diff --git a/lib/src/widgets/toolbar/buttons/toggle_style_button.dart b/lib/src/widgets/toolbar/buttons/toggle_style_button.dart index a721f4b0..6f7f4305 100644 --- a/lib/src/widgets/toolbar/buttons/toggle_style_button.dart +++ b/lib/src/widgets/toolbar/buttons/toggle_style_button.dart @@ -155,7 +155,6 @@ class QuillToolbarToggleStyleButtonState return childBuilder( QuillToolbarToggleStyleButtonOptions( afterButtonPressed: options.afterButtonPressed, - controller: controller, fillColor: options.fillColor, iconButtonFactor: options.iconButtonFactor, iconData: iconData, @@ -222,9 +221,13 @@ class QuillToolbarToggleStyleButtonState } void _toggleAttribute() { - controller.formatSelection( - _isToggled! ? Attribute.clone(widget.attribute, null) : widget.attribute, - ); + controller + ..formatSelection( + (_isToggled ?? false) + ? Attribute.clone(widget.attribute, null) + : widget.attribute, + ) + ..selectStyle(widget.attribute, _isToggled ?? false); } } @@ -254,6 +257,6 @@ Widget defaultToggleStyleButtonBuilder( isFilled: isEnabled ? isToggled == true : false, onPressed: onPressed, afterPressed: afterPressed, - padding: iconTheme?.padding + padding: iconTheme?.padding, ); } diff --git a/lib/src/widgets/toolbar/simple_toolbar.dart b/lib/src/widgets/toolbar/simple_toolbar.dart index c72461e8..7ae05372 100644 --- a/lib/src/widgets/toolbar/simple_toolbar.dart +++ b/lib/src/widgets/toolbar/simple_toolbar.dart @@ -8,7 +8,6 @@ import '../utils/provider.dart'; import 'base_toolbar.dart'; import 'buttons/alignment/select_alignment_buttons.dart'; import 'buttons/arrow_indicated_list_button.dart'; -import 'buttons/hearder_style/select_header_style_button.dart'; class QuillSimpleToolbar extends StatelessWidget implements PreferredSizeWidget { @@ -61,154 +60,96 @@ class QuillSimpleToolbar extends StatelessWidget final axis = toolbarConfigurations.axis; final globalController = configurations.controller; - final spacerWidget = - configurations.spacerWidget ?? const SizedBox.shrink(); - return [ - if (configurations.showUndo) ...[ + if (configurations.showUndo) QuillToolbarHistoryButton( isUndo: true, options: toolbarConfigurations.buttonOptions.undoHistory, - controller: - toolbarConfigurations.buttonOptions.undoHistory.controller ?? - globalController, + controller: globalController, ), - spacerWidget, - ], - if (configurations.showRedo) ...[ + if (configurations.showRedo) QuillToolbarHistoryButton( isUndo: false, options: toolbarConfigurations.buttonOptions.redoHistory, - controller: - toolbarConfigurations.buttonOptions.redoHistory.controller ?? - globalController, + controller: globalController, ), - spacerWidget, - ], - if (configurations.showFontFamily) ...[ + if (configurations.showFontFamily) QuillToolbarFontFamilyButton( options: toolbarConfigurations.buttonOptions.fontFamily, - controller: - toolbarConfigurations.buttonOptions.fontFamily.controller ?? - globalController, + controller: globalController, defaultDispalyText: context.loc.font, ), - spacerWidget, - ], - if (configurations.showFontSize) ...[ + if (configurations.showFontSize) QuillToolbarFontSizeButton( options: toolbarConfigurations.buttonOptions.fontSize, - controller: - toolbarConfigurations.buttonOptions.fontFamily.controller ?? - globalController, + controller: globalController, defaultDisplayText: context.loc.fontSize, ), - spacerWidget, - ], - if (configurations.showBoldButton) ...[ + if (configurations.showBoldButton) QuillToolbarToggleStyleButton( attribute: Attribute.bold, options: toolbarConfigurations.buttonOptions.bold, - controller: toolbarConfigurations.buttonOptions.bold.controller ?? - globalController, + controller: globalController, ), - spacerWidget, - ], - if (configurations.showItalicButton) ...[ + if (configurations.showItalicButton) QuillToolbarToggleStyleButton( attribute: Attribute.italic, options: toolbarConfigurations.buttonOptions.italic, - controller: toolbarConfigurations.buttonOptions.italic.controller ?? - globalController, + controller: globalController, ), - spacerWidget, - ], - if (configurations.showUnderLineButton) ...[ + if (configurations.showUnderLineButton) QuillToolbarToggleStyleButton( attribute: Attribute.underline, options: toolbarConfigurations.buttonOptions.underLine, - controller: - toolbarConfigurations.buttonOptions.underLine.controller ?? - globalController, + controller: globalController, ), - spacerWidget, - ], - if (configurations.showStrikeThrough) ...[ + if (configurations.showStrikeThrough) QuillToolbarToggleStyleButton( attribute: Attribute.strikeThrough, options: toolbarConfigurations.buttonOptions.strikeThrough, - controller: - toolbarConfigurations.buttonOptions.strikeThrough.controller ?? - globalController, + controller: globalController, ), - spacerWidget, - ], - if (configurations.showInlineCode) ...[ + if (configurations.showInlineCode) QuillToolbarToggleStyleButton( attribute: Attribute.inlineCode, options: toolbarConfigurations.buttonOptions.inlineCode, - controller: - toolbarConfigurations.buttonOptions.inlineCode.controller ?? - globalController, + controller: globalController, ), - spacerWidget, - ], - if (configurations.showSubscript) ...[ + if (configurations.showSubscript) QuillToolbarToggleStyleButton( attribute: Attribute.subscript, options: toolbarConfigurations.buttonOptions.subscript, - controller: - toolbarConfigurations.buttonOptions.subscript.controller ?? - globalController, + controller: globalController, ), - spacerWidget, - ], - if (configurations.showSuperscript) ...[ + if (configurations.showSuperscript) QuillToolbarToggleStyleButton( attribute: Attribute.superscript, options: toolbarConfigurations.buttonOptions.superscript, - controller: - toolbarConfigurations.buttonOptions.superscript.controller ?? - globalController, + controller: globalController, ), - spacerWidget, - ], - if (configurations.showSmallButton) ...[ + if (configurations.showSmallButton) QuillToolbarToggleStyleButton( attribute: Attribute.small, options: toolbarConfigurations.buttonOptions.small, - controller: toolbarConfigurations.buttonOptions.small.controller ?? - globalController, + controller: globalController, ), - spacerWidget, - ], - if (configurations.showColorButton) ...[ + if (configurations.showColorButton) QuillToolbarColorButton( - controller: toolbarConfigurations.buttonOptions.color.controller ?? - globalController, + controller: globalController, isBackground: false, options: toolbarConfigurations.buttonOptions.color, ), - spacerWidget, - ], - if (configurations.showBackgroundColorButton) ...[ + if (configurations.showBackgroundColorButton) QuillToolbarColorButton( options: toolbarConfigurations.buttonOptions.backgroundColor, - controller: toolbarConfigurations.buttonOptions.color.controller ?? - globalController, + controller: globalController, isBackground: true, ), - spacerWidget, - ], - if (configurations.showClearFormat) ...[ + if (configurations.showClearFormat) QuillToolbarClearFormatButton( - controller: - toolbarConfigurations.buttonOptions.clearFormat.controller ?? - globalController, + controller: globalController, options: toolbarConfigurations.buttonOptions.clearFormat, ), - spacerWidget, - ], if (theEmbedButtons != null) for (final builder in theEmbedButtons) builder( @@ -228,29 +169,21 @@ class QuillSimpleToolbar extends StatelessWidget color: configurations.sectionDividerColor, space: configurations.sectionDividerSpace, ), - if (configurations.showAlignmentButtons) ...[ + if (configurations.showAlignmentButtons) QuillToolbarSelectAlignmentButtons( - controller: toolbarConfigurations - .buttonOptions.selectAlignmentButtons.controller ?? - globalController, + controller: globalController, options: toolbarConfigurations.buttonOptions.selectAlignmentButtons, showLeftAlignment: configurations.showLeftAlignment, showCenterAlignment: configurations.showCenterAlignment, showRightAlignment: configurations.showRightAlignment, showJustifyAlignment: configurations.showJustifyAlignment, ), - spacerWidget, - ], - if (configurations.showDirection) ...[ + if (configurations.showDirection) QuillToolbarToggleStyleButton( attribute: Attribute.rtl, options: toolbarConfigurations.buttonOptions.direction, - controller: - toolbarConfigurations.buttonOptions.direction.controller ?? - globalController, + controller: globalController, ), - spacerWidget, - ], if (configurations.showDividers && isButtonGroupShown[1] && (isButtonGroupShown[2] || @@ -262,16 +195,12 @@ class QuillSimpleToolbar extends StatelessWidget color: configurations.sectionDividerColor, space: configurations.sectionDividerSpace, ), - if (configurations.showHeaderStyle) ...[ - QuillToolbarSelectHeaderStyleButton( - controller: toolbarConfigurations - .buttonOptions.selectHeaderStyleButtons.controller ?? - globalController, - options: - toolbarConfigurations.buttonOptions.selectHeaderStyleButtons, + if (configurations.showHeaderStyle) + QuillToolbarSelectHeaderStyleDropdownButton( + controller: globalController, + options: toolbarConfigurations + .buttonOptions.selectHeaderStyleDropdownButton, ), - spacerWidget, - ], if (configurations.showDividers && configurations.showHeaderStyle && isButtonGroupShown[2] && @@ -283,45 +212,29 @@ class QuillSimpleToolbar extends StatelessWidget color: configurations.sectionDividerColor, space: configurations.sectionDividerSpace, ), - if (configurations.showListNumbers) ...[ + if (configurations.showListNumbers) QuillToolbarToggleStyleButton( attribute: Attribute.ol, options: toolbarConfigurations.buttonOptions.listNumbers, - controller: - toolbarConfigurations.buttonOptions.listNumbers.controller ?? - globalController, + controller: globalController, ), - spacerWidget, - ], - if (configurations.showListBullets) ...[ + if (configurations.showListBullets) QuillToolbarToggleStyleButton( attribute: Attribute.ul, options: toolbarConfigurations.buttonOptions.listBullets, - controller: - toolbarConfigurations.buttonOptions.listBullets.controller ?? - globalController, + controller: globalController, ), - spacerWidget, - ], - if (configurations.showListCheck) ...[ + if (configurations.showListCheck) QuillToolbarToggleCheckListButton( options: toolbarConfigurations.buttonOptions.toggleCheckList, - controller: toolbarConfigurations - .buttonOptions.toggleCheckList.controller ?? - globalController, + controller: globalController, ), - spacerWidget, - ], - if (configurations.showCodeBlock) ...[ + if (configurations.showCodeBlock) QuillToolbarToggleStyleButton( attribute: Attribute.codeBlock, options: toolbarConfigurations.buttonOptions.codeBlock, - controller: - toolbarConfigurations.buttonOptions.codeBlock.controller ?? - globalController, + controller: globalController, ), - spacerWidget, - ], if (configurations.showDividers && isButtonGroupShown[3] && (isButtonGroupShown[4] || isButtonGroupShown[5])) ...[ @@ -331,35 +244,24 @@ class QuillSimpleToolbar extends StatelessWidget space: configurations.sectionDividerSpace, ), ], - if (configurations.showQuote) ...[ + if (configurations.showQuote) QuillToolbarToggleStyleButton( options: toolbarConfigurations.buttonOptions.quote, - controller: toolbarConfigurations.buttonOptions.quote.controller ?? - globalController, + controller: globalController, attribute: Attribute.blockQuote, ), - spacerWidget, - ], - if (configurations.showIndent) ...[ + if (configurations.showIndent) QuillToolbarIndentButton( - controller: - toolbarConfigurations.buttonOptions.indentIncrease.controller ?? - globalController, + controller: globalController, isIncrease: true, options: toolbarConfigurations.buttonOptions.indentIncrease, ), - spacerWidget, - ], - if (configurations.showIndent) ...[ + if (configurations.showIndent) QuillToolbarIndentButton( - controller: - toolbarConfigurations.buttonOptions.indentDecrease.controller ?? - globalController, + controller: globalController, isIncrease: false, options: toolbarConfigurations.buttonOptions.indentDecrease, ), - spacerWidget, - ], if (configurations.showDividers && isButtonGroupShown[4] && isButtonGroupShown[5]) @@ -368,30 +270,21 @@ class QuillSimpleToolbar extends StatelessWidget color: configurations.sectionDividerColor, space: configurations.sectionDividerSpace, ), - if (configurations.showLink) ...[ + if (configurations.showLink) toolbarConfigurations.linkStyleType.isOriginal ? QuillToolbarLinkStyleButton( - controller: toolbarConfigurations - .buttonOptions.linkStyle.controller ?? - globalController, + controller: globalController, options: toolbarConfigurations.buttonOptions.linkStyle, ) : QuillToolbarLinkStyleButton2( - controller: toolbarConfigurations - .buttonOptions.linkStyle2.controller ?? - globalController, + controller: globalController, options: toolbarConfigurations.buttonOptions.linkStyle2, ), - spacerWidget, - ], - if (configurations.showSearchButton) ...[ + if (configurations.showSearchButton) QuillToolbarSearchButton( - controller: toolbarConfigurations.buttonOptions.search.controller ?? - globalController, + controller: globalController, options: toolbarConfigurations.buttonOptions.search, ), - spacerWidget, - ], if (configurations.customButtons.isNotEmpty) ...[ if (configurations.showDividers) QuillToolbarDivider( @@ -402,7 +295,7 @@ class QuillSimpleToolbar extends StatelessWidget for (final customButton in configurations.customButtons) QuillToolbarCustomButton( options: customButton, - controller: customButton.controller ?? globalController, + controller: globalController, ), // if (customButton.child != null) ...[ // InkWell( @@ -418,7 +311,6 @@ class QuillSimpleToolbar extends StatelessWidget // globalController, // ), // ], - spacerWidget, ], ]; } @@ -436,7 +328,7 @@ class QuillSimpleToolbar extends StatelessWidget direction: configurations.axis, alignment: configurations.toolbarIconAlignment, crossAxisAlignment: configurations.toolbarIconCrossAlignment, - runSpacing: 4, + runSpacing: configurations.toolbarRunSpacing, spacing: configurations.toolbarSectionSpacing, children: childrenBuilder(context), ); diff --git a/pubspec.yaml b/pubspec.yaml index 9b2dbf6e..58367eca 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_quill description: A rich text editor built for the modern Android, iOS, web and desktop platforms. It is the WYSIWYG editor and a Quill component for Flutter. -version: 9.0.0 +version: 9.0.2 homepage: https://1o24bbs.com/c/bulletjournal/108/ repository: https://github.com/singerdmx/flutter-quill/ issue_tracker: https://github.com/singerdmx/flutter-quill/issues/ diff --git a/quill_html_converter/CHANGELOG.md b/quill_html_converter/CHANGELOG.md index a4d0bba2..cb368a9b 100644 --- a/quill_html_converter/CHANGELOG.md +++ b/quill_html_converter/CHANGELOG.md @@ -2,6 +2,30 @@ All notable changes to this project will be documented in this file. +## 9.0.2 +* Release instead of pre-release + +## 9.0.2-dev.3 +* Export `QuillSingleChildScrollView` + +## 9.0.2-dev.2 +* Add the new translations for ru, uk arb files by [#1575](https://github.com/singerdmx/flutter-quill/pull/1575) +* Add a new dropdown button by [#1575](https://github.com/singerdmx/flutter-quill/pull/1575) +* Update the default style values by [#1575](https://github.com/singerdmx/flutter-quill/pull/1575) +* Fix bug [#1562](https://github.com/singerdmx/flutter-quill/issues/1562) +* Fix the second bug of [#1480](https://github.com/singerdmx/flutter-quill/issues/1480) + +## 9.0.2-dev.1 +* Add configurations for the new dropdown `QuillToolbarSelectHeaderStyleButton`, you can use the orignal one or this +* Fix the [issue](https://github.com/singerdmx/flutter-quill/issues/1119) when enter is pressed, all font settings is lost + +## 9.0.2-dev +* **Breaking change** Remove the spacer widget, removed the controller option for each button +* Add `toolbarRunSpacing` property to the simple toolbar + +## 9.0.1 +* Fix default icon size + ## 9.0.0 * This version is quite stable but it's not how we wanted to be, because the lack of time and there are not too many maintainers active, we decided to publish it, we might make a new breaking changes verion diff --git a/quill_html_converter/pubspec.yaml b/quill_html_converter/pubspec.yaml index 94f20e15..d52215f5 100644 --- a/quill_html_converter/pubspec.yaml +++ b/quill_html_converter/pubspec.yaml @@ -1,6 +1,6 @@ name: quill_html_converter description: A extension for flutter_quill package to add support for dealing with conversion to/from html -version: 9.0.0 +version: 9.0.2 homepage: https://github.com/singerdmx/flutter-quill/tree/master/quill_html_converter/ repository: https://github.com/singerdmx/flutter-quill/tree/master/quill_html_converter/ issue_tracker: https://github.com/singerdmx/flutter-quill/issues/ diff --git a/version.dart b/version.dart index 44108adc..e43c16b3 100644 --- a/version.dart +++ b/version.dart @@ -1 +1 @@ -const version = '9.0.0'; +const version = '9.0.2';