From bd1935537bf5df743c62def29403af41923f0556 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 17:53:43 +0900 Subject: [PATCH 001/261] Add modular project skeleton --- core/common/build.gradle.kts | 20 ++++++++++++++++++++ core/deeplink/build.gradle.kts | 20 ++++++++++++++++++++ core/model/build.gradle.kts | 20 ++++++++++++++++++++ data/database/build.gradle.kts | 27 +++++++++++++++++++++++++++ data/datastore/build.gradle.kts | 20 ++++++++++++++++++++ data/network/build.gradle.kts | 25 +++++++++++++++++++++++++ data/repository/build.gradle.kts | 20 ++++++++++++++++++++ presenter/features/build.gradle.kts | 21 +++++++++++++++++++++ presenter/runtime/build.gradle.kts | 20 ++++++++++++++++++++ settings.gradle.kts | 20 ++++++++++++++++++++ social/api/build.gradle.kts | 20 ++++++++++++++++++++ social/bluesky/build.gradle.kts | 20 ++++++++++++++++++++ social/mastodon/build.gradle.kts | 25 +++++++++++++++++++++++++ social/microblog/build.gradle.kts | 20 ++++++++++++++++++++ social/misskey/build.gradle.kts | 25 +++++++++++++++++++++++++ social/nostr/build.gradle.kts | 20 ++++++++++++++++++++ social/rss/build.gradle.kts | 20 ++++++++++++++++++++ social/vvo/build.gradle.kts | 20 ++++++++++++++++++++ social/xqt/build.gradle.kts | 20 ++++++++++++++++++++ ui/model/build.gradle.kts | 20 ++++++++++++++++++++ web/presenter-export/build.gradle.kts | 15 +++++++++++++++ 21 files changed, 438 insertions(+) create mode 100644 core/common/build.gradle.kts create mode 100644 core/deeplink/build.gradle.kts create mode 100644 core/model/build.gradle.kts create mode 100644 data/database/build.gradle.kts create mode 100644 data/datastore/build.gradle.kts create mode 100644 data/network/build.gradle.kts create mode 100644 data/repository/build.gradle.kts create mode 100644 presenter/features/build.gradle.kts create mode 100644 presenter/runtime/build.gradle.kts create mode 100644 social/api/build.gradle.kts create mode 100644 social/bluesky/build.gradle.kts create mode 100644 social/mastodon/build.gradle.kts create mode 100644 social/microblog/build.gradle.kts create mode 100644 social/misskey/build.gradle.kts create mode 100644 social/nostr/build.gradle.kts create mode 100644 social/rss/build.gradle.kts create mode 100644 social/vvo/build.gradle.kts create mode 100644 social/xqt/build.gradle.kts create mode 100644 ui/model/build.gradle.kts create mode 100644 web/presenter-export/build.gradle.kts diff --git a/core/common/build.gradle.kts b/core/common/build.gradle.kts new file mode 100644 index 0000000000..b8db2df29e --- /dev/null +++ b/core/common/build.gradle.kts @@ -0,0 +1,20 @@ +import dev.dimension.flare.buildlogic.FlarePlatform +import dev.dimension.flare.buildlogic.flare + +plugins { + id("dev.dimension.flare.multiplatform-library") + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) +} + +kotlin { + flare { + namespace = "dev.dimension.flare.core.common" + platforms( + FlarePlatform.ANDROID, + FlarePlatform.JVM, + FlarePlatform.IOS, + ) + } +} diff --git a/core/deeplink/build.gradle.kts b/core/deeplink/build.gradle.kts new file mode 100644 index 0000000000..7b1e01caa1 --- /dev/null +++ b/core/deeplink/build.gradle.kts @@ -0,0 +1,20 @@ +import dev.dimension.flare.buildlogic.FlarePlatform +import dev.dimension.flare.buildlogic.flare + +plugins { + id("dev.dimension.flare.multiplatform-library") + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) +} + +kotlin { + flare { + namespace = "dev.dimension.flare.core.deeplink" + platforms( + FlarePlatform.ANDROID, + FlarePlatform.JVM, + FlarePlatform.IOS, + ) + } +} diff --git a/core/model/build.gradle.kts b/core/model/build.gradle.kts new file mode 100644 index 0000000000..b6e03e9648 --- /dev/null +++ b/core/model/build.gradle.kts @@ -0,0 +1,20 @@ +import dev.dimension.flare.buildlogic.FlarePlatform +import dev.dimension.flare.buildlogic.flare + +plugins { + id("dev.dimension.flare.multiplatform-library") + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) +} + +kotlin { + flare { + namespace = "dev.dimension.flare.core.model" + platforms( + FlarePlatform.ANDROID, + FlarePlatform.JVM, + FlarePlatform.IOS, + ) + } +} diff --git a/data/database/build.gradle.kts b/data/database/build.gradle.kts new file mode 100644 index 0000000000..9c95648367 --- /dev/null +++ b/data/database/build.gradle.kts @@ -0,0 +1,27 @@ +import dev.dimension.flare.buildlogic.FlarePlatform +import dev.dimension.flare.buildlogic.flare + +plugins { + id("dev.dimension.flare.multiplatform-library") + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.ksp) + alias(libs.plugins.room) +} + +kotlin { + flare { + namespace = "dev.dimension.flare.data.database" + platforms( + FlarePlatform.ANDROID, + FlarePlatform.JVM, + FlarePlatform.IOS, + ) + ksp(libs.room.compiler) + } +} + +room3 { + schemaDirectory("$projectDir/schemas") +} diff --git a/data/datastore/build.gradle.kts b/data/datastore/build.gradle.kts new file mode 100644 index 0000000000..d59a6b5c7d --- /dev/null +++ b/data/datastore/build.gradle.kts @@ -0,0 +1,20 @@ +import dev.dimension.flare.buildlogic.FlarePlatform +import dev.dimension.flare.buildlogic.flare + +plugins { + id("dev.dimension.flare.multiplatform-library") + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) +} + +kotlin { + flare { + namespace = "dev.dimension.flare.data.datastore" + platforms( + FlarePlatform.ANDROID, + FlarePlatform.JVM, + FlarePlatform.IOS, + ) + } +} diff --git a/data/network/build.gradle.kts b/data/network/build.gradle.kts new file mode 100644 index 0000000000..173a867080 --- /dev/null +++ b/data/network/build.gradle.kts @@ -0,0 +1,25 @@ +import dev.dimension.flare.buildlogic.FlarePlatform +import dev.dimension.flare.buildlogic.flare + +plugins { + id("dev.dimension.flare.multiplatform-library") + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.ktorfit) +} + +kotlin { + flare { + namespace = "dev.dimension.flare.data.network" + platforms( + FlarePlatform.ANDROID, + FlarePlatform.JVM, + FlarePlatform.IOS, + ) + } +} + +ktorfit { + compilerPluginVersion.set("2.3.3") +} diff --git a/data/repository/build.gradle.kts b/data/repository/build.gradle.kts new file mode 100644 index 0000000000..d0bd801ea4 --- /dev/null +++ b/data/repository/build.gradle.kts @@ -0,0 +1,20 @@ +import dev.dimension.flare.buildlogic.FlarePlatform +import dev.dimension.flare.buildlogic.flare + +plugins { + id("dev.dimension.flare.multiplatform-library") + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) +} + +kotlin { + flare { + namespace = "dev.dimension.flare.data.repository" + platforms( + FlarePlatform.ANDROID, + FlarePlatform.JVM, + FlarePlatform.IOS, + ) + } +} diff --git a/presenter/features/build.gradle.kts b/presenter/features/build.gradle.kts new file mode 100644 index 0000000000..0a2aaf87eb --- /dev/null +++ b/presenter/features/build.gradle.kts @@ -0,0 +1,21 @@ +import dev.dimension.flare.buildlogic.FlarePlatform +import dev.dimension.flare.buildlogic.flare + +plugins { + id("dev.dimension.flare.multiplatform-library") + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.compose.compiler) +} + +kotlin { + flare { + namespace = "dev.dimension.flare.presenter.features" + platforms( + FlarePlatform.ANDROID, + FlarePlatform.JVM, + FlarePlatform.IOS, + ) + } +} diff --git a/presenter/runtime/build.gradle.kts b/presenter/runtime/build.gradle.kts new file mode 100644 index 0000000000..6451b795b3 --- /dev/null +++ b/presenter/runtime/build.gradle.kts @@ -0,0 +1,20 @@ +import dev.dimension.flare.buildlogic.FlarePlatform +import dev.dimension.flare.buildlogic.flare + +plugins { + id("dev.dimension.flare.multiplatform-library") + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.compose.compiler) +} + +kotlin { + flare { + namespace = "dev.dimension.flare.presenter.runtime" + platforms( + FlarePlatform.ANDROID, + FlarePlatform.JVM, + FlarePlatform.IOS, + ) + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index dbd0b4321a..e3ccd93f68 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -26,4 +26,24 @@ include(":app") include(":shared") include(":compose-ui") include(":desktopApp") +include(":core:common") +include(":core:model") +include(":core:deeplink") +include(":ui:model") +include(":data:network") +include(":data:database") +include(":data:datastore") +include(":data:repository") +include(":social:api") +include(":social:microblog") +include(":social:mastodon") +include(":social:rss") +include(":social:misskey") +include(":social:bluesky") +include(":social:nostr") +include(":social:xqt") +include(":social:vvo") +include(":presenter:runtime") +include(":presenter:features") +include(":web:presenter-export") enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") diff --git a/social/api/build.gradle.kts b/social/api/build.gradle.kts new file mode 100644 index 0000000000..afa3f62576 --- /dev/null +++ b/social/api/build.gradle.kts @@ -0,0 +1,20 @@ +import dev.dimension.flare.buildlogic.FlarePlatform +import dev.dimension.flare.buildlogic.flare + +plugins { + id("dev.dimension.flare.multiplatform-library") + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) +} + +kotlin { + flare { + namespace = "dev.dimension.flare.social.api" + platforms( + FlarePlatform.ANDROID, + FlarePlatform.JVM, + FlarePlatform.IOS, + ) + } +} diff --git a/social/bluesky/build.gradle.kts b/social/bluesky/build.gradle.kts new file mode 100644 index 0000000000..c5ad0db639 --- /dev/null +++ b/social/bluesky/build.gradle.kts @@ -0,0 +1,20 @@ +import dev.dimension.flare.buildlogic.FlarePlatform +import dev.dimension.flare.buildlogic.flare + +plugins { + id("dev.dimension.flare.multiplatform-library") + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) +} + +kotlin { + flare { + namespace = "dev.dimension.flare.social.bluesky" + platforms( + FlarePlatform.ANDROID, + FlarePlatform.JVM, + FlarePlatform.IOS, + ) + } +} diff --git a/social/mastodon/build.gradle.kts b/social/mastodon/build.gradle.kts new file mode 100644 index 0000000000..df5ca716f8 --- /dev/null +++ b/social/mastodon/build.gradle.kts @@ -0,0 +1,25 @@ +import dev.dimension.flare.buildlogic.FlarePlatform +import dev.dimension.flare.buildlogic.flare + +plugins { + id("dev.dimension.flare.multiplatform-library") + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.ktorfit) +} + +kotlin { + flare { + namespace = "dev.dimension.flare.social.mastodon" + platforms( + FlarePlatform.ANDROID, + FlarePlatform.JVM, + FlarePlatform.IOS, + ) + } +} + +ktorfit { + compilerPluginVersion.set("2.3.3") +} diff --git a/social/microblog/build.gradle.kts b/social/microblog/build.gradle.kts new file mode 100644 index 0000000000..e0b0889f82 --- /dev/null +++ b/social/microblog/build.gradle.kts @@ -0,0 +1,20 @@ +import dev.dimension.flare.buildlogic.FlarePlatform +import dev.dimension.flare.buildlogic.flare + +plugins { + id("dev.dimension.flare.multiplatform-library") + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) +} + +kotlin { + flare { + namespace = "dev.dimension.flare.social.microblog" + platforms( + FlarePlatform.ANDROID, + FlarePlatform.JVM, + FlarePlatform.IOS, + ) + } +} diff --git a/social/misskey/build.gradle.kts b/social/misskey/build.gradle.kts new file mode 100644 index 0000000000..6210f9d85b --- /dev/null +++ b/social/misskey/build.gradle.kts @@ -0,0 +1,25 @@ +import dev.dimension.flare.buildlogic.FlarePlatform +import dev.dimension.flare.buildlogic.flare + +plugins { + id("dev.dimension.flare.multiplatform-library") + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.ktorfit) +} + +kotlin { + flare { + namespace = "dev.dimension.flare.social.misskey" + platforms( + FlarePlatform.ANDROID, + FlarePlatform.JVM, + FlarePlatform.IOS, + ) + } +} + +ktorfit { + compilerPluginVersion.set("2.3.3") +} diff --git a/social/nostr/build.gradle.kts b/social/nostr/build.gradle.kts new file mode 100644 index 0000000000..964fc5af34 --- /dev/null +++ b/social/nostr/build.gradle.kts @@ -0,0 +1,20 @@ +import dev.dimension.flare.buildlogic.FlarePlatform +import dev.dimension.flare.buildlogic.flare + +plugins { + id("dev.dimension.flare.multiplatform-library") + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) +} + +kotlin { + flare { + namespace = "dev.dimension.flare.social.nostr" + platforms( + FlarePlatform.ANDROID, + FlarePlatform.JVM, + FlarePlatform.IOS, + ) + } +} diff --git a/social/rss/build.gradle.kts b/social/rss/build.gradle.kts new file mode 100644 index 0000000000..216d3a78ac --- /dev/null +++ b/social/rss/build.gradle.kts @@ -0,0 +1,20 @@ +import dev.dimension.flare.buildlogic.FlarePlatform +import dev.dimension.flare.buildlogic.flare + +plugins { + id("dev.dimension.flare.multiplatform-library") + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) +} + +kotlin { + flare { + namespace = "dev.dimension.flare.social.rss" + platforms( + FlarePlatform.ANDROID, + FlarePlatform.JVM, + FlarePlatform.IOS, + ) + } +} diff --git a/social/vvo/build.gradle.kts b/social/vvo/build.gradle.kts new file mode 100644 index 0000000000..773c8c8ce8 --- /dev/null +++ b/social/vvo/build.gradle.kts @@ -0,0 +1,20 @@ +import dev.dimension.flare.buildlogic.FlarePlatform +import dev.dimension.flare.buildlogic.flare + +plugins { + id("dev.dimension.flare.multiplatform-library") + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) +} + +kotlin { + flare { + namespace = "dev.dimension.flare.social.vvo" + platforms( + FlarePlatform.ANDROID, + FlarePlatform.JVM, + FlarePlatform.IOS, + ) + } +} diff --git a/social/xqt/build.gradle.kts b/social/xqt/build.gradle.kts new file mode 100644 index 0000000000..2a9625fe3c --- /dev/null +++ b/social/xqt/build.gradle.kts @@ -0,0 +1,20 @@ +import dev.dimension.flare.buildlogic.FlarePlatform +import dev.dimension.flare.buildlogic.flare + +plugins { + id("dev.dimension.flare.multiplatform-library") + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) +} + +kotlin { + flare { + namespace = "dev.dimension.flare.social.xqt" + platforms( + FlarePlatform.ANDROID, + FlarePlatform.JVM, + FlarePlatform.IOS, + ) + } +} diff --git a/ui/model/build.gradle.kts b/ui/model/build.gradle.kts new file mode 100644 index 0000000000..80b9ea7cc3 --- /dev/null +++ b/ui/model/build.gradle.kts @@ -0,0 +1,20 @@ +import dev.dimension.flare.buildlogic.FlarePlatform +import dev.dimension.flare.buildlogic.flare + +plugins { + id("dev.dimension.flare.multiplatform-library") + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) +} + +kotlin { + flare { + namespace = "dev.dimension.flare.ui.model" + platforms( + FlarePlatform.ANDROID, + FlarePlatform.JVM, + FlarePlatform.IOS, + ) + } +} diff --git a/web/presenter-export/build.gradle.kts b/web/presenter-export/build.gradle.kts new file mode 100644 index 0000000000..af05b4bd29 --- /dev/null +++ b/web/presenter-export/build.gradle.kts @@ -0,0 +1,15 @@ +import dev.dimension.flare.buildlogic.FlarePlatform +import dev.dimension.flare.buildlogic.flare + +plugins { + id("dev.dimension.flare.multiplatform-library") + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) +} + +kotlin { + flare { + namespace = "dev.dimension.flare.web.presenter.export" + platforms(FlarePlatform.WEB) + } +} From 7644a09714cda0c95c91e7b55dad13e1fa8f065b Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 17:59:51 +0900 Subject: [PATCH 002/261] Move shared implementation into presenter features --- app/build.gradle.kts | 2 +- .../buildlogic/FlareConventionSupport.kt | 2 +- compose-ui/build.gradle.kts | 6 +- desktopApp/build.gradle.kts | 2 +- presenter/features/build.gradle.kts | 116 +++++++++++++++ .../10.json | 0 .../3.json | 0 .../4.json | 0 .../5.json | 0 .../6.json | 0 .../7.json | 0 .../8.json | 0 .../9.json | 0 .../dimension/flare/DatabaseHelper.android.kt | 0 .../image/AndroidImageCompressorTest.kt | 0 .../network/rss/CharsetDecoder.androidJvm.kt | 0 .../ui/presenter/PresenterBase.androidJvm.kt | 0 .../flare/ui/render/UiDateTime.androidJvm.kt | 0 .../flare/ui/render/UiRichText.androidJvm.kt | 0 .../src/androidMain/AndroidManifest.xml | 0 .../flare/common/BuildConfig.android.kt | 0 .../flare/common/FileItem.android.kt | 0 .../dimension/flare/common/Locale.android.kt | 0 .../data/database/DriverFactory.android.kt | 0 .../data/io/AndroidPlatformPathProducer.kt | 0 .../data/network/HttpClientEngine.android.kt | 0 .../nostr/AmberSignerBridge.android.kt | 0 .../repository/DraftMediaStore.android.kt | 0 .../flare/di/PlatformModule.android.kt | 0 .../shared/image/AndroidImageCompressor.kt | 0 .../ui/common/AmberSignerLauncherBinding.kt | 0 .../flare/ui/humanizer/AndroidFormatter.kt | 0 .../dimension/flare/common/AppleOnDeviceAI.kt | 0 .../flare/common/BuildConfig.apple.kt | 0 .../dimension/flare/common/FileItem.apple.kt | 0 .../dimension/flare/common/Locale.apple.kt | 0 .../dimension/flare/common/SwiftOnDeviceAI.kt | 0 .../data/database/DriverFactory.apple.kt | 0 .../data/io/ApplePlatformPathProducer.kt | 0 ...melinePresentationAppearancePatchHelper.kt | 0 .../model/tab/TimelineTabItemV2Helpers.kt | 0 .../data/network/HttpClientEngine.apple.kt | 0 .../network/nostr/AmberSignerBridge.apple.kt | 0 .../data/network/rss/CharsetDecoder.apple.kt | 0 .../data/repository/DraftMediaStore.apple.kt | 0 .../flare/di/PlatformModule.apple.kt | 0 .../flare/shared/image/IosImageCompressor.kt | 0 .../flare/ui/humanizer/AppleFormatter.kt | 0 .../flare/ui/presenter/PresenterBase.apple.kt | 0 .../flare/ui/render/UiDateTime.apple.kt | 0 .../flare/ui/render/UiRichText.apple.kt | 0 .../dimension/flare/DatabaseHelper.apple.kt | 0 .../dimension/flare/TestFileHelper.apple.kt | 0 .../SerializationFormatBenchmarkAppleTest.kt | 0 .../shared/image/IosImageCompressorTest.kt | 0 .../flare/common/BasePagingSource.kt | 0 .../flare/common/BaseRemoteMediator.kt | 0 .../dev/dimension/flare/common/BuildConfig.kt | 0 .../dev/dimension/flare/common/Cacheable.kt | 0 .../dev/dimension/flare/common/FileItem.kt | 0 .../flare/common/FileNameSanitizer.kt | 0 .../dev/dimension/flare/common/FileType.kt | 0 .../dev/dimension/flare/common/FlowExt.kt | 0 .../flare/common/ImmutableListWrapper.kt | 0 .../flare/common/InAppNotification.kt | 0 .../kotlin/dev/dimension/flare/common/JSON.kt | 0 .../flare/common/LazyPagingItemsExt.kt | 0 .../dev/dimension/flare/common/Locale.kt | 0 .../dev/dimension/flare/common/MimeTypes.kt | 0 .../dev/dimension/flare/common/OnDeviceAI.kt | 0 .../dev/dimension/flare/common/PagingState.kt | 0 .../dev/dimension/flare/common/Protobuf.kt | 0 .../flare/common/ProtobufSerializer.kt | 0 .../flare/common/SerializableImmutableList.kt | 0 .../flare/common/SnowflakeIdGenerator.kt | 0 .../flare/common/SwitchingServiceManager.kt | 0 .../kotlin/dev/dimension/flare/common/XML.kt | 0 .../flare/common/deeplink/DeepLinkMapping.kt | 0 .../flare/common/deeplink/DeepLinkMatcher.kt | 0 .../flare/common/deeplink/DeepLinkPattern.kt | 0 .../flare/common/deeplink/DeepLinkRequest.kt | 0 .../flare/common/deeplink/KeyDecoder.kt | 0 .../flare/data/database/DriverFactory.kt | 0 .../flare/data/database/ProvideDatabase.kt | 0 .../database/adapter/AccountTypeConverter.kt | 0 .../database/adapter/MicroBlogKeyConverter.kt | 0 .../database/adapter/PlatformTypeConverter.kt | 0 .../adapter/SubscriptionTypeConverter.kt | 0 .../flare/data/database/app/AppDatabase.kt | 0 .../flare/data/database/app/dao/AccountDao.kt | 0 .../data/database/app/dao/ApplicationDao.kt | 0 .../flare/data/database/app/dao/DraftDao.kt | 0 .../data/database/app/dao/KeywordFilterDao.kt | 0 .../data/database/app/dao/RssSourceDao.kt | 0 .../data/database/app/dao/SearchHistoryDao.kt | 0 .../database/app/model/AppDatabaseExport.kt | 0 .../data/database/app/model/DbAccount.kt | 0 .../data/database/app/model/DbApplication.kt | 0 .../flare/data/database/app/model/DbDraft.kt | 0 .../database/app/model/DbKeywordFilter.kt | 0 .../data/database/app/model/DbRssSources.kt | 0 .../database/app/model/DbSearchHistory.kt | 0 .../data/database/cache/CacaheDatabase.kt | 0 .../flare/data/database/cache/dao/EmojiDao.kt | 0 .../flare/data/database/cache/dao/ListDao.kt | 0 .../data/database/cache/dao/MessageDao.kt | 0 .../database/cache/dao/PagingTimelineDao.kt | 0 .../data/database/cache/dao/StatusDao.kt | 0 .../database/cache/dao/StatusReferenceDao.kt | 0 .../data/database/cache/dao/TranslationDao.kt | 0 .../flare/data/database/cache/dao/UserDao.kt | 0 .../data/database/cache/mapper/Bluesky.kt | 0 .../data/database/cache/mapper/Microblog.kt | 0 .../flare/data/database/cache/mapper/User.kt | 0 .../flare/data/database/cache/mapper/XQT.kt | 0 .../database/cache/model/DbDirectMessage.kt | 0 .../data/database/cache/model/DbEmoji.kt | 0 .../flare/data/database/cache/model/DbList.kt | 0 .../database/cache/model/DbPagingTimeline.kt | 0 .../data/database/cache/model/DbStatus.kt | 0 .../database/cache/model/DbStatusReference.kt | 0 .../database/cache/model/DbTranslation.kt | 0 .../flare/data/database/cache/model/DbUser.kt | 0 .../database/cache/model/DbUserHistory.kt | 0 .../data/database/cache/model/EmojiContent.kt | 0 .../cache/model/TranslationDisplay.kt | 0 .../datasource/bluesky/BlueskyDataSource.kt | 0 .../bluesky/BlueskyDirectMessageLoader.kt | 0 .../datasource/bluesky/BlueskyFeedLoader.kt | 0 .../datasource/bluesky/BlueskyListLoader.kt | 0 .../bluesky/BlueskyListMemberLoader.kt | 0 .../data/datasource/bluesky/BlueskyLoader.kt | 0 .../bluesky/BookmarkTimelineRemoteMediator.kt | 0 .../datasource/bluesky/FansPagingSource.kt | 0 .../bluesky/FeedTimelineRemoteMediator.kt | 0 .../bluesky/FollowingPagingSource.kt | 0 .../bluesky/HomeTimelineRemoteMediator.kt | 0 .../bluesky/ListTimelineRemoteMediator.kt | 0 .../bluesky/NotificationRemoteMediator.kt | 0 .../bluesky/SearchStatusRemoteMediator.kt | 0 .../bluesky/SearchUserPagingSource.kt | 0 .../bluesky/StatusDetailRemoteMediator.kt | 0 .../bluesky/TrendsUserPagingSource.kt | 0 .../UserLikesTimelineRemoteMediator.kt | 0 .../bluesky/UserTimelineRemoteMediator.kt | 0 .../GuestDiscoverStatusPagingSource.kt | 0 .../guest/mastodon/GuestMastodonDataSource.kt | 0 .../guest/mastodon/GuestMastodonLoader.kt | 0 .../GuestPublicTimelineRemoteMediator.kt | 0 .../mastodon/GuestSearchStatusPagingSource.kt | 0 .../mastodon/GuestStatusDetailPagingSource.kt | 0 .../mastodon/GuestTimelinePagingSource.kt | 0 .../mastodon/GuestTrendsRemoteMediator.kt | 0 .../mastodon/GuestUserTimelinePagingSource.kt | 0 .../BookmarkTimelineRemoteMediator.kt | 0 .../mastodon/DiscoverStatusRemoteMediator.kt | 0 .../FavouriteTimelineRemoteMediator.kt | 0 .../mastodon/HomeTimelineRemoteMediator.kt | 0 .../mastodon/ListTimelineRemoteMediator.kt | 0 .../datasource/mastodon/MastodonDataSource.kt | 0 .../mastodon/MastodonFansPagingSource.kt | 0 .../mastodon/MastodonFollowingPagingSource.kt | 0 .../datasource/mastodon/MastodonListLoader.kt | 0 .../mastodon/MastodonListMemberLoader.kt | 0 .../datasource/mastodon/MastodonLoader.kt | 0 .../mastodon/MentionRemoteMediator.kt | 0 .../mastodon/NotificationRemoteMediator.kt | 0 .../mastodon/PublicTimelineRemoteMediator.kt | 0 .../mastodon/SearchStatusPagingSource.kt | 0 .../mastodon/SearchUserPagingSource.kt | 0 .../mastodon/StatusDetailRemoteMediator.kt | 0 .../mastodon/TrendHashtagPagingSource.kt | 0 .../datasource/mastodon/TrendsUserLoader.kt | 0 .../mastodon/UserTimelineRemoteMediator.kt | 0 .../data/datasource/microblog/ActionMenu.kt | 0 .../AuthenticatedMicroblogDataSource.kt | 0 .../datasource/microblog/ComposeConfig.kt | 0 .../data/datasource/microblog/ComposeData.kt | 0 .../data/datasource/microblog/ComposeType.kt | 0 .../datasource/microblog/DatabaseUpdater.kt | 0 .../microblog/DirectMessageDataSource.kt | 0 .../microblog/MicroblogDataSource.kt | 0 .../microblog/MixedRemoteMediator.kt | 0 .../microblog/NotificationFilter.kt | 0 .../flare/data/datasource/microblog/Paging.kt | 0 .../data/datasource/microblog/PostEvent.kt | 0 .../data/datasource/microblog/ProfileTab.kt | 0 .../microblog/ReactionDataSource.kt | 0 .../RecommendInstancePagingSource.kt | 0 .../microblog/datasource/ListDataSource.kt | 0 .../datasource/NotificationDataSource.kt | 0 .../PinnableTimelineTabDataSource.kt | 0 .../microblog/datasource/PostDataSource.kt | 0 .../datasource/RelationDataSource.kt | 0 .../TimelineTabConfigurationDataSource.kt | 0 .../microblog/datasource/UserDataSource.kt | 0 .../microblog/handler/DirectMessageHandler.kt | 0 .../microblog/handler/EmojiHandler.kt | 0 .../microblog/handler/ListHandler.kt | 0 .../microblog/handler/ListMemberHandler.kt | 0 .../microblog/handler/NotificationHandler.kt | 0 .../microblog/handler/PostEventHandler.kt | 0 .../microblog/handler/PostHandler.kt | 0 .../microblog/handler/RelationHandler.kt | 0 .../microblog/handler/UserHandler.kt | 0 .../datasource/microblog/list/ListMetaData.kt | 0 .../microblog/list/ListMetaDataType.kt | 0 .../microblog/loader/DirectMessageLoader.kt | 0 .../microblog/loader/EmojiLoader.kt | 0 .../datasource/microblog/loader/ListLoader.kt | 0 .../microblog/loader/ListMemberLoader.kt | 0 .../microblog/loader/NotificationLoader.kt | 0 .../datasource/microblog/loader/PostLoader.kt | 0 .../microblog/loader/RelationLoader.kt | 0 .../datasource/microblog/loader/UserLoader.kt | 0 .../paging/BasePagingRemoteMediator.kt | 0 .../microblog/paging/CacheableRemoteLoader.kt | 0 .../microblog/paging/PagingRequest.kt | 0 .../microblog/paging/PagingResult.kt | 0 .../microblog/paging/RemoteLoader.kt | 0 .../microblog/paging/SortIdProvider.kt | 0 .../microblog/paging/TimelinePagingMapper.kt | 0 .../paging/TimelineRemoteMediator.kt | 0 .../misskey/AntennasListPagingSource.kt | 0 .../misskey/AntennasTimelineRemoteMediator.kt | 0 .../misskey/ChannelTimelineRemoteMediator.kt | 0 .../misskey/DiscoverStatusRemoteMediator.kt | 0 .../datasource/misskey/FansPagingSource.kt | 0 .../FavouriteTimelineRemoteMediator.kt | 0 .../misskey/FollowingPagingSource.kt | 0 .../misskey/HomeTimelineRemoteMediator.kt | 0 .../misskey/HybridTimelineRemoteMediator.kt | 0 .../misskey/ListTimelineRemoteMediator.kt | 0 .../misskey/LocalTimelineRemoteMediator.kt | 0 .../misskey/MentionTimelineRemoteMediator.kt | 0 .../misskey/MisskeyChannelLoader.kt | 0 .../datasource/misskey/MisskeyDataSource.kt | 0 .../datasource/misskey/MisskeyListLoader.kt | 0 .../misskey/MisskeyListMemberLoader.kt | 0 .../data/datasource/misskey/MisskeyLoader.kt | 0 .../misskey/NotificationRemoteMediator.kt | 0 .../misskey/PublicTimelineRemoteMediator.kt | 0 .../misskey/SearchStatusRemoteMediator.kt | 0 .../misskey/SearchUserPagingSource.kt | 0 .../misskey/StatusDetailRemoteMediator.kt | 0 .../misskey/TrendHashtagPagingSource.kt | 0 .../misskey/TrendsUserPagingSource.kt | 0 .../misskey/UserTimelineRemoteMediator.kt | 0 .../flare/data/datasource/nostr/NostrCache.kt | 0 .../data/datasource/nostr/NostrDataSource.kt | 0 .../data/datasource/nostr/NostrLoader.kt | 0 .../nostr/StatusDetailRemoteMediator.kt | 0 .../datasource/pleroma/PleromaDataSource.kt | 0 .../data/datasource/rss/RssDataSource.kt | 0 .../rss/RssTimelineRemoteMediator.kt | 0 .../vvo/CommentChildRemoteMediator.kt | 0 .../datasource/vvo/CommentPagingSource.kt | 0 .../vvo/DiscoverStatusRemoteMediator.kt | 0 .../data/datasource/vvo/FansPagingSource.kt | 0 .../datasource/vvo/FavouriteRemoteMediator.kt | 0 .../datasource/vvo/FollowingPagingSource.kt | 0 .../vvo/HomeTimelineRemoteMediator.kt | 0 .../data/datasource/vvo/LikePagingSource.kt | 0 .../data/datasource/vvo/LikeRemoteMediator.kt | 0 .../datasource/vvo/MentionRemoteMediator.kt | 0 .../vvo/SearchStatusRemoteMediator.kt | 0 .../datasource/vvo/SearchUserPagingSource.kt | 0 .../vvo/StatusCommentRemoteMediator.kt | 0 .../vvo/StatusRepostRemoteMediator.kt | 0 .../vvo/TrendHashtagPagingSource.kt | 0 .../vvo/UserTimelineRemoteMediator.kt | 0 .../data/datasource/vvo/VVODataSource.kt | 0 .../flare/data/datasource/vvo/VVOLoader.kt | 0 .../vvo/VVONotificationBadgeStore.kt | 0 .../xqt/DeviceFollowRemoteMediator.kt | 0 .../data/datasource/xqt/FansPagingSource.kt | 0 .../datasource/xqt/FollowingPagingSource.kt | 0 .../xqt/HomeTimelineRemoteMediator.kt | 0 .../xqt/ListTimelineRemoteMediator.kt | 0 .../datasource/xqt/MentionRemoteMediator.kt | 0 .../xqt/NotificationPagingSource.kt | 0 .../xqt/SearchStatusPagingSource.kt | 0 .../datasource/xqt/SearchUserPagingSource.kt | 0 .../xqt/StatusDetailRemoteMediator.kt | 0 .../xqt/TrendHashtagPagingSource.kt | 0 .../datasource/xqt/TrendsUserPagingSource.kt | 0 .../flare/data/datasource/xqt/User.kt | 0 .../xqt/UserLikesTimelineRemoteMediator.kt | 0 .../xqt/UserMediaTimelineRemoteMediator.kt | 0 .../xqt/UserRepliesTimelineRemoteMediator.kt | 0 .../xqt/UserTimelineRemoteMediator.kt | 0 .../data/datasource/xqt/XQTDataSource.kt | 0 .../datasource/xqt/XQTDirectMessageLoader.kt | 0 .../data/datasource/xqt/XQTListLoader.kt | 0 .../datasource/xqt/XQTListMemberLoader.kt | 0 .../flare/data/datasource/xqt/XQTLoader.kt | 0 .../flare/data/datastore/AppDataStore.kt | 0 .../data/datastore/model/AiPromptDefaults.kt | 0 .../flare/data/datastore/model/AppSettings.kt | 0 .../data/datastore/model/ComposeConfigData.kt | 0 .../flare/data/datastore/model/FlareConfig.kt | 0 .../flare/data/io/PlatformPathProducer.kt | 0 .../flare/data/model/AppearanceSettings.kt | 0 .../dimension/flare/data/model/DataExport.kt | 0 .../dimension/flare/data/model/IconType.kt | 0 .../flare/data/model/SettingsExport.kt | 0 .../dimension/flare/data/model/TabSettings.kt | 0 .../data/model/appearance/AppearanceBag.kt | 0 .../data/model/appearance/AppearanceKey.kt | 0 .../data/model/appearance/AppearanceKeys.kt | 0 .../model/appearance/AppearanceMigration.kt | 0 .../data/model/appearance/AppearanceModels.kt | 0 .../data/model/appearance/AppearancePatch.kt | 0 .../model/appearance/AppearanceSynthesizer.kt | 0 .../data/model/tab/TabSettingsMigration.kt | 0 .../flare/data/model/tab/Timeline.kt | 0 .../dimension/flare/data/network/Ktorfit.kt | 0 .../data/network/ai/AiCompletionService.kt | 0 .../flare/data/network/ai/OpenAIService.kt | 0 .../data/network/bluesky/BlueskyAuthPlugin.kt | 0 .../bluesky/BlueskyPlatformDetector.kt | 0 .../data/network/bluesky/BlueskyService.kt | 0 .../data/network/bluesky/model/DidDoc.kt | 0 .../network/mastodon/GuestMastodonService.kt | 0 .../network/mastodon/JoinMastodonService.kt | 0 .../network/mastodon/MastodonException.kt | 0 .../network/mastodon/MastodonOAuthService.kt | 0 .../mastodon/MastodonPlatformDetector.kt | 0 .../data/network/mastodon/MastodonService.kt | 0 .../network/mastodon/api/AccountResources.kt | 0 .../mastodon/api/FriendshipResources.kt | 0 .../network/mastodon/api/InstanceResources.kt | 0 .../mastodon/api/JoinMastodonResources.kt | 0 .../network/mastodon/api/ListsResources.kt | 0 .../network/mastodon/api/LookupResources.kt | 0 .../mastodon/api/MastodonOAuthResources.kt | 0 .../network/mastodon/api/MastodonResources.kt | 0 .../network/mastodon/api/SearchResources.kt | 0 .../network/mastodon/api/StatusResources.kt | 0 .../network/mastodon/api/TimelineResources.kt | 0 .../network/mastodon/api/TrendsResources.kt | 0 .../network/mastodon/api/model/Account.kt | 0 .../network/mastodon/api/model/Application.kt | 0 .../network/mastodon/api/model/Attachment.kt | 0 .../data/network/mastodon/api/model/Card.kt | 0 .../network/mastodon/api/model/Context.kt | 0 .../api/model/CreateApplicationResponse.kt | 0 .../data/network/mastodon/api/model/Emoji.kt | 0 .../mastodon/api/model/EmojiReaction.kt | 0 .../data/network/mastodon/api/model/Field.kt | 0 .../network/mastodon/api/model/Hashtag.kt | 0 .../network/mastodon/api/model/History.kt | 0 .../mastodon/api/model/InstanceInfoV1.kt | 0 .../mastodon/api/model/MastodonAuthScope.kt | 0 .../api/model/MastodonInstanceElement.kt | 0 .../mastodon/api/model/MastodonList.kt | 0 .../mastodon/api/model/MastodonPaging.kt | 0 .../network/mastodon/api/model/MediaType.kt | 0 .../network/mastodon/api/model/Mention.kt | 0 .../data/network/mastodon/api/model/Meta.kt | 0 .../mastodon/api/model/Notification.kt | 0 .../data/network/mastodon/api/model/Option.kt | 0 .../network/mastodon/api/model/Original.kt | 0 .../data/network/mastodon/api/model/Poll.kt | 0 .../mastodon/api/model/PostAccounts.kt | 0 .../network/mastodon/api/model/PostList.kt | 0 .../network/mastodon/api/model/PostPoll.kt | 0 .../network/mastodon/api/model/PostReport.kt | 0 .../network/mastodon/api/model/PostStatus.kt | 0 .../network/mastodon/api/model/PostVote.kt | 0 .../api/model/RelationshipResponse.kt | 0 .../api/model/RequestTokenResponse.kt | 0 .../mastodon/api/model/SearchResult.kt | 0 .../network/mastodon/api/model/SearchType.kt | 0 .../data/network/mastodon/api/model/Small.kt | 0 .../data/network/mastodon/api/model/Source.kt | 0 .../data/network/mastodon/api/model/Status.kt | 0 .../data/network/mastodon/api/model/Tag.kt | 0 .../data/network/mastodon/api/model/Trend.kt | 0 .../mastodon/api/model/UploadResponse.kt | 0 .../api/model/VerifyCredentialsResponse.kt | 0 .../network/mastodon/api/model/Visibility.kt | 0 .../network/misskey/JoinMisskeyService.kt | 0 .../misskey/MisskeyAuthorizationPlugin.kt | 0 .../network/misskey/MisskeyOauthService.kt | 0 .../misskey/MisskeyPlatformDetector.kt | 0 .../data/network/misskey/MisskeyService.kt | 0 .../data/network/misskey/api/AccountApi.kt | 0 .../data/network/misskey/api/AdminApi.kt | 0 .../data/network/misskey/api/AntennasApi.kt | 0 .../flare/data/network/misskey/api/AppApi.kt | 0 .../flare/data/network/misskey/api/AuthApi.kt | 0 .../data/network/misskey/api/AuthResources.kt | 0 .../data/network/misskey/api/ChannelsApi.kt | 0 .../data/network/misskey/api/ChartsApi.kt | 0 .../flare/data/network/misskey/api/ClipApi.kt | 0 .../data/network/misskey/api/ClipsApi.kt | 0 .../data/network/misskey/api/DefaultApi.kt | 0 .../data/network/misskey/api/DriveApi.kt | 0 .../data/network/misskey/api/FederationApi.kt | 0 .../data/network/misskey/api/FlashApi.kt | 0 .../data/network/misskey/api/FlashsApi.kt | 0 .../data/network/misskey/api/FollowingApi.kt | 0 .../data/network/misskey/api/GalleryApi.kt | 0 .../data/network/misskey/api/HashtagsApi.kt | 0 .../data/network/misskey/api/ListsApi.kt | 0 .../flare/data/network/misskey/api/MetaApi.kt | 0 .../misskey/api/MisskeyInstanceAppApi.kt | 0 .../network/misskey/api/NonProductiveApi.kt | 0 .../data/network/misskey/api/NotesApi.kt | 0 .../network/misskey/api/NotificationsApi.kt | 0 .../data/network/misskey/api/PagesApi.kt | 0 .../data/network/misskey/api/ReactionsApi.kt | 0 .../network/misskey/api/ResetPasswordApi.kt | 0 .../flare/data/network/misskey/api/RoleApi.kt | 0 .../data/network/misskey/api/UsersApi.kt | 0 .../data/network/misskey/api/WebhooksApi.kt | 0 ...minAbuseReportResolverCreate200Response.kt | 0 .../AdminAbuseReportResolverCreateRequest.kt | 0 .../AdminAbuseReportResolverDeleteRequest.kt | 0 .../AdminAbuseReportResolverListRequest.kt | 0 .../AdminAbuseReportResolverUpdateRequest.kt | 0 .../AdminAbuseUserReports200ResponseInner.kt | 0 .../api/model/AdminAbuseUserReportsRequest.kt | 0 .../api/model/AdminAccountsCreateRequest.kt | 0 .../api/model/AdminAccountsDeleteRequest.kt | 0 .../misskey/api/model/AdminAdCreateRequest.kt | 0 .../misskey/api/model/AdminAdDeleteRequest.kt | 0 .../misskey/api/model/AdminAdListRequest.kt | 0 .../misskey/api/model/AdminAdUpdateRequest.kt | 0 .../AdminAnnouncementsCreate200Response.kt | 0 .../model/AdminAnnouncementsCreateRequest.kt | 0 .../AdminAnnouncementsList200ResponseInner.kt | 0 .../model/AdminAnnouncementsListRequest.kt | 0 .../model/AdminAnnouncementsUpdateRequest.kt | 0 .../api/model/AdminDriveFilesRequest.kt | 0 .../model/AdminDriveShowFile200Response.kt | 0 .../api/model/AdminDriveShowFileRequest.kt | 0 .../model/AdminEmojiAddAliasesBulkRequest.kt | 0 .../misskey/api/model/AdminEmojiAddRequest.kt | 0 .../api/model/AdminEmojiCopy200Response.kt | 0 .../api/model/AdminEmojiCopyRequest.kt | 0 .../api/model/AdminEmojiDeleteBulkRequest.kt | 0 .../model/AdminEmojiList200ResponseInner.kt | 0 .../AdminEmojiListRemote200ResponseInner.kt | 0 .../api/model/AdminEmojiListRemoteRequest.kt | 0 .../api/model/AdminEmojiListRequest.kt | 0 .../model/AdminEmojiSetCategoryBulkRequest.kt | 0 .../model/AdminEmojiSetLicenseBulkRequest.kt | 0 .../api/model/AdminEmojiUpdateRequest.kt | 0 .../AdminFederationDeleteAllFilesRequest.kt | 0 .../AdminFederationUpdateInstanceRequest.kt | 0 .../AdminInviteCreate200ResponseInner.kt | 0 .../api/model/AdminInviteCreateRequest.kt | 0 .../api/model/AdminInviteListRequest.kt | 0 .../misskey/api/model/AdminMeta200Response.kt | 0 .../api/model/AdminPromoCreateRequest.kt | 0 ...ueueDeliverDelayed200ResponseInnerInner.kt | 0 .../api/model/AdminQueuePromoteRequest.kt | 0 .../api/model/AdminQueueStats200Response.kt | 0 .../api/model/AdminRelaysAdd200Response.kt | 0 .../api/model/AdminRelaysAddRequest.kt | 0 .../model/AdminResetPassword200Response.kt | 0 .../AdminResolveAbuseUserReportRequest.kt | 0 .../api/model/AdminRolesAssignRequest.kt | 0 .../api/model/AdminRolesCreateRequest.kt | 0 .../api/model/AdminRolesDeleteRequest.kt | 0 .../api/model/AdminRolesUnassignRequest.kt | 0 .../AdminRolesUpdateDefaultPoliciesRequest.kt | 0 .../api/model/AdminRolesUpdateRequest.kt | 0 .../api/model/AdminRolesUsersRequest.kt | 0 .../api/model/AdminSendEmailRequest.kt | 0 .../api/model/AdminServerInfo200Response.kt | 0 .../model/AdminServerInfo200ResponseCpu.kt | 0 .../api/model/AdminServerInfo200ResponseFs.kt | 0 .../model/AdminServerInfo200ResponseMem.kt | 0 .../model/AdminServerInfo200ResponseNet.kt | 0 ...AdminShowModerationLogs200ResponseInner.kt | 0 .../api/model/AdminShowUsersRequest.kt | 0 .../api/model/AdminUpdateMetaRequest.kt | 0 .../api/model/AdminUpdateUserNoteRequest.kt | 0 .../model/Announcements200ResponseInner.kt | 0 .../misskey/api/model/AnnouncementsRequest.kt | 0 .../data/network/misskey/api/model/Antenna.kt | 0 .../api/model/AntennasCreateRequest.kt | 0 .../api/model/AntennasDeleteRequest.kt | 0 .../misskey/api/model/AntennasNotesRequest.kt | 0 .../api/model/AntennasUpdateRequest.kt | 0 .../network/misskey/api/model/ApGetRequest.kt | 0 .../misskey/api/model/ApShow200Response.kt | 0 .../api/model/ApShow200ResponseOneOf.kt | 0 .../api/model/ApShow200ResponseOneOf1.kt | 0 .../data/network/misskey/api/model/App.kt | 0 .../misskey/api/model/AppCreateRequest.kt | 0 .../misskey/api/model/AppShowRequest.kt | 0 .../model/AuthSessionGenerate200Response.kt | 0 .../api/model/AuthSessionGenerateRequest.kt | 0 .../api/model/AuthSessionShow200Response.kt | 0 .../api/model/AuthSessionShowRequest.kt | 0 .../model/AuthSessionUserkey200Response.kt | 0 .../api/model/AuthSessionUserkeyRequest.kt | 0 .../network/misskey/api/model/Blocking.kt | 0 .../misskey/api/model/BlockingListRequest.kt | 0 .../data/network/misskey/api/model/Channel.kt | 0 .../api/model/ChannelsCreateRequest.kt | 0 .../api/model/ChannelsFeaturedRequest.kt | 0 .../api/model/ChannelsFollowRequest.kt | 0 .../api/model/ChannelsFollowedRequest.kt | 0 .../api/model/ChannelsSearchRequest.kt | 0 .../api/model/ChannelsTimelineRequest.kt | 0 .../api/model/ChannelsUpdateRequest.kt | 0 .../api/model/ChartsActiveUsers200Response.kt | 0 .../api/model/ChartsActiveUsersRequest.kt | 0 .../api/model/ChartsApRequest200Response.kt | 0 .../api/model/ChartsDrive200Response.kt | 0 .../api/model/ChartsFederation200Response.kt | 0 .../api/model/ChartsInstance200Response.kt | 0 .../api/model/ChartsInstanceRequest.kt | 0 .../api/model/ChartsNotes200Response.kt | 0 .../api/model/ChartsUserDrive200Response.kt | 0 .../api/model/ChartsUserDriveRequest.kt | 0 .../model/ChartsUserFollowing200Response.kt | 0 .../api/model/ChartsUserNotes200Response.kt | 0 .../api/model/ChartsUserPv200Response.kt | 0 .../model/ChartsUserReactions200Response.kt | 0 .../api/model/ChartsUsers200Response.kt | 0 .../data/network/misskey/api/model/Clip.kt | 0 .../misskey/api/model/ClipsAddNoteRequest.kt | 0 .../misskey/api/model/ClipsCreateRequest.kt | 0 .../misskey/api/model/ClipsDeleteRequest.kt | 0 .../misskey/api/model/ClipsNotesRequest.kt | 0 .../misskey/api/model/ClipsUpdateRequest.kt | 0 .../misskey/api/model/Drive200Response.kt | 0 .../network/misskey/api/model/DriveFile.kt | 0 .../misskey/api/model/DriveFileProperties.kt | 0 .../model/DriveFilesAttachedNotesRequest.kt | 0 .../model/DriveFilesCheckExistenceRequest.kt | 0 .../api/model/DriveFilesFindRequest.kt | 0 .../misskey/api/model/DriveFilesRequest.kt | 0 .../api/model/DriveFilesUpdateRequest.kt | 0 .../model/DriveFilesUploadFromUrlRequest.kt | 0 .../network/misskey/api/model/DriveFolder.kt | 0 .../api/model/DriveFoldersCreateRequest.kt | 0 .../api/model/DriveFoldersDeleteRequest.kt | 0 .../api/model/DriveFoldersFindRequest.kt | 0 .../misskey/api/model/DriveFoldersRequest.kt | 0 .../api/model/DriveFoldersUpdateRequest.kt | 0 .../misskey/api/model/DriveStreamRequest.kt | 0 .../model/EmailAddressAvailable200Response.kt | 0 .../api/model/EmailAddressAvailableRequest.kt | 0 .../misskey/api/model/EmojiDetailed.kt | 0 .../network/misskey/api/model/EmojiRequest.kt | 0 .../network/misskey/api/model/EmojiSimple.kt | 0 .../misskey/api/model/Emojis200Response.kt | 0 .../misskey/api/model/EndpointRequest.kt | 0 .../data/network/misskey/api/model/Error.kt | 0 .../network/misskey/api/model/ErrorError.kt | 0 .../api/model/FederationFollowersRequest.kt | 0 .../misskey/api/model/FederationInstance.kt | 0 .../api/model/FederationInstancesRequest.kt | 0 .../FederationShowInstance200Response.kt | 0 .../api/model/FederationStatsRequest.kt | 0 .../misskey/api/model/FetchRssRequest.kt | 0 .../data/network/misskey/api/model/Flash.kt | 0 .../misskey/api/model/FlashCreateRequest.kt | 0 .../misskey/api/model/FlashDeleteRequest.kt | 0 .../api/model/FlashMyLikes200ResponseInner.kt | 0 .../misskey/api/model/FlashUpdateRequest.kt | 0 .../network/misskey/api/model/Following.kt | 0 .../FollowingRequestsList200ResponseInner.kt | 0 .../api/model/FollowingRequestsListRequest.kt | 0 .../network/misskey/api/model/GalleryPost.kt | 0 .../api/model/GalleryPostsCreateRequest.kt | 0 .../api/model/GalleryPostsDeleteRequest.kt | 0 .../api/model/GalleryPostsUpdateRequest.kt | 0 .../data/network/misskey/api/model/Hashtag.kt | 0 .../misskey/api/model/HashtagsListRequest.kt | 0 .../api/model/HashtagsSearchRequest.kt | 0 .../misskey/api/model/HashtagsShowRequest.kt | 0 .../model/HashtagsTrend200ResponseInner.kt | 0 .../misskey/api/model/HashtagsUsersRequest.kt | 0 .../api/model/IClaimAchievementRequest.kt | 0 .../model/IGalleryLikes200ResponseInner.kt | 0 .../IGetWordMutedNotesCount200Response.kt | 0 .../api/model/INotificationsRequest.kt | 0 .../api/model/IPageLikes200ResponseInner.kt | 0 .../network/misskey/api/model/IPinRequest.kt | 0 .../api/model/IReadAnnouncementRequest.kt | 0 .../misskey/api/model/IUpdateRequest.kt | 0 .../api/model/IUpdateRequestFieldsInner.kt | 0 .../api/model/IWebhooksCreateRequest.kt | 0 .../misskey/api/model/IWebhooksShowRequest.kt | 0 .../api/model/IWebhooksUpdateRequest.kt | 0 .../network/misskey/api/model/InviteCode.kt | 0 .../misskey/api/model/InviteDeleteRequest.kt | 0 .../api/model/InviteLimit200Response.kt | 0 .../misskey/api/model/ListMembership.kt | 0 .../network/misskey/api/model/MeDetailed.kt | 0 .../misskey/api/model/MeDetailedOnly.kt | 0 .../misskey/api/model/Meta200Response.kt | 0 .../api/model/Meta200ResponseAdsInner.kt | 0 .../api/model/Meta200ResponseFeatures.kt | 0 .../network/misskey/api/model/MetaRequest.kt | 0 .../misskey/api/model/MisskeyException.kt | 0 .../misskey/api/model/MisskeyInstance.kt | 0 .../misskey/api/model/MuteCreateRequest.kt | 0 .../data/network/misskey/api/model/Muting.kt | 0 .../misskey/api/model/MyAppsRequest.kt | 0 .../data/network/misskey/api/model/Note.kt | 0 .../misskey/api/model/NoteChannelInner.kt | 0 .../network/misskey/api/model/NoteFavorite.kt | 0 .../network/misskey/api/model/NoteReaction.kt | 0 .../misskey/api/model/NotesChildrenRequest.kt | 0 .../api/model/NotesConversationRequest.kt | 0 .../api/model/NotesCreate200Response.kt | 0 .../misskey/api/model/NotesCreateRequest.kt | 0 .../api/model/NotesCreateRequestPoll.kt | 0 .../misskey/api/model/NotesFeaturedRequest.kt | 0 .../api/model/NotesGlobalTimelineRequest.kt | 0 .../api/model/NotesHybridTimelineRequest.kt | 0 .../api/model/NotesLocalTimelineRequest.kt | 0 .../misskey/api/model/NotesMentionsRequest.kt | 0 .../api/model/NotesPollsVoteRequest.kt | 0 .../api/model/NotesReactionsCreateRequest.kt | 0 .../api/model/NotesReactionsRequest.kt | 0 .../misskey/api/model/NotesRepliesRequest.kt | 0 .../network/misskey/api/model/NotesRequest.kt | 0 .../api/model/NotesSearchByTagRequest.kt | 0 .../misskey/api/model/NotesSearchRequest.kt | 0 .../api/model/NotesState200Response.kt | 0 .../api/model/NotesTranslateRequest.kt | 0 .../api/model/NotesUserListTimelineRequest.kt | 0 .../network/misskey/api/model/Notification.kt | 0 .../api/model/NotificationsCreateRequest.kt | 0 .../data/network/misskey/api/model/Page.kt | 0 .../misskey/api/model/PagesCreateRequest.kt | 0 .../misskey/api/model/PagesDeleteRequest.kt | 0 .../misskey/api/model/PagesShowRequest.kt | 0 .../misskey/api/model/PagesUpdateRequest.kt | 0 .../misskey/api/model/Ping200Response.kt | 0 .../misskey/api/model/PinnedUsersRequest.kt | 0 .../data/network/misskey/api/model/Poll.kt | 0 .../network/misskey/api/model/QueueCount.kt | 0 .../network/misskey/api/model/RenoteMuting.kt | 0 .../api/model/RequestResetPasswordRequest.kt | 0 .../misskey/api/model/ResetPasswordRequest.kt | 0 .../misskey/api/model/RolesNotesRequest.kt | 0 .../misskey/api/model/Stats200Response.kt | 0 .../api/model/SwRegister200Response.kt | 0 .../misskey/api/model/SwRegisterRequest.kt | 0 .../model/SwShowRegistration200Response.kt | 0 .../model/SwUpdateRegistration200Response.kt | 0 .../api/model/SwUpdateRegistrationRequest.kt | 0 .../network/misskey/api/model/TestRequest.kt | 0 .../data/network/misskey/api/model/User.kt | 0 .../network/misskey/api/model/UserDetailed.kt | 0 .../misskey/api/model/UserDetailedNotMe.kt | 0 .../api/model/UserDetailedNotMeOnly.kt | 0 .../model/UserDetailedNotMeOnlyFieldsInner.kt | 0 .../network/misskey/api/model/UserList.kt | 0 .../network/misskey/api/model/UserLite.kt | 0 .../api/model/UsernameAvailable200Response.kt | 0 .../api/model/UsernameAvailableRequest.kt | 0 .../misskey/api/model/UsersClipsRequest.kt | 0 .../api/model/UsersFollowersRequest.kt | 0 ...tFrequentlyRepliedUsers200ResponseInner.kt | 0 .../UsersGetFrequentlyRepliedUsersRequest.kt | 0 .../UsersListsCreateFromPublicRequest.kt | 0 .../api/model/UsersListsCreateRequest.kt | 0 .../api/model/UsersListsDeleteRequest.kt | 0 .../api/model/UsersListsListRequest.kt | 0 .../api/model/UsersListsPullRequest.kt | 0 .../api/model/UsersListsShowRequest.kt | 0 .../api/model/UsersListsUpdateRequest.kt | 0 .../misskey/api/model/UsersNotesRequest.kt | 0 .../api/model/UsersReactionsRequest.kt | 0 .../api/model/UsersRelation200Response.kt | 0 .../model/UsersRelation200ResponseOneOf.kt | 0 .../UsersRelation200ResponseOneOf1Inner.kt | 0 .../misskey/api/model/UsersRelationRequest.kt | 0 .../api/model/UsersReportAbuseRequest.kt | 0 .../network/misskey/api/model/UsersRequest.kt | 0 .../UsersSearchByUsernameAndHostRequest.kt | 0 .../misskey/api/model/UsersSearchRequest.kt | 0 .../misskey/api/model/UsersShow200Response.kt | 0 .../misskey/api/model/UsersShowRequest.kt | 0 .../api/model/UsersUpdateMemoRequest.kt | 0 .../network/misskey/api/model/Visibility.kt | 0 .../api/model/response/MiAuthCheckResponse.kt | 0 .../serializer/MisskeyEmojiMapSerializer.kt | 0 .../data/network/nodeinfo/NodeInfoService.kt | 0 .../data/network/nodeinfo/PlatformDetector.kt | 0 .../data/network/nodeinfo/model/NodeInfo.kt | 0 .../data/network/nodeinfo/model/Schema10.kt | 0 .../data/network/nodeinfo/model/Schema11.kt | 0 .../data/network/nodeinfo/model/Schema20.kt | 0 .../data/network/nodeinfo/model/Schema21.kt | 0 .../data/network/nostr/AmberSignerBridge.kt | 0 .../network/nostr/NostrBlossomUploader.kt | 0 .../flare/data/network/nostr/NostrCompat.kt | 0 .../network/nostr/NostrPlatformDetector.kt | 0 .../data/network/nostr/NostrRichTextParser.kt | 0 .../flare/data/network/nostr/NostrService.kt | 0 .../flare/data/network/rss/CharsetDecoder.kt | 0 .../flare/data/network/rss/Readability.kt | 0 .../flare/data/network/rss/RssService.kt | 0 .../flare/data/network/rss/model/Feed.kt | 0 .../flare/data/network/rss/model/Opml.kt | 0 .../data/network/rss/model/OpmlParser.kt | 0 .../data/network/vvo/VVOPlatformDetector.kt | 0 .../flare/data/network/vvo/VVOService.kt | 0 .../flare/data/network/vvo/api/ConfigApi.kt | 0 .../flare/data/network/vvo/api/StatusApi.kt | 0 .../flare/data/network/vvo/api/TimelineApi.kt | 0 .../flare/data/network/vvo/api/UserApi.kt | 0 .../flare/data/network/vvo/model/EmojiData.kt | 0 .../data/network/vvo/model/ProfileData.kt | 0 .../data/network/vvo/model/TimelineData.kt | 0 .../data/network/xqt/XQTPlatformDetector.kt | 0 .../flare/data/network/xqt/XQTService.kt | 0 .../flare/data/network/xqt/api/DefaultApi.kt | 0 .../flare/data/network/xqt/api/DmApi.kt | 0 .../flare/data/network/xqt/api/GuestApi.kt | 0 .../flare/data/network/xqt/api/ListsApi.kt | 0 .../flare/data/network/xqt/api/MediaApi.kt | 0 .../flare/data/network/xqt/api/OtherApi.kt | 0 .../flare/data/network/xqt/api/PostApi.kt | 0 .../flare/data/network/xqt/api/TweetApi.kt | 0 .../flare/data/network/xqt/api/UserApi.kt | 0 .../flare/data/network/xqt/api/UserListApi.kt | 0 .../flare/data/network/xqt/api/UsersApi.kt | 0 .../flare/data/network/xqt/api/V11GetApi.kt | 0 .../flare/data/network/xqt/api/V11PostApi.kt | 0 .../flare/data/network/xqt/api/V20GetApi.kt | 0 .../network/xqt/api/VDmPostJsonPostApi.kt | 0 .../elonmusk114514/ElonMusk1145141919810.kt | 0 .../xqt/model/AccountSettingsResponse.kt | 0 .../network/xqt/model/ActivateResponse.kt | 0 .../network/xqt/model/AdditionalMediaInfo.kt | 0 .../xqt/model/AudioSpaceByIDResponse.kt | 0 .../data/network/xqt/model/BirdwatchEntity.kt | 0 .../network/xqt/model/BirdwatchEntityRef.kt | 0 .../data/network/xqt/model/BirdwatchPivot.kt | 0 .../network/xqt/model/BirdwatchPivotFooter.kt | 0 .../network/xqt/model/BirdwatchPivotNote.kt | 0 .../xqt/model/BirdwatchPivotSubtitle.kt | 0 .../network/xqt/model/BookmarksResponse.kt | 0 .../xqt/model/BookmarksResponseData.kt | 0 .../network/xqt/model/BookmarksTimeline.kt | 0 .../flare/data/network/xqt/model/Callback.kt | 0 .../data/network/xqt/model/ClientEventInfo.kt | 0 .../network/xqt/model/CommunitiesActions.kt | 0 .../network/xqt/model/ContentEntryType.kt | 0 .../data/network/xqt/model/ContentItemType.kt | 0 .../data/network/xqt/model/ContentUnion.kt | 0 .../flare/data/network/xqt/model/CoverCta.kt | 0 .../data/network/xqt/model/CreateRetweet.kt | 0 .../xqt/model/CreateRetweetResponse.kt | 0 .../xqt/model/CreateRetweetResponseData.kt | 0 .../xqt/model/CreateRetweetResponseResult.kt | 0 .../data/network/xqt/model/CreateTweet.kt | 0 .../network/xqt/model/CreateTweetResponse.kt | 0 .../xqt/model/CreateTweetResponseData.kt | 0 .../xqt/model/CreateTweetResponseResult.kt | 0 .../network/xqt/model/CtaClientEventInfo.kt | 0 .../data/network/xqt/model/CursorType.kt | 0 .../DMAddParticipantsMutationResponse.kt | 0 .../DMAddParticipantsMutationResponseData.kt | 0 ...antsMutationResponseDataAddParticipants.kt | 0 ...ataAddParticipantsParticipantsJoinEvent.kt | 0 ...antsParticipantsJoinEventDmEventResults.kt | 0 ...rticipantsJoinEventDmEventResultsResult.kt | 0 .../network/xqt/model/DMBlockUserResponse.kt | 0 .../xqt/model/DMBlockUserResponseData.kt | 0 .../DMBlockUserResponseDataDmBlockByRestId.kt | 0 ...onversationSearchTabGroupsQueryResponse.kt | 0 ...rsationSearchTabGroupsQueryResponseData.kt | 0 ...onversationSearchTabPeopleQueryResponse.kt | 0 ...rsationSearchTabPeopleQueryResponseData.kt | 0 .../data/network/xqt/model/DMConvoLegacy.kt | 0 .../data/network/xqt/model/DMConvoMetadata.kt | 0 .../xqt/model/DMConvoMetadataAvatar.kt | 0 .../model/DMConvoMetadataAvatarMediaInfo.kt | 0 .../data/network/xqt/model/DMConvoSearch.kt | 0 .../flare/data/network/xqt/model/DMEvent.kt | 0 .../data/network/xqt/model/DMEventDetail.kt | 0 .../data/network/xqt/model/DMEventDetailDM.kt | 0 .../xqt/model/DMEventDetailDMEntities.kt | 0 .../DMEventDetailInitialLowQualityState.kt | 0 .../data/network/xqt/model/DMEventLegacy.kt | 0 .../network/xqt/model/DMGroupSearchSlice.kt | 0 .../xqt/model/DMGroupSearchSliceItemsInner.kt | 0 ...MGroupSearchSliceItemsInnerHighlighting.kt | 0 .../xqt/model/DMGroupSearchSliceSliceInfo.kt | 0 .../model/DMInboxPinnedConversationItem.kt | 0 .../model/DMInboxPinnedConversationLabel.kt | 0 .../model/DMInboxPinnedConversationLegacy.kt | 0 ...DMInboxPinnedConversationLegacyMetadata.kt | 0 .../DMInboxPinnedConversationParticipant.kt | 0 ...innedConversationParticipantUserResults.kt | 0 ...xPinnedConversationPerspectivalMetadata.kt | 0 .../model/DMInboxPinnedConversationUser.kt | 0 .../DMInboxPinnedConversationUserLegacy.kt | 0 .../model/DMInboxPinnedInboxQueryResponse.kt | 0 .../DMInboxPinnedInboxQueryResponseData.kt | 0 ...eryResponseDataLabeledConversationSlice.kt | 0 .../network/xqt/model/DMInboxTimelines.kt | 0 .../model/DMMessageDeleteMutationResponse.kt | 0 .../DMMessageDeleteMutationResponseData.kt | 0 .../network/xqt/model/DMMessageSearchSlice.kt | 0 .../model/DMMessageSearchSliceItemsInner.kt | 0 .../model/DMMessageSearchTabQueryResponse.kt | 0 .../DMMessageSearchTabQueryResponseData.kt | 0 .../xqt/model/DMParticipantMetadata.kt | 0 .../network/xqt/model/DMPeopleSearchSlice.kt | 0 ...missionsCreateGroupConversationResponse.kt | 0 ...ateGroupConversationResponsePermissions.kt | 0 ...versationResponsePermissionsIdKeysValue.kt | 0 .../DMPerspectivalConversationMetadata.kt | 0 .../DMPinnedInboxAppendMutationResponse.kt | 0 ...DMPinnedInboxAppendMutationResponseData.kt | 0 ...ionResponseDataAddDmConversationLabelV3.kt | 0 .../DMPinnedInboxDeleteMutationResponse.kt | 0 .../xqt/model/DMUnblockUserResponse.kt | 0 .../xqt/model/DMUnblockUserResponseData.kt | 0 ...nblockUserResponseDataDmUnblockByRestId.kt | 0 ...seDMReactionMutationAddMutationResponse.kt | 0 ...ReactionMutationAddMutationResponseData.kt | 0 ...AddMutationResponseDataCreateDmReaction.kt | 0 ...AddMutationResponseDataDeleteDmReaction.kt | 0 .../data/network/xqt/model/DMUserResults.kt | 0 .../data/network/xqt/model/DeleteRetweet.kt | 0 .../xqt/model/DeleteRetweetResponse.kt | 0 .../xqt/model/DeleteRetweetResponseData.kt | 0 .../xqt/model/DeleteRetweetResponseResult.kt | 0 .../network/xqt/model/DeleteTweetResponse.kt | 0 .../xqt/model/DeleteTweetResponseData.kt | 0 .../xqt/model/DeleteTweetResponseResult.kt | 0 .../xqt/model/DmAllSearchSliceResponse.kt | 0 .../xqt/model/DmAllSearchSliceResponseData.kt | 0 .../data/network/xqt/model/DmNew2Response.kt | 0 .../flare/data/network/xqt/model/Entities.kt | 0 .../flare/data/network/xqt/model/Error.kt | 0 .../data/network/xqt/model/ErrorExtensions.kt | 0 .../data/network/xqt/model/ErrorResponse.kt | 0 .../flare/data/network/xqt/model/Errors.kt | 0 .../network/xqt/model/ExtMediaAvailability.kt | 0 .../network/xqt/model/ExtendedEntities.kt | 0 .../data/network/xqt/model/Extensions.kt | 0 .../data/network/xqt/model/FavoriteTweet.kt | 0 .../xqt/model/FavoriteTweetResponseData.kt | 0 .../network/xqt/model/FleetlineResponse.kt | 0 .../data/network/xqt/model/FollowResponse.kt | 0 .../network/xqt/model/FollowResponseData.kt | 0 .../network/xqt/model/FollowResponseResult.kt | 0 .../network/xqt/model/FollowResponseUser.kt | 0 .../data/network/xqt/model/FollowTimeline.kt | 0 .../xqt/model/GetBookmarks200Response.kt | 0 .../xqt/model/GetFavoriters200Response.kt | 0 .../xqt/model/GetFollowers200Response.kt | 0 .../model/GetHomeLatestTimeline200Response.kt | 0 .../network/xqt/model/GetLikes200Response.kt | 0 .../GetListLatestTweetsTimeline200Response.kt | 0 .../GetProfileSpotlightsQuery200Response.kt | 0 .../xqt/model/GetRetweeters200Response.kt | 0 .../xqt/model/GetSearchTimeline200Response.kt | 0 .../xqt/model/GetTweetDetail200Response.kt | 0 .../GetTweetResultByRestId200Response.kt | 0 .../xqt/model/GetUserByRestId200Response.kt | 0 .../GetUserHighlightsTweets200Response.kt | 0 .../xqt/model/GetUsersByRestIds200Response.kt | 0 .../network/xqt/model/HomeTimelineHome.kt | 0 .../xqt/model/HomeTimelineResponseData.kt | 0 .../network/xqt/model/InboxConversation.kt | 0 .../InboxConversationParticipantsInner.kt | 0 .../InboxConversationTimelineConversation.kt | 0 .../model/InboxConversationTimelineData.kt | 0 ...nversationTimelineMessageDataAttachment.kt | 0 ...imelineMessageDataAttachmentAnimatedGif.kt | 0 ...melineMessageDataAttachmentMediaAltText.kt | 0 ...TimelineMessageDataAttachmentMediaColor.kt | 0 ...eMessageDataAttachmentMediaColorPalette.kt | 0 ...imelineMessageDataAttachmentMediaColorR.kt | 0 ...onTimelineMessageDataAttachmentMediaExt.kt | 0 ...MessageDataAttachmentMediaExtMediaColor.kt | 0 ...eMessageDataAttachmentMediaOriginalInfo.kt | 0 ...onTimelineMessageDataAttachmentMediaRGB.kt | 0 ...nTimelineMessageDataAttachmentMediaSize.kt | 0 ...TimelineMessageDataAttachmentMediaSizes.kt | 0 ...TimelineMessageDataAttachmentMediaStats.kt | 0 ...lineMessageDataAttachmentMediaVideoInfo.kt | 0 ...eMessageDataAttachmentMediaVideoVariant.kt | 0 ...ationTimelineMessageDataAttachmentPhoto.kt | 0 ...ationTimelineMessageDataAttachmentTweet.kt | 0 ...ationTimelineMessageDataAttachmentVideo.kt | 0 ...ConversationTimelineMessageDataEntities.kt | 0 ...imelineMessageDataEntitiesHashtagEntity.kt | 0 ...TimelineMessageDataEntitiesSymbolEntity.kt | 0 ...ionTimelineMessageDataEntitiesUrlEntity.kt | 0 ...ineMessageDataEntitiesUserMentionEntity.kt | 0 ...onversationTimelineMessageDataReplyData.kt | 0 .../InboxConversationTimelineResponse.kt | 0 .../xqt/model/InboxConversationTimelineURL.kt | 0 .../model/InboxDMTrustedTimelineResponse.kt | 0 ...xDMTrustedTimelineResponseInboxTimeline.kt | 0 .../xqt/model/InboxDMUserUpdateResponse.kt | 0 ...oxDMUserUpdateResponseInboxInitialState.kt | 0 ...ResponseInboxInitialStateInboxTimelines.kt | 0 .../InboxDMUserUpdateResponseUserEvents.kt | 0 .../network/xqt/model/InboxMessageData.kt | 0 ...oxTimelineConversationAvatarUpdateEntry.kt | 0 ...atarUpdateEntryConversationAvatarUpdate.kt | 0 ...dateEntryConversationAvatarUpdateAvatar.kt | 0 ...ntryConversationAvatarUpdateAvatarImage.kt | 0 .../InboxTimelineConversationCreateEntry.kt | 0 ...nversationCreateEntryConversationCreate.kt | 0 ...nboxTimelineConversationNameUpdateEntry.kt | 0 ...onNameUpdateEntryConversationNameUpdate.kt | 0 .../InboxTimelineConversationReadEntry.kt | 0 ...neConversationReadEntryConversationRead.kt | 0 .../InboxTimelineDisableNotificationsEntry.kt | 0 ...eNotificationsORRemoveConversationEntry.kt | 0 .../network/xqt/model/InboxTimelineEntry.kt | 0 .../InboxTimelineJoinConversationEntry.kt | 0 ...neJoinConversationEntryJoinConversation.kt | 0 ...nEntryJoinConversationParticipantsInner.kt | 0 ...eMentionNotificationsSettingUpdateEntry.kt | 0 ...eEntryMentionNotificationsSettingUpdate.kt | 0 .../model/InboxTimelineMessageDeleteEntry.kt | 0 ...xTimelineMessageDeleteORMarkAsSpamEntry.kt | 0 ...ageDeleteORMarkAsSpamEntryMessagesInner.kt | 0 .../xqt/model/InboxTimelineMessageEntry.kt | 0 .../model/InboxTimelineMessageEntryMessage.kt | 0 .../InboxTimelineMessageMarkAsSpamEntry.kt | 0 .../InboxTimelineParticipantsJoinEntry.kt | 0 ...neParticipantsJoinEntryParticipantsJoin.kt | 0 ...nEntryParticipantsJoinParticipantsInner.kt | 0 .../InboxTimelineParticipantsLeaveEntry.kt | 0 ...ParticipantsLeaveEntryParticipantsLeave.kt | 0 .../model/InboxTimelineReactionCreateEntry.kt | 0 .../model/InboxTimelineReactionDeleteEntry.kt | 0 .../InboxTimelineRemoveConversationEntry.kt | 0 .../InboxTimelineTrustConversationEntry.kt | 0 ...TrustConversationEntryTrustConversation.kt | 0 .../flare/data/network/xqt/model/InboxURL.kt | 0 .../flare/data/network/xqt/model/InboxUser.kt | 0 .../network/xqt/model/InboxUserEntities.kt | 0 .../network/xqt/model/InboxUserEntitiesUrl.kt | 0 .../xqt/model/InboxUserEventReactionEntry.kt | 0 .../data/network/xqt/model/InstructionType.kt | 0 .../network/xqt/model/InstructionUnion.kt | 0 .../network/xqt/model/ItemContentUnion.kt | 0 .../data/network/xqt/model/ItemResult.kt | 0 .../model/ListLatestTweetsTimelineResponse.kt | 0 .../network/xqt/model/ListTweetsTimeline.kt | 0 .../xqt/model/ListTweetsTimelineData.kt | 0 .../xqt/model/ListTweetsTimelineList.kt | 0 .../model/LiveVideoStreamStatusResponse.kt | 0 .../flare/data/network/xqt/model/Location.kt | 0 .../flare/data/network/xqt/model/Media.kt | 0 .../data/network/xqt/model/MediaExtended.kt | 0 .../network/xqt/model/MediaOriginalInfo.kt | 0 .../xqt/model/MediaOriginalInfoFocusRect.kt | 0 .../flare/data/network/xqt/model/MediaSize.kt | 0 .../data/network/xqt/model/MediaSizes.kt | 0 .../data/network/xqt/model/MediaStats.kt | 0 .../data/network/xqt/model/MediaVideoInfo.kt | 0 .../xqt/model/MediaVideoInfoVariant.kt | 0 .../data/network/xqt/model/ModuleEntry.kt | 0 .../data/network/xqt/model/ModuleItem.kt | 0 .../flare/data/network/xqt/model/NoteTweet.kt | 0 .../data/network/xqt/model/NoteTweetResult.kt | 0 .../network/xqt/model/NoteTweetResultData.kt | 0 .../network/xqt/model/NoteTweetResultMedia.kt | 0 .../model/NoteTweetResultMediaInlineMedia.kt | 0 .../xqt/model/NoteTweetResultRichText.kt | 0 .../xqt/model/NoteTweetResultRichTextTag.kt | 0 .../xqt/model/OneFactorLoginEligibility.kt | 0 .../network/xqt/model/Other200Response.kt | 0 .../data/network/xqt/model/OtherResponse.kt | 0 .../xqt/model/PostCreateRetweet200Response.kt | 0 .../xqt/model/PostCreateRetweetRequest.kt | 0 .../PostCreateRetweetRequestVariables.kt | 0 .../xqt/model/PostCreateTweet200Response.kt | 0 .../xqt/model/PostCreateTweetRequest.kt | 0 .../model/PostCreateTweetRequestFeatures.kt | 0 .../model/PostCreateTweetRequestVariables.kt | 0 .../PostCreateTweetRequestVariablesMedia.kt | 0 ...RequestVariablesMediaMediaEntitiesInner.kt | 0 .../PostCreateTweetRequestVariablesReply.kt | 0 .../xqt/model/PostDeleteRetweet200Response.kt | 0 .../xqt/model/PostDeleteRetweetRequest.kt | 0 .../PostDeleteRetweetRequestVariables.kt | 0 .../xqt/model/PostDeleteTweet200Response.kt | 0 .../xqt/model/PostDeleteTweetRequest.kt | 0 .../network/xqt/model/PostDmNew2Request.kt | 0 .../xqt/model/PostFavoriteTweet200Response.kt | 0 .../xqt/model/PostFavoriteTweetRequest.kt | 0 .../model/PostUnfavoriteTweet200Response.kt | 0 .../xqt/model/PostUnfavoriteTweetRequest.kt | 0 .../data/network/xqt/model/ProfileResponse.kt | 0 .../network/xqt/model/ProfileResponseData.kt | 0 .../flare/data/network/xqt/model/Retweet.kt | 0 .../data/network/xqt/model/RetweetLegacy.kt | 0 .../network/xqt/model/SearchByRawQuery.kt | 0 .../data/network/xqt/model/SearchTimeline.kt | 0 .../network/xqt/model/SearchTimelineData.kt | 0 .../xqt/model/SearchTimelineResponse.kt | 0 .../data/network/xqt/model/SelfThread.kt | 0 .../flare/data/network/xqt/model/Session.kt | 0 .../data/network/xqt/model/SocialContext.kt | 0 .../flare/data/network/xqt/model/Text.kt | 0 .../data/network/xqt/model/TextEntity.kt | 0 .../data/network/xqt/model/TextEntityRef.kt | 0 .../flare/data/network/xqt/model/Timeline.kt | 0 .../network/xqt/model/TimelineAddEntries.kt | 0 .../network/xqt/model/TimelineAddEntry.kt | 0 .../network/xqt/model/TimelineAddToModule.kt | 0 .../network/xqt/model/TimelineClearCache.kt | 0 .../network/xqt/model/TimelineCommunity.kt | 0 .../xqt/model/TimelineCoverBehavior.kt | 0 .../network/xqt/model/TimelineHalfCover.kt | 0 .../xqt/model/TimelineMessagePrompt.kt | 0 .../network/xqt/model/TimelinePinEntry.kt | 0 .../data/network/xqt/model/TimelinePrompt.kt | 0 .../network/xqt/model/TimelineReplaceEntry.kt | 0 .../network/xqt/model/TimelineResponse.kt | 0 .../network/xqt/model/TimelineShowAlert.kt | 0 .../xqt/model/TimelineShowAlertRichText.kt | 0 .../network/xqt/model/TimelineShowCover.kt | 0 .../network/xqt/model/TimelineSpelling.kt | 0 .../xqt/model/TimelineTerminateTimeline.kt | 0 .../xqt/model/TimelineTimelineCursor.kt | 0 .../network/xqt/model/TimelineTimelineItem.kt | 0 .../xqt/model/TimelineTimelineModule.kt | 0 .../data/network/xqt/model/TimelineTweet.kt | 0 .../xqt/model/TimelineTweetComposer.kt | 0 .../network/xqt/model/TimelineTwitterList.kt | 0 .../data/network/xqt/model/TimelineUser.kt | 0 .../data/network/xqt/model/TimelineV2.kt | 0 .../flare/data/network/xqt/model/Tracing.kt | 0 .../flare/data/network/xqt/model/Tweet.kt | 0 .../flare/data/network/xqt/model/TweetCard.kt | 0 .../data/network/xqt/model/TweetCardLegacy.kt | 0 .../xqt/model/TweetCardLegacyBindingValue.kt | 0 .../model/TweetCardLegacyBindingValueData.kt | 0 .../network/xqt/model/TweetDetailResponse.kt | 0 .../xqt/model/TweetDetailResponseData.kt | 0 .../network/xqt/model/TweetEditControl.kt | 0 .../xqt/model/TweetEditControlInitial.kt | 0 .../network/xqt/model/TweetEditPrespective.kt | 0 .../xqt/model/TweetFavoritersResponse.kt | 0 .../xqt/model/TweetFavoritersResponseData.kt | 0 .../data/network/xqt/model/TweetLegacy.kt | 0 .../xqt/model/TweetResultByRestIdData.kt | 0 .../xqt/model/TweetResultByRestIdResponse.kt | 0 .../xqt/model/TweetRetweetersResponse.kt | 0 .../xqt/model/TweetRetweetersResponseData.kt | 0 .../data/network/xqt/model/TweetTombstone.kt | 0 .../data/network/xqt/model/TweetUnion.kt | 0 .../flare/data/network/xqt/model/TweetView.kt | 0 .../xqt/model/TweetWithVisibilityResults.kt | 0 .../data/network/xqt/model/TwitterArticle.kt | 0 .../flare/data/network/xqt/model/TypeName.kt | 0 .../data/network/xqt/model/UnfavoriteTweet.kt | 0 .../xqt/model/UnfavoriteTweetResponseData.kt | 0 .../model/UpdateAccountSettingsResponse.kt | 0 .../UpdateAccountSettingsResponseSleepTime.kt | 0 .../flare/data/network/xqt/model/User.kt | 0 .../data/network/xqt/model/UserFeatures.kt | 0 .../xqt/model/UserHighlightsTweetsData.kt | 0 .../xqt/model/UserHighlightsTweetsResponse.kt | 0 .../xqt/model/UserHighlightsTweetsResult.kt | 0 .../xqt/model/UserHighlightsTweetsTimeline.kt | 0 .../xqt/model/UserHighlightsTweetsUser.kt | 0 .../data/network/xqt/model/UserLegacy.kt | 0 .../xqt/model/UserRecommendationsItem.kt | 0 .../data/network/xqt/model/UserResponse.kt | 0 .../network/xqt/model/UserResponseData.kt | 0 .../xqt/model/UserResultByScreenName.kt | 0 .../xqt/model/UserResultByScreenNameLegacy.kt | 0 .../xqt/model/UserResultByScreenNameResult.kt | 0 .../data/network/xqt/model/UserResultCore.kt | 0 .../data/network/xqt/model/UserResults.kt | 0 .../data/network/xqt/model/UserTweetsData.kt | 0 .../network/xqt/model/UserTweetsResponse.kt | 0 .../network/xqt/model/UserTweetsResult.kt | 0 .../data/network/xqt/model/UserTweetsUser.kt | 0 .../data/network/xqt/model/UserUnavailable.kt | 0 .../flare/data/network/xqt/model/UserUnion.kt | 0 .../data/network/xqt/model/UsersResponse.kt | 0 .../network/xqt/model/UsersResponseData.kt | 0 .../flare/data/network/xqt/model/XqtUrl.kt | 0 .../network/xqt/model/legacy/BadgeCount.kt | 0 .../data/network/xqt/model/legacy/TopLevel.kt | 0 .../data/platform/BlueskyPlatformSpec.kt | 0 .../data/platform/CommonTimelineSpecs.kt | 0 .../data/platform/MastodonPlatformSpec.kt | 0 .../data/platform/MisskeyPlatformSpec.kt | 0 .../flare/data/platform/NostrPlatformSpec.kt | 0 .../flare/data/platform/RssTimelineSpecs.kt | 0 .../flare/data/platform/VvoPlatformSpec.kt | 0 .../flare/data/platform/XqtPlatformSpec.kt | 0 .../data/repository/AccountRepository.kt | 0 .../repository/AccountTabSyncCoordinator.kt | 0 .../data/repository/ApplicationRepository.kt | 0 .../flare/data/repository/DebugRepository.kt | 0 .../flare/data/repository/DraftMediaStore.kt | 0 .../flare/data/repository/DraftRepository.kt | 0 .../DraftSendingRecoveryCoordinator.kt | 0 .../data/repository/LocalFilterRepository.kt | 0 .../repository/SearchHistoryRepository.kt | 0 .../data/repository/SettingsRepository.kt | 0 .../AiPlaceholderTranslationSupport.kt | 0 .../translation/PreTranslationContentRules.kt | 0 .../data/translation/PreTranslationModels.kt | 0 .../PreTranslationPayloadSupport.kt | 0 .../data/translation/PreTranslationService.kt | 0 .../translation/PreTranslationStoreSupport.kt | 0 .../data/translation/TranslationProvider.kt | 0 .../TranslationProviderCacheKey.kt | 0 .../data/translation/TranslationSupport.kt | 0 .../dev/dimension/flare/di/AppModule.kt | 0 .../dev/dimension/flare/di/CommonModule.kt | 0 .../dev/dimension/flare/di/PlatformModule.kt | 0 .../dev/dimension/flare/model/AccountType.kt | 0 .../dev/dimension/flare/model/MicroBlogKey.kt | 0 .../dev/dimension/flare/model/PlatformSpec.kt | 0 .../dev/dimension/flare/model/PlatformType.kt | 0 .../dimension/flare/model/ReferenceType.kt | 0 .../flare/shared/image/ImageCompressor.kt | 0 .../dimension/flare/ui/humanizer/Instant.kt | 0 .../dimension/flare/ui/humanizer/Number.kt | 0 .../dimension/flare/ui/model/ClickContext.kt | 0 .../dimension/flare/ui/model/DeeplinkEvent.kt | 0 .../flare/ui/model/TranslationDisplayState.kt | 0 .../dev/dimension/flare/ui/model/UiAccount.kt | 0 .../dimension/flare/ui/model/UiApplication.kt | 0 .../dev/dimension/flare/ui/model/UiCard.kt | 0 .../dev/dimension/flare/ui/model/UiDMRoom.kt | 0 .../dev/dimension/flare/ui/model/UiDraft.kt | 0 .../dev/dimension/flare/ui/model/UiEmoji.kt | 0 .../dev/dimension/flare/ui/model/UiHandle.kt | 0 .../dev/dimension/flare/ui/model/UiHashtag.kt | 0 .../dev/dimension/flare/ui/model/UiIcon.kt | 0 .../dimension/flare/ui/model/UiInstance.kt | 0 .../flare/ui/model/UiInstanceMetadata.kt | 0 .../flare/ui/model/UiKeywordFilter.kt | 0 .../dev/dimension/flare/ui/model/UiList.kt | 0 .../dev/dimension/flare/ui/model/UiMedia.kt | 0 .../dev/dimension/flare/ui/model/UiNumber.kt | 0 .../dev/dimension/flare/ui/model/UiPodcast.kt | 0 .../dev/dimension/flare/ui/model/UiPoll.kt | 0 .../dev/dimension/flare/ui/model/UiProfile.kt | 0 .../dimension/flare/ui/model/UiRelation.kt | 0 .../dimension/flare/ui/model/UiRssSource.kt | 0 .../flare/ui/model/UiSearchHistory.kt | 0 .../dev/dimension/flare/ui/model/UiState.kt | 0 .../dev/dimension/flare/ui/model/UiStatus.kt | 0 .../dev/dimension/flare/ui/model/UiStrings.kt | 0 .../dimension/flare/ui/model/UiTimelineV2.kt | 0 .../flare/ui/model/UiTwitterArticle.kt | 0 .../dimension/flare/ui/model/UriLauncher.kt | 0 .../flare/ui/model/mapper/Bluesky.kt | 0 .../flare/ui/model/mapper/Mastodon.kt | 0 .../flare/ui/model/mapper/Misskey.kt | 0 .../dimension/flare/ui/model/mapper/Nostr.kt | 0 .../dimension/flare/ui/model/mapper/Render.kt | 0 .../dimension/flare/ui/model/mapper/Rss.kt | 0 .../dimension/flare/ui/model/mapper/VVO.kt | 0 .../dimension/flare/ui/model/mapper/XQT.kt | 0 .../flare/ui/model/mapper/XQTActionMenu.kt | 0 .../presenter/EnvironmentSettingsPresenter.kt | 0 .../flare/ui/presenter/ExportDataPresenter.kt | 0 .../ui/presenter/ExportSettingsPresenter.kt | 0 .../flare/ui/presenter/HomeTabsPresenter.kt | 0 .../HomeTimelineWithTabsPresenter.kt | 0 .../flare/ui/presenter/ImportDataPresenter.kt | 0 .../ui/presenter/ImportSettingsPresenter.kt | 0 .../flare/ui/presenter/PinTabsPresenter.kt | 0 .../flare/ui/presenter/PresenterBase.kt | 0 .../flare/ui/presenter/SettingsPresenter.kt | 0 .../dev/dimension/flare/ui/presenter/State.kt | 0 .../ui/presenter/compose/ComposePresenter.kt | 0 .../ui/presenter/compose/ComposeUseCase.kt | 0 .../ui/presenter/compose/DraftBoxPresenter.kt | 0 .../compose/EmojiHistoryPresenter.kt | 0 .../presenter/compose/InitialTextResolver.kt | 0 .../presenter/compose/RestoreDraftUseCase.kt | 0 .../ui/presenter/compose/SaveDraftUseCase.kt | 0 .../ui/presenter/compose/SendDraftUseCase.kt | 0 .../presenter/dm/DMConversationPresenter.kt | 0 .../flare/ui/presenter/dm/DMListPresenter.kt | 0 .../dm/UserDMConversationPresenter.kt | 0 .../presenter/home/ActiveAccountPresenter.kt | 0 .../home/AllNotificationBadgePresenter.kt | 0 .../home/AllNotificationPresenter.kt | 0 .../ui/presenter/home/DeepLinkPresenter.kt | 0 .../home/DirectMessageBadgePresenter.kt | 0 .../ui/presenter/home/DiscoverPresenter.kt | 0 .../home/DiscoverStatusTimelinePresenter.kt | 0 .../ui/presenter/home/FavIconPresenter.kt | 0 .../ui/presenter/home/GroupConfigPresenter.kt | 0 .../ui/presenter/home/HomeTabItemPresenter.kt | 0 .../home/HomeTabSettingsPresenter.kt | 0 .../presenter/home/HomeTimelinePresenter.kt | 0 .../ui/presenter/home/LoggedInPresenter.kt | 0 .../presenter/home/MixedTimelinePresenter.kt | 0 .../home/NotificationBadgePresenter.kt | 0 .../presenter/home/SearchHistoryPresenter.kt | 0 .../ui/presenter/home/SearchPresenter.kt | 0 .../home/SearchStatusTimelinePresenter.kt | 0 .../presenter/home/SecondaryTabsPresenter.kt | 0 .../ui/presenter/home/TimelinePresenter.kt | 0 .../flare/ui/presenter/home/UserPresenter.kt | 0 .../BlueskyBookmarkTimelinePresenter.kt | 0 .../home/bluesky/BlueskyFeedPresenter.kt | 0 .../bluesky/BlueskyFeedTimelinePresenter.kt | 0 .../home/bluesky/BlueskyFeedsPresenter.kt | 0 .../MastodonBookmarkTimelinePresenter.kt | 0 .../MastodonFavouriteTimelinePresenter.kt | 0 .../MastodonLocalTimelinePresenter.kt | 0 .../MastodonPublicTimelinePresenter.kt | 0 .../misskey/MissKeyLocalTimelinePresenter.kt | 0 .../misskey/MissKeyPublicTimelinePresenter.kt | 0 .../misskey/MisskeyChannelListPresenter.kt | 0 .../home/misskey/MisskeyChannelPresenter.kt | 0 .../MisskeyChannelTimelinePresenter.kt | 0 .../MisskeyFavouriteTimelinePresenter.kt | 0 .../misskey/MisskeyHybridTimelinePresenter.kt | 0 .../home/rss/CheckRssSourcePresenter.kt | 0 .../home/rss/EditRssSourcePresenter.kt | 0 .../presenter/home/rss/ExportOPMLPresenter.kt | 0 .../presenter/home/rss/ImportOPMLPresenter.kt | 0 .../presenter/home/rss/RssDetailPresenter.kt | 0 .../home/rss/RssDetailTranslatePresenter.kt | 0 .../presenter/home/rss/RssSourcesPresenter.kt | 0 .../home/rss/RssTimelinePresenter.kt | 0 .../home/vvo/VVOFavouriteTimelinePresenter.kt | 0 .../home/vvo/VVOLikeTimelinePresenter.kt | 0 .../home/xqt/TwitterArticlePresenter.kt | 0 .../home/xqt/XQTBookmarkTimelinePresenter.kt | 0 .../xqt/XQTDeviceFollowTimelinePresenter.kt | 0 .../home/xqt/XQTFeaturedTimelinePresenter.kt | 0 .../ui/presenter/list/AllListPresenter.kt | 0 .../presenter/list/AntennasListPresenter.kt | 0 .../list/AntennasTimelinePresenter.kt | 0 .../list/ChannelTimelinePresenter.kt | 0 .../ui/presenter/list/CreateListPresenter.kt | 0 .../ui/presenter/list/DeleteListPresenter.kt | 0 .../list/EditAccountListPresenter.kt | 0 .../presenter/list/EditListMemberPresenter.kt | 0 .../ui/presenter/list/ListEditPresenter.kt | 0 .../ui/presenter/list/ListInfoPresenter.kt | 0 .../ui/presenter/list/ListMembersPresenter.kt | 0 .../presenter/list/ListTimelinePresenter.kt | 0 .../list/PinnableTimelineTabPresenter.kt | 0 .../presenter/login/BlueskyLoginPresenter.kt | 0 .../login/BlueskyOAuthLoginPresenter.kt | 0 .../login/InstanceMetadataPresenter.kt | 0 .../login/MastodonCallbackPresenter.kt | 0 .../login/MisskeyCallbackPresenter.kt | 0 .../ui/presenter/login/NodeInfoPresenter.kt | 0 .../ui/presenter/login/NostrLoginPresenter.kt | 0 .../presenter/login/ServiceSelectPresenter.kt | 0 .../ui/presenter/login/VVOLoginPresenter.kt | 0 .../ui/presenter/login/XQTLoginPresenter.kt | 0 .../presenter/podcast/PodcastListPresenter.kt | 0 .../ui/presenter/podcast/PodcastPresenter.kt | 0 .../presenter/profile/BlockUserPresenter.kt | 0 .../presenter/profile/FollowingPresenter.kt | 0 .../ui/presenter/profile/MuteUserPresenter.kt | 0 .../profile/ProfileMediaPresenter.kt | 0 .../ui/presenter/profile/ProfilePresenter.kt | 0 .../presenter/profile/UnblockUserPresenter.kt | 0 .../presenter/profile/UnmuteUserPresenter.kt | 0 .../ui/presenter/server/AiTLDRPresenter.kt | 0 .../presenter/settings/AccountsPresenter.kt | 0 .../presenter/settings/AiConfigPresenter.kt | 0 .../settings/AiTranslationTestPresenter.kt | 0 .../presenter/settings/AppearancePresenter.kt | 0 .../ui/presenter/settings/DevModePresenter.kt | 0 .../settings/ExportAppDatabasePresenter.kt | 0 .../settings/ImportAppDatabasePresenter.kt | 0 .../settings/LocalCacheSearchPresenter.kt | 0 .../settings/LocalFilterPresenter.kt | 0 .../settings/NostrRelaysPresenter.kt | 0 .../settings/OpenAIModelsPresenter.kt | 0 .../ui/presenter/settings/StoragePresenter.kt | 0 .../ui/presenter/splash/SplashPresenter.kt | 0 .../ui/presenter/status/DownloadPresenter.kt | 0 .../status/LogStatusHistoryPresenter.kt | 0 .../status/LogUserHistoryPresenter.kt | 0 .../status/StatusContextPresenter.kt | 0 .../ui/presenter/status/StatusPresenter.kt | 0 .../ui/presenter/status/TranslatePresenter.kt | 0 .../presenter/status/VVOCommentPresenter.kt | 0 .../status/VVOStatusDetailPresenter.kt | 0 .../status/action/AddReactionPresenter.kt | 0 .../action/BlueskyReportStatusPresenter.kt | 0 .../status/action/DeleteStatusPresenter.kt | 0 .../status/action/MastodonReportPresenter.kt | 0 .../status/action/MisskeyReportPresenter.kt | 0 .../flare/ui/render/HtmlRenderRunMapper.kt | 0 .../flare/ui/render/HtmlToUiRichText.kt | 0 .../flare/ui/render/TranslationJson.kt | 0 .../dimension/flare/ui/render/UiDateTime.kt | 0 .../dimension/flare/ui/render/UiRichText.kt | 0 .../dimension/flare/ui/route/DeeplinkRoute.kt | 0 .../bluesky/BlueskyFeedsWithTabsPresenter.kt | 0 .../screen/list/AllListWithTabsPresenter.kt | 0 .../MisskeyAntennasListWithTabsPresenter.kt | 0 .../ui/screen/rss/RssListWithTabsPresenter.kt | 0 .../settings/AccountManagementPresenter.kt | 0 .../ui/screen/settings/AllTabsPresenter.kt | 0 .../dev/dimension/flare/DatabaseHelper.kt | 0 .../dev/dimension/flare/TestFileHelper.kt | 0 .../dimension/flare/common/PagingStateTest.kt | 0 .../dimension/flare/common/TestFormatter.kt | 0 .../common/deeplink/DeepLinkMappingTest.kt | 0 .../common/deeplink/DeepLinkMatcherTest.kt | 0 .../common/deeplink/DeepLinkPatternTest.kt | 0 .../flare/common/deeplink/KeyDecoderTest.kt | 0 .../data/database/cache/dao/MessageDaoTest.kt | 0 .../database/cache/dao/TranslationDaoTest.kt | 0 .../database/cache/mapper/MicroblogTest.kt | 0 .../microblog/MixedRemoteMediatorTest.kt | 0 .../microblog/PostEventHandlerTest.kt | 0 .../microblog/handler/EmojiHandlerTest.kt | 0 .../microblog/handler/ListHandlerTest.kt | 0 .../handler/ListMemberHandlerTest.kt | 0 .../handler/NotificationHandlerTest.kt | 0 .../microblog/handler/PostHandlerTest.kt | 0 .../microblog/handler/RelationHandlerTest.kt | 0 .../microblog/handler/UserHandlerTest.kt | 0 .../misskey/MisskeyTimelinePrependTest.kt | 0 .../rss/RssTimelineRemoteMediatorTest.kt | 0 .../model/TranslateConfigSerializationTest.kt | 0 .../appearance/AppearanceMigrationTest.kt | 0 .../model/appearance/AppearancePatchTest.kt | 0 .../model/tab/TabSettingsMigrationTest.kt | 0 .../TimelineFilterConfigSerializationTest.kt | 0 .../data/network/ai/OpenAIServiceTest.kt | 0 .../network/bluesky/BlueskyAuthPluginTest.kt | 0 .../network/mastodon/MastodonExceptionTest.kt | 0 .../MastodonPagingConverterFactoryTest.kt | 0 .../api/model/MisskeyNotificationTypeTest.kt | 0 .../network/misskey/api/model/UserLiteTest.kt | 0 .../network/nodeinfo/NodeInfoServiceTest.kt | 0 .../network/nostr/NostrRichTextParserTest.kt | 0 .../data/network/nostr/NostrServiceTest.kt | 0 .../flare/data/network/rss/model/FeedTest.kt | 0 .../flare/data/network/rss/model/OpmlTest.kt | 0 .../AccountTabSyncCoordinatorSanitizerTest.kt | 0 .../data/repository/DraftMediaStoreTest.kt | 0 .../data/repository/DraftRepositoryTest.kt | 0 .../AiPlaceholderTranslationSupportTest.kt | 0 .../translation/DeepLTargetLanguageTest.kt | 0 ...GoogleWebTranslationDocumentSupportTest.kt | 0 ...ogleWebTranslationWhitespaceSupportTest.kt | 0 .../PreTranslationContentRulesTest.kt | 0 .../TranslationPromptFormatterTest.kt | 0 .../TranslationProviderAiPlaceholderTest.kt | 0 .../TranslationProviderCacheKeyTest.kt | 0 .../data/translation/TranslationTestConfig.kt | 0 .../flare/ui/model/CacheDataToUiTest.kt | 0 .../flare/ui/model/UiMediaFileNameTest.kt | 0 .../flare/ui/model/UiProfileMergeTest.kt | 0 .../ui/model/mapper/BlueskyFacetsTest.kt | 0 .../mapper/BlueskyNotificationRenderTest.kt | 0 .../ui/model/mapper/BlueskyRenderTest.kt | 0 .../ui/model/mapper/BlueskyUiMappingTest.kt | 0 .../ui/model/mapper/MastodonRenderTest.kt | 0 .../ui/model/mapper/MisskeyRenderTest.kt | 0 .../ui/model/mapper/RssDateParserTest.kt | 0 .../flare/ui/model/mapper/VVORenderTest.kt | 0 .../flare/ui/model/mapper/XQTRenderTest.kt | 0 .../flare/ui/model/mapper/XQTTest.kt | 0 .../SettingsImportExportPresenterTest.kt | 0 .../compose/InitialTextResolverTest.kt | 0 .../presenter/compose/SaveDraftUseCaseTest.kt | 0 .../presenter/compose/SendDraftUseCaseTest.kt | 0 .../home/GroupConfigPresenterTest.kt | 0 .../home/TimelinePresenterBindingTest.kt | 0 .../home/TimelinePresenterFilterTest.kt | 0 .../home/rss/ExportOPMLPresenterTest.kt | 0 .../home/rss/ImportOPMLPresenterTest.kt | 0 .../settings/AiConfigPresenterTest.kt | 0 .../ExportAppDatabasePresenterTest.kt | 0 .../ui/render/HtmlRenderRunMapperTest.kt | 0 .../render/TranslationJsonUiRichTextTest.kt | 0 .../flare/ui/render/UiRichTextTest.kt | 0 .../flare/ui/route/DeeplinkRouteTest.kt | 0 .../dimension/flare/common/BuildConfig.jvm.kt | 0 .../dimension/flare/common/FileItem.jvm.kt | 0 .../flare/common/FileSystemUtilsExt.kt | 0 .../dimension/flare/common/JvmOnDeviceAI.kt | 0 .../dev/dimension/flare/common/Locale.jvm.kt | 0 .../flare/data/database/DriverFactory.jvm.kt | 0 .../flare/data/io/JvmPlatformPathProducer.kt | 0 .../data/network/HttpClientEngine.jvm.kt | 0 .../network/nostr/AmberSignerBridge.jvm.kt | 0 .../data/repository/DraftMediaStore.jvm.kt | 0 .../dimension/flare/di/PlatformModule.jvm.kt | 0 .../flare/shared/image/JvmImageCompressor.kt | 0 .../flare/ui/humanizer/JVMFormatter.kt | 0 .../dev/dimension/flare/DatabaseHelper.jvm.kt | 0 .../dev/dimension/flare/TestFileHelper.jvm.kt | 0 .../SerializationFormatBenchmarkTest.kt | 0 .../network/rss/RssServiceRegressionTest.kt | 0 .../shared/image/JvmImageCompressorTest.kt | 0 .../flare/ui/model/DeeplinkEventTest.kt | 0 .../dimension/flare/ui/model/UiPollTest.kt | 0 settings.gradle.kts | 1 - shared/build.gradle.kts | 137 ------------------ 1415 files changed, 122 insertions(+), 144 deletions(-) rename {shared => presenter/features}/schemas/dev.dimension.flare.data.database.app.AppDatabase/10.json (100%) rename {shared => presenter/features}/schemas/dev.dimension.flare.data.database.app.AppDatabase/3.json (100%) rename {shared => presenter/features}/schemas/dev.dimension.flare.data.database.app.AppDatabase/4.json (100%) rename {shared => presenter/features}/schemas/dev.dimension.flare.data.database.app.AppDatabase/5.json (100%) rename {shared => presenter/features}/schemas/dev.dimension.flare.data.database.app.AppDatabase/6.json (100%) rename {shared => presenter/features}/schemas/dev.dimension.flare.data.database.app.AppDatabase/7.json (100%) rename {shared => presenter/features}/schemas/dev.dimension.flare.data.database.app.AppDatabase/8.json (100%) rename {shared => presenter/features}/schemas/dev.dimension.flare.data.database.app.AppDatabase/9.json (100%) rename {shared => presenter/features}/src/androidHostTest/kotlin/dev/dimension/flare/DatabaseHelper.android.kt (100%) rename {shared => presenter/features}/src/androidHostTest/kotlin/dev/dimension/flare/shared/image/AndroidImageCompressorTest.kt (100%) rename {shared => presenter/features}/src/androidJvmMain/kotlin/dev/dimension/flare/data/network/rss/CharsetDecoder.androidJvm.kt (100%) rename {shared => presenter/features}/src/androidJvmMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.androidJvm.kt (100%) rename {shared => presenter/features}/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.androidJvm.kt (100%) rename {shared => presenter/features}/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiRichText.androidJvm.kt (100%) rename {shared => presenter/features}/src/androidMain/AndroidManifest.xml (100%) rename {shared => presenter/features}/src/androidMain/kotlin/dev/dimension/flare/common/BuildConfig.android.kt (100%) rename {shared => presenter/features}/src/androidMain/kotlin/dev/dimension/flare/common/FileItem.android.kt (100%) rename {shared => presenter/features}/src/androidMain/kotlin/dev/dimension/flare/common/Locale.android.kt (100%) rename {shared => presenter/features}/src/androidMain/kotlin/dev/dimension/flare/data/database/DriverFactory.android.kt (100%) rename {shared => presenter/features}/src/androidMain/kotlin/dev/dimension/flare/data/io/AndroidPlatformPathProducer.kt (100%) rename {shared => presenter/features}/src/androidMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.android.kt (100%) rename {shared => presenter/features}/src/androidMain/kotlin/dev/dimension/flare/data/network/nostr/AmberSignerBridge.android.kt (100%) rename {shared => presenter/features}/src/androidMain/kotlin/dev/dimension/flare/data/repository/DraftMediaStore.android.kt (100%) rename {shared => presenter/features}/src/androidMain/kotlin/dev/dimension/flare/di/PlatformModule.android.kt (100%) rename {shared => presenter/features}/src/androidMain/kotlin/dev/dimension/flare/shared/image/AndroidImageCompressor.kt (100%) rename {shared => presenter/features}/src/androidMain/kotlin/dev/dimension/flare/ui/common/AmberSignerLauncherBinding.kt (100%) rename {shared => presenter/features}/src/androidMain/kotlin/dev/dimension/flare/ui/humanizer/AndroidFormatter.kt (100%) rename {shared => presenter/features}/src/appleMain/kotlin/dev/dimension/flare/common/AppleOnDeviceAI.kt (100%) rename {shared => presenter/features}/src/appleMain/kotlin/dev/dimension/flare/common/BuildConfig.apple.kt (100%) rename {shared => presenter/features}/src/appleMain/kotlin/dev/dimension/flare/common/FileItem.apple.kt (100%) rename {shared => presenter/features}/src/appleMain/kotlin/dev/dimension/flare/common/Locale.apple.kt (100%) rename {shared => presenter/features}/src/appleMain/kotlin/dev/dimension/flare/common/SwiftOnDeviceAI.kt (100%) rename {shared => presenter/features}/src/appleMain/kotlin/dev/dimension/flare/data/database/DriverFactory.apple.kt (100%) rename {shared => presenter/features}/src/appleMain/kotlin/dev/dimension/flare/data/io/ApplePlatformPathProducer.kt (100%) rename {shared => presenter/features}/src/appleMain/kotlin/dev/dimension/flare/data/model/appearance/TimelinePresentationAppearancePatchHelper.kt (100%) rename {shared => presenter/features}/src/appleMain/kotlin/dev/dimension/flare/data/model/tab/TimelineTabItemV2Helpers.kt (100%) rename {shared => presenter/features}/src/appleMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.apple.kt (100%) rename {shared => presenter/features}/src/appleMain/kotlin/dev/dimension/flare/data/network/nostr/AmberSignerBridge.apple.kt (100%) rename {shared => presenter/features}/src/appleMain/kotlin/dev/dimension/flare/data/network/rss/CharsetDecoder.apple.kt (100%) rename {shared => presenter/features}/src/appleMain/kotlin/dev/dimension/flare/data/repository/DraftMediaStore.apple.kt (100%) rename {shared => presenter/features}/src/appleMain/kotlin/dev/dimension/flare/di/PlatformModule.apple.kt (100%) rename {shared => presenter/features}/src/appleMain/kotlin/dev/dimension/flare/shared/image/IosImageCompressor.kt (100%) rename {shared => presenter/features}/src/appleMain/kotlin/dev/dimension/flare/ui/humanizer/AppleFormatter.kt (100%) rename {shared => presenter/features}/src/appleMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.apple.kt (100%) rename {shared => presenter/features}/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.apple.kt (100%) rename {shared => presenter/features}/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiRichText.apple.kt (100%) rename {shared => presenter/features}/src/appleTest/kotlin/dev/dimension/flare/DatabaseHelper.apple.kt (100%) rename {shared => presenter/features}/src/appleTest/kotlin/dev/dimension/flare/TestFileHelper.apple.kt (100%) rename {shared => presenter/features}/src/appleTest/kotlin/dev/dimension/flare/common/SerializationFormatBenchmarkAppleTest.kt (100%) rename {shared => presenter/features}/src/appleTest/kotlin/dev/dimension/flare/shared/image/IosImageCompressorTest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/BasePagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/BaseRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/BuildConfig.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/Cacheable.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/FileItem.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/FileNameSanitizer.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/FileType.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/FlowExt.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/ImmutableListWrapper.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/InAppNotification.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/JSON.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/LazyPagingItemsExt.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/Locale.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/MimeTypes.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/OnDeviceAI.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/PagingState.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/Protobuf.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/ProtobufSerializer.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/SerializableImmutableList.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/SnowflakeIdGenerator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/SwitchingServiceManager.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/XML.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMapping.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMatcher.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkPattern.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/KeyDecoder.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/DriverFactory.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/ProvideDatabase.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/AccountTypeConverter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/MicroBlogKeyConverter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/PlatformTypeConverter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/SubscriptionTypeConverter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/AppDatabase.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/AccountDao.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/ApplicationDao.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/DraftDao.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/KeywordFilterDao.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/RssSourceDao.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/SearchHistoryDao.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/AppDatabaseExport.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbAccount.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbApplication.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbDraft.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbKeywordFilter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbRssSources.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbSearchHistory.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/CacaheDatabase.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/EmojiDao.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/ListDao.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/MessageDao.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/PagingTimelineDao.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/StatusDao.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/StatusReferenceDao.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/TranslationDao.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/UserDao.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/Bluesky.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/Microblog.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/User.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/XQT.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbDirectMessage.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbEmoji.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbList.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbPagingTimeline.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbStatus.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbStatusReference.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbTranslation.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbUser.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbUserHistory.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/EmojiContent.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/TranslationDisplay.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyDataSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyDirectMessageLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyFeedLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyListLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyListMemberLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BookmarkTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/FansPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/FeedTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/FollowingPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/HomeTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/ListTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/NotificationRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/SearchStatusRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/SearchUserPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/StatusDetailRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/TrendsUserPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/UserLikesTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/UserTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestDiscoverStatusPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestMastodonDataSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestMastodonLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestPublicTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestSearchStatusPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestStatusDetailPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestTimelinePagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestTrendsRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestUserTimelinePagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/BookmarkTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/DiscoverStatusRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/FavouriteTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/HomeTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/ListTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonDataSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonFansPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonFollowingPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonListLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonListMemberLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MentionRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/NotificationRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/PublicTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/SearchStatusPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/SearchUserPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/StatusDetailRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/TrendHashtagPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/TrendsUserLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/UserTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ActionMenu.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/AuthenticatedMicroblogDataSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ComposeConfig.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ComposeData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ComposeType.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/DatabaseUpdater.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/DirectMessageDataSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/MicroblogDataSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/MixedRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/NotificationFilter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/Paging.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/PostEvent.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ProfileTab.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ReactionDataSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/RecommendInstancePagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/ListDataSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/NotificationDataSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/PinnableTimelineTabDataSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/PostDataSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/RelationDataSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/TimelineTabConfigurationDataSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/UserDataSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/DirectMessageHandler.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/EmojiHandler.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/ListHandler.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/ListMemberHandler.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/NotificationHandler.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/PostEventHandler.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/PostHandler.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/RelationHandler.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/UserHandler.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/list/ListMetaData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/list/ListMetaDataType.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/DirectMessageLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/EmojiLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/ListLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/ListMemberLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/NotificationLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/PostLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/RelationLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/UserLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/BasePagingRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/CacheableRemoteLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/PagingRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/PagingResult.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/RemoteLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/SortIdProvider.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/TimelinePagingMapper.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/TimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/AntennasListPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/AntennasTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/ChannelTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/DiscoverStatusRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FansPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FavouriteTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FollowingPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/HomeTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/HybridTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/ListTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/LocalTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MentionTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyChannelLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyDataSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyListLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyListMemberLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/NotificationRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/PublicTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/SearchStatusRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/SearchUserPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/StatusDetailRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/TrendHashtagPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/TrendsUserPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/UserTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/NostrCache.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/NostrDataSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/NostrLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/StatusDetailRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/pleroma/PleromaDataSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/rss/RssDataSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/rss/RssTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/CommentChildRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/CommentPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/DiscoverStatusRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/FansPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/FavouriteRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/FollowingPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/HomeTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/LikePagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/LikeRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/MentionRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/SearchStatusRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/SearchUserPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/StatusCommentRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/StatusRepostRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/TrendHashtagPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/UserTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVODataSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVOLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVONotificationBadgeStore.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/DeviceFollowRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/FansPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/FollowingPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/HomeTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/ListTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/MentionRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/NotificationPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/SearchStatusPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/SearchUserPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/StatusDetailRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/TrendHashtagPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/TrendsUserPagingSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/User.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/UserLikesTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/UserMediaTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/UserRepliesTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/UserTimelineRemoteMediator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTDataSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTDirectMessageLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTListLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTListMemberLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTLoader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datastore/AppDataStore.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/AiPromptDefaults.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/AppSettings.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/ComposeConfigData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/FlareConfig.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/io/PlatformPathProducer.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/model/AppearanceSettings.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/model/DataExport.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/model/IconType.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/model/SettingsExport.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/model/TabSettings.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceBag.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceKey.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceKeys.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceMigration.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceModels.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearancePatch.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceSynthesizer.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/model/tab/TabSettingsMigration.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/model/tab/Timeline.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/Ktorfit.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/ai/AiCompletionService.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/ai/OpenAIService.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/bluesky/BlueskyAuthPlugin.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/bluesky/BlueskyPlatformDetector.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/bluesky/BlueskyService.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/bluesky/model/DidDoc.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/GuestMastodonService.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/JoinMastodonService.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/MastodonException.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/MastodonOAuthService.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/MastodonPlatformDetector.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/MastodonService.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/AccountResources.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/FriendshipResources.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/InstanceResources.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/JoinMastodonResources.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/ListsResources.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/LookupResources.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/MastodonOAuthResources.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/MastodonResources.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/SearchResources.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/StatusResources.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/TimelineResources.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/TrendsResources.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Account.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Application.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Attachment.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Card.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Context.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/CreateApplicationResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Emoji.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/EmojiReaction.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Field.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Hashtag.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/History.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/InstanceInfoV1.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonAuthScope.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonInstanceElement.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonList.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonPaging.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MediaType.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Mention.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Meta.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Notification.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Option.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Original.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Poll.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostAccounts.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostList.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostPoll.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostReport.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostStatus.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostVote.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/RelationshipResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/RequestTokenResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/SearchResult.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/SearchType.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Small.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Source.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Status.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Tag.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Trend.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/UploadResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/VerifyCredentialsResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Visibility.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/JoinMisskeyService.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/MisskeyAuthorizationPlugin.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/MisskeyOauthService.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/MisskeyPlatformDetector.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/MisskeyService.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AccountApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AdminApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AntennasApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AppApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AuthApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AuthResources.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ChannelsApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ChartsApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ClipApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ClipsApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/DefaultApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/DriveApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/FederationApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/FlashApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/FlashsApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/FollowingApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/GalleryApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/HashtagsApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ListsApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/MetaApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/MisskeyInstanceAppApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/NonProductiveApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/NotesApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/NotificationsApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/PagesApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ReactionsApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ResetPasswordApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/RoleApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/UsersApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/WebhooksApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverCreate200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverCreateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverDeleteRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverListRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverUpdateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseUserReports200ResponseInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseUserReportsRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAccountsCreateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAccountsDeleteRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAdCreateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAdDeleteRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAdListRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAdUpdateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsCreate200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsCreateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsList200ResponseInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsListRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsUpdateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminDriveFilesRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminDriveShowFile200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminDriveShowFileRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiAddAliasesBulkRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiAddRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiCopy200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiCopyRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiDeleteBulkRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiList200ResponseInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiListRemote200ResponseInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiListRemoteRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiListRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiSetCategoryBulkRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiSetLicenseBulkRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiUpdateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminFederationDeleteAllFilesRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminFederationUpdateInstanceRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminInviteCreate200ResponseInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminInviteCreateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminInviteListRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminMeta200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminPromoCreateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminQueueDeliverDelayed200ResponseInnerInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminQueuePromoteRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminQueueStats200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRelaysAdd200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRelaysAddRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminResetPassword200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminResolveAbuseUserReportRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesAssignRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesCreateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesDeleteRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesUnassignRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesUpdateDefaultPoliciesRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesUpdateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesUsersRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminSendEmailRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200ResponseCpu.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200ResponseFs.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200ResponseMem.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200ResponseNet.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminShowModerationLogs200ResponseInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminShowUsersRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminUpdateMetaRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminUpdateUserNoteRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Announcements200ResponseInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AnnouncementsRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Antenna.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AntennasCreateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AntennasDeleteRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AntennasNotesRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AntennasUpdateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ApGetRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ApShow200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ApShow200ResponseOneOf.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ApShow200ResponseOneOf1.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/App.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AppCreateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AppShowRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionGenerate200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionGenerateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionShow200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionShowRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionUserkey200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionUserkeyRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Blocking.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/BlockingListRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Channel.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsCreateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsFeaturedRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsFollowRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsFollowedRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsSearchRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsTimelineRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsUpdateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsActiveUsers200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsActiveUsersRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsApRequest200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsDrive200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsFederation200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsInstance200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsInstanceRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsNotes200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserDrive200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserDriveRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserFollowing200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserNotes200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserPv200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserReactions200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUsers200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Clip.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsAddNoteRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsCreateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsDeleteRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsNotesRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsUpdateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Drive200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFile.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFileProperties.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesAttachedNotesRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesCheckExistenceRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesFindRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesUpdateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesUploadFromUrlRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFolder.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersCreateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersDeleteRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersFindRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersUpdateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveStreamRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmailAddressAvailable200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmailAddressAvailableRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmojiDetailed.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmojiRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmojiSimple.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Emojis200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EndpointRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Error.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ErrorError.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationFollowersRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationInstance.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationInstancesRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationShowInstance200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationStatsRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FetchRssRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Flash.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FlashCreateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FlashDeleteRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FlashMyLikes200ResponseInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FlashUpdateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Following.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FollowingRequestsList200ResponseInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FollowingRequestsListRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/GalleryPost.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/GalleryPostsCreateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/GalleryPostsDeleteRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/GalleryPostsUpdateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Hashtag.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsListRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsSearchRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsShowRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsTrend200ResponseInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsUsersRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IClaimAchievementRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IGalleryLikes200ResponseInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IGetWordMutedNotesCount200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/INotificationsRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IPageLikes200ResponseInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IPinRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IReadAnnouncementRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IUpdateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IUpdateRequestFieldsInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IWebhooksCreateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IWebhooksShowRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IWebhooksUpdateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/InviteCode.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/InviteDeleteRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/InviteLimit200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ListMembership.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MeDetailed.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MeDetailedOnly.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Meta200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Meta200ResponseAdsInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Meta200ResponseFeatures.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MetaRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MisskeyException.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MisskeyInstance.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MuteCreateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Muting.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MyAppsRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Note.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NoteChannelInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NoteFavorite.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NoteReaction.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesChildrenRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesConversationRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesCreate200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesCreateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesCreateRequestPoll.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesFeaturedRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesGlobalTimelineRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesHybridTimelineRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesLocalTimelineRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesMentionsRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesPollsVoteRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesReactionsCreateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesReactionsRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesRepliesRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesSearchByTagRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesSearchRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesState200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesTranslateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesUserListTimelineRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Notification.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotificationsCreateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Page.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PagesCreateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PagesDeleteRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PagesShowRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PagesUpdateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Ping200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PinnedUsersRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Poll.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/QueueCount.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/RenoteMuting.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/RequestResetPasswordRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ResetPasswordRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/RolesNotesRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Stats200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwRegister200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwRegisterRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwShowRegistration200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwUpdateRegistration200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwUpdateRegistrationRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/TestRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/User.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserDetailed.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserDetailedNotMe.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserDetailedNotMeOnly.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserDetailedNotMeOnlyFieldsInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserList.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserLite.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsernameAvailable200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsernameAvailableRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersClipsRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersFollowersRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersGetFrequentlyRepliedUsers200ResponseInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersGetFrequentlyRepliedUsersRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsCreateFromPublicRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsCreateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsDeleteRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsListRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsPullRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsShowRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsUpdateRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersNotesRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersReactionsRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRelation200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRelation200ResponseOneOf.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRelation200ResponseOneOf1Inner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRelationRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersReportAbuseRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersSearchByUsernameAndHostRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersSearchRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersShow200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersShowRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersUpdateMemoRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Visibility.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/response/MiAuthCheckResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/serializer/MisskeyEmojiMapSerializer.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/NodeInfoService.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/PlatformDetector.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/NodeInfo.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/Schema10.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/Schema11.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/Schema20.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/Schema21.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/AmberSignerBridge.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrBlossomUploader.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrCompat.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrPlatformDetector.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrRichTextParser.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrService.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/CharsetDecoder.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/Readability.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/RssService.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/model/Feed.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/model/Opml.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/model/OpmlParser.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/VVOPlatformDetector.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/VVOService.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/api/ConfigApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/api/StatusApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/api/TimelineApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/api/UserApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/model/EmojiData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/model/ProfileData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/model/TimelineData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/XQTPlatformDetector.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/XQTService.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/DefaultApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/DmApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/GuestApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/ListsApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/MediaApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/OtherApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/PostApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/TweetApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/UserApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/UserListApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/UsersApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/V11GetApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/V11PostApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/V20GetApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/VDmPostJsonPostApi.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/elonmusk114514/ElonMusk1145141919810.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/AccountSettingsResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ActivateResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/AdditionalMediaInfo.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/AudioSpaceByIDResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchEntity.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchEntityRef.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchPivot.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchPivotFooter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchPivotNote.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchPivotSubtitle.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BookmarksResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BookmarksResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BookmarksTimeline.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Callback.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ClientEventInfo.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CommunitiesActions.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ContentEntryType.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ContentItemType.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ContentUnion.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CoverCta.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateRetweet.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateRetweetResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateRetweetResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateRetweetResponseResult.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateTweet.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateTweetResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateTweetResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateTweetResponseResult.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CtaClientEventInfo.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CursorType.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseDataAddParticipants.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseDataAddParticipantsParticipantsJoinEvent.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseDataAddParticipantsParticipantsJoinEventDmEventResults.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseDataAddParticipantsParticipantsJoinEventDmEventResultsResult.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMBlockUserResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMBlockUserResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMBlockUserResponseDataDmBlockByRestId.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConversationSearchTabGroupsQueryResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConversationSearchTabGroupsQueryResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConversationSearchTabPeopleQueryResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConversationSearchTabPeopleQueryResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoLegacy.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoMetadata.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoMetadataAvatar.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoMetadataAvatarMediaInfo.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoSearch.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEvent.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventDetail.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventDetailDM.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventDetailDMEntities.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventDetailInitialLowQualityState.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventLegacy.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMGroupSearchSlice.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMGroupSearchSliceItemsInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMGroupSearchSliceItemsInnerHighlighting.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMGroupSearchSliceSliceInfo.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationItem.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationLabel.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationLegacy.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationLegacyMetadata.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationParticipant.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationParticipantUserResults.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationPerspectivalMetadata.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationUser.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationUserLegacy.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedInboxQueryResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedInboxQueryResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedInboxQueryResponseDataLabeledConversationSlice.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxTimelines.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageDeleteMutationResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageDeleteMutationResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageSearchSlice.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageSearchSliceItemsInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageSearchTabQueryResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageSearchTabQueryResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMParticipantMetadata.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPeopleSearchSlice.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPermissionsCreateGroupConversationResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPermissionsCreateGroupConversationResponsePermissions.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPermissionsCreateGroupConversationResponsePermissionsIdKeysValue.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPerspectivalConversationMetadata.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPinnedInboxAppendMutationResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPinnedInboxAppendMutationResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPinnedInboxAppendMutationResponseDataAddDmConversationLabelV3.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPinnedInboxDeleteMutationResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUnblockUserResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUnblockUserResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUnblockUserResponseDataDmUnblockByRestId.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUseDMReactionMutationAddMutationResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUseDMReactionMutationAddMutationResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUseDMReactionMutationAddMutationResponseDataCreateDmReaction.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUseDMReactionMutationAddMutationResponseDataDeleteDmReaction.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUserResults.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteRetweet.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteRetweetResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteRetweetResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteRetweetResponseResult.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteTweetResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteTweetResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteTweetResponseResult.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DmAllSearchSliceResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DmAllSearchSliceResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DmNew2Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Entities.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Error.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ErrorExtensions.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ErrorResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Errors.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ExtMediaAvailability.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ExtendedEntities.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Extensions.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FavoriteTweet.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FavoriteTweetResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FleetlineResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowResponseResult.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowResponseUser.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowTimeline.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetBookmarks200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetFavoriters200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetFollowers200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetHomeLatestTimeline200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetLikes200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetListLatestTweetsTimeline200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetProfileSpotlightsQuery200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetRetweeters200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetSearchTimeline200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetTweetDetail200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetTweetResultByRestId200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetUserByRestId200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetUserHighlightsTweets200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetUsersByRestIds200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/HomeTimelineHome.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/HomeTimelineResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversation.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationParticipantsInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineConversation.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachment.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentAnimatedGif.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaAltText.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaColor.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaColorPalette.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaColorR.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaExt.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaExtMediaColor.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaOriginalInfo.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaRGB.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaSize.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaSizes.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaStats.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaVideoInfo.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaVideoVariant.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentPhoto.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentTweet.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentVideo.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntities.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntitiesHashtagEntity.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntitiesSymbolEntity.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntitiesUrlEntity.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntitiesUserMentionEntity.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataReplyData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineURL.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMTrustedTimelineResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMTrustedTimelineResponseInboxTimeline.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMUserUpdateResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMUserUpdateResponseInboxInitialState.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMUserUpdateResponseInboxInitialStateInboxTimelines.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMUserUpdateResponseUserEvents.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxMessageData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationAvatarUpdateEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationAvatarUpdateEntryConversationAvatarUpdate.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationAvatarUpdateEntryConversationAvatarUpdateAvatar.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationAvatarUpdateEntryConversationAvatarUpdateAvatarImage.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationCreateEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationCreateEntryConversationCreate.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationNameUpdateEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationNameUpdateEntryConversationNameUpdate.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationReadEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationReadEntryConversationRead.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineDisableNotificationsEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineDisableNotificationsORRemoveConversationEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineJoinConversationEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineJoinConversationEntryJoinConversation.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineJoinConversationEntryJoinConversationParticipantsInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMentionNotificationsSettingUpdateEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMentionNotificationsSettingUpdateEntryMentionNotificationsSettingUpdate.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageDeleteEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageDeleteORMarkAsSpamEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageDeleteORMarkAsSpamEntryMessagesInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageEntryMessage.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageMarkAsSpamEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsJoinEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsJoinEntryParticipantsJoin.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsJoinEntryParticipantsJoinParticipantsInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsLeaveEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsLeaveEntryParticipantsLeave.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineReactionCreateEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineReactionDeleteEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineRemoveConversationEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineTrustConversationEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineTrustConversationEntryTrustConversation.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxURL.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxUser.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxUserEntities.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxUserEntitiesUrl.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxUserEventReactionEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InstructionType.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InstructionUnion.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ItemContentUnion.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ItemResult.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ListLatestTweetsTimelineResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ListTweetsTimeline.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ListTweetsTimelineData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ListTweetsTimelineList.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/LiveVideoStreamStatusResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Location.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Media.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaExtended.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaOriginalInfo.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaOriginalInfoFocusRect.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaSize.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaSizes.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaStats.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaVideoInfo.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaVideoInfoVariant.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ModuleEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ModuleItem.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweet.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResult.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultMedia.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultMediaInlineMedia.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultRichText.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultRichTextTag.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/OneFactorLoginEligibility.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Other200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/OtherResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateRetweet200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateRetweetRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateRetweetRequestVariables.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweet200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestFeatures.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestVariables.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestVariablesMedia.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestVariablesMediaMediaEntitiesInner.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestVariablesReply.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteRetweet200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteRetweetRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteRetweetRequestVariables.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteTweet200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteTweetRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDmNew2Request.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostFavoriteTweet200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostFavoriteTweetRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostUnfavoriteTweet200Response.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostUnfavoriteTweetRequest.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ProfileResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ProfileResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Retweet.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/RetweetLegacy.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SearchByRawQuery.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SearchTimeline.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SearchTimelineData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SearchTimelineResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SelfThread.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Session.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SocialContext.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Text.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TextEntity.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TextEntityRef.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Timeline.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineAddEntries.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineAddEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineAddToModule.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineClearCache.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineCommunity.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineCoverBehavior.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineHalfCover.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineMessagePrompt.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelinePinEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelinePrompt.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineReplaceEntry.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineShowAlert.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineShowAlertRichText.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineShowCover.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineSpelling.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTerminateTimeline.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTimelineCursor.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTimelineItem.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTimelineModule.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTweet.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTweetComposer.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTwitterList.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineUser.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineV2.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Tracing.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Tweet.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetCard.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetCardLegacy.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetCardLegacyBindingValue.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetCardLegacyBindingValueData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetDetailResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetDetailResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetEditControl.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetEditControlInitial.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetEditPrespective.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetFavoritersResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetFavoritersResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetLegacy.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetResultByRestIdData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetResultByRestIdResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetRetweetersResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetRetweetersResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetTombstone.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetUnion.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetView.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetWithVisibilityResults.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TwitterArticle.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TypeName.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UnfavoriteTweet.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UnfavoriteTweetResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UpdateAccountSettingsResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UpdateAccountSettingsResponseSleepTime.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/User.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserFeatures.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsResult.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsTimeline.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsUser.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserLegacy.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserRecommendationsItem.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResultByScreenName.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResultByScreenNameLegacy.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResultByScreenNameResult.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResultCore.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResults.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserTweetsData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserTweetsResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserTweetsResult.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserTweetsUser.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserUnavailable.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserUnion.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UsersResponse.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UsersResponseData.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/XqtUrl.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/legacy/BadgeCount.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/legacy/TopLevel.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/platform/BlueskyPlatformSpec.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/platform/CommonTimelineSpecs.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/platform/MastodonPlatformSpec.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/platform/MisskeyPlatformSpec.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/platform/NostrPlatformSpec.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/platform/RssTimelineSpecs.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/platform/VvoPlatformSpec.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/platform/XqtPlatformSpec.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/repository/AccountRepository.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/repository/AccountTabSyncCoordinator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/repository/ApplicationRepository.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/repository/DebugRepository.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/repository/DraftMediaStore.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/repository/DraftRepository.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/repository/DraftSendingRecoveryCoordinator.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/repository/LocalFilterRepository.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/repository/SearchHistoryRepository.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/repository/SettingsRepository.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/translation/AiPlaceholderTranslationSupport.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationContentRules.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationModels.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationPayloadSupport.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationService.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationStoreSupport.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/translation/TranslationProvider.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/translation/TranslationProviderCacheKey.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/data/translation/TranslationSupport.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/di/AppModule.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/di/CommonModule.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/di/PlatformModule.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/model/AccountType.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/model/MicroBlogKey.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/model/PlatformSpec.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/model/PlatformType.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/model/ReferenceType.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/shared/image/ImageCompressor.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Instant.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Number.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/ClickContext.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/DeeplinkEvent.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/TranslationDisplayState.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiAccount.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiApplication.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiCard.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiDMRoom.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiDraft.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiEmoji.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiHandle.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiHashtag.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiIcon.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstance.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstanceMetadata.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiKeywordFilter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiList.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiMedia.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiNumber.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiPodcast.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiPoll.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiProfile.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiRelation.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiRssSource.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiSearchHistory.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiState.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiStatus.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiStrings.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiTimelineV2.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiTwitterArticle.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UriLauncher.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Bluesky.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Mastodon.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Misskey.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Nostr.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Render.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Rss.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/VVO.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/XQT.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/XQTActionMenu.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/EnvironmentSettingsPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/ExportDataPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/ExportSettingsPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/HomeTabsPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/HomeTimelineWithTabsPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/ImportDataPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/ImportSettingsPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/PinTabsPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/SettingsPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/State.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/ComposePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/ComposeUseCase.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/DraftBoxPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/EmojiHistoryPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/InitialTextResolver.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/RestoreDraftUseCase.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/SaveDraftUseCase.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/SendDraftUseCase.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/dm/DMConversationPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/dm/DMListPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/dm/UserDMConversationPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/ActiveAccountPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/AllNotificationBadgePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/AllNotificationPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DeepLinkPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DirectMessageBadgePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DiscoverPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DiscoverStatusTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/FavIconPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/GroupConfigPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/HomeTabItemPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/HomeTabSettingsPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/HomeTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/LoggedInPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/MixedTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/NotificationBadgePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/SearchHistoryPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/SearchPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/SearchStatusTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/SecondaryTabsPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/TimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/UserPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/bluesky/BlueskyBookmarkTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/bluesky/BlueskyFeedPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/bluesky/BlueskyFeedTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/bluesky/BlueskyFeedsPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/mastodon/MastodonBookmarkTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/mastodon/MastodonFavouriteTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/mastodon/MastodonLocalTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/mastodon/MastodonPublicTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MissKeyLocalTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MissKeyPublicTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyChannelListPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyChannelPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyChannelTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyFavouriteTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyHybridTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/CheckRssSourcePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/EditRssSourcePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/ExportOPMLPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/ImportOPMLPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/RssDetailPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/RssDetailTranslatePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/RssSourcesPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/RssTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/vvo/VVOFavouriteTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/vvo/VVOLikeTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/xqt/TwitterArticlePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/xqt/XQTBookmarkTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/xqt/XQTDeviceFollowTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/xqt/XQTFeaturedTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/AllListPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/AntennasListPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/AntennasTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ChannelTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/CreateListPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/DeleteListPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/EditAccountListPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/EditListMemberPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ListEditPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ListInfoPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ListMembersPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ListTimelinePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/PinnableTimelineTabPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/BlueskyLoginPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/BlueskyOAuthLoginPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/InstanceMetadataPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/MastodonCallbackPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/MisskeyCallbackPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/NodeInfoPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/NostrLoginPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/ServiceSelectPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/VVOLoginPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/XQTLoginPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/podcast/PodcastListPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/podcast/PodcastPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/BlockUserPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/FollowingPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/MuteUserPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/ProfileMediaPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/ProfilePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/UnblockUserPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/UnmuteUserPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/server/AiTLDRPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/AccountsPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/AiConfigPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/AiTranslationTestPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/AppearancePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/DevModePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/ExportAppDatabasePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/ImportAppDatabasePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/LocalCacheSearchPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/LocalFilterPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/NostrRelaysPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/OpenAIModelsPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/StoragePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/splash/SplashPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/DownloadPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/LogStatusHistoryPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/LogUserHistoryPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/StatusContextPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/StatusPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/TranslatePresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/VVOCommentPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/VVOStatusDetailPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/AddReactionPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/BlueskyReportStatusPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/DeleteStatusPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/MastodonReportPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/MisskeyReportPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/render/HtmlRenderRunMapper.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/render/HtmlToUiRichText.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/render/TranslationJson.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiRichText.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/route/DeeplinkRoute.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/screen/bluesky/BlueskyFeedsWithTabsPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/screen/list/AllListWithTabsPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/screen/misskey/MisskeyAntennasListWithTabsPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/screen/rss/RssListWithTabsPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/screen/settings/AccountManagementPresenter.kt (100%) rename {shared => presenter/features}/src/commonMain/kotlin/dev/dimension/flare/ui/screen/settings/AllTabsPresenter.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/DatabaseHelper.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/TestFileHelper.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/common/PagingStateTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/common/TestFormatter.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMappingTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMatcherTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkPatternTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/KeyDecoderTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/database/cache/dao/MessageDaoTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/database/cache/dao/TranslationDaoTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/database/cache/mapper/MicroblogTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/MixedRemoteMediatorTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/PostEventHandlerTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/EmojiHandlerTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/ListHandlerTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/ListMemberHandlerTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/NotificationHandlerTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/PostHandlerTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/RelationHandlerTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/UserHandlerTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyTimelinePrependTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/datasource/rss/RssTimelineRemoteMediatorTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/datastore/model/TranslateConfigSerializationTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/model/appearance/AppearanceMigrationTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/model/appearance/AppearancePatchTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/model/tab/TabSettingsMigrationTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/model/tab/TimelineFilterConfigSerializationTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/network/ai/OpenAIServiceTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/network/bluesky/BlueskyAuthPluginTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/network/mastodon/MastodonExceptionTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonPagingConverterFactoryTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/network/misskey/api/model/MisskeyNotificationTypeTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserLiteTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/network/nodeinfo/NodeInfoServiceTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/network/nostr/NostrRichTextParserTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/network/nostr/NostrServiceTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/network/rss/model/FeedTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/network/rss/model/OpmlTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/repository/AccountTabSyncCoordinatorSanitizerTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/repository/DraftMediaStoreTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/repository/DraftRepositoryTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/translation/AiPlaceholderTranslationSupportTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/translation/DeepLTargetLanguageTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/translation/GoogleWebTranslationDocumentSupportTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/translation/GoogleWebTranslationWhitespaceSupportTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/translation/PreTranslationContentRulesTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/translation/TranslationPromptFormatterTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/translation/TranslationProviderAiPlaceholderTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/translation/TranslationProviderCacheKeyTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/data/translation/TranslationTestConfig.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/model/CacheDataToUiTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/model/UiMediaFileNameTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/model/UiProfileMergeTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/BlueskyFacetsTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/BlueskyNotificationRenderTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/BlueskyRenderTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/BlueskyUiMappingTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/MastodonRenderTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/MisskeyRenderTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/RssDateParserTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/VVORenderTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/XQTRenderTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/XQTTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/SettingsImportExportPresenterTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/compose/InitialTextResolverTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/compose/SaveDraftUseCaseTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/compose/SendDraftUseCaseTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/GroupConfigPresenterTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/TimelinePresenterBindingTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/TimelinePresenterFilterTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/rss/ExportOPMLPresenterTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/rss/ImportOPMLPresenterTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/settings/AiConfigPresenterTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/settings/ExportAppDatabasePresenterTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/render/HtmlRenderRunMapperTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/render/TranslationJsonUiRichTextTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/render/UiRichTextTest.kt (100%) rename {shared => presenter/features}/src/commonTest/kotlin/dev/dimension/flare/ui/route/DeeplinkRouteTest.kt (100%) rename {shared => presenter/features}/src/jvmMain/kotlin/dev/dimension/flare/common/BuildConfig.jvm.kt (100%) rename {shared => presenter/features}/src/jvmMain/kotlin/dev/dimension/flare/common/FileItem.jvm.kt (100%) rename {shared => presenter/features}/src/jvmMain/kotlin/dev/dimension/flare/common/FileSystemUtilsExt.kt (100%) rename {shared => presenter/features}/src/jvmMain/kotlin/dev/dimension/flare/common/JvmOnDeviceAI.kt (100%) rename {shared => presenter/features}/src/jvmMain/kotlin/dev/dimension/flare/common/Locale.jvm.kt (100%) rename {shared => presenter/features}/src/jvmMain/kotlin/dev/dimension/flare/data/database/DriverFactory.jvm.kt (100%) rename {shared => presenter/features}/src/jvmMain/kotlin/dev/dimension/flare/data/io/JvmPlatformPathProducer.kt (100%) rename {shared => presenter/features}/src/jvmMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.jvm.kt (100%) rename {shared => presenter/features}/src/jvmMain/kotlin/dev/dimension/flare/data/network/nostr/AmberSignerBridge.jvm.kt (100%) rename {shared => presenter/features}/src/jvmMain/kotlin/dev/dimension/flare/data/repository/DraftMediaStore.jvm.kt (100%) rename {shared => presenter/features}/src/jvmMain/kotlin/dev/dimension/flare/di/PlatformModule.jvm.kt (100%) rename {shared => presenter/features}/src/jvmMain/kotlin/dev/dimension/flare/shared/image/JvmImageCompressor.kt (100%) rename {shared => presenter/features}/src/jvmMain/kotlin/dev/dimension/flare/ui/humanizer/JVMFormatter.kt (100%) rename {shared => presenter/features}/src/jvmTest/kotlin/dev/dimension/flare/DatabaseHelper.jvm.kt (100%) rename {shared => presenter/features}/src/jvmTest/kotlin/dev/dimension/flare/TestFileHelper.jvm.kt (100%) rename {shared => presenter/features}/src/jvmTest/kotlin/dev/dimension/flare/common/SerializationFormatBenchmarkTest.kt (100%) rename {shared => presenter/features}/src/jvmTest/kotlin/dev/dimension/flare/data/network/rss/RssServiceRegressionTest.kt (100%) rename {shared => presenter/features}/src/jvmTest/kotlin/dev/dimension/flare/shared/image/JvmImageCompressorTest.kt (100%) rename {shared => presenter/features}/src/jvmTest/kotlin/dev/dimension/flare/ui/model/DeeplinkEventTest.kt (100%) rename {shared => presenter/features}/src/jvmTest/kotlin/dev/dimension/flare/ui/model/UiPollTest.kt (100%) delete mode 100644 shared/build.gradle.kts diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 8139ab7f52..971f10021b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -123,7 +123,7 @@ dependencies { implementation(libs.androidx.window) coreLibraryDesugaring(libs.desugar.jdk.libs) implementation(libs.compose.webview) - implementation(projects.shared) + implementation(projects.presenter.features) implementation(projects.composeUi) implementation(libs.androidx.splash) implementation(libs.materialKolor) diff --git a/build-logic/src/main/kotlin/dev/dimension/flare/buildlogic/FlareConventionSupport.kt b/build-logic/src/main/kotlin/dev/dimension/flare/buildlogic/FlareConventionSupport.kt index 75cf770c39..36e4138fc5 100644 --- a/build-logic/src/main/kotlin/dev/dimension/flare/buildlogic/FlareConventionSupport.kt +++ b/build-logic/src/main/kotlin/dev/dimension/flare/buildlogic/FlareConventionSupport.kt @@ -45,7 +45,7 @@ class FlareRootConventionsPlugin : Plugin { version.set(ktlintCliVersion) filter { exclude { element -> element.file.path.contains("build", ignoreCase = true) } - if (subproject.path == ":shared") { + if (subproject.path == ":presenter:features") { exclude { element -> element.file.absolutePath.contains("data/network/misskey/api/", ignoreCase = true) } diff --git a/compose-ui/build.gradle.kts b/compose-ui/build.gradle.kts index 8195d73b61..da11911849 100644 --- a/compose-ui/build.gradle.kts +++ b/compose-ui/build.gradle.kts @@ -33,14 +33,14 @@ kotlin { appleTarget.binaries.framework { baseName = "KotlinSharedUI" isStatic = true - export(projects.shared) + export(projects.presenter.features) } } sourceSets { val commonMain by getting { dependencies { - implementation(projects.shared) + implementation(projects.presenter.features) implementation(compose("org.jetbrains.compose.ui:ui")) implementation(compose("org.jetbrains.compose.runtime:runtime")) implementation(compose("org.jetbrains.compose.foundation:foundation")) @@ -95,7 +95,7 @@ kotlin { } val iosMain by getting { dependencies { - api(projects.shared) + api(projects.presenter.features) implementation(libs.cupertino) api(compose("org.jetbrains.compose.ui:ui-util")) implementation(libs.lifecycle.viewmodel.compose) diff --git a/desktopApp/build.gradle.kts b/desktopApp/build.gradle.kts index b34ef4eb53..b89165df3b 100644 --- a/desktopApp/build.gradle.kts +++ b/desktopApp/build.gradle.kts @@ -14,7 +14,7 @@ plugins { } dependencies { - implementation(projects.shared) + implementation(projects.presenter.features) implementation(projects.composeUi) implementation(compose("org.jetbrains.compose.runtime:runtime")) diff --git a/presenter/features/build.gradle.kts b/presenter/features/build.gradle.kts index 0a2aaf87eb..8950eafa36 100644 --- a/presenter/features/build.gradle.kts +++ b/presenter/features/build.gradle.kts @@ -6,7 +6,10 @@ plugins { alias(libs.plugins.android.library) alias(libs.plugins.kotlin.multiplatform) alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.ksp) + alias(libs.plugins.ktorfit) alias(libs.plugins.compose.compiler) + alias(libs.plugins.room) } kotlin { @@ -17,5 +20,118 @@ kotlin { FlarePlatform.JVM, FlarePlatform.IOS, ) + ksp( + libs.ktorfit.ksp, + libs.room.compiler, + ) + } + android { + withDeviceTest { + instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + execution = "HOST" + } + } + + sourceSets { + all { + languageSettings { + optIn("kotlin.uuid.ExperimentalUuidApi") + } + } + val commonMain by getting { + dependencies { + implementation(dependencies.platform(libs.compose.bom)) + implementation(libs.compose.runtime) + implementation(libs.bundles.kotlinx) + implementation(dependencies.platform(libs.koin.bom)) + implementation(libs.koin.core) + api(libs.paging.common) + api(libs.paging.compose) + implementation(libs.bundles.ktorfit) + implementation(libs.bundles.ktor) + implementation(libs.okio) + implementation(libs.kotlin.codepoints.deluxe) + implementation(libs.ksoup) + implementation(libs.mfm.multiplatform) + implementation(libs.twitter.parser) + implementation(libs.molecule.runtime) + api(libs.bluesky) + api(libs.bluesky.oauth) + implementation(libs.room.runtime) + implementation(libs.room.paging) + implementation(libs.sqlite.bundled) + implementation(libs.datastore) + implementation(libs.kotlinx.serialization.protobuf) + implementation(libs.xmlUtil) + implementation(libs.ktor.client.resources) + implementation(libs.cryptography.provider.optimal) + implementation(libs.openai.client) + implementation(libs.nostr.sdk.kmp) + implementation(libs.readability) + } + } + val commonTest by getting { + dependencies { + implementation(kotlin("test")) + implementation(libs.kotlinx.coroutines.test) + implementation(libs.paging.testing) + implementation(libs.ktor.client.mock) + } + } + val androidJvmMain by getting { + dependencies { + implementation(libs.ktor.client.okhttp) + } + } + val androidMain by getting { + dependencies { + implementation(libs.core.ktx) + implementation(libs.koin.android) + implementation(libs.koin.compose) + implementation(libs.activity.compose) + } + } + val androidDeviceTest by getting { + dependencies { + implementation(libs.junit) + implementation(libs.robolectric) + implementation(libs.kotlinx.coroutines.test) + } + } + val jvmMain by getting { + dependencies { + implementation(libs.commons.lang3) + implementation(libs.prettytime) + implementation(libs.jna) + } + } + val appleMain by getting { + dependencies { + implementation(libs.ktor.client.darwin) + } + } + } +} + +room3 { + schemaDirectory("$projectDir/schemas") +} + +ktorfit { + compilerPluginVersion.set("2.3.3") +} + +afterEvaluate { +// val kspCommonMainKotlinMetadata by tasks + val runKtlintFormatOverCommonMainSourceSet by tasks + val runKtlintCheckOverCommonMainSourceSet by tasks + runKtlintFormatOverCommonMainSourceSet.dependsOn("kspCommonMainKotlinMetadata") + runKtlintCheckOverCommonMainSourceSet.dependsOn("kspCommonMainKotlinMetadata") + tasks { + configureEach { + if (this.name != "kspCommonMainKotlinMetadata" && this.name.startsWith("ksp")) { + this.dependsOn("kspCommonMainKotlinMetadata") + } + } } } diff --git a/shared/schemas/dev.dimension.flare.data.database.app.AppDatabase/10.json b/presenter/features/schemas/dev.dimension.flare.data.database.app.AppDatabase/10.json similarity index 100% rename from shared/schemas/dev.dimension.flare.data.database.app.AppDatabase/10.json rename to presenter/features/schemas/dev.dimension.flare.data.database.app.AppDatabase/10.json diff --git a/shared/schemas/dev.dimension.flare.data.database.app.AppDatabase/3.json b/presenter/features/schemas/dev.dimension.flare.data.database.app.AppDatabase/3.json similarity index 100% rename from shared/schemas/dev.dimension.flare.data.database.app.AppDatabase/3.json rename to presenter/features/schemas/dev.dimension.flare.data.database.app.AppDatabase/3.json diff --git a/shared/schemas/dev.dimension.flare.data.database.app.AppDatabase/4.json b/presenter/features/schemas/dev.dimension.flare.data.database.app.AppDatabase/4.json similarity index 100% rename from shared/schemas/dev.dimension.flare.data.database.app.AppDatabase/4.json rename to presenter/features/schemas/dev.dimension.flare.data.database.app.AppDatabase/4.json diff --git a/shared/schemas/dev.dimension.flare.data.database.app.AppDatabase/5.json b/presenter/features/schemas/dev.dimension.flare.data.database.app.AppDatabase/5.json similarity index 100% rename from shared/schemas/dev.dimension.flare.data.database.app.AppDatabase/5.json rename to presenter/features/schemas/dev.dimension.flare.data.database.app.AppDatabase/5.json diff --git a/shared/schemas/dev.dimension.flare.data.database.app.AppDatabase/6.json b/presenter/features/schemas/dev.dimension.flare.data.database.app.AppDatabase/6.json similarity index 100% rename from shared/schemas/dev.dimension.flare.data.database.app.AppDatabase/6.json rename to presenter/features/schemas/dev.dimension.flare.data.database.app.AppDatabase/6.json diff --git a/shared/schemas/dev.dimension.flare.data.database.app.AppDatabase/7.json b/presenter/features/schemas/dev.dimension.flare.data.database.app.AppDatabase/7.json similarity index 100% rename from shared/schemas/dev.dimension.flare.data.database.app.AppDatabase/7.json rename to presenter/features/schemas/dev.dimension.flare.data.database.app.AppDatabase/7.json diff --git a/shared/schemas/dev.dimension.flare.data.database.app.AppDatabase/8.json b/presenter/features/schemas/dev.dimension.flare.data.database.app.AppDatabase/8.json similarity index 100% rename from shared/schemas/dev.dimension.flare.data.database.app.AppDatabase/8.json rename to presenter/features/schemas/dev.dimension.flare.data.database.app.AppDatabase/8.json diff --git a/shared/schemas/dev.dimension.flare.data.database.app.AppDatabase/9.json b/presenter/features/schemas/dev.dimension.flare.data.database.app.AppDatabase/9.json similarity index 100% rename from shared/schemas/dev.dimension.flare.data.database.app.AppDatabase/9.json rename to presenter/features/schemas/dev.dimension.flare.data.database.app.AppDatabase/9.json diff --git a/shared/src/androidHostTest/kotlin/dev/dimension/flare/DatabaseHelper.android.kt b/presenter/features/src/androidHostTest/kotlin/dev/dimension/flare/DatabaseHelper.android.kt similarity index 100% rename from shared/src/androidHostTest/kotlin/dev/dimension/flare/DatabaseHelper.android.kt rename to presenter/features/src/androidHostTest/kotlin/dev/dimension/flare/DatabaseHelper.android.kt diff --git a/shared/src/androidHostTest/kotlin/dev/dimension/flare/shared/image/AndroidImageCompressorTest.kt b/presenter/features/src/androidHostTest/kotlin/dev/dimension/flare/shared/image/AndroidImageCompressorTest.kt similarity index 100% rename from shared/src/androidHostTest/kotlin/dev/dimension/flare/shared/image/AndroidImageCompressorTest.kt rename to presenter/features/src/androidHostTest/kotlin/dev/dimension/flare/shared/image/AndroidImageCompressorTest.kt diff --git a/shared/src/androidJvmMain/kotlin/dev/dimension/flare/data/network/rss/CharsetDecoder.androidJvm.kt b/presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/data/network/rss/CharsetDecoder.androidJvm.kt similarity index 100% rename from shared/src/androidJvmMain/kotlin/dev/dimension/flare/data/network/rss/CharsetDecoder.androidJvm.kt rename to presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/data/network/rss/CharsetDecoder.androidJvm.kt diff --git a/shared/src/androidJvmMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.androidJvm.kt b/presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.androidJvm.kt similarity index 100% rename from shared/src/androidJvmMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.androidJvm.kt rename to presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.androidJvm.kt diff --git a/shared/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.androidJvm.kt b/presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.androidJvm.kt similarity index 100% rename from shared/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.androidJvm.kt rename to presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.androidJvm.kt diff --git a/shared/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiRichText.androidJvm.kt b/presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiRichText.androidJvm.kt similarity index 100% rename from shared/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiRichText.androidJvm.kt rename to presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiRichText.androidJvm.kt diff --git a/shared/src/androidMain/AndroidManifest.xml b/presenter/features/src/androidMain/AndroidManifest.xml similarity index 100% rename from shared/src/androidMain/AndroidManifest.xml rename to presenter/features/src/androidMain/AndroidManifest.xml diff --git a/shared/src/androidMain/kotlin/dev/dimension/flare/common/BuildConfig.android.kt b/presenter/features/src/androidMain/kotlin/dev/dimension/flare/common/BuildConfig.android.kt similarity index 100% rename from shared/src/androidMain/kotlin/dev/dimension/flare/common/BuildConfig.android.kt rename to presenter/features/src/androidMain/kotlin/dev/dimension/flare/common/BuildConfig.android.kt diff --git a/shared/src/androidMain/kotlin/dev/dimension/flare/common/FileItem.android.kt b/presenter/features/src/androidMain/kotlin/dev/dimension/flare/common/FileItem.android.kt similarity index 100% rename from shared/src/androidMain/kotlin/dev/dimension/flare/common/FileItem.android.kt rename to presenter/features/src/androidMain/kotlin/dev/dimension/flare/common/FileItem.android.kt diff --git a/shared/src/androidMain/kotlin/dev/dimension/flare/common/Locale.android.kt b/presenter/features/src/androidMain/kotlin/dev/dimension/flare/common/Locale.android.kt similarity index 100% rename from shared/src/androidMain/kotlin/dev/dimension/flare/common/Locale.android.kt rename to presenter/features/src/androidMain/kotlin/dev/dimension/flare/common/Locale.android.kt diff --git a/shared/src/androidMain/kotlin/dev/dimension/flare/data/database/DriverFactory.android.kt b/presenter/features/src/androidMain/kotlin/dev/dimension/flare/data/database/DriverFactory.android.kt similarity index 100% rename from shared/src/androidMain/kotlin/dev/dimension/flare/data/database/DriverFactory.android.kt rename to presenter/features/src/androidMain/kotlin/dev/dimension/flare/data/database/DriverFactory.android.kt diff --git a/shared/src/androidMain/kotlin/dev/dimension/flare/data/io/AndroidPlatformPathProducer.kt b/presenter/features/src/androidMain/kotlin/dev/dimension/flare/data/io/AndroidPlatformPathProducer.kt similarity index 100% rename from shared/src/androidMain/kotlin/dev/dimension/flare/data/io/AndroidPlatformPathProducer.kt rename to presenter/features/src/androidMain/kotlin/dev/dimension/flare/data/io/AndroidPlatformPathProducer.kt diff --git a/shared/src/androidMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.android.kt b/presenter/features/src/androidMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.android.kt similarity index 100% rename from shared/src/androidMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.android.kt rename to presenter/features/src/androidMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.android.kt diff --git a/shared/src/androidMain/kotlin/dev/dimension/flare/data/network/nostr/AmberSignerBridge.android.kt b/presenter/features/src/androidMain/kotlin/dev/dimension/flare/data/network/nostr/AmberSignerBridge.android.kt similarity index 100% rename from shared/src/androidMain/kotlin/dev/dimension/flare/data/network/nostr/AmberSignerBridge.android.kt rename to presenter/features/src/androidMain/kotlin/dev/dimension/flare/data/network/nostr/AmberSignerBridge.android.kt diff --git a/shared/src/androidMain/kotlin/dev/dimension/flare/data/repository/DraftMediaStore.android.kt b/presenter/features/src/androidMain/kotlin/dev/dimension/flare/data/repository/DraftMediaStore.android.kt similarity index 100% rename from shared/src/androidMain/kotlin/dev/dimension/flare/data/repository/DraftMediaStore.android.kt rename to presenter/features/src/androidMain/kotlin/dev/dimension/flare/data/repository/DraftMediaStore.android.kt diff --git a/shared/src/androidMain/kotlin/dev/dimension/flare/di/PlatformModule.android.kt b/presenter/features/src/androidMain/kotlin/dev/dimension/flare/di/PlatformModule.android.kt similarity index 100% rename from shared/src/androidMain/kotlin/dev/dimension/flare/di/PlatformModule.android.kt rename to presenter/features/src/androidMain/kotlin/dev/dimension/flare/di/PlatformModule.android.kt diff --git a/shared/src/androidMain/kotlin/dev/dimension/flare/shared/image/AndroidImageCompressor.kt b/presenter/features/src/androidMain/kotlin/dev/dimension/flare/shared/image/AndroidImageCompressor.kt similarity index 100% rename from shared/src/androidMain/kotlin/dev/dimension/flare/shared/image/AndroidImageCompressor.kt rename to presenter/features/src/androidMain/kotlin/dev/dimension/flare/shared/image/AndroidImageCompressor.kt diff --git a/shared/src/androidMain/kotlin/dev/dimension/flare/ui/common/AmberSignerLauncherBinding.kt b/presenter/features/src/androidMain/kotlin/dev/dimension/flare/ui/common/AmberSignerLauncherBinding.kt similarity index 100% rename from shared/src/androidMain/kotlin/dev/dimension/flare/ui/common/AmberSignerLauncherBinding.kt rename to presenter/features/src/androidMain/kotlin/dev/dimension/flare/ui/common/AmberSignerLauncherBinding.kt diff --git a/shared/src/androidMain/kotlin/dev/dimension/flare/ui/humanizer/AndroidFormatter.kt b/presenter/features/src/androidMain/kotlin/dev/dimension/flare/ui/humanizer/AndroidFormatter.kt similarity index 100% rename from shared/src/androidMain/kotlin/dev/dimension/flare/ui/humanizer/AndroidFormatter.kt rename to presenter/features/src/androidMain/kotlin/dev/dimension/flare/ui/humanizer/AndroidFormatter.kt diff --git a/shared/src/appleMain/kotlin/dev/dimension/flare/common/AppleOnDeviceAI.kt b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/common/AppleOnDeviceAI.kt similarity index 100% rename from shared/src/appleMain/kotlin/dev/dimension/flare/common/AppleOnDeviceAI.kt rename to presenter/features/src/appleMain/kotlin/dev/dimension/flare/common/AppleOnDeviceAI.kt diff --git a/shared/src/appleMain/kotlin/dev/dimension/flare/common/BuildConfig.apple.kt b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/common/BuildConfig.apple.kt similarity index 100% rename from shared/src/appleMain/kotlin/dev/dimension/flare/common/BuildConfig.apple.kt rename to presenter/features/src/appleMain/kotlin/dev/dimension/flare/common/BuildConfig.apple.kt diff --git a/shared/src/appleMain/kotlin/dev/dimension/flare/common/FileItem.apple.kt b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/common/FileItem.apple.kt similarity index 100% rename from shared/src/appleMain/kotlin/dev/dimension/flare/common/FileItem.apple.kt rename to presenter/features/src/appleMain/kotlin/dev/dimension/flare/common/FileItem.apple.kt diff --git a/shared/src/appleMain/kotlin/dev/dimension/flare/common/Locale.apple.kt b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/common/Locale.apple.kt similarity index 100% rename from shared/src/appleMain/kotlin/dev/dimension/flare/common/Locale.apple.kt rename to presenter/features/src/appleMain/kotlin/dev/dimension/flare/common/Locale.apple.kt diff --git a/shared/src/appleMain/kotlin/dev/dimension/flare/common/SwiftOnDeviceAI.kt b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/common/SwiftOnDeviceAI.kt similarity index 100% rename from shared/src/appleMain/kotlin/dev/dimension/flare/common/SwiftOnDeviceAI.kt rename to presenter/features/src/appleMain/kotlin/dev/dimension/flare/common/SwiftOnDeviceAI.kt diff --git a/shared/src/appleMain/kotlin/dev/dimension/flare/data/database/DriverFactory.apple.kt b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/database/DriverFactory.apple.kt similarity index 100% rename from shared/src/appleMain/kotlin/dev/dimension/flare/data/database/DriverFactory.apple.kt rename to presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/database/DriverFactory.apple.kt diff --git a/shared/src/appleMain/kotlin/dev/dimension/flare/data/io/ApplePlatformPathProducer.kt b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/io/ApplePlatformPathProducer.kt similarity index 100% rename from shared/src/appleMain/kotlin/dev/dimension/flare/data/io/ApplePlatformPathProducer.kt rename to presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/io/ApplePlatformPathProducer.kt diff --git a/shared/src/appleMain/kotlin/dev/dimension/flare/data/model/appearance/TimelinePresentationAppearancePatchHelper.kt b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/model/appearance/TimelinePresentationAppearancePatchHelper.kt similarity index 100% rename from shared/src/appleMain/kotlin/dev/dimension/flare/data/model/appearance/TimelinePresentationAppearancePatchHelper.kt rename to presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/model/appearance/TimelinePresentationAppearancePatchHelper.kt diff --git a/shared/src/appleMain/kotlin/dev/dimension/flare/data/model/tab/TimelineTabItemV2Helpers.kt b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/model/tab/TimelineTabItemV2Helpers.kt similarity index 100% rename from shared/src/appleMain/kotlin/dev/dimension/flare/data/model/tab/TimelineTabItemV2Helpers.kt rename to presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/model/tab/TimelineTabItemV2Helpers.kt diff --git a/shared/src/appleMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.apple.kt b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.apple.kt similarity index 100% rename from shared/src/appleMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.apple.kt rename to presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.apple.kt diff --git a/shared/src/appleMain/kotlin/dev/dimension/flare/data/network/nostr/AmberSignerBridge.apple.kt b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/network/nostr/AmberSignerBridge.apple.kt similarity index 100% rename from shared/src/appleMain/kotlin/dev/dimension/flare/data/network/nostr/AmberSignerBridge.apple.kt rename to presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/network/nostr/AmberSignerBridge.apple.kt diff --git a/shared/src/appleMain/kotlin/dev/dimension/flare/data/network/rss/CharsetDecoder.apple.kt b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/network/rss/CharsetDecoder.apple.kt similarity index 100% rename from shared/src/appleMain/kotlin/dev/dimension/flare/data/network/rss/CharsetDecoder.apple.kt rename to presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/network/rss/CharsetDecoder.apple.kt diff --git a/shared/src/appleMain/kotlin/dev/dimension/flare/data/repository/DraftMediaStore.apple.kt b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/repository/DraftMediaStore.apple.kt similarity index 100% rename from shared/src/appleMain/kotlin/dev/dimension/flare/data/repository/DraftMediaStore.apple.kt rename to presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/repository/DraftMediaStore.apple.kt diff --git a/shared/src/appleMain/kotlin/dev/dimension/flare/di/PlatformModule.apple.kt b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/di/PlatformModule.apple.kt similarity index 100% rename from shared/src/appleMain/kotlin/dev/dimension/flare/di/PlatformModule.apple.kt rename to presenter/features/src/appleMain/kotlin/dev/dimension/flare/di/PlatformModule.apple.kt diff --git a/shared/src/appleMain/kotlin/dev/dimension/flare/shared/image/IosImageCompressor.kt b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/shared/image/IosImageCompressor.kt similarity index 100% rename from shared/src/appleMain/kotlin/dev/dimension/flare/shared/image/IosImageCompressor.kt rename to presenter/features/src/appleMain/kotlin/dev/dimension/flare/shared/image/IosImageCompressor.kt diff --git a/shared/src/appleMain/kotlin/dev/dimension/flare/ui/humanizer/AppleFormatter.kt b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/ui/humanizer/AppleFormatter.kt similarity index 100% rename from shared/src/appleMain/kotlin/dev/dimension/flare/ui/humanizer/AppleFormatter.kt rename to presenter/features/src/appleMain/kotlin/dev/dimension/flare/ui/humanizer/AppleFormatter.kt diff --git a/shared/src/appleMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.apple.kt b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.apple.kt similarity index 100% rename from shared/src/appleMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.apple.kt rename to presenter/features/src/appleMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.apple.kt diff --git a/shared/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.apple.kt b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.apple.kt similarity index 100% rename from shared/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.apple.kt rename to presenter/features/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.apple.kt diff --git a/shared/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiRichText.apple.kt b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiRichText.apple.kt similarity index 100% rename from shared/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiRichText.apple.kt rename to presenter/features/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiRichText.apple.kt diff --git a/shared/src/appleTest/kotlin/dev/dimension/flare/DatabaseHelper.apple.kt b/presenter/features/src/appleTest/kotlin/dev/dimension/flare/DatabaseHelper.apple.kt similarity index 100% rename from shared/src/appleTest/kotlin/dev/dimension/flare/DatabaseHelper.apple.kt rename to presenter/features/src/appleTest/kotlin/dev/dimension/flare/DatabaseHelper.apple.kt diff --git a/shared/src/appleTest/kotlin/dev/dimension/flare/TestFileHelper.apple.kt b/presenter/features/src/appleTest/kotlin/dev/dimension/flare/TestFileHelper.apple.kt similarity index 100% rename from shared/src/appleTest/kotlin/dev/dimension/flare/TestFileHelper.apple.kt rename to presenter/features/src/appleTest/kotlin/dev/dimension/flare/TestFileHelper.apple.kt diff --git a/shared/src/appleTest/kotlin/dev/dimension/flare/common/SerializationFormatBenchmarkAppleTest.kt b/presenter/features/src/appleTest/kotlin/dev/dimension/flare/common/SerializationFormatBenchmarkAppleTest.kt similarity index 100% rename from shared/src/appleTest/kotlin/dev/dimension/flare/common/SerializationFormatBenchmarkAppleTest.kt rename to presenter/features/src/appleTest/kotlin/dev/dimension/flare/common/SerializationFormatBenchmarkAppleTest.kt diff --git a/shared/src/appleTest/kotlin/dev/dimension/flare/shared/image/IosImageCompressorTest.kt b/presenter/features/src/appleTest/kotlin/dev/dimension/flare/shared/image/IosImageCompressorTest.kt similarity index 100% rename from shared/src/appleTest/kotlin/dev/dimension/flare/shared/image/IosImageCompressorTest.kt rename to presenter/features/src/appleTest/kotlin/dev/dimension/flare/shared/image/IosImageCompressorTest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/BasePagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/BasePagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/BasePagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/BasePagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/BaseRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/BaseRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/BaseRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/BaseRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/BuildConfig.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/BuildConfig.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/BuildConfig.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/BuildConfig.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/Cacheable.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/Cacheable.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/Cacheable.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/Cacheable.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/FileItem.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/FileItem.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/FileItem.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/FileItem.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/FileNameSanitizer.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/FileNameSanitizer.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/FileNameSanitizer.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/FileNameSanitizer.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/FileType.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/FileType.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/FileType.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/FileType.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/FlowExt.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/FlowExt.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/FlowExt.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/FlowExt.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/ImmutableListWrapper.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/ImmutableListWrapper.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/ImmutableListWrapper.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/ImmutableListWrapper.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/InAppNotification.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/InAppNotification.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/InAppNotification.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/InAppNotification.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/JSON.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/JSON.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/JSON.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/JSON.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/LazyPagingItemsExt.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/LazyPagingItemsExt.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/LazyPagingItemsExt.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/LazyPagingItemsExt.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/Locale.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/Locale.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/Locale.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/Locale.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/MimeTypes.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/MimeTypes.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/MimeTypes.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/MimeTypes.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/OnDeviceAI.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/OnDeviceAI.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/OnDeviceAI.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/OnDeviceAI.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/PagingState.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/PagingState.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/PagingState.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/PagingState.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/Protobuf.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/Protobuf.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/Protobuf.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/Protobuf.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/ProtobufSerializer.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/ProtobufSerializer.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/ProtobufSerializer.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/ProtobufSerializer.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/SerializableImmutableList.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/SerializableImmutableList.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/SerializableImmutableList.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/SerializableImmutableList.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/SnowflakeIdGenerator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/SnowflakeIdGenerator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/SnowflakeIdGenerator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/SnowflakeIdGenerator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/SwitchingServiceManager.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/SwitchingServiceManager.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/SwitchingServiceManager.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/SwitchingServiceManager.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/XML.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/XML.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/XML.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/XML.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMapping.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMapping.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMapping.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMapping.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMatcher.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMatcher.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMatcher.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMatcher.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkPattern.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkPattern.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkPattern.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkPattern.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/KeyDecoder.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/KeyDecoder.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/KeyDecoder.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/KeyDecoder.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/DriverFactory.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/DriverFactory.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/DriverFactory.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/DriverFactory.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/ProvideDatabase.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/ProvideDatabase.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/ProvideDatabase.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/ProvideDatabase.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/AccountTypeConverter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/AccountTypeConverter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/AccountTypeConverter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/AccountTypeConverter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/MicroBlogKeyConverter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/MicroBlogKeyConverter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/MicroBlogKeyConverter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/MicroBlogKeyConverter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/PlatformTypeConverter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/PlatformTypeConverter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/PlatformTypeConverter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/PlatformTypeConverter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/SubscriptionTypeConverter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/SubscriptionTypeConverter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/SubscriptionTypeConverter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/SubscriptionTypeConverter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/AppDatabase.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/AppDatabase.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/AppDatabase.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/AppDatabase.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/AccountDao.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/AccountDao.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/AccountDao.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/AccountDao.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/ApplicationDao.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/ApplicationDao.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/ApplicationDao.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/ApplicationDao.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/DraftDao.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/DraftDao.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/DraftDao.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/DraftDao.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/KeywordFilterDao.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/KeywordFilterDao.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/KeywordFilterDao.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/KeywordFilterDao.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/RssSourceDao.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/RssSourceDao.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/RssSourceDao.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/RssSourceDao.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/SearchHistoryDao.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/SearchHistoryDao.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/SearchHistoryDao.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/SearchHistoryDao.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/AppDatabaseExport.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/AppDatabaseExport.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/AppDatabaseExport.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/AppDatabaseExport.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbAccount.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbAccount.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbAccount.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbAccount.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbApplication.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbApplication.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbApplication.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbApplication.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbDraft.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbDraft.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbDraft.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbDraft.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbKeywordFilter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbKeywordFilter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbKeywordFilter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbKeywordFilter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbRssSources.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbRssSources.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbRssSources.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbRssSources.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbSearchHistory.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbSearchHistory.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbSearchHistory.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbSearchHistory.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/CacaheDatabase.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/CacaheDatabase.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/CacaheDatabase.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/CacaheDatabase.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/EmojiDao.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/EmojiDao.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/EmojiDao.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/EmojiDao.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/ListDao.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/ListDao.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/ListDao.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/ListDao.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/MessageDao.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/MessageDao.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/MessageDao.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/MessageDao.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/PagingTimelineDao.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/PagingTimelineDao.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/PagingTimelineDao.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/PagingTimelineDao.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/StatusDao.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/StatusDao.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/StatusDao.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/StatusDao.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/StatusReferenceDao.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/StatusReferenceDao.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/StatusReferenceDao.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/StatusReferenceDao.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/TranslationDao.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/TranslationDao.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/TranslationDao.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/TranslationDao.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/UserDao.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/UserDao.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/UserDao.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/dao/UserDao.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/Bluesky.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/Bluesky.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/Bluesky.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/Bluesky.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/Microblog.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/Microblog.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/Microblog.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/Microblog.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/User.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/User.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/User.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/User.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/XQT.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/XQT.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/XQT.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/mapper/XQT.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbDirectMessage.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbDirectMessage.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbDirectMessage.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbDirectMessage.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbEmoji.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbEmoji.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbEmoji.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbEmoji.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbList.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbList.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbList.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbList.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbPagingTimeline.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbPagingTimeline.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbPagingTimeline.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbPagingTimeline.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbStatus.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbStatus.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbStatus.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbStatus.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbStatusReference.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbStatusReference.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbStatusReference.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbStatusReference.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbTranslation.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbTranslation.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbTranslation.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbTranslation.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbUser.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbUser.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbUser.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbUser.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbUserHistory.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbUserHistory.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbUserHistory.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/DbUserHistory.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/EmojiContent.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/EmojiContent.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/EmojiContent.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/EmojiContent.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/TranslationDisplay.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/TranslationDisplay.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/TranslationDisplay.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/cache/model/TranslationDisplay.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyDataSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyDataSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyDataSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyDirectMessageLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyDirectMessageLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyDirectMessageLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyDirectMessageLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyFeedLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyFeedLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyFeedLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyFeedLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyListLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyListLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyListLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyListLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyListMemberLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyListMemberLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyListMemberLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyListMemberLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BookmarkTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BookmarkTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BookmarkTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BookmarkTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/FansPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/FansPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/FansPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/FansPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/FeedTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/FeedTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/FeedTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/FeedTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/FollowingPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/FollowingPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/FollowingPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/FollowingPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/HomeTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/HomeTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/HomeTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/HomeTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/ListTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/ListTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/ListTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/ListTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/NotificationRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/NotificationRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/NotificationRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/NotificationRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/SearchStatusRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/SearchStatusRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/SearchStatusRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/SearchStatusRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/SearchUserPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/SearchUserPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/SearchUserPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/SearchUserPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/StatusDetailRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/StatusDetailRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/StatusDetailRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/StatusDetailRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/TrendsUserPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/TrendsUserPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/TrendsUserPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/TrendsUserPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/UserLikesTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/UserLikesTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/UserLikesTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/UserLikesTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/UserTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/UserTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/UserTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/UserTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestDiscoverStatusPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestDiscoverStatusPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestDiscoverStatusPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestDiscoverStatusPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestMastodonDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestMastodonDataSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestMastodonDataSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestMastodonDataSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestMastodonLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestMastodonLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestMastodonLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestMastodonLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestPublicTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestPublicTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestPublicTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestPublicTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestSearchStatusPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestSearchStatusPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestSearchStatusPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestSearchStatusPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestStatusDetailPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestStatusDetailPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestStatusDetailPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestStatusDetailPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestTimelinePagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestTimelinePagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestTimelinePagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestTimelinePagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestTrendsRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestTrendsRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestTrendsRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestTrendsRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestUserTimelinePagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestUserTimelinePagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestUserTimelinePagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestUserTimelinePagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/BookmarkTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/BookmarkTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/BookmarkTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/BookmarkTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/DiscoverStatusRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/DiscoverStatusRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/DiscoverStatusRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/DiscoverStatusRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/FavouriteTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/FavouriteTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/FavouriteTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/FavouriteTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/HomeTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/HomeTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/HomeTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/HomeTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/ListTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/ListTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/ListTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/ListTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonDataSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonDataSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonDataSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonFansPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonFansPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonFansPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonFansPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonFollowingPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonFollowingPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonFollowingPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonFollowingPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonListLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonListLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonListLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonListLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonListMemberLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonListMemberLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonListMemberLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonListMemberLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MentionRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MentionRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MentionRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MentionRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/NotificationRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/NotificationRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/NotificationRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/NotificationRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/PublicTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/PublicTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/PublicTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/PublicTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/SearchStatusPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/SearchStatusPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/SearchStatusPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/SearchStatusPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/SearchUserPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/SearchUserPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/SearchUserPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/SearchUserPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/StatusDetailRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/StatusDetailRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/StatusDetailRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/StatusDetailRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/TrendHashtagPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/TrendHashtagPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/TrendHashtagPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/TrendHashtagPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/TrendsUserLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/TrendsUserLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/TrendsUserLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/TrendsUserLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/UserTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/UserTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/UserTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/UserTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ActionMenu.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ActionMenu.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ActionMenu.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ActionMenu.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/AuthenticatedMicroblogDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/AuthenticatedMicroblogDataSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/AuthenticatedMicroblogDataSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/AuthenticatedMicroblogDataSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ComposeConfig.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ComposeConfig.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ComposeConfig.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ComposeConfig.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ComposeData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ComposeData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ComposeData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ComposeData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ComposeType.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ComposeType.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ComposeType.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ComposeType.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/DatabaseUpdater.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/DatabaseUpdater.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/DatabaseUpdater.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/DatabaseUpdater.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/DirectMessageDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/DirectMessageDataSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/DirectMessageDataSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/DirectMessageDataSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/MicroblogDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/MicroblogDataSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/MicroblogDataSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/MicroblogDataSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/MixedRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/MixedRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/MixedRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/MixedRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/NotificationFilter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/NotificationFilter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/NotificationFilter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/NotificationFilter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/Paging.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/Paging.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/Paging.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/Paging.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/PostEvent.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/PostEvent.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/PostEvent.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/PostEvent.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ProfileTab.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ProfileTab.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ProfileTab.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ProfileTab.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ReactionDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ReactionDataSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ReactionDataSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ReactionDataSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/RecommendInstancePagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/RecommendInstancePagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/RecommendInstancePagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/RecommendInstancePagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/ListDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/ListDataSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/ListDataSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/ListDataSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/NotificationDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/NotificationDataSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/NotificationDataSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/NotificationDataSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/PinnableTimelineTabDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/PinnableTimelineTabDataSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/PinnableTimelineTabDataSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/PinnableTimelineTabDataSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/PostDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/PostDataSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/PostDataSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/PostDataSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/RelationDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/RelationDataSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/RelationDataSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/RelationDataSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/TimelineTabConfigurationDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/TimelineTabConfigurationDataSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/TimelineTabConfigurationDataSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/TimelineTabConfigurationDataSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/UserDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/UserDataSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/UserDataSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/datasource/UserDataSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/DirectMessageHandler.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/DirectMessageHandler.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/DirectMessageHandler.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/DirectMessageHandler.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/EmojiHandler.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/EmojiHandler.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/EmojiHandler.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/EmojiHandler.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/ListHandler.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/ListHandler.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/ListHandler.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/ListHandler.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/ListMemberHandler.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/ListMemberHandler.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/ListMemberHandler.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/ListMemberHandler.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/NotificationHandler.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/NotificationHandler.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/NotificationHandler.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/NotificationHandler.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/PostEventHandler.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/PostEventHandler.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/PostEventHandler.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/PostEventHandler.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/PostHandler.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/PostHandler.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/PostHandler.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/PostHandler.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/RelationHandler.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/RelationHandler.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/RelationHandler.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/RelationHandler.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/UserHandler.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/UserHandler.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/UserHandler.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/UserHandler.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/list/ListMetaData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/list/ListMetaData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/list/ListMetaData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/list/ListMetaData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/list/ListMetaDataType.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/list/ListMetaDataType.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/list/ListMetaDataType.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/list/ListMetaDataType.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/DirectMessageLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/DirectMessageLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/DirectMessageLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/DirectMessageLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/EmojiLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/EmojiLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/EmojiLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/EmojiLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/ListLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/ListLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/ListLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/ListLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/ListMemberLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/ListMemberLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/ListMemberLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/ListMemberLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/NotificationLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/NotificationLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/NotificationLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/NotificationLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/PostLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/PostLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/PostLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/PostLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/RelationLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/RelationLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/RelationLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/RelationLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/UserLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/UserLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/UserLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/loader/UserLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/BasePagingRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/BasePagingRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/BasePagingRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/BasePagingRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/CacheableRemoteLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/CacheableRemoteLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/CacheableRemoteLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/CacheableRemoteLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/PagingRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/PagingRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/PagingRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/PagingRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/PagingResult.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/PagingResult.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/PagingResult.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/PagingResult.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/RemoteLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/RemoteLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/RemoteLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/RemoteLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/SortIdProvider.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/SortIdProvider.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/SortIdProvider.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/SortIdProvider.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/TimelinePagingMapper.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/TimelinePagingMapper.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/TimelinePagingMapper.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/TimelinePagingMapper.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/TimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/TimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/TimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/paging/TimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/AntennasListPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/AntennasListPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/AntennasListPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/AntennasListPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/AntennasTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/AntennasTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/AntennasTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/AntennasTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/ChannelTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/ChannelTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/ChannelTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/ChannelTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/DiscoverStatusRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/DiscoverStatusRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/DiscoverStatusRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/DiscoverStatusRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FansPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FansPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FansPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FansPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FavouriteTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FavouriteTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FavouriteTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FavouriteTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FollowingPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FollowingPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FollowingPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/FollowingPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/HomeTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/HomeTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/HomeTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/HomeTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/HybridTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/HybridTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/HybridTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/HybridTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/ListTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/ListTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/ListTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/ListTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/LocalTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/LocalTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/LocalTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/LocalTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MentionTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MentionTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MentionTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MentionTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyChannelLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyChannelLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyChannelLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyChannelLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyDataSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyDataSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyDataSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyListLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyListLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyListLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyListLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyListMemberLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyListMemberLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyListMemberLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyListMemberLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/NotificationRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/NotificationRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/NotificationRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/NotificationRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/PublicTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/PublicTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/PublicTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/PublicTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/SearchStatusRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/SearchStatusRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/SearchStatusRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/SearchStatusRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/SearchUserPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/SearchUserPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/SearchUserPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/SearchUserPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/StatusDetailRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/StatusDetailRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/StatusDetailRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/StatusDetailRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/TrendHashtagPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/TrendHashtagPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/TrendHashtagPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/TrendHashtagPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/TrendsUserPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/TrendsUserPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/TrendsUserPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/TrendsUserPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/UserTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/UserTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/UserTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/UserTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/NostrCache.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/NostrCache.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/NostrCache.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/NostrCache.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/NostrDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/NostrDataSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/NostrDataSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/NostrDataSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/NostrLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/NostrLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/NostrLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/NostrLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/StatusDetailRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/StatusDetailRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/StatusDetailRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/StatusDetailRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/pleroma/PleromaDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/pleroma/PleromaDataSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/pleroma/PleromaDataSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/pleroma/PleromaDataSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/rss/RssDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/rss/RssDataSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/rss/RssDataSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/rss/RssDataSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/rss/RssTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/rss/RssTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/rss/RssTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/rss/RssTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/CommentChildRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/CommentChildRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/CommentChildRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/CommentChildRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/CommentPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/CommentPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/CommentPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/CommentPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/DiscoverStatusRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/DiscoverStatusRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/DiscoverStatusRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/DiscoverStatusRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/FansPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/FansPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/FansPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/FansPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/FavouriteRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/FavouriteRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/FavouriteRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/FavouriteRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/FollowingPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/FollowingPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/FollowingPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/FollowingPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/HomeTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/HomeTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/HomeTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/HomeTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/LikePagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/LikePagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/LikePagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/LikePagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/LikeRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/LikeRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/LikeRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/LikeRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/MentionRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/MentionRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/MentionRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/MentionRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/SearchStatusRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/SearchStatusRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/SearchStatusRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/SearchStatusRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/SearchUserPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/SearchUserPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/SearchUserPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/SearchUserPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/StatusCommentRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/StatusCommentRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/StatusCommentRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/StatusCommentRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/StatusRepostRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/StatusRepostRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/StatusRepostRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/StatusRepostRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/TrendHashtagPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/TrendHashtagPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/TrendHashtagPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/TrendHashtagPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/UserTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/UserTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/UserTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/UserTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVODataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVODataSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVODataSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVODataSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVOLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVOLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVOLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVOLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVONotificationBadgeStore.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVONotificationBadgeStore.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVONotificationBadgeStore.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVONotificationBadgeStore.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/DeviceFollowRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/DeviceFollowRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/DeviceFollowRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/DeviceFollowRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/FansPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/FansPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/FansPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/FansPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/FollowingPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/FollowingPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/FollowingPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/FollowingPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/HomeTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/HomeTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/HomeTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/HomeTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/ListTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/ListTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/ListTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/ListTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/MentionRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/MentionRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/MentionRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/MentionRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/NotificationPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/NotificationPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/NotificationPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/NotificationPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/SearchStatusPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/SearchStatusPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/SearchStatusPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/SearchStatusPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/SearchUserPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/SearchUserPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/SearchUserPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/SearchUserPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/StatusDetailRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/StatusDetailRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/StatusDetailRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/StatusDetailRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/TrendHashtagPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/TrendHashtagPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/TrendHashtagPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/TrendHashtagPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/TrendsUserPagingSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/TrendsUserPagingSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/TrendsUserPagingSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/TrendsUserPagingSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/User.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/User.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/User.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/User.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/UserLikesTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/UserLikesTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/UserLikesTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/UserLikesTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/UserMediaTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/UserMediaTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/UserMediaTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/UserMediaTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/UserRepliesTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/UserRepliesTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/UserRepliesTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/UserRepliesTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/UserTimelineRemoteMediator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/UserTimelineRemoteMediator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/UserTimelineRemoteMediator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/UserTimelineRemoteMediator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTDataSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTDataSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTDataSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTDirectMessageLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTDirectMessageLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTDirectMessageLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTDirectMessageLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTListLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTListLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTListLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTListLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTListMemberLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTListMemberLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTListMemberLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTListMemberLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTLoader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTLoader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTLoader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTLoader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datastore/AppDataStore.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/AppDataStore.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datastore/AppDataStore.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/AppDataStore.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/AiPromptDefaults.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/AiPromptDefaults.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/AiPromptDefaults.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/AiPromptDefaults.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/AppSettings.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/AppSettings.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/AppSettings.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/AppSettings.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/ComposeConfigData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/ComposeConfigData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/ComposeConfigData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/ComposeConfigData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/FlareConfig.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/FlareConfig.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/FlareConfig.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/FlareConfig.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/io/PlatformPathProducer.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/io/PlatformPathProducer.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/io/PlatformPathProducer.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/io/PlatformPathProducer.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/model/AppearanceSettings.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/AppearanceSettings.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/model/AppearanceSettings.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/AppearanceSettings.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/model/DataExport.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/DataExport.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/model/DataExport.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/DataExport.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/model/IconType.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/IconType.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/model/IconType.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/IconType.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/model/SettingsExport.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/SettingsExport.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/model/SettingsExport.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/SettingsExport.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/model/TabSettings.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/TabSettings.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/model/TabSettings.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/TabSettings.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceBag.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceBag.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceBag.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceBag.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceKey.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceKey.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceKey.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceKey.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceKeys.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceKeys.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceKeys.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceKeys.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceMigration.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceMigration.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceMigration.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceMigration.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceModels.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceModels.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceModels.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceModels.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearancePatch.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearancePatch.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearancePatch.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearancePatch.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceSynthesizer.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceSynthesizer.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceSynthesizer.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/appearance/AppearanceSynthesizer.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/model/tab/TabSettingsMigration.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/tab/TabSettingsMigration.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/model/tab/TabSettingsMigration.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/tab/TabSettingsMigration.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/model/tab/Timeline.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/tab/Timeline.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/model/tab/Timeline.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/tab/Timeline.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/Ktorfit.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/Ktorfit.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/Ktorfit.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/Ktorfit.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/ai/AiCompletionService.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/ai/AiCompletionService.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/ai/AiCompletionService.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/ai/AiCompletionService.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/ai/OpenAIService.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/ai/OpenAIService.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/ai/OpenAIService.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/ai/OpenAIService.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/bluesky/BlueskyAuthPlugin.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/bluesky/BlueskyAuthPlugin.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/bluesky/BlueskyAuthPlugin.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/bluesky/BlueskyAuthPlugin.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/bluesky/BlueskyPlatformDetector.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/bluesky/BlueskyPlatformDetector.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/bluesky/BlueskyPlatformDetector.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/bluesky/BlueskyPlatformDetector.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/bluesky/BlueskyService.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/bluesky/BlueskyService.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/bluesky/BlueskyService.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/bluesky/BlueskyService.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/bluesky/model/DidDoc.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/bluesky/model/DidDoc.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/bluesky/model/DidDoc.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/bluesky/model/DidDoc.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/GuestMastodonService.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/GuestMastodonService.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/GuestMastodonService.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/GuestMastodonService.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/JoinMastodonService.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/JoinMastodonService.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/JoinMastodonService.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/JoinMastodonService.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/MastodonException.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/MastodonException.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/MastodonException.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/MastodonException.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/MastodonOAuthService.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/MastodonOAuthService.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/MastodonOAuthService.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/MastodonOAuthService.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/MastodonPlatformDetector.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/MastodonPlatformDetector.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/MastodonPlatformDetector.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/MastodonPlatformDetector.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/MastodonService.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/MastodonService.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/MastodonService.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/MastodonService.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/AccountResources.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/AccountResources.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/AccountResources.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/AccountResources.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/FriendshipResources.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/FriendshipResources.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/FriendshipResources.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/FriendshipResources.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/InstanceResources.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/InstanceResources.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/InstanceResources.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/InstanceResources.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/JoinMastodonResources.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/JoinMastodonResources.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/JoinMastodonResources.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/JoinMastodonResources.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/ListsResources.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/ListsResources.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/ListsResources.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/ListsResources.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/LookupResources.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/LookupResources.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/LookupResources.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/LookupResources.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/MastodonOAuthResources.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/MastodonOAuthResources.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/MastodonOAuthResources.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/MastodonOAuthResources.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/MastodonResources.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/MastodonResources.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/MastodonResources.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/MastodonResources.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/SearchResources.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/SearchResources.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/SearchResources.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/SearchResources.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/StatusResources.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/StatusResources.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/StatusResources.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/StatusResources.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/TimelineResources.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/TimelineResources.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/TimelineResources.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/TimelineResources.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/TrendsResources.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/TrendsResources.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/TrendsResources.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/TrendsResources.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Account.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Account.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Account.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Account.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Application.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Application.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Application.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Application.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Attachment.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Attachment.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Attachment.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Attachment.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Card.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Card.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Card.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Card.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Context.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Context.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Context.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Context.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/CreateApplicationResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/CreateApplicationResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/CreateApplicationResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/CreateApplicationResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Emoji.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Emoji.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Emoji.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Emoji.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/EmojiReaction.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/EmojiReaction.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/EmojiReaction.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/EmojiReaction.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Field.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Field.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Field.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Field.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Hashtag.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Hashtag.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Hashtag.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Hashtag.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/History.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/History.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/History.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/History.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/InstanceInfoV1.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/InstanceInfoV1.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/InstanceInfoV1.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/InstanceInfoV1.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonAuthScope.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonAuthScope.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonAuthScope.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonAuthScope.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonInstanceElement.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonInstanceElement.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonInstanceElement.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonInstanceElement.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonList.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonList.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonList.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonList.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonPaging.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonPaging.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonPaging.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonPaging.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MediaType.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MediaType.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MediaType.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MediaType.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Mention.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Mention.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Mention.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Mention.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Meta.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Meta.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Meta.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Meta.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Notification.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Notification.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Notification.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Notification.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Option.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Option.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Option.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Option.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Original.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Original.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Original.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Original.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Poll.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Poll.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Poll.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Poll.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostAccounts.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostAccounts.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostAccounts.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostAccounts.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostList.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostList.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostList.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostList.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostPoll.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostPoll.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostPoll.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostPoll.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostReport.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostReport.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostReport.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostReport.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostStatus.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostStatus.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostStatus.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostStatus.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostVote.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostVote.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostVote.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/PostVote.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/RelationshipResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/RelationshipResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/RelationshipResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/RelationshipResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/RequestTokenResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/RequestTokenResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/RequestTokenResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/RequestTokenResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/SearchResult.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/SearchResult.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/SearchResult.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/SearchResult.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/SearchType.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/SearchType.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/SearchType.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/SearchType.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Small.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Small.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Small.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Small.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Source.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Source.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Source.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Source.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Status.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Status.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Status.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Status.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Tag.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Tag.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Tag.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Tag.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Trend.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Trend.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Trend.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Trend.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/UploadResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/UploadResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/UploadResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/UploadResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/VerifyCredentialsResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/VerifyCredentialsResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/VerifyCredentialsResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/VerifyCredentialsResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Visibility.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Visibility.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Visibility.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/mastodon/api/model/Visibility.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/JoinMisskeyService.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/JoinMisskeyService.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/JoinMisskeyService.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/JoinMisskeyService.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/MisskeyAuthorizationPlugin.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/MisskeyAuthorizationPlugin.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/MisskeyAuthorizationPlugin.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/MisskeyAuthorizationPlugin.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/MisskeyOauthService.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/MisskeyOauthService.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/MisskeyOauthService.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/MisskeyOauthService.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/MisskeyPlatformDetector.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/MisskeyPlatformDetector.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/MisskeyPlatformDetector.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/MisskeyPlatformDetector.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/MisskeyService.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/MisskeyService.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/MisskeyService.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/MisskeyService.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AccountApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AccountApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AccountApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AccountApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AdminApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AdminApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AdminApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AdminApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AntennasApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AntennasApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AntennasApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AntennasApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AppApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AppApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AppApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AppApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AuthApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AuthApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AuthApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AuthApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AuthResources.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AuthResources.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AuthResources.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/AuthResources.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ChannelsApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ChannelsApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ChannelsApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ChannelsApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ChartsApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ChartsApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ChartsApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ChartsApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ClipApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ClipApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ClipApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ClipApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ClipsApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ClipsApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ClipsApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ClipsApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/DefaultApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/DefaultApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/DefaultApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/DefaultApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/DriveApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/DriveApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/DriveApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/DriveApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/FederationApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/FederationApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/FederationApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/FederationApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/FlashApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/FlashApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/FlashApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/FlashApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/FlashsApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/FlashsApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/FlashsApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/FlashsApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/FollowingApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/FollowingApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/FollowingApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/FollowingApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/GalleryApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/GalleryApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/GalleryApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/GalleryApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/HashtagsApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/HashtagsApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/HashtagsApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/HashtagsApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ListsApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ListsApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ListsApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ListsApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/MetaApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/MetaApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/MetaApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/MetaApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/MisskeyInstanceAppApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/MisskeyInstanceAppApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/MisskeyInstanceAppApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/MisskeyInstanceAppApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/NonProductiveApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/NonProductiveApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/NonProductiveApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/NonProductiveApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/NotesApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/NotesApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/NotesApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/NotesApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/NotificationsApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/NotificationsApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/NotificationsApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/NotificationsApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/PagesApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/PagesApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/PagesApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/PagesApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ReactionsApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ReactionsApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ReactionsApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ReactionsApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ResetPasswordApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ResetPasswordApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ResetPasswordApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/ResetPasswordApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/RoleApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/RoleApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/RoleApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/RoleApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/UsersApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/UsersApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/UsersApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/UsersApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/WebhooksApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/WebhooksApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/WebhooksApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/WebhooksApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverCreate200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverCreate200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverCreate200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverCreate200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverCreateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverCreateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverCreateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverCreateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverDeleteRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverDeleteRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverDeleteRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverDeleteRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverListRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverListRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverListRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverListRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverUpdateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverUpdateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverUpdateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseReportResolverUpdateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseUserReports200ResponseInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseUserReports200ResponseInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseUserReports200ResponseInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseUserReports200ResponseInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseUserReportsRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseUserReportsRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseUserReportsRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAbuseUserReportsRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAccountsCreateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAccountsCreateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAccountsCreateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAccountsCreateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAccountsDeleteRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAccountsDeleteRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAccountsDeleteRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAccountsDeleteRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAdCreateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAdCreateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAdCreateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAdCreateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAdDeleteRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAdDeleteRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAdDeleteRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAdDeleteRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAdListRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAdListRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAdListRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAdListRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAdUpdateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAdUpdateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAdUpdateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAdUpdateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsCreate200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsCreate200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsCreate200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsCreate200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsCreateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsCreateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsCreateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsCreateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsList200ResponseInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsList200ResponseInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsList200ResponseInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsList200ResponseInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsListRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsListRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsListRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsListRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsUpdateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsUpdateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsUpdateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminAnnouncementsUpdateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminDriveFilesRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminDriveFilesRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminDriveFilesRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminDriveFilesRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminDriveShowFile200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminDriveShowFile200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminDriveShowFile200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminDriveShowFile200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminDriveShowFileRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminDriveShowFileRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminDriveShowFileRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminDriveShowFileRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiAddAliasesBulkRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiAddAliasesBulkRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiAddAliasesBulkRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiAddAliasesBulkRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiAddRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiAddRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiAddRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiAddRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiCopy200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiCopy200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiCopy200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiCopy200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiCopyRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiCopyRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiCopyRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiCopyRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiDeleteBulkRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiDeleteBulkRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiDeleteBulkRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiDeleteBulkRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiList200ResponseInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiList200ResponseInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiList200ResponseInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiList200ResponseInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiListRemote200ResponseInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiListRemote200ResponseInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiListRemote200ResponseInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiListRemote200ResponseInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiListRemoteRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiListRemoteRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiListRemoteRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiListRemoteRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiListRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiListRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiListRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiListRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiSetCategoryBulkRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiSetCategoryBulkRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiSetCategoryBulkRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiSetCategoryBulkRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiSetLicenseBulkRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiSetLicenseBulkRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiSetLicenseBulkRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiSetLicenseBulkRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiUpdateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiUpdateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiUpdateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminEmojiUpdateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminFederationDeleteAllFilesRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminFederationDeleteAllFilesRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminFederationDeleteAllFilesRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminFederationDeleteAllFilesRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminFederationUpdateInstanceRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminFederationUpdateInstanceRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminFederationUpdateInstanceRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminFederationUpdateInstanceRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminInviteCreate200ResponseInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminInviteCreate200ResponseInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminInviteCreate200ResponseInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminInviteCreate200ResponseInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminInviteCreateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminInviteCreateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminInviteCreateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminInviteCreateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminInviteListRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminInviteListRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminInviteListRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminInviteListRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminMeta200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminMeta200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminMeta200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminMeta200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminPromoCreateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminPromoCreateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminPromoCreateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminPromoCreateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminQueueDeliverDelayed200ResponseInnerInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminQueueDeliverDelayed200ResponseInnerInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminQueueDeliverDelayed200ResponseInnerInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminQueueDeliverDelayed200ResponseInnerInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminQueuePromoteRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminQueuePromoteRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminQueuePromoteRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminQueuePromoteRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminQueueStats200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminQueueStats200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminQueueStats200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminQueueStats200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRelaysAdd200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRelaysAdd200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRelaysAdd200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRelaysAdd200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRelaysAddRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRelaysAddRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRelaysAddRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRelaysAddRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminResetPassword200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminResetPassword200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminResetPassword200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminResetPassword200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminResolveAbuseUserReportRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminResolveAbuseUserReportRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminResolveAbuseUserReportRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminResolveAbuseUserReportRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesAssignRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesAssignRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesAssignRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesAssignRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesCreateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesCreateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesCreateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesCreateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesDeleteRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesDeleteRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesDeleteRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesDeleteRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesUnassignRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesUnassignRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesUnassignRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesUnassignRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesUpdateDefaultPoliciesRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesUpdateDefaultPoliciesRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesUpdateDefaultPoliciesRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesUpdateDefaultPoliciesRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesUpdateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesUpdateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesUpdateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesUpdateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesUsersRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesUsersRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesUsersRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminRolesUsersRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminSendEmailRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminSendEmailRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminSendEmailRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminSendEmailRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200ResponseCpu.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200ResponseCpu.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200ResponseCpu.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200ResponseCpu.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200ResponseFs.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200ResponseFs.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200ResponseFs.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200ResponseFs.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200ResponseMem.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200ResponseMem.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200ResponseMem.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200ResponseMem.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200ResponseNet.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200ResponseNet.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200ResponseNet.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminServerInfo200ResponseNet.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminShowModerationLogs200ResponseInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminShowModerationLogs200ResponseInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminShowModerationLogs200ResponseInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminShowModerationLogs200ResponseInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminShowUsersRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminShowUsersRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminShowUsersRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminShowUsersRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminUpdateMetaRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminUpdateMetaRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminUpdateMetaRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminUpdateMetaRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminUpdateUserNoteRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminUpdateUserNoteRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminUpdateUserNoteRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AdminUpdateUserNoteRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Announcements200ResponseInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Announcements200ResponseInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Announcements200ResponseInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Announcements200ResponseInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AnnouncementsRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AnnouncementsRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AnnouncementsRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AnnouncementsRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Antenna.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Antenna.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Antenna.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Antenna.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AntennasCreateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AntennasCreateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AntennasCreateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AntennasCreateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AntennasDeleteRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AntennasDeleteRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AntennasDeleteRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AntennasDeleteRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AntennasNotesRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AntennasNotesRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AntennasNotesRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AntennasNotesRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AntennasUpdateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AntennasUpdateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AntennasUpdateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AntennasUpdateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ApGetRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ApGetRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ApGetRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ApGetRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ApShow200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ApShow200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ApShow200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ApShow200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ApShow200ResponseOneOf.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ApShow200ResponseOneOf.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ApShow200ResponseOneOf.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ApShow200ResponseOneOf.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ApShow200ResponseOneOf1.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ApShow200ResponseOneOf1.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ApShow200ResponseOneOf1.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ApShow200ResponseOneOf1.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/App.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/App.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/App.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/App.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AppCreateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AppCreateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AppCreateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AppCreateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AppShowRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AppShowRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AppShowRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AppShowRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionGenerate200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionGenerate200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionGenerate200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionGenerate200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionGenerateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionGenerateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionGenerateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionGenerateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionShow200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionShow200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionShow200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionShow200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionShowRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionShowRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionShowRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionShowRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionUserkey200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionUserkey200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionUserkey200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionUserkey200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionUserkeyRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionUserkeyRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionUserkeyRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/AuthSessionUserkeyRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Blocking.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Blocking.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Blocking.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Blocking.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/BlockingListRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/BlockingListRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/BlockingListRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/BlockingListRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Channel.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Channel.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Channel.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Channel.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsCreateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsCreateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsCreateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsCreateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsFeaturedRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsFeaturedRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsFeaturedRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsFeaturedRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsFollowRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsFollowRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsFollowRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsFollowRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsFollowedRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsFollowedRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsFollowedRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsFollowedRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsSearchRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsSearchRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsSearchRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsSearchRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsTimelineRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsTimelineRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsTimelineRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsTimelineRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsUpdateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsUpdateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsUpdateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChannelsUpdateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsActiveUsers200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsActiveUsers200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsActiveUsers200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsActiveUsers200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsActiveUsersRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsActiveUsersRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsActiveUsersRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsActiveUsersRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsApRequest200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsApRequest200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsApRequest200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsApRequest200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsDrive200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsDrive200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsDrive200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsDrive200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsFederation200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsFederation200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsFederation200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsFederation200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsInstance200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsInstance200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsInstance200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsInstance200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsInstanceRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsInstanceRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsInstanceRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsInstanceRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsNotes200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsNotes200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsNotes200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsNotes200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserDrive200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserDrive200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserDrive200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserDrive200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserDriveRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserDriveRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserDriveRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserDriveRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserFollowing200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserFollowing200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserFollowing200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserFollowing200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserNotes200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserNotes200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserNotes200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserNotes200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserPv200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserPv200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserPv200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserPv200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserReactions200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserReactions200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserReactions200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUserReactions200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUsers200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUsers200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUsers200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ChartsUsers200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Clip.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Clip.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Clip.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Clip.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsAddNoteRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsAddNoteRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsAddNoteRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsAddNoteRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsCreateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsCreateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsCreateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsCreateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsDeleteRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsDeleteRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsDeleteRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsDeleteRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsNotesRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsNotesRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsNotesRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsNotesRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsUpdateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsUpdateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsUpdateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ClipsUpdateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Drive200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Drive200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Drive200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Drive200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFile.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFile.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFile.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFile.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFileProperties.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFileProperties.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFileProperties.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFileProperties.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesAttachedNotesRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesAttachedNotesRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesAttachedNotesRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesAttachedNotesRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesCheckExistenceRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesCheckExistenceRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesCheckExistenceRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesCheckExistenceRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesFindRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesFindRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesFindRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesFindRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesUpdateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesUpdateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesUpdateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesUpdateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesUploadFromUrlRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesUploadFromUrlRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesUploadFromUrlRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFilesUploadFromUrlRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFolder.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFolder.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFolder.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFolder.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersCreateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersCreateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersCreateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersCreateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersDeleteRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersDeleteRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersDeleteRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersDeleteRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersFindRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersFindRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersFindRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersFindRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersUpdateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersUpdateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersUpdateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveFoldersUpdateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveStreamRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveStreamRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveStreamRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/DriveStreamRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmailAddressAvailable200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmailAddressAvailable200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmailAddressAvailable200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmailAddressAvailable200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmailAddressAvailableRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmailAddressAvailableRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmailAddressAvailableRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmailAddressAvailableRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmojiDetailed.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmojiDetailed.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmojiDetailed.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmojiDetailed.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmojiRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmojiRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmojiRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmojiRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmojiSimple.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmojiSimple.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmojiSimple.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EmojiSimple.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Emojis200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Emojis200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Emojis200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Emojis200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EndpointRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EndpointRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EndpointRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/EndpointRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Error.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Error.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Error.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Error.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ErrorError.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ErrorError.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ErrorError.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ErrorError.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationFollowersRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationFollowersRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationFollowersRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationFollowersRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationInstance.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationInstance.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationInstance.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationInstance.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationInstancesRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationInstancesRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationInstancesRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationInstancesRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationShowInstance200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationShowInstance200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationShowInstance200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationShowInstance200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationStatsRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationStatsRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationStatsRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FederationStatsRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FetchRssRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FetchRssRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FetchRssRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FetchRssRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Flash.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Flash.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Flash.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Flash.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FlashCreateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FlashCreateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FlashCreateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FlashCreateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FlashDeleteRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FlashDeleteRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FlashDeleteRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FlashDeleteRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FlashMyLikes200ResponseInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FlashMyLikes200ResponseInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FlashMyLikes200ResponseInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FlashMyLikes200ResponseInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FlashUpdateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FlashUpdateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FlashUpdateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FlashUpdateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Following.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Following.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Following.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Following.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FollowingRequestsList200ResponseInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FollowingRequestsList200ResponseInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FollowingRequestsList200ResponseInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FollowingRequestsList200ResponseInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FollowingRequestsListRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FollowingRequestsListRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FollowingRequestsListRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/FollowingRequestsListRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/GalleryPost.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/GalleryPost.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/GalleryPost.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/GalleryPost.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/GalleryPostsCreateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/GalleryPostsCreateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/GalleryPostsCreateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/GalleryPostsCreateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/GalleryPostsDeleteRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/GalleryPostsDeleteRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/GalleryPostsDeleteRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/GalleryPostsDeleteRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/GalleryPostsUpdateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/GalleryPostsUpdateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/GalleryPostsUpdateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/GalleryPostsUpdateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Hashtag.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Hashtag.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Hashtag.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Hashtag.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsListRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsListRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsListRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsListRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsSearchRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsSearchRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsSearchRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsSearchRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsShowRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsShowRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsShowRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsShowRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsTrend200ResponseInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsTrend200ResponseInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsTrend200ResponseInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsTrend200ResponseInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsUsersRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsUsersRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsUsersRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/HashtagsUsersRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IClaimAchievementRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IClaimAchievementRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IClaimAchievementRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IClaimAchievementRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IGalleryLikes200ResponseInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IGalleryLikes200ResponseInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IGalleryLikes200ResponseInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IGalleryLikes200ResponseInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IGetWordMutedNotesCount200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IGetWordMutedNotesCount200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IGetWordMutedNotesCount200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IGetWordMutedNotesCount200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/INotificationsRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/INotificationsRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/INotificationsRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/INotificationsRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IPageLikes200ResponseInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IPageLikes200ResponseInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IPageLikes200ResponseInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IPageLikes200ResponseInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IPinRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IPinRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IPinRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IPinRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IReadAnnouncementRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IReadAnnouncementRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IReadAnnouncementRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IReadAnnouncementRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IUpdateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IUpdateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IUpdateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IUpdateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IUpdateRequestFieldsInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IUpdateRequestFieldsInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IUpdateRequestFieldsInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IUpdateRequestFieldsInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IWebhooksCreateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IWebhooksCreateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IWebhooksCreateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IWebhooksCreateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IWebhooksShowRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IWebhooksShowRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IWebhooksShowRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IWebhooksShowRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IWebhooksUpdateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IWebhooksUpdateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IWebhooksUpdateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/IWebhooksUpdateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/InviteCode.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/InviteCode.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/InviteCode.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/InviteCode.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/InviteDeleteRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/InviteDeleteRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/InviteDeleteRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/InviteDeleteRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/InviteLimit200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/InviteLimit200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/InviteLimit200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/InviteLimit200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ListMembership.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ListMembership.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ListMembership.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ListMembership.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MeDetailed.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MeDetailed.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MeDetailed.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MeDetailed.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MeDetailedOnly.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MeDetailedOnly.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MeDetailedOnly.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MeDetailedOnly.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Meta200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Meta200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Meta200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Meta200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Meta200ResponseAdsInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Meta200ResponseAdsInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Meta200ResponseAdsInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Meta200ResponseAdsInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Meta200ResponseFeatures.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Meta200ResponseFeatures.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Meta200ResponseFeatures.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Meta200ResponseFeatures.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MetaRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MetaRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MetaRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MetaRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MisskeyException.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MisskeyException.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MisskeyException.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MisskeyException.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MisskeyInstance.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MisskeyInstance.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MisskeyInstance.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MisskeyInstance.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MuteCreateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MuteCreateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MuteCreateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MuteCreateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Muting.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Muting.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Muting.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Muting.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MyAppsRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MyAppsRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MyAppsRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/MyAppsRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Note.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Note.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Note.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Note.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NoteChannelInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NoteChannelInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NoteChannelInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NoteChannelInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NoteFavorite.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NoteFavorite.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NoteFavorite.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NoteFavorite.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NoteReaction.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NoteReaction.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NoteReaction.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NoteReaction.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesChildrenRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesChildrenRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesChildrenRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesChildrenRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesConversationRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesConversationRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesConversationRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesConversationRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesCreate200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesCreate200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesCreate200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesCreate200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesCreateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesCreateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesCreateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesCreateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesCreateRequestPoll.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesCreateRequestPoll.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesCreateRequestPoll.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesCreateRequestPoll.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesFeaturedRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesFeaturedRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesFeaturedRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesFeaturedRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesGlobalTimelineRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesGlobalTimelineRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesGlobalTimelineRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesGlobalTimelineRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesHybridTimelineRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesHybridTimelineRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesHybridTimelineRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesHybridTimelineRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesLocalTimelineRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesLocalTimelineRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesLocalTimelineRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesLocalTimelineRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesMentionsRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesMentionsRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesMentionsRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesMentionsRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesPollsVoteRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesPollsVoteRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesPollsVoteRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesPollsVoteRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesReactionsCreateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesReactionsCreateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesReactionsCreateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesReactionsCreateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesReactionsRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesReactionsRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesReactionsRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesReactionsRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesRepliesRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesRepliesRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesRepliesRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesRepliesRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesSearchByTagRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesSearchByTagRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesSearchByTagRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesSearchByTagRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesSearchRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesSearchRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesSearchRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesSearchRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesState200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesState200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesState200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesState200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesTranslateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesTranslateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesTranslateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesTranslateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesUserListTimelineRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesUserListTimelineRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesUserListTimelineRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotesUserListTimelineRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Notification.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Notification.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Notification.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Notification.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotificationsCreateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotificationsCreateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotificationsCreateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/NotificationsCreateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Page.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Page.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Page.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Page.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PagesCreateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PagesCreateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PagesCreateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PagesCreateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PagesDeleteRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PagesDeleteRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PagesDeleteRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PagesDeleteRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PagesShowRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PagesShowRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PagesShowRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PagesShowRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PagesUpdateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PagesUpdateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PagesUpdateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PagesUpdateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Ping200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Ping200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Ping200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Ping200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PinnedUsersRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PinnedUsersRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PinnedUsersRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/PinnedUsersRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Poll.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Poll.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Poll.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Poll.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/QueueCount.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/QueueCount.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/QueueCount.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/QueueCount.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/RenoteMuting.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/RenoteMuting.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/RenoteMuting.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/RenoteMuting.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/RequestResetPasswordRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/RequestResetPasswordRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/RequestResetPasswordRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/RequestResetPasswordRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ResetPasswordRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ResetPasswordRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ResetPasswordRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/ResetPasswordRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/RolesNotesRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/RolesNotesRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/RolesNotesRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/RolesNotesRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Stats200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Stats200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Stats200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Stats200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwRegister200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwRegister200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwRegister200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwRegister200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwRegisterRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwRegisterRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwRegisterRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwRegisterRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwShowRegistration200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwShowRegistration200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwShowRegistration200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwShowRegistration200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwUpdateRegistration200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwUpdateRegistration200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwUpdateRegistration200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwUpdateRegistration200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwUpdateRegistrationRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwUpdateRegistrationRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwUpdateRegistrationRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/SwUpdateRegistrationRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/TestRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/TestRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/TestRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/TestRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/User.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/User.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/User.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/User.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserDetailed.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserDetailed.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserDetailed.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserDetailed.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserDetailedNotMe.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserDetailedNotMe.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserDetailedNotMe.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserDetailedNotMe.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserDetailedNotMeOnly.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserDetailedNotMeOnly.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserDetailedNotMeOnly.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserDetailedNotMeOnly.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserDetailedNotMeOnlyFieldsInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserDetailedNotMeOnlyFieldsInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserDetailedNotMeOnlyFieldsInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserDetailedNotMeOnlyFieldsInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserList.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserList.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserList.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserList.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserLite.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserLite.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserLite.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserLite.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsernameAvailable200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsernameAvailable200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsernameAvailable200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsernameAvailable200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsernameAvailableRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsernameAvailableRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsernameAvailableRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsernameAvailableRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersClipsRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersClipsRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersClipsRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersClipsRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersFollowersRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersFollowersRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersFollowersRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersFollowersRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersGetFrequentlyRepliedUsers200ResponseInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersGetFrequentlyRepliedUsers200ResponseInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersGetFrequentlyRepliedUsers200ResponseInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersGetFrequentlyRepliedUsers200ResponseInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersGetFrequentlyRepliedUsersRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersGetFrequentlyRepliedUsersRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersGetFrequentlyRepliedUsersRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersGetFrequentlyRepliedUsersRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsCreateFromPublicRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsCreateFromPublicRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsCreateFromPublicRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsCreateFromPublicRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsCreateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsCreateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsCreateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsCreateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsDeleteRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsDeleteRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsDeleteRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsDeleteRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsListRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsListRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsListRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsListRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsPullRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsPullRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsPullRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsPullRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsShowRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsShowRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsShowRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsShowRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsUpdateRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsUpdateRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsUpdateRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersListsUpdateRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersNotesRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersNotesRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersNotesRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersNotesRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersReactionsRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersReactionsRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersReactionsRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersReactionsRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRelation200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRelation200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRelation200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRelation200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRelation200ResponseOneOf.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRelation200ResponseOneOf.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRelation200ResponseOneOf.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRelation200ResponseOneOf.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRelation200ResponseOneOf1Inner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRelation200ResponseOneOf1Inner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRelation200ResponseOneOf1Inner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRelation200ResponseOneOf1Inner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRelationRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRelationRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRelationRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRelationRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersReportAbuseRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersReportAbuseRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersReportAbuseRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersReportAbuseRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersSearchByUsernameAndHostRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersSearchByUsernameAndHostRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersSearchByUsernameAndHostRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersSearchByUsernameAndHostRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersSearchRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersSearchRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersSearchRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersSearchRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersShow200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersShow200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersShow200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersShow200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersShowRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersShowRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersShowRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersShowRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersUpdateMemoRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersUpdateMemoRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersUpdateMemoRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/UsersUpdateMemoRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Visibility.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Visibility.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Visibility.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/Visibility.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/response/MiAuthCheckResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/response/MiAuthCheckResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/response/MiAuthCheckResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/model/response/MiAuthCheckResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/serializer/MisskeyEmojiMapSerializer.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/serializer/MisskeyEmojiMapSerializer.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/serializer/MisskeyEmojiMapSerializer.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/misskey/api/serializer/MisskeyEmojiMapSerializer.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/NodeInfoService.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/NodeInfoService.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/NodeInfoService.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/NodeInfoService.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/PlatformDetector.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/PlatformDetector.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/PlatformDetector.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/PlatformDetector.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/NodeInfo.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/NodeInfo.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/NodeInfo.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/NodeInfo.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/Schema10.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/Schema10.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/Schema10.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/Schema10.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/Schema11.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/Schema11.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/Schema11.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/Schema11.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/Schema20.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/Schema20.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/Schema20.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/Schema20.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/Schema21.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/Schema21.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/Schema21.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/model/Schema21.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/AmberSignerBridge.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/AmberSignerBridge.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/AmberSignerBridge.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/AmberSignerBridge.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrBlossomUploader.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrBlossomUploader.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrBlossomUploader.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrBlossomUploader.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrCompat.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrCompat.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrCompat.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrCompat.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrPlatformDetector.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrPlatformDetector.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrPlatformDetector.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrPlatformDetector.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrRichTextParser.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrRichTextParser.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrRichTextParser.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrRichTextParser.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrService.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrService.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrService.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrService.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/CharsetDecoder.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/CharsetDecoder.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/CharsetDecoder.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/CharsetDecoder.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/Readability.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/Readability.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/Readability.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/Readability.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/RssService.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/RssService.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/RssService.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/RssService.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/model/Feed.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/model/Feed.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/model/Feed.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/model/Feed.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/model/Opml.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/model/Opml.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/model/Opml.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/model/Opml.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/model/OpmlParser.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/model/OpmlParser.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/model/OpmlParser.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/rss/model/OpmlParser.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/VVOPlatformDetector.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/VVOPlatformDetector.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/VVOPlatformDetector.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/VVOPlatformDetector.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/VVOService.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/VVOService.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/VVOService.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/VVOService.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/api/ConfigApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/api/ConfigApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/api/ConfigApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/api/ConfigApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/api/StatusApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/api/StatusApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/api/StatusApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/api/StatusApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/api/TimelineApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/api/TimelineApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/api/TimelineApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/api/TimelineApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/api/UserApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/api/UserApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/api/UserApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/api/UserApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/model/EmojiData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/model/EmojiData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/model/EmojiData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/model/EmojiData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/model/ProfileData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/model/ProfileData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/model/ProfileData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/model/ProfileData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/model/TimelineData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/model/TimelineData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/model/TimelineData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/vvo/model/TimelineData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/XQTPlatformDetector.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/XQTPlatformDetector.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/XQTPlatformDetector.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/XQTPlatformDetector.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/XQTService.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/XQTService.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/XQTService.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/XQTService.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/DefaultApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/DefaultApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/DefaultApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/DefaultApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/DmApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/DmApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/DmApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/DmApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/GuestApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/GuestApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/GuestApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/GuestApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/ListsApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/ListsApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/ListsApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/ListsApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/MediaApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/MediaApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/MediaApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/MediaApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/OtherApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/OtherApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/OtherApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/OtherApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/PostApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/PostApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/PostApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/PostApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/TweetApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/TweetApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/TweetApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/TweetApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/UserApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/UserApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/UserApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/UserApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/UserListApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/UserListApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/UserListApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/UserListApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/UsersApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/UsersApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/UsersApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/UsersApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/V11GetApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/V11GetApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/V11GetApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/V11GetApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/V11PostApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/V11PostApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/V11PostApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/V11PostApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/V20GetApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/V20GetApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/V20GetApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/V20GetApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/VDmPostJsonPostApi.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/VDmPostJsonPostApi.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/VDmPostJsonPostApi.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/api/VDmPostJsonPostApi.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/elonmusk114514/ElonMusk1145141919810.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/elonmusk114514/ElonMusk1145141919810.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/elonmusk114514/ElonMusk1145141919810.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/elonmusk114514/ElonMusk1145141919810.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/AccountSettingsResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/AccountSettingsResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/AccountSettingsResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/AccountSettingsResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ActivateResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ActivateResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ActivateResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ActivateResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/AdditionalMediaInfo.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/AdditionalMediaInfo.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/AdditionalMediaInfo.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/AdditionalMediaInfo.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/AudioSpaceByIDResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/AudioSpaceByIDResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/AudioSpaceByIDResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/AudioSpaceByIDResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchEntity.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchEntity.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchEntity.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchEntity.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchEntityRef.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchEntityRef.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchEntityRef.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchEntityRef.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchPivot.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchPivot.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchPivot.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchPivot.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchPivotFooter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchPivotFooter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchPivotFooter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchPivotFooter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchPivotNote.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchPivotNote.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchPivotNote.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchPivotNote.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchPivotSubtitle.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchPivotSubtitle.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchPivotSubtitle.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BirdwatchPivotSubtitle.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BookmarksResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BookmarksResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BookmarksResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BookmarksResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BookmarksResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BookmarksResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BookmarksResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BookmarksResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BookmarksTimeline.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BookmarksTimeline.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BookmarksTimeline.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/BookmarksTimeline.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Callback.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Callback.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Callback.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Callback.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ClientEventInfo.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ClientEventInfo.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ClientEventInfo.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ClientEventInfo.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CommunitiesActions.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CommunitiesActions.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CommunitiesActions.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CommunitiesActions.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ContentEntryType.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ContentEntryType.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ContentEntryType.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ContentEntryType.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ContentItemType.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ContentItemType.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ContentItemType.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ContentItemType.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ContentUnion.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ContentUnion.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ContentUnion.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ContentUnion.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CoverCta.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CoverCta.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CoverCta.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CoverCta.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateRetweet.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateRetweet.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateRetweet.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateRetweet.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateRetweetResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateRetweetResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateRetweetResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateRetweetResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateRetweetResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateRetweetResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateRetweetResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateRetweetResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateRetweetResponseResult.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateRetweetResponseResult.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateRetweetResponseResult.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateRetweetResponseResult.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateTweet.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateTweet.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateTweet.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateTweet.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateTweetResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateTweetResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateTweetResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateTweetResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateTweetResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateTweetResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateTweetResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateTweetResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateTweetResponseResult.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateTweetResponseResult.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateTweetResponseResult.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CreateTweetResponseResult.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CtaClientEventInfo.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CtaClientEventInfo.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CtaClientEventInfo.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CtaClientEventInfo.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CursorType.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CursorType.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CursorType.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/CursorType.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseDataAddParticipants.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseDataAddParticipants.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseDataAddParticipants.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseDataAddParticipants.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseDataAddParticipantsParticipantsJoinEvent.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseDataAddParticipantsParticipantsJoinEvent.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseDataAddParticipantsParticipantsJoinEvent.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseDataAddParticipantsParticipantsJoinEvent.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseDataAddParticipantsParticipantsJoinEventDmEventResults.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseDataAddParticipantsParticipantsJoinEventDmEventResults.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseDataAddParticipantsParticipantsJoinEventDmEventResults.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseDataAddParticipantsParticipantsJoinEventDmEventResults.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseDataAddParticipantsParticipantsJoinEventDmEventResultsResult.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseDataAddParticipantsParticipantsJoinEventDmEventResultsResult.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseDataAddParticipantsParticipantsJoinEventDmEventResultsResult.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMAddParticipantsMutationResponseDataAddParticipantsParticipantsJoinEventDmEventResultsResult.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMBlockUserResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMBlockUserResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMBlockUserResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMBlockUserResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMBlockUserResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMBlockUserResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMBlockUserResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMBlockUserResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMBlockUserResponseDataDmBlockByRestId.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMBlockUserResponseDataDmBlockByRestId.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMBlockUserResponseDataDmBlockByRestId.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMBlockUserResponseDataDmBlockByRestId.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConversationSearchTabGroupsQueryResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConversationSearchTabGroupsQueryResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConversationSearchTabGroupsQueryResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConversationSearchTabGroupsQueryResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConversationSearchTabGroupsQueryResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConversationSearchTabGroupsQueryResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConversationSearchTabGroupsQueryResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConversationSearchTabGroupsQueryResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConversationSearchTabPeopleQueryResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConversationSearchTabPeopleQueryResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConversationSearchTabPeopleQueryResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConversationSearchTabPeopleQueryResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConversationSearchTabPeopleQueryResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConversationSearchTabPeopleQueryResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConversationSearchTabPeopleQueryResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConversationSearchTabPeopleQueryResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoLegacy.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoLegacy.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoLegacy.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoLegacy.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoMetadata.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoMetadata.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoMetadata.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoMetadata.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoMetadataAvatar.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoMetadataAvatar.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoMetadataAvatar.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoMetadataAvatar.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoMetadataAvatarMediaInfo.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoMetadataAvatarMediaInfo.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoMetadataAvatarMediaInfo.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoMetadataAvatarMediaInfo.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoSearch.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoSearch.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoSearch.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMConvoSearch.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEvent.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEvent.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEvent.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEvent.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventDetail.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventDetail.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventDetail.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventDetail.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventDetailDM.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventDetailDM.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventDetailDM.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventDetailDM.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventDetailDMEntities.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventDetailDMEntities.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventDetailDMEntities.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventDetailDMEntities.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventDetailInitialLowQualityState.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventDetailInitialLowQualityState.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventDetailInitialLowQualityState.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventDetailInitialLowQualityState.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventLegacy.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventLegacy.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventLegacy.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMEventLegacy.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMGroupSearchSlice.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMGroupSearchSlice.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMGroupSearchSlice.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMGroupSearchSlice.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMGroupSearchSliceItemsInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMGroupSearchSliceItemsInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMGroupSearchSliceItemsInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMGroupSearchSliceItemsInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMGroupSearchSliceItemsInnerHighlighting.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMGroupSearchSliceItemsInnerHighlighting.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMGroupSearchSliceItemsInnerHighlighting.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMGroupSearchSliceItemsInnerHighlighting.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMGroupSearchSliceSliceInfo.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMGroupSearchSliceSliceInfo.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMGroupSearchSliceSliceInfo.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMGroupSearchSliceSliceInfo.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationItem.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationItem.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationItem.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationItem.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationLabel.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationLabel.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationLabel.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationLabel.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationLegacy.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationLegacy.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationLegacy.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationLegacy.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationLegacyMetadata.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationLegacyMetadata.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationLegacyMetadata.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationLegacyMetadata.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationParticipant.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationParticipant.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationParticipant.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationParticipant.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationParticipantUserResults.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationParticipantUserResults.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationParticipantUserResults.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationParticipantUserResults.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationPerspectivalMetadata.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationPerspectivalMetadata.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationPerspectivalMetadata.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationPerspectivalMetadata.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationUser.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationUser.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationUser.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationUser.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationUserLegacy.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationUserLegacy.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationUserLegacy.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedConversationUserLegacy.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedInboxQueryResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedInboxQueryResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedInboxQueryResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedInboxQueryResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedInboxQueryResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedInboxQueryResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedInboxQueryResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedInboxQueryResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedInboxQueryResponseDataLabeledConversationSlice.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedInboxQueryResponseDataLabeledConversationSlice.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedInboxQueryResponseDataLabeledConversationSlice.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxPinnedInboxQueryResponseDataLabeledConversationSlice.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxTimelines.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxTimelines.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxTimelines.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMInboxTimelines.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageDeleteMutationResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageDeleteMutationResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageDeleteMutationResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageDeleteMutationResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageDeleteMutationResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageDeleteMutationResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageDeleteMutationResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageDeleteMutationResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageSearchSlice.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageSearchSlice.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageSearchSlice.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageSearchSlice.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageSearchSliceItemsInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageSearchSliceItemsInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageSearchSliceItemsInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageSearchSliceItemsInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageSearchTabQueryResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageSearchTabQueryResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageSearchTabQueryResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageSearchTabQueryResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageSearchTabQueryResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageSearchTabQueryResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageSearchTabQueryResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMMessageSearchTabQueryResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMParticipantMetadata.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMParticipantMetadata.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMParticipantMetadata.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMParticipantMetadata.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPeopleSearchSlice.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPeopleSearchSlice.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPeopleSearchSlice.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPeopleSearchSlice.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPermissionsCreateGroupConversationResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPermissionsCreateGroupConversationResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPermissionsCreateGroupConversationResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPermissionsCreateGroupConversationResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPermissionsCreateGroupConversationResponsePermissions.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPermissionsCreateGroupConversationResponsePermissions.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPermissionsCreateGroupConversationResponsePermissions.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPermissionsCreateGroupConversationResponsePermissions.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPermissionsCreateGroupConversationResponsePermissionsIdKeysValue.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPermissionsCreateGroupConversationResponsePermissionsIdKeysValue.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPermissionsCreateGroupConversationResponsePermissionsIdKeysValue.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPermissionsCreateGroupConversationResponsePermissionsIdKeysValue.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPerspectivalConversationMetadata.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPerspectivalConversationMetadata.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPerspectivalConversationMetadata.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPerspectivalConversationMetadata.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPinnedInboxAppendMutationResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPinnedInboxAppendMutationResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPinnedInboxAppendMutationResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPinnedInboxAppendMutationResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPinnedInboxAppendMutationResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPinnedInboxAppendMutationResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPinnedInboxAppendMutationResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPinnedInboxAppendMutationResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPinnedInboxAppendMutationResponseDataAddDmConversationLabelV3.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPinnedInboxAppendMutationResponseDataAddDmConversationLabelV3.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPinnedInboxAppendMutationResponseDataAddDmConversationLabelV3.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPinnedInboxAppendMutationResponseDataAddDmConversationLabelV3.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPinnedInboxDeleteMutationResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPinnedInboxDeleteMutationResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPinnedInboxDeleteMutationResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMPinnedInboxDeleteMutationResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUnblockUserResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUnblockUserResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUnblockUserResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUnblockUserResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUnblockUserResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUnblockUserResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUnblockUserResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUnblockUserResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUnblockUserResponseDataDmUnblockByRestId.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUnblockUserResponseDataDmUnblockByRestId.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUnblockUserResponseDataDmUnblockByRestId.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUnblockUserResponseDataDmUnblockByRestId.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUseDMReactionMutationAddMutationResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUseDMReactionMutationAddMutationResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUseDMReactionMutationAddMutationResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUseDMReactionMutationAddMutationResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUseDMReactionMutationAddMutationResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUseDMReactionMutationAddMutationResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUseDMReactionMutationAddMutationResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUseDMReactionMutationAddMutationResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUseDMReactionMutationAddMutationResponseDataCreateDmReaction.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUseDMReactionMutationAddMutationResponseDataCreateDmReaction.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUseDMReactionMutationAddMutationResponseDataCreateDmReaction.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUseDMReactionMutationAddMutationResponseDataCreateDmReaction.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUseDMReactionMutationAddMutationResponseDataDeleteDmReaction.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUseDMReactionMutationAddMutationResponseDataDeleteDmReaction.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUseDMReactionMutationAddMutationResponseDataDeleteDmReaction.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUseDMReactionMutationAddMutationResponseDataDeleteDmReaction.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUserResults.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUserResults.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUserResults.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DMUserResults.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteRetweet.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteRetweet.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteRetweet.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteRetweet.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteRetweetResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteRetweetResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteRetweetResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteRetweetResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteRetweetResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteRetweetResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteRetweetResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteRetweetResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteRetweetResponseResult.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteRetweetResponseResult.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteRetweetResponseResult.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteRetweetResponseResult.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteTweetResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteTweetResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteTweetResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteTweetResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteTweetResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteTweetResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteTweetResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteTweetResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteTweetResponseResult.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteTweetResponseResult.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteTweetResponseResult.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DeleteTweetResponseResult.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DmAllSearchSliceResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DmAllSearchSliceResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DmAllSearchSliceResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DmAllSearchSliceResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DmAllSearchSliceResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DmAllSearchSliceResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DmAllSearchSliceResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DmAllSearchSliceResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DmNew2Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DmNew2Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DmNew2Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/DmNew2Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Entities.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Entities.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Entities.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Entities.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Error.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Error.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Error.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Error.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ErrorExtensions.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ErrorExtensions.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ErrorExtensions.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ErrorExtensions.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ErrorResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ErrorResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ErrorResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ErrorResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Errors.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Errors.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Errors.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Errors.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ExtMediaAvailability.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ExtMediaAvailability.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ExtMediaAvailability.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ExtMediaAvailability.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ExtendedEntities.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ExtendedEntities.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ExtendedEntities.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ExtendedEntities.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Extensions.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Extensions.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Extensions.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Extensions.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FavoriteTweet.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FavoriteTweet.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FavoriteTweet.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FavoriteTweet.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FavoriteTweetResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FavoriteTweetResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FavoriteTweetResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FavoriteTweetResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FleetlineResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FleetlineResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FleetlineResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FleetlineResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowResponseResult.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowResponseResult.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowResponseResult.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowResponseResult.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowResponseUser.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowResponseUser.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowResponseUser.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowResponseUser.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowTimeline.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowTimeline.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowTimeline.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/FollowTimeline.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetBookmarks200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetBookmarks200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetBookmarks200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetBookmarks200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetFavoriters200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetFavoriters200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetFavoriters200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetFavoriters200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetFollowers200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetFollowers200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetFollowers200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetFollowers200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetHomeLatestTimeline200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetHomeLatestTimeline200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetHomeLatestTimeline200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetHomeLatestTimeline200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetLikes200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetLikes200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetLikes200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetLikes200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetListLatestTweetsTimeline200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetListLatestTweetsTimeline200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetListLatestTweetsTimeline200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetListLatestTweetsTimeline200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetProfileSpotlightsQuery200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetProfileSpotlightsQuery200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetProfileSpotlightsQuery200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetProfileSpotlightsQuery200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetRetweeters200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetRetweeters200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetRetweeters200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetRetweeters200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetSearchTimeline200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetSearchTimeline200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetSearchTimeline200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetSearchTimeline200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetTweetDetail200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetTweetDetail200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetTweetDetail200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetTweetDetail200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetTweetResultByRestId200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetTweetResultByRestId200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetTweetResultByRestId200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetTweetResultByRestId200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetUserByRestId200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetUserByRestId200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetUserByRestId200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetUserByRestId200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetUserHighlightsTweets200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetUserHighlightsTweets200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetUserHighlightsTweets200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetUserHighlightsTweets200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetUsersByRestIds200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetUsersByRestIds200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetUsersByRestIds200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/GetUsersByRestIds200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/HomeTimelineHome.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/HomeTimelineHome.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/HomeTimelineHome.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/HomeTimelineHome.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/HomeTimelineResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/HomeTimelineResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/HomeTimelineResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/HomeTimelineResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversation.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversation.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversation.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversation.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationParticipantsInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationParticipantsInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationParticipantsInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationParticipantsInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineConversation.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineConversation.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineConversation.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineConversation.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachment.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachment.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachment.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachment.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentAnimatedGif.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentAnimatedGif.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentAnimatedGif.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentAnimatedGif.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaAltText.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaAltText.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaAltText.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaAltText.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaColor.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaColor.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaColor.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaColor.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaColorPalette.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaColorPalette.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaColorPalette.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaColorPalette.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaColorR.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaColorR.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaColorR.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaColorR.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaExt.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaExt.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaExt.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaExt.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaExtMediaColor.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaExtMediaColor.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaExtMediaColor.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaExtMediaColor.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaOriginalInfo.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaOriginalInfo.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaOriginalInfo.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaOriginalInfo.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaRGB.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaRGB.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaRGB.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaRGB.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaSize.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaSize.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaSize.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaSize.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaSizes.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaSizes.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaSizes.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaSizes.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaStats.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaStats.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaStats.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaStats.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaVideoInfo.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaVideoInfo.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaVideoInfo.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaVideoInfo.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaVideoVariant.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaVideoVariant.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaVideoVariant.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentMediaVideoVariant.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentPhoto.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentPhoto.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentPhoto.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentPhoto.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentTweet.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentTweet.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentTweet.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentTweet.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentVideo.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentVideo.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentVideo.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataAttachmentVideo.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntities.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntities.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntities.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntities.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntitiesHashtagEntity.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntitiesHashtagEntity.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntitiesHashtagEntity.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntitiesHashtagEntity.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntitiesSymbolEntity.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntitiesSymbolEntity.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntitiesSymbolEntity.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntitiesSymbolEntity.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntitiesUrlEntity.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntitiesUrlEntity.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntitiesUrlEntity.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntitiesUrlEntity.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntitiesUserMentionEntity.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntitiesUserMentionEntity.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntitiesUserMentionEntity.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataEntitiesUserMentionEntity.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataReplyData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataReplyData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataReplyData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineMessageDataReplyData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineURL.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineURL.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineURL.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxConversationTimelineURL.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMTrustedTimelineResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMTrustedTimelineResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMTrustedTimelineResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMTrustedTimelineResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMTrustedTimelineResponseInboxTimeline.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMTrustedTimelineResponseInboxTimeline.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMTrustedTimelineResponseInboxTimeline.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMTrustedTimelineResponseInboxTimeline.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMUserUpdateResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMUserUpdateResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMUserUpdateResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMUserUpdateResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMUserUpdateResponseInboxInitialState.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMUserUpdateResponseInboxInitialState.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMUserUpdateResponseInboxInitialState.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMUserUpdateResponseInboxInitialState.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMUserUpdateResponseInboxInitialStateInboxTimelines.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMUserUpdateResponseInboxInitialStateInboxTimelines.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMUserUpdateResponseInboxInitialStateInboxTimelines.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMUserUpdateResponseInboxInitialStateInboxTimelines.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMUserUpdateResponseUserEvents.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMUserUpdateResponseUserEvents.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMUserUpdateResponseUserEvents.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxDMUserUpdateResponseUserEvents.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxMessageData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxMessageData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxMessageData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxMessageData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationAvatarUpdateEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationAvatarUpdateEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationAvatarUpdateEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationAvatarUpdateEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationAvatarUpdateEntryConversationAvatarUpdate.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationAvatarUpdateEntryConversationAvatarUpdate.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationAvatarUpdateEntryConversationAvatarUpdate.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationAvatarUpdateEntryConversationAvatarUpdate.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationAvatarUpdateEntryConversationAvatarUpdateAvatar.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationAvatarUpdateEntryConversationAvatarUpdateAvatar.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationAvatarUpdateEntryConversationAvatarUpdateAvatar.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationAvatarUpdateEntryConversationAvatarUpdateAvatar.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationAvatarUpdateEntryConversationAvatarUpdateAvatarImage.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationAvatarUpdateEntryConversationAvatarUpdateAvatarImage.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationAvatarUpdateEntryConversationAvatarUpdateAvatarImage.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationAvatarUpdateEntryConversationAvatarUpdateAvatarImage.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationCreateEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationCreateEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationCreateEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationCreateEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationCreateEntryConversationCreate.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationCreateEntryConversationCreate.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationCreateEntryConversationCreate.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationCreateEntryConversationCreate.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationNameUpdateEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationNameUpdateEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationNameUpdateEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationNameUpdateEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationNameUpdateEntryConversationNameUpdate.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationNameUpdateEntryConversationNameUpdate.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationNameUpdateEntryConversationNameUpdate.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationNameUpdateEntryConversationNameUpdate.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationReadEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationReadEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationReadEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationReadEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationReadEntryConversationRead.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationReadEntryConversationRead.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationReadEntryConversationRead.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineConversationReadEntryConversationRead.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineDisableNotificationsEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineDisableNotificationsEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineDisableNotificationsEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineDisableNotificationsEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineDisableNotificationsORRemoveConversationEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineDisableNotificationsORRemoveConversationEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineDisableNotificationsORRemoveConversationEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineDisableNotificationsORRemoveConversationEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineJoinConversationEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineJoinConversationEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineJoinConversationEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineJoinConversationEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineJoinConversationEntryJoinConversation.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineJoinConversationEntryJoinConversation.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineJoinConversationEntryJoinConversation.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineJoinConversationEntryJoinConversation.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineJoinConversationEntryJoinConversationParticipantsInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineJoinConversationEntryJoinConversationParticipantsInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineJoinConversationEntryJoinConversationParticipantsInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineJoinConversationEntryJoinConversationParticipantsInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMentionNotificationsSettingUpdateEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMentionNotificationsSettingUpdateEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMentionNotificationsSettingUpdateEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMentionNotificationsSettingUpdateEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMentionNotificationsSettingUpdateEntryMentionNotificationsSettingUpdate.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMentionNotificationsSettingUpdateEntryMentionNotificationsSettingUpdate.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMentionNotificationsSettingUpdateEntryMentionNotificationsSettingUpdate.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMentionNotificationsSettingUpdateEntryMentionNotificationsSettingUpdate.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageDeleteEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageDeleteEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageDeleteEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageDeleteEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageDeleteORMarkAsSpamEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageDeleteORMarkAsSpamEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageDeleteORMarkAsSpamEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageDeleteORMarkAsSpamEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageDeleteORMarkAsSpamEntryMessagesInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageDeleteORMarkAsSpamEntryMessagesInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageDeleteORMarkAsSpamEntryMessagesInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageDeleteORMarkAsSpamEntryMessagesInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageEntryMessage.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageEntryMessage.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageEntryMessage.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageEntryMessage.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageMarkAsSpamEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageMarkAsSpamEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageMarkAsSpamEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineMessageMarkAsSpamEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsJoinEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsJoinEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsJoinEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsJoinEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsJoinEntryParticipantsJoin.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsJoinEntryParticipantsJoin.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsJoinEntryParticipantsJoin.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsJoinEntryParticipantsJoin.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsJoinEntryParticipantsJoinParticipantsInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsJoinEntryParticipantsJoinParticipantsInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsJoinEntryParticipantsJoinParticipantsInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsJoinEntryParticipantsJoinParticipantsInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsLeaveEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsLeaveEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsLeaveEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsLeaveEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsLeaveEntryParticipantsLeave.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsLeaveEntryParticipantsLeave.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsLeaveEntryParticipantsLeave.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineParticipantsLeaveEntryParticipantsLeave.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineReactionCreateEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineReactionCreateEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineReactionCreateEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineReactionCreateEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineReactionDeleteEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineReactionDeleteEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineReactionDeleteEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineReactionDeleteEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineRemoveConversationEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineRemoveConversationEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineRemoveConversationEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineRemoveConversationEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineTrustConversationEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineTrustConversationEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineTrustConversationEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineTrustConversationEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineTrustConversationEntryTrustConversation.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineTrustConversationEntryTrustConversation.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineTrustConversationEntryTrustConversation.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxTimelineTrustConversationEntryTrustConversation.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxURL.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxURL.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxURL.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxURL.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxUser.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxUser.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxUser.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxUser.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxUserEntities.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxUserEntities.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxUserEntities.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxUserEntities.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxUserEntitiesUrl.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxUserEntitiesUrl.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxUserEntitiesUrl.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxUserEntitiesUrl.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxUserEventReactionEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxUserEventReactionEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxUserEventReactionEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InboxUserEventReactionEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InstructionType.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InstructionType.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InstructionType.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InstructionType.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InstructionUnion.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InstructionUnion.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InstructionUnion.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/InstructionUnion.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ItemContentUnion.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ItemContentUnion.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ItemContentUnion.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ItemContentUnion.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ItemResult.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ItemResult.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ItemResult.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ItemResult.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ListLatestTweetsTimelineResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ListLatestTweetsTimelineResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ListLatestTweetsTimelineResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ListLatestTweetsTimelineResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ListTweetsTimeline.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ListTweetsTimeline.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ListTweetsTimeline.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ListTweetsTimeline.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ListTweetsTimelineData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ListTweetsTimelineData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ListTweetsTimelineData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ListTweetsTimelineData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ListTweetsTimelineList.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ListTweetsTimelineList.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ListTweetsTimelineList.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ListTweetsTimelineList.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/LiveVideoStreamStatusResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/LiveVideoStreamStatusResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/LiveVideoStreamStatusResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/LiveVideoStreamStatusResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Location.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Location.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Location.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Location.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Media.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Media.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Media.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Media.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaExtended.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaExtended.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaExtended.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaExtended.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaOriginalInfo.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaOriginalInfo.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaOriginalInfo.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaOriginalInfo.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaOriginalInfoFocusRect.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaOriginalInfoFocusRect.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaOriginalInfoFocusRect.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaOriginalInfoFocusRect.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaSize.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaSize.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaSize.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaSize.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaSizes.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaSizes.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaSizes.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaSizes.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaStats.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaStats.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaStats.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaStats.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaVideoInfo.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaVideoInfo.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaVideoInfo.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaVideoInfo.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaVideoInfoVariant.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaVideoInfoVariant.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaVideoInfoVariant.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/MediaVideoInfoVariant.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ModuleEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ModuleEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ModuleEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ModuleEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ModuleItem.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ModuleItem.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ModuleItem.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ModuleItem.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweet.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweet.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweet.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweet.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResult.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResult.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResult.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResult.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultMedia.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultMedia.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultMedia.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultMedia.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultMediaInlineMedia.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultMediaInlineMedia.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultMediaInlineMedia.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultMediaInlineMedia.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultRichText.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultRichText.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultRichText.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultRichText.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultRichTextTag.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultRichTextTag.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultRichTextTag.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/NoteTweetResultRichTextTag.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/OneFactorLoginEligibility.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/OneFactorLoginEligibility.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/OneFactorLoginEligibility.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/OneFactorLoginEligibility.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Other200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Other200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Other200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Other200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/OtherResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/OtherResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/OtherResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/OtherResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateRetweet200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateRetweet200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateRetweet200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateRetweet200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateRetweetRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateRetweetRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateRetweetRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateRetweetRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateRetweetRequestVariables.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateRetweetRequestVariables.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateRetweetRequestVariables.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateRetweetRequestVariables.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweet200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweet200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweet200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweet200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestFeatures.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestFeatures.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestFeatures.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestFeatures.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestVariables.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestVariables.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestVariables.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestVariables.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestVariablesMedia.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestVariablesMedia.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestVariablesMedia.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestVariablesMedia.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestVariablesMediaMediaEntitiesInner.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestVariablesMediaMediaEntitiesInner.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestVariablesMediaMediaEntitiesInner.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestVariablesMediaMediaEntitiesInner.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestVariablesReply.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestVariablesReply.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestVariablesReply.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostCreateTweetRequestVariablesReply.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteRetweet200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteRetweet200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteRetweet200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteRetweet200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteRetweetRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteRetweetRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteRetweetRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteRetweetRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteRetweetRequestVariables.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteRetweetRequestVariables.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteRetweetRequestVariables.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteRetweetRequestVariables.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteTweet200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteTweet200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteTweet200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteTweet200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteTweetRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteTweetRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteTweetRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDeleteTweetRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDmNew2Request.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDmNew2Request.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDmNew2Request.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostDmNew2Request.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostFavoriteTweet200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostFavoriteTweet200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostFavoriteTweet200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostFavoriteTweet200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostFavoriteTweetRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostFavoriteTweetRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostFavoriteTweetRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostFavoriteTweetRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostUnfavoriteTweet200Response.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostUnfavoriteTweet200Response.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostUnfavoriteTweet200Response.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostUnfavoriteTweet200Response.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostUnfavoriteTweetRequest.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostUnfavoriteTweetRequest.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostUnfavoriteTweetRequest.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/PostUnfavoriteTweetRequest.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ProfileResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ProfileResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ProfileResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ProfileResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ProfileResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ProfileResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ProfileResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/ProfileResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Retweet.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Retweet.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Retweet.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Retweet.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/RetweetLegacy.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/RetweetLegacy.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/RetweetLegacy.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/RetweetLegacy.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SearchByRawQuery.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SearchByRawQuery.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SearchByRawQuery.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SearchByRawQuery.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SearchTimeline.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SearchTimeline.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SearchTimeline.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SearchTimeline.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SearchTimelineData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SearchTimelineData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SearchTimelineData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SearchTimelineData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SearchTimelineResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SearchTimelineResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SearchTimelineResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SearchTimelineResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SelfThread.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SelfThread.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SelfThread.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SelfThread.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Session.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Session.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Session.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Session.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SocialContext.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SocialContext.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SocialContext.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/SocialContext.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Text.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Text.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Text.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Text.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TextEntity.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TextEntity.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TextEntity.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TextEntity.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TextEntityRef.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TextEntityRef.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TextEntityRef.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TextEntityRef.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Timeline.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Timeline.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Timeline.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Timeline.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineAddEntries.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineAddEntries.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineAddEntries.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineAddEntries.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineAddEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineAddEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineAddEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineAddEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineAddToModule.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineAddToModule.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineAddToModule.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineAddToModule.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineClearCache.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineClearCache.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineClearCache.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineClearCache.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineCommunity.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineCommunity.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineCommunity.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineCommunity.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineCoverBehavior.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineCoverBehavior.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineCoverBehavior.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineCoverBehavior.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineHalfCover.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineHalfCover.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineHalfCover.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineHalfCover.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineMessagePrompt.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineMessagePrompt.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineMessagePrompt.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineMessagePrompt.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelinePinEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelinePinEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelinePinEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelinePinEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelinePrompt.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelinePrompt.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelinePrompt.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelinePrompt.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineReplaceEntry.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineReplaceEntry.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineReplaceEntry.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineReplaceEntry.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineShowAlert.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineShowAlert.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineShowAlert.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineShowAlert.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineShowAlertRichText.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineShowAlertRichText.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineShowAlertRichText.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineShowAlertRichText.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineShowCover.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineShowCover.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineShowCover.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineShowCover.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineSpelling.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineSpelling.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineSpelling.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineSpelling.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTerminateTimeline.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTerminateTimeline.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTerminateTimeline.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTerminateTimeline.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTimelineCursor.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTimelineCursor.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTimelineCursor.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTimelineCursor.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTimelineItem.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTimelineItem.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTimelineItem.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTimelineItem.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTimelineModule.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTimelineModule.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTimelineModule.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTimelineModule.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTweet.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTweet.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTweet.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTweet.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTweetComposer.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTweetComposer.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTweetComposer.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTweetComposer.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTwitterList.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTwitterList.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTwitterList.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineTwitterList.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineUser.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineUser.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineUser.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineUser.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineV2.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineV2.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineV2.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TimelineV2.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Tracing.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Tracing.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Tracing.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Tracing.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Tweet.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Tweet.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Tweet.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/Tweet.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetCard.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetCard.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetCard.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetCard.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetCardLegacy.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetCardLegacy.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetCardLegacy.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetCardLegacy.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetCardLegacyBindingValue.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetCardLegacyBindingValue.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetCardLegacyBindingValue.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetCardLegacyBindingValue.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetCardLegacyBindingValueData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetCardLegacyBindingValueData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetCardLegacyBindingValueData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetCardLegacyBindingValueData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetDetailResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetDetailResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetDetailResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetDetailResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetDetailResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetDetailResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetDetailResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetDetailResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetEditControl.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetEditControl.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetEditControl.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetEditControl.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetEditControlInitial.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetEditControlInitial.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetEditControlInitial.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetEditControlInitial.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetEditPrespective.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetEditPrespective.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetEditPrespective.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetEditPrespective.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetFavoritersResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetFavoritersResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetFavoritersResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetFavoritersResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetFavoritersResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetFavoritersResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetFavoritersResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetFavoritersResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetLegacy.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetLegacy.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetLegacy.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetLegacy.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetResultByRestIdData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetResultByRestIdData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetResultByRestIdData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetResultByRestIdData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetResultByRestIdResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetResultByRestIdResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetResultByRestIdResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetResultByRestIdResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetRetweetersResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetRetweetersResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetRetweetersResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetRetweetersResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetRetweetersResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetRetweetersResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetRetweetersResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetRetweetersResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetTombstone.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetTombstone.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetTombstone.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetTombstone.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetUnion.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetUnion.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetUnion.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetUnion.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetView.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetView.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetView.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetView.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetWithVisibilityResults.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetWithVisibilityResults.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetWithVisibilityResults.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TweetWithVisibilityResults.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TwitterArticle.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TwitterArticle.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TwitterArticle.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TwitterArticle.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TypeName.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TypeName.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TypeName.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/TypeName.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UnfavoriteTweet.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UnfavoriteTweet.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UnfavoriteTweet.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UnfavoriteTweet.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UnfavoriteTweetResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UnfavoriteTweetResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UnfavoriteTweetResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UnfavoriteTweetResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UpdateAccountSettingsResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UpdateAccountSettingsResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UpdateAccountSettingsResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UpdateAccountSettingsResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UpdateAccountSettingsResponseSleepTime.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UpdateAccountSettingsResponseSleepTime.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UpdateAccountSettingsResponseSleepTime.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UpdateAccountSettingsResponseSleepTime.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/User.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/User.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/User.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/User.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserFeatures.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserFeatures.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserFeatures.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserFeatures.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsResult.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsResult.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsResult.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsResult.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsTimeline.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsTimeline.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsTimeline.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsTimeline.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsUser.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsUser.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsUser.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserHighlightsTweetsUser.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserLegacy.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserLegacy.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserLegacy.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserLegacy.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserRecommendationsItem.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserRecommendationsItem.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserRecommendationsItem.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserRecommendationsItem.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResultByScreenName.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResultByScreenName.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResultByScreenName.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResultByScreenName.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResultByScreenNameLegacy.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResultByScreenNameLegacy.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResultByScreenNameLegacy.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResultByScreenNameLegacy.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResultByScreenNameResult.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResultByScreenNameResult.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResultByScreenNameResult.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResultByScreenNameResult.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResultCore.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResultCore.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResultCore.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResultCore.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResults.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResults.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResults.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserResults.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserTweetsData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserTweetsData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserTweetsData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserTweetsData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserTweetsResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserTweetsResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserTweetsResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserTweetsResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserTweetsResult.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserTweetsResult.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserTweetsResult.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserTweetsResult.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserTweetsUser.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserTweetsUser.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserTweetsUser.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserTweetsUser.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserUnavailable.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserUnavailable.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserUnavailable.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserUnavailable.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserUnion.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserUnion.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserUnion.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UserUnion.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UsersResponse.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UsersResponse.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UsersResponse.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UsersResponse.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UsersResponseData.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UsersResponseData.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UsersResponseData.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/UsersResponseData.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/XqtUrl.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/XqtUrl.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/XqtUrl.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/XqtUrl.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/legacy/BadgeCount.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/legacy/BadgeCount.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/legacy/BadgeCount.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/legacy/BadgeCount.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/legacy/TopLevel.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/legacy/TopLevel.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/legacy/TopLevel.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/xqt/model/legacy/TopLevel.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/platform/BlueskyPlatformSpec.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/platform/BlueskyPlatformSpec.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/platform/BlueskyPlatformSpec.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/platform/BlueskyPlatformSpec.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/platform/CommonTimelineSpecs.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/platform/CommonTimelineSpecs.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/platform/CommonTimelineSpecs.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/platform/CommonTimelineSpecs.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/platform/MastodonPlatformSpec.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/platform/MastodonPlatformSpec.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/platform/MastodonPlatformSpec.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/platform/MastodonPlatformSpec.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/platform/MisskeyPlatformSpec.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/platform/MisskeyPlatformSpec.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/platform/MisskeyPlatformSpec.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/platform/MisskeyPlatformSpec.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/platform/NostrPlatformSpec.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/platform/NostrPlatformSpec.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/platform/NostrPlatformSpec.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/platform/NostrPlatformSpec.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/platform/RssTimelineSpecs.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/platform/RssTimelineSpecs.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/platform/RssTimelineSpecs.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/platform/RssTimelineSpecs.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/platform/VvoPlatformSpec.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/platform/VvoPlatformSpec.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/platform/VvoPlatformSpec.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/platform/VvoPlatformSpec.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/platform/XqtPlatformSpec.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/platform/XqtPlatformSpec.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/platform/XqtPlatformSpec.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/platform/XqtPlatformSpec.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/AccountRepository.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/AccountRepository.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/AccountRepository.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/AccountRepository.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/AccountTabSyncCoordinator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/AccountTabSyncCoordinator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/AccountTabSyncCoordinator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/AccountTabSyncCoordinator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/ApplicationRepository.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/ApplicationRepository.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/ApplicationRepository.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/ApplicationRepository.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/DebugRepository.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/DebugRepository.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/DebugRepository.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/DebugRepository.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/DraftMediaStore.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/DraftMediaStore.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/DraftMediaStore.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/DraftMediaStore.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/DraftRepository.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/DraftRepository.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/DraftRepository.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/DraftRepository.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/DraftSendingRecoveryCoordinator.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/DraftSendingRecoveryCoordinator.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/DraftSendingRecoveryCoordinator.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/DraftSendingRecoveryCoordinator.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/LocalFilterRepository.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/LocalFilterRepository.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/LocalFilterRepository.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/LocalFilterRepository.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/SearchHistoryRepository.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/SearchHistoryRepository.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/SearchHistoryRepository.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/SearchHistoryRepository.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/SettingsRepository.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/SettingsRepository.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/SettingsRepository.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/SettingsRepository.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/translation/AiPlaceholderTranslationSupport.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/translation/AiPlaceholderTranslationSupport.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/translation/AiPlaceholderTranslationSupport.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/translation/AiPlaceholderTranslationSupport.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationContentRules.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationContentRules.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationContentRules.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationContentRules.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationModels.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationModels.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationModels.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationModels.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationPayloadSupport.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationPayloadSupport.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationPayloadSupport.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationPayloadSupport.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationService.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationService.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationService.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationService.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationStoreSupport.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationStoreSupport.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationStoreSupport.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/translation/PreTranslationStoreSupport.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/translation/TranslationProvider.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/translation/TranslationProvider.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/translation/TranslationProvider.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/translation/TranslationProvider.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/translation/TranslationProviderCacheKey.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/translation/TranslationProviderCacheKey.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/translation/TranslationProviderCacheKey.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/translation/TranslationProviderCacheKey.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/translation/TranslationSupport.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/translation/TranslationSupport.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/data/translation/TranslationSupport.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/translation/TranslationSupport.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/di/AppModule.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/di/AppModule.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/di/AppModule.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/di/AppModule.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/di/CommonModule.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/di/CommonModule.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/di/CommonModule.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/di/CommonModule.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/di/PlatformModule.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/di/PlatformModule.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/di/PlatformModule.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/di/PlatformModule.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/model/AccountType.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/AccountType.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/model/AccountType.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/AccountType.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/model/MicroBlogKey.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/MicroBlogKey.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/model/MicroBlogKey.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/MicroBlogKey.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/model/PlatformSpec.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/PlatformSpec.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/model/PlatformSpec.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/PlatformSpec.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/model/PlatformType.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/PlatformType.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/model/PlatformType.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/PlatformType.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/model/ReferenceType.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/ReferenceType.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/model/ReferenceType.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/ReferenceType.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/shared/image/ImageCompressor.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/shared/image/ImageCompressor.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/shared/image/ImageCompressor.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/shared/image/ImageCompressor.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Instant.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Instant.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Instant.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Instant.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Number.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Number.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Number.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Number.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/ClickContext.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/ClickContext.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/ClickContext.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/ClickContext.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/DeeplinkEvent.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/DeeplinkEvent.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/DeeplinkEvent.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/DeeplinkEvent.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/TranslationDisplayState.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/TranslationDisplayState.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/TranslationDisplayState.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/TranslationDisplayState.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiAccount.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiAccount.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiAccount.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiAccount.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiApplication.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiApplication.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiApplication.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiApplication.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiCard.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiCard.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiCard.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiCard.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiDMRoom.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiDMRoom.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiDMRoom.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiDMRoom.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiDraft.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiDraft.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiDraft.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiDraft.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiEmoji.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiEmoji.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiEmoji.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiEmoji.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiHandle.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiHandle.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiHandle.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiHandle.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiHashtag.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiHashtag.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiHashtag.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiHashtag.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiIcon.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiIcon.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiIcon.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiIcon.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstance.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstance.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstance.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstance.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstanceMetadata.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstanceMetadata.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstanceMetadata.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstanceMetadata.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiKeywordFilter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiKeywordFilter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiKeywordFilter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiKeywordFilter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiList.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiList.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiList.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiList.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiMedia.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiMedia.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiMedia.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiMedia.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiNumber.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiNumber.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiNumber.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiNumber.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiPodcast.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiPodcast.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiPodcast.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiPodcast.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiPoll.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiPoll.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiPoll.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiPoll.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiProfile.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiProfile.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiProfile.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiProfile.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiRelation.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiRelation.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiRelation.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiRelation.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiRssSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiRssSource.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiRssSource.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiRssSource.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiSearchHistory.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiSearchHistory.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiSearchHistory.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiSearchHistory.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiState.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiState.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiState.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiState.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiStatus.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiStatus.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiStatus.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiStatus.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiStrings.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiStrings.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiStrings.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiStrings.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiTimelineV2.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiTimelineV2.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiTimelineV2.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiTimelineV2.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiTwitterArticle.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiTwitterArticle.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiTwitterArticle.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiTwitterArticle.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UriLauncher.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UriLauncher.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/UriLauncher.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UriLauncher.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Bluesky.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Bluesky.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Bluesky.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Bluesky.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Mastodon.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Mastodon.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Mastodon.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Mastodon.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Misskey.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Misskey.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Misskey.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Misskey.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Nostr.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Nostr.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Nostr.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Nostr.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Render.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Render.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Render.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Render.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Rss.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Rss.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Rss.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Rss.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/VVO.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/VVO.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/VVO.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/VVO.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/XQT.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/XQT.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/XQT.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/XQT.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/XQTActionMenu.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/XQTActionMenu.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/XQTActionMenu.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/XQTActionMenu.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/EnvironmentSettingsPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/EnvironmentSettingsPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/EnvironmentSettingsPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/EnvironmentSettingsPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/ExportDataPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/ExportDataPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/ExportDataPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/ExportDataPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/ExportSettingsPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/ExportSettingsPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/ExportSettingsPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/ExportSettingsPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/HomeTabsPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/HomeTabsPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/HomeTabsPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/HomeTabsPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/HomeTimelineWithTabsPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/HomeTimelineWithTabsPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/HomeTimelineWithTabsPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/HomeTimelineWithTabsPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/ImportDataPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/ImportDataPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/ImportDataPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/ImportDataPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/ImportSettingsPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/ImportSettingsPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/ImportSettingsPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/ImportSettingsPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/PinTabsPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/PinTabsPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/PinTabsPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/PinTabsPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/SettingsPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/SettingsPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/SettingsPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/SettingsPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/State.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/State.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/State.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/State.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/ComposePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/ComposePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/ComposePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/ComposePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/ComposeUseCase.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/ComposeUseCase.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/ComposeUseCase.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/ComposeUseCase.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/DraftBoxPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/DraftBoxPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/DraftBoxPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/DraftBoxPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/EmojiHistoryPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/EmojiHistoryPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/EmojiHistoryPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/EmojiHistoryPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/InitialTextResolver.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/InitialTextResolver.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/InitialTextResolver.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/InitialTextResolver.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/RestoreDraftUseCase.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/RestoreDraftUseCase.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/RestoreDraftUseCase.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/RestoreDraftUseCase.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/SaveDraftUseCase.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/SaveDraftUseCase.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/SaveDraftUseCase.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/SaveDraftUseCase.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/SendDraftUseCase.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/SendDraftUseCase.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/SendDraftUseCase.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/compose/SendDraftUseCase.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/dm/DMConversationPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/dm/DMConversationPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/dm/DMConversationPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/dm/DMConversationPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/dm/DMListPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/dm/DMListPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/dm/DMListPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/dm/DMListPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/dm/UserDMConversationPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/dm/UserDMConversationPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/dm/UserDMConversationPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/dm/UserDMConversationPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/ActiveAccountPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/ActiveAccountPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/ActiveAccountPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/ActiveAccountPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/AllNotificationBadgePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/AllNotificationBadgePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/AllNotificationBadgePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/AllNotificationBadgePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/AllNotificationPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/AllNotificationPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/AllNotificationPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/AllNotificationPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DeepLinkPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DeepLinkPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DeepLinkPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DeepLinkPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DirectMessageBadgePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DirectMessageBadgePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DirectMessageBadgePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DirectMessageBadgePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DiscoverPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DiscoverPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DiscoverPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DiscoverPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DiscoverStatusTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DiscoverStatusTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DiscoverStatusTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DiscoverStatusTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/FavIconPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/FavIconPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/FavIconPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/FavIconPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/GroupConfigPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/GroupConfigPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/GroupConfigPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/GroupConfigPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/HomeTabItemPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/HomeTabItemPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/HomeTabItemPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/HomeTabItemPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/HomeTabSettingsPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/HomeTabSettingsPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/HomeTabSettingsPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/HomeTabSettingsPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/HomeTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/HomeTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/HomeTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/HomeTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/LoggedInPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/LoggedInPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/LoggedInPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/LoggedInPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/MixedTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/MixedTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/MixedTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/MixedTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/NotificationBadgePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/NotificationBadgePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/NotificationBadgePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/NotificationBadgePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/SearchHistoryPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/SearchHistoryPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/SearchHistoryPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/SearchHistoryPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/SearchPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/SearchPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/SearchPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/SearchPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/SearchStatusTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/SearchStatusTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/SearchStatusTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/SearchStatusTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/SecondaryTabsPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/SecondaryTabsPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/SecondaryTabsPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/SecondaryTabsPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/TimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/TimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/TimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/TimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/UserPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/UserPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/UserPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/UserPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/bluesky/BlueskyBookmarkTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/bluesky/BlueskyBookmarkTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/bluesky/BlueskyBookmarkTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/bluesky/BlueskyBookmarkTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/bluesky/BlueskyFeedPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/bluesky/BlueskyFeedPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/bluesky/BlueskyFeedPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/bluesky/BlueskyFeedPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/bluesky/BlueskyFeedTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/bluesky/BlueskyFeedTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/bluesky/BlueskyFeedTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/bluesky/BlueskyFeedTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/bluesky/BlueskyFeedsPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/bluesky/BlueskyFeedsPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/bluesky/BlueskyFeedsPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/bluesky/BlueskyFeedsPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/mastodon/MastodonBookmarkTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/mastodon/MastodonBookmarkTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/mastodon/MastodonBookmarkTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/mastodon/MastodonBookmarkTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/mastodon/MastodonFavouriteTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/mastodon/MastodonFavouriteTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/mastodon/MastodonFavouriteTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/mastodon/MastodonFavouriteTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/mastodon/MastodonLocalTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/mastodon/MastodonLocalTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/mastodon/MastodonLocalTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/mastodon/MastodonLocalTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/mastodon/MastodonPublicTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/mastodon/MastodonPublicTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/mastodon/MastodonPublicTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/mastodon/MastodonPublicTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MissKeyLocalTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MissKeyLocalTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MissKeyLocalTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MissKeyLocalTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MissKeyPublicTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MissKeyPublicTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MissKeyPublicTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MissKeyPublicTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyChannelListPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyChannelListPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyChannelListPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyChannelListPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyChannelPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyChannelPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyChannelPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyChannelPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyChannelTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyChannelTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyChannelTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyChannelTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyFavouriteTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyFavouriteTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyFavouriteTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyFavouriteTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyHybridTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyHybridTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyHybridTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/misskey/MisskeyHybridTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/CheckRssSourcePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/CheckRssSourcePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/CheckRssSourcePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/CheckRssSourcePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/EditRssSourcePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/EditRssSourcePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/EditRssSourcePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/EditRssSourcePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/ExportOPMLPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/ExportOPMLPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/ExportOPMLPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/ExportOPMLPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/ImportOPMLPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/ImportOPMLPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/ImportOPMLPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/ImportOPMLPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/RssDetailPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/RssDetailPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/RssDetailPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/RssDetailPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/RssDetailTranslatePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/RssDetailTranslatePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/RssDetailTranslatePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/RssDetailTranslatePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/RssSourcesPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/RssSourcesPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/RssSourcesPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/RssSourcesPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/RssTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/RssTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/RssTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/RssTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/vvo/VVOFavouriteTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/vvo/VVOFavouriteTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/vvo/VVOFavouriteTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/vvo/VVOFavouriteTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/vvo/VVOLikeTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/vvo/VVOLikeTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/vvo/VVOLikeTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/vvo/VVOLikeTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/xqt/TwitterArticlePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/xqt/TwitterArticlePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/xqt/TwitterArticlePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/xqt/TwitterArticlePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/xqt/XQTBookmarkTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/xqt/XQTBookmarkTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/xqt/XQTBookmarkTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/xqt/XQTBookmarkTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/xqt/XQTDeviceFollowTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/xqt/XQTDeviceFollowTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/xqt/XQTDeviceFollowTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/xqt/XQTDeviceFollowTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/xqt/XQTFeaturedTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/xqt/XQTFeaturedTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/xqt/XQTFeaturedTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/xqt/XQTFeaturedTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/AllListPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/AllListPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/AllListPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/AllListPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/AntennasListPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/AntennasListPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/AntennasListPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/AntennasListPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/AntennasTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/AntennasTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/AntennasTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/AntennasTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ChannelTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ChannelTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ChannelTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ChannelTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/CreateListPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/CreateListPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/CreateListPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/CreateListPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/DeleteListPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/DeleteListPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/DeleteListPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/DeleteListPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/EditAccountListPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/EditAccountListPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/EditAccountListPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/EditAccountListPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/EditListMemberPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/EditListMemberPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/EditListMemberPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/EditListMemberPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ListEditPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ListEditPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ListEditPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ListEditPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ListInfoPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ListInfoPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ListInfoPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ListInfoPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ListMembersPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ListMembersPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ListMembersPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ListMembersPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ListTimelinePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ListTimelinePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ListTimelinePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/ListTimelinePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/PinnableTimelineTabPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/PinnableTimelineTabPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/PinnableTimelineTabPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/list/PinnableTimelineTabPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/BlueskyLoginPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/BlueskyLoginPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/BlueskyLoginPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/BlueskyLoginPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/BlueskyOAuthLoginPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/BlueskyOAuthLoginPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/BlueskyOAuthLoginPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/BlueskyOAuthLoginPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/InstanceMetadataPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/InstanceMetadataPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/InstanceMetadataPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/InstanceMetadataPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/MastodonCallbackPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/MastodonCallbackPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/MastodonCallbackPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/MastodonCallbackPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/MisskeyCallbackPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/MisskeyCallbackPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/MisskeyCallbackPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/MisskeyCallbackPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/NodeInfoPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/NodeInfoPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/NodeInfoPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/NodeInfoPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/NostrLoginPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/NostrLoginPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/NostrLoginPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/NostrLoginPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/ServiceSelectPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/ServiceSelectPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/ServiceSelectPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/ServiceSelectPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/VVOLoginPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/VVOLoginPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/VVOLoginPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/VVOLoginPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/XQTLoginPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/XQTLoginPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/XQTLoginPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/XQTLoginPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/podcast/PodcastListPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/podcast/PodcastListPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/podcast/PodcastListPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/podcast/PodcastListPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/podcast/PodcastPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/podcast/PodcastPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/podcast/PodcastPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/podcast/PodcastPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/BlockUserPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/BlockUserPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/BlockUserPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/BlockUserPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/FollowingPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/FollowingPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/FollowingPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/FollowingPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/MuteUserPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/MuteUserPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/MuteUserPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/MuteUserPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/ProfileMediaPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/ProfileMediaPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/ProfileMediaPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/ProfileMediaPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/ProfilePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/ProfilePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/ProfilePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/ProfilePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/UnblockUserPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/UnblockUserPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/UnblockUserPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/UnblockUserPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/UnmuteUserPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/UnmuteUserPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/UnmuteUserPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/profile/UnmuteUserPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/server/AiTLDRPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/server/AiTLDRPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/server/AiTLDRPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/server/AiTLDRPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/AccountsPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/AccountsPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/AccountsPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/AccountsPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/AiConfigPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/AiConfigPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/AiConfigPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/AiConfigPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/AiTranslationTestPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/AiTranslationTestPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/AiTranslationTestPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/AiTranslationTestPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/AppearancePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/AppearancePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/AppearancePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/AppearancePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/DevModePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/DevModePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/DevModePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/DevModePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/ExportAppDatabasePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/ExportAppDatabasePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/ExportAppDatabasePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/ExportAppDatabasePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/ImportAppDatabasePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/ImportAppDatabasePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/ImportAppDatabasePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/ImportAppDatabasePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/LocalCacheSearchPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/LocalCacheSearchPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/LocalCacheSearchPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/LocalCacheSearchPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/LocalFilterPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/LocalFilterPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/LocalFilterPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/LocalFilterPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/NostrRelaysPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/NostrRelaysPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/NostrRelaysPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/NostrRelaysPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/OpenAIModelsPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/OpenAIModelsPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/OpenAIModelsPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/OpenAIModelsPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/StoragePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/StoragePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/StoragePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/settings/StoragePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/splash/SplashPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/splash/SplashPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/splash/SplashPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/splash/SplashPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/DownloadPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/DownloadPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/DownloadPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/DownloadPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/LogStatusHistoryPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/LogStatusHistoryPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/LogStatusHistoryPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/LogStatusHistoryPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/LogUserHistoryPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/LogUserHistoryPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/LogUserHistoryPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/LogUserHistoryPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/StatusContextPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/StatusContextPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/StatusContextPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/StatusContextPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/StatusPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/StatusPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/StatusPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/StatusPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/TranslatePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/TranslatePresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/TranslatePresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/TranslatePresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/VVOCommentPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/VVOCommentPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/VVOCommentPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/VVOCommentPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/VVOStatusDetailPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/VVOStatusDetailPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/VVOStatusDetailPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/VVOStatusDetailPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/AddReactionPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/AddReactionPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/AddReactionPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/AddReactionPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/BlueskyReportStatusPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/BlueskyReportStatusPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/BlueskyReportStatusPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/BlueskyReportStatusPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/DeleteStatusPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/DeleteStatusPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/DeleteStatusPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/DeleteStatusPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/MastodonReportPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/MastodonReportPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/MastodonReportPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/MastodonReportPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/MisskeyReportPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/MisskeyReportPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/MisskeyReportPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/MisskeyReportPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/render/HtmlRenderRunMapper.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/HtmlRenderRunMapper.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/render/HtmlRenderRunMapper.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/HtmlRenderRunMapper.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/render/HtmlToUiRichText.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/HtmlToUiRichText.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/render/HtmlToUiRichText.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/HtmlToUiRichText.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/render/TranslationJson.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/TranslationJson.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/render/TranslationJson.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/TranslationJson.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiRichText.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiRichText.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiRichText.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiRichText.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/route/DeeplinkRoute.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/route/DeeplinkRoute.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/route/DeeplinkRoute.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/route/DeeplinkRoute.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/screen/bluesky/BlueskyFeedsWithTabsPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/screen/bluesky/BlueskyFeedsWithTabsPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/screen/bluesky/BlueskyFeedsWithTabsPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/screen/bluesky/BlueskyFeedsWithTabsPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/screen/list/AllListWithTabsPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/screen/list/AllListWithTabsPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/screen/list/AllListWithTabsPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/screen/list/AllListWithTabsPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/screen/misskey/MisskeyAntennasListWithTabsPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/screen/misskey/MisskeyAntennasListWithTabsPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/screen/misskey/MisskeyAntennasListWithTabsPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/screen/misskey/MisskeyAntennasListWithTabsPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/screen/rss/RssListWithTabsPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/screen/rss/RssListWithTabsPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/screen/rss/RssListWithTabsPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/screen/rss/RssListWithTabsPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/screen/settings/AccountManagementPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/screen/settings/AccountManagementPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/screen/settings/AccountManagementPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/screen/settings/AccountManagementPresenter.kt diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/screen/settings/AllTabsPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/screen/settings/AllTabsPresenter.kt similarity index 100% rename from shared/src/commonMain/kotlin/dev/dimension/flare/ui/screen/settings/AllTabsPresenter.kt rename to presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/screen/settings/AllTabsPresenter.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/DatabaseHelper.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/DatabaseHelper.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/DatabaseHelper.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/DatabaseHelper.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/TestFileHelper.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/TestFileHelper.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/TestFileHelper.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/TestFileHelper.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/common/PagingStateTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/common/PagingStateTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/common/PagingStateTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/common/PagingStateTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/common/TestFormatter.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/common/TestFormatter.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/common/TestFormatter.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/common/TestFormatter.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMappingTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMappingTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMappingTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMappingTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMatcherTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMatcherTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMatcherTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMatcherTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkPatternTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkPatternTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkPatternTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkPatternTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/KeyDecoderTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/KeyDecoderTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/KeyDecoderTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/KeyDecoderTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/database/cache/dao/MessageDaoTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/database/cache/dao/MessageDaoTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/database/cache/dao/MessageDaoTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/database/cache/dao/MessageDaoTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/database/cache/dao/TranslationDaoTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/database/cache/dao/TranslationDaoTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/database/cache/dao/TranslationDaoTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/database/cache/dao/TranslationDaoTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/database/cache/mapper/MicroblogTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/database/cache/mapper/MicroblogTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/database/cache/mapper/MicroblogTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/database/cache/mapper/MicroblogTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/MixedRemoteMediatorTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/MixedRemoteMediatorTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/MixedRemoteMediatorTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/MixedRemoteMediatorTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/PostEventHandlerTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/PostEventHandlerTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/PostEventHandlerTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/PostEventHandlerTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/EmojiHandlerTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/EmojiHandlerTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/EmojiHandlerTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/EmojiHandlerTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/ListHandlerTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/ListHandlerTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/ListHandlerTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/ListHandlerTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/ListMemberHandlerTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/ListMemberHandlerTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/ListMemberHandlerTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/ListMemberHandlerTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/NotificationHandlerTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/NotificationHandlerTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/NotificationHandlerTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/NotificationHandlerTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/PostHandlerTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/PostHandlerTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/PostHandlerTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/PostHandlerTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/RelationHandlerTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/RelationHandlerTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/RelationHandlerTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/RelationHandlerTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/UserHandlerTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/UserHandlerTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/UserHandlerTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/handler/UserHandlerTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyTimelinePrependTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyTimelinePrependTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyTimelinePrependTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyTimelinePrependTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/datasource/rss/RssTimelineRemoteMediatorTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/rss/RssTimelineRemoteMediatorTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/datasource/rss/RssTimelineRemoteMediatorTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/rss/RssTimelineRemoteMediatorTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/datastore/model/TranslateConfigSerializationTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datastore/model/TranslateConfigSerializationTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/datastore/model/TranslateConfigSerializationTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datastore/model/TranslateConfigSerializationTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/model/appearance/AppearanceMigrationTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/model/appearance/AppearanceMigrationTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/model/appearance/AppearanceMigrationTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/model/appearance/AppearanceMigrationTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/model/appearance/AppearancePatchTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/model/appearance/AppearancePatchTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/model/appearance/AppearancePatchTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/model/appearance/AppearancePatchTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/model/tab/TabSettingsMigrationTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/model/tab/TabSettingsMigrationTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/model/tab/TabSettingsMigrationTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/model/tab/TabSettingsMigrationTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/model/tab/TimelineFilterConfigSerializationTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/model/tab/TimelineFilterConfigSerializationTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/model/tab/TimelineFilterConfigSerializationTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/model/tab/TimelineFilterConfigSerializationTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/network/ai/OpenAIServiceTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/network/ai/OpenAIServiceTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/network/ai/OpenAIServiceTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/network/ai/OpenAIServiceTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/network/bluesky/BlueskyAuthPluginTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/network/bluesky/BlueskyAuthPluginTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/network/bluesky/BlueskyAuthPluginTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/network/bluesky/BlueskyAuthPluginTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/network/mastodon/MastodonExceptionTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/network/mastodon/MastodonExceptionTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/network/mastodon/MastodonExceptionTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/network/mastodon/MastodonExceptionTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonPagingConverterFactoryTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonPagingConverterFactoryTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonPagingConverterFactoryTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/network/mastodon/api/model/MastodonPagingConverterFactoryTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/network/misskey/api/model/MisskeyNotificationTypeTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/network/misskey/api/model/MisskeyNotificationTypeTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/network/misskey/api/model/MisskeyNotificationTypeTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/network/misskey/api/model/MisskeyNotificationTypeTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserLiteTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserLiteTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserLiteTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/network/misskey/api/model/UserLiteTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/network/nodeinfo/NodeInfoServiceTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/network/nodeinfo/NodeInfoServiceTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/network/nodeinfo/NodeInfoServiceTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/network/nodeinfo/NodeInfoServiceTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/network/nostr/NostrRichTextParserTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/network/nostr/NostrRichTextParserTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/network/nostr/NostrRichTextParserTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/network/nostr/NostrRichTextParserTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/network/nostr/NostrServiceTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/network/nostr/NostrServiceTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/network/nostr/NostrServiceTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/network/nostr/NostrServiceTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/network/rss/model/FeedTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/network/rss/model/FeedTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/network/rss/model/FeedTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/network/rss/model/FeedTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/network/rss/model/OpmlTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/network/rss/model/OpmlTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/network/rss/model/OpmlTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/network/rss/model/OpmlTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/repository/AccountTabSyncCoordinatorSanitizerTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/repository/AccountTabSyncCoordinatorSanitizerTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/repository/AccountTabSyncCoordinatorSanitizerTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/repository/AccountTabSyncCoordinatorSanitizerTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/repository/DraftMediaStoreTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/repository/DraftMediaStoreTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/repository/DraftMediaStoreTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/repository/DraftMediaStoreTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/repository/DraftRepositoryTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/repository/DraftRepositoryTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/repository/DraftRepositoryTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/repository/DraftRepositoryTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/translation/AiPlaceholderTranslationSupportTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/translation/AiPlaceholderTranslationSupportTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/translation/AiPlaceholderTranslationSupportTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/translation/AiPlaceholderTranslationSupportTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/translation/DeepLTargetLanguageTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/translation/DeepLTargetLanguageTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/translation/DeepLTargetLanguageTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/translation/DeepLTargetLanguageTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/translation/GoogleWebTranslationDocumentSupportTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/translation/GoogleWebTranslationDocumentSupportTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/translation/GoogleWebTranslationDocumentSupportTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/translation/GoogleWebTranslationDocumentSupportTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/translation/GoogleWebTranslationWhitespaceSupportTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/translation/GoogleWebTranslationWhitespaceSupportTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/translation/GoogleWebTranslationWhitespaceSupportTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/translation/GoogleWebTranslationWhitespaceSupportTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/translation/PreTranslationContentRulesTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/translation/PreTranslationContentRulesTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/translation/PreTranslationContentRulesTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/translation/PreTranslationContentRulesTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/translation/TranslationPromptFormatterTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/translation/TranslationPromptFormatterTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/translation/TranslationPromptFormatterTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/translation/TranslationPromptFormatterTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/translation/TranslationProviderAiPlaceholderTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/translation/TranslationProviderAiPlaceholderTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/translation/TranslationProviderAiPlaceholderTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/translation/TranslationProviderAiPlaceholderTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/translation/TranslationProviderCacheKeyTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/translation/TranslationProviderCacheKeyTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/translation/TranslationProviderCacheKeyTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/translation/TranslationProviderCacheKeyTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/translation/TranslationTestConfig.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/translation/TranslationTestConfig.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/data/translation/TranslationTestConfig.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/translation/TranslationTestConfig.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/CacheDataToUiTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/CacheDataToUiTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/CacheDataToUiTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/CacheDataToUiTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/UiMediaFileNameTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/UiMediaFileNameTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/UiMediaFileNameTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/UiMediaFileNameTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/UiProfileMergeTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/UiProfileMergeTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/UiProfileMergeTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/UiProfileMergeTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/BlueskyFacetsTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/BlueskyFacetsTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/BlueskyFacetsTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/BlueskyFacetsTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/BlueskyNotificationRenderTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/BlueskyNotificationRenderTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/BlueskyNotificationRenderTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/BlueskyNotificationRenderTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/BlueskyRenderTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/BlueskyRenderTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/BlueskyRenderTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/BlueskyRenderTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/BlueskyUiMappingTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/BlueskyUiMappingTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/BlueskyUiMappingTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/BlueskyUiMappingTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/MastodonRenderTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/MastodonRenderTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/MastodonRenderTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/MastodonRenderTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/MisskeyRenderTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/MisskeyRenderTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/MisskeyRenderTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/MisskeyRenderTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/RssDateParserTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/RssDateParserTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/RssDateParserTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/RssDateParserTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/VVORenderTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/VVORenderTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/VVORenderTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/VVORenderTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/XQTRenderTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/XQTRenderTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/XQTRenderTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/XQTRenderTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/XQTTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/XQTTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/XQTTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/mapper/XQTTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/SettingsImportExportPresenterTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/SettingsImportExportPresenterTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/SettingsImportExportPresenterTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/SettingsImportExportPresenterTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/compose/InitialTextResolverTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/compose/InitialTextResolverTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/compose/InitialTextResolverTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/compose/InitialTextResolverTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/compose/SaveDraftUseCaseTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/compose/SaveDraftUseCaseTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/compose/SaveDraftUseCaseTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/compose/SaveDraftUseCaseTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/compose/SendDraftUseCaseTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/compose/SendDraftUseCaseTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/compose/SendDraftUseCaseTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/compose/SendDraftUseCaseTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/GroupConfigPresenterTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/GroupConfigPresenterTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/GroupConfigPresenterTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/GroupConfigPresenterTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/TimelinePresenterBindingTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/TimelinePresenterBindingTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/TimelinePresenterBindingTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/TimelinePresenterBindingTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/TimelinePresenterFilterTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/TimelinePresenterFilterTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/TimelinePresenterFilterTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/TimelinePresenterFilterTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/rss/ExportOPMLPresenterTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/rss/ExportOPMLPresenterTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/rss/ExportOPMLPresenterTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/rss/ExportOPMLPresenterTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/rss/ImportOPMLPresenterTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/rss/ImportOPMLPresenterTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/rss/ImportOPMLPresenterTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/rss/ImportOPMLPresenterTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/settings/AiConfigPresenterTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/settings/AiConfigPresenterTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/settings/AiConfigPresenterTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/settings/AiConfigPresenterTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/settings/ExportAppDatabasePresenterTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/settings/ExportAppDatabasePresenterTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/settings/ExportAppDatabasePresenterTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/settings/ExportAppDatabasePresenterTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/render/HtmlRenderRunMapperTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/render/HtmlRenderRunMapperTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/render/HtmlRenderRunMapperTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/render/HtmlRenderRunMapperTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/render/TranslationJsonUiRichTextTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/render/TranslationJsonUiRichTextTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/render/TranslationJsonUiRichTextTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/render/TranslationJsonUiRichTextTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/render/UiRichTextTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/render/UiRichTextTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/render/UiRichTextTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/render/UiRichTextTest.kt diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/route/DeeplinkRouteTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/route/DeeplinkRouteTest.kt similarity index 100% rename from shared/src/commonTest/kotlin/dev/dimension/flare/ui/route/DeeplinkRouteTest.kt rename to presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/route/DeeplinkRouteTest.kt diff --git a/shared/src/jvmMain/kotlin/dev/dimension/flare/common/BuildConfig.jvm.kt b/presenter/features/src/jvmMain/kotlin/dev/dimension/flare/common/BuildConfig.jvm.kt similarity index 100% rename from shared/src/jvmMain/kotlin/dev/dimension/flare/common/BuildConfig.jvm.kt rename to presenter/features/src/jvmMain/kotlin/dev/dimension/flare/common/BuildConfig.jvm.kt diff --git a/shared/src/jvmMain/kotlin/dev/dimension/flare/common/FileItem.jvm.kt b/presenter/features/src/jvmMain/kotlin/dev/dimension/flare/common/FileItem.jvm.kt similarity index 100% rename from shared/src/jvmMain/kotlin/dev/dimension/flare/common/FileItem.jvm.kt rename to presenter/features/src/jvmMain/kotlin/dev/dimension/flare/common/FileItem.jvm.kt diff --git a/shared/src/jvmMain/kotlin/dev/dimension/flare/common/FileSystemUtilsExt.kt b/presenter/features/src/jvmMain/kotlin/dev/dimension/flare/common/FileSystemUtilsExt.kt similarity index 100% rename from shared/src/jvmMain/kotlin/dev/dimension/flare/common/FileSystemUtilsExt.kt rename to presenter/features/src/jvmMain/kotlin/dev/dimension/flare/common/FileSystemUtilsExt.kt diff --git a/shared/src/jvmMain/kotlin/dev/dimension/flare/common/JvmOnDeviceAI.kt b/presenter/features/src/jvmMain/kotlin/dev/dimension/flare/common/JvmOnDeviceAI.kt similarity index 100% rename from shared/src/jvmMain/kotlin/dev/dimension/flare/common/JvmOnDeviceAI.kt rename to presenter/features/src/jvmMain/kotlin/dev/dimension/flare/common/JvmOnDeviceAI.kt diff --git a/shared/src/jvmMain/kotlin/dev/dimension/flare/common/Locale.jvm.kt b/presenter/features/src/jvmMain/kotlin/dev/dimension/flare/common/Locale.jvm.kt similarity index 100% rename from shared/src/jvmMain/kotlin/dev/dimension/flare/common/Locale.jvm.kt rename to presenter/features/src/jvmMain/kotlin/dev/dimension/flare/common/Locale.jvm.kt diff --git a/shared/src/jvmMain/kotlin/dev/dimension/flare/data/database/DriverFactory.jvm.kt b/presenter/features/src/jvmMain/kotlin/dev/dimension/flare/data/database/DriverFactory.jvm.kt similarity index 100% rename from shared/src/jvmMain/kotlin/dev/dimension/flare/data/database/DriverFactory.jvm.kt rename to presenter/features/src/jvmMain/kotlin/dev/dimension/flare/data/database/DriverFactory.jvm.kt diff --git a/shared/src/jvmMain/kotlin/dev/dimension/flare/data/io/JvmPlatformPathProducer.kt b/presenter/features/src/jvmMain/kotlin/dev/dimension/flare/data/io/JvmPlatformPathProducer.kt similarity index 100% rename from shared/src/jvmMain/kotlin/dev/dimension/flare/data/io/JvmPlatformPathProducer.kt rename to presenter/features/src/jvmMain/kotlin/dev/dimension/flare/data/io/JvmPlatformPathProducer.kt diff --git a/shared/src/jvmMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.jvm.kt b/presenter/features/src/jvmMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.jvm.kt similarity index 100% rename from shared/src/jvmMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.jvm.kt rename to presenter/features/src/jvmMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.jvm.kt diff --git a/shared/src/jvmMain/kotlin/dev/dimension/flare/data/network/nostr/AmberSignerBridge.jvm.kt b/presenter/features/src/jvmMain/kotlin/dev/dimension/flare/data/network/nostr/AmberSignerBridge.jvm.kt similarity index 100% rename from shared/src/jvmMain/kotlin/dev/dimension/flare/data/network/nostr/AmberSignerBridge.jvm.kt rename to presenter/features/src/jvmMain/kotlin/dev/dimension/flare/data/network/nostr/AmberSignerBridge.jvm.kt diff --git a/shared/src/jvmMain/kotlin/dev/dimension/flare/data/repository/DraftMediaStore.jvm.kt b/presenter/features/src/jvmMain/kotlin/dev/dimension/flare/data/repository/DraftMediaStore.jvm.kt similarity index 100% rename from shared/src/jvmMain/kotlin/dev/dimension/flare/data/repository/DraftMediaStore.jvm.kt rename to presenter/features/src/jvmMain/kotlin/dev/dimension/flare/data/repository/DraftMediaStore.jvm.kt diff --git a/shared/src/jvmMain/kotlin/dev/dimension/flare/di/PlatformModule.jvm.kt b/presenter/features/src/jvmMain/kotlin/dev/dimension/flare/di/PlatformModule.jvm.kt similarity index 100% rename from shared/src/jvmMain/kotlin/dev/dimension/flare/di/PlatformModule.jvm.kt rename to presenter/features/src/jvmMain/kotlin/dev/dimension/flare/di/PlatformModule.jvm.kt diff --git a/shared/src/jvmMain/kotlin/dev/dimension/flare/shared/image/JvmImageCompressor.kt b/presenter/features/src/jvmMain/kotlin/dev/dimension/flare/shared/image/JvmImageCompressor.kt similarity index 100% rename from shared/src/jvmMain/kotlin/dev/dimension/flare/shared/image/JvmImageCompressor.kt rename to presenter/features/src/jvmMain/kotlin/dev/dimension/flare/shared/image/JvmImageCompressor.kt diff --git a/shared/src/jvmMain/kotlin/dev/dimension/flare/ui/humanizer/JVMFormatter.kt b/presenter/features/src/jvmMain/kotlin/dev/dimension/flare/ui/humanizer/JVMFormatter.kt similarity index 100% rename from shared/src/jvmMain/kotlin/dev/dimension/flare/ui/humanizer/JVMFormatter.kt rename to presenter/features/src/jvmMain/kotlin/dev/dimension/flare/ui/humanizer/JVMFormatter.kt diff --git a/shared/src/jvmTest/kotlin/dev/dimension/flare/DatabaseHelper.jvm.kt b/presenter/features/src/jvmTest/kotlin/dev/dimension/flare/DatabaseHelper.jvm.kt similarity index 100% rename from shared/src/jvmTest/kotlin/dev/dimension/flare/DatabaseHelper.jvm.kt rename to presenter/features/src/jvmTest/kotlin/dev/dimension/flare/DatabaseHelper.jvm.kt diff --git a/shared/src/jvmTest/kotlin/dev/dimension/flare/TestFileHelper.jvm.kt b/presenter/features/src/jvmTest/kotlin/dev/dimension/flare/TestFileHelper.jvm.kt similarity index 100% rename from shared/src/jvmTest/kotlin/dev/dimension/flare/TestFileHelper.jvm.kt rename to presenter/features/src/jvmTest/kotlin/dev/dimension/flare/TestFileHelper.jvm.kt diff --git a/shared/src/jvmTest/kotlin/dev/dimension/flare/common/SerializationFormatBenchmarkTest.kt b/presenter/features/src/jvmTest/kotlin/dev/dimension/flare/common/SerializationFormatBenchmarkTest.kt similarity index 100% rename from shared/src/jvmTest/kotlin/dev/dimension/flare/common/SerializationFormatBenchmarkTest.kt rename to presenter/features/src/jvmTest/kotlin/dev/dimension/flare/common/SerializationFormatBenchmarkTest.kt diff --git a/shared/src/jvmTest/kotlin/dev/dimension/flare/data/network/rss/RssServiceRegressionTest.kt b/presenter/features/src/jvmTest/kotlin/dev/dimension/flare/data/network/rss/RssServiceRegressionTest.kt similarity index 100% rename from shared/src/jvmTest/kotlin/dev/dimension/flare/data/network/rss/RssServiceRegressionTest.kt rename to presenter/features/src/jvmTest/kotlin/dev/dimension/flare/data/network/rss/RssServiceRegressionTest.kt diff --git a/shared/src/jvmTest/kotlin/dev/dimension/flare/shared/image/JvmImageCompressorTest.kt b/presenter/features/src/jvmTest/kotlin/dev/dimension/flare/shared/image/JvmImageCompressorTest.kt similarity index 100% rename from shared/src/jvmTest/kotlin/dev/dimension/flare/shared/image/JvmImageCompressorTest.kt rename to presenter/features/src/jvmTest/kotlin/dev/dimension/flare/shared/image/JvmImageCompressorTest.kt diff --git a/shared/src/jvmTest/kotlin/dev/dimension/flare/ui/model/DeeplinkEventTest.kt b/presenter/features/src/jvmTest/kotlin/dev/dimension/flare/ui/model/DeeplinkEventTest.kt similarity index 100% rename from shared/src/jvmTest/kotlin/dev/dimension/flare/ui/model/DeeplinkEventTest.kt rename to presenter/features/src/jvmTest/kotlin/dev/dimension/flare/ui/model/DeeplinkEventTest.kt diff --git a/shared/src/jvmTest/kotlin/dev/dimension/flare/ui/model/UiPollTest.kt b/presenter/features/src/jvmTest/kotlin/dev/dimension/flare/ui/model/UiPollTest.kt similarity index 100% rename from shared/src/jvmTest/kotlin/dev/dimension/flare/ui/model/UiPollTest.kt rename to presenter/features/src/jvmTest/kotlin/dev/dimension/flare/ui/model/UiPollTest.kt diff --git a/settings.gradle.kts b/settings.gradle.kts index e3ccd93f68..5765a9fd7e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -23,7 +23,6 @@ dependencyResolutionManagement { rootProject.name = "Flare" include(":app") -include(":shared") include(":compose-ui") include(":desktopApp") include(":core:common") diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts deleted file mode 100644 index 34c47497ff..0000000000 --- a/shared/build.gradle.kts +++ /dev/null @@ -1,137 +0,0 @@ -import dev.dimension.flare.buildlogic.FlarePlatform -import dev.dimension.flare.buildlogic.flare - -plugins { - id("dev.dimension.flare.multiplatform-library") - alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.multiplatform) - alias(libs.plugins.kotlin.serialization) - alias(libs.plugins.ksp) - alias(libs.plugins.ktorfit) - alias(libs.plugins.compose.compiler) - alias(libs.plugins.room) -} - -kotlin { - flare { - namespace = "dev.dimension.flare.shared" - platforms( - FlarePlatform.ANDROID, - FlarePlatform.JVM, - FlarePlatform.IOS, - ) - ksp( - libs.ktorfit.ksp, - libs.room.compiler, - ) - } - android { - withDeviceTest { - instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - execution = "HOST" - } - } - - sourceSets { - all { - languageSettings { - optIn("kotlin.uuid.ExperimentalUuidApi") - } - } - val commonMain by getting { - dependencies { - implementation(dependencies.platform(libs.compose.bom)) - implementation(libs.compose.runtime) - implementation(libs.bundles.kotlinx) - implementation(dependencies.platform(libs.koin.bom)) - implementation(libs.koin.core) - api(libs.paging.common) - api(libs.paging.compose) - implementation(libs.bundles.ktorfit) - implementation(libs.bundles.ktor) - implementation(libs.okio) - implementation(libs.kotlin.codepoints.deluxe) - implementation(libs.ksoup) - implementation(libs.mfm.multiplatform) - implementation(libs.twitter.parser) - implementation(libs.molecule.runtime) - api(libs.bluesky) - api(libs.bluesky.oauth) - implementation(libs.room.runtime) - implementation(libs.room.paging) - implementation(libs.sqlite.bundled) - implementation(libs.datastore) - implementation(libs.kotlinx.serialization.protobuf) - implementation(libs.xmlUtil) - implementation(libs.ktor.client.resources) - implementation(libs.cryptography.provider.optimal) - implementation(libs.openai.client) - implementation(libs.nostr.sdk.kmp) - implementation(libs.readability) - } - } - val commonTest by getting { - dependencies { - implementation(kotlin("test")) - implementation(libs.kotlinx.coroutines.test) - implementation(libs.paging.testing) - implementation(libs.ktor.client.mock) - } - } - val androidJvmMain by getting { - dependencies { - implementation(libs.ktor.client.okhttp) - } - } - val androidMain by getting { - dependencies { - implementation(libs.core.ktx) - implementation(libs.koin.android) - implementation(libs.koin.compose) - implementation(libs.activity.compose) - } - } - val androidDeviceTest by getting { - dependencies { - implementation(libs.junit) - implementation(libs.robolectric) - implementation(libs.kotlinx.coroutines.test) - } - } - val jvmMain by getting { - dependencies { - implementation(libs.commons.lang3) - implementation(libs.prettytime) - implementation(libs.jna) - } - } - val appleMain by getting { - dependencies { - implementation(libs.ktor.client.darwin) - } - } - } -} - -room3 { - schemaDirectory("$projectDir/schemas") -} - -ktorfit { - compilerPluginVersion.set("2.3.3") -} - -afterEvaluate { -// val kspCommonMainKotlinMetadata by tasks - val runKtlintFormatOverCommonMainSourceSet by tasks - val runKtlintCheckOverCommonMainSourceSet by tasks - runKtlintFormatOverCommonMainSourceSet.dependsOn("kspCommonMainKotlinMetadata") - runKtlintCheckOverCommonMainSourceSet.dependsOn("kspCommonMainKotlinMetadata") - tasks { - configureEach { - if (this.name != "kspCommonMainKotlinMetadata" && this.name.startsWith("ksp")) { - this.dependsOn("kspCommonMainKotlinMetadata") - } - } - } -} From 9defbdc3d86cb676e8a07aca0d9b4b466b20f9da Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 18:03:33 +0900 Subject: [PATCH 003/261] Route platform lookup through social registry --- .../flare/data/model/tab/Timeline.kt | 7 +- .../data/network/nodeinfo/NodeInfoService.kt | 6 +- .../data/repository/AccountRepository.kt | 8 +- .../dev/dimension/flare/model/PlatformSpec.kt | 149 ++++++++++++++++-- .../dev/dimension/flare/ui/model/UiAccount.kt | 59 +------ .../ui/presenter/home/DeepLinkPresenter.kt | 6 +- .../login/InstanceMetadataPresenter.kt | 4 +- 7 files changed, 159 insertions(+), 80 deletions(-) diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/tab/Timeline.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/tab/Timeline.kt index 4137a4e896..5354bac0de 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/tab/Timeline.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/tab/Timeline.kt @@ -10,8 +10,7 @@ import dev.dimension.flare.data.model.appearance.toPatch import dev.dimension.flare.data.model.appearance.withPatch import dev.dimension.flare.data.platform.RssTimelineSpecs import dev.dimension.flare.model.MicroBlogKey -import dev.dimension.flare.model.PlatformType -import dev.dimension.flare.model.spec +import dev.dimension.flare.model.SocialPlatformRegistry import dev.dimension.flare.ui.model.UiIcon import dev.dimension.flare.ui.model.UiStrings import dev.dimension.flare.ui.model.UiText @@ -494,8 +493,8 @@ public data class ShortcutSpec( public class TimelineResolver internal constructor() { private val specs: Map> by lazy { ( - PlatformType.entries - .flatMap { it.spec.timelineSpecs } + + SocialPlatformRegistry.default.specs + .flatMap { it.timelineSpecs } + RssTimelineSpecs.timelineSpecs ).distinctBy { it.id } .associateBy { it.id } diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/NodeInfoService.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/NodeInfoService.kt index 146b2378db..e1a47b1ea3 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/NodeInfoService.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nodeinfo/NodeInfoService.kt @@ -7,7 +7,7 @@ import dev.dimension.flare.data.network.nodeinfo.model.Schema11 import dev.dimension.flare.data.network.nodeinfo.model.Schema20 import dev.dimension.flare.data.network.nodeinfo.model.Schema21 import dev.dimension.flare.model.PlatformType -import dev.dimension.flare.model.spec +import dev.dimension.flare.model.SocialPlatformRegistry import io.ktor.client.call.body import io.ktor.client.request.get import io.ktor.http.URLBuilder @@ -102,8 +102,8 @@ internal data object NodeInfoService { suspend fun detectPlatformType(host: String): NodeData { val hostCleaned = normalizeHost(host) - return PlatformType.entries - .map { it.spec.detector } + return SocialPlatformRegistry.default.specs + .map { it.detector } .distinct() .sortedByDescending { it.priority } .firstNotNullOfOrNull { detector -> detector.detect(hostCleaned) } diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/AccountRepository.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/AccountRepository.kt index c1c1a27f05..9c8bdbacc2 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/AccountRepository.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/repository/AccountRepository.kt @@ -18,7 +18,7 @@ import dev.dimension.flare.data.datastore.AppDataStore import dev.dimension.flare.model.AccountType import dev.dimension.flare.model.MicroBlogKey import dev.dimension.flare.model.PlatformType -import dev.dimension.flare.model.spec +import dev.dimension.flare.model.SocialPlatformRegistry import dev.dimension.flare.ui.model.UiAccount import dev.dimension.flare.ui.model.UiAccount.Companion.createDataSource import dev.dimension.flare.ui.model.UiAccount.Companion.toUi @@ -270,7 +270,8 @@ internal fun accountServiceFlow( when (accountType) { AccountType.Guest -> { flowOf( - PlatformType.Mastodon.spec.guestDataSource( + SocialPlatformRegistry.default.guestDataSource( + type = PlatformType.Mastodon, host = "mastodon.social", locale = Locale.language, ), @@ -279,7 +280,8 @@ internal fun accountServiceFlow( is AccountType.GuestHost -> { flowOf( - PlatformType.Mastodon.spec.guestDataSource( + SocialPlatformRegistry.default.guestDataSource( + type = PlatformType.Mastodon, host = accountType.host, locale = Locale.language, ), diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/PlatformSpec.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/PlatformSpec.kt index 63c07e68cd..a617168630 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/PlatformSpec.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/PlatformSpec.kt @@ -2,7 +2,14 @@ package dev.dimension.flare.model import dev.dimension.flare.common.deeplink.DeepLinkMapping import dev.dimension.flare.common.deeplink.DeepLinkPattern +import dev.dimension.flare.data.datasource.bluesky.BlueskyDataSource +import dev.dimension.flare.data.datasource.mastodon.MastodonDataSource import dev.dimension.flare.data.datasource.microblog.MicroblogDataSource +import dev.dimension.flare.data.datasource.misskey.MisskeyDataSource +import dev.dimension.flare.data.datasource.nostr.NostrDataSource +import dev.dimension.flare.data.datasource.pleroma.PleromaDataSource +import dev.dimension.flare.data.datasource.vvo.VVODataSource +import dev.dimension.flare.data.datasource.xqt.XQTDataSource import dev.dimension.flare.data.model.tab.TimelineSpec import dev.dimension.flare.data.network.nodeinfo.PlatformDetector import dev.dimension.flare.data.platform.BlueskyPlatformSpec @@ -11,6 +18,7 @@ import dev.dimension.flare.data.platform.MisskeyPlatformSpec import dev.dimension.flare.data.platform.NostrPlatformSpec import dev.dimension.flare.data.platform.VvoPlatformSpec import dev.dimension.flare.data.platform.XqtPlatformSpec +import dev.dimension.flare.ui.model.UiAccount import dev.dimension.flare.ui.model.UiIcon import dev.dimension.flare.ui.model.UiInstanceMetadata import kotlinx.collections.immutable.ImmutableList @@ -33,18 +41,141 @@ internal interface PlatformSpec { ): MicroblogDataSource } +internal interface SocialPlatformPlugin { + val spec: PlatformSpec + + fun createDataSource(account: UiAccount): MicroblogDataSource? +} + +internal class SocialPlatformRegistry( + plugins: List, +) { + private val plugins = plugins.distinctBy { it.spec.type } + private val specsByType = this.plugins.associateBy { it.spec.type } + + val specs: List + get() = plugins.map { it.spec } + + val loginPlatformTypes: List + get() = specs.map { it.type } + + fun requireSpec(type: PlatformType): PlatformSpec = + requireNotNull(specsByType[type]?.spec) { + "No social platform registered for $type" + } + + fun createDataSource(account: UiAccount): MicroblogDataSource = + plugins.firstNotNullOfOrNull { it.createDataSource(account) } + ?: error("No social platform data source registered for ${account.platformType}") + + fun guestDataSource( + type: PlatformType, + host: String, + locale: String, + ): MicroblogDataSource = + requireSpec(type).guestDataSource( + host = host, + locale = locale, + ) + + companion object { + val default: SocialPlatformRegistry = + SocialPlatformRegistry( + listOf( + NostrSocialPlatformPlugin, + MastodonSocialPlatformPlugin, + MisskeySocialPlatformPlugin, + BlueskySocialPlatformPlugin, + XqtSocialPlatformPlugin, + VvoSocialPlatformPlugin, + ), + ) + } +} + +private data object NostrSocialPlatformPlugin : SocialPlatformPlugin { + override val spec: PlatformSpec = NostrPlatformSpec + + override fun createDataSource(account: UiAccount): MicroblogDataSource? = + (account as? UiAccount.Nostr)?.let { + NostrDataSource( + accountKey = it.accountKey, + ) + } +} + +private data object MastodonSocialPlatformPlugin : SocialPlatformPlugin { + override val spec: PlatformSpec = MastodonPlatformSpec + + override fun createDataSource(account: UiAccount): MicroblogDataSource? = + (account as? UiAccount.Mastodon)?.let { + when (it.forkType) { + UiAccount.Mastodon.Credential.ForkType.Mastodon -> { + MastodonDataSource( + accountKey = it.accountKey, + instance = it.instance, + ) + } + + UiAccount.Mastodon.Credential.ForkType.Pleroma -> { + PleromaDataSource( + accountKey = it.accountKey, + instance = it.instance, + ) + } + } + } +} + +private data object MisskeySocialPlatformPlugin : SocialPlatformPlugin { + override val spec: PlatformSpec = MisskeyPlatformSpec + + override fun createDataSource(account: UiAccount): MicroblogDataSource? = + (account as? UiAccount.Misskey)?.let { + MisskeyDataSource( + accountKey = it.accountKey, + host = it.host, + ) + } +} + +private data object BlueskySocialPlatformPlugin : SocialPlatformPlugin { + override val spec: PlatformSpec = BlueskyPlatformSpec + + override fun createDataSource(account: UiAccount): MicroblogDataSource? = + (account as? UiAccount.Bluesky)?.let { + BlueskyDataSource( + accountKey = it.accountKey, + ) + } +} + +private data object XqtSocialPlatformPlugin : SocialPlatformPlugin { + override val spec: PlatformSpec = XqtPlatformSpec + + override fun createDataSource(account: UiAccount): MicroblogDataSource? = + (account as? UiAccount.XQT)?.let { + XQTDataSource( + accountKey = it.accountKey, + ) + } +} + +private data object VvoSocialPlatformPlugin : SocialPlatformPlugin { + override val spec: PlatformSpec = VvoPlatformSpec + + override fun createDataSource(account: UiAccount): MicroblogDataSource? = + (account as? UiAccount.VVo)?.let { + VVODataSource( + accountKey = it.accountKey, + ) + } +} + public val PlatformType.icon: UiIcon get() = spec.metadata.icon public fun PlatformType.agreementUrl(host: String): String? = spec.agreementUrl(host) internal val PlatformType.spec: PlatformSpec - get() = - when (this) { - PlatformType.Nostr -> NostrPlatformSpec - PlatformType.Mastodon -> MastodonPlatformSpec - PlatformType.Misskey -> MisskeyPlatformSpec - PlatformType.Bluesky -> BlueskyPlatformSpec - PlatformType.xQt -> XqtPlatformSpec - PlatformType.VVo -> VvoPlatformSpec - } + get() = SocialPlatformRegistry.default.requireSpec(this) diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiAccount.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiAccount.kt index 72a4f09e06..f59be15e5a 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiAccount.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiAccount.kt @@ -3,16 +3,10 @@ package dev.dimension.flare.ui.model import androidx.compose.runtime.Immutable import dev.dimension.flare.common.decodeJson import dev.dimension.flare.data.database.app.model.DbAccount -import dev.dimension.flare.data.datasource.bluesky.BlueskyDataSource -import dev.dimension.flare.data.datasource.mastodon.MastodonDataSource import dev.dimension.flare.data.datasource.microblog.MicroblogDataSource -import dev.dimension.flare.data.datasource.misskey.MisskeyDataSource -import dev.dimension.flare.data.datasource.nostr.NostrDataSource -import dev.dimension.flare.data.datasource.pleroma.PleromaDataSource -import dev.dimension.flare.data.datasource.vvo.VVODataSource -import dev.dimension.flare.data.datasource.xqt.XQTDataSource import dev.dimension.flare.model.MicroBlogKey import dev.dimension.flare.model.PlatformType +import dev.dimension.flare.model.SocialPlatformRegistry import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import sh.christian.ozone.oauth.OAuthToken @@ -223,56 +217,7 @@ public sealed class UiAccount { internal companion object { fun UiAccount.createDataSource(): MicroblogDataSource = - when (this) { - is Nostr -> { - NostrDataSource( - accountKey = accountKey, - ) - } - - is Mastodon -> { - when (forkType) { - Mastodon.Credential.ForkType.Mastodon -> { - MastodonDataSource( - accountKey = accountKey, - instance = instance, - ) - } - - Mastodon.Credential.ForkType.Pleroma -> { - PleromaDataSource( - accountKey = accountKey, - instance = instance, - ) - } - } - } - - is Misskey -> { - MisskeyDataSource( - accountKey = accountKey, - host = host, - ) - } - - is Bluesky -> { - BlueskyDataSource( - accountKey = accountKey, - ) - } - - is XQT -> { - XQTDataSource( - accountKey = accountKey, - ) - } - - is VVo -> { - VVODataSource( - accountKey = accountKey, - ) - } - } + SocialPlatformRegistry.default.createDataSource(this) fun DbAccount.toUi(): UiAccount = when (platform_type) { diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DeepLinkPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DeepLinkPresenter.kt index 4d09c5ed3e..c3559cefba 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DeepLinkPresenter.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DeepLinkPresenter.kt @@ -13,7 +13,7 @@ import dev.dimension.flare.data.repository.AccountRepository import dev.dimension.flare.data.repository.accountServiceFlow import dev.dimension.flare.data.translation.PreTranslationService import dev.dimension.flare.model.AccountType -import dev.dimension.flare.model.spec +import dev.dimension.flare.model.SocialPlatformRegistry import dev.dimension.flare.ui.model.DeeplinkEvent import dev.dimension.flare.ui.presenter.PresenterBase import dev.dimension.flare.ui.route.DeeplinkRoute @@ -42,7 +42,9 @@ public class DeepLinkPresenter( accountRepository.allAccounts.map { it .associateWith { - it.platformType.spec.deepLinkPatterns(it.accountKey.host) + SocialPlatformRegistry.default + .requireSpec(it.platformType) + .deepLinkPatterns(it.accountKey.host) }.toImmutableMap() } } diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/InstanceMetadataPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/InstanceMetadataPresenter.kt index f02bd9dd87..df055190ec 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/InstanceMetadataPresenter.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/login/InstanceMetadataPresenter.kt @@ -7,7 +7,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import dev.dimension.flare.data.repository.tryRun import dev.dimension.flare.model.PlatformType -import dev.dimension.flare.model.spec +import dev.dimension.flare.model.SocialPlatformRegistry import dev.dimension.flare.ui.model.UiInstanceMetadata import dev.dimension.flare.ui.model.UiState import dev.dimension.flare.ui.presenter.PresenterBase @@ -28,7 +28,7 @@ public class InstanceMetadataPresenter( flow { tryRun { emit(UiState.Loading()) - platformType.spec.instanceMetadata(host) + SocialPlatformRegistry.default.requireSpec(platformType).instanceMetadata(host) }.fold( onSuccess = { emit(UiState.Success(it)) From 2c55bbf3cfc7e3106279868ffa5756abdc575111 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 18:05:12 +0900 Subject: [PATCH 004/261] Add web presenter export bridge --- web/presenter-export/build.gradle.kts | 8 ++ .../presenter/export/FlarePresenterExport.kt | 109 ++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 web/presenter-export/src/wasmJsMain/kotlin/dev/dimension/flare/web/presenter/export/FlarePresenterExport.kt diff --git a/web/presenter-export/build.gradle.kts b/web/presenter-export/build.gradle.kts index af05b4bd29..e219513650 100644 --- a/web/presenter-export/build.gradle.kts +++ b/web/presenter-export/build.gradle.kts @@ -12,4 +12,12 @@ kotlin { namespace = "dev.dimension.flare.web.presenter.export" platforms(FlarePlatform.WEB) } + + sourceSets { + val wasmJsMain by getting { + dependencies { + implementation(libs.kotlinx.serialization.json) + } + } + } } diff --git a/web/presenter-export/src/wasmJsMain/kotlin/dev/dimension/flare/web/presenter/export/FlarePresenterExport.kt b/web/presenter-export/src/wasmJsMain/kotlin/dev/dimension/flare/web/presenter/export/FlarePresenterExport.kt new file mode 100644 index 0000000000..671a113ebb --- /dev/null +++ b/web/presenter-export/src/wasmJsMain/kotlin/dev/dimension/flare/web/presenter/export/FlarePresenterExport.kt @@ -0,0 +1,109 @@ +@file:OptIn(ExperimentalJsExport::class, ExperimentalWasmJsInterop::class) + +package dev.dimension.flare.web.presenter.export + +import kotlin.js.ExperimentalJsExport +import kotlin.js.ExperimentalWasmJsInterop +import kotlin.js.JsAny +import kotlin.js.JsExport +import kotlin.js.JsName +import kotlin.js.JsString +import kotlin.js.Promise +import kotlin.js.toJsString +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.JsonPrimitive + +private var nextHandleId = 1 +private var nextSubscriptionId = 1 +private var initializedConfigJson: String = "{}" + +private val presenterHandles = mutableMapOf() + +private data class PresenterHandle( + val type: String, + val argsJson: String, + val subscribers: MutableMap Unit> = mutableMapOf(), +) + +@JsExport +@JsName("initFlare") +public fun initFlare(configJson: String): Promise { + initializedConfigJson = configJson + return Promise.resolve(null) +} + +@JsExport +@JsName("createPresenter") +public fun createPresenter( + type: String, + argsJson: String, +): String { + val handleId = "presenter-${nextHandleId++}" + presenterHandles[handleId] = + PresenterHandle( + type = type, + argsJson = argsJson, + ) + return handleId +} + +@JsExport +@JsName("subscribe") +public fun subscribe( + handleId: String, + callback: (String) -> Unit, +): String { + val handle = requireHandle(handleId) + val subscriptionId = "subscription-${nextSubscriptionId++}" + handle.subscribers[subscriptionId] = callback + callback(handle.stateJson()) + return subscriptionId +} + +@JsExport +@JsName("dispatch") +public fun dispatch( + handleId: String, + actionJson: String, +): Promise { + val handle = requireHandle(handleId) + val resultJson = + JsonObject( + mapOf( + "handleId" to JsonPrimitive(handleId), + "type" to JsonPrimitive(handle.type), + "actionJson" to JsonPrimitive(actionJson), + "accepted" to JsonPrimitive(true), + ), + ).toString() + handle.notifySubscribers() + return Promise.resolve(resultJson.toJsString()) +} + +@JsExport +@JsName("dispose") +public fun dispose(handleId: String) { + presenterHandles.remove(handleId)?.subscribers?.clear() +} + +private fun requireHandle(handleId: String): PresenterHandle = + requireNotNull(presenterHandles[handleId]) { + "Unknown presenter handle: $handleId" + } + +private fun PresenterHandle.notifySubscribers() { + val stateJson = stateJson() + subscribers.values.forEach { callback -> + callback(stateJson) + } +} + +private fun PresenterHandle.stateJson(): String = + JsonObject( + mapOf( + "type" to JsonPrimitive(type), + "argsJson" to JsonPrimitive(argsJson), + "initializedConfigJson" to JsonPrimitive(initializedConfigJson), + "ready" to JsonPrimitive(true), + ), + ).toString() From 0b35d395adc1daedbd68aeaf7bec3ce9c283dd15 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 18:50:51 +0900 Subject: [PATCH 005/261] Abstract database and datastore providers --- .../DatabaseDriverProvider.androidJvm.kt | 6 +++ .../DataStoreStorageProvider.androidJvm.kt | 42 +++++++++++++++++++ .../database/DatabaseDriverProvider.apple.kt | 6 +++ .../DataStoreStorageProvider.apple.kt | 42 +++++++++++++++++++ .../data/database/DatabaseDriverProvider.kt | 5 +++ .../flare/data/database/ProvideDatabase.kt | 5 +-- .../flare/data/datastore/AppDataStore.kt | 35 +++------------- .../datastore/DataStoreStorageProvider.kt | 17 ++++++++ 8 files changed, 126 insertions(+), 32 deletions(-) create mode 100644 presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.androidJvm.kt create mode 100644 presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/data/datastore/DataStoreStorageProvider.androidJvm.kt create mode 100644 presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.apple.kt create mode 100644 presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/datastore/DataStoreStorageProvider.apple.kt create mode 100644 presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.kt create mode 100644 presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/DataStoreStorageProvider.kt diff --git a/presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.androidJvm.kt b/presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.androidJvm.kt new file mode 100644 index 0000000000..401af34863 --- /dev/null +++ b/presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.androidJvm.kt @@ -0,0 +1,6 @@ +package dev.dimension.flare.data.database + +import androidx.sqlite.SQLiteDriver +import androidx.sqlite.driver.bundled.BundledSQLiteDriver + +internal actual fun createDatabaseDriver(): SQLiteDriver = BundledSQLiteDriver() diff --git a/presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/data/datastore/DataStoreStorageProvider.androidJvm.kt b/presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/data/datastore/DataStoreStorageProvider.androidJvm.kt new file mode 100644 index 0000000000..233c06ba18 --- /dev/null +++ b/presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/data/datastore/DataStoreStorageProvider.androidJvm.kt @@ -0,0 +1,42 @@ +package dev.dimension.flare.data.datastore + +import androidx.datastore.core.Storage +import androidx.datastore.core.okio.OkioStorage +import dev.dimension.flare.common.protobufSerializer +import dev.dimension.flare.data.datastore.model.AppSettings +import dev.dimension.flare.data.datastore.model.ComposeConfigData +import dev.dimension.flare.data.datastore.model.FlareConfig +import dev.dimension.flare.data.io.PlatformPathProducer +import okio.FileSystem +import okio.SYSTEM + +internal actual class DataStoreStorageProvider actual constructor( + private val platformPathProducer: PlatformPathProducer, +) { + actual fun flareConfigStorage(): Storage = + OkioStorage( + fileSystem = FileSystem.SYSTEM, + serializer = protobufSerializer(FlareConfig()), + producePath = { + platformPathProducer.dataStoreFile("flare_config.pb") + }, + ) + + actual fun composeConfigStorage(): Storage = + OkioStorage( + fileSystem = FileSystem.SYSTEM, + serializer = protobufSerializer(ComposeConfigData()), + producePath = { + platformPathProducer.dataStoreFile("compose_config.pb") + }, + ) + + actual fun appSettingsStorage(): Storage = + OkioStorage( + fileSystem = FileSystem.SYSTEM, + serializer = protobufSerializer(AppSettings(version = "")), + producePath = { + platformPathProducer.dataStoreFile("app_settings.pb") + }, + ) +} diff --git a/presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.apple.kt b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.apple.kt new file mode 100644 index 0000000000..401af34863 --- /dev/null +++ b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.apple.kt @@ -0,0 +1,6 @@ +package dev.dimension.flare.data.database + +import androidx.sqlite.SQLiteDriver +import androidx.sqlite.driver.bundled.BundledSQLiteDriver + +internal actual fun createDatabaseDriver(): SQLiteDriver = BundledSQLiteDriver() diff --git a/presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/datastore/DataStoreStorageProvider.apple.kt b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/datastore/DataStoreStorageProvider.apple.kt new file mode 100644 index 0000000000..233c06ba18 --- /dev/null +++ b/presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/datastore/DataStoreStorageProvider.apple.kt @@ -0,0 +1,42 @@ +package dev.dimension.flare.data.datastore + +import androidx.datastore.core.Storage +import androidx.datastore.core.okio.OkioStorage +import dev.dimension.flare.common.protobufSerializer +import dev.dimension.flare.data.datastore.model.AppSettings +import dev.dimension.flare.data.datastore.model.ComposeConfigData +import dev.dimension.flare.data.datastore.model.FlareConfig +import dev.dimension.flare.data.io.PlatformPathProducer +import okio.FileSystem +import okio.SYSTEM + +internal actual class DataStoreStorageProvider actual constructor( + private val platformPathProducer: PlatformPathProducer, +) { + actual fun flareConfigStorage(): Storage = + OkioStorage( + fileSystem = FileSystem.SYSTEM, + serializer = protobufSerializer(FlareConfig()), + producePath = { + platformPathProducer.dataStoreFile("flare_config.pb") + }, + ) + + actual fun composeConfigStorage(): Storage = + OkioStorage( + fileSystem = FileSystem.SYSTEM, + serializer = protobufSerializer(ComposeConfigData()), + producePath = { + platformPathProducer.dataStoreFile("compose_config.pb") + }, + ) + + actual fun appSettingsStorage(): Storage = + OkioStorage( + fileSystem = FileSystem.SYSTEM, + serializer = protobufSerializer(AppSettings(version = "")), + producePath = { + platformPathProducer.dataStoreFile("app_settings.pb") + }, + ) +} diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.kt new file mode 100644 index 0000000000..8019a8bb7f --- /dev/null +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.kt @@ -0,0 +1,5 @@ +package dev.dimension.flare.data.database + +import androidx.sqlite.SQLiteDriver + +internal expect fun createDatabaseDriver(): SQLiteDriver diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/ProvideDatabase.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/ProvideDatabase.kt index 3655c97a79..7780e163ab 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/ProvideDatabase.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/ProvideDatabase.kt @@ -1,6 +1,5 @@ package dev.dimension.flare.data.database -import androidx.sqlite.driver.bundled.BundledSQLiteDriver import dev.dimension.flare.data.database.app.AppDatabase import dev.dimension.flare.data.database.cache.CacheDatabase import kotlinx.coroutines.Dispatchers @@ -10,7 +9,7 @@ internal fun provideAppDatabase(driverFactory: DriverFactory): AppDatabase = driverFactory .createBuilder("app.db") .addMigrations(AppDatabase.MIGRATION_8_9, AppDatabase.MIGRATION_9_10) - .setDriver(BundledSQLiteDriver()) + .setDriver(createDatabaseDriver()) .setQueryCoroutineContext(Dispatchers.IO) .build() @@ -20,6 +19,6 @@ internal fun provideCacheDatabase(driverFactory: DriverFactory): CacheDatabase = driverFactory .createBuilder(CACHE_DATABASE_NAME, isCache = true) .fallbackToDestructiveMigration(dropAllTables = true) - .setDriver(BundledSQLiteDriver()) + .setDriver(createDatabaseDriver()) .setQueryCoroutineContext(Dispatchers.IO) .build() diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/AppDataStore.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/AppDataStore.kt index 0c8afbd39d..d9e060a0b5 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/AppDataStore.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/AppDataStore.kt @@ -2,54 +2,31 @@ package dev.dimension.flare.data.datastore import androidx.datastore.core.DataStore import androidx.datastore.core.DataStoreFactory -import androidx.datastore.core.okio.OkioStorage -import dev.dimension.flare.common.protobufSerializer import dev.dimension.flare.data.datastore.model.AppSettings import dev.dimension.flare.data.datastore.model.ComposeConfigData import dev.dimension.flare.data.datastore.model.FlareConfig import dev.dimension.flare.data.io.PlatformPathProducer -import okio.FileSystem -import okio.SYSTEM internal class AppDataStore( - private val platformPathProducer: PlatformPathProducer, + platformPathProducer: PlatformPathProducer, ) { + private val storageProvider = DataStoreStorageProvider(platformPathProducer) + val flareDataStore: DataStore by lazy { DataStoreFactory.create( - storage = - OkioStorage( - fileSystem = FileSystem.SYSTEM, - serializer = protobufSerializer(FlareConfig()), - producePath = { - platformPathProducer.dataStoreFile("flare_config.pb") - }, - ), + storage = storageProvider.flareConfigStorage(), ) } val composeConfigData: DataStore by lazy { DataStoreFactory.create( - storage = - OkioStorage( - fileSystem = FileSystem.SYSTEM, - serializer = protobufSerializer(ComposeConfigData()), - producePath = { - platformPathProducer.dataStoreFile("compose_config.pb") - }, - ), + storage = storageProvider.composeConfigStorage(), ) } val appSettingsStore: DataStore by lazy { DataStoreFactory.create( - storage = - OkioStorage( - fileSystem = FileSystem.SYSTEM, - serializer = protobufSerializer(AppSettings(version = "")), - producePath = { - platformPathProducer.dataStoreFile("app_settings.pb") - }, - ), + storage = storageProvider.appSettingsStorage(), ) } } diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/DataStoreStorageProvider.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/DataStoreStorageProvider.kt new file mode 100644 index 0000000000..efabf9d441 --- /dev/null +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/DataStoreStorageProvider.kt @@ -0,0 +1,17 @@ +package dev.dimension.flare.data.datastore + +import androidx.datastore.core.Storage +import dev.dimension.flare.data.datastore.model.AppSettings +import dev.dimension.flare.data.datastore.model.ComposeConfigData +import dev.dimension.flare.data.datastore.model.FlareConfig +import dev.dimension.flare.data.io.PlatformPathProducer + +internal expect class DataStoreStorageProvider( + platformPathProducer: PlatformPathProducer, +) { + fun flareConfigStorage(): Storage + + fun composeConfigStorage(): Storage + + fun appSettingsStorage(): Storage +} From 96370194dea46102035c4c4a4600266113980be9 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 18:54:16 +0900 Subject: [PATCH 006/261] Extract core model module --- core/model/build.gradle.kts | 10 ++++++++++ .../kotlin/dev/dimension/flare/model/AccountType.kt | 6 +++--- .../kotlin/dev/dimension/flare/model/MicroBlogKey.kt | 0 .../kotlin/dev/dimension/flare/model/PlatformType.kt | 7 ------- .../kotlin/dev/dimension/flare/model/ReferenceType.kt | 2 +- presenter/features/build.gradle.kts | 1 + .../kotlin/dev/dimension/flare/model/PlatformSpec.kt | 7 +++++++ 7 files changed, 22 insertions(+), 11 deletions(-) rename {presenter/features => core/model}/src/commonMain/kotlin/dev/dimension/flare/model/AccountType.kt (85%) rename {presenter/features => core/model}/src/commonMain/kotlin/dev/dimension/flare/model/MicroBlogKey.kt (100%) rename {presenter/features => core/model}/src/commonMain/kotlin/dev/dimension/flare/model/PlatformType.kt (91%) rename {presenter/features => core/model}/src/commonMain/kotlin/dev/dimension/flare/model/ReferenceType.kt (80%) diff --git a/core/model/build.gradle.kts b/core/model/build.gradle.kts index b6e03e9648..9596dfa4ae 100644 --- a/core/model/build.gradle.kts +++ b/core/model/build.gradle.kts @@ -17,4 +17,14 @@ kotlin { FlarePlatform.IOS, ) } + + sourceSets { + val commonMain by getting { + dependencies { + implementation(dependencies.platform(libs.compose.bom)) + implementation(libs.compose.runtime) + implementation(libs.kotlinx.serialization.json) + } + } + } } diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/AccountType.kt b/core/model/src/commonMain/kotlin/dev/dimension/flare/model/AccountType.kt similarity index 85% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/AccountType.kt rename to core/model/src/commonMain/kotlin/dev/dimension/flare/model/AccountType.kt index fcf0adb54f..d174a88ed1 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/AccountType.kt +++ b/core/model/src/commonMain/kotlin/dev/dimension/flare/model/AccountType.kt @@ -5,7 +5,7 @@ import kotlinx.serialization.Serializable @Immutable @Serializable -internal sealed interface DbAccountType +public sealed interface DbAccountType @Immutable @Serializable @@ -35,14 +35,14 @@ public sealed class AccountType { } } -internal fun MicroBlogKey?.toAccountType(): AccountType = +public fun MicroBlogKey?.toAccountType(): AccountType = if (this == null) { AccountType.Guest } else { AccountType.Specific(this) } -internal fun MicroBlogKey?.toAccountType(guestHost: String): AccountType = +public fun MicroBlogKey?.toAccountType(guestHost: String): AccountType = if (this == null) { AccountType.GuestHost(guestHost) } else { diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/MicroBlogKey.kt b/core/model/src/commonMain/kotlin/dev/dimension/flare/model/MicroBlogKey.kt similarity index 100% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/MicroBlogKey.kt rename to core/model/src/commonMain/kotlin/dev/dimension/flare/model/MicroBlogKey.kt diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/PlatformType.kt b/core/model/src/commonMain/kotlin/dev/dimension/flare/model/PlatformType.kt similarity index 91% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/PlatformType.kt rename to core/model/src/commonMain/kotlin/dev/dimension/flare/model/PlatformType.kt index 484fd2b30f..28b504236c 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/PlatformType.kt +++ b/core/model/src/commonMain/kotlin/dev/dimension/flare/model/PlatformType.kt @@ -1,7 +1,6 @@ package dev.dimension.flare.model import androidx.compose.runtime.Immutable -import dev.dimension.flare.ui.model.UiIcon import kotlinx.serialization.Serializable import kotlin.io.encoding.Base64 @@ -19,12 +18,6 @@ public enum class PlatformType { Nostr, } -@Immutable -public data class PlatformTypeMetadata( - val displayName: String, - val icon: UiIcon, -) - public val xqtOldHost: String = buildString { append(Base64.decode("dHc=").decodeToString()) diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/ReferenceType.kt b/core/model/src/commonMain/kotlin/dev/dimension/flare/model/ReferenceType.kt similarity index 80% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/ReferenceType.kt rename to core/model/src/commonMain/kotlin/dev/dimension/flare/model/ReferenceType.kt index 907fd0a712..d7fc7a3da8 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/ReferenceType.kt +++ b/core/model/src/commonMain/kotlin/dev/dimension/flare/model/ReferenceType.kt @@ -3,7 +3,7 @@ package dev.dimension.flare.model import kotlinx.serialization.Serializable @Serializable -internal enum class ReferenceType { +public enum class ReferenceType { Retweet, Reply, Quote, diff --git a/presenter/features/build.gradle.kts b/presenter/features/build.gradle.kts index 8950eafa36..3fbd535987 100644 --- a/presenter/features/build.gradle.kts +++ b/presenter/features/build.gradle.kts @@ -40,6 +40,7 @@ kotlin { } val commonMain by getting { dependencies { + api(projects.core.model) implementation(dependencies.platform(libs.compose.bom)) implementation(libs.compose.runtime) implementation(libs.bundles.kotlinx) diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/PlatformSpec.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/PlatformSpec.kt index a617168630..caac7585d7 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/PlatformSpec.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/model/PlatformSpec.kt @@ -1,5 +1,6 @@ package dev.dimension.flare.model +import androidx.compose.runtime.Immutable import dev.dimension.flare.common.deeplink.DeepLinkMapping import dev.dimension.flare.common.deeplink.DeepLinkPattern import dev.dimension.flare.data.datasource.bluesky.BlueskyDataSource @@ -41,6 +42,12 @@ internal interface PlatformSpec { ): MicroblogDataSource } +@Immutable +internal data class PlatformTypeMetadata( + val displayName: String, + val icon: UiIcon, +) + internal interface SocialPlatformPlugin { val spec: PlatformSpec From 9d044f13ab52261f0fd422866ef441509a7379bd Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 19:00:28 +0900 Subject: [PATCH 007/261] Extract presenter runtime module --- presenter/features/build.gradle.kts | 1 + presenter/runtime/build.gradle.kts | 18 ++++++++++++++++++ .../ui/presenter/PresenterBase.androidJvm.kt | 0 .../flare/ui/presenter/PresenterBase.apple.kt | 0 .../flare/ui/presenter/PresenterBase.kt | 0 .../dev/dimension/flare/ui/presenter/State.kt | 0 6 files changed, 19 insertions(+) rename presenter/{features => runtime}/src/androidJvmMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.androidJvm.kt (100%) rename presenter/{features => runtime}/src/appleMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.apple.kt (100%) rename presenter/{features => runtime}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.kt (100%) rename presenter/{features => runtime}/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/State.kt (100%) diff --git a/presenter/features/build.gradle.kts b/presenter/features/build.gradle.kts index 3fbd535987..8e62cea2aa 100644 --- a/presenter/features/build.gradle.kts +++ b/presenter/features/build.gradle.kts @@ -41,6 +41,7 @@ kotlin { val commonMain by getting { dependencies { api(projects.core.model) + api(projects.presenter.runtime) implementation(dependencies.platform(libs.compose.bom)) implementation(libs.compose.runtime) implementation(libs.bundles.kotlinx) diff --git a/presenter/runtime/build.gradle.kts b/presenter/runtime/build.gradle.kts index 6451b795b3..2f52ed7350 100644 --- a/presenter/runtime/build.gradle.kts +++ b/presenter/runtime/build.gradle.kts @@ -17,4 +17,22 @@ kotlin { FlarePlatform.IOS, ) } + + compilerOptions { + freeCompilerArgs.addAll( + "-module-name", + "flare_presenter_runtime", + ) + } + + sourceSets { + val commonMain by getting { + dependencies { + implementation(dependencies.platform(libs.compose.bom)) + implementation(libs.compose.runtime) + implementation(libs.kotlinx.coroutines.core) + implementation(libs.molecule.runtime) + } + } + } } diff --git a/presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.androidJvm.kt b/presenter/runtime/src/androidJvmMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.androidJvm.kt similarity index 100% rename from presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.androidJvm.kt rename to presenter/runtime/src/androidJvmMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.androidJvm.kt diff --git a/presenter/features/src/appleMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.apple.kt b/presenter/runtime/src/appleMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.apple.kt similarity index 100% rename from presenter/features/src/appleMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.apple.kt rename to presenter/runtime/src/appleMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.apple.kt diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.kt b/presenter/runtime/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.kt similarity index 100% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.kt rename to presenter/runtime/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/PresenterBase.kt diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/State.kt b/presenter/runtime/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/State.kt similarity index 100% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/State.kt rename to presenter/runtime/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/State.kt From bc743ab0800d4f6244eb52ef280c61b913176739 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 19:05:26 +0900 Subject: [PATCH 008/261] Extract core deeplink module --- core/deeplink/build.gradle.kts | 14 +++++++++++ .../flare/common/deeplink/DeepLinkMatcher.kt | 20 ++++++++-------- .../flare/common/deeplink/DeepLinkPattern.kt | 24 +++++++++---------- .../flare/common/deeplink/DeepLinkRequest.kt | 8 +++---- .../flare/common/deeplink/KeyDecoder.kt | 2 +- .../common/deeplink/DeepLinkMatcherTest.kt | 0 .../common/deeplink/DeepLinkPatternTest.kt | 0 .../flare/common/deeplink/KeyDecoderTest.kt | 0 presenter/features/build.gradle.kts | 1 + .../flare/common/deeplink/DeepLinkMapping.kt | 3 ++- 10 files changed, 44 insertions(+), 28 deletions(-) rename {presenter/features => core/deeplink}/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMatcher.kt (90%) rename {presenter/features => core/deeplink}/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkPattern.kt (90%) rename {presenter/features => core/deeplink}/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkRequest.kt (68%) rename {presenter/features => core/deeplink}/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/KeyDecoder.kt (99%) rename {presenter/features => core/deeplink}/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMatcherTest.kt (100%) rename {presenter/features => core/deeplink}/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkPatternTest.kt (100%) rename {presenter/features => core/deeplink}/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/KeyDecoderTest.kt (100%) diff --git a/core/deeplink/build.gradle.kts b/core/deeplink/build.gradle.kts index 7b1e01caa1..0713b3a528 100644 --- a/core/deeplink/build.gradle.kts +++ b/core/deeplink/build.gradle.kts @@ -17,4 +17,18 @@ kotlin { FlarePlatform.IOS, ) } + + sourceSets { + val commonMain by getting { + dependencies { + api(libs.ktor.client.resources) + api(libs.kotlinx.serialization.json) + } + } + val commonTest by getting { + dependencies { + implementation(kotlin("test")) + } + } + } } diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMatcher.kt b/core/deeplink/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMatcher.kt similarity index 90% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMatcher.kt rename to core/deeplink/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMatcher.kt index bfec80985a..7104bc14a6 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMatcher.kt +++ b/core/deeplink/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMatcher.kt @@ -1,18 +1,18 @@ package dev.dimension.flare.common.deeplink -import dev.dimension.flare.data.repository.DebugRepository import kotlinx.serialization.KSerializer -internal class DeepLinkMatcher( - val request: DeepLinkRequest, - val deepLinkPattern: DeepLinkPattern, +public class DeepLinkMatcher( + public val request: DeepLinkRequest, + public val deepLinkPattern: DeepLinkPattern, + private val errorLogger: (String) -> Unit = {}, ) { /** * Match a [DeepLinkRequest] to a [DeepLinkPattern]. * * Returns a [DeepLinkMatchResult] if this matches the pattern, returns null otherwise */ - fun match(): DeepLinkMatchResult? { + public fun match(): DeepLinkMatchResult? { if (request.pathSegments.size != deepLinkPattern.pathSegments.size) return null // exact match (url does not contain any arguments) if (request.uri == deepLinkPattern.uriPattern) { @@ -47,7 +47,7 @@ internal class DeepLinkMatcher( try { candidateSegment.typeParser.invoke(valueToParse) } catch (e: IllegalArgumentException) { - DebugRepository.log( + errorLogger( "${TAG_LOG_ERROR}: Failed to parse path value:[$requestedSegment]" + ". ${e.stackTraceToString()}", ) @@ -68,7 +68,7 @@ internal class DeepLinkMatcher( try { queryStringParser.invoke(query.value.first()) } catch (e: IllegalArgumentException) { - DebugRepository.log( + errorLogger( "${TAG_LOG_ERROR}: Failed to parse query name:[$name] value:[${query.value}]." + " ${e.stackTraceToString()}", ) @@ -90,9 +90,9 @@ internal class DeepLinkMatcher( * been parsed from the raw url string back into its proper KType as declared in [T]. * Includes arguments for all parts of the uri - path, query, etc. * */ -internal data class DeepLinkMatchResult( - val serializer: KSerializer, - val args: Map, +public data class DeepLinkMatchResult( + public val serializer: KSerializer, + public val args: Map, ) private const val TAG_LOG_ERROR = "Nav3RecipesDeepLink" diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkPattern.kt b/core/deeplink/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkPattern.kt similarity index 90% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkPattern.kt rename to core/deeplink/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkPattern.kt index 5accd45936..7ff47fa7ca 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkPattern.kt +++ b/core/deeplink/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkPattern.kt @@ -34,9 +34,9 @@ import kotlinx.serialization.descriptors.SerialKind * @param serializer the serializer of [T] * @param uriPattern the supported deeplink's uri pattern, i.e. "abc.com/home/{pathArg}" */ -internal class DeepLinkPattern( - val serializer: KSerializer, - val uriPattern: Url, +public class DeepLinkPattern( + public val serializer: KSerializer, + public val uriPattern: Url, ) { /** * Help differentiate if a path segment is an argument or a static value @@ -49,7 +49,7 @@ internal class DeepLinkPattern( * order matters here - path segments need to match in value and order when matching * requested deeplink to supported deeplink */ - val pathSegments: List = + public val pathSegments: List = buildList { uriPattern.rawSegments.forEach { segment -> // first, check if it is a path arg @@ -79,7 +79,7 @@ internal class DeepLinkPattern( * * This will be used later on to parse a provided query value into the correct KType */ - val queryValueParsers: Map = + public val queryValueParsers: Map = buildMap { uriPattern.parameters.forEach { paramName, _ -> val elementIndex = serializer.descriptor.getElementIndex(paramName) @@ -91,19 +91,19 @@ internal class DeepLinkPattern( /** * Metadata about a supported path segment */ - class PathSegment( - val stringValue: String, - val isParamArg: Boolean, - val typeParser: TypeParser, - val prefix: String = "", - val suffix: String = "", + public class PathSegment( + public val stringValue: String, + public val isParamArg: Boolean, + public val typeParser: TypeParser, + public val prefix: String = "", + public val suffix: String = "", ) } /** * Parses a String into a Serializable Primitive */ -private typealias TypeParser = (String) -> Any +public typealias TypeParser = (String) -> Any private fun getTypeParser(kind: SerialKind): TypeParser = when (kind) { diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkRequest.kt b/core/deeplink/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkRequest.kt similarity index 68% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkRequest.kt rename to core/deeplink/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkRequest.kt index d507d7dc51..14ca6c0f38 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkRequest.kt +++ b/core/deeplink/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkRequest.kt @@ -8,18 +8,18 @@ import io.ktor.util.toMap * * @param uri the target deeplink uri to link to */ -internal class DeepLinkRequest( - val uri: Url, +public class DeepLinkRequest( + public val uri: Url, ) { /** * A list of path segments */ - val pathSegments: List = uri.rawSegments + public val pathSegments: List = uri.rawSegments /** * A map of query name to query value */ - val queries = uri.parameters.toMap() + public val queries: Map> = uri.parameters.toMap() // TODO add parsing for other Uri components, i.e. fragments, mimeType, action } diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/KeyDecoder.kt b/core/deeplink/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/KeyDecoder.kt similarity index 99% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/KeyDecoder.kt rename to core/deeplink/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/KeyDecoder.kt index 558316d678..e3d9e329cf 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/KeyDecoder.kt +++ b/core/deeplink/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/KeyDecoder.kt @@ -14,7 +14,7 @@ import kotlinx.serialization.modules.SerializersModule * **IMPORTANT** This decoder assumes that all argument types are Primitives. */ @OptIn(ExperimentalSerializationApi::class) -internal class KeyDecoder( +public class KeyDecoder( private val arguments: Map, ) : AbstractDecoder() { override val serializersModule: SerializersModule = EmptySerializersModule() diff --git a/presenter/features/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMatcherTest.kt b/core/deeplink/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMatcherTest.kt similarity index 100% rename from presenter/features/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMatcherTest.kt rename to core/deeplink/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMatcherTest.kt diff --git a/presenter/features/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkPatternTest.kt b/core/deeplink/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkPatternTest.kt similarity index 100% rename from presenter/features/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkPatternTest.kt rename to core/deeplink/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/DeepLinkPatternTest.kt diff --git a/presenter/features/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/KeyDecoderTest.kt b/core/deeplink/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/KeyDecoderTest.kt similarity index 100% rename from presenter/features/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/KeyDecoderTest.kt rename to core/deeplink/src/commonTest/kotlin/dev/dimension/flare/common/deeplink/KeyDecoderTest.kt diff --git a/presenter/features/build.gradle.kts b/presenter/features/build.gradle.kts index 8e62cea2aa..5e8f27abfb 100644 --- a/presenter/features/build.gradle.kts +++ b/presenter/features/build.gradle.kts @@ -41,6 +41,7 @@ kotlin { val commonMain by getting { dependencies { api(projects.core.model) + implementation(projects.core.deeplink) api(projects.presenter.runtime) implementation(dependencies.platform(libs.compose.bom)) implementation(libs.compose.runtime) diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMapping.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMapping.kt index e3bf1077d8..03badb8756 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMapping.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/deeplink/DeepLinkMapping.kt @@ -1,5 +1,6 @@ package dev.dimension.flare.common.deeplink +import dev.dimension.flare.data.repository.DebugRepository import dev.dimension.flare.model.AccountType import dev.dimension.flare.model.MicroBlogKey import dev.dimension.flare.ui.model.UiAccount @@ -91,7 +92,7 @@ internal object DeepLinkMapping { mapping.forEach { (account, patterns) -> val matchType = patterns.firstNotNullOfOrNull { pattern -> - DeepLinkMatcher(request, pattern).match()?.let { match -> + DeepLinkMatcher(request, pattern, DebugRepository::log).match()?.let { match -> KeyDecoder(match.args).decodeSerializableValue(match.serializer) } } From f80b98fada229a2233f7eda2bed395377dc23dae Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 19:08:42 +0900 Subject: [PATCH 009/261] Extract common serialization utilities --- core/common/build.gradle.kts | 10 +++++++ .../kotlin/dev/dimension/flare/common/JSON.kt | 12 ++++----- .../dev/dimension/flare/common/Protobuf.kt | 27 +++++++++++++++++++ .../kotlin/dev/dimension/flare/common/XML.kt | 2 +- presenter/features/build.gradle.kts | 1 + .../dev/dimension/flare/common/Protobuf.kt | 27 ------------------- 6 files changed, 45 insertions(+), 34 deletions(-) rename {presenter/features => core/common}/src/commonMain/kotlin/dev/dimension/flare/common/JSON.kt (87%) create mode 100644 core/common/src/commonMain/kotlin/dev/dimension/flare/common/Protobuf.kt rename {presenter/features => core/common}/src/commonMain/kotlin/dev/dimension/flare/common/XML.kt (91%) delete mode 100644 presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/Protobuf.kt diff --git a/core/common/build.gradle.kts b/core/common/build.gradle.kts index b8db2df29e..6aa0ad2095 100644 --- a/core/common/build.gradle.kts +++ b/core/common/build.gradle.kts @@ -17,4 +17,14 @@ kotlin { FlarePlatform.IOS, ) } + + sourceSets { + val commonMain by getting { + dependencies { + api(libs.kotlinx.serialization.json) + api(libs.kotlinx.serialization.protobuf) + api(libs.xmlUtil) + } + } + } } diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/JSON.kt b/core/common/src/commonMain/kotlin/dev/dimension/flare/common/JSON.kt similarity index 87% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/JSON.kt rename to core/common/src/commonMain/kotlin/dev/dimension/flare/common/JSON.kt index 4d155ed82e..7213b055d5 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/JSON.kt +++ b/core/common/src/commonMain/kotlin/dev/dimension/flare/common/JSON.kt @@ -26,26 +26,26 @@ private val jsonWithEncodeDefault = encodeDefaults = true } -internal val JSON get() = json -internal val JSON_WITH_ENCODE_DEFAULT get() = jsonWithEncodeDefault +public val JSON: Json get() = json +public val JSON_WITH_ENCODE_DEFAULT: Json get() = jsonWithEncodeDefault -internal inline fun T.encodeJson(): String = JSON.encodeToString(this) +public inline fun T.encodeJson(): String = JSON.encodeToString(this) @OptIn(ExperimentalObjCRefinement::class) @HiddenFromObjC public fun T.encodeJson(serializer: KSerializer): String = JSON.encodeToString(serializer, this) -internal inline fun String.decodeJson(): T = JSON.decodeFromString(this) +public inline fun String.decodeJson(): T = JSON.decodeFromString(this) @OptIn(ExperimentalObjCRefinement::class) @HiddenFromObjC public fun String.decodeJson(serializer: KSerializer): T = JSON.decodeFromString(serializer, this) -internal val JsonElement.jsonObjectOrNull: JsonObject? +public val JsonElement.jsonObjectOrNull: JsonObject? get() = if (this is JsonObject) this else null @OptIn(ExperimentalSerializationApi::class) -internal class SafePolymorphicSerializer( +public class SafePolymorphicSerializer( private val baseSerializer: KSerializer, private val discriminator: String, ) : KSerializer { diff --git a/core/common/src/commonMain/kotlin/dev/dimension/flare/common/Protobuf.kt b/core/common/src/commonMain/kotlin/dev/dimension/flare/common/Protobuf.kt new file mode 100644 index 0000000000..1c1ae20072 --- /dev/null +++ b/core/common/src/commonMain/kotlin/dev/dimension/flare/common/Protobuf.kt @@ -0,0 +1,27 @@ +package dev.dimension.flare.common + +import kotlinx.serialization.ExperimentalSerializationApi +import kotlinx.serialization.KSerializer +import kotlinx.serialization.decodeFromByteArray +import kotlinx.serialization.decodeFromHexString +import kotlinx.serialization.encodeToByteArray +import kotlinx.serialization.encodeToHexString +import kotlinx.serialization.protobuf.ProtoBuf + +@OptIn(ExperimentalSerializationApi::class) +public inline fun T.encodeProtobuf(): ByteArray = ProtoBuf.encodeToByteArray(this) + +@OptIn(ExperimentalSerializationApi::class) +public inline fun ByteArray.decodeProtobuf(): T = ProtoBuf.decodeFromByteArray(this) + +@OptIn(ExperimentalSerializationApi::class) +public inline fun String.decodeProtobuf(): T = ProtoBuf.decodeFromHexString(this) + +@OptIn(ExperimentalSerializationApi::class) +public inline fun String.decodeProtobuf(serializer: KSerializer): T = ProtoBuf.decodeFromHexString(serializer, this) + +@OptIn(ExperimentalSerializationApi::class) +public inline fun T.encodeProtobufToString(): String = ProtoBuf.encodeToHexString(this) + +@OptIn(ExperimentalSerializationApi::class) +public inline fun T.encodeProtobufToString(serializer: KSerializer): String = ProtoBuf.encodeToHexString(serializer, this) diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/XML.kt b/core/common/src/commonMain/kotlin/dev/dimension/flare/common/XML.kt similarity index 91% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/XML.kt rename to core/common/src/commonMain/kotlin/dev/dimension/flare/common/XML.kt index f47421abf1..8395219ef8 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/XML.kt +++ b/core/common/src/commonMain/kotlin/dev/dimension/flare/common/XML.kt @@ -2,7 +2,7 @@ package dev.dimension.flare.common import nl.adaptivity.xmlutil.serialization.XML -internal val Xml = +public val Xml: XML = XML { defaultPolicy { autoPolymorphic = true diff --git a/presenter/features/build.gradle.kts b/presenter/features/build.gradle.kts index 5e8f27abfb..cdda4fb5a0 100644 --- a/presenter/features/build.gradle.kts +++ b/presenter/features/build.gradle.kts @@ -40,6 +40,7 @@ kotlin { } val commonMain by getting { dependencies { + api(projects.core.common) api(projects.core.model) implementation(projects.core.deeplink) api(projects.presenter.runtime) diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/Protobuf.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/Protobuf.kt deleted file mode 100644 index 96f1f44c1e..0000000000 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/Protobuf.kt +++ /dev/null @@ -1,27 +0,0 @@ -package dev.dimension.flare.common - -import kotlinx.serialization.ExperimentalSerializationApi -import kotlinx.serialization.KSerializer -import kotlinx.serialization.decodeFromByteArray -import kotlinx.serialization.decodeFromHexString -import kotlinx.serialization.encodeToByteArray -import kotlinx.serialization.encodeToHexString -import kotlinx.serialization.protobuf.ProtoBuf - -@OptIn(ExperimentalSerializationApi::class) -internal inline fun T.encodeProtobuf(): ByteArray = ProtoBuf.encodeToByteArray(this) - -@OptIn(ExperimentalSerializationApi::class) -internal inline fun ByteArray.decodeProtobuf(): T = ProtoBuf.decodeFromByteArray(this) - -@OptIn(ExperimentalSerializationApi::class) -internal inline fun String.decodeProtobuf(): T = ProtoBuf.decodeFromHexString(this) - -@OptIn(ExperimentalSerializationApi::class) -internal inline fun String.decodeProtobuf(serializer: KSerializer): T = ProtoBuf.decodeFromHexString(serializer, this) - -@OptIn(ExperimentalSerializationApi::class) -internal inline fun T.encodeProtobufToString(): String = ProtoBuf.encodeToHexString(this) - -@OptIn(ExperimentalSerializationApi::class) -internal inline fun T.encodeProtobufToString(serializer: KSerializer): String = ProtoBuf.encodeToHexString(serializer, this) From 3e5d17a4d48bde5a903061d446c85c6ece43b339 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 19:12:33 +0900 Subject: [PATCH 010/261] Move common helper utilities to core --- core/common/build.gradle.kts | 2 ++ .../dev/dimension/flare/common/FileNameSanitizer.kt | 3 +++ .../kotlin/dev/dimension/flare/common/FileType.kt | 0 .../kotlin/dev/dimension/flare/common/FlowExt.kt | 2 +- .../kotlin/dev/dimension/flare/common/MimeTypes.kt | 8 ++++---- .../flare/common/SerializableImmutableList.kt | 12 ++++++------ .../dimension/flare/common/SnowflakeIdGenerator.kt | 5 +++-- .../dev/dimension/flare/common/FileNameSanitizer.kt | 3 --- 8 files changed, 19 insertions(+), 16 deletions(-) create mode 100644 core/common/src/commonMain/kotlin/dev/dimension/flare/common/FileNameSanitizer.kt rename {presenter/features => core/common}/src/commonMain/kotlin/dev/dimension/flare/common/FileType.kt (100%) rename {presenter/features => core/common}/src/commonMain/kotlin/dev/dimension/flare/common/FlowExt.kt (84%) rename {presenter/features => core/common}/src/commonMain/kotlin/dev/dimension/flare/common/MimeTypes.kt (90%) rename {presenter/features => core/common}/src/commonMain/kotlin/dev/dimension/flare/common/SerializableImmutableList.kt (86%) rename {presenter/features => core/common}/src/commonMain/kotlin/dev/dimension/flare/common/SnowflakeIdGenerator.kt (97%) delete mode 100644 presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/FileNameSanitizer.kt diff --git a/core/common/build.gradle.kts b/core/common/build.gradle.kts index 6aa0ad2095..0ee47830af 100644 --- a/core/common/build.gradle.kts +++ b/core/common/build.gradle.kts @@ -21,6 +21,8 @@ kotlin { sourceSets { val commonMain by getting { dependencies { + api(libs.kotlinx.coroutines.core) + api(libs.kotlinx.immutable) api(libs.kotlinx.serialization.json) api(libs.kotlinx.serialization.protobuf) api(libs.xmlUtil) diff --git a/core/common/src/commonMain/kotlin/dev/dimension/flare/common/FileNameSanitizer.kt b/core/common/src/commonMain/kotlin/dev/dimension/flare/common/FileNameSanitizer.kt new file mode 100644 index 0000000000..57c353bba2 --- /dev/null +++ b/core/common/src/commonMain/kotlin/dev/dimension/flare/common/FileNameSanitizer.kt @@ -0,0 +1,3 @@ +package dev.dimension.flare.common + +public fun String.sanitizeFileName(): String = replace(Regex("[^A-Za-z0-9._-]"), "_") diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/FileType.kt b/core/common/src/commonMain/kotlin/dev/dimension/flare/common/FileType.kt similarity index 100% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/FileType.kt rename to core/common/src/commonMain/kotlin/dev/dimension/flare/common/FileType.kt diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/FlowExt.kt b/core/common/src/commonMain/kotlin/dev/dimension/flare/common/FlowExt.kt similarity index 84% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/FlowExt.kt rename to core/common/src/commonMain/kotlin/dev/dimension/flare/common/FlowExt.kt index 09ef0a3d2e..08e61fef15 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/FlowExt.kt +++ b/core/common/src/commonMain/kotlin/dev/dimension/flare/common/FlowExt.kt @@ -7,7 +7,7 @@ import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flowOf @OptIn(ExperimentalCoroutinesApi::class) -internal inline fun Flow>>.combineLatestFlowLists(): Flow> = +public inline fun Flow>>.combineLatestFlowLists(): Flow> = flatMapLatest { flows -> if (flows.isEmpty()) { flowOf(emptyList()) diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/MimeTypes.kt b/core/common/src/commonMain/kotlin/dev/dimension/flare/common/MimeTypes.kt similarity index 90% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/MimeTypes.kt rename to core/common/src/commonMain/kotlin/dev/dimension/flare/common/MimeTypes.kt index 4a68bffc6a..1081940449 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/MimeTypes.kt +++ b/core/common/src/commonMain/kotlin/dev/dimension/flare/common/MimeTypes.kt @@ -1,7 +1,7 @@ package dev.dimension.flare.common -internal object MimeTypes { - fun detectFromBytes(bytes: ByteArray): String? { +public object MimeTypes { + public fun detectFromBytes(bytes: ByteArray): String? { if (bytes.size < 4) return null val b0 = bytes[0].toInt() and 0xFF val b1 = bytes[1].toInt() and 0xFF @@ -30,7 +30,7 @@ internal object MimeTypes { return null } - fun extensionFor(mimeType: String?): String? = + public fun extensionFor(mimeType: String?): String? = when (mimeType?.lowercase()?.substringBefore(';')?.trim()) { "image/jpeg", "image/jpg" -> "jpg" "image/png" -> "png" @@ -48,7 +48,7 @@ internal object MimeTypes { else -> null } - fun hasExtension(name: String): Boolean { + public fun hasExtension(name: String): Boolean { val dot = name.lastIndexOf('.') if (dot <= 0 || dot == name.lastIndex) return false val ext = name.substring(dot + 1) diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/SerializableImmutableList.kt b/core/common/src/commonMain/kotlin/dev/dimension/flare/common/SerializableImmutableList.kt similarity index 86% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/SerializableImmutableList.kt rename to core/common/src/commonMain/kotlin/dev/dimension/flare/common/SerializableImmutableList.kt index 31f65267ef..d27a449f31 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/SerializableImmutableList.kt +++ b/core/common/src/commonMain/kotlin/dev/dimension/flare/common/SerializableImmutableList.kt @@ -15,11 +15,11 @@ import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder // https://github.com/Kotlin/kotlinx.collections.immutable/issues/63 -internal typealias SerializableImmutableList = +public typealias SerializableImmutableList = @Serializable(ImmutableListSerializer::class) ImmutableList -internal class ImmutableListSerializer( +public class ImmutableListSerializer( private val dataSerializer: KSerializer, ) : KSerializer> { @OptIn(SealedSerializationApi::class) @@ -32,16 +32,16 @@ internal class ImmutableListSerializer( override fun serialize( encoder: Encoder, value: ImmutableList, - ) = ListSerializer(dataSerializer).serialize(encoder, value.toList()) + ): Unit = ListSerializer(dataSerializer).serialize(encoder, value.toList()) override fun deserialize(decoder: Decoder): ImmutableList = ListSerializer(dataSerializer).deserialize(decoder).toPersistentList() } -internal typealias SerializableImmutableMap = +public typealias SerializableImmutableMap = @Serializable(ImmutableMapSerializer::class) ImmutableMap -internal class ImmutableMapSerializer( +public class ImmutableMapSerializer( private val keySerializer: KSerializer, private val valueSerializer: KSerializer, ) : KSerializer> { @@ -55,7 +55,7 @@ internal class ImmutableMapSerializer( override fun serialize( encoder: Encoder, value: ImmutableMap, - ) = MapSerializer(keySerializer, valueSerializer).serialize(encoder, value.toMap()) + ): Unit = MapSerializer(keySerializer, valueSerializer).serialize(encoder, value.toMap()) override fun deserialize(decoder: Decoder): ImmutableMap = MapSerializer(keySerializer, valueSerializer).deserialize(decoder).toPersistentMap() diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/SnowflakeIdGenerator.kt b/core/common/src/commonMain/kotlin/dev/dimension/flare/common/SnowflakeIdGenerator.kt similarity index 97% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/SnowflakeIdGenerator.kt rename to core/common/src/commonMain/kotlin/dev/dimension/flare/common/SnowflakeIdGenerator.kt index d7e4e02fa2..f167dd3a38 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/SnowflakeIdGenerator.kt +++ b/core/common/src/commonMain/kotlin/dev/dimension/flare/common/SnowflakeIdGenerator.kt @@ -1,4 +1,5 @@ package dev.dimension.flare.common + import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import kotlin.time.Clock @@ -11,7 +12,7 @@ import kotlin.time.Clock * * 64‑bit layout: 41 timestamp | 5 datacenter | 5 worker | 12 sequence * */ -internal data object SnowflakeIdGenerator { +public data object SnowflakeIdGenerator { // ─────────────────────────────── config (edit to suit) ────────────────── private const val DATA_CENTER_ID: Int = 1 // 0‒31 private const val WORKER_ID: Int = 1 // 0‒31 @@ -46,7 +47,7 @@ internal data object SnowflakeIdGenerator { * * **Suspend**s while waiting to enter the critical section ‒ no CPU busy‑wait. */ - suspend fun nextId(): Long = + public suspend fun nextId(): Long = mutex.withLock { var ts = currentMillis() diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/FileNameSanitizer.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/FileNameSanitizer.kt deleted file mode 100644 index fa8630a2ba..0000000000 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/FileNameSanitizer.kt +++ /dev/null @@ -1,3 +0,0 @@ -package dev.dimension.flare.common - -internal fun String.sanitizeFileName(): String = replace(Regex("[^A-Za-z0-9._-]"), "_") From c63f28d8d1abcc01ff444f780316bd08eb94eee7 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 19:16:31 +0900 Subject: [PATCH 011/261] Extract lightweight UI model values --- presenter/features/build.gradle.kts | 1 + ui/model/build.gradle.kts | 10 ++++++++++ .../flare/ui/model/TranslationDisplayState.kt | 0 .../kotlin/dev/dimension/flare/ui/model/UiHandle.kt | 0 .../kotlin/dev/dimension/flare/ui/model/UiHashtag.kt | 2 +- .../dev/dimension/flare/ui/model/UiKeywordFilter.kt | 0 .../kotlin/dev/dimension/flare/ui/model/UiRelation.kt | 2 +- .../dev/dimension/flare/ui/model/UiSearchHistory.kt | 2 +- .../kotlin/dev/dimension/flare/ui/model/UiStrings.kt | 0 9 files changed, 14 insertions(+), 3 deletions(-) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/model/TranslationDisplayState.kt (100%) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiHandle.kt (100%) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiHashtag.kt (78%) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiKeywordFilter.kt (100%) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiRelation.kt (89%) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiSearchHistory.kt (75%) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiStrings.kt (100%) diff --git a/presenter/features/build.gradle.kts b/presenter/features/build.gradle.kts index cdda4fb5a0..2dacd26670 100644 --- a/presenter/features/build.gradle.kts +++ b/presenter/features/build.gradle.kts @@ -42,6 +42,7 @@ kotlin { dependencies { api(projects.core.common) api(projects.core.model) + api(projects.ui.model) implementation(projects.core.deeplink) api(projects.presenter.runtime) implementation(dependencies.platform(libs.compose.bom)) diff --git a/ui/model/build.gradle.kts b/ui/model/build.gradle.kts index 80b9ea7cc3..d77031b5a9 100644 --- a/ui/model/build.gradle.kts +++ b/ui/model/build.gradle.kts @@ -17,4 +17,14 @@ kotlin { FlarePlatform.IOS, ) } + + sourceSets { + val commonMain by getting { + dependencies { + api(dependencies.platform(libs.compose.bom)) + api(libs.compose.runtime) + api(libs.kotlinx.serialization.json) + } + } + } } diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/TranslationDisplayState.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/TranslationDisplayState.kt similarity index 100% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/TranslationDisplayState.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/TranslationDisplayState.kt diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiHandle.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiHandle.kt similarity index 100% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiHandle.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiHandle.kt diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiHashtag.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiHashtag.kt similarity index 78% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiHashtag.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiHashtag.kt index bab8ae2217..5513b27df8 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiHashtag.kt +++ b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiHashtag.kt @@ -3,7 +3,7 @@ package dev.dimension.flare.ui.model import androidx.compose.runtime.Immutable @Immutable -public data class UiHashtag internal constructor( +public data class UiHashtag( val hashtag: String, val description: String?, val searchContent: String, diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiKeywordFilter.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiKeywordFilter.kt similarity index 100% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiKeywordFilter.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiKeywordFilter.kt diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiRelation.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiRelation.kt similarity index 89% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiRelation.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiRelation.kt index 1b60368dd0..1b02fd167b 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiRelation.kt +++ b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiRelation.kt @@ -5,7 +5,7 @@ import kotlinx.serialization.Serializable @Serializable @Immutable -public data class UiRelation internal constructor( +public data class UiRelation( val following: Boolean = false, val isFans: Boolean = false, val blocking: Boolean = false, diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiSearchHistory.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiSearchHistory.kt similarity index 75% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiSearchHistory.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiSearchHistory.kt index 3bec533002..47bf2ddd1e 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiSearchHistory.kt +++ b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiSearchHistory.kt @@ -4,7 +4,7 @@ import androidx.compose.runtime.Immutable import kotlin.time.Instant @Immutable -public data class UiSearchHistory internal constructor( +public data class UiSearchHistory( val keyword: String, val createdAt: Instant, ) diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiStrings.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiStrings.kt similarity index 100% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiStrings.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiStrings.kt From 03ca07f13397671c5bfe8d6496680c03baa8d0e9 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 19:19:22 +0900 Subject: [PATCH 012/261] Move icon models into UI model module --- ui/model/build.gradle.kts | 1 + .../commonMain/kotlin/dev/dimension/flare/data/model/IconType.kt | 0 .../src/commonMain/kotlin/dev/dimension/flare/ui/model/UiIcon.kt | 0 3 files changed, 1 insertion(+) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/data/model/IconType.kt (100%) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiIcon.kt (100%) diff --git a/ui/model/build.gradle.kts b/ui/model/build.gradle.kts index d77031b5a9..0083f1adc5 100644 --- a/ui/model/build.gradle.kts +++ b/ui/model/build.gradle.kts @@ -21,6 +21,7 @@ kotlin { sourceSets { val commonMain by getting { dependencies { + api(projects.core.model) api(dependencies.platform(libs.compose.bom)) api(libs.compose.runtime) api(libs.kotlinx.serialization.json) diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/IconType.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/data/model/IconType.kt similarity index 100% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/model/IconType.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/data/model/IconType.kt diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiIcon.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiIcon.kt similarity index 100% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiIcon.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiIcon.kt From 2742772e1af863142bc22141eec80dd651398886 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 19:24:21 +0900 Subject: [PATCH 013/261] Move media card models into UI model module --- ui/model/build.gradle.kts | 7 +++++++ .../kotlin/dev/dimension/flare/ui/model/UiCard.kt | 2 +- .../kotlin/dev/dimension/flare/ui/model/UiMedia.kt | 10 +++++----- .../dimension/flare/ui/model/UiMediaFileNameTest.kt | 0 4 files changed, 13 insertions(+), 6 deletions(-) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiCard.kt (84%) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiMedia.kt (90%) rename {presenter/features => ui/model}/src/commonTest/kotlin/dev/dimension/flare/ui/model/UiMediaFileNameTest.kt (100%) diff --git a/ui/model/build.gradle.kts b/ui/model/build.gradle.kts index 0083f1adc5..995c650164 100644 --- a/ui/model/build.gradle.kts +++ b/ui/model/build.gradle.kts @@ -21,11 +21,18 @@ kotlin { sourceSets { val commonMain by getting { dependencies { + api(projects.core.common) api(projects.core.model) api(dependencies.platform(libs.compose.bom)) api(libs.compose.runtime) api(libs.kotlinx.serialization.json) } } + + val commonTest by getting { + dependencies { + implementation(kotlin("test")) + } + } } } diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiCard.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiCard.kt similarity index 84% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiCard.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiCard.kt index 87722e36b3..6d9820b7ed 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiCard.kt +++ b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiCard.kt @@ -5,7 +5,7 @@ import kotlinx.serialization.Serializable @Serializable @Immutable -public data class UiCard internal constructor( +public data class UiCard( val title: String, val description: String?, val media: UiMedia?, diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiMedia.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiMedia.kt similarity index 90% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiMedia.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiMedia.kt index 99ec52fc1a..71ac0332d1 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiMedia.kt +++ b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiMedia.kt @@ -14,7 +14,7 @@ public sealed interface UiMedia { @Serializable @Immutable - public data class Image internal constructor( + public data class Image( override val url: String, val previewUrl: String, override val description: String?, @@ -23,7 +23,7 @@ public sealed interface UiMedia { val sensitive: Boolean, override val customHeaders: SerializableImmutableMap? = null, ) : UiMedia { - internal constructor(url: String, customHeaders: SerializableImmutableMap? = null) : this( + public constructor(url: String, customHeaders: SerializableImmutableMap? = null) : this( url = url, previewUrl = url, description = null, @@ -39,7 +39,7 @@ public sealed interface UiMedia { @Serializable @Immutable - public data class Video internal constructor( + public data class Video( override val url: String, val thumbnailUrl: String, override val description: String?, @@ -53,7 +53,7 @@ public sealed interface UiMedia { @Serializable @Immutable - public data class Gif internal constructor( + public data class Gif( override val url: String, val previewUrl: String, override val description: String?, @@ -67,7 +67,7 @@ public sealed interface UiMedia { @Serializable @Immutable - public data class Audio internal constructor( + public data class Audio( override val url: String, override val description: String?, val previewUrl: String?, diff --git a/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/UiMediaFileNameTest.kt b/ui/model/src/commonTest/kotlin/dev/dimension/flare/ui/model/UiMediaFileNameTest.kt similarity index 100% rename from presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/model/UiMediaFileNameTest.kt rename to ui/model/src/commonTest/kotlin/dev/dimension/flare/ui/model/UiMediaFileNameTest.kt From e176c04c0418757e5337de8b64a7e4ef5c5e7e2e Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 19:27:05 +0900 Subject: [PATCH 014/261] Move UI state primitives into UI model module --- .../flare/ui/model/UiStateCacheExt.kt | 32 +++++++++++++++++++ .../home/rss/EditRssSourcePresenter.kt | 6 ++-- .../dev/dimension/flare/ui/model/UiState.kt | 29 ----------------- 3 files changed, 35 insertions(+), 32 deletions(-) create mode 100644 presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiStateCacheExt.kt rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiState.kt (83%) diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiStateCacheExt.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiStateCacheExt.kt new file mode 100644 index 0000000000..92c54dcf35 --- /dev/null +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiStateCacheExt.kt @@ -0,0 +1,32 @@ +package dev.dimension.flare.ui.model + +import androidx.paging.LoadState +import dev.dimension.flare.common.CacheData +import dev.dimension.flare.common.CacheState +import dev.dimension.flare.common.CacheableState +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.combine + +internal fun CacheableState.toUi(): UiState = + data?.let { + UiState.Success(it) + } ?: run { + when (val state = refreshState) { + is LoadState.Error -> UiState.Error(state.error) + LoadState.Loading -> UiState.Loading() + is LoadState.NotLoading -> UiState.Error(IllegalStateException("Data is null")) + } + } + +internal fun CacheData.toUi(): Flow> = + combine(data, refreshState) { data, refresh -> + if (data is CacheState.Success) { + UiState.Success(data.data) + } else { + when (refresh) { + is LoadState.Error -> UiState.Error(refresh.error) + LoadState.Loading -> UiState.Loading() + is LoadState.NotLoading -> UiState.Error(IllegalStateException("Data is null")) + } + } + } diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/EditRssSourcePresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/EditRssSourcePresenter.kt index e451d21a39..f287a1b230 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/EditRssSourcePresenter.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/rss/EditRssSourcePresenter.kt @@ -269,7 +269,7 @@ public class EditRssSourcePresenter( val canSave = when (val state = checkRssSourcePresenterState.state) { is UiState.Success -> { - when (state.data) { + when (val data = state.data) { is RssState.RssFeed -> { true } @@ -287,11 +287,11 @@ public class EditRssSourcePresenter( } is RssState.RssSources -> { - state.data.sources.isNotEmpty() + data.sources.isNotEmpty() } is RssState.MastodonInstance -> { - state.data.availableTimelines.isNotEmpty() + data.availableTimelines.isNotEmpty() } } } diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiState.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiState.kt similarity index 83% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiState.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiState.kt index c9b5ead50d..4918428d45 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiState.kt +++ b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiState.kt @@ -4,13 +4,8 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable import androidx.compose.runtime.State import androidx.compose.runtime.produceState -import androidx.paging.LoadState -import dev.dimension.flare.common.CacheData -import dev.dimension.flare.common.CacheState -import dev.dimension.flare.common.CacheableState import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch -import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.onStart import kotlin.experimental.ExperimentalObjCRefinement import kotlin.native.HiddenFromObjC @@ -191,27 +186,3 @@ public fun Flow>.flattenUiState(initial: UiState = UiSta value = it } } - -internal fun CacheableState.toUi(): UiState = - data?.let { - UiState.Success(it) - } ?: run { - when (val state = refreshState) { - is LoadState.Error -> UiState.Error(state.error) - LoadState.Loading -> UiState.Loading() - is LoadState.NotLoading -> UiState.Error(IllegalStateException("Data is null")) - } - } - -internal fun CacheData.toUi(): Flow> = - combine(data, refreshState) { data, refresh -> - if (data is CacheState.Success) { - UiState.Success(data.data) - } else { - when (refresh) { - is LoadState.Error -> UiState.Error(refresh.error) - LoadState.Loading -> UiState.Loading() - is LoadState.NotLoading -> UiState.Error(IllegalStateException("Data is null")) - } - } - } From 321a5fb17ff79dca9a90a846a250a6aec1be55b3 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 19:29:08 +0900 Subject: [PATCH 015/261] Move emoji models into UI model module --- .../commonMain/kotlin/dev/dimension/flare/ui/model/UiEmoji.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiEmoji.kt (90%) diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiEmoji.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiEmoji.kt similarity index 90% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiEmoji.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiEmoji.kt index 643e2e22c3..7f02e55429 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiEmoji.kt +++ b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiEmoji.kt @@ -8,7 +8,7 @@ import kotlinx.serialization.Serializable @Serializable @Immutable -public data class UiEmoji internal constructor( +public data class UiEmoji( val shortcode: String, val url: String, val category: String, @@ -18,7 +18,7 @@ public data class UiEmoji internal constructor( // compatibility class for Kotlin native @Immutable -public data class EmojiData internal constructor( +public data class EmojiData( val data: SerializableImmutableMap>, val accountType: AccountType, ) { From 0adae60c5dec933b47c66d3f84f6742876497cdf Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 19:31:25 +0900 Subject: [PATCH 016/261] Move instance models into UI model module --- .../kotlin/dev/dimension/flare/ui/model/UiInstance.kt | 2 +- .../kotlin/dev/dimension/flare/ui/model/UiInstanceMetadata.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstance.kt (86%) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstanceMetadata.kt (95%) diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstance.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstance.kt similarity index 86% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstance.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstance.kt index a20fd3bf12..699fca5b9a 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstance.kt +++ b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstance.kt @@ -4,7 +4,7 @@ import androidx.compose.runtime.Immutable import dev.dimension.flare.model.PlatformType @Immutable -public data class UiInstance internal constructor( +public data class UiInstance( val name: String, val description: String?, val iconUrl: String?, diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstanceMetadata.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstanceMetadata.kt similarity index 95% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstanceMetadata.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstanceMetadata.kt index 72524dee36..929104a696 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstanceMetadata.kt +++ b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiInstanceMetadata.kt @@ -5,7 +5,7 @@ import dev.dimension.flare.common.SerializableImmutableList import dev.dimension.flare.common.SerializableImmutableMap @Immutable -public data class UiInstanceMetadata internal constructor( +public data class UiInstanceMetadata( val instance: UiInstance, val rules: SerializableImmutableMap, val configuration: Configuration, From 21a573c41a511a0aa22f4b0d78cc35b91a5913f8 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 19:36:33 +0900 Subject: [PATCH 017/261] Extract HTTP engine provider to data network --- data/network/build.gradle.kts | 20 +++++++++++++++++++ .../HttpClientEngineProvider.androidJvm.kt | 2 +- .../network/HttpClientEngineProvider.apple.kt | 2 +- .../data/network/HttpClientEngineProvider.kt | 5 +++++ gradle/libs.versions.toml | 1 + presenter/features/build.gradle.kts | 1 + .../dimension/flare/data/network/Ktorfit.kt | 6 ++---- .../flare/data/network/ai/OpenAIService.kt | 4 ++-- .../data/network/HttpClientEngine.jvm.kt | 6 ------ 9 files changed, 33 insertions(+), 14 deletions(-) rename presenter/features/src/androidMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.android.kt => data/network/src/androidJvmMain/kotlin/dev/dimension/flare/data/network/HttpClientEngineProvider.androidJvm.kt (62%) rename presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.apple.kt => data/network/src/appleMain/kotlin/dev/dimension/flare/data/network/HttpClientEngineProvider.apple.kt (71%) create mode 100644 data/network/src/commonMain/kotlin/dev/dimension/flare/data/network/HttpClientEngineProvider.kt delete mode 100644 presenter/features/src/jvmMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.jvm.kt diff --git a/data/network/build.gradle.kts b/data/network/build.gradle.kts index 173a867080..6bcd666358 100644 --- a/data/network/build.gradle.kts +++ b/data/network/build.gradle.kts @@ -18,6 +18,26 @@ kotlin { FlarePlatform.IOS, ) } + + sourceSets { + val commonMain by getting { + dependencies { + api(libs.ktor.client.core) + } + } + + val androidJvmMain by getting { + dependencies { + implementation(libs.ktor.client.okhttp) + } + } + + val appleMain by getting { + dependencies { + implementation(libs.ktor.client.darwin) + } + } + } } ktorfit { diff --git a/presenter/features/src/androidMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.android.kt b/data/network/src/androidJvmMain/kotlin/dev/dimension/flare/data/network/HttpClientEngineProvider.androidJvm.kt similarity index 62% rename from presenter/features/src/androidMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.android.kt rename to data/network/src/androidJvmMain/kotlin/dev/dimension/flare/data/network/HttpClientEngineProvider.androidJvm.kt index bd471e466d..a49370b8c9 100644 --- a/presenter/features/src/androidMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.android.kt +++ b/data/network/src/androidJvmMain/kotlin/dev/dimension/flare/data/network/HttpClientEngineProvider.androidJvm.kt @@ -3,4 +3,4 @@ package dev.dimension.flare.data.network import io.ktor.client.engine.HttpClientEngine import io.ktor.client.engine.okhttp.OkHttp -public actual val httpClientEngine: HttpClientEngine = OkHttp.create {} +public actual fun createHttpClientEngine(): HttpClientEngine = OkHttp.create {} diff --git a/presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.apple.kt b/data/network/src/appleMain/kotlin/dev/dimension/flare/data/network/HttpClientEngineProvider.apple.kt similarity index 71% rename from presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.apple.kt rename to data/network/src/appleMain/kotlin/dev/dimension/flare/data/network/HttpClientEngineProvider.apple.kt index d3ce43e830..c34b1e5baf 100644 --- a/presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.apple.kt +++ b/data/network/src/appleMain/kotlin/dev/dimension/flare/data/network/HttpClientEngineProvider.apple.kt @@ -3,6 +3,6 @@ package dev.dimension.flare.data.network import io.ktor.client.engine.HttpClientEngine import io.ktor.client.engine.darwin.Darwin -internal actual val httpClientEngine: HttpClientEngine = +public actual fun createHttpClientEngine(): HttpClientEngine = Darwin.create { } diff --git a/data/network/src/commonMain/kotlin/dev/dimension/flare/data/network/HttpClientEngineProvider.kt b/data/network/src/commonMain/kotlin/dev/dimension/flare/data/network/HttpClientEngineProvider.kt new file mode 100644 index 0000000000..992a68bcd5 --- /dev/null +++ b/data/network/src/commonMain/kotlin/dev/dimension/flare/data/network/HttpClientEngineProvider.kt @@ -0,0 +1,5 @@ +package dev.dimension.flare.data.network + +import io.ktor.client.engine.HttpClientEngine + +public expect fun createHttpClientEngine(): HttpClientEngine diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d9cb5aac18..92b759f616 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -164,6 +164,7 @@ ktorfit-converters-response = { group = "de.jensklingenberg.ktorfit", name = "kt ktorfit-converters-call = { group = "de.jensklingenberg.ktorfit", name = "ktorfit-converters-call", version.ref = "ktorfit" } ktorfit-converters-flow = { group = "de.jensklingenberg.ktorfit", name = "ktorfit-converters-flow", version.ref = "ktorfit" } +ktor-client-core = { group = "io.ktor", name = "ktor-client-core", version.ref = "ktor" } ktor-client-content-negotiation = { group = "io.ktor", name = "ktor-client-content-negotiation", version.ref = "ktor" } ktor-serialization-kotlinx-json = { group = "io.ktor", name = "ktor-serialization-kotlinx-json", version.ref = "ktor" } ktor-serialization-kotlinx-xml = { group = "io.ktor", name = "ktor-serialization-kotlinx-xml", version.ref = "ktor" } diff --git a/presenter/features/build.gradle.kts b/presenter/features/build.gradle.kts index 2dacd26670..c38689b27e 100644 --- a/presenter/features/build.gradle.kts +++ b/presenter/features/build.gradle.kts @@ -44,6 +44,7 @@ kotlin { api(projects.core.model) api(projects.ui.model) implementation(projects.core.deeplink) + implementation(projects.data.network) api(projects.presenter.runtime) implementation(dependencies.platform(libs.compose.bom)) implementation(libs.compose.runtime) diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/Ktorfit.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/Ktorfit.kt index fd7ee6e6c1..fd854ede5b 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/Ktorfit.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/Ktorfit.kt @@ -5,11 +5,11 @@ import de.jensklingenberg.ktorfit.converter.FlowConverterFactory import de.jensklingenberg.ktorfit.converter.ResponseConverterFactory import dev.dimension.flare.common.BuildConfig import dev.dimension.flare.common.JSON +import dev.dimension.flare.data.network.createHttpClientEngine import dev.dimension.flare.data.network.mastodon.api.model.MastodonPagingConverterFactory import dev.dimension.flare.data.repository.DebugRepository import io.ktor.client.HttpClient import io.ktor.client.HttpClientConfig -import io.ktor.client.engine.HttpClientEngine import io.ktor.client.plugins.contentnegotiation.ContentNegotiation import io.ktor.client.plugins.logging.LogLevel import io.ktor.client.plugins.logging.Logging @@ -49,7 +49,7 @@ public fun ktorClient( } }, ): HttpClient = - HttpClient(httpClientEngine) { + HttpClient(createHttpClientEngine()) { config.invoke(this) install(Logging) { logger = FlareLogger @@ -62,8 +62,6 @@ public fun ktorClient( } } -internal expect val httpClientEngine: HttpClientEngine - internal data object FlareLogger : io.ktor.client.plugins.logging.Logger { override fun log(message: String) { if (BuildConfig.debug) { diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/ai/OpenAIService.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/ai/OpenAIService.kt index b1f0c35cf0..9b9c17a8bd 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/ai/OpenAIService.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/ai/OpenAIService.kt @@ -9,7 +9,7 @@ import dev.dimension.flare.common.BuildConfig import dev.dimension.flare.common.JSON import dev.dimension.flare.data.datastore.model.AppSettings import dev.dimension.flare.data.network.FlareLogger -import dev.dimension.flare.data.network.httpClientEngine +import dev.dimension.flare.data.network.createHttpClientEngine import dev.dimension.flare.data.network.ktorClient import io.ktor.client.plugins.HttpTimeout import io.ktor.client.plugins.logging.LogLevel @@ -113,7 +113,7 @@ internal class OpenAIService { OpenAIConfig( host = OpenAIHost(baseUrl = serverUrl), token = apiKey, - engine = httpClientEngine, + engine = createHttpClientEngine(), timeout = Timeout( request = 1.minutes, diff --git a/presenter/features/src/jvmMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.jvm.kt b/presenter/features/src/jvmMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.jvm.kt deleted file mode 100644 index 7c537a4017..0000000000 --- a/presenter/features/src/jvmMain/kotlin/dev/dimension/flare/data/network/HttpClientEngine.jvm.kt +++ /dev/null @@ -1,6 +0,0 @@ -package dev.dimension.flare.data.network - -import io.ktor.client.engine.HttpClientEngine -import io.ktor.client.engine.okhttp.OkHttp - -internal actual val httpClientEngine: HttpClientEngine = OkHttp.create { } From 2bb1afc0e2e7ae30d8d211117a84f28e69a6d20c Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 19:39:30 +0900 Subject: [PATCH 018/261] Extract database driver provider to data database --- data/database/build.gradle.kts | 8 ++++++++ .../data/database/DatabaseDriverProvider.androidJvm.kt | 2 +- .../flare/data/database/DatabaseDriverProvider.apple.kt | 2 +- .../flare/data/database/DatabaseDriverProvider.kt | 2 +- presenter/features/build.gradle.kts | 1 + 5 files changed, 12 insertions(+), 3 deletions(-) rename {presenter/features => data/database}/src/androidJvmMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.androidJvm.kt (63%) rename {presenter/features => data/database}/src/appleMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.apple.kt (63%) rename {presenter/features => data/database}/src/commonMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.kt (58%) diff --git a/data/database/build.gradle.kts b/data/database/build.gradle.kts index 9c95648367..cb9d18f8d3 100644 --- a/data/database/build.gradle.kts +++ b/data/database/build.gradle.kts @@ -20,6 +20,14 @@ kotlin { ) ksp(libs.room.compiler) } + + sourceSets { + val commonMain by getting { + dependencies { + api(libs.sqlite.bundled) + } + } + } } room3 { diff --git a/presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.androidJvm.kt b/data/database/src/androidJvmMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.androidJvm.kt similarity index 63% rename from presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.androidJvm.kt rename to data/database/src/androidJvmMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.androidJvm.kt index 401af34863..4db5486818 100644 --- a/presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.androidJvm.kt +++ b/data/database/src/androidJvmMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.androidJvm.kt @@ -3,4 +3,4 @@ package dev.dimension.flare.data.database import androidx.sqlite.SQLiteDriver import androidx.sqlite.driver.bundled.BundledSQLiteDriver -internal actual fun createDatabaseDriver(): SQLiteDriver = BundledSQLiteDriver() +public actual fun createDatabaseDriver(): SQLiteDriver = BundledSQLiteDriver() diff --git a/presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.apple.kt b/data/database/src/appleMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.apple.kt similarity index 63% rename from presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.apple.kt rename to data/database/src/appleMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.apple.kt index 401af34863..4db5486818 100644 --- a/presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.apple.kt +++ b/data/database/src/appleMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.apple.kt @@ -3,4 +3,4 @@ package dev.dimension.flare.data.database import androidx.sqlite.SQLiteDriver import androidx.sqlite.driver.bundled.BundledSQLiteDriver -internal actual fun createDatabaseDriver(): SQLiteDriver = BundledSQLiteDriver() +public actual fun createDatabaseDriver(): SQLiteDriver = BundledSQLiteDriver() diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.kt b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.kt similarity index 58% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.kt rename to data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.kt index 8019a8bb7f..cfeea66a63 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.kt +++ b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/DatabaseDriverProvider.kt @@ -2,4 +2,4 @@ package dev.dimension.flare.data.database import androidx.sqlite.SQLiteDriver -internal expect fun createDatabaseDriver(): SQLiteDriver +public expect fun createDatabaseDriver(): SQLiteDriver diff --git a/presenter/features/build.gradle.kts b/presenter/features/build.gradle.kts index c38689b27e..33ca025952 100644 --- a/presenter/features/build.gradle.kts +++ b/presenter/features/build.gradle.kts @@ -44,6 +44,7 @@ kotlin { api(projects.core.model) api(projects.ui.model) implementation(projects.core.deeplink) + implementation(projects.data.database) implementation(projects.data.network) api(projects.presenter.runtime) implementation(dependencies.platform(libs.compose.bom)) From e4d24e92b182eea3ea0a195304463ebe4121d3d6 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 19:42:07 +0900 Subject: [PATCH 019/261] Move platform path producer to data datastore --- data/datastore/build.gradle.kts | 8 ++++++++ .../dev/dimension/flare/data/io/PlatformPathProducer.kt | 0 presenter/features/build.gradle.kts | 1 + 3 files changed, 9 insertions(+) rename {presenter/features => data/datastore}/src/commonMain/kotlin/dev/dimension/flare/data/io/PlatformPathProducer.kt (100%) diff --git a/data/datastore/build.gradle.kts b/data/datastore/build.gradle.kts index d59a6b5c7d..89faa52681 100644 --- a/data/datastore/build.gradle.kts +++ b/data/datastore/build.gradle.kts @@ -17,4 +17,12 @@ kotlin { FlarePlatform.IOS, ) } + + sourceSets { + val commonMain by getting { + dependencies { + api(libs.okio) + } + } + } } diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/io/PlatformPathProducer.kt b/data/datastore/src/commonMain/kotlin/dev/dimension/flare/data/io/PlatformPathProducer.kt similarity index 100% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/io/PlatformPathProducer.kt rename to data/datastore/src/commonMain/kotlin/dev/dimension/flare/data/io/PlatformPathProducer.kt diff --git a/presenter/features/build.gradle.kts b/presenter/features/build.gradle.kts index 33ca025952..e3b6f7ebdd 100644 --- a/presenter/features/build.gradle.kts +++ b/presenter/features/build.gradle.kts @@ -45,6 +45,7 @@ kotlin { api(projects.ui.model) implementation(projects.core.deeplink) implementation(projects.data.database) + implementation(projects.data.datastore) implementation(projects.data.network) api(projects.presenter.runtime) implementation(dependencies.platform(libs.compose.bom)) From 2fb70c46567afa40bb292694326a098d922ae74a Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 19:47:33 +0900 Subject: [PATCH 020/261] Move locale helper to core common --- .../kotlin/dev/dimension/flare/common/Locale.android.kt | 4 ++-- .../kotlin/dev/dimension/flare/common/Locale.apple.kt | 4 ++-- .../commonMain/kotlin/dev/dimension/flare/common/Locale.kt | 5 +++++ .../jvmMain/kotlin/dev/dimension/flare/common/Locale.jvm.kt | 4 ++-- .../commonMain/kotlin/dev/dimension/flare/common/Locale.kt | 5 ----- 5 files changed, 11 insertions(+), 11 deletions(-) rename {presenter/features => core/common}/src/androidMain/kotlin/dev/dimension/flare/common/Locale.android.kt (62%) rename {presenter/features => core/common}/src/appleMain/kotlin/dev/dimension/flare/common/Locale.apple.kt (77%) create mode 100644 core/common/src/commonMain/kotlin/dev/dimension/flare/common/Locale.kt rename {presenter/features => core/common}/src/jvmMain/kotlin/dev/dimension/flare/common/Locale.jvm.kt (62%) delete mode 100644 presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/Locale.kt diff --git a/presenter/features/src/androidMain/kotlin/dev/dimension/flare/common/Locale.android.kt b/core/common/src/androidMain/kotlin/dev/dimension/flare/common/Locale.android.kt similarity index 62% rename from presenter/features/src/androidMain/kotlin/dev/dimension/flare/common/Locale.android.kt rename to core/common/src/androidMain/kotlin/dev/dimension/flare/common/Locale.android.kt index c5b212248e..d077a38bb1 100644 --- a/presenter/features/src/androidMain/kotlin/dev/dimension/flare/common/Locale.android.kt +++ b/core/common/src/androidMain/kotlin/dev/dimension/flare/common/Locale.android.kt @@ -2,7 +2,7 @@ package dev.dimension.flare.common import java.util.Locale -internal actual object Locale { - actual val language: String +public actual object Locale { + public actual val language: String get() = Locale.getDefault().toLanguageTag() } diff --git a/presenter/features/src/appleMain/kotlin/dev/dimension/flare/common/Locale.apple.kt b/core/common/src/appleMain/kotlin/dev/dimension/flare/common/Locale.apple.kt similarity index 77% rename from presenter/features/src/appleMain/kotlin/dev/dimension/flare/common/Locale.apple.kt rename to core/common/src/appleMain/kotlin/dev/dimension/flare/common/Locale.apple.kt index 251d2458ad..4b9dc760fa 100644 --- a/presenter/features/src/appleMain/kotlin/dev/dimension/flare/common/Locale.apple.kt +++ b/core/common/src/appleMain/kotlin/dev/dimension/flare/common/Locale.apple.kt @@ -4,7 +4,7 @@ import platform.Foundation.NSLocale import platform.Foundation.currentLocale import platform.Foundation.localeIdentifier -internal actual object Locale { - actual val language: String +public actual object Locale { + public actual val language: String get() = NSLocale.currentLocale.localeIdentifier.replace('_', '-') } diff --git a/core/common/src/commonMain/kotlin/dev/dimension/flare/common/Locale.kt b/core/common/src/commonMain/kotlin/dev/dimension/flare/common/Locale.kt new file mode 100644 index 0000000000..ea4f1a9bac --- /dev/null +++ b/core/common/src/commonMain/kotlin/dev/dimension/flare/common/Locale.kt @@ -0,0 +1,5 @@ +package dev.dimension.flare.common + +public expect object Locale { + public val language: String +} diff --git a/presenter/features/src/jvmMain/kotlin/dev/dimension/flare/common/Locale.jvm.kt b/core/common/src/jvmMain/kotlin/dev/dimension/flare/common/Locale.jvm.kt similarity index 62% rename from presenter/features/src/jvmMain/kotlin/dev/dimension/flare/common/Locale.jvm.kt rename to core/common/src/jvmMain/kotlin/dev/dimension/flare/common/Locale.jvm.kt index c5b212248e..d077a38bb1 100644 --- a/presenter/features/src/jvmMain/kotlin/dev/dimension/flare/common/Locale.jvm.kt +++ b/core/common/src/jvmMain/kotlin/dev/dimension/flare/common/Locale.jvm.kt @@ -2,7 +2,7 @@ package dev.dimension.flare.common import java.util.Locale -internal actual object Locale { - actual val language: String +public actual object Locale { + public actual val language: String get() = Locale.getDefault().toLanguageTag() } diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/Locale.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/Locale.kt deleted file mode 100644 index bb759325be..0000000000 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/common/Locale.kt +++ /dev/null @@ -1,5 +0,0 @@ -package dev.dimension.flare.common - -internal expect object Locale { - val language: String -} From ddc780d9eff3d0f3046b9cc65128f67e00fdf915 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 19:51:16 +0900 Subject: [PATCH 021/261] Move app database models to data database --- data/database/build.gradle.kts | 3 +++ .../database/adapter/MicroBlogKeyConverter.kt | 11 ++++++++++ .../database/adapter/PlatformTypeConverter.kt | 11 ++++++++++ .../adapter/SubscriptionTypeConverter.kt | 20 +++++++++++++++++++ .../database/app/model/AppDatabaseExport.kt | 2 +- .../data/database/app/model/DbAccount.kt | 2 +- .../data/database/app/model/DbApplication.kt | 2 +- .../database/app/model/DbKeywordFilter.kt | 2 +- .../data/database/app/model/DbRssSources.kt | 2 +- .../database/app/model/DbSearchHistory.kt | 2 +- presenter/features/build.gradle.kts | 2 +- .../database/adapter/MicroBlogKeyConverter.kt | 11 ---------- .../database/adapter/PlatformTypeConverter.kt | 11 ---------- .../adapter/SubscriptionTypeConverter.kt | 20 ------------------- 14 files changed, 52 insertions(+), 49 deletions(-) create mode 100644 data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/MicroBlogKeyConverter.kt create mode 100644 data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/PlatformTypeConverter.kt create mode 100644 data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/SubscriptionTypeConverter.kt rename {presenter/features => data/database}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/AppDatabaseExport.kt (91%) rename {presenter/features => data/database}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbAccount.kt (94%) rename {presenter/features => data/database}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbApplication.kt (91%) rename {presenter/features => data/database}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbKeywordFilter.kt (92%) rename {presenter/features => data/database}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbRssSources.kt (95%) rename {presenter/features => data/database}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbSearchHistory.kt (87%) delete mode 100644 presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/MicroBlogKeyConverter.kt delete mode 100644 presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/PlatformTypeConverter.kt delete mode 100644 presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/SubscriptionTypeConverter.kt diff --git a/data/database/build.gradle.kts b/data/database/build.gradle.kts index cb9d18f8d3..89414f0abc 100644 --- a/data/database/build.gradle.kts +++ b/data/database/build.gradle.kts @@ -24,7 +24,10 @@ kotlin { sourceSets { val commonMain by getting { dependencies { + api(projects.core.model) + api(libs.room.runtime) api(libs.sqlite.bundled) + implementation(libs.kotlinx.serialization.json) } } } diff --git a/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/MicroBlogKeyConverter.kt b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/MicroBlogKeyConverter.kt new file mode 100644 index 0000000000..6bc50b57a7 --- /dev/null +++ b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/MicroBlogKeyConverter.kt @@ -0,0 +1,11 @@ +package dev.dimension.flare.data.database.adapter + +import dev.dimension.flare.model.MicroBlogKey + +public class MicroBlogKeyConverter { + @androidx.room3.TypeConverter + public fun fromString(value: String): MicroBlogKey = MicroBlogKey.valueOf(value) + + @androidx.room3.TypeConverter + public fun fromEnum(value: MicroBlogKey): String = value.toString() +} diff --git a/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/PlatformTypeConverter.kt b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/PlatformTypeConverter.kt new file mode 100644 index 0000000000..d0d458b9c3 --- /dev/null +++ b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/PlatformTypeConverter.kt @@ -0,0 +1,11 @@ +package dev.dimension.flare.data.database.adapter + +import dev.dimension.flare.model.PlatformType + +public class PlatformTypeConverter { + @androidx.room3.TypeConverter + public fun fromString(value: String): PlatformType = PlatformType.valueOf(value) + + @androidx.room3.TypeConverter + public fun fromEnum(value: PlatformType): String = value.name +} diff --git a/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/SubscriptionTypeConverter.kt b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/SubscriptionTypeConverter.kt new file mode 100644 index 0000000000..f151435abf --- /dev/null +++ b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/SubscriptionTypeConverter.kt @@ -0,0 +1,20 @@ +package dev.dimension.flare.data.database.adapter + +import dev.dimension.flare.data.database.app.model.RssDisplayMode +import dev.dimension.flare.data.database.app.model.SubscriptionType + +public class SubscriptionTypeConverter { + @androidx.room3.TypeConverter + public fun fromString(value: String): SubscriptionType = SubscriptionType.valueOf(value) + + @androidx.room3.TypeConverter + public fun fromEnum(value: SubscriptionType): String = value.name +} + +public class RssDisplayModeConverter { + @androidx.room3.TypeConverter + public fun fromString(value: String): RssDisplayMode = RssDisplayMode.valueOf(value) + + @androidx.room3.TypeConverter + public fun fromEnum(value: RssDisplayMode): String = value.name +} diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/AppDatabaseExport.kt b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/AppDatabaseExport.kt similarity index 91% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/AppDatabaseExport.kt rename to data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/AppDatabaseExport.kt index 2ed8ffa120..b8e3e7daf0 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/AppDatabaseExport.kt +++ b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/AppDatabaseExport.kt @@ -3,7 +3,7 @@ package dev.dimension.flare.data.database.app.model import kotlinx.serialization.Serializable @Serializable -internal data class AppDatabaseExport( +public data class AppDatabaseExport( val accounts: List = emptyList(), val applications: List = emptyList(), val keywordFilters: List = emptyList(), diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbAccount.kt b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbAccount.kt similarity index 94% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbAccount.kt rename to data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbAccount.kt index eb1b25ed1b..329b3eb186 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbAccount.kt +++ b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbAccount.kt @@ -9,7 +9,7 @@ import kotlinx.serialization.Serializable @Serializable @Entity -internal data class DbAccount( +public data class DbAccount( @PrimaryKey val account_key: MicroBlogKey, val credential_json: String, val platform_type: PlatformType, diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbApplication.kt b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbApplication.kt similarity index 91% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbApplication.kt rename to data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbApplication.kt index dd3eef5bb5..0b7461673f 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbApplication.kt +++ b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbApplication.kt @@ -7,7 +7,7 @@ import kotlinx.serialization.Serializable @Serializable @Entity -internal data class DbApplication( +public data class DbApplication( @PrimaryKey val host: String, val credential_json: String, val platform_type: PlatformType, diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbKeywordFilter.kt b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbKeywordFilter.kt similarity index 92% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbKeywordFilter.kt rename to data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbKeywordFilter.kt index 1e92e03b89..3fe6c900d1 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbKeywordFilter.kt +++ b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbKeywordFilter.kt @@ -7,7 +7,7 @@ import kotlinx.serialization.Serializable @Serializable @Entity -internal data class DbKeywordFilter( +public data class DbKeywordFilter( @PrimaryKey val keyword: String, val for_timeline: Long, diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbRssSources.kt b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbRssSources.kt similarity index 95% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbRssSources.kt rename to data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbRssSources.kt index 9b60bcaf8c..26ae4d0536 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbRssSources.kt +++ b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbRssSources.kt @@ -22,7 +22,7 @@ public enum class RssDisplayMode { @Serializable @Entity -internal data class DbRssSources( +public data class DbRssSources( @PrimaryKey(autoGenerate = true) val id: Int = 0, val url: String, diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbSearchHistory.kt b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbSearchHistory.kt similarity index 87% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbSearchHistory.kt rename to data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbSearchHistory.kt index b239551738..c98373848b 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbSearchHistory.kt +++ b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/model/DbSearchHistory.kt @@ -6,7 +6,7 @@ import kotlinx.serialization.Serializable @Serializable @Entity -internal data class DbSearchHistory( +public data class DbSearchHistory( @PrimaryKey val search: String, val created_at: Long, diff --git a/presenter/features/build.gradle.kts b/presenter/features/build.gradle.kts index e3b6f7ebdd..04d4c9adb0 100644 --- a/presenter/features/build.gradle.kts +++ b/presenter/features/build.gradle.kts @@ -44,7 +44,7 @@ kotlin { api(projects.core.model) api(projects.ui.model) implementation(projects.core.deeplink) - implementation(projects.data.database) + api(projects.data.database) implementation(projects.data.datastore) implementation(projects.data.network) api(projects.presenter.runtime) diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/MicroBlogKeyConverter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/MicroBlogKeyConverter.kt deleted file mode 100644 index f1c6bc6596..0000000000 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/MicroBlogKeyConverter.kt +++ /dev/null @@ -1,11 +0,0 @@ -package dev.dimension.flare.data.database.adapter - -import dev.dimension.flare.model.MicroBlogKey - -internal class MicroBlogKeyConverter { - @androidx.room3.TypeConverter - fun fromString(value: String): MicroBlogKey = MicroBlogKey.valueOf(value) - - @androidx.room3.TypeConverter - fun fromEnum(value: MicroBlogKey): String = value.toString() -} diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/PlatformTypeConverter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/PlatformTypeConverter.kt deleted file mode 100644 index 31ddc3a7fa..0000000000 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/PlatformTypeConverter.kt +++ /dev/null @@ -1,11 +0,0 @@ -package dev.dimension.flare.data.database.adapter - -import dev.dimension.flare.model.PlatformType - -internal class PlatformTypeConverter { - @androidx.room3.TypeConverter - fun fromString(value: String): PlatformType = PlatformType.valueOf(value) - - @androidx.room3.TypeConverter - fun fromEnum(value: PlatformType): String = value.name -} diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/SubscriptionTypeConverter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/SubscriptionTypeConverter.kt deleted file mode 100644 index f76b83ed5e..0000000000 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/adapter/SubscriptionTypeConverter.kt +++ /dev/null @@ -1,20 +0,0 @@ -package dev.dimension.flare.data.database.adapter - -import dev.dimension.flare.data.database.app.model.RssDisplayMode -import dev.dimension.flare.data.database.app.model.SubscriptionType - -internal class SubscriptionTypeConverter { - @androidx.room3.TypeConverter - fun fromString(value: String): SubscriptionType = SubscriptionType.valueOf(value) - - @androidx.room3.TypeConverter - fun fromEnum(value: SubscriptionType): String = value.name -} - -internal class RssDisplayModeConverter { - @androidx.room3.TypeConverter - fun fromString(value: String): RssDisplayMode = RssDisplayMode.valueOf(value) - - @androidx.room3.TypeConverter - fun fromEnum(value: RssDisplayMode): String = value.name -} From f4ba75e8a4c8cd54b1fa2e220fcd3e579351ad70 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 19:53:27 +0900 Subject: [PATCH 022/261] Move app database DAOs to data database --- data/database/build.gradle.kts | 1 + .../flare/data/database/app/dao/AccountDao.kt | 24 +++++++++---------- .../data/database/app/dao/ApplicationDao.kt | 18 +++++++------- .../data/database/app/dao/KeywordFilterDao.kt | 18 +++++++------- .../data/database/app/dao/RssSourceDao.kt | 16 ++++++------- .../data/database/app/dao/SearchHistoryDao.kt | 10 ++++---- 6 files changed, 44 insertions(+), 43 deletions(-) rename {presenter/features => data/database}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/AccountDao.kt (68%) rename {presenter/features => data/database}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/ApplicationDao.kt (73%) rename {presenter/features => data/database}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/KeywordFilterDao.kt (74%) rename {presenter/features => data/database}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/RssSourceDao.kt (68%) rename {presenter/features => data/database}/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/SearchHistoryDao.kt (69%) diff --git a/data/database/build.gradle.kts b/data/database/build.gradle.kts index 89414f0abc..992e9fc98e 100644 --- a/data/database/build.gradle.kts +++ b/data/database/build.gradle.kts @@ -25,6 +25,7 @@ kotlin { val commonMain by getting { dependencies { api(projects.core.model) + api(libs.kotlinx.coroutines.core) api(libs.room.runtime) api(libs.sqlite.bundled) implementation(libs.kotlinx.serialization.json) diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/AccountDao.kt b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/AccountDao.kt similarity index 68% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/AccountDao.kt rename to data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/AccountDao.kt index 9c273c120b..969790d082 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/AccountDao.kt +++ b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/AccountDao.kt @@ -9,46 +9,46 @@ import dev.dimension.flare.model.MicroBlogKey import kotlinx.coroutines.flow.Flow @Dao -internal interface AccountDao { +public interface AccountDao { @Query("SELECT * FROM DbAccount ORDER BY last_active DESC LIMIT 1") - fun activeAccount(): Flow + public fun activeAccount(): Flow @Query("SELECT * FROM DbAccount ORDER BY sort_id") - fun sortedAccounts(): Flow> + public fun sortedAccounts(): Flow> @Query("SELECT * FROM DbAccount") - fun allAccounts(): Flow> + public fun allAccounts(): Flow> @Insert(onConflict = OnConflictStrategy.REPLACE) - suspend fun insert(account: DbAccount) + public suspend fun insert(account: DbAccount) @Query("UPDATE DbAccount SET last_active = :lastActive WHERE account_key = :accountKey") - suspend fun setLastActive( + public suspend fun setLastActive( accountKey: MicroBlogKey, lastActive: Long, ) @Query("SELECT * FROM DbAccount WHERE account_key = :accountKey") - fun get(accountKey: MicroBlogKey): Flow + public fun get(accountKey: MicroBlogKey): Flow @Query("SELECT * FROM DbAccount WHERE account_key = :accountKey") - suspend fun getAccount(accountKey: MicroBlogKey): DbAccount? + public suspend fun getAccount(accountKey: MicroBlogKey): DbAccount? @Query("DELETE FROM DbAccount WHERE account_key = :accountKey") - suspend fun delete(accountKey: MicroBlogKey) + public suspend fun delete(accountKey: MicroBlogKey) @Query("UPDATE DbAccount SET credential_json = :credentialJson WHERE account_key = :accountKey") - suspend fun setCredential( + public suspend fun setCredential( accountKey: MicroBlogKey, credentialJson: String, ) @Query("UPDATE DbAccount SET sort_id = :sortId WHERE account_key = :accountKey") - suspend fun setSortId( + public suspend fun setSortId( accountKey: MicroBlogKey, sortId: Long, ) @Query("SELECT MAX(sort_id) FROM DbAccount") - suspend fun getMaxSortId(): Long? + public suspend fun getMaxSortId(): Long? } diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/ApplicationDao.kt b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/ApplicationDao.kt similarity index 73% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/ApplicationDao.kt rename to data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/ApplicationDao.kt index 58d5f94374..747bd08752 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/ApplicationDao.kt +++ b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/ApplicationDao.kt @@ -9,35 +9,35 @@ import dev.dimension.flare.model.PlatformType import kotlinx.coroutines.flow.Flow @Dao -internal interface ApplicationDao { +public interface ApplicationDao { @Query("SELECT * FROM DbApplication") - fun allApplication(): Flow> + public fun allApplication(): Flow> @Query("SELECT * FROM DbApplication WHERE host = :host") - fun get(host: String): Flow + public fun get(host: String): Flow @Query("SELECT * FROM DbApplication WHERE has_pending_oauth_request = 1") - fun getPending(): Flow> + public fun getPending(): Flow> @Insert(onConflict = OnConflictStrategy.REPLACE) - suspend fun insert(application: DbApplication) + public suspend fun insert(application: DbApplication) @Query("UPDATE DbApplication SET credential_json = :credentialJson, platform_type = :platformType WHERE host = :host") - suspend fun update( + public suspend fun update( host: String, credentialJson: String, platformType: PlatformType, ) @Query("UPDATE DbApplication SET has_pending_oauth_request = :hasPendingOauthRequest WHERE host = :host") - suspend fun updatePending( + public suspend fun updatePending( host: String, hasPendingOauthRequest: Long, ) @Query("DELETE FROM DbApplication WHERE host = :host") - suspend fun delete(host: String) + public suspend fun delete(host: String) @Query("UPDATE DbApplication SET has_pending_oauth_request = 0 WHERE has_pending_oauth_request = 1") - suspend fun clearPending() + public suspend fun clearPending() } diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/KeywordFilterDao.kt b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/KeywordFilterDao.kt similarity index 74% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/KeywordFilterDao.kt rename to data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/KeywordFilterDao.kt index 401d121c97..56e5884ea3 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/KeywordFilterDao.kt +++ b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/KeywordFilterDao.kt @@ -8,20 +8,20 @@ import dev.dimension.flare.data.database.app.model.DbKeywordFilter import kotlinx.coroutines.flow.Flow @Dao -internal interface KeywordFilterDao { +public interface KeywordFilterDao { @Insert(onConflict = OnConflictStrategy.REPLACE) - suspend fun insert(keywordFilter: DbKeywordFilter) + public suspend fun insert(keywordFilter: DbKeywordFilter) @Query("SELECT * FROM DbKeywordFilter") - fun selectAll(): Flow> + public fun selectAll(): Flow> @Query("SELECT * FROM DbKeywordFilter WHERE expired_at = 0 OR expired_at > :currentTime") - fun selectAllNotExpired(currentTime: Long): Flow> + public fun selectAllNotExpired(currentTime: Long): Flow> @Query( "SELECT * FROM DbKeywordFilter WHERE (expired_at = 0 OR expired_at > :currentTime) AND (for_timeline = :forTimeline OR for_notification = :forNotification OR for_search = :forSearch)", ) - fun selectNotExpiredFor( + public fun selectNotExpiredFor( currentTime: Long, forTimeline: Long, forNotification: Long, @@ -29,18 +29,18 @@ internal interface KeywordFilterDao { ): Flow> @Query("SELECT * FROM DbKeywordFilter WHERE keyword = :keyword") - fun selectByKeyword(keyword: String): Flow + public fun selectByKeyword(keyword: String): Flow @Query("DELETE FROM DbKeywordFilter WHERE keyword = :keyword") - suspend fun deleteByKeyword(keyword: String) + public suspend fun deleteByKeyword(keyword: String) @Query("DELETE FROM DbKeywordFilter") - suspend fun deleteAll() + public suspend fun deleteAll() @Query( "UPDATE DbKeywordFilter SET for_timeline = :forTimeline, for_notification = :forNotification, for_search = :forSearch, expired_at = :expiredAt, is_regex = :isRegex WHERE keyword = :keyword", ) - suspend fun update( + public suspend fun update( keyword: String, forTimeline: Long, forNotification: Long, diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/RssSourceDao.kt b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/RssSourceDao.kt similarity index 68% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/RssSourceDao.kt rename to data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/RssSourceDao.kt index 0b5933a901..d7215ac929 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/RssSourceDao.kt +++ b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/RssSourceDao.kt @@ -8,27 +8,27 @@ import dev.dimension.flare.data.database.app.model.SubscriptionType import kotlinx.coroutines.flow.Flow @Dao -internal interface RssSourceDao { +public interface RssSourceDao { @Insert(onConflict = androidx.room3.OnConflictStrategy.REPLACE) - suspend fun insert(data: DbRssSources) + public suspend fun insert(data: DbRssSources) @Insert(onConflict = androidx.room3.OnConflictStrategy.REPLACE) - suspend fun insertAll(data: List) + public suspend fun insertAll(data: List) @Query("SELECT * FROM DbRssSources") - fun getAll(): Flow> + public fun getAll(): Flow> @Query("DELETE FROM DbRssSources WHERE id = :id") - suspend fun delete(id: Int) + public suspend fun delete(id: Int) @Query("SELECT * FROM DbRssSources WHERE id = :id") - fun get(id: Int): Flow + public fun get(id: Int): Flow @Query("SELECT * FROM DbRssSources WHERE url = :url") - suspend fun getByUrl(url: String): List + public suspend fun getByUrl(url: String): List @Query("SELECT * FROM DbRssSources WHERE url = :url AND type = :type") - suspend fun getByUrlAndType( + public suspend fun getByUrlAndType( url: String, type: SubscriptionType, ): List diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/SearchHistoryDao.kt b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/SearchHistoryDao.kt similarity index 69% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/SearchHistoryDao.kt rename to data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/SearchHistoryDao.kt index 81a379baa2..2635a369e0 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/SearchHistoryDao.kt +++ b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/app/dao/SearchHistoryDao.kt @@ -8,16 +8,16 @@ import dev.dimension.flare.data.database.app.model.DbSearchHistory import kotlinx.coroutines.flow.Flow @Dao -internal interface SearchHistoryDao { +public interface SearchHistoryDao { @Insert(onConflict = OnConflictStrategy.REPLACE) - suspend fun insert(searchHistory: DbSearchHistory) + public suspend fun insert(searchHistory: DbSearchHistory) @Query("SELECT * FROM DbSearchHistory ORDER BY created_at DESC") - fun select(): Flow> + public fun select(): Flow> @Query("DELETE FROM DbSearchHistory WHERE search = :search") - suspend fun delete(search: String) + public suspend fun delete(search: String) @Query("DELETE FROM DbSearchHistory") - suspend fun deleteAll() + public suspend fun deleteAll() } From f2a0509a4acbc0bdc228531009a4e4332d01433a Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 19:55:05 +0900 Subject: [PATCH 023/261] Move JVM file system helper to core common --- core/common/build.gradle.kts | 5 +++++ .../kotlin/dev/dimension/flare/common/FileSystemUtilsExt.kt | 0 2 files changed, 5 insertions(+) rename {presenter/features => core/common}/src/jvmMain/kotlin/dev/dimension/flare/common/FileSystemUtilsExt.kt (100%) diff --git a/core/common/build.gradle.kts b/core/common/build.gradle.kts index 0ee47830af..4a93270c8e 100644 --- a/core/common/build.gradle.kts +++ b/core/common/build.gradle.kts @@ -28,5 +28,10 @@ kotlin { api(libs.xmlUtil) } } + val jvmMain by getting { + dependencies { + implementation(libs.commons.lang3) + } + } } } diff --git a/presenter/features/src/jvmMain/kotlin/dev/dimension/flare/common/FileSystemUtilsExt.kt b/core/common/src/jvmMain/kotlin/dev/dimension/flare/common/FileSystemUtilsExt.kt similarity index 100% rename from presenter/features/src/jvmMain/kotlin/dev/dimension/flare/common/FileSystemUtilsExt.kt rename to core/common/src/jvmMain/kotlin/dev/dimension/flare/common/FileSystemUtilsExt.kt From 108f3596a22b2dd931734f26bed659eb06633cf2 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 19:57:33 +0900 Subject: [PATCH 024/261] Move database driver factory to data database --- data/database/build.gradle.kts | 5 +++++ .../flare/data/database/DriverFactory.android.kt | 9 +++++---- .../dimension/flare/data/database/DriverFactory.apple.kt | 7 ++++--- .../dev/dimension/flare/data/database/DriverFactory.kt | 6 +++--- .../dimension/flare/data/database/DriverFactory.jvm.kt | 6 +++--- 5 files changed, 20 insertions(+), 13 deletions(-) rename {presenter/features => data/database}/src/androidMain/kotlin/dev/dimension/flare/data/database/DriverFactory.android.kt (83%) rename {presenter/features => data/database}/src/appleMain/kotlin/dev/dimension/flare/data/database/DriverFactory.apple.kt (93%) rename {presenter/features => data/database}/src/commonMain/kotlin/dev/dimension/flare/data/database/DriverFactory.kt (62%) rename {presenter/features => data/database}/src/jvmMain/kotlin/dev/dimension/flare/data/database/DriverFactory.jvm.kt (86%) diff --git a/data/database/build.gradle.kts b/data/database/build.gradle.kts index 992e9fc98e..b35438179d 100644 --- a/data/database/build.gradle.kts +++ b/data/database/build.gradle.kts @@ -31,6 +31,11 @@ kotlin { implementation(libs.kotlinx.serialization.json) } } + val jvmMain by getting { + dependencies { + implementation(projects.core.common) + } + } } } diff --git a/presenter/features/src/androidMain/kotlin/dev/dimension/flare/data/database/DriverFactory.android.kt b/data/database/src/androidMain/kotlin/dev/dimension/flare/data/database/DriverFactory.android.kt similarity index 83% rename from presenter/features/src/androidMain/kotlin/dev/dimension/flare/data/database/DriverFactory.android.kt rename to data/database/src/androidMain/kotlin/dev/dimension/flare/data/database/DriverFactory.android.kt index 99d25fb49f..78bdc2d308 100644 --- a/presenter/features/src/androidMain/kotlin/dev/dimension/flare/data/database/DriverFactory.android.kt +++ b/data/database/src/androidMain/kotlin/dev/dimension/flare/data/database/DriverFactory.android.kt @@ -5,10 +5,11 @@ import androidx.room3.Room import androidx.room3.RoomDatabase import java.io.File -internal actual class DriverFactory( - private val context: Context, +public actual class DriverFactory( + @PublishedApi + internal val context: Context, ) { - actual inline fun createBuilder( + public actual inline fun createBuilder( name: String, isCache: Boolean, ): RoomDatabase.Builder { @@ -25,7 +26,7 @@ internal actual class DriverFactory( ) } - actual fun deleteDatabase( + public actual fun deleteDatabase( name: String, isCache: Boolean, ) { diff --git a/presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/database/DriverFactory.apple.kt b/data/database/src/appleMain/kotlin/dev/dimension/flare/data/database/DriverFactory.apple.kt similarity index 93% rename from presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/database/DriverFactory.apple.kt rename to data/database/src/appleMain/kotlin/dev/dimension/flare/data/database/DriverFactory.apple.kt index 35a12be7fe..0ce31fd7d3 100644 --- a/presenter/features/src/appleMain/kotlin/dev/dimension/flare/data/database/DriverFactory.apple.kt +++ b/data/database/src/appleMain/kotlin/dev/dimension/flare/data/database/DriverFactory.apple.kt @@ -11,8 +11,8 @@ import platform.Foundation.NSSearchPathForDirectoriesInDomains import platform.Foundation.NSUserDomainMask import platform.Foundation.stringWithString -internal actual class DriverFactory { - actual inline fun createBuilder( +public actual class DriverFactory { + public actual inline fun createBuilder( name: String, isCache: Boolean, ): RoomDatabase.Builder { @@ -30,7 +30,7 @@ internal actual class DriverFactory { } @OptIn(ExperimentalForeignApi::class) - actual fun deleteDatabase( + public actual fun deleteDatabase( name: String, isCache: Boolean, ) { @@ -42,6 +42,7 @@ internal actual class DriverFactory { } } + @PublishedApi internal fun databaseDirPath(): String = iosDirPath("databases") @OptIn(kotlinx.cinterop.ExperimentalForeignApi::class, kotlinx.cinterop.UnsafeNumber::class) diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/DriverFactory.kt b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/DriverFactory.kt similarity index 62% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/DriverFactory.kt rename to data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/DriverFactory.kt index 311a3ccd41..7dc7d675f4 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/database/DriverFactory.kt +++ b/data/database/src/commonMain/kotlin/dev/dimension/flare/data/database/DriverFactory.kt @@ -2,13 +2,13 @@ package dev.dimension.flare.data.database import androidx.room3.RoomDatabase -internal expect class DriverFactory { - inline fun createBuilder( +public expect class DriverFactory { + public inline fun createBuilder( name: String, isCache: Boolean = false, ): RoomDatabase.Builder - fun deleteDatabase( + public fun deleteDatabase( name: String, isCache: Boolean, ) diff --git a/presenter/features/src/jvmMain/kotlin/dev/dimension/flare/data/database/DriverFactory.jvm.kt b/data/database/src/jvmMain/kotlin/dev/dimension/flare/data/database/DriverFactory.jvm.kt similarity index 86% rename from presenter/features/src/jvmMain/kotlin/dev/dimension/flare/data/database/DriverFactory.jvm.kt rename to data/database/src/jvmMain/kotlin/dev/dimension/flare/data/database/DriverFactory.jvm.kt index 705196b1db..40085a2fdd 100644 --- a/presenter/features/src/jvmMain/kotlin/dev/dimension/flare/data/database/DriverFactory.jvm.kt +++ b/data/database/src/jvmMain/kotlin/dev/dimension/flare/data/database/DriverFactory.jvm.kt @@ -5,8 +5,8 @@ import androidx.room3.RoomDatabase import dev.dimension.flare.common.FileSystemUtilsExt import java.io.File -internal actual class DriverFactory { - actual inline fun createBuilder( +public actual class DriverFactory { + public actual inline fun createBuilder( name: String, isCache: Boolean, ): RoomDatabase.Builder { @@ -22,7 +22,7 @@ internal actual class DriverFactory { ) } - actual fun deleteDatabase( + public actual fun deleteDatabase( name: String, isCache: Boolean, ) { From 1b660e9558536781093e343099d7eff23deef9b0 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 20:01:10 +0900 Subject: [PATCH 025/261] Move datastore settings models to data datastore --- data/datastore/build.gradle.kts | 1 + .../flare/data/datastore/model/AiPromptDefaults.kt | 6 +++--- .../dev/dimension/flare/data/datastore/model/AppSettings.kt | 0 .../dev/dimension/flare/data/datastore/model/FlareConfig.kt | 2 +- presenter/features/build.gradle.kts | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) rename {presenter/features => data/datastore}/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/AiPromptDefaults.kt (94%) rename {presenter/features => data/datastore}/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/AppSettings.kt (100%) rename {presenter/features => data/datastore}/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/FlareConfig.kt (87%) diff --git a/data/datastore/build.gradle.kts b/data/datastore/build.gradle.kts index 89faa52681..c14a01d800 100644 --- a/data/datastore/build.gradle.kts +++ b/data/datastore/build.gradle.kts @@ -22,6 +22,7 @@ kotlin { val commonMain by getting { dependencies { api(libs.okio) + implementation(libs.kotlinx.serialization.json) } } } diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/AiPromptDefaults.kt b/data/datastore/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/AiPromptDefaults.kt similarity index 94% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/AiPromptDefaults.kt rename to data/datastore/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/AiPromptDefaults.kt index b9614429c7..a51a85f99c 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/AiPromptDefaults.kt +++ b/data/datastore/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/AiPromptDefaults.kt @@ -1,7 +1,7 @@ package dev.dimension.flare.data.datastore.model -internal object AiPromptDefaults { - const val TRANSLATE_PROMPT: String = +public object AiPromptDefaults { + public const val TRANSLATE_PROMPT: String = "You are a translation engine. Output only the translated template.\n" + "The target language is {target_language}.\n" + "The input is a plain-text translation template extracted from a social post.\n" + @@ -31,7 +31,7 @@ internal object AiPromptDefaults { "Translate the following template to {target_language}:\n" + "{source_text}" - const val TLDR_PROMPT: String = + public const val TLDR_PROMPT: String = "Summarize the following text in {target_language}\n" + "Respond in raw text, limit the response to 200 characters.\n" + "Text: \"{source_text}\"" diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/AppSettings.kt b/data/datastore/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/AppSettings.kt similarity index 100% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/AppSettings.kt rename to data/datastore/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/AppSettings.kt diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/FlareConfig.kt b/data/datastore/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/FlareConfig.kt similarity index 87% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/FlareConfig.kt rename to data/datastore/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/FlareConfig.kt index f21d10939c..9a6325026c 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/FlareConfig.kt +++ b/data/datastore/src/commonMain/kotlin/dev/dimension/flare/data/datastore/model/FlareConfig.kt @@ -5,6 +5,6 @@ import kotlinx.serialization.Serializable private const val DEFAULT_SERVER_URL = "https://api.flareapp.moe" @Serializable -internal data class FlareConfig( +public data class FlareConfig( val serverUrl: String = DEFAULT_SERVER_URL, ) diff --git a/presenter/features/build.gradle.kts b/presenter/features/build.gradle.kts index 04d4c9adb0..dd2251bb08 100644 --- a/presenter/features/build.gradle.kts +++ b/presenter/features/build.gradle.kts @@ -45,7 +45,7 @@ kotlin { api(projects.ui.model) implementation(projects.core.deeplink) api(projects.data.database) - implementation(projects.data.datastore) + api(projects.data.datastore) implementation(projects.data.network) api(projects.presenter.runtime) implementation(dependencies.platform(libs.compose.bom)) From 125668c60b914991e797650234917a67d4c89de9 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 20:36:24 +0900 Subject: [PATCH 026/261] Move timeline helper models to UI model --- .../flare/ui/render/UiDateTime.androidJvm.kt | 7 ---- .../dimension/flare/ui/humanizer/Number.kt | 33 ------------------- ui/model/build.gradle.kts | 10 ++++++ .../flare/ui/render/UiDateTime.androidJvm.kt | 7 ++++ .../flare/ui/render/UiDateTime.apple.kt | 4 +-- .../dimension/flare/ui/humanizer/Instant.kt | 0 .../dimension/flare/ui/humanizer/Number.kt | 33 +++++++++++++++++++ .../dev/dimension/flare/ui/model/UiNumber.kt | 2 +- .../dimension/flare/ui/render/UiDateTime.kt | 8 ++--- 9 files changed, 57 insertions(+), 47 deletions(-) delete mode 100644 presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.androidJvm.kt delete mode 100644 presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Number.kt create mode 100644 ui/model/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.androidJvm.kt rename {presenter/features => ui/model}/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.apple.kt (52%) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Instant.kt (100%) create mode 100644 ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Number.kt rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiNumber.kt (88%) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.kt (84%) diff --git a/presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.androidJvm.kt b/presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.androidJvm.kt deleted file mode 100644 index 454a51461a..0000000000 --- a/presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.androidJvm.kt +++ /dev/null @@ -1,7 +0,0 @@ -package dev.dimension.flare.ui.render - -import kotlin.time.Instant - -internal actual typealias PlatformDateTime = Instant - -internal actual fun Instant.toPlatform(): PlatformDateTime = this diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Number.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Number.kt deleted file mode 100644 index d53a9f58c0..0000000000 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Number.kt +++ /dev/null @@ -1,33 +0,0 @@ -package dev.dimension.flare.ui.humanizer - -import org.koin.core.component.KoinComponent -import org.koin.core.component.inject -import kotlin.math.round -import kotlin.time.Instant - -internal fun Float.humanizePercentage(): String { - val roundedNumber = round(this * 100 * 100).toDouble() / 100 - return "$roundedNumber%" -} - -internal object Formatter : KoinComponent { - val platformFormatter: PlatformFormatter by inject() - - internal fun Long.humanize(): String = platformFormatter.formatNumber(number = this) - - internal fun Instant.relative(): String = platformFormatter.formatRelativeInstant(this) - - internal fun Instant.full(): String = platformFormatter.formatFullInstant(this) - - internal fun Instant.absolute(): String = platformFormatter.formatAbsoluteInstant(this) -} - -internal interface PlatformFormatter { - fun formatNumber(number: Long): String - - fun formatRelativeInstant(instant: Instant): String - - fun formatFullInstant(instant: Instant): String - - fun formatAbsoluteInstant(instant: Instant): String -} diff --git a/ui/model/build.gradle.kts b/ui/model/build.gradle.kts index 995c650164..b1bbcf330f 100644 --- a/ui/model/build.gradle.kts +++ b/ui/model/build.gradle.kts @@ -18,6 +18,13 @@ kotlin { ) } + compilerOptions { + freeCompilerArgs.addAll( + "-module-name", + "flare_ui_model", + ) + } + sourceSets { val commonMain by getting { dependencies { @@ -26,6 +33,9 @@ kotlin { api(dependencies.platform(libs.compose.bom)) api(libs.compose.runtime) api(libs.kotlinx.serialization.json) + implementation(dependencies.platform(libs.koin.bom)) + implementation(libs.koin.core) + implementation(libs.kotlinx.datetime) } } diff --git a/ui/model/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.androidJvm.kt b/ui/model/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.androidJvm.kt new file mode 100644 index 0000000000..f19d3dea9c --- /dev/null +++ b/ui/model/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.androidJvm.kt @@ -0,0 +1,7 @@ +package dev.dimension.flare.ui.render + +import kotlin.time.Instant + +public actual typealias PlatformDateTime = Instant + +public actual fun Instant.toPlatform(): PlatformDateTime = this diff --git a/presenter/features/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.apple.kt b/ui/model/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.apple.kt similarity index 52% rename from presenter/features/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.apple.kt rename to ui/model/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.apple.kt index 2d37cb9731..20e0c80ac8 100644 --- a/presenter/features/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.apple.kt +++ b/ui/model/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.apple.kt @@ -4,6 +4,6 @@ import kotlinx.datetime.toNSDate import platform.Foundation.NSDate import kotlin.time.Instant -internal actual fun Instant.toPlatform(): PlatformDateTime = toNSDate() +public actual fun Instant.toPlatform(): PlatformDateTime = toNSDate() -internal actual typealias PlatformDateTime = NSDate +public actual typealias PlatformDateTime = NSDate diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Instant.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Instant.kt similarity index 100% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Instant.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Instant.kt diff --git a/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Number.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Number.kt new file mode 100644 index 0000000000..4eaf244772 --- /dev/null +++ b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/humanizer/Number.kt @@ -0,0 +1,33 @@ +package dev.dimension.flare.ui.humanizer + +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject +import kotlin.math.round +import kotlin.time.Instant + +public fun Float.humanizePercentage(): String { + val roundedNumber = round(this * 100 * 100).toDouble() / 100 + return "$roundedNumber%" +} + +public object Formatter : KoinComponent { + public val platformFormatter: PlatformFormatter by inject() + + public fun Long.humanize(): String = platformFormatter.formatNumber(number = this) + + public fun Instant.relative(): String = platformFormatter.formatRelativeInstant(this) + + public fun Instant.full(): String = platformFormatter.formatFullInstant(this) + + public fun Instant.absolute(): String = platformFormatter.formatAbsoluteInstant(this) +} + +public interface PlatformFormatter { + public fun formatNumber(number: Long): String + + public fun formatRelativeInstant(instant: Instant): String + + public fun formatFullInstant(instant: Instant): String + + public fun formatAbsoluteInstant(instant: Instant): String +} diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiNumber.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiNumber.kt similarity index 88% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiNumber.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiNumber.kt index c0257990cf..6b49186295 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiNumber.kt +++ b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiNumber.kt @@ -7,7 +7,7 @@ import kotlinx.serialization.Transient @Serializable @Immutable -public data class UiNumber internal constructor( +public data class UiNumber public constructor( public val value: Long, ) { @Transient diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.kt similarity index 84% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.kt index 5103ce3f84..839bf9542a 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.kt +++ b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiDateTime.kt @@ -10,11 +10,11 @@ import kotlin.time.Instant public expect class PlatformDateTime -internal expect fun Instant.toPlatform(): PlatformDateTime +public expect fun Instant.toPlatform(): PlatformDateTime @Serializable(with = UiDateTimeSerializer::class) @Immutable -public data class UiDateTime internal constructor( +public data class UiDateTime public constructor( val value: Instant, ) { val platformValue: PlatformDateTime by lazy { @@ -33,9 +33,9 @@ public data class UiDateTime internal constructor( public fun Instant.toUi(): UiDateTime = UiDateTime(this) -internal operator fun UiDateTime.compareTo(other: UiDateTime): Int = value.compareTo(other.value) +public operator fun UiDateTime.compareTo(other: UiDateTime): Int = value.compareTo(other.value) -internal object UiDateTimeSerializer : kotlinx.serialization.KSerializer { +public object UiDateTimeSerializer : kotlinx.serialization.KSerializer { override val descriptor: kotlinx.serialization.descriptors.SerialDescriptor get() = kotlinx.serialization.descriptors.PrimitiveSerialDescriptor( From b9a87ed3cc04c1eaa730011fb37ed5c4fbeb9c4e Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 20:40:58 +0900 Subject: [PATCH 027/261] Move rich text rendering models to UI model --- ui/model/build.gradle.kts | 2 ++ .../flare/ui/render/UiRichText.androidJvm.kt | 0 .../flare/ui/render/UiRichText.apple.kt | 8 ++++---- .../flare/ui/render/HtmlRenderRunMapper.kt | 0 .../flare/ui/render/HtmlToUiRichText.kt | 2 +- .../flare/ui/render/TranslationJson.kt | 18 +++++++++--------- .../dimension/flare/ui/render/UiRichText.kt | 2 +- .../flare/ui/render/HtmlRenderRunMapperTest.kt | 0 .../ui/render/TranslationJsonUiRichTextTest.kt | 0 .../flare/ui/render/UiRichTextTest.kt | 0 10 files changed, 17 insertions(+), 15 deletions(-) rename {presenter/features => ui/model}/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiRichText.androidJvm.kt (100%) rename {presenter/features => ui/model}/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiRichText.apple.kt (83%) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/render/HtmlRenderRunMapper.kt (100%) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/render/HtmlToUiRichText.kt (89%) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/render/TranslationJson.kt (94%) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiRichText.kt (99%) rename {presenter/features => ui/model}/src/commonTest/kotlin/dev/dimension/flare/ui/render/HtmlRenderRunMapperTest.kt (100%) rename {presenter/features => ui/model}/src/commonTest/kotlin/dev/dimension/flare/ui/render/TranslationJsonUiRichTextTest.kt (100%) rename {presenter/features => ui/model}/src/commonTest/kotlin/dev/dimension/flare/ui/render/UiRichTextTest.kt (100%) diff --git a/ui/model/build.gradle.kts b/ui/model/build.gradle.kts index b1bbcf330f..7a90ad5dcb 100644 --- a/ui/model/build.gradle.kts +++ b/ui/model/build.gradle.kts @@ -35,7 +35,9 @@ kotlin { api(libs.kotlinx.serialization.json) implementation(dependencies.platform(libs.koin.bom)) implementation(libs.koin.core) + implementation(libs.kotlin.codepoints.deluxe) implementation(libs.kotlinx.datetime) + implementation(libs.ksoup) } } diff --git a/presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiRichText.androidJvm.kt b/ui/model/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiRichText.androidJvm.kt similarity index 100% rename from presenter/features/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiRichText.androidJvm.kt rename to ui/model/src/androidJvmMain/kotlin/dev/dimension/flare/ui/render/UiRichText.androidJvm.kt diff --git a/presenter/features/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiRichText.apple.kt b/ui/model/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiRichText.apple.kt similarity index 83% rename from presenter/features/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiRichText.apple.kt rename to ui/model/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiRichText.apple.kt index 6ae445f029..8f4aedde57 100644 --- a/presenter/features/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiRichText.apple.kt +++ b/ui/model/src/appleMain/kotlin/dev/dimension/flare/ui/render/UiRichText.apple.kt @@ -17,14 +17,14 @@ public interface SwiftPlatformTextRenderer { public fun render(renderRuns: ImmutableList): PlatformText } -internal class ApplePlatformTextRenderer( +public class ApplePlatformTextRenderer( private val renderer: SwiftPlatformTextRenderer, ) : PlatformTextRendering { - override fun render(renderRuns: ImmutableList): PlatformText = renderer.render(renderRuns) + public override fun render(renderRuns: ImmutableList): PlatformText = renderer.render(renderRuns) } -internal interface PlatformTextRendering { - fun render(renderRuns: ImmutableList): PlatformText +public interface PlatformTextRendering { + public fun render(renderRuns: ImmutableList): PlatformText } private object PlatformTextRendererHolder : KoinComponent { diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/HtmlRenderRunMapper.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/render/HtmlRenderRunMapper.kt similarity index 100% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/HtmlRenderRunMapper.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/render/HtmlRenderRunMapper.kt diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/HtmlToUiRichText.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/render/HtmlToUiRichText.kt similarity index 89% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/HtmlToUiRichText.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/render/HtmlToUiRichText.kt index 9f304bcc43..315a9fc22b 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/HtmlToUiRichText.kt +++ b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/render/HtmlToUiRichText.kt @@ -19,4 +19,4 @@ public fun Element.toUi(sourceLanguages: List = emptyList()): UiRichText ) } -internal fun parseHtml(html: String): Element = Ksoup.parse(html).body() +public fun parseHtml(html: String): Element = Ksoup.parse(html).body() diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/TranslationJson.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/render/TranslationJson.kt similarity index 94% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/TranslationJson.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/render/TranslationJson.kt index 1c40bae11b..f4120bc848 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/TranslationJson.kt +++ b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/render/TranslationJson.kt @@ -6,32 +6,32 @@ import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json @Serializable -internal data class TranslationDocument( +public data class TranslationDocument( val version: Int? = 1, val targetLanguage: String? = null, val blocks: List, ) @Serializable -internal data class TranslationBlock( +public data class TranslationBlock( val id: Int, val tokens: List, ) @Serializable -internal data class TranslationToken( +public data class TranslationToken( val id: Int, val kind: TranslationTokenKind, val text: String, ) @Serializable -internal enum class TranslationTokenKind { +public enum class TranslationTokenKind { Translatable, Locked, } -internal class TranslationFormatException( +public class TranslationFormatException( message: String, ) : IllegalArgumentException(message) @@ -42,7 +42,7 @@ private val translationJson = explicitNulls = false } -internal fun UiRichText.toTranslationDocument(targetLanguage: String? = null): TranslationDocument { +public fun UiRichText.toTranslationDocument(targetLanguage: String? = null): TranslationDocument { val projection = toProjectionBlocks() return TranslationDocument( version = 1, @@ -72,10 +72,10 @@ internal fun UiRichText.toTranslationDocument(targetLanguage: String? = null): T ) } -internal fun UiRichText.toTranslationJson(targetLanguage: String? = null): String = +public fun UiRichText.toTranslationJson(targetLanguage: String? = null): String = translationJson.encodeToString(toTranslationDocument(targetLanguage)) -internal fun UiRichText.applyTranslationJson(json: String): UiRichText = +public fun UiRichText.applyTranslationJson(json: String): UiRichText = applyTranslationDocument( runCatching { translationJson.decodeFromString(TranslationDocument.serializer(), json) @@ -84,7 +84,7 @@ internal fun UiRichText.applyTranslationJson(json: String): UiRichText = }, ) -internal fun UiRichText.applyTranslationDocument(document: TranslationDocument): UiRichText { +public fun UiRichText.applyTranslationDocument(document: TranslationDocument): UiRichText { val projection = toProjectionBlocks() val projectedBlocksByContent = projection.associateBy { it.content } val blocksById = document.blocks.associateBy { it.id } diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiRichText.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiRichText.kt similarity index 99% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiRichText.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiRichText.kt index 6cadd04b6f..f0f7c7364d 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiRichText.kt +++ b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/render/UiRichText.kt @@ -121,7 +121,7 @@ public data class UiRichText( } } -internal fun uiRichTextOf( +public fun uiRichTextOf( renderRuns: List, raw: String? = null, innerText: String? = null, diff --git a/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/render/HtmlRenderRunMapperTest.kt b/ui/model/src/commonTest/kotlin/dev/dimension/flare/ui/render/HtmlRenderRunMapperTest.kt similarity index 100% rename from presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/render/HtmlRenderRunMapperTest.kt rename to ui/model/src/commonTest/kotlin/dev/dimension/flare/ui/render/HtmlRenderRunMapperTest.kt diff --git a/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/render/TranslationJsonUiRichTextTest.kt b/ui/model/src/commonTest/kotlin/dev/dimension/flare/ui/render/TranslationJsonUiRichTextTest.kt similarity index 100% rename from presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/render/TranslationJsonUiRichTextTest.kt rename to ui/model/src/commonTest/kotlin/dev/dimension/flare/ui/render/TranslationJsonUiRichTextTest.kt diff --git a/presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/render/UiRichTextTest.kt b/ui/model/src/commonTest/kotlin/dev/dimension/flare/ui/render/UiRichTextTest.kt similarity index 100% rename from presenter/features/src/commonTest/kotlin/dev/dimension/flare/ui/render/UiRichTextTest.kt rename to ui/model/src/commonTest/kotlin/dev/dimension/flare/ui/render/UiRichTextTest.kt From cf8e2eff0987da15a5998604748b48f59daa45e9 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 20:49:27 +0900 Subject: [PATCH 028/261] Move interaction event models to UI model --- .../SerializationFormatBenchmarkAppleTest.kt | 2 +- .../datasource/bluesky/BlueskyDataSource.kt | 2 +- .../guest/mastodon/GuestMastodonDataSource.kt | 2 +- .../datasource/mastodon/MastodonDataSource.kt | 2 +- .../data/datasource/microblog/PostEvent.kt | 436 ------------------ .../microblog/PostEventActionMenu.kt | 164 +++++++ .../microblog/handler/PostEventHandler.kt | 9 +- .../datasource/misskey/MisskeyDataSource.kt | 2 +- .../data/datasource/nostr/NostrDataSource.kt | 12 +- .../data/datasource/vvo/VVODataSource.kt | 2 +- .../data/datasource/xqt/XQTDataSource.kt | 2 +- .../flare/data/network/nostr/NostrService.kt | 2 +- .../dev/dimension/flare/ui/model/UiPoll.kt | 2 +- .../flare/ui/model/mapper/Bluesky.kt | 2 +- .../flare/ui/model/mapper/Mastodon.kt | 2 +- .../flare/ui/model/mapper/Misskey.kt | 2 +- .../dimension/flare/ui/model/mapper/Nostr.kt | 2 +- .../dimension/flare/ui/model/mapper/VVO.kt | 2 +- .../flare/ui/model/mapper/XQTActionMenu.kt | 2 +- .../ui/presenter/home/DeepLinkPresenter.kt | 18 +- .../status/action/AddReactionPresenter.kt | 2 +- .../microblog/PostEventHandlerTest.kt | 40 +- .../SerializationFormatBenchmarkTest.kt | 2 +- .../dimension/flare/ui/model/UiPollTest.kt | 2 +- .../dimension/flare/ui/model/ClickContext.kt | 27 +- .../dimension/flare/ui/model/DeeplinkEvent.kt | 21 +- .../dev/dimension/flare/ui/model/PostEvent.kt | 239 ++++++++++ .../dimension/flare/ui/model/UriLauncher.kt | 0 .../dimension/flare/ui/route/DeeplinkRoute.kt | 0 29 files changed, 487 insertions(+), 515 deletions(-) delete mode 100644 presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/PostEvent.kt create mode 100644 presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/PostEventActionMenu.kt rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/model/ClickContext.kt (67%) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/model/DeeplinkEvent.kt (68%) create mode 100644 ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/PostEvent.kt rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UriLauncher.kt (100%) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/route/DeeplinkRoute.kt (100%) diff --git a/presenter/features/src/appleTest/kotlin/dev/dimension/flare/common/SerializationFormatBenchmarkAppleTest.kt b/presenter/features/src/appleTest/kotlin/dev/dimension/flare/common/SerializationFormatBenchmarkAppleTest.kt index 5b39bf0636..2aac26d4a7 100644 --- a/presenter/features/src/appleTest/kotlin/dev/dimension/flare/common/SerializationFormatBenchmarkAppleTest.kt +++ b/presenter/features/src/appleTest/kotlin/dev/dimension/flare/common/SerializationFormatBenchmarkAppleTest.kt @@ -412,7 +412,7 @@ class SerializationFormatBenchmarkAppleTest { multiple = true, ownVotes = persistentListOf(1), voteEvent = - dev.dimension.flare.data.datasource.microblog.PostEvent.Mastodon.Vote( + dev.dimension.flare.ui.model.PostEvent.Mastodon.Vote( id = "vote-${statusKey.id}", accountKey = accountKey, postKey = statusKey, diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyDataSource.kt index 469e7e4ed5..25481f6211 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyDataSource.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/bluesky/BlueskyDataSource.kt @@ -37,7 +37,7 @@ import dev.dimension.flare.data.datasource.microblog.ComposeType import dev.dimension.flare.data.datasource.microblog.DatabaseUpdater import dev.dimension.flare.data.datasource.microblog.DirectMessageDataSource import dev.dimension.flare.data.datasource.microblog.NotificationFilter -import dev.dimension.flare.data.datasource.microblog.PostEvent +import dev.dimension.flare.ui.model.PostEvent import dev.dimension.flare.data.datasource.microblog.ProfileTab import dev.dimension.flare.data.datasource.microblog.datasource.ListDataSource import dev.dimension.flare.data.datasource.microblog.datasource.NotificationDataSource diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestMastodonDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestMastodonDataSource.kt index f6799195ef..b3ded3d747 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestMastodonDataSource.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/guest/mastodon/GuestMastodonDataSource.kt @@ -6,7 +6,7 @@ import dev.dimension.flare.data.datasource.mastodon.SearchUserPagingSource import dev.dimension.flare.data.datasource.mastodon.TrendHashtagPagingSource import dev.dimension.flare.data.datasource.microblog.DatabaseUpdater import dev.dimension.flare.data.datasource.microblog.MicroblogDataSource -import dev.dimension.flare.data.datasource.microblog.PostEvent +import dev.dimension.flare.ui.model.PostEvent import dev.dimension.flare.data.datasource.microblog.ProfileTab import dev.dimension.flare.data.datasource.microblog.datasource.PostDataSource import dev.dimension.flare.data.datasource.microblog.datasource.RelationDataSource diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonDataSource.kt index 5c73dbf96f..3d3fb1faaf 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonDataSource.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/mastodon/MastodonDataSource.kt @@ -9,7 +9,7 @@ import dev.dimension.flare.data.datasource.microblog.ComposeData import dev.dimension.flare.data.datasource.microblog.ComposeType import dev.dimension.flare.data.datasource.microblog.DatabaseUpdater import dev.dimension.flare.data.datasource.microblog.NotificationFilter -import dev.dimension.flare.data.datasource.microblog.PostEvent +import dev.dimension.flare.ui.model.PostEvent import dev.dimension.flare.data.datasource.microblog.ProfileTab import dev.dimension.flare.data.datasource.microblog.datasource.ListDataSource import dev.dimension.flare.data.datasource.microblog.datasource.NotificationDataSource diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/PostEvent.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/PostEvent.kt deleted file mode 100644 index cacbee1fe6..0000000000 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/PostEvent.kt +++ /dev/null @@ -1,436 +0,0 @@ -package dev.dimension.flare.data.datasource.microblog - -import dev.dimension.flare.common.SerializableImmutableList -import dev.dimension.flare.model.MicroBlogKey -import dev.dimension.flare.ui.model.mapper.blueskyBookmark -import dev.dimension.flare.ui.model.mapper.blueskyLike -import dev.dimension.flare.ui.model.mapper.blueskyReblog -import dev.dimension.flare.ui.model.mapper.mastodonBookmark -import dev.dimension.flare.ui.model.mapper.mastodonLike -import dev.dimension.flare.ui.model.mapper.mastodonRepost -import dev.dimension.flare.ui.model.mapper.misskeyFavourite -import dev.dimension.flare.ui.model.mapper.misskeyReact -import dev.dimension.flare.ui.model.mapper.misskeyRenote -import dev.dimension.flare.ui.model.mapper.nostrLike -import dev.dimension.flare.ui.model.mapper.nostrRepost -import dev.dimension.flare.ui.model.mapper.vvoFavorite -import dev.dimension.flare.ui.model.mapper.vvoLike -import dev.dimension.flare.ui.model.mapper.vvoLikeComment -import dev.dimension.flare.ui.model.mapper.xqtBookmark -import dev.dimension.flare.ui.model.mapper.xqtLike -import dev.dimension.flare.ui.model.mapper.xqtRetweet -import kotlinx.collections.immutable.toImmutableList -import kotlinx.serialization.Serializable - -@Serializable -internal sealed interface PostEvent { - val postKey: MicroBlogKey - - @Serializable - sealed interface PollEvent : PostEvent { - val accountKey: MicroBlogKey - val options: SerializableImmutableList - - fun copyWithOptions(options: List): PollEvent - } - - @Serializable - sealed interface Mastodon : PostEvent { - @Serializable - data class Reblog( - override val postKey: MicroBlogKey, - val reblogged: Boolean, - val count: Long, - val accountKey: MicroBlogKey, - ) : Mastodon, - UpdatePostActionMenuEvent { - override fun nextActionMenu(): ActionMenu.Item = - ActionMenu.mastodonRepost( - reblogged = !reblogged, - reblogsCount = count + if (!reblogged) 1 else -1, - accountKey = accountKey, - statusKey = postKey, - ) - } - - @Serializable - data class Like( - override val postKey: MicroBlogKey, - val liked: Boolean, - val accountKey: MicroBlogKey, - val count: Long, - ) : Mastodon, - UpdatePostActionMenuEvent { - override fun nextActionMenu(): ActionMenu.Item = - ActionMenu.mastodonLike( - favourited = !liked, - favouritesCount = count + if (!liked) 1 else -1, - accountKey = accountKey, - statusKey = postKey, - ) - } - - @Serializable - data class Bookmark( - override val postKey: MicroBlogKey, - val bookmarked: Boolean, - val accountKey: MicroBlogKey, - ) : Mastodon, - UpdatePostActionMenuEvent { - override fun nextActionMenu(): ActionMenu.Item = - ActionMenu.mastodonBookmark( - bookmarked = !bookmarked, - accountKey = accountKey, - statusKey = postKey, - ) - } - - @Serializable - data class Vote( - val id: String, - override val accountKey: MicroBlogKey, - override val postKey: MicroBlogKey, - override val options: SerializableImmutableList, - ) : Mastodon, - PollEvent { - override fun copyWithOptions(options: List): PollEvent = copy(options = options.toImmutableList()) - } - - @Serializable - data class AcceptFollowRequest( - override val postKey: MicroBlogKey, - val userKey: MicroBlogKey, - ) : Mastodon - - @Serializable - data class RejectFollowRequest( - override val postKey: MicroBlogKey, - val userKey: MicroBlogKey, - ) : Mastodon - } - - @Serializable - sealed interface Pleroma : PostEvent { - @Serializable - data class React( - override val postKey: MicroBlogKey, - val hasReacted: Boolean, - val reaction: String, - ) : Pleroma - } - - @Serializable - sealed interface Misskey : PostEvent { - @Serializable - data class React( - override val postKey: MicroBlogKey, - val hasReacted: Boolean, - val reaction: String, - val count: Long = 0, - val accountKey: MicroBlogKey? = null, - ) : Misskey, - UpdatePostActionMenuEvent { - override fun nextActionMenu(): ActionMenu.Item = - ActionMenu.misskeyReact( - postKey = postKey, - hasReacted = !hasReacted, - reaction = reaction, - count = (count + if (!hasReacted) 1 else -1).coerceAtLeast(0), - accountKey = accountKey, - ) - } - - @Serializable - data class Renote( - override val postKey: MicroBlogKey, - val count: Long = 0, - val accountKey: MicroBlogKey? = null, - ) : Misskey, - UpdatePostActionMenuEvent { - override fun nextActionMenu(): ActionMenu.Item = - ActionMenu.misskeyRenote( - postKey = postKey, - count = count + 1, - accountKey = accountKey, - ) - } - - @Serializable - data class Vote( - override val accountKey: MicroBlogKey, - override val postKey: MicroBlogKey, - override val options: SerializableImmutableList, - ) : Misskey, - PollEvent { - override fun copyWithOptions(options: List): PollEvent = copy(options = options.toImmutableList()) - } - - @Serializable - data class Favourite( - override val postKey: MicroBlogKey, - val favourited: Boolean, - val accountKey: MicroBlogKey? = null, - ) : Misskey, - UpdatePostActionMenuEvent { - override fun nextActionMenu(): ActionMenu.Item = - ActionMenu.misskeyFavourite( - postKey = postKey, - favourited = !favourited, - accountKey = accountKey, - ) - } - - @Serializable - data class AcceptFollowRequest( - override val postKey: MicroBlogKey, - val userKey: MicroBlogKey, - val notificationStatusKey: MicroBlogKey, - ) : Misskey - - @Serializable - data class RejectFollowRequest( - override val postKey: MicroBlogKey, - val userKey: MicroBlogKey, - val notificationStatusKey: MicroBlogKey, - ) : Misskey - } - - @Serializable - sealed interface Bluesky : PostEvent { - @Serializable - data class Reblog( - override val postKey: MicroBlogKey, - val count: Long, - val cid: String, - val uri: String, - val repostUri: String?, - val accountKey: MicroBlogKey, - ) : Bluesky, - UpdatePostActionMenuEvent { - override fun nextActionMenu(): ActionMenu.Item = - ActionMenu.blueskyReblog( - accountKey = accountKey, - postKey = postKey, - cid = cid, - uri = uri, - count = count + if (repostUri == null) 1 else -1, - repostUri = - if (repostUri == null) { - "" - } else { - null - }, - ) - } - - @Serializable - data class Like( - override val postKey: MicroBlogKey, - val cid: String, - val uri: String, - val likedUri: String?, - val count: Long, - val accountKey: MicroBlogKey, - ) : Bluesky, - UpdatePostActionMenuEvent { - override fun nextActionMenu(): ActionMenu.Item = - ActionMenu.blueskyLike( - accountKey = accountKey, - postKey = postKey, - cid = cid, - uri = uri, - count = count + if (likedUri == null) 1 else -1, - likedUri = - if (likedUri == null) { - "" - } else { - null - }, - ) - } - - @Serializable - data class Bookmark( - override val postKey: MicroBlogKey, - val uri: String, - val cid: String, - val bookmarked: Boolean, - val accountKey: MicroBlogKey, - val count: Long, - ) : Bluesky, - UpdatePostActionMenuEvent { - override fun nextActionMenu(): ActionMenu.Item = - ActionMenu.blueskyBookmark( - accountKey = accountKey, - postKey = postKey, - cid = cid, - uri = uri, - bookmarked = !bookmarked, - count = count + if (!bookmarked) 1 else -1, - ) - } - } - - @Serializable - sealed interface XQT : PostEvent { - @Serializable - data class Retweet( - override val postKey: MicroBlogKey, - val retweeted: Boolean, - val count: Long = 0, - val accountKey: MicroBlogKey, - ) : XQT, - UpdatePostActionMenuEvent { - override fun nextActionMenu(): ActionMenu.Item = - ActionMenu.xqtRetweet( - statusKey = postKey, - retweeted = !retweeted, - count = (count + if (!retweeted) 1 else -1).coerceAtLeast(0), - accountKey = accountKey, - ) - } - - @Serializable - data class Like( - override val postKey: MicroBlogKey, - val liked: Boolean, - val count: Long = 0, - val accountKey: MicroBlogKey, - ) : XQT, - UpdatePostActionMenuEvent { - override fun nextActionMenu(): ActionMenu.Item = - ActionMenu.xqtLike( - statusKey = postKey, - liked = !liked, - count = (count + if (!liked) 1 else -1).coerceAtLeast(0), - accountKey = accountKey, - ) - } - - @Serializable - data class Bookmark( - override val postKey: MicroBlogKey, - val bookmarked: Boolean, - val count: Long = 0, - val accountKey: MicroBlogKey, - ) : XQT, - UpdatePostActionMenuEvent { - override fun nextActionMenu(): ActionMenu.Item = - ActionMenu.xqtBookmark( - statusKey = postKey, - bookmarked = !bookmarked, - count = (count + if (!bookmarked) 1 else -1).coerceAtLeast(0), - accountKey = accountKey, - ) - } - } - - @Serializable - sealed interface VVO : PostEvent { - @Serializable - data class Like( - override val postKey: MicroBlogKey, - val liked: Boolean, - val count: Long = 0, - val accountKey: MicroBlogKey, - ) : VVO, - UpdatePostActionMenuEvent { - override fun nextActionMenu(): ActionMenu.Item = - ActionMenu.vvoLike( - statusKey = postKey, - liked = !liked, - count = (count + if (!liked) 1 else -1).coerceAtLeast(0), - accountKey = accountKey, - ) - } - - @Serializable - data class LikeComment( - override val postKey: MicroBlogKey, - val liked: Boolean, - val count: Long = 0, - val accountKey: MicroBlogKey, - ) : VVO, - UpdatePostActionMenuEvent { - override fun nextActionMenu(): ActionMenu.Item = - ActionMenu.vvoLikeComment( - statusKey = postKey, - liked = !liked, - count = (count + if (!liked) 1 else -1).coerceAtLeast(0), - accountKey = accountKey, - ) - } - - @Serializable - data class Favorite( - override val postKey: MicroBlogKey, - val favorited: Boolean, - val accountKey: MicroBlogKey, - ) : VVO, - UpdatePostActionMenuEvent { - override fun nextActionMenu(): ActionMenu.Item = - ActionMenu.vvoFavorite( - statusKey = postKey, - favorited = !favorited, - accountKey = accountKey, - ) - } - } - - @Serializable - sealed interface Nostr : PostEvent { - @Serializable - data class Repost( - override val postKey: MicroBlogKey, - val repostEventId: String?, - val count: Long = 0, - val accountKey: MicroBlogKey, - ) : Nostr, - UpdatePostActionMenuEvent { - override fun nextActionMenu(): ActionMenu.Item = - ActionMenu.nostrRepost( - statusKey = postKey, - repostEventId = - if (repostEventId == null) { - "" - } else { - null - }, - count = (count + if (repostEventId == null) 1 else -1).coerceAtLeast(0), - accountKey = accountKey, - ) - } - - @Serializable - data class Like( - override val postKey: MicroBlogKey, - val reactionEventId: String?, - val count: Long = 0, - val accountKey: MicroBlogKey, - ) : Nostr, - UpdatePostActionMenuEvent { - override fun nextActionMenu(): ActionMenu.Item = - ActionMenu.nostrLike( - statusKey = postKey, - reactionEventId = - if (reactionEventId == null) { - "" - } else { - null - }, - count = (count + if (reactionEventId == null) 1 else -1).coerceAtLeast(0), - accountKey = accountKey, - ) - } - - @Serializable - data class Report( - override val postKey: MicroBlogKey, - val accountKey: MicroBlogKey, - ) : Nostr - } -} - -internal interface UpdatePostActionMenuEvent : PostEvent { - fun nextActionMenu(): ActionMenu.Item -} diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/PostEventActionMenu.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/PostEventActionMenu.kt new file mode 100644 index 0000000000..eab660e072 --- /dev/null +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/PostEventActionMenu.kt @@ -0,0 +1,164 @@ +package dev.dimension.flare.data.datasource.microblog + +import dev.dimension.flare.ui.model.PostEvent +import dev.dimension.flare.ui.model.mapper.blueskyBookmark +import dev.dimension.flare.ui.model.mapper.blueskyLike +import dev.dimension.flare.ui.model.mapper.blueskyReblog +import dev.dimension.flare.ui.model.mapper.mastodonBookmark +import dev.dimension.flare.ui.model.mapper.mastodonLike +import dev.dimension.flare.ui.model.mapper.mastodonRepost +import dev.dimension.flare.ui.model.mapper.misskeyFavourite +import dev.dimension.flare.ui.model.mapper.misskeyReact +import dev.dimension.flare.ui.model.mapper.misskeyRenote +import dev.dimension.flare.ui.model.mapper.nostrLike +import dev.dimension.flare.ui.model.mapper.nostrRepost +import dev.dimension.flare.ui.model.mapper.vvoFavorite +import dev.dimension.flare.ui.model.mapper.vvoLike +import dev.dimension.flare.ui.model.mapper.vvoLikeComment +import dev.dimension.flare.ui.model.mapper.xqtBookmark +import dev.dimension.flare.ui.model.mapper.xqtLike +import dev.dimension.flare.ui.model.mapper.xqtRetweet + +internal fun PostEvent.nextActionMenu(): ActionMenu.Item? = + when (this) { + is PostEvent.Mastodon.Reblog -> + ActionMenu.mastodonRepost( + reblogged = !reblogged, + reblogsCount = count + if (!reblogged) 1 else -1, + accountKey = accountKey, + statusKey = postKey, + ) + + is PostEvent.Mastodon.Like -> + ActionMenu.mastodonLike( + favourited = !liked, + favouritesCount = count + if (!liked) 1 else -1, + accountKey = accountKey, + statusKey = postKey, + ) + + is PostEvent.Mastodon.Bookmark -> + ActionMenu.mastodonBookmark( + bookmarked = !bookmarked, + accountKey = accountKey, + statusKey = postKey, + ) + + is PostEvent.Misskey.React -> + ActionMenu.misskeyReact( + postKey = postKey, + hasReacted = !hasReacted, + reaction = reaction, + count = (count + if (!hasReacted) 1 else -1).coerceAtLeast(0), + accountKey = accountKey, + ) + + is PostEvent.Misskey.Renote -> + ActionMenu.misskeyRenote( + postKey = postKey, + count = count + 1, + accountKey = accountKey, + ) + + is PostEvent.Misskey.Favourite -> + ActionMenu.misskeyFavourite( + postKey = postKey, + favourited = !favourited, + accountKey = accountKey, + ) + + is PostEvent.Bluesky.Reblog -> + ActionMenu.blueskyReblog( + accountKey = accountKey, + postKey = postKey, + cid = cid, + uri = uri, + count = count + if (repostUri == null) 1 else -1, + repostUri = if (repostUri == null) "" else null, + ) + + is PostEvent.Bluesky.Like -> + ActionMenu.blueskyLike( + accountKey = accountKey, + postKey = postKey, + cid = cid, + uri = uri, + count = count + if (likedUri == null) 1 else -1, + likedUri = if (likedUri == null) "" else null, + ) + + is PostEvent.Bluesky.Bookmark -> + ActionMenu.blueskyBookmark( + accountKey = accountKey, + postKey = postKey, + cid = cid, + uri = uri, + bookmarked = !bookmarked, + count = count + if (!bookmarked) 1 else -1, + ) + + is PostEvent.XQT.Retweet -> + ActionMenu.xqtRetweet( + statusKey = postKey, + retweeted = !retweeted, + count = (count + if (!retweeted) 1 else -1).coerceAtLeast(0), + accountKey = accountKey, + ) + + is PostEvent.XQT.Like -> + ActionMenu.xqtLike( + statusKey = postKey, + liked = !liked, + count = (count + if (!liked) 1 else -1).coerceAtLeast(0), + accountKey = accountKey, + ) + + is PostEvent.XQT.Bookmark -> + ActionMenu.xqtBookmark( + statusKey = postKey, + bookmarked = !bookmarked, + count = (count + if (!bookmarked) 1 else -1).coerceAtLeast(0), + accountKey = accountKey, + ) + + is PostEvent.VVO.Like -> + ActionMenu.vvoLike( + statusKey = postKey, + liked = !liked, + count = (count + if (!liked) 1 else -1).coerceAtLeast(0), + accountKey = accountKey, + ) + + is PostEvent.VVO.LikeComment -> + ActionMenu.vvoLikeComment( + statusKey = postKey, + liked = !liked, + count = (count + if (!liked) 1 else -1).coerceAtLeast(0), + accountKey = accountKey, + ) + + is PostEvent.VVO.Favorite -> + ActionMenu.vvoFavorite( + statusKey = postKey, + favorited = !favorited, + accountKey = accountKey, + ) + + is PostEvent.Nostr.Repost -> + ActionMenu.nostrRepost( + statusKey = postKey, + repostEventId = if (repostEventId == null) "" else null, + count = (count + if (repostEventId == null) 1 else -1).coerceAtLeast(0), + accountKey = accountKey, + ) + + is PostEvent.Nostr.Like -> + ActionMenu.nostrLike( + statusKey = postKey, + reactionEventId = if (reactionEventId == null) "" else null, + count = (count + if (reactionEventId == null) 1 else -1).coerceAtLeast(0), + accountKey = accountKey, + ) + + else -> null + } diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/PostEventHandler.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/PostEventHandler.kt index dc3765befb..f36014300d 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/PostEventHandler.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/handler/PostEventHandler.kt @@ -5,8 +5,8 @@ import dev.dimension.flare.data.database.cache.connect import dev.dimension.flare.data.database.cache.model.DbStatus import dev.dimension.flare.data.datasource.microblog.ActionMenu import dev.dimension.flare.data.datasource.microblog.DatabaseUpdater -import dev.dimension.flare.data.datasource.microblog.PostEvent -import dev.dimension.flare.data.datasource.microblog.UpdatePostActionMenuEvent +import dev.dimension.flare.data.datasource.microblog.nextActionMenu +import dev.dimension.flare.ui.model.PostEvent import dev.dimension.flare.data.repository.tryRun import dev.dimension.flare.model.AccountType import dev.dimension.flare.model.DbAccountType @@ -46,13 +46,14 @@ internal class PostEventHandler( accountType = dbAccountType, ).firstOrNull() ?.content - if (event is UpdatePostActionMenuEvent && originalData is UiTimelineV2.Post) { + val nextActionMenu = event.nextActionMenu() + if (nextActionMenu != null && originalData is UiTimelineV2.Post) { val updatedData = originalData.copy( actions = findAndReplaceActionMenu( actions = originalData.actions, - newActionMenu = event.nextActionMenu(), + newActionMenu = nextActionMenu, ), ) database.statusDao().update( diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyDataSource.kt index baea52961d..00f1af04a0 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyDataSource.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/misskey/MisskeyDataSource.kt @@ -12,7 +12,7 @@ import dev.dimension.flare.data.datasource.microblog.ComposeData import dev.dimension.flare.data.datasource.microblog.ComposeType import dev.dimension.flare.data.datasource.microblog.DatabaseUpdater import dev.dimension.flare.data.datasource.microblog.NotificationFilter -import dev.dimension.flare.data.datasource.microblog.PostEvent +import dev.dimension.flare.ui.model.PostEvent import dev.dimension.flare.data.datasource.microblog.ProfileTab import dev.dimension.flare.data.datasource.microblog.ReactionDataSource import dev.dimension.flare.data.datasource.microblog.datasource.ListDataSource diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/NostrDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/NostrDataSource.kt index 494419618b..70cc5c4bcb 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/NostrDataSource.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/nostr/NostrDataSource.kt @@ -9,7 +9,7 @@ import dev.dimension.flare.data.datasource.microblog.ComposeData import dev.dimension.flare.data.datasource.microblog.ComposeType import dev.dimension.flare.data.datasource.microblog.DatabaseUpdater import dev.dimension.flare.data.datasource.microblog.NotificationFilter -import dev.dimension.flare.data.datasource.microblog.PostEvent +import dev.dimension.flare.ui.model.PostEvent import dev.dimension.flare.data.datasource.microblog.ProfileTab import dev.dimension.flare.data.datasource.microblog.datasource.PostDataSource import dev.dimension.flare.data.datasource.microblog.datasource.RelationDataSource @@ -405,10 +405,11 @@ internal class NostrDataSource( require(event is PostEvent.Nostr) when (event) { is PostEvent.Nostr.Like -> { - if (event.reactionEventId != null) { + val reactionEventId = event.reactionEventId + if (reactionEventId != null) { serviceManager.withService { it.deleteStatus( - statusKey = MicroBlogKey(event.reactionEventId, NostrService.NOSTR_HOST), + statusKey = MicroBlogKey(reactionEventId, NostrService.NOSTR_HOST), ) } } else { @@ -439,10 +440,11 @@ internal class NostrDataSource( } is PostEvent.Nostr.Repost -> { - if (event.repostEventId != null) { + val repostEventId = event.repostEventId + if (repostEventId != null) { serviceManager.withService { it.deleteStatus( - statusKey = MicroBlogKey(event.repostEventId, NostrService.NOSTR_HOST), + statusKey = MicroBlogKey(repostEventId, NostrService.NOSTR_HOST), ) } } else { diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVODataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVODataSource.kt index a6583cbbcf..4e0dfb6927 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVODataSource.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/vvo/VVODataSource.kt @@ -12,7 +12,7 @@ import dev.dimension.flare.data.datasource.microblog.ComposeData import dev.dimension.flare.data.datasource.microblog.ComposeType import dev.dimension.flare.data.datasource.microblog.DatabaseUpdater import dev.dimension.flare.data.datasource.microblog.NotificationFilter -import dev.dimension.flare.data.datasource.microblog.PostEvent +import dev.dimension.flare.ui.model.PostEvent import dev.dimension.flare.data.datasource.microblog.ProfileTab import dev.dimension.flare.data.datasource.microblog.datasource.NotificationDataSource import dev.dimension.flare.data.datasource.microblog.datasource.PostDataSource diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTDataSource.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTDataSource.kt index ea7277fcd4..68c6e715ca 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTDataSource.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/xqt/XQTDataSource.kt @@ -19,7 +19,7 @@ import dev.dimension.flare.data.datasource.microblog.ComposeType import dev.dimension.flare.data.datasource.microblog.DatabaseUpdater import dev.dimension.flare.data.datasource.microblog.DirectMessageDataSource import dev.dimension.flare.data.datasource.microblog.NotificationFilter -import dev.dimension.flare.data.datasource.microblog.PostEvent +import dev.dimension.flare.ui.model.PostEvent import dev.dimension.flare.data.datasource.microblog.ProfileTab import dev.dimension.flare.data.datasource.microblog.datasource.ListDataSource import dev.dimension.flare.data.datasource.microblog.datasource.NotificationDataSource diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrService.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrService.kt index b859726eeb..cad1b66665 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrService.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrService.kt @@ -1891,7 +1891,7 @@ internal class NostrService( color = ActionMenu.Item.Color.Red, clickEvent = ClickEvent.event(accountKey) { - dev.dimension.flare.data.datasource.microblog.PostEvent.Nostr.Report( + dev.dimension.flare.ui.model.PostEvent.Nostr.Report( postKey = statusKey, accountKey = accountKey, ) diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiPoll.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiPoll.kt index 0ecd82c990..f8a893f5c9 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiPoll.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiPoll.kt @@ -2,7 +2,7 @@ package dev.dimension.flare.ui.model import androidx.compose.runtime.Immutable import dev.dimension.flare.common.SerializableImmutableList -import dev.dimension.flare.data.datasource.microblog.PostEvent +import dev.dimension.flare.ui.model.PostEvent import dev.dimension.flare.ui.humanizer.humanizePercentage import dev.dimension.flare.ui.render.UiDateTime import dev.dimension.flare.ui.render.toUi diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Bluesky.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Bluesky.kt index cd1e15ee5c..b871df4ab8 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Bluesky.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Bluesky.kt @@ -31,7 +31,7 @@ import chat.bsky.convo.DeletedMessageView import chat.bsky.convo.MessageView import dev.dimension.flare.common.SerializableImmutableList import dev.dimension.flare.data.datasource.microblog.ActionMenu -import dev.dimension.flare.data.datasource.microblog.PostEvent +import dev.dimension.flare.ui.model.PostEvent import dev.dimension.flare.data.datasource.microblog.userActionsMenu import dev.dimension.flare.model.AccountType import dev.dimension.flare.model.MicroBlogKey diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Mastodon.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Mastodon.kt index 73499648ab..c6febf5362 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Mastodon.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Mastodon.kt @@ -3,7 +3,7 @@ package dev.dimension.flare.ui.model.mapper import com.fleeksoft.ksoup.nodes.Element import com.fleeksoft.ksoup.nodes.Node import dev.dimension.flare.data.datasource.microblog.ActionMenu -import dev.dimension.flare.data.datasource.microblog.PostEvent +import dev.dimension.flare.ui.model.PostEvent import dev.dimension.flare.data.datasource.microblog.userActionsMenu import dev.dimension.flare.data.network.mastodon.api.model.Account import dev.dimension.flare.data.network.mastodon.api.model.Attachment diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Misskey.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Misskey.kt index 123e861e35..4ddac76f90 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Misskey.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Misskey.kt @@ -1,7 +1,7 @@ package dev.dimension.flare.ui.model.mapper import dev.dimension.flare.data.datasource.microblog.ActionMenu -import dev.dimension.flare.data.datasource.microblog.PostEvent +import dev.dimension.flare.ui.model.PostEvent import dev.dimension.flare.data.datasource.microblog.userActionsMenu import dev.dimension.flare.data.network.misskey.api.model.Antenna import dev.dimension.flare.data.network.misskey.api.model.Channel diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Nostr.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Nostr.kt index 226968bace..c4c0420a5b 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Nostr.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/Nostr.kt @@ -1,7 +1,7 @@ package dev.dimension.flare.ui.model.mapper import dev.dimension.flare.data.datasource.microblog.ActionMenu -import dev.dimension.flare.data.datasource.microblog.PostEvent +import dev.dimension.flare.ui.model.PostEvent import dev.dimension.flare.model.MicroBlogKey import dev.dimension.flare.ui.model.ClickEvent import dev.dimension.flare.ui.model.UiIcon diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/VVO.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/VVO.kt index 8a772eaa72..f8feec9842 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/VVO.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/VVO.kt @@ -3,7 +3,7 @@ package dev.dimension.flare.ui.model.mapper import com.fleeksoft.ksoup.nodes.Element import com.fleeksoft.ksoup.nodes.Node import dev.dimension.flare.data.datasource.microblog.ActionMenu -import dev.dimension.flare.data.datasource.microblog.PostEvent +import dev.dimension.flare.ui.model.PostEvent import dev.dimension.flare.data.network.vvo.model.Attitude import dev.dimension.flare.data.network.vvo.model.Comment import dev.dimension.flare.data.network.vvo.model.Status diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/XQTActionMenu.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/XQTActionMenu.kt index 8cee55334d..1a6f29c2e5 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/XQTActionMenu.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/mapper/XQTActionMenu.kt @@ -1,7 +1,7 @@ package dev.dimension.flare.ui.model.mapper import dev.dimension.flare.data.datasource.microblog.ActionMenu -import dev.dimension.flare.data.datasource.microblog.PostEvent +import dev.dimension.flare.ui.model.PostEvent import dev.dimension.flare.model.MicroBlogKey import dev.dimension.flare.ui.model.ClickEvent import dev.dimension.flare.ui.model.UiIcon diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DeepLinkPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DeepLinkPresenter.kt index c3559cefba..0a750e0a77 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DeepLinkPresenter.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/DeepLinkPresenter.kt @@ -57,20 +57,22 @@ public class DeepLinkPresenter( if (DeeplinkEvent.isDeeplinkEvent(url)) { val event = DeeplinkEvent.parse(url) if (event != null) { + val postEvent = event.postEvent + val translationEvent = event.translationEvent when { - event.postEvent != null -> { + postEvent != null -> { accountServiceFlow( accountType = AccountType.Specific(event.accountKey), repository = accountRepository, ).firstOrNull()?.let { service -> if (service is PostDataSource) { - service.postEventHandler.handleEvent(event.postEvent) + service.postEventHandler.handleEvent(postEvent) } } } - event.translationEvent is DeeplinkEvent.TranslationEvent.RetryTranslation -> { - with(event.translationEvent) { + translationEvent is DeeplinkEvent.TranslationEvent.RetryTranslation -> { + with(translationEvent) { preTranslationService.setStatusDisplayMode( accountType = AccountType.Specific(event.accountKey), statusKey = statusKey, @@ -83,8 +85,8 @@ public class DeepLinkPresenter( } } - event.translationEvent is DeeplinkEvent.TranslationEvent.Translate -> { - with(event.translationEvent) { + translationEvent is DeeplinkEvent.TranslationEvent.Translate -> { + with(translationEvent) { preTranslationService.setStatusDisplayMode( accountType = AccountType.Specific(event.accountKey), statusKey = statusKey, @@ -97,10 +99,10 @@ public class DeepLinkPresenter( } } - event.translationEvent is DeeplinkEvent.TranslationEvent.ShowOriginal -> { + translationEvent is DeeplinkEvent.TranslationEvent.ShowOriginal -> { preTranslationService.setStatusDisplayMode( accountType = AccountType.Specific(event.accountKey), - statusKey = event.translationEvent.statusKey, + statusKey = translationEvent.statusKey, mode = TranslationDisplayMode.Original, ) } diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/AddReactionPresenter.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/AddReactionPresenter.kt index 334e3d7f02..a20c408463 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/AddReactionPresenter.kt +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/status/action/AddReactionPresenter.kt @@ -6,7 +6,7 @@ import androidx.compose.runtime.remember import dev.dimension.flare.common.collectAsState import dev.dimension.flare.data.datasource.microblog.AuthenticatedMicroblogDataSource import dev.dimension.flare.data.datasource.microblog.ComposeType -import dev.dimension.flare.data.datasource.microblog.PostEvent +import dev.dimension.flare.ui.model.PostEvent import dev.dimension.flare.data.datasource.microblog.datasource.PostDataSource import dev.dimension.flare.data.repository.AccountRepository import dev.dimension.flare.data.repository.accountServiceProvider diff --git a/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/PostEventHandlerTest.kt b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/PostEventHandlerTest.kt index 88295a8712..e8c9f10b6c 100644 --- a/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/PostEventHandlerTest.kt +++ b/presenter/features/src/commonTest/kotlin/dev/dimension/flare/data/datasource/microblog/PostEventHandlerTest.kt @@ -15,6 +15,7 @@ import dev.dimension.flare.model.MicroBlogKey import dev.dimension.flare.model.PlatformType import dev.dimension.flare.ui.humanizer.PlatformFormatter import dev.dimension.flare.ui.model.ClickEvent +import dev.dimension.flare.ui.model.PostEvent import dev.dimension.flare.ui.model.UiHandle import dev.dimension.flare.ui.model.UiNumber import dev.dimension.flare.ui.model.UiPoll @@ -81,16 +82,23 @@ class PostEventHandlerTest : RobolectricTest() { ) } - val original = createPost(actions = persistentListOf(createMenuItem(updateKey = "like", count = 1))) + val original = createPost(actions = persistentListOf(createMenuItem(updateKey = "mastodon_like_$postKey", count = 1))) insertPost(original) handler = PostEventHandler(accountType = AccountType.Specific(accountKey), handler = fakeRemoteHandler) - handler.handleEvent(TestUpdateMenuEvent(postKey = postKey, updateKey = "like", nextCount = 2)) + handler.handleEvent( + PostEvent.Mastodon.Like( + postKey = postKey, + liked = false, + accountKey = accountKey, + count = 1, + ), + ) advanceUntilIdle() val updated = readPost() assertNotNull(updated) - val updatedLike = updated.actions.filterIsInstance().first { it.updateKey == "like" } + val updatedLike = updated.actions.filterIsInstance().first { it.updateKey == "mastodon_like_$postKey" } assertEquals(2, updatedLike.count?.value) assertEquals(1, fakeRemoteHandler.callCount) } @@ -108,17 +116,24 @@ class PostEventHandlerTest : RobolectricTest() { ) } - val original = createPost(actions = persistentListOf(createMenuItem(updateKey = "like", count = 1))) + val original = createPost(actions = persistentListOf(createMenuItem(updateKey = "mastodon_like_$postKey", count = 1))) insertPost(original) fakeRemoteHandler.shouldFail = true handler = PostEventHandler(accountType = AccountType.Specific(accountKey), handler = fakeRemoteHandler) - handler.handleEvent(TestUpdateMenuEvent(postKey = postKey, updateKey = "like", nextCount = 2)) + handler.handleEvent( + PostEvent.Mastodon.Like( + postKey = postKey, + liked = false, + accountKey = accountKey, + count = 1, + ), + ) advanceUntilIdle() val reverted = readPost() assertNotNull(reverted) - val like = reverted.actions.filterIsInstance().first { it.updateKey == "like" } + val like = reverted.actions.filterIsInstance().first { it.updateKey == "mastodon_like_$postKey" } assertEquals(1, like.count?.value) assertEquals(1, fakeRemoteHandler.callCount) } @@ -292,17 +307,4 @@ class PostEventHandlerTest : RobolectricTest() { } } } - - private data class TestUpdateMenuEvent( - override val postKey: MicroBlogKey, - val updateKey: String, - val nextCount: Long, - ) : UpdatePostActionMenuEvent { - override fun nextActionMenu(): ActionMenu.Item = - ActionMenu.Item( - updateKey = updateKey, - text = ActionMenu.Item.Text.Raw("updated"), - count = UiNumber(nextCount), - ) - } } diff --git a/presenter/features/src/jvmTest/kotlin/dev/dimension/flare/common/SerializationFormatBenchmarkTest.kt b/presenter/features/src/jvmTest/kotlin/dev/dimension/flare/common/SerializationFormatBenchmarkTest.kt index 005c214910..726ec28ebc 100644 --- a/presenter/features/src/jvmTest/kotlin/dev/dimension/flare/common/SerializationFormatBenchmarkTest.kt +++ b/presenter/features/src/jvmTest/kotlin/dev/dimension/flare/common/SerializationFormatBenchmarkTest.kt @@ -424,7 +424,7 @@ class SerializationFormatBenchmarkTest { multiple = true, ownVotes = persistentListOf(1), voteEvent = - dev.dimension.flare.data.datasource.microblog.PostEvent.Mastodon.Vote( + dev.dimension.flare.ui.model.PostEvent.Mastodon.Vote( id = "vote-${statusKey.id}", accountKey = accountKey, postKey = statusKey, diff --git a/presenter/features/src/jvmTest/kotlin/dev/dimension/flare/ui/model/UiPollTest.kt b/presenter/features/src/jvmTest/kotlin/dev/dimension/flare/ui/model/UiPollTest.kt index ae2e81b974..1c5207b0da 100644 --- a/presenter/features/src/jvmTest/kotlin/dev/dimension/flare/ui/model/UiPollTest.kt +++ b/presenter/features/src/jvmTest/kotlin/dev/dimension/flare/ui/model/UiPollTest.kt @@ -1,6 +1,6 @@ package dev.dimension.flare.ui.model -import dev.dimension.flare.data.datasource.microblog.PostEvent +import dev.dimension.flare.ui.model.PostEvent import dev.dimension.flare.model.MicroBlogKey import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/ClickContext.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/ClickContext.kt similarity index 67% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/ClickContext.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/ClickContext.kt index e72b2e8519..e8c04181ce 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/ClickContext.kt +++ b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/ClickContext.kt @@ -1,33 +1,32 @@ package dev.dimension.flare.ui.model -import dev.dimension.flare.data.datasource.microblog.PostEvent import dev.dimension.flare.model.MicroBlogKey import dev.dimension.flare.ui.route.DeeplinkRoute import dev.dimension.flare.ui.route.toUri import kotlinx.serialization.Serializable public data class ClickContext( - val launcher: UriLauncher, + public val launcher: UriLauncher, ) @Serializable -internal sealed interface ClickEvent { +public sealed interface ClickEvent { @Serializable - data object Noop : ClickEvent + public data object Noop : ClickEvent @Serializable - data class Deeplink private constructor( - val url: String, + public data class Deeplink private constructor( + public val url: String, ) : ClickEvent { - constructor(route: DeeplinkRoute) : this(route.toUri()) - constructor(route: DeeplinkEvent) : this(route.toUri()) + public constructor(route: DeeplinkRoute) : this(route.toUri()) + public constructor(route: DeeplinkEvent) : this(route.toUri()) } - companion object { - fun event( + public companion object { + public fun event( accountKey: MicroBlogKey?, postEvent: PostEvent, - ) = if (accountKey == null) { + ): ClickEvent = if (accountKey == null) { Noop } else { Deeplink( @@ -38,10 +37,10 @@ internal sealed interface ClickEvent { ) } - inline fun event( + public inline fun event( accountKey: MicroBlogKey?, eventCreator: (accountKey: MicroBlogKey) -> PostEvent, - ) = if (accountKey == null) { + ): ClickEvent = if (accountKey == null) { Noop } else { Deeplink( @@ -54,7 +53,7 @@ internal sealed interface ClickEvent { } } -internal val ClickEvent.onClicked: ClickContext.() -> Unit +public val ClickEvent.onClicked: ClickContext.() -> Unit get() { when (this) { is ClickEvent.Deeplink -> { diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/DeeplinkEvent.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/DeeplinkEvent.kt similarity index 68% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/DeeplinkEvent.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/DeeplinkEvent.kt index 8cef658de1..205e5235e3 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/DeeplinkEvent.kt +++ b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/DeeplinkEvent.kt @@ -1,6 +1,5 @@ package dev.dimension.flare.ui.model -import dev.dimension.flare.data.datasource.microblog.PostEvent import dev.dimension.flare.model.MicroBlogKey import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.Serializable @@ -10,7 +9,7 @@ import kotlinx.serialization.protobuf.ProtoBuf @Serializable @OptIn(ExperimentalSerializationApi::class) -internal data class DeeplinkEvent( +public data class DeeplinkEvent( val accountKey: MicroBlogKey, val translationEvent: TranslationEvent? = null, val postEvent: PostEvent? = null, @@ -21,33 +20,33 @@ internal data class DeeplinkEvent( } } - companion object { - const val SCHEME = "flare-event" + public companion object { + public const val SCHEME: String = "flare-event" - fun parse(uri: String): DeeplinkEvent? = + public fun parse(uri: String): DeeplinkEvent? = runCatching { ProtoBuf.decodeFromHexString(uri.removePrefix("$SCHEME://")) }.getOrNull() - fun isDeeplinkEvent(uri: String): Boolean = uri.startsWith("$SCHEME://") + public fun isDeeplinkEvent(uri: String): Boolean = uri.startsWith("$SCHEME://") } - fun toUri(): String = "$SCHEME://${ProtoBuf.encodeToHexString(this)}" + public fun toUri(): String = "$SCHEME://${ProtoBuf.encodeToHexString(this)}" @Serializable - sealed interface TranslationEvent { + public sealed interface TranslationEvent { @Serializable - data class RetryTranslation( + public data class RetryTranslation( val statusKey: MicroBlogKey, ) : TranslationEvent @Serializable - data class Translate( + public data class Translate( val statusKey: MicroBlogKey, ) : TranslationEvent @Serializable - data class ShowOriginal( + public data class ShowOriginal( val statusKey: MicroBlogKey, ) : TranslationEvent } diff --git a/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/PostEvent.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/PostEvent.kt new file mode 100644 index 0000000000..131835ceff --- /dev/null +++ b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/PostEvent.kt @@ -0,0 +1,239 @@ +package dev.dimension.flare.ui.model + +import dev.dimension.flare.common.SerializableImmutableList +import dev.dimension.flare.model.MicroBlogKey +import kotlinx.collections.immutable.toImmutableList +import kotlinx.serialization.Serializable + +@Serializable +public sealed interface PostEvent { + public val postKey: MicroBlogKey + + @Serializable + public sealed interface PollEvent : PostEvent { + public val accountKey: MicroBlogKey + public val options: SerializableImmutableList + + public fun copyWithOptions(options: List): PollEvent + } + + @Serializable + public sealed interface Mastodon : PostEvent { + @Serializable + public data class Reblog( + override val postKey: MicroBlogKey, + val reblogged: Boolean, + val count: Long, + val accountKey: MicroBlogKey, + ) : Mastodon + + @Serializable + public data class Like( + override val postKey: MicroBlogKey, + val liked: Boolean, + val accountKey: MicroBlogKey, + val count: Long, + ) : Mastodon + + @Serializable + public data class Bookmark( + override val postKey: MicroBlogKey, + val bookmarked: Boolean, + val accountKey: MicroBlogKey, + ) : Mastodon + + @Serializable + public data class Vote( + val id: String, + override val accountKey: MicroBlogKey, + override val postKey: MicroBlogKey, + override val options: SerializableImmutableList, + ) : Mastodon, + PollEvent { + override fun copyWithOptions(options: List): PollEvent = copy(options = options.toImmutableList()) + } + + @Serializable + public data class AcceptFollowRequest( + override val postKey: MicroBlogKey, + val userKey: MicroBlogKey, + ) : Mastodon + + @Serializable + public data class RejectFollowRequest( + override val postKey: MicroBlogKey, + val userKey: MicroBlogKey, + ) : Mastodon + } + + @Serializable + public sealed interface Pleroma : PostEvent { + @Serializable + public data class React( + override val postKey: MicroBlogKey, + val hasReacted: Boolean, + val reaction: String, + ) : Pleroma + } + + @Serializable + public sealed interface Misskey : PostEvent { + @Serializable + public data class React( + override val postKey: MicroBlogKey, + val hasReacted: Boolean, + val reaction: String, + val count: Long = 0, + val accountKey: MicroBlogKey? = null, + ) : Misskey + + @Serializable + public data class Renote( + override val postKey: MicroBlogKey, + val count: Long = 0, + val accountKey: MicroBlogKey? = null, + ) : Misskey + + @Serializable + public data class Vote( + override val accountKey: MicroBlogKey, + override val postKey: MicroBlogKey, + override val options: SerializableImmutableList, + ) : Misskey, + PollEvent { + override fun copyWithOptions(options: List): PollEvent = copy(options = options.toImmutableList()) + } + + @Serializable + public data class Favourite( + override val postKey: MicroBlogKey, + val favourited: Boolean, + val accountKey: MicroBlogKey? = null, + ) : Misskey + + @Serializable + public data class AcceptFollowRequest( + override val postKey: MicroBlogKey, + val userKey: MicroBlogKey, + val notificationStatusKey: MicroBlogKey, + ) : Misskey + + @Serializable + public data class RejectFollowRequest( + override val postKey: MicroBlogKey, + val userKey: MicroBlogKey, + val notificationStatusKey: MicroBlogKey, + ) : Misskey + } + + @Serializable + public sealed interface Bluesky : PostEvent { + @Serializable + public data class Reblog( + override val postKey: MicroBlogKey, + val count: Long, + val cid: String, + val uri: String, + val repostUri: String?, + val accountKey: MicroBlogKey, + ) : Bluesky + + @Serializable + public data class Like( + override val postKey: MicroBlogKey, + val cid: String, + val uri: String, + val likedUri: String?, + val count: Long, + val accountKey: MicroBlogKey, + ) : Bluesky + + @Serializable + public data class Bookmark( + override val postKey: MicroBlogKey, + val uri: String, + val cid: String, + val bookmarked: Boolean, + val accountKey: MicroBlogKey, + val count: Long, + ) : Bluesky + } + + @Serializable + public sealed interface XQT : PostEvent { + @Serializable + public data class Retweet( + override val postKey: MicroBlogKey, + val retweeted: Boolean, + val count: Long = 0, + val accountKey: MicroBlogKey, + ) : XQT + + @Serializable + public data class Like( + override val postKey: MicroBlogKey, + val liked: Boolean, + val count: Long = 0, + val accountKey: MicroBlogKey, + ) : XQT + + @Serializable + public data class Bookmark( + override val postKey: MicroBlogKey, + val bookmarked: Boolean, + val count: Long = 0, + val accountKey: MicroBlogKey, + ) : XQT + } + + @Serializable + public sealed interface VVO : PostEvent { + @Serializable + public data class Like( + override val postKey: MicroBlogKey, + val liked: Boolean, + val count: Long = 0, + val accountKey: MicroBlogKey, + ) : VVO + + @Serializable + public data class LikeComment( + override val postKey: MicroBlogKey, + val liked: Boolean, + val count: Long = 0, + val accountKey: MicroBlogKey, + ) : VVO + + @Serializable + public data class Favorite( + override val postKey: MicroBlogKey, + val favorited: Boolean, + val accountKey: MicroBlogKey, + ) : VVO + } + + @Serializable + public sealed interface Nostr : PostEvent { + @Serializable + public data class Repost( + override val postKey: MicroBlogKey, + val repostEventId: String?, + val count: Long = 0, + val accountKey: MicroBlogKey, + ) : Nostr + + @Serializable + public data class Like( + override val postKey: MicroBlogKey, + val reactionEventId: String?, + val count: Long = 0, + val accountKey: MicroBlogKey, + ) : Nostr + + @Serializable + public data class Report( + override val postKey: MicroBlogKey, + val accountKey: MicroBlogKey, + ) : Nostr + } +} diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UriLauncher.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UriLauncher.kt similarity index 100% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UriLauncher.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UriLauncher.kt diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/route/DeeplinkRoute.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/route/DeeplinkRoute.kt similarity index 100% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/route/DeeplinkRoute.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/route/DeeplinkRoute.kt From 410ea099caac2f22f6a87b3d4a800dc96e2481f7 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Mon, 18 May 2026 20:53:41 +0900 Subject: [PATCH 029/261] Move action menu models to UI model --- .../datasource/microblog/UserActionsMenu.kt | 39 ++++++++++++++++++ .../data/datasource/microblog/ActionMenu.kt | 40 ++----------------- .../dev/dimension/flare/ui/model/UiPoll.kt | 5 +-- 3 files changed, 44 insertions(+), 40 deletions(-) create mode 100644 presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/UserActionsMenu.kt rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ActionMenu.kt (71%) rename {presenter/features => ui/model}/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiPoll.kt (93%) diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/UserActionsMenu.kt b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/UserActionsMenu.kt new file mode 100644 index 0000000000..0933971891 --- /dev/null +++ b/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/UserActionsMenu.kt @@ -0,0 +1,39 @@ +package dev.dimension.flare.data.datasource.microblog + +import dev.dimension.flare.model.MicroBlogKey +import dev.dimension.flare.ui.model.ClickEvent +import dev.dimension.flare.ui.model.UiIcon +import dev.dimension.flare.ui.route.DeeplinkRoute +import kotlinx.collections.immutable.persistentListOf + +internal fun userActionsMenu( + accountKey: MicroBlogKey?, + userKey: MicroBlogKey, + handle: String, +): List = + listOfNotNull( + ActionMenu.Item( + icon = UiIcon.Mute, + text = + ActionMenu.Item.Text.Localized( + type = ActionMenu.Item.Text.Localized.Type.MuteWithHandleParameter, + parameters = persistentListOf(handle), + ), + clickEvent = + ClickEvent.Deeplink( + DeeplinkRoute.MuteUser(accountKey, userKey), + ), + ), + ActionMenu.Item( + icon = UiIcon.Block, + text = + ActionMenu.Item.Text.Localized( + type = ActionMenu.Item.Text.Localized.Type.BlockWithHandleParameter, + parameters = persistentListOf(handle), + ), + clickEvent = + ClickEvent.Deeplink( + DeeplinkRoute.BlockUser(accountKey, userKey), + ), + ), + ) diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ActionMenu.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ActionMenu.kt similarity index 71% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ActionMenu.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ActionMenu.kt index bf2dbaa499..d4e8776158 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ActionMenu.kt +++ b/ui/model/src/commonMain/kotlin/dev/dimension/flare/data/datasource/microblog/ActionMenu.kt @@ -2,13 +2,11 @@ package dev.dimension.flare.data.datasource.microblog import androidx.compose.runtime.Immutable import dev.dimension.flare.common.SerializableImmutableList -import dev.dimension.flare.model.MicroBlogKey import dev.dimension.flare.ui.model.ClickContext import dev.dimension.flare.ui.model.ClickEvent import dev.dimension.flare.ui.model.UiIcon import dev.dimension.flare.ui.model.UiNumber import dev.dimension.flare.ui.model.onClicked -import dev.dimension.flare.ui.route.DeeplinkRoute import kotlinx.collections.immutable.persistentListOf import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @@ -18,7 +16,7 @@ import kotlinx.serialization.Serializable public sealed class ActionMenu { @Immutable @Serializable - public data class Group internal constructor( + public data class Group public constructor( val displayItem: Item, val actions: SerializableImmutableList, ) : ActionMenu() @@ -36,8 +34,8 @@ public sealed class ActionMenu { @Immutable @Serializable - public data class Item internal constructor( - internal val updateKey: String = "", + public data class Item public constructor( + val updateKey: String = "", val icon: UiIcon? = null, val text: Text? = null, val count: UiNumber? = null, @@ -115,35 +113,3 @@ public sealed class ActionMenu { } } } - -internal fun userActionsMenu( - accountKey: MicroBlogKey?, - userKey: MicroBlogKey, - handle: String, -): List = - listOfNotNull( - ActionMenu.Item( - icon = UiIcon.Mute, - text = - ActionMenu.Item.Text.Localized( - type = ActionMenu.Item.Text.Localized.Type.MuteWithHandleParameter, - parameters = persistentListOf(handle), - ), - clickEvent = - ClickEvent.Deeplink( - DeeplinkRoute.MuteUser(accountKey, userKey), - ), - ), - ActionMenu.Item( - icon = UiIcon.Block, - text = - ActionMenu.Item.Text.Localized( - type = ActionMenu.Item.Text.Localized.Type.BlockWithHandleParameter, - parameters = persistentListOf(handle), - ), - clickEvent = - ClickEvent.Deeplink( - DeeplinkRoute.BlockUser(accountKey, userKey), - ), - ), - ) diff --git a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiPoll.kt b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiPoll.kt similarity index 93% rename from presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiPoll.kt rename to ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiPoll.kt index f8a893f5c9..04dbdf2417 100644 --- a/presenter/features/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiPoll.kt +++ b/ui/model/src/commonMain/kotlin/dev/dimension/flare/ui/model/UiPoll.kt @@ -2,7 +2,6 @@ package dev.dimension.flare.ui.model import androidx.compose.runtime.Immutable import dev.dimension.flare.common.SerializableImmutableList -import dev.dimension.flare.ui.model.PostEvent import dev.dimension.flare.ui.humanizer.humanizePercentage import dev.dimension.flare.ui.render.UiDateTime import dev.dimension.flare.ui.render.toUi @@ -13,7 +12,7 @@ import kotlin.time.Instant @Serializable @Immutable -public data class UiPoll internal constructor( +public data class UiPoll public constructor( val id: String, val options: SerializableImmutableList