Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
74727aa
Added textChanges SharedFlow to follow text changes
Wavesonics Nov 17, 2024
2254b20
API
Wavesonics Nov 17, 2024
ad23f9d
Clean up
Wavesonics Nov 19, 2024
b47e25f
Handle link clicks in BasicRichTextEditor
Wavesonics Jan 28, 2024
3392198
Re move arg
Wavesonics Feb 1, 2024
e4fc462
Add callback for handling click on RichSpans
Wavesonics Feb 2, 2024
32a7430
Add some code for testing span clicks
Wavesonics Feb 2, 2024
b57f070
Spellcheck test
Wavesonics Feb 2, 2024
f6b926f
Make explicitly public
Wavesonics Nov 13, 2024
707110d
It compiles again
Wavesonics Nov 13, 2024
61a75f5
API
Wavesonics Nov 13, 2024
d04676f
Add click position to RichSpanClickListener
Wavesonics Nov 14, 2024
2bda581
API
Wavesonics Nov 14, 2024
a348e8b
Mocking up spellcheck
Wavesonics Nov 14, 2024
add5521
Fix null
Wavesonics Nov 14, 2024
9c3a529
Provide access to the rich spans
Wavesonics Nov 14, 2024
8c5ad1b
Added spellcheck screen
Wavesonics Nov 14, 2024
c57dd80
Added spellcheck
Wavesonics Nov 14, 2024
9dc71df
Don't need this
Wavesonics Nov 14, 2024
9ce658c
API
Wavesonics Nov 14, 2024
52e1b42
utils
Wavesonics Nov 15, 2024
2b03d3a
SymSpell version bump (contains other targets)
Wavesonics Nov 16, 2024
1e85ffc
Add getAllRichSpans()
Wavesonics Nov 17, 2024
fcab6f9
Added textChanges SharedFlow to follow text changes
Wavesonics Nov 17, 2024
8661764
More realistic Spell Checker
Wavesonics Nov 17, 2024
0cb0f14
API
Wavesonics Nov 17, 2024
0b010a1
dont convert to string every time
Wavesonics Nov 17, 2024
9ed977f
Solve the no-suggestions case
Wavesonics Nov 19, 2024
3ae282c
Spellcheck now appears to be bug free
Wavesonics Nov 22, 2024
5e6adf8
Refactored so we dont need to expose things
Wavesonics Nov 22, 2024
3efc2ce
Reduce public API surface
Wavesonics Nov 22, 2024
cbde9c5
Fix adding of original term
Wavesonics Nov 22, 2024
b0e8087
API Dump
Wavesonics Nov 22, 2024
363ef42
Fix multi-line spell check ranges
Wavesonics Nov 22, 2024
b357bfa
Better spellcheck options
Wavesonics Nov 22, 2024
56c7cf6
re-organized into a more production ready structure
Wavesonics Nov 23, 2024
661f4c4
API dump
Wavesonics Nov 23, 2024
e202ab2
Damn KorgeIO doesn't have all of the KMP targets
Wavesonics Nov 23, 2024
2ea9bfa
Revert "Damn KorgeIO doesn't have all of the KMP targets"
Wavesonics Nov 23, 2024
402b791
this version maybe?
Wavesonics Nov 23, 2024
08da237
Fix merge
Wavesonics Nov 25, 2024
781a381
Handle link clicks in BasicRichTextEditor
Wavesonics Jan 28, 2024
5025119
Re move arg
Wavesonics Feb 1, 2024
270609a
Add callback for handling click on RichSpans
Wavesonics Feb 2, 2024
6a86da6
Add some code for testing span clicks
Wavesonics Feb 2, 2024
65ffeec
Spellcheck test
Wavesonics Feb 2, 2024
1eadc30
Make explicitly public
Wavesonics Nov 13, 2024
dde84e5
It compiles again
Wavesonics Nov 13, 2024
b9f89ff
API
Wavesonics Nov 13, 2024
e12da22
Add click position to RichSpanClickListener
Wavesonics Nov 14, 2024
3a7a4f6
API
Wavesonics Nov 14, 2024
d63b539
Refactored so we dont need to expose things
Wavesonics Nov 22, 2024
0940b42
Add onRichSpanClick to Outline
Wavesonics Nov 25, 2024
e5d525d
Correct touch position for contentPadding
Wavesonics Nov 25, 2024
702948b
Will CI build this?
Wavesonics Nov 25, 2024
12a8d64
Ooohhh this fixes it
Wavesonics Nov 25, 2024
f786215
clean up
Wavesonics Nov 25, 2024
ab9bddf
more cleanup
Wavesonics Nov 26, 2024
bae05e8
Provide a more robust way of handling different kinds of interactions…
Wavesonics Nov 27, 2024
cf1edd6
API Dump
Wavesonics Nov 27, 2024
61f1247
Merge branch 'handle-link-click-in-editor' into spell-check-test
Wavesonics Nov 27, 2024
d471a4a
Simplified
Wavesonics Nov 27, 2024
1d6990a
Filter for click type
Wavesonics Nov 27, 2024
e9c0cdc
Right click on desktop, tap on mobile
Wavesonics Nov 28, 2024
3e26ba2
Fixed Touch VS Mouse input
Wavesonics Nov 28, 2024
65a76d4
Clear menu when not handled
Wavesonics Nov 29, 2024
9e4319f
Not needed
Wavesonics Nov 29, 2024
f7301f0
New min required for running on SDK 35 devices
Wavesonics Nov 29, 2024
ab11ee0
Not needed anymore
Wavesonics Nov 29, 2024
5505a9c
Not needed anymore
Wavesonics Nov 29, 2024
793b3d4
Split up the file
Wavesonics Nov 29, 2024
16966e7
trivial cleanup
Wavesonics Nov 29, 2024
29c5438
Re-organized into a spellcheck module
Wavesonics Nov 29, 2024
0891bf1
Change SpellCheck to draw the traditional red squiggle
Wavesonics Nov 29, 2024
47a9c60
Merge branch 'handle-link-click-in-editor' into spell-check-test
Wavesonics Nov 29, 2024
8bf8154
Merge branch 'textchangeflow' into spell-check-test
Wavesonics Nov 29, 2024
2287833
API Dump
Wavesonics Nov 29, 2024
e3cf052
Make SymSpell an API dependency
Wavesonics Nov 29, 2024
4b9bc2e
Sample now uses the binary .fdic format for it's sample dictionary
Wavesonics Dec 5, 2024
e568d7b
Removed Korge, no longer needed
Wavesonics Dec 5, 2024
9f6ab27
symspell version bump
Wavesonics Dec 5, 2024
e6328aa
Moved spell check utils to library
Wavesonics Dec 5, 2024
c057947
Merge branch 'main' into spell-check-test
Wavesonics Dec 5, 2024
9f018f1
Remove the textChanges Flow
Wavesonics Dec 9, 2024
87905ce
Moby Dick as spell check text
Wavesonics Dec 9, 2024
4776c1e
Merge branch 'main' into spell-check-test
Wavesonics Dec 9, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@ nexus-publish = "2.0.0"
# For sample
androidx-appcompat = "1.7.0"
activity-compose = "1.9.3"
symspellkt = "3.1.0"
voyager = "1.1.0-beta03"
richeditor = "1.0.0-rc10"
coroutines = "1.9.0"
ktor = "3.0.1"
android-minSdk = "21"
android-minSdk = "26"
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can't install APKs that have min SDK set below 26 on devices running SDK 35+

android-compileSdk = "34"

[libraries]
Expand All @@ -32,6 +33,8 @@ nexus-publish = { module = "io.github.gradle-nexus.publish-plugin:io.github.grad
# For sample
androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat" }
activity-compose = { module = "androidx.activity:activity-compose", version.ref = "activity-compose" }
symspellkt = { module = "com.darkrockstudios:symspellkt", version.ref = "symspellkt" }
symspellkt-fdic = { module = "com.darkrockstudios:symspellktfdic", version.ref = "symspellkt" }
voyager-navigator = { module = "cafe.adriel.voyager:voyager-navigator", version.ref = "voyager" }
richeditor-compose = { module = "com.mohamedrejeb.richeditor:richeditor-compose", version.ref = "richeditor" }

Expand Down
1 change: 1 addition & 0 deletions richeditor-compose-spellcheck/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
public final class com/mohamedrejeb/richeditor/compose/spellcheck/RememberSpellCheckStateKt {
public static final fun rememberSpellCheckState (Lcom/darkrockstudios/symspellkt/api/SpellChecker;Landroidx/compose/runtime/Composer;I)Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckState;
}

public final class com/mohamedrejeb/richeditor/compose/spellcheck/SpellCheck : com/mohamedrejeb/richeditor/model/RichSpanStyle {
public static final field $stable I
public static final field INSTANCE Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheck;
public fun appendCustomContent (Landroidx/compose/ui/text/AnnotatedString$Builder;Lcom/mohamedrejeb/richeditor/model/RichTextState;)Landroidx/compose/ui/text/AnnotatedString$Builder;
public fun drawCustomStyle-zdrCDHg (Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/text/TextLayoutResult;JLcom/mohamedrejeb/richeditor/model/RichTextConfig;FF)V
public fun getAcceptNewTextInTheEdges ()Z
public fun getSpanStyle ()Lkotlin/jvm/functions/Function1;
}

public final class com/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckMenuState {
public static final field $stable I
public fun <init> (Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckState;)V
public final fun clearSpellCheck ()V
public final fun component1 ()Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckState;
public final fun copy (Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckState;)Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckMenuState;
public static synthetic fun copy$default (Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckMenuState;Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckState;ILjava/lang/Object;)Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckMenuState;
public fun equals (Ljava/lang/Object;)Z
public final fun getMissSpelling ()Landroidx/compose/runtime/MutableState;
public final fun getSpellCheckState ()Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckState;
public fun hashCode ()I
public final fun performCorrection (Lcom/mohamedrejeb/richeditor/utils/WordSegment;Ljava/lang/String;)V
public fun toString ()Ljava/lang/String;
}

public final class com/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckMenuState$MissSpelling {
public static final field $stable I
public synthetic fun <init> (Lcom/mohamedrejeb/richeditor/utils/WordSegment;JLkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Lcom/mohamedrejeb/richeditor/utils/WordSegment;
public final fun component2-F1C5BW0 ()J
public final fun copy-Uv8p0NA (Lcom/mohamedrejeb/richeditor/utils/WordSegment;J)Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckMenuState$MissSpelling;
public static synthetic fun copy-Uv8p0NA$default (Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckMenuState$MissSpelling;Lcom/mohamedrejeb/richeditor/utils/WordSegment;JILjava/lang/Object;)Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckMenuState$MissSpelling;
public fun equals (Ljava/lang/Object;)Z
public final fun getMenuPosition-F1C5BW0 ()J
public final fun getWordSegment ()Lcom/mohamedrejeb/richeditor/utils/WordSegment;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}

public final class com/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckState {
public static final field $stable I
public fun <init> (Lcom/mohamedrejeb/richeditor/model/RichTextState;Lcom/darkrockstudios/symspellkt/api/SpellChecker;)V
public final fun correctSpelling (Lcom/mohamedrejeb/richeditor/utils/WordSegment;Ljava/lang/String;)V
public final fun getRichTextState ()Lcom/mohamedrejeb/richeditor/model/RichTextState;
public final fun getSpellChecker ()Lcom/darkrockstudios/symspellkt/api/SpellChecker;
public final fun getSuggestions (Ljava/lang/String;)Ljava/util/List;
public final fun handleSpanClick-AXecNCo (Lcom/mohamedrejeb/richeditor/model/RichSpanStyle;JJ)Lcom/mohamedrejeb/richeditor/utils/WordSegment;
public final fun onTextChange (Lcom/mohamedrejeb/richeditor/model/RichTextState;)V
public final fun runSpellCheck ()V
public final fun setSpellChecker (Lcom/darkrockstudios/symspellkt/api/SpellChecker;)V
}

public final class com/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckTextContextMenuProvider_androidKt {
public static final fun SpellCheckTextContextMenuProvider (Landroidx/compose/ui/Modifier;Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckMenuState;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
}

public final class com/mohamedrejeb/richeditor/compose/spellcheck/ui/ComposableSingletons$SpellCheckDropdownKt {
public static final field INSTANCE Lcom/mohamedrejeb/richeditor/compose/spellcheck/ui/ComposableSingletons$SpellCheckDropdownKt;
public static field lambda-1 Lkotlin/jvm/functions/Function2;
public fun <init> ()V
public final fun getLambda-1$richeditor_compose_spellcheck_release ()Lkotlin/jvm/functions/Function2;
}

public final class com/mohamedrejeb/richeditor/compose/spellcheck/ui/ComposableSingletons$SpellCheckedRichTextEditorKt {
public static final field INSTANCE Lcom/mohamedrejeb/richeditor/compose/spellcheck/ui/ComposableSingletons$SpellCheckedRichTextEditorKt;
public static field lambda-1 Lkotlin/jvm/functions/Function3;
public fun <init> ()V
public final fun getLambda-1$richeditor_compose_spellcheck_release ()Lkotlin/jvm/functions/Function3;
}

public final class com/mohamedrejeb/richeditor/compose/spellcheck/ui/SpellCheckedRichTextEditorKt {
public static final fun SpellCheckedRichTextEditor (Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/text/TextStyle;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ZIIILkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/graphics/Brush;Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckState;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V
}

public final class com/mohamedrejeb/richeditor/compose/spellcheck/utils/SpellCheckUtilsKt {
public static final fun isSpelledCorrectly (Ljava/lang/String;Ljava/util/List;)Z
public static final fun spellingIsCorrect (Ljava/util/List;Ljava/lang/String;)Z
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
public final class com/mohamedrejeb/richeditor/compose/spellcheck/RememberSpellCheckStateKt {
public static final fun rememberSpellCheckState (Lcom/darkrockstudios/symspellkt/api/SpellChecker;Landroidx/compose/runtime/Composer;I)Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckState;
}

public final class com/mohamedrejeb/richeditor/compose/spellcheck/SpellCheck : com/mohamedrejeb/richeditor/model/RichSpanStyle {
public static final field $stable I
public static final field INSTANCE Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheck;
public fun appendCustomContent (Landroidx/compose/ui/text/AnnotatedString$Builder;Lcom/mohamedrejeb/richeditor/model/RichTextState;)Landroidx/compose/ui/text/AnnotatedString$Builder;
public fun drawCustomStyle-zdrCDHg (Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/text/TextLayoutResult;JLcom/mohamedrejeb/richeditor/model/RichTextConfig;FF)V
public fun getAcceptNewTextInTheEdges ()Z
public fun getSpanStyle ()Lkotlin/jvm/functions/Function1;
}

public final class com/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckMenuState {
public static final field $stable I
public fun <init> (Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckState;)V
public final fun clearSpellCheck ()V
public final fun component1 ()Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckState;
public final fun copy (Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckState;)Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckMenuState;
public static synthetic fun copy$default (Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckMenuState;Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckState;ILjava/lang/Object;)Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckMenuState;
public fun equals (Ljava/lang/Object;)Z
public final fun getMissSpelling ()Landroidx/compose/runtime/MutableState;
public final fun getSpellCheckState ()Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckState;
public fun hashCode ()I
public final fun performCorrection (Lcom/mohamedrejeb/richeditor/utils/WordSegment;Ljava/lang/String;)V
public fun toString ()Ljava/lang/String;
}

public final class com/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckMenuState$MissSpelling {
public static final field $stable I
public synthetic fun <init> (Lcom/mohamedrejeb/richeditor/utils/WordSegment;JLkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Lcom/mohamedrejeb/richeditor/utils/WordSegment;
public final fun component2-F1C5BW0 ()J
public final fun copy-Uv8p0NA (Lcom/mohamedrejeb/richeditor/utils/WordSegment;J)Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckMenuState$MissSpelling;
public static synthetic fun copy-Uv8p0NA$default (Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckMenuState$MissSpelling;Lcom/mohamedrejeb/richeditor/utils/WordSegment;JILjava/lang/Object;)Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckMenuState$MissSpelling;
public fun equals (Ljava/lang/Object;)Z
public final fun getMenuPosition-F1C5BW0 ()J
public final fun getWordSegment ()Lcom/mohamedrejeb/richeditor/utils/WordSegment;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}

public final class com/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckState {
public static final field $stable I
public fun <init> (Lcom/mohamedrejeb/richeditor/model/RichTextState;Lcom/darkrockstudios/symspellkt/api/SpellChecker;)V
public final fun correctSpelling (Lcom/mohamedrejeb/richeditor/utils/WordSegment;Ljava/lang/String;)V
public final fun getRichTextState ()Lcom/mohamedrejeb/richeditor/model/RichTextState;
public final fun getSpellChecker ()Lcom/darkrockstudios/symspellkt/api/SpellChecker;
public final fun getSuggestions (Ljava/lang/String;)Ljava/util/List;
public final fun handleSpanClick-AXecNCo (Lcom/mohamedrejeb/richeditor/model/RichSpanStyle;JJ)Lcom/mohamedrejeb/richeditor/utils/WordSegment;
public final fun onTextChange (Lcom/mohamedrejeb/richeditor/model/RichTextState;)V
public final fun runSpellCheck ()V
public final fun setSpellChecker (Lcom/darkrockstudios/symspellkt/api/SpellChecker;)V
}

public final class com/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckTextContextMenuProvider_desktopKt {
public static final fun SpellCheckTextContextMenuProvider (Landroidx/compose/ui/Modifier;Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckMenuState;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
}

public final class com/mohamedrejeb/richeditor/compose/spellcheck/ui/ComposableSingletons$SpellCheckDropdownKt {
public static final field INSTANCE Lcom/mohamedrejeb/richeditor/compose/spellcheck/ui/ComposableSingletons$SpellCheckDropdownKt;
public static field lambda-1 Lkotlin/jvm/functions/Function2;
public fun <init> ()V
public final fun getLambda-1$richeditor_compose_spellcheck ()Lkotlin/jvm/functions/Function2;
}

public final class com/mohamedrejeb/richeditor/compose/spellcheck/ui/ComposableSingletons$SpellCheckedRichTextEditorKt {
public static final field INSTANCE Lcom/mohamedrejeb/richeditor/compose/spellcheck/ui/ComposableSingletons$SpellCheckedRichTextEditorKt;
public static field lambda-1 Lkotlin/jvm/functions/Function3;
public fun <init> ()V
public final fun getLambda-1$richeditor_compose_spellcheck ()Lkotlin/jvm/functions/Function3;
}

public final class com/mohamedrejeb/richeditor/compose/spellcheck/ui/SpellCheckedRichTextEditorKt {
public static final fun SpellCheckedRichTextEditor (Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/text/TextStyle;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ZIIILkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/graphics/Brush;Lcom/mohamedrejeb/richeditor/compose/spellcheck/SpellCheckState;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V
}

public final class com/mohamedrejeb/richeditor/compose/spellcheck/utils/SpellCheckUtilsKt {
public static final fun isSpelledCorrectly (Ljava/lang/String;Ljava/util/List;)Z
public static final fun spellingIsCorrect (Ljava/util/List;Ljava/lang/String;)Z
}

Loading