From 714d202e7de61a439df4ddf5170025d768053998 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 28 Jun 2026 22:55:56 +0000 Subject: [PATCH] refactor(git): move code-browser ViewModel + syntax highlighter to commons MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Relocates the two app-agnostic pieces of the NIP-34 code browser into commons so the desktop front end can reuse them verbatim: - GitRepositoryBrowserViewModel (+ GitBrowseState) → commons jvmAndroid nip34Git package. Pure StateFlow ViewModel over quartz's GitHttpClient; no Android/AccountViewModel/INav dependency. - CodeHighlighter → commons commonMain nip34Git/ui. Pulls the Apache-2.0 dev.snipme:highlights dependency into commons commonMain. Amethyst composables now import both from commons. The screen-level composables stay app-side, matching the commons convention that shared UI never takes AccountViewModel/INav. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01DpNmN8CvP6HnEsdTGAjVUr --- .../com/vitorpamplona/amethyst/ui/note/types/GitDiffView.kt | 2 +- .../amethyst/ui/screen/loggedIn/gitRepo/GitRepositoryScreen.kt | 2 +- .../amethyst/ui/screen/loggedIn/gitRepo/code/GitCodeTab.kt | 2 ++ .../amethyst/ui/screen/loggedIn/gitRepo/code/GitCommitLog.kt | 1 + .../amethyst/ui/screen/loggedIn/gitRepo/code/GitFileViewer.kt | 2 ++ .../amethyst/ui/screen/loggedIn/gitRepo/code/GitReadmeTab.kt | 2 ++ commons/build.gradle.kts | 3 +++ .../amethyst/commons/nip34Git/ui}/CodeHighlighter.kt | 2 +- .../commons/nip34Git}/GitRepositoryBrowserViewModel.kt | 2 +- 9 files changed, 14 insertions(+), 4 deletions(-) rename {amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code => commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/nip34Git/ui}/CodeHighlighter.kt (98%) rename {amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code => commons/src/jvmAndroid/kotlin/com/vitorpamplona/amethyst/commons/nip34Git}/GitRepositoryBrowserViewModel.kt (98%) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/types/GitDiffView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/types/GitDiffView.kt index 2c78d82a70..e612e7bbef 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/types/GitDiffView.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/types/GitDiffView.kt @@ -60,7 +60,7 @@ import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.commons.icons.symbols.Icon import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbol import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols -import com.vitorpamplona.amethyst.ui.screen.loggedIn.gitRepo.code.CodeHighlighter +import com.vitorpamplona.amethyst.commons.nip34Git.ui.CodeHighlighter import com.vitorpamplona.amethyst.ui.stringRes import com.vitorpamplona.quartz.nip34Git.patch.CharSpan import com.vitorpamplona.quartz.nip34Git.patch.GitDiffFile diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/GitRepositoryScreen.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/GitRepositoryScreen.kt index a5e752d618..d2b10d5910 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/GitRepositoryScreen.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/GitRepositoryScreen.kt @@ -60,6 +60,7 @@ import androidx.lifecycle.viewmodel.compose.viewModel import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.commons.icons.symbols.Icon import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols +import com.vitorpamplona.amethyst.commons.nip34Git.GitRepositoryBrowserViewModel import com.vitorpamplona.amethyst.commons.ui.feeds.FeedState import com.vitorpamplona.amethyst.model.AddressableNote import com.vitorpamplona.amethyst.model.Note @@ -77,7 +78,6 @@ import com.vitorpamplona.amethyst.ui.screen.RefresheableFeedView import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.gitRepo.code.GitCodeTab import com.vitorpamplona.amethyst.ui.screen.loggedIn.gitRepo.code.GitReadmeTab -import com.vitorpamplona.amethyst.ui.screen.loggedIn.gitRepo.code.GitRepositoryBrowserViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.gitRepo.dal.RepositoryIssuesFeedViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.gitRepo.dal.RepositoryPatchesFeedViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.gitRepo.datasource.RepositoryFilterAssemblerSubscription diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code/GitCodeTab.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code/GitCodeTab.kt index 6523965452..741980c4ca 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code/GitCodeTab.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code/GitCodeTab.kt @@ -60,6 +60,8 @@ import androidx.compose.ui.unit.dp import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.commons.icons.symbols.Icon import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols +import com.vitorpamplona.amethyst.commons.nip34Git.GitBrowseState +import com.vitorpamplona.amethyst.commons.nip34Git.GitRepositoryBrowserViewModel import com.vitorpamplona.amethyst.commons.ui.layouts.LocalDisappearingScaffoldPadding import com.vitorpamplona.amethyst.ui.navigation.navs.INav import com.vitorpamplona.amethyst.ui.note.ArrowBackIcon diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code/GitCommitLog.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code/GitCommitLog.kt index 90be83a102..f818bb51c1 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code/GitCommitLog.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code/GitCommitLog.kt @@ -57,6 +57,7 @@ import androidx.compose.ui.unit.dp import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.commons.icons.symbols.Icon import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols +import com.vitorpamplona.amethyst.commons.nip34Git.GitRepositoryBrowserViewModel import com.vitorpamplona.amethyst.ui.note.ArrowBackIcon import com.vitorpamplona.amethyst.ui.note.types.GitDiffView import com.vitorpamplona.amethyst.ui.stringRes diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code/GitFileViewer.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code/GitFileViewer.kt index 505c936492..95535b7a94 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code/GitFileViewer.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code/GitFileViewer.kt @@ -60,6 +60,8 @@ import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.commons.icons.symbols.Icon import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols import com.vitorpamplona.amethyst.commons.model.EmptyTagList +import com.vitorpamplona.amethyst.commons.nip34Git.GitRepositoryBrowserViewModel +import com.vitorpamplona.amethyst.commons.nip34Git.ui.CodeHighlighter import com.vitorpamplona.amethyst.ui.components.RichTextViewer import com.vitorpamplona.amethyst.ui.components.util.setText import com.vitorpamplona.amethyst.ui.navigation.navs.INav diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code/GitReadmeTab.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code/GitReadmeTab.kt index 4bc30479db..63181ec903 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code/GitReadmeTab.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code/GitReadmeTab.kt @@ -39,6 +39,8 @@ import androidx.compose.ui.unit.dp import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols import com.vitorpamplona.amethyst.commons.model.EmptyTagList +import com.vitorpamplona.amethyst.commons.nip34Git.GitBrowseState +import com.vitorpamplona.amethyst.commons.nip34Git.GitRepositoryBrowserViewModel import com.vitorpamplona.amethyst.commons.ui.layouts.LocalDisappearingScaffoldPadding import com.vitorpamplona.amethyst.ui.components.RichTextViewer import com.vitorpamplona.amethyst.ui.navigation.navs.INav diff --git a/commons/build.gradle.kts b/commons/build.gradle.kts index 44cb23f0d3..4c0d5532bd 100644 --- a/commons/build.gradle.kts +++ b/commons/build.gradle.kts @@ -122,6 +122,9 @@ kotlin { // Compose Multiplatform Resources implementation(libs.jetbrains.compose.components.resources) + + // KMP syntax highlighter (Apache-2.0) for the git code browser. + implementation(libs.highlights) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code/CodeHighlighter.kt b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/nip34Git/ui/CodeHighlighter.kt similarity index 98% rename from amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code/CodeHighlighter.kt rename to commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/nip34Git/ui/CodeHighlighter.kt index 10d0e034b5..e5c566b64d 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code/CodeHighlighter.kt +++ b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/nip34Git/ui/CodeHighlighter.kt @@ -18,7 +18,7 @@ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -package com.vitorpamplona.amethyst.ui.screen.loggedIn.gitRepo.code +package com.vitorpamplona.amethyst.commons.nip34Git.ui import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.AnnotatedString diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code/GitRepositoryBrowserViewModel.kt b/commons/src/jvmAndroid/kotlin/com/vitorpamplona/amethyst/commons/nip34Git/GitRepositoryBrowserViewModel.kt similarity index 98% rename from amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code/GitRepositoryBrowserViewModel.kt rename to commons/src/jvmAndroid/kotlin/com/vitorpamplona/amethyst/commons/nip34Git/GitRepositoryBrowserViewModel.kt index a4dbe7d846..83749ad420 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/gitRepo/code/GitRepositoryBrowserViewModel.kt +++ b/commons/src/jvmAndroid/kotlin/com/vitorpamplona/amethyst/commons/nip34Git/GitRepositoryBrowserViewModel.kt @@ -18,7 +18,7 @@ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -package com.vitorpamplona.amethyst.ui.screen.loggedIn.gitRepo.code +package com.vitorpamplona.amethyst.commons.nip34Git import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider