memspace / zefyr

Soft and gentle rich text editing for Flutter applications.
https://zefyr-editor.gitbook.io
2.22k stars 551 forks source link

Zefyr 1.0 development updates #409

Open pulyaevskiy opened 3 years ago

pulyaevskiy commented 3 years ago

Hi everyone,

I wanted to post this as an announcement that there is currently work in progress on the new version of Zefyr which will be eventually released as a stable 1.0 version.

There is a lot of changes in this version, it's practically an almost complete rewrite of the package, but it comes with quite a few benefits.

You can head over to https://memspace.github.io/zefyr/#/ and see the editor for yourself in its current state.

image

Note that this is a very early dev version so it's buggy. In addition, Flutter's Web support is still not on par with the rest of the platforms and there are some pretty basic limitations in the engine itself. So don't get surprised if formatting text with bold breaks the entire thing (it does).

The main reason I wanted to get it out there is to let everyone know that there has been some progress lately. Also this is the reason I'm not looking at any PRs at the moment. I'd like to get 1.0-dev branch into a good shape first and then go over the open issues and PRs in order to see which ones are still relevant and if they can be incorporated in the 1.0 release.

The best way for you to stay updated on the progress here is to subscribe to this issue. I will be posting updates in comments below.

The first dev release is out on Pub: https://pub.dev/packages/zefyr/versions/1.0.0-dev.1.0

I'd encourage everyone to give it a try and see if things are working well. Make sure to checkout the changelog for migration instructions.

aleripe commented 3 years ago

@featzima That's great! I don't have the skills to contribute... but I'll keep an eye on it! :)

0Vipin0 commented 3 years ago

After going through all the comments, I have few questions.

  1. Is zefyr abandoned? It seems from the number of PRs and issues that it is abandoned though :(
  2. I see there are two alternative one zefyrka and flutter quill. Both seems to good enough. zefyrka is a seems to be new but direct fork of the zefyr and support all the platforms while flutter quill is quite mature and the maintainer is very active but doesn't support all platform. So anyone who worked on both, what would be your recommendation?
  3. Why there are no single rich text editor that the community can directly contribute rather than being multiple packages?. This will provide more confidence to the developer that the bugs will be fixed faster and there is no need to go for different location to solve different issues.
friebetill commented 3 years ago

Disclaimer: I used Zefyr for around two years and then switched to flutter_quill half a year ago. I never worked with Zefyrka. In the last months I fixed a few things on flutter_quill.

  1. Is zefyr abandoned? It seems from the number of PRs and issues that it is abandoned though :(

I think the maintainer doesn't find the time to work on Zefyr continuously. But about once a year he finds the time and makes good changes to the library. Unfortunately, the changes are not enough for the library to make the library well usable. It is also frustrating that he does not extend collaboration rights so that others can help him maintain. So in my opinion Zefyr is abandoned.

  1. I see there are two alternative one zefyrka and flutter quill. Both seems to good enough. zefyrka is a seems to be new but direct fork of the zefyr and support all the platforms while flutter quill is quite mature and the maintainer is very active but doesn't support all platform. So anyone who worked on both, what would be your recommendation?

The big advantage of flutter_quill over zefyr is that flutter_quill sticks to the standard (delta format)[https://quilljs.com/docs/delta/]. It also works well on Android, iOS, Windows, macOS and Linux (I haven't tested it on web).

Another advantage of flutter_quill is that the maintainer is very active, but on the other hand relatively inexperienced, which is why PRs are sometimes merged directly without testing, issues are sometimes closed without being resolved and the comments (in my opinion) are a bit rough. Nevertheless, it is super kind of him that he takes the time to maintain this big project.

Why there are no single rich text editor that the community can directly contribute rather than being multiple packages?. This will provide more confidence to the developer that the bugs will be fixed faster and there is no need to go for different location to solve different issues.

Good question, in my opinion there should only be flutter_quill, which is why I am working on it, when I find the time. I think one advantage of Zefyrka is that it can be used directly as a replacement for Zefyr. Whereas flutter_quill uses the standard delta format, so you have to convert your content using this code.

0Vipin0 commented 3 years ago

@friebetill Thank you for the quick response.

The big advantage of flutter_quill over zefyr is that flutter_quill sticks to the standard (delta format)[https://quilljs.com/docs/delta/].

I am aware of this and that's why I am edging towards the flutter quill.

It also works well on Android, iOS, Windows, macOS and Linux (I haven't tested it on web).

Actually when I checked on the pub.dev there is only the android and ios tags only, so I thought It only support the mobile but when I checked the example I found all the platforms available and it was no where clearly written that It support all platform, So I think documentation needs some touchup in this regard.

PRs are sometimes merged directly without testing, issues are sometimes closed without being resolved and the comments (in my opinion) are a bit rough.

Yeah I agree with you. Also when I checked the closed issues, there were some issues where there was no solution or indication that the issue was resolved but was closed by the maintainer, So I was somewhat surprised by that.

Nevertheless, it is super kind of him that he takes the time to maintain this big project.

Completely agree on this part.

Good question, in my opinion there should only be flutter_quill, which is why I am working on it, when I find the time. I think one advantage of Zefyrka is that it can be used directly as a replacement for Zefyr. Whereas flutter_quill uses the standard delta format, so you have to convert your content using this code.

Yeah, flutter quill seems to be better in this regard, given the amount invested by the community to resolve the issues and all the contributions. But (Zefryka)[https://github.com/glynskyi/zefyrka] also seems to have some good feature which can be used on the flutter quill. Although I haven't checked the flutter quill deeply so can't be sure that they are already supported or not. Let's see when that will. But from the above discussion I feel flutter quill is better option. Will continue to check both the packages on long term.

aleripe commented 3 years ago

I'm using a slightly customized version of Zefyrka and can confirm it's working on web. I could send you a link to my web app to check, but don't know if I can.

featzima commented 3 years ago

We was using Zefyr in our production from the very beginning. However year ago we needed the text color, background color, paragraph alignment and other features so we started to support own fork of Zefyr with required features. However over some time Zefyr support was stopped so we published our fork as Zefyrka package and continue with that.

We also discussed to use flutter_quill however it doesn't fit our requirements. Because the desktop and mobile are important platforms for us and because the flutter_quill has a lot of dependencies that don't have desktop support it's hard to use it.

So my opinion is the following:

singerdmx commented 3 years ago

IMHO, to support three different platforms and driving to reduce dependencies, we should export an interface package as follows. If one choose to do desktop, one should import lib, desktop packages. Mobile and web are similar.

lib ┣ reference interface // business logic ┃ interface ┣ define embed and other interfaces ┃ web ┣ reference interface and implement it ┃ mobile ┣ reference interface and implement it ┃ desktop ┣ reference interface and implement it

I can try it out in flutter_quill when I have free time. Also it may be useful to use dependency injection https://medium.com/flutter-community/dependency-injection-in-flutter-f19fb66a0740 https://resocoder.com/2020/02/04/injectable-flutter-dart-equivalent-to-dagger-angular-dependency-injection/

pulyaevskiy commented 3 years ago

Hey everyone,

Just to answer this question:

Is Zefyr abandoned?

No. I have not been actively contributing to it, which is true. But ultimately it's still a project I'd like to work on.

And actually there are some recent changes which got merged into 1.0-dev branch including support for Flutter 2.x (stable) and some null-safety improvements. Thanks to contributions from @Amir-P .

I'm still pretty limited with my time, but I'm thinking of a way to enable better collaboration. You can expect a pretty slow pace for the time being though.

britannio commented 3 years ago

@pulyaevskiy the 1.0 announcement was made 10 months ago and 7 months of that time went by without a single commit to the 1.0-dev branch. From the perspective of a developer trying to use this package in production, 7 months of absence does constitute the project being abandoned hence why we're moving on to super_editor. What's to stop these delays from recurring if you're the sole maintainer?

I kindly request that you update https://github.com/memspace/zefyr/projects/1 with all the recent 1.0 issues you'd like to be solved then appoint some maintainers to focus specifically on the issues you've curated there?

0Vipin0 commented 3 years ago

@pulyaevskiy It's good to see that the creator is still working on the project. And I completely agree with what @britannio said.

I kindly request that you update https://github.com/memspace/zefyr/projects/1 with all the recent 1.0 issues you'd like to be solved then appoint some maintainers to focus specifically on the issues you've curated there?

I believe that no single person can give a large amount of time and have their work of their own but I think the flutter community is sufficiently big and knowledgeable to help you continue to maintain this repo. I think you should get add some contributors to this project who have either have good amount PR's to this repo or whatever way you feel good enough to decide the contributors. But in the end, final decision is yours.

singerdmx commented 3 years ago

My suggestion is to be really selective on contributors. From my personal experience maintaining flutter_quill repo, most contributors do not have a good grasp of the code base. Some does not even know flutter has master, dev, beta channels and send random PRs for their channel. You don't want them to break your code.

pulyaevskiy commented 3 years ago

@britannio @0Vipin0

I kindly request that you update https://github.com/memspace/zefyr/projects/1 with all the recent 1.0 issues you'd like to be solved then appoint some maintainers to focus specifically on the issues you've curated there?

I was thinking about something along these lines as well.

Re: contributors

I'd be happy to add contributors to the project. That said, I'd be hesitant to give push or merge permissions right away. The way I'll likely to approach this is to first get an opportunity to work on a few PRs together so that there is good understanding of the codebase and the design choices that were made and to be made still.

From my end I need to work on better documentation, both architectural and conceptual. As well as some actual tech specs for proposed features. Being a sole maintainer makes it much less critical and allows to focus on just coding. This will have to change.

In short, I'm planning to do what @britannio requested. If there are still volunteers to actively contribute to the project, feel free to reach out to me here or via email, whatever works best. We'll arrange some sort of group for collaboration.

nipunasudha commented 2 years ago

Any plan to address #305 "Copy text to clipboard with style" in the 1.0 release? I currently cannot copy & paste content with text styles.

Amir-P commented 2 years ago

Any plan to address #305 "Copy text to clipboard with style" in the 1.0 release? I currently cannot copy & paste content with text styles.

There is a limitation by Flutter's engine. Currently it's not supported to set data for clipboard other than plain text. Until that isn't changed, there is not much we can do on Zefyr's side. @nipunasudha

nipunasudha commented 2 years ago

Any plan to address #305 "Copy text to clipboard with style" in the 1.0 release? I currently cannot copy & paste content with text styles.

There is a limitation by Flutter's engine. Currently it's not supported to set data for clipboard other than plain text. Until that isn't changed, there is not much we can do on Zefyr's side. @nipunasudha

That's too bad! Tradeoff of having to maintain cross platform support, which is understandable. Thank you very much for the quick response.

pulyaevskiy commented 2 years ago

Any plan to address #305 "Copy text to clipboard with style" in the 1.0 release? I currently cannot copy & paste content with text styles.

There is a limitation by Flutter's engine. Currently it's not supported to set data for clipboard other than plain text. Until that isn't changed, there is not much we can do on Zefyr's side. @nipunasudha

That's too bad! Tradeoff of having to maintain cross platform support, which is understandable. Thank you very much for the quick response.

There is still an option of writing a custom platform plugin which adds rich text clipboard integration. I believe most platforms which support it use html content to describe rich text. At least from my limited research into this issue a while back.

This would of course depend on whether particular target platform supports setting some form of rich text in the clipboard.

Amir-P commented 2 years ago

Any plan to address #305 "Copy text to clipboard with style" in the 1.0 release? I currently cannot copy & paste content with text styles.

There is a limitation by Flutter's engine. Currently it's not supported to set data for clipboard other than plain text. Until that isn't changed, there is not much we can do on Zefyr's side. @nipunasudha

That's too bad! Tradeoff of having to maintain cross platform support, which is understandable. Thank you very much for the quick response.

There is still an option of writing a custom platform plugin which adds rich text clipboard integration. I believe most platforms which support it use html content to describe rich text. At least from my limited research into this issue a while back.

This would of course depend on whether particular target platform supports setting some form of rich text in the clipboard.

I was thinking about doing this a few weeks ago but didn't have the time. It's possible at least for mobile platforms which I was interested in.

pulyaevskiy commented 2 years ago

Thanks to the help the community and especially @Amir-P , @amantoux and @cgestes we just released the first release candidate versions of both Notus and Zefyr packages:

https://pub.dev/packages/zefyr/versions/1.0.0-rc.1 https://pub.dev/packages/notus/versions/1.0.0-rc.1

Please refer to the changelog of both packages for more details. Note that 1.0.0-rc.1 already comes with support for Flutter 2.8 which was just release earlier today.

Does it mean we're getting the stable 1.0 soon?

We're definitely getting closer to the stable release, but it may still be several months away. That said, with release of a release candidate I'm hoping more people would be willing to try the package since it's in a much more stable state, comparing to the last dev release. It is still not a stable release so incomplete functionality and occasional bugs are to be expected.

pulyaevskiy commented 2 years ago

Zefyr 1.0.0.-rc.2 is out: https://pub.dev/packages/zefyr/versions/1.0.0-rc.2

1.0.0-rc.2

taojoe commented 2 years ago

582 is related to 1.0.0-rc.2

pulyaevskiy commented 2 years ago

Zefyr 1.0.0.-rc.3 is out: https://pub.dev/packages/zefyr/versions/1.0.0-rc.3

1.0.0-rc.3

taojoe commented 2 years ago

583 please consider supporting nested list(inner list) .

taojoe commented 2 years ago

@pulyaevskiy I noticed the comment for "SpanEmbed", and I see the editor on quilljs can embed latex inline, does this means "the contract" is settled by quilljs? and the "SpanEmbed" can be supported?

https://quilljs.com/docs/formats

/// An object which can be embedded on the same line (inline) with regular text.
///
/// Span embeds are not currently supported by Notus document model and this
/// class exists to establish the contract for future work.
// TODO: document model currently only supports BlockEmbeds and need to be updated to support SpanEmbeds.

image

cgestes commented 2 years ago

On Tue, Dec 28, 2021, 14:05 周向涛 @.***> wrote:

@pulyaevskiy https://github.com/pulyaevskiy I noticed the comment for "SpanEmbed", and I see the editor on quilljs can embed latex inline, does this means "the contract" is settled by quilljs? and the "SpanEmbed" can be supported?

It means that you need to implements embeds for span. It is currently only implemented for blocks. (Full line). Btw Zefyr doesn't strictly follow quilljs formats. It only use the delta format in a similar way.

https://quilljs.com/docs/formats

/// An object which can be embedded on the same line (inline) with regular text. /// /// Span embeds are not currently supported by Notus document model and this /// class exists to establish the contract for future work. // TODO: document model currently only supports BlockEmbeds and need to be updated to support SpanEmbeds.

[image: image] https://user-images.githubusercontent.com/545656/147564370-3c7ae680-43f2-4bfe-b1fc-1099017111d1.png

— Reply to this email directly, view it on GitHub https://github.com/memspace/zefyr/issues/409#issuecomment-1002060323, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAAL75IOHIF4YQ7GRFNTSALUTGRXPANCNFSM4R5LHQ6Q . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

You are receiving this because you were mentioned.Message ID: @.***>

taojoe commented 2 years ago

On Tue, Dec 28, 2021, 14:05 周向涛 @.> wrote: @pulyaevskiy https://github.com/pulyaevskiy I noticed the comment for "SpanEmbed", and I see the editor on quilljs can embed latex inline, does this means "the contract" is settled by quilljs? and the "SpanEmbed" can be supported? It means that you need to implements embeds for span. It is currently only implemented for blocks. (Full line). Btw Zefyr doesn't strictly follow quilljs formats. It only use the delta format in a similar way. https://quilljs.com/docs/formats /// An object which can be embedded on the same line (inline) with regular text. /// /// Span embeds are not currently supported by Notus document model and this /// class exists to establish the contract for future work. // TODO: document model currently only supports BlockEmbeds and need to be updated to support SpanEmbeds. [image: image] https://user-images.githubusercontent.com/545656/147564370-3c7ae680-43f2-4bfe-b1fc-1099017111d1.png — Reply to this email directly, view it on GitHub <#409 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAAL75IOHIF4YQ7GRFNTSALUTGRXPANCNFSM4R5LHQ6Q . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub. You are receiving this because you were mentioned.Message ID: @.>

at zefyr/packages/zefyr/lib/src/widgets/text_line.dart line 122, I think it is restricted the way to build a WidgetSpan as an inline embed, is that correct?

119 @override
120  Widget build(BuildContext context) {
121    assert(debugCheckHasMediaQuery(context));
122    if (widget.node.hasEmbed) {
123      final embed = widget.node.children.single as EmbedNode;
124      return EmbedProxy(child: widget.embedBuilder(context, embed));
125    }
taojoe commented 2 years ago

and I modified the code a little, try to make an inline embed widget, it worked. the red frame is where the modify is. maybe, change function "_segmentToTextSpan" to build inline embed to WidgetSpan will enable inline embed?

image

image

taojoe commented 2 years ago

584 is related to Chinese input method, I think Japanese input method will have the same issue.

emmggi commented 2 years ago

I'm following the development of this. I want to make a more complicated note taking app.

Many thanks for not making me make something like this. :D

Patrick386 commented 2 years ago

Zefyr1.0 When can I use this?

meg4cyberc4t commented 2 years ago

How are you guys? is work going on? v1.0.0- rc5 does not launch in flutter 3

aleripe commented 2 years ago

It's definitely dead, I suppose...

cgestes commented 2 years ago

How are you guys? is work going on?

not much happening sadly.

v1.0.0- rc5 does not launch in flutter 3

I may have the fixes you need here (it works with flutter 3): https://github.com/jotshq/zefyr

edwin-alvarez commented 2 years ago

@cgestes , how do I activate your branch Im trying to migrate from a very old flutter version, and Im having some issues due to missing physics, ZefyrScaffold, ZefyrView

cracked2626 commented 2 years ago

@cgestes , how do I activate your branch Im trying to migrate from a very old flutter version, and Im having some issues due to missing physics, ZefyrScaffold, ZefyrView

Hey , got any solution?

Amir-P commented 2 years ago

@cgestes , how do I activate your branch Im trying to migrate from a very old flutter version, and Im having some issues due to missing physics, ZefyrScaffold, ZefyrView

Hey , got any solution?

Hey, you can use Fleather for now. It's a fork me and @amantoux working on. https://github.com/fleather-editor/fleather

iamtomsap commented 1 year ago

hello guys. can anybody help me with ZefyrValidator? because i'm working with ZefyrEditor in Flutter and I want to add validator (cannot be empty), but I can't find any clue in the documentation.

Thank you in advance