diff --git a/.claude/docs/clock-convention.md b/.claude/docs/clock-convention.md index 0176e183..12592670 100644 --- a/.claude/docs/clock-convention.md +++ b/.claude/docs/clock-convention.md @@ -8,6 +8,12 @@ - UseCase, Repository, DataSource 등 시간을 다루는 모든 레이어에 적용된다. - 타임스탬프가 필요한 경우: `clock.now().toEpochMilliseconds()`. +### 예외: Compose 레이어 + +- Composable, `remember*` 함수, ScaffoldState 등 **Compose 레이어**에서는 `Clock.System` 직접 사용을 허용한다. +- 이유: Composable/`remember*` 시그니처에 `Clock`을 강제 주입하면 호출부 부담이 커지고, UI 상태 초기값에 사용되는 현재 시각은 테스트 결정성보다 호출 시점의 자연스러운 사용성이 더 중요하다. +- 대신 Compose 레이어가 호출하는 ViewModel/UseCase/Repository는 컨벤션을 지킨다. + ### 이유 - 테스트에서 시간을 고정할 수 있어야 TC가 결정론적으로 동작한다. diff --git a/.gitignore b/.gitignore index de4fe5d6..dcb2864b 100644 --- a/.gitignore +++ b/.gitignore @@ -22,4 +22,7 @@ xcuserdata/ # Google google-services.json -GoogleService-Info.plist \ No newline at end of file +GoogleService-Info.plist + +# SPM +exportedKMP*/ \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md index c18673bd..a4b3dfa1 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -17,6 +17,13 @@ Kotlin Multiplatform 일기/메모 앱 (Android, iOS, JVM, WASM). ProjectGuard로 강제한다. domain은 data/feature를 알 수 없고, feature는 data를 직접 참조할 수 없다. +## 의존성 추가 규칙 + +- **코드 최소화**: 상위 의존성으로 transitively 포함되는 의존성은 명시적으로 추가하지 않는다. + - 예: `compose-material3` 추가 시 `compose-foundation`, `compose-ui`는 transitive로 함께 적용되므로 별도로 추가하지 않는다. +- **범위 최소화**: 실제 사용하는 최소 범위의 의존성만 추가한다. + - 예: `compose-runtime`만 필요하면 `compose-runtime`만 추가한다. `compose-ui`, `compose-foundation` 등 상위 의존성은 추가하지 않는다. + ## 공통 컨벤션 - Clock 주입: @.claude/docs/clock-convention.md diff --git a/Diary/Diary.xcodeproj/project.pbxproj b/Diary/Diary.xcodeproj/project.pbxproj index f2e8ff92..88c8f25b 100644 --- a/Diary/Diary.xcodeproj/project.pbxproj +++ b/Diary/Diary.xcodeproj/project.pbxproj @@ -315,7 +315,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.8.1; + MARKETING_VERSION = 1.8.2; OTHER_LDFLAGS = ""; PRODUCT_BUNDLE_IDENTIFIER = io.github.taetae98coding.diary.dev; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -413,7 +413,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.8.1; + MARKETING_VERSION = 1.8.2; OTHER_LDFLAGS = ""; PRODUCT_BUNDLE_IDENTIFIER = io.github.taetae98coding.diary; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -518,7 +518,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.8.1; + MARKETING_VERSION = 1.8.2; OTHER_LDFLAGS = ""; PRODUCT_BUNDLE_IDENTIFIER = io.github.taetae98coding.diary; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/app/android/dependencies/realReleaseRuntimeClasspath.txt b/app/android/dependencies/realReleaseRuntimeClasspath.txt index 1bc9218d..6e58e36e 100644 --- a/app/android/dependencies/realReleaseRuntimeClasspath.txt +++ b/app/android/dependencies/realReleaseRuntimeClasspath.txt @@ -2,8 +2,8 @@ androidx.activity:activity-compose:1.13.0 androidx.activity:activity-ktx:1.13.0 androidx.activity:activity:1.13.0 androidx.annotation:annotation-experimental:1.5.1 -androidx.annotation:annotation-jvm:1.9.1 -androidx.annotation:annotation:1.9.1 +androidx.annotation:annotation-jvm:1.10.0 +androidx.annotation:annotation:1.10.0 androidx.appcompat:appcompat-resources:1.7.1 androidx.appcompat:appcompat:1.7.1 androidx.arch.core:core-common:2.2.0 @@ -11,9 +11,9 @@ androidx.arch.core:core-runtime:2.2.0 androidx.autofill:autofill:1.0.0 androidx.biometric:biometric:1.1.0 androidx.browser:browser:1.10.0 -androidx.collection:collection-jvm:1.5.0 -androidx.collection:collection-ktx:1.5.0 -androidx.collection:collection:1.5.0 +androidx.collection:collection-jvm:1.6.0 +androidx.collection:collection-ktx:1.6.0 +androidx.collection:collection:1.6.0 androidx.compose.animation:animation-android:1.11.0-rc01 androidx.compose.animation:animation-core-android:1.11.0-rc01 androidx.compose.animation:animation-core:1.11.0-rc01 @@ -34,28 +34,28 @@ androidx.compose.material:material-icons-extended-android:1.7.6 androidx.compose.material:material-icons-extended:1.7.6 androidx.compose.material:material-ripple-android:1.11.0-rc01 androidx.compose.material:material-ripple:1.11.0-rc01 -androidx.compose.runtime:runtime-android:1.11.0-rc01 -androidx.compose.runtime:runtime-annotation-android:1.11.0-rc01 -androidx.compose.runtime:runtime-annotation:1.11.0-rc01 -androidx.compose.runtime:runtime-retain-android:1.11.0-rc01 -androidx.compose.runtime:runtime-retain:1.11.0-rc01 -androidx.compose.runtime:runtime-saveable-android:1.11.0-rc01 -androidx.compose.runtime:runtime-saveable:1.11.0-rc01 -androidx.compose.runtime:runtime:1.11.0-rc01 -androidx.compose.ui:ui-android:1.11.0-rc01 -androidx.compose.ui:ui-geometry-android:1.11.0-rc01 -androidx.compose.ui:ui-geometry:1.11.0-rc01 -androidx.compose.ui:ui-graphics-android:1.11.0-rc01 -androidx.compose.ui:ui-graphics:1.11.0-rc01 -androidx.compose.ui:ui-text-android:1.11.0-rc01 -androidx.compose.ui:ui-text:1.11.0-rc01 -androidx.compose.ui:ui-tooling-preview-android:1.11.0-rc01 -androidx.compose.ui:ui-tooling-preview:1.11.0-rc01 -androidx.compose.ui:ui-unit-android:1.11.0-rc01 -androidx.compose.ui:ui-unit:1.11.0-rc01 -androidx.compose.ui:ui-util-android:1.11.0-rc01 -androidx.compose.ui:ui-util:1.11.0-rc01 -androidx.compose.ui:ui:1.11.0-rc01 +androidx.compose.runtime:runtime-android:1.11.0 +androidx.compose.runtime:runtime-annotation-android:1.11.0 +androidx.compose.runtime:runtime-annotation:1.11.0 +androidx.compose.runtime:runtime-retain-android:1.11.0 +androidx.compose.runtime:runtime-retain:1.11.0 +androidx.compose.runtime:runtime-saveable-android:1.11.0 +androidx.compose.runtime:runtime-saveable:1.11.0 +androidx.compose.runtime:runtime:1.11.0 +androidx.compose.ui:ui-android:1.11.0 +androidx.compose.ui:ui-geometry-android:1.11.0 +androidx.compose.ui:ui-geometry:1.11.0 +androidx.compose.ui:ui-graphics-android:1.11.0 +androidx.compose.ui:ui-graphics:1.11.0 +androidx.compose.ui:ui-text-android:1.11.0 +androidx.compose.ui:ui-text:1.11.0 +androidx.compose.ui:ui-tooling-preview-android:1.11.0 +androidx.compose.ui:ui-tooling-preview:1.11.0 +androidx.compose.ui:ui-unit-android:1.11.0 +androidx.compose.ui:ui-unit:1.11.0 +androidx.compose.ui:ui-util-android:1.11.0 +androidx.compose.ui:ui-util:1.11.0 +androidx.compose.ui:ui:1.11.0 androidx.concurrent:concurrent-futures-ktx:1.1.0 androidx.concurrent:concurrent-futures:1.1.0 androidx.core:core-ktx:1.18.0 @@ -66,18 +66,18 @@ androidx.credentials:credentials:1.6.0 androidx.cursoradapter:cursoradapter:1.0.0 androidx.customview:customview-poolingcontainer:1.0.0 androidx.customview:customview:1.0.0 -androidx.datastore:datastore-android:1.3.0-alpha08 -androidx.datastore:datastore-core-android:1.3.0-alpha08 -androidx.datastore:datastore-core-okio-jvm:1.3.0-alpha08 -androidx.datastore:datastore-core-okio:1.3.0-alpha08 -androidx.datastore:datastore-core:1.3.0-alpha08 -androidx.datastore:datastore-preferences-android:1.3.0-alpha08 -androidx.datastore:datastore-preferences-core-android:1.3.0-alpha08 -androidx.datastore:datastore-preferences-core:1.3.0-alpha08 -androidx.datastore:datastore-preferences-external-protobuf:1.3.0-alpha08 -androidx.datastore:datastore-preferences-proto:1.3.0-alpha08 -androidx.datastore:datastore-preferences:1.3.0-alpha08 -androidx.datastore:datastore:1.3.0-alpha08 +androidx.datastore:datastore-android:1.3.0-alpha09 +androidx.datastore:datastore-core-android:1.3.0-alpha09 +androidx.datastore:datastore-core-okio-jvm:1.3.0-alpha09 +androidx.datastore:datastore-core-okio:1.3.0-alpha09 +androidx.datastore:datastore-core:1.3.0-alpha09 +androidx.datastore:datastore-preferences-android:1.3.0-alpha09 +androidx.datastore:datastore-preferences-core-android:1.3.0-alpha09 +androidx.datastore:datastore-preferences-core:1.3.0-alpha09 +androidx.datastore:datastore-preferences-external-protobuf:1.3.0-alpha09 +androidx.datastore:datastore-preferences-proto:1.3.0-alpha09 +androidx.datastore:datastore-preferences:1.3.0-alpha09 +androidx.datastore:datastore:1.3.0-alpha09 androidx.documentfile:documentfile:1.0.0 androidx.drawerlayout:drawerlayout:1.0.0 androidx.dynamicanimation:dynamicanimation:1.0.0 @@ -91,54 +91,54 @@ androidx.graphics:graphics-shapes-android:1.1.0 androidx.graphics:graphics-shapes:1.1.0 androidx.interpolator:interpolator:1.0.0 androidx.legacy:legacy-support-core-utils:1.0.0 -androidx.lifecycle:lifecycle-common-java8:2.11.0-alpha03 -androidx.lifecycle:lifecycle-common-jvm:2.11.0-alpha03 -androidx.lifecycle:lifecycle-common:2.11.0-alpha03 -androidx.lifecycle:lifecycle-livedata-core-ktx:2.11.0-alpha03 -androidx.lifecycle:lifecycle-livedata-core:2.11.0-alpha03 -androidx.lifecycle:lifecycle-livedata:2.11.0-alpha03 -androidx.lifecycle:lifecycle-process:2.11.0-alpha03 -androidx.lifecycle:lifecycle-runtime-android:2.11.0-alpha03 -androidx.lifecycle:lifecycle-runtime-compose-android:2.11.0-alpha03 -androidx.lifecycle:lifecycle-runtime-compose:2.11.0-alpha03 -androidx.lifecycle:lifecycle-runtime-ktx-android:2.11.0-alpha03 -androidx.lifecycle:lifecycle-runtime-ktx:2.11.0-alpha03 -androidx.lifecycle:lifecycle-runtime:2.11.0-alpha03 -androidx.lifecycle:lifecycle-service:2.11.0-alpha03 -androidx.lifecycle:lifecycle-viewmodel-android:2.11.0-alpha03 -androidx.lifecycle:lifecycle-viewmodel-compose-android:2.11.0-alpha03 -androidx.lifecycle:lifecycle-viewmodel-compose:2.11.0-alpha03 -androidx.lifecycle:lifecycle-viewmodel-ktx:2.11.0-alpha03 -androidx.lifecycle:lifecycle-viewmodel-navigation3-android:2.11.0-alpha03 -androidx.lifecycle:lifecycle-viewmodel-navigation3:2.11.0-alpha03 -androidx.lifecycle:lifecycle-viewmodel-savedstate-android:2.11.0-alpha03 -androidx.lifecycle:lifecycle-viewmodel-savedstate:2.11.0-alpha03 -androidx.lifecycle:lifecycle-viewmodel:2.11.0-alpha03 +androidx.lifecycle:lifecycle-common-java8:2.11.0-beta01 +androidx.lifecycle:lifecycle-common-jvm:2.11.0-beta01 +androidx.lifecycle:lifecycle-common:2.11.0-beta01 +androidx.lifecycle:lifecycle-livedata-core-ktx:2.11.0-beta01 +androidx.lifecycle:lifecycle-livedata-core:2.11.0-beta01 +androidx.lifecycle:lifecycle-livedata:2.11.0-beta01 +androidx.lifecycle:lifecycle-process:2.11.0-beta01 +androidx.lifecycle:lifecycle-runtime-android:2.11.0-beta01 +androidx.lifecycle:lifecycle-runtime-compose-android:2.11.0-beta01 +androidx.lifecycle:lifecycle-runtime-compose:2.11.0-beta01 +androidx.lifecycle:lifecycle-runtime-ktx-android:2.11.0-beta01 +androidx.lifecycle:lifecycle-runtime-ktx:2.11.0-beta01 +androidx.lifecycle:lifecycle-runtime:2.11.0-beta01 +androidx.lifecycle:lifecycle-service:2.11.0-beta01 +androidx.lifecycle:lifecycle-viewmodel-android:2.11.0-beta01 +androidx.lifecycle:lifecycle-viewmodel-compose-android:2.11.0-beta01 +androidx.lifecycle:lifecycle-viewmodel-compose:2.11.0-beta01 +androidx.lifecycle:lifecycle-viewmodel-ktx:2.11.0-beta01 +androidx.lifecycle:lifecycle-viewmodel-navigation3-android:2.11.0-beta01 +androidx.lifecycle:lifecycle-viewmodel-navigation3:2.11.0-beta01 +androidx.lifecycle:lifecycle-viewmodel-savedstate-android:2.11.0-beta01 +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.11.0-beta01 +androidx.lifecycle:lifecycle-viewmodel:2.11.0-beta01 androidx.loader:loader:1.1.0 androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 -androidx.navigation3:navigation3-runtime-android:1.1.0 -androidx.navigation3:navigation3-runtime:1.1.0 -androidx.navigation3:navigation3-ui-android:1.1.0 -androidx.navigation3:navigation3-ui:1.1.0 +androidx.navigation3:navigation3-runtime-android:1.1.1 +androidx.navigation3:navigation3-runtime:1.1.1 +androidx.navigation3:navigation3-ui-android:1.1.1 +androidx.navigation3:navigation3-ui:1.1.1 androidx.navigationevent:navigationevent-android:1.0.2 androidx.navigationevent:navigationevent-compose-android:1.0.2 androidx.navigationevent:navigationevent-compose:1.0.2 androidx.navigationevent:navigationevent:1.0.2 -androidx.paging:paging-common-android:3.5.0-rc01 -androidx.paging:paging-common:3.5.0-rc01 -androidx.paging:paging-compose-android:3.5.0-rc01 -androidx.paging:paging-compose:3.5.0-rc01 +androidx.paging:paging-common-android:3.5.0 +androidx.paging:paging-common:3.5.0 +androidx.paging:paging-compose-android:3.5.0 +androidx.paging:paging-compose:3.5.0 androidx.print:print:1.0.0 androidx.privacysandbox.ads:ads-adservices-java:1.1.0-beta11 androidx.privacysandbox.ads:ads-adservices:1.1.0-beta11 androidx.profileinstaller:profileinstaller:1.4.1 androidx.resourceinspection:resourceinspection-annotation:1.0.1 -androidx.room3:room3-common-jvm:3.0.0-alpha03 -androidx.room3:room3-common:3.0.0-alpha03 -androidx.room3:room3-paging-android:3.0.0-alpha03 -androidx.room3:room3-paging:3.0.0-alpha03 -androidx.room3:room3-runtime-android:3.0.0-alpha03 -androidx.room3:room3-runtime:3.0.0-alpha03 +androidx.room3:room3-common-jvm:3.0.0-alpha04 +androidx.room3:room3-common:3.0.0-alpha04 +androidx.room3:room3-paging-android:3.0.0-alpha04 +androidx.room3:room3-paging:3.0.0-alpha04 +androidx.room3:room3-runtime-android:3.0.0-alpha04 +androidx.room3:room3-runtime:3.0.0-alpha04 androidx.room:room-common-jvm:2.7.0 androidx.room:room-common:2.7.0 androidx.room:room-runtime-android:2.7.0 @@ -148,18 +148,18 @@ androidx.savedstate:savedstate-compose-android:1.4.0 androidx.savedstate:savedstate-compose:1.4.0 androidx.savedstate:savedstate-ktx:1.4.0 androidx.savedstate:savedstate:1.4.0 -androidx.sqlite:sqlite-android:2.7.0-alpha03 -androidx.sqlite:sqlite-async-android:2.7.0-alpha03 -androidx.sqlite:sqlite-async:2.7.0-alpha03 -androidx.sqlite:sqlite-bundled-android:2.7.0-alpha03 -androidx.sqlite:sqlite-bundled:2.7.0-alpha03 -androidx.sqlite:sqlite-framework-android:2.7.0-alpha03 -androidx.sqlite:sqlite-framework:2.7.0-alpha03 -androidx.sqlite:sqlite:2.7.0-alpha03 +androidx.sqlite:sqlite-android:2.7.0-alpha04 +androidx.sqlite:sqlite-async-android:2.7.0-alpha04 +androidx.sqlite:sqlite-async:2.7.0-alpha04 +androidx.sqlite:sqlite-bundled-android:2.7.0-alpha04 +androidx.sqlite:sqlite-bundled:2.7.0-alpha04 +androidx.sqlite:sqlite-framework-android:2.7.0-alpha04 +androidx.sqlite:sqlite-framework:2.7.0-alpha04 +androidx.sqlite:sqlite:2.7.0-alpha04 androidx.startup:startup-runtime:1.2.0 -androidx.tracing:tracing-android:2.0.0-alpha06 -androidx.tracing:tracing-ktx:2.0.0-alpha06 -androidx.tracing:tracing:2.0.0-alpha06 +androidx.tracing:tracing-android:2.0.0-alpha07 +androidx.tracing:tracing-ktx:2.0.0-alpha07 +androidx.tracing:tracing:2.0.0-alpha07 androidx.transition:transition:1.6.0 androidx.vectordrawable:vectordrawable-animated:1.1.0 androidx.vectordrawable:vectordrawable:1.1.0 @@ -209,12 +209,12 @@ com.google.errorprone:error_prone_annotations:2.26.0 com.google.firebase:firebase-abt:21.1.1 com.google.firebase:firebase-analytics:23.2.0 com.google.firebase:firebase-annotations:17.0.0 -com.google.firebase:firebase-bom:34.12.0 +com.google.firebase:firebase-bom:34.13.0 com.google.firebase:firebase-common:22.0.1 com.google.firebase:firebase-components:19.0.0 com.google.firebase:firebase-config-interop:16.0.1 -com.google.firebase:firebase-config:23.0.1 -com.google.firebase:firebase-crashlytics:20.0.5 +com.google.firebase:firebase-config:23.1.0 +com.google.firebase:firebase-crashlytics:20.0.6 com.google.firebase:firebase-datatransport:19.0.0 com.google.firebase:firebase-encoders-json:18.0.1 com.google.firebase:firebase-encoders-proto:16.0.0 @@ -223,7 +223,7 @@ com.google.firebase:firebase-installations-interop:17.3.0 com.google.firebase:firebase-installations:19.1.0 com.google.firebase:firebase-measurement-connector:20.0.1 com.google.firebase:firebase-perf:22.0.5 -com.google.firebase:firebase-sessions:3.0.5 +com.google.firebase:firebase-sessions:3.0.6 com.google.firebase:protolite-well-known-types:18.0.1 com.google.guava:failureaccess:1.0.1 com.google.guava:guava:31.1-android @@ -330,14 +330,14 @@ io.ktor:ktor-websockets:3.4.3 jakarta.inject:jakarta.inject-api:2.0.1 javax.inject:javax.inject:1 org.checkerframework:checker-qual:3.12.0 -org.jetbrains.androidx.lifecycle:lifecycle-common:2.11.0-alpha03 -org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose:2.11.0-alpha03 -org.jetbrains.androidx.lifecycle:lifecycle-runtime:2.11.0-alpha03 -org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose:2.11.0-alpha03 -org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-navigation3:2.11.0-alpha03 -org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-savedstate:2.11.0-alpha03 -org.jetbrains.androidx.lifecycle:lifecycle-viewmodel:2.11.0-alpha03 -org.jetbrains.androidx.navigation3:navigation3-ui:1.1.0 +org.jetbrains.androidx.lifecycle:lifecycle-common:2.11.0-beta01 +org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose:2.11.0-beta01 +org.jetbrains.androidx.lifecycle:lifecycle-runtime:2.11.0-beta01 +org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose:2.11.0-beta01 +org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-navigation3:2.11.0-beta01 +org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-savedstate:2.11.0-beta01 +org.jetbrains.androidx.lifecycle:lifecycle-viewmodel:2.11.0-beta01 +org.jetbrains.androidx.navigation3:navigation3-ui:1.1.1 org.jetbrains.androidx.navigationevent:navigationevent-compose:1.0.1 org.jetbrains.androidx.savedstate:savedstate-compose:1.4.0 org.jetbrains.androidx.savedstate:savedstate:1.4.0 @@ -353,15 +353,15 @@ org.jetbrains.compose.material3:material3:1.11.0-alpha07 org.jetbrains.compose.material:material-icons-core:1.7.3 org.jetbrains.compose.material:material-icons-extended:1.7.3 org.jetbrains.compose.material:material-ripple:1.11.0-beta03 -org.jetbrains.compose.runtime:runtime-saveable:1.11.0-beta03 -org.jetbrains.compose.runtime:runtime:1.11.0-beta03 -org.jetbrains.compose.ui:ui-geometry:1.11.0-beta03 -org.jetbrains.compose.ui:ui-graphics:1.11.0-beta03 -org.jetbrains.compose.ui:ui-text:1.11.0-beta03 -org.jetbrains.compose.ui:ui-tooling-preview:1.11.0-beta03 -org.jetbrains.compose.ui:ui-unit:1.11.0-beta03 -org.jetbrains.compose.ui:ui-util:1.11.0-beta03 -org.jetbrains.compose.ui:ui:1.11.0-beta03 +org.jetbrains.compose.runtime:runtime-saveable:1.11.0-rc01 +org.jetbrains.compose.runtime:runtime:1.11.0-rc01 +org.jetbrains.compose.ui:ui-geometry:1.11.0-rc01 +org.jetbrains.compose.ui:ui-graphics:1.11.0-rc01 +org.jetbrains.compose.ui:ui-text:1.11.0-rc01 +org.jetbrains.compose.ui:ui-tooling-preview:1.11.0-rc01 +org.jetbrains.compose.ui:ui-unit:1.11.0-rc01 +org.jetbrains.compose.ui:ui-util:1.11.0-rc01 +org.jetbrains.compose.ui:ui:1.11.0-rc01 org.jetbrains.kotlin:kotlin-stdlib-common:2.3.21 org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.0 org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22 @@ -370,14 +370,14 @@ org.jetbrains.kotlinx:atomicfu-jvm:0.28.0 org.jetbrains.kotlinx:atomicfu:0.28.0 org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.4.0 org.jetbrains.kotlinx:kotlinx-collections-immutable:0.4.0 -org.jetbrains.kotlinx:kotlinx-coroutines-android:1.11.0-rc02 -org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.11.0-rc02 -org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.11.0-rc02 -org.jetbrains.kotlinx:kotlinx-coroutines-core:1.11.0-rc02 -org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.11.0-rc02 -org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:1.11.0-rc02 -org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.8.0-rc02 -org.jetbrains.kotlinx:kotlinx-datetime:0.8.0-rc02 +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.11.0 +org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.11.0 +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.11.0 +org.jetbrains.kotlinx:kotlinx-coroutines-core:1.11.0 +org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.11.0 +org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:1.11.0 +org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.8.0 +org.jetbrains.kotlinx:kotlinx-datetime:0.8.0 org.jetbrains.kotlinx:kotlinx-io-bytestring-jvm:0.9.0 org.jetbrains.kotlinx:kotlinx-io-bytestring:0.9.0 org.jetbrains.kotlinx:kotlinx-io-core-jvm:0.9.0 diff --git a/app/shared/build.gradle.kts b/app/shared/build.gradle.kts index 98fee2fb..1d77bbba 100644 --- a/app/shared/build.gradle.kts +++ b/app/shared/build.gradle.kts @@ -50,6 +50,7 @@ kotlin { implementation(projects.feature.routine) implementation(projects.feature.tag) implementation(projects.library.navigation3Runtime) + implementation(projects.logger.analytics.api) implementation(libs.jetbrains.compose.material3.navigation.suite) implementation(libs.jetbrains.navigation3.ui) implementation(libs.coil.compose) diff --git a/app/shared/src/commonMain/kotlin/io/github/taetae98coding/diary/app/shared/AppNavigation.kt b/app/shared/src/commonMain/kotlin/io/github/taetae98coding/diary/app/shared/AppNavigation.kt index 12abe035..fbf03aa2 100644 --- a/app/shared/src/commonMain/kotlin/io/github/taetae98coding/diary/app/shared/AppNavigation.kt +++ b/app/shared/src/commonMain/kotlin/io/github/taetae98coding/diary/app/shared/AppNavigation.kt @@ -12,6 +12,7 @@ import androidx.navigation3.scene.Scene import androidx.navigation3.scene.SinglePaneSceneStrategy import androidx.navigation3.ui.NavDisplay import androidx.navigationevent.NavigationEvent +import io.github.taetae98coding.diary.app.shared.navigation3.rememberAnalyticsNavEntryDecorator import io.github.taetae98coding.diary.app.shared.navigation3.rememberRetainedValuesStoreNavEntryDecorator import io.github.taetae98coding.diary.feature.calendar.calendarEntry import io.github.taetae98coding.diary.feature.login.loginEntry @@ -32,6 +33,7 @@ internal fun AppNavigation( rememberSaveableStateHolderNavEntryDecorator(), rememberRetainedValuesStoreNavEntryDecorator(), rememberViewModelStoreNavEntryDecorator(), + rememberAnalyticsNavEntryDecorator(), ), sceneStrategies = listOf( DialogSceneStrategy(), diff --git a/app/shared/src/commonMain/kotlin/io/github/taetae98coding/diary/app/shared/navigation3/AnalyticsNavEntryDecorator.kt b/app/shared/src/commonMain/kotlin/io/github/taetae98coding/diary/app/shared/navigation3/AnalyticsNavEntryDecorator.kt new file mode 100644 index 00000000..1d340eea --- /dev/null +++ b/app/shared/src/commonMain/kotlin/io/github/taetae98coding/diary/app/shared/navigation3/AnalyticsNavEntryDecorator.kt @@ -0,0 +1,32 @@ +package io.github.taetae98coding.diary.app.shared.navigation3 + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.compose.LifecycleEventEffect +import androidx.navigation3.runtime.NavEntryDecorator +import io.github.taetae98coding.diary.logger.analytics.api.AnalyticsLogEntry +import io.github.taetae98coding.diary.logger.core.DiaryLogger + +internal class AnalyticsNavEntryDecorator : + NavEntryDecorator( + decorate = { entry -> + val screenName = entry.contentKey::class.simpleName.orEmpty() + + LifecycleEventEffect(Lifecycle.Event.ON_RESUME) { + DiaryLogger.log( + AnalyticsLogEntry( + name = "screen_view", + params = mapOf("screen_name" to screenName), + ), + ) + } + + entry.Content() + }, + ) + +@Composable +internal fun rememberAnalyticsNavEntryDecorator(): AnalyticsNavEntryDecorator { + return remember { AnalyticsNavEntryDecorator() } +} diff --git a/app/shared/src/nonAppleMain/kotlin/io/github/taetae98coding/diary/app/shared/AppNavigation.nonApple.kt b/app/shared/src/nonAppleMain/kotlin/io/github/taetae98coding/diary/app/shared/AppNavigation.nonApple.kt index 1ffed456..8e6f6cf8 100644 --- a/app/shared/src/nonAppleMain/kotlin/io/github/taetae98coding/diary/app/shared/AppNavigation.nonApple.kt +++ b/app/shared/src/nonAppleMain/kotlin/io/github/taetae98coding/diary/app/shared/AppNavigation.nonApple.kt @@ -8,7 +8,7 @@ import androidx.navigation3.ui.defaultPredictivePopTransitionSpec import androidx.navigation3.ui.defaultTransitionSpec import androidx.navigationevent.NavigationEvent -internal actual fun platformTransitionSpec(state: io.github.taetae98coding.diary.app.shared.AppState): androidx.compose.animation.AnimatedContentTransitionScope>.() -> androidx.compose.animation.ContentTransform { +internal actual fun platformTransitionSpec(state: AppState): AnimatedContentTransitionScope>.() -> ContentTransform { return defaultTransitionSpec() } diff --git a/app/wasm/build.gradle.kts b/app/wasm/build.gradle.kts index df325eea..2107ff9f 100644 --- a/app/wasm/build.gradle.kts +++ b/app/wasm/build.gradle.kts @@ -18,7 +18,6 @@ kotlin { dependencies { implementation(projects.app.shared) implementation(libs.jetbrains.compose.components.resources) - implementation(libs.jetbrains.compose.ui) implementation(libs.jetbrains.compose.material3) } } diff --git a/build-logic/src/main/kotlin/BuildConfig.kt b/build-logic/src/main/kotlin/BuildConfig.kt index 72778bd7..f6bb6f6d 100644 --- a/build-logic/src/main/kotlin/BuildConfig.kt +++ b/build-logic/src/main/kotlin/BuildConfig.kt @@ -4,6 +4,6 @@ public data object BuildConfig { internal const val ANDROID_TARGET_SDK = 36 public const val NAMESPACE: String = "io.github.taetae98coding.diary" - public const val VERSION_NAME: String = "1.8.1" - public const val VERSION_CODE: Int = 10 + public const val VERSION_NAME: String = "1.8.2" + public const val VERSION_CODE: Int = 11 } diff --git a/build-logic/src/main/kotlin/plugin/primitive/ComposePrimitivePlugin.kt b/build-logic/src/main/kotlin/plugin/primitive/ComposePrimitivePlugin.kt index c5d2112f..a4584d6a 100644 --- a/build-logic/src/main/kotlin/plugin/primitive/ComposePrimitivePlugin.kt +++ b/build-logic/src/main/kotlin/plugin/primitive/ComposePrimitivePlugin.kt @@ -4,9 +4,7 @@ import io.github.taetae98coding.diary.gradle.plugins import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.configure -import org.gradle.kotlin.dsl.findByType import org.jetbrains.kotlin.compose.compiler.gradle.ComposeCompilerGradlePluginExtension -import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension internal class ComposePrimitivePlugin : Plugin { override fun apply(target: Project) { @@ -15,21 +13,6 @@ internal class ComposePrimitivePlugin : Plugin { apply("org.jetbrains.kotlin.plugin.compose") } - target.extensions - .findByType() - ?.apply { - compilerOptions { - optIn.addAll( - "androidx.compose.ui.ExperimentalComposeUiApi", - "androidx.compose.foundation.ExperimentalFoundationApi", - "androidx.compose.foundation.layout.ExperimentalFlexBoxApi", - "androidx.compose.material3.ExperimentalMaterial3Api", - "androidx.compose.material3.ExperimentalMaterial3ExpressiveApi", - "androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi", - ) - } - } - target.configure { metricsDestination.set(target.projectDir.resolve("build/compose/metrics")) reportsDestination.set(target.projectDir.resolve("build/compose/reports")) diff --git a/build-logic/src/main/kotlin/plugin/primitive/WasmPrimitivePlugin.kt b/build-logic/src/main/kotlin/plugin/primitive/WasmPrimitivePlugin.kt index 939a7b23..15198703 100644 --- a/build-logic/src/main/kotlin/plugin/primitive/WasmPrimitivePlugin.kt +++ b/build-logic/src/main/kotlin/plugin/primitive/WasmPrimitivePlugin.kt @@ -4,9 +4,11 @@ import io.github.taetae98coding.diary.gradle.plugins import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.configure +import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension internal class WasmPrimitivePlugin : Plugin { + @OptIn(ExperimentalWasmDsl::class) override fun apply(target: Project) { target.plugins { apply("org.jetbrains.kotlin.multiplatform") diff --git a/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/button/AddFloatingButton.kt b/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/button/AddFloatingButton.kt index 1bf37e8a..a4624f9d 100644 --- a/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/button/AddFloatingButton.kt +++ b/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/button/AddFloatingButton.kt @@ -1,8 +1,11 @@ +@file:OptIn(ExperimentalMaterial3ExpressiveApi::class) + package io.github.taetae98coding.diary.compose.core.button import androidx.compose.animation.Crossfade import androidx.compose.foundation.layout.size import androidx.compose.material3.CircularWavyProgressIndicator +import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.FloatingActionButton import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier diff --git a/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/button/CheckFloatingButton.kt b/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/button/CheckFloatingButton.kt index 4aa3d763..4f45ed28 100644 --- a/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/button/CheckFloatingButton.kt +++ b/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/button/CheckFloatingButton.kt @@ -1,8 +1,11 @@ +@file:OptIn(ExperimentalMaterial3ExpressiveApi::class) + package io.github.taetae98coding.diary.compose.core.button import androidx.compose.animation.Crossfade import androidx.compose.foundation.layout.size import androidx.compose.material3.CircularWavyProgressIndicator +import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.FloatingActionButton import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier diff --git a/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/date/LocalTimePicker.kt b/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/date/LocalTimePicker.kt index 5b854bac..c8274c02 100644 --- a/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/date/LocalTimePicker.kt +++ b/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/date/LocalTimePicker.kt @@ -1,5 +1,8 @@ +@file:OptIn(ExperimentalMaterial3Api::class) + package io.github.taetae98coding.diary.compose.core.date +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.TimePicker import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier diff --git a/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/date/LocalTimePickerState.kt b/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/date/LocalTimePickerState.kt index c5ee17f5..ea0dbec0 100644 --- a/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/date/LocalTimePickerState.kt +++ b/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/date/LocalTimePickerState.kt @@ -1,5 +1,8 @@ +@file:OptIn(ExperimentalMaterial3Api::class) + package io.github.taetae98coding.diary.compose.core.date +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.TimePickerState import androidx.compose.material3.rememberTimePickerState import androidx.compose.runtime.Composable diff --git a/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/dialog/ColorPickerHost.kt b/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/dialog/ColorPickerHost.kt index adb8b6b6..5b28a625 100644 --- a/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/dialog/ColorPickerHost.kt +++ b/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/dialog/ColorPickerHost.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalMaterial3Api::class) + package io.github.taetae98coding.diary.compose.core.dialog import androidx.compose.foundation.layout.Arrangement @@ -5,6 +7,7 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material3.BasicAlertDialog import androidx.compose.material3.Card +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable diff --git a/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/dialog/LocalDatePickerDialogHost.kt b/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/dialog/LocalDatePickerDialogHost.kt index fc4236a8..f75538ec 100644 --- a/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/dialog/LocalDatePickerDialogHost.kt +++ b/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/dialog/LocalDatePickerDialogHost.kt @@ -1,6 +1,9 @@ +@file:OptIn(ExperimentalMaterial3Api::class) + package io.github.taetae98coding.diary.compose.core.dialog import androidx.compose.material3.DatePickerDialog +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable diff --git a/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/theme/DiaryTheme.kt b/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/theme/DiaryTheme.kt index 35daba12..9f9f480c 100644 --- a/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/theme/DiaryTheme.kt +++ b/compose/core/src/commonMain/kotlin/io/github/taetae98coding/diary/compose/core/theme/DiaryTheme.kt @@ -1,7 +1,10 @@ +@file:OptIn(ExperimentalMaterial3ExpressiveApi::class) + package io.github.taetae98coding.diary.compose.core.theme import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material3.ColorScheme +import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.MaterialExpressiveTheme import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Typography diff --git a/core/database/impl/src/commonMain/kotlin/io/github/taetae98coding/diary/core/database/impl/dao/AccountCalendarMemoDao.kt b/core/database/impl/src/commonMain/kotlin/io/github/taetae98coding/diary/core/database/impl/dao/AccountCalendarMemoDao.kt index a9442fe1..7fe25419 100644 --- a/core/database/impl/src/commonMain/kotlin/io/github/taetae98coding/diary/core/database/impl/dao/AccountCalendarMemoDao.kt +++ b/core/database/impl/src/commonMain/kotlin/io/github/taetae98coding/diary/core/database/impl/dao/AccountCalendarMemoDao.kt @@ -2,6 +2,7 @@ package io.github.taetae98coding.diary.core.database.impl.dao import androidx.room3.Dao import androidx.room3.Query +import androidx.room3.RewriteQueriesToDropUnusedColumns import io.github.taetae98coding.diary.core.database.api.entity.CalendarMemoLocalEntity import kotlin.uuid.Uuid import kotlinx.coroutines.flow.Flow @@ -38,6 +39,7 @@ internal interface AccountCalendarMemoDao { ORDER BY Memo.isAllDay DESC, Memo.start, Memo.endInclusive DESC, Memo.title """, ) + @RewriteQueriesToDropUnusedColumns fun get( accountId: Uuid, year: Int, diff --git a/core/supabase/impl/src/commonMain/kotlin/io/github/taetae98coding/diary/core/supabase/impl/SupabaseAuthImpl.kt b/core/supabase/impl/src/commonMain/kotlin/io/github/taetae98coding/diary/core/supabase/impl/SupabaseAuthImpl.kt index 407566b4..2f6df084 100644 --- a/core/supabase/impl/src/commonMain/kotlin/io/github/taetae98coding/diary/core/supabase/impl/SupabaseAuthImpl.kt +++ b/core/supabase/impl/src/commonMain/kotlin/io/github/taetae98coding/diary/core/supabase/impl/SupabaseAuthImpl.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.core.supabase.impl import io.github.jan.supabase.SupabaseClient @@ -8,6 +10,7 @@ import io.github.jan.supabase.auth.status.RefreshFailureCause import io.github.jan.supabase.auth.status.SessionStatus import io.github.taetae98coding.diary.core.supabase.api.SupabaseAuth import io.github.taetae98coding.diary.core.supabase.api.SupabaseSessionStatus +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.mapLatest @@ -45,8 +48,10 @@ internal class SupabaseAuthImpl(private val supabase: SupabaseClient) : Supabase } private suspend fun getSessionStatusFromStorage(): SupabaseSessionStatus? { - return supabase.auth.sessionManager.loadSession().user - ?.let { SupabaseSessionStatus.Authenticated(userId = it.id, email = it.email) } + return runCatching { + supabase.auth.sessionManager.loadSession().user + ?.let { SupabaseSessionStatus.Authenticated(userId = it.id, email = it.email) } + }.getOrNull() } override suspend fun signOut() { diff --git a/data/account/src/commonMain/kotlin/io/github/taetae98coding/diary/data/account/repository/AccountInfoRepositoryImpl.kt b/data/account/src/commonMain/kotlin/io/github/taetae98coding/diary/data/account/repository/AccountInfoRepositoryImpl.kt index fbed944e..daeeccc9 100644 --- a/data/account/src/commonMain/kotlin/io/github/taetae98coding/diary/data/account/repository/AccountInfoRepositoryImpl.kt +++ b/data/account/src/commonMain/kotlin/io/github/taetae98coding/diary/data/account/repository/AccountInfoRepositoryImpl.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.data.account.repository import io.github.taetae98coding.diary.core.model.account.AccountInfo @@ -5,6 +7,7 @@ import io.github.taetae98coding.diary.core.supabase.api.SupabaseAuth import io.github.taetae98coding.diary.core.supabase.api.SupabaseSessionStatus import io.github.taetae98coding.diary.domain.account.repository.AccountInfoRepository import kotlin.uuid.Uuid +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.mapLatest diff --git a/data/sync/build.gradle.kts b/data/sync/build.gradle.kts index 4d29825d..7d19a25b 100644 --- a/data/sync/build.gradle.kts +++ b/data/sync/build.gradle.kts @@ -13,6 +13,7 @@ kotlin { implementation(projects.core.network.api) implementation(projects.domain.account) implementation(projects.domain.sync) + implementation(projects.logger.crashlytics.api) } } diff --git a/data/sync/src/androidMain/kotlin/io/github/taetae98coding/diary/data/sync/SyncWorker.kt b/data/sync/src/androidMain/kotlin/io/github/taetae98coding/diary/data/sync/SyncWorker.kt index 41fb7a80..856f3493 100644 --- a/data/sync/src/androidMain/kotlin/io/github/taetae98coding/diary/data/sync/SyncWorker.kt +++ b/data/sync/src/androidMain/kotlin/io/github/taetae98coding/diary/data/sync/SyncWorker.kt @@ -4,7 +4,10 @@ import android.content.Context import androidx.work.CoroutineWorker import androidx.work.WorkerParameters import io.github.taetae98coding.diary.domain.account.usecase.GetAccountUseCase +import io.github.taetae98coding.diary.logger.core.DiaryLogger +import io.github.taetae98coding.diary.logger.crashlytics.api.CrashlyticsLogEntry import kotlin.uuid.Uuid +import kotlinx.coroutines.CancellationException import kotlinx.coroutines.flow.first import org.koin.core.component.KoinComponent import org.koin.core.component.inject @@ -28,7 +31,17 @@ internal class SyncWorker( } Result.success() - } catch (_: Throwable) { + } catch (throwable: Throwable) { + if (throwable is CancellationException) { + throw throwable + } + + DiaryLogger.log( + CrashlyticsLogEntry( + message = "동기화 실패[$runAttemptCount]", + throwable = throwable, + ), + ) Result.retry() } } diff --git a/data/sync/src/nonAndroidMain/kotlin/io/github/taetae98coding/diary/data/sync/NonAndroidSyncManager.kt b/data/sync/src/nonAndroidMain/kotlin/io/github/taetae98coding/diary/data/sync/NonAndroidSyncManager.kt index b54cfed2..ce046f19 100644 --- a/data/sync/src/nonAndroidMain/kotlin/io/github/taetae98coding/diary/data/sync/NonAndroidSyncManager.kt +++ b/data/sync/src/nonAndroidMain/kotlin/io/github/taetae98coding/diary/data/sync/NonAndroidSyncManager.kt @@ -4,6 +4,8 @@ import io.github.taetae98coding.diary.core.model.sync.SyncStatus import io.github.taetae98coding.diary.core.model.sync.SyncType import io.github.taetae98coding.diary.data.sync.di.SyncCoroutineScope import io.github.taetae98coding.diary.domain.sync.manager.SyncManager +import io.github.taetae98coding.diary.logger.core.DiaryLogger +import io.github.taetae98coding.diary.logger.crashlytics.api.CrashlyticsLogEntry import kotlin.uuid.Uuid import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope @@ -42,7 +44,12 @@ internal class NonAndroidSyncManager( if (throwable is CancellationException) { throw throwable } else { - throwable.printStackTrace() + DiaryLogger.log( + CrashlyticsLogEntry( + message = "동기화 실패[$type]", + throwable = throwable, + ), + ) _syncStatus.value = SyncStatus.Failed } } diff --git a/domain/account/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/account/usecase/GetAccountUseCase.kt b/domain/account/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/account/usecase/GetAccountUseCase.kt index 1619dac2..8e05dbb9 100644 --- a/domain/account/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/account/usecase/GetAccountUseCase.kt +++ b/domain/account/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/account/usecase/GetAccountUseCase.kt @@ -1,8 +1,11 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.domain.account.usecase import io.github.taetae98coding.diary.core.model.account.Account import io.github.taetae98coding.diary.domain.account.repository.AccountInfoRepository import io.github.taetae98coding.diary.domain.account.repository.AccountMetaDataRepository +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.combine diff --git a/domain/holiday/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/holiday/usecase/GetGoldenHolidayUseCase.kt b/domain/holiday/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/holiday/usecase/GetGoldenHolidayUseCase.kt index 0ca377af..27d1886e 100644 --- a/domain/holiday/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/holiday/usecase/GetGoldenHolidayUseCase.kt +++ b/domain/holiday/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/holiday/usecase/GetGoldenHolidayUseCase.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.domain.holiday.usecase import io.github.taetae98coding.diary.core.model.holiday.GoldenHoliday @@ -5,6 +7,7 @@ import io.github.taetae98coding.diary.core.model.holiday.Holiday import io.github.taetae98coding.diary.domain.holiday.repository.HolidayRepository import io.github.taetae98coding.diary.library.datetime.isWeekend import io.github.taetae98coding.diary.library.datetime.overlaps +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.emitAll diff --git a/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/GetCalendarMemoFilterTagUseCase.kt b/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/GetCalendarMemoFilterTagUseCase.kt index aa603f69..a34b7696 100644 --- a/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/GetCalendarMemoFilterTagUseCase.kt +++ b/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/GetCalendarMemoFilterTagUseCase.kt @@ -1,8 +1,11 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.domain.memo.usecase import io.github.taetae98coding.diary.domain.account.usecase.GetAccountUseCase import io.github.taetae98coding.diary.domain.memo.repository.AccountCalendarMemoFilterTagRepository import kotlin.uuid.Uuid +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.emitAll diff --git a/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/GetCalendarMemoUseCase.kt b/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/GetCalendarMemoUseCase.kt index 3b333445..ed98e679 100644 --- a/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/GetCalendarMemoUseCase.kt +++ b/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/GetCalendarMemoUseCase.kt @@ -1,9 +1,12 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.domain.memo.usecase import io.github.taetae98coding.diary.core.model.account.Account import io.github.taetae98coding.diary.core.model.memo.CalendarMemo import io.github.taetae98coding.diary.domain.account.usecase.GetAccountUseCase import io.github.taetae98coding.diary.domain.memo.repository.AccountCalendarMemoRepository +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.emitAll diff --git a/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/GetListMemoFilterTagUseCase.kt b/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/GetListMemoFilterTagUseCase.kt index caf0420d..94514bef 100644 --- a/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/GetListMemoFilterTagUseCase.kt +++ b/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/GetListMemoFilterTagUseCase.kt @@ -1,8 +1,11 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.domain.memo.usecase import io.github.taetae98coding.diary.domain.account.usecase.GetAccountUseCase import io.github.taetae98coding.diary.domain.memo.repository.AccountListMemoFilterTagRepository import kotlin.uuid.Uuid +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.emitAll diff --git a/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/HasCalendarMemoFilterUseCase.kt b/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/HasCalendarMemoFilterUseCase.kt index 58894537..40fc5b89 100644 --- a/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/HasCalendarMemoFilterUseCase.kt +++ b/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/HasCalendarMemoFilterUseCase.kt @@ -1,7 +1,10 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.domain.memo.usecase import io.github.taetae98coding.diary.domain.account.usecase.GetAccountUseCase import io.github.taetae98coding.diary.domain.memo.repository.AccountCalendarMemoFilterTagRepository +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.emitAll diff --git a/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/HasListMemoFilterUseCase.kt b/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/HasListMemoFilterUseCase.kt index b4dac5bc..f2a24218 100644 --- a/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/HasListMemoFilterUseCase.kt +++ b/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/HasListMemoFilterUseCase.kt @@ -1,9 +1,12 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.domain.memo.usecase import io.github.taetae98coding.diary.core.model.FilterPresence import io.github.taetae98coding.diary.domain.account.usecase.GetAccountUseCase import io.github.taetae98coding.diary.domain.memo.repository.AccountListMemoFilterTagRepository import io.github.taetae98coding.diary.domain.memo.repository.ListMemoFilterOptionRepository +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.combine diff --git a/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/PageListMemoUseCase.kt b/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/PageListMemoUseCase.kt index 20bff2b0..799314f1 100644 --- a/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/PageListMemoUseCase.kt +++ b/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/PageListMemoUseCase.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.domain.memo.usecase import androidx.paging.PagingData @@ -5,6 +7,7 @@ import io.github.taetae98coding.diary.core.model.memo.Memo import io.github.taetae98coding.diary.domain.account.usecase.GetAccountUseCase import io.github.taetae98coding.diary.domain.memo.repository.AccountListMemoRepository import io.github.taetae98coding.diary.domain.memo.repository.ListMemoFilterOptionRepository +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.combine diff --git a/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/PageMemoByTagUseCase.kt b/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/PageMemoByTagUseCase.kt index 7811c2c4..5aedd7a0 100644 --- a/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/PageMemoByTagUseCase.kt +++ b/domain/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/memo/usecase/PageMemoByTagUseCase.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.domain.memo.usecase import androidx.paging.PagingData @@ -5,6 +7,7 @@ import io.github.taetae98coding.diary.core.model.memo.Memo import io.github.taetae98coding.diary.domain.account.usecase.GetAccountUseCase import io.github.taetae98coding.diary.domain.memo.repository.AccountMemoRepository import kotlin.uuid.Uuid +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.emitAll diff --git a/domain/routine/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/routine/usecase/GetCalendarRoutineUseCase.kt b/domain/routine/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/routine/usecase/GetCalendarRoutineUseCase.kt index b7175e79..578f1adb 100644 --- a/domain/routine/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/routine/usecase/GetCalendarRoutineUseCase.kt +++ b/domain/routine/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/routine/usecase/GetCalendarRoutineUseCase.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.domain.routine.usecase import io.github.taetae98coding.diary.core.model.account.Account @@ -9,6 +11,7 @@ import io.github.taetae98coding.diary.domain.account.usecase.GetAccountUseCase import io.github.taetae98coding.diary.domain.routine.repository.AccountCalendarRoutineRepository import io.github.taetae98coding.diary.library.datetime.toLocalDateRanges import io.github.taetae98coding.diary.library.datetime.toSundayBasedNumber +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.emitAll diff --git a/domain/routine/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/routine/usecase/PageRoutineUseCase.kt b/domain/routine/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/routine/usecase/PageRoutineUseCase.kt index 52b3a19c..bc90ae86 100644 --- a/domain/routine/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/routine/usecase/PageRoutineUseCase.kt +++ b/domain/routine/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/routine/usecase/PageRoutineUseCase.kt @@ -1,9 +1,12 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.domain.routine.usecase import androidx.paging.PagingData import io.github.taetae98coding.diary.core.model.routine.Routine import io.github.taetae98coding.diary.domain.account.usecase.GetAccountUseCase import io.github.taetae98coding.diary.domain.routine.repository.AccountRoutineRepository +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.emitAll diff --git a/domain/sync/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/sync/usecase/GetSyncStatusUseCase.kt b/domain/sync/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/sync/usecase/GetSyncStatusUseCase.kt index 7ad6c30d..83000c20 100644 --- a/domain/sync/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/sync/usecase/GetSyncStatusUseCase.kt +++ b/domain/sync/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/sync/usecase/GetSyncStatusUseCase.kt @@ -1,7 +1,10 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.domain.sync.usecase import io.github.taetae98coding.diary.core.model.sync.SyncStatus import io.github.taetae98coding.diary.domain.sync.manager.SyncManager +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.emitAll diff --git a/domain/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/tag/usecase/PageTagUseCase.kt b/domain/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/tag/usecase/PageTagUseCase.kt index 6d6ff571..adf08525 100644 --- a/domain/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/tag/usecase/PageTagUseCase.kt +++ b/domain/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/tag/usecase/PageTagUseCase.kt @@ -1,9 +1,12 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.domain.tag.usecase import androidx.paging.PagingData import io.github.taetae98coding.diary.core.model.tag.Tag import io.github.taetae98coding.diary.domain.account.usecase.GetAccountUseCase import io.github.taetae98coding.diary.domain.tag.repository.AccountTagRepository +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.emitAll diff --git a/domain/weather/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/weather/usecase/GetCurrentWeatherUseCase.kt b/domain/weather/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/weather/usecase/GetCurrentWeatherUseCase.kt index 3a29071c..23bd7df3 100644 --- a/domain/weather/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/weather/usecase/GetCurrentWeatherUseCase.kt +++ b/domain/weather/src/commonMain/kotlin/io/github/taetae98coding/diary/domain/weather/usecase/GetCurrentWeatherUseCase.kt @@ -1,7 +1,10 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.domain.weather.usecase import io.github.taetae98coding.diary.core.model.weather.Weather import io.github.taetae98coding.diary.domain.weather.repository.WeatherRepository +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.emitAll diff --git a/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarFilterDialog.kt b/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarFilterDialog.kt index 6e6c3a0b..e67e7fe0 100644 --- a/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarFilterDialog.kt +++ b/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarFilterDialog.kt @@ -1,7 +1,13 @@ +@file:OptIn( + ExperimentalFlexBoxApi::class, + ExperimentalMaterial3Api::class, +) + package io.github.taetae98coding.diary.feature.calendar.home import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ExperimentalFlexBoxApi import androidx.compose.foundation.layout.FlexAlignContent import androidx.compose.foundation.layout.FlexBox import androidx.compose.foundation.layout.FlexJustifyContent @@ -11,6 +17,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.material3.Button +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.FilterChipDefaults import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.Text diff --git a/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarFilterViewModel.kt b/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarFilterViewModel.kt index b93d5c2e..65de3e0f 100644 --- a/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarFilterViewModel.kt +++ b/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarFilterViewModel.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.feature.calendar.home import androidx.lifecycle.ViewModel @@ -10,6 +12,7 @@ import io.github.taetae98coding.diary.domain.memo.usecase.SelectCalendarMemoFilt import io.github.taetae98coding.diary.domain.memo.usecase.UnselectCalendarMemoFilterTagUseCase import io.github.taetae98coding.diary.domain.tag.usecase.PageTagUseCase import kotlin.uuid.Uuid +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.combine diff --git a/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarHolidayViewModel.kt b/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarHolidayViewModel.kt index a032ea27..a711595b 100644 --- a/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarHolidayViewModel.kt +++ b/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarHolidayViewModel.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.feature.calendar.home import androidx.lifecycle.ViewModel @@ -6,6 +8,7 @@ import io.github.taetae98coding.diary.core.model.holiday.Holiday import io.github.taetae98coding.diary.domain.holiday.usecase.FetchHolidayUseCase import io.github.taetae98coding.diary.domain.holiday.usecase.GetHolidayUseCase import io.github.taetae98coding.diary.library.coroutines.combine +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow diff --git a/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarHomeViewModel.kt b/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarHomeViewModel.kt index 23f890b1..d5a679b8 100644 --- a/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarHomeViewModel.kt +++ b/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarHomeViewModel.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.feature.calendar.home import androidx.lifecycle.ViewModel @@ -6,6 +8,7 @@ import io.github.taetae98coding.diary.core.model.sync.SyncStatus import io.github.taetae98coding.diary.core.model.sync.SyncType import io.github.taetae98coding.diary.domain.sync.usecase.GetSyncStatusUseCase import io.github.taetae98coding.diary.domain.sync.usecase.RequestSyncUseCase +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.map diff --git a/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarMemoViewModel.kt b/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarMemoViewModel.kt index 475b3de0..72f15ed8 100644 --- a/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarMemoViewModel.kt +++ b/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarMemoViewModel.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.feature.calendar.home import androidx.lifecycle.ViewModel @@ -6,6 +8,7 @@ import io.github.taetae98coding.diary.core.model.memo.CalendarMemo import io.github.taetae98coding.diary.domain.memo.usecase.GetCalendarMemoUseCase import io.github.taetae98coding.diary.domain.memo.usecase.HasCalendarMemoFilterUseCase import io.github.taetae98coding.diary.library.coroutines.combine +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow diff --git a/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarRoutineViewModel.kt b/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarRoutineViewModel.kt index e1e22c50..b08a0d4c 100644 --- a/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarRoutineViewModel.kt +++ b/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarRoutineViewModel.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.feature.calendar.home import androidx.lifecycle.ViewModel diff --git a/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarWeatherViewModel.kt b/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarWeatherViewModel.kt index b91287c3..be0a0bac 100644 --- a/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarWeatherViewModel.kt +++ b/feature/calendar/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/calendar/home/CalendarWeatherViewModel.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.feature.calendar.home import androidx.lifecycle.ViewModel @@ -7,6 +9,7 @@ import io.github.taetae98coding.diary.domain.weather.usecase.FetchCurrentWeather import io.github.taetae98coding.diary.domain.weather.usecase.GetCurrentWeatherUseCase import kotlin.math.abs import kotlin.time.Clock +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.mapLatest diff --git a/feature/login/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/login/home/LoginHomeViewModel.kt b/feature/login/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/login/home/LoginHomeViewModel.kt index 57697715..33c47e6f 100644 --- a/feature/login/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/login/home/LoginHomeViewModel.kt +++ b/feature/login/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/login/home/LoginHomeViewModel.kt @@ -49,7 +49,6 @@ internal class LoginHomeViewModel( } fun handleLoginError(throwable: Throwable) { - throwable.printStackTrace() when (throwable) { else -> _effect.value = LoginEffect.UnknownError } diff --git a/feature/memo/build.gradle.kts b/feature/memo/build.gradle.kts index 077dcc99..2ac73f2f 100644 --- a/feature/memo/build.gradle.kts +++ b/feature/memo/build.gradle.kts @@ -10,7 +10,6 @@ kotlin { implementation(projects.domain.sync) implementation(projects.domain.tag) implementation(projects.presenter.memo) - implementation(projects.library.composeUi) implementation(libs.androidx.paging.compose) } } diff --git a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/add/MemoAddScaffoldState.kt b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/add/MemoAddScaffoldState.kt index 8b24cd89..f993fb25 100644 --- a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/add/MemoAddScaffoldState.kt +++ b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/add/MemoAddScaffoldState.kt @@ -3,6 +3,7 @@ package io.github.taetae98coding.diary.feature.memo.add import androidx.compose.foundation.text.input.clearText import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable import androidx.compose.runtime.remember import androidx.compose.runtime.retain.retain import androidx.compose.ui.graphics.Color @@ -29,6 +30,7 @@ import kotlinx.datetime.toInstant import kotlinx.datetime.toLocalDateTime import kotlinx.datetime.todayIn +@Stable internal class MemoAddScaffoldState( val titleCardState: TitleCardState, val descriptionCardState: DescriptionCardState, diff --git a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/add/MemoAddStateHolder.kt b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/add/MemoAddStateHolder.kt index 1ff640e9..210ae9df 100644 --- a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/add/MemoAddStateHolder.kt +++ b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/add/MemoAddStateHolder.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.feature.memo.add import androidx.paging.PagingData @@ -16,6 +18,7 @@ import io.github.taetae98coding.diary.feature.memo.common.TagCardUiState import io.github.taetae98coding.diary.feature.memo.di.MemoAddScope import kotlin.uuid.Uuid import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted diff --git a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/add/MemoAddViewModel.kt b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/add/MemoAddViewModel.kt index 4833e2f7..d93a0baf 100644 --- a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/add/MemoAddViewModel.kt +++ b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/add/MemoAddViewModel.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.feature.memo.add import androidx.lifecycle.ViewModel @@ -16,6 +18,7 @@ import io.github.taetae98coding.diary.feature.memo.common.MemoTagStateHolder import io.github.taetae98coding.diary.feature.memo.common.MemoTagUiState import io.github.taetae98coding.diary.feature.memo.common.TagCardUiState import kotlin.uuid.Uuid +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted diff --git a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/common/MemoTagScaffold.kt b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/common/MemoTagScaffold.kt index 242d0d7b..5fe51be6 100644 --- a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/common/MemoTagScaffold.kt +++ b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/common/MemoTagScaffold.kt @@ -1,8 +1,11 @@ +@file:OptIn(ExperimentalFlexBoxApi::class) + package io.github.taetae98coding.diary.feature.memo.common import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ExperimentalFlexBoxApi import androidx.compose.foundation.layout.FlexAlignContent import androidx.compose.foundation.layout.FlexBox import androidx.compose.foundation.layout.FlexJustifyContent diff --git a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/common/TagCard.kt b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/common/TagCard.kt index d7e8386e..8104e5aa 100644 --- a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/common/TagCard.kt +++ b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/common/TagCard.kt @@ -1,7 +1,10 @@ +@file:OptIn(ExperimentalFlexBoxApi::class) + package io.github.taetae98coding.diary.feature.memo.common import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.ExperimentalFlexBoxApi import androidx.compose.foundation.layout.FlexAlignContent import androidx.compose.foundation.layout.FlexBox import androidx.compose.foundation.layout.FlexJustifyContent diff --git a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/detail/MemoDetailScaffold.kt b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/detail/MemoDetailScaffold.kt index 824ab23b..3ffc34e2 100644 --- a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/detail/MemoDetailScaffold.kt +++ b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/detail/MemoDetailScaffold.kt @@ -1,3 +1,8 @@ +@file:OptIn( + ExperimentalMaterial3Api::class, + ExperimentalMaterial3ExpressiveApi::class, +) + package io.github.taetae98coding.diary.feature.memo.detail import androidx.compose.animation.AnimatedContent @@ -5,6 +10,7 @@ import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.Crossfade import androidx.compose.animation.scaleIn import androidx.compose.animation.scaleOut +import androidx.compose.foundation.basicMarquee import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.WindowInsets @@ -16,6 +22,8 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material3.CircularWavyProgressIndicator +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.IconButton import androidx.compose.material3.IconToggleButton import androidx.compose.material3.SnackbarHost @@ -176,7 +184,16 @@ private fun TopBar( onDelete: () -> Unit = {}, ) { TopAppBar( - title = { detailProvider()?.let { Text(text = it.title) } }, + title = { + detailProvider() + ?.let { + Text( + text = it.title, + modifier = Modifier.basicMarquee(iterations = Int.MAX_VALUE), + maxLines = 1, + ) + } + }, modifier = modifier, navigationIcon = { NavigateUpButton(onClick = dropUnlessResumed(block = onNavigateUp)) }, actions = { diff --git a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/detail/MemoDetailScaffoldState.kt b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/detail/MemoDetailScaffoldState.kt index 6526e4d1..95c7d566 100644 --- a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/detail/MemoDetailScaffoldState.kt +++ b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/detail/MemoDetailScaffoldState.kt @@ -2,6 +2,7 @@ package io.github.taetae98coding.diary.feature.memo.detail import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable import androidx.compose.runtime.remember import androidx.compose.runtime.retain.retain import androidx.compose.ui.graphics.Color @@ -20,6 +21,7 @@ import kotlin.time.Clock import kotlinx.datetime.TimeZone import kotlinx.datetime.toLocalDateTime +@Stable internal class MemoDetailScaffoldState( val titleCardState: TitleCardState, val descriptionCardState: DescriptionCardState, diff --git a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/detail/MemoDetailTagViewModel.kt b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/detail/MemoDetailTagViewModel.kt index da3c58b0..a2db49d6 100644 --- a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/detail/MemoDetailTagViewModel.kt +++ b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/detail/MemoDetailTagViewModel.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.feature.memo.detail import androidx.lifecycle.ViewModel @@ -18,6 +20,7 @@ import io.github.taetae98coding.diary.domain.tag.usecase.PageTagUseCase import io.github.taetae98coding.diary.feature.memo.common.MemoTagStateHolder import io.github.taetae98coding.diary.feature.memo.common.MemoTagUiState import kotlin.uuid.Uuid +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow diff --git a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/detail/MemoDetailViewModel.kt b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/detail/MemoDetailViewModel.kt index bd85f026..3ede7f10 100644 --- a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/detail/MemoDetailViewModel.kt +++ b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/detail/MemoDetailViewModel.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.feature.memo.detail import androidx.lifecycle.ViewModel @@ -14,6 +16,7 @@ import io.github.taetae98coding.diary.domain.memo.usecase.RestartMemoUseCase import io.github.taetae98coding.diary.domain.memo.usecase.UpdateMemoUseCase import io.github.taetae98coding.diary.feature.memo.common.MemoTagUiState import io.github.taetae98coding.diary.feature.memo.common.TagCardUiState +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow diff --git a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/home/MemoHomeViewModel.kt b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/home/MemoHomeViewModel.kt index 962273bb..11de72c8 100644 --- a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/home/MemoHomeViewModel.kt +++ b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/home/MemoHomeViewModel.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.feature.memo.home import androidx.lifecycle.ViewModel @@ -6,6 +8,7 @@ import io.github.taetae98coding.diary.core.model.sync.SyncStatus import io.github.taetae98coding.diary.core.model.sync.SyncType import io.github.taetae98coding.diary.domain.sync.usecase.GetSyncStatusUseCase import io.github.taetae98coding.diary.domain.sync.usecase.RequestSyncUseCase +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.map diff --git a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/home/MemoListFilterDialog.kt b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/home/MemoListFilterDialog.kt index b2237e66..2faddd3b 100644 --- a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/home/MemoListFilterDialog.kt +++ b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/home/MemoListFilterDialog.kt @@ -1,7 +1,13 @@ +@file:OptIn( + ExperimentalFlexBoxApi::class, + ExperimentalMaterial3Api::class, +) + package io.github.taetae98coding.diary.feature.memo.home import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ExperimentalFlexBoxApi import androidx.compose.foundation.layout.FlexAlignContent import androidx.compose.foundation.layout.FlexBox import androidx.compose.foundation.layout.FlexJustifyContent @@ -11,8 +17,8 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.material3.Button +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.FilterChipDefaults -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.SegmentedButton import androidx.compose.material3.SegmentedButtonDefaults diff --git a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/home/MemoListFilterViewModel.kt b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/home/MemoListFilterViewModel.kt index d57dc49f..68da2310 100644 --- a/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/home/MemoListFilterViewModel.kt +++ b/feature/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/memo/home/MemoListFilterViewModel.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.feature.memo.home import androidx.lifecycle.ViewModel @@ -15,6 +17,7 @@ import io.github.taetae98coding.diary.domain.memo.usecase.SetTagPresenceFilterUs import io.github.taetae98coding.diary.domain.memo.usecase.UnselectListMemoFilterTagUseCase import io.github.taetae98coding.diary.domain.tag.usecase.PageTagUseCase import kotlin.uuid.Uuid +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.combine diff --git a/feature/more/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/more/goldenholiday/GoldenHolidayContent.kt b/feature/more/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/more/goldenholiday/GoldenHolidayContent.kt index 7276e2cb..bcb7ba64 100644 --- a/feature/more/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/more/goldenholiday/GoldenHolidayContent.kt +++ b/feature/more/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/more/goldenholiday/GoldenHolidayContent.kt @@ -6,9 +6,12 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.lazy.staggeredgrid.LazyVerticalStaggeredGrid import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells import androidx.compose.foundation.lazy.staggeredgrid.items @@ -25,6 +28,7 @@ import io.github.taetae98coding.diary.compose.calendar.item.CalendarText import io.github.taetae98coding.diary.compose.calendar.rememberCalendarSelectState import io.github.taetae98coding.diary.compose.calendar.week.CalendarWeekOfMonth import io.github.taetae98coding.diary.compose.core.box.LoadingBox +import io.github.taetae98coding.diary.compose.core.padding.plus import io.github.taetae98coding.diary.compose.core.preview.ComponentPreview import io.github.taetae98coding.diary.compose.core.theme.DiaryTheme import io.github.taetae98coding.diary.core.model.holiday.GoldenHoliday @@ -78,7 +82,7 @@ internal fun GoldenHolidayContent( LazyVerticalStaggeredGrid( columns = StaggeredGridCells.Adaptive(300.dp), modifier = Modifier.fillMaxSize(), - contentPadding = PaddingValues(8.dp), + contentPadding = PaddingValues(8.dp) + WindowInsets.navigationBars.asPaddingValues(), verticalItemSpacing = 8.dp, horizontalArrangement = Arrangement.spacedBy(8.dp), ) { diff --git a/feature/more/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/more/goldenholiday/GoldenHolidayScreen.kt b/feature/more/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/more/goldenholiday/GoldenHolidayScreen.kt index 1c213f49..835e78f7 100644 --- a/feature/more/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/more/goldenholiday/GoldenHolidayScreen.kt +++ b/feature/more/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/more/goldenholiday/GoldenHolidayScreen.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalMaterial3Api::class) + package io.github.taetae98coding.diary.feature.more.goldenholiday import androidx.compose.foundation.layout.Arrangement @@ -8,6 +10,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.material3.CenterAlignedTopAppBar +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.IconButton import androidx.compose.material3.ModalBottomSheet diff --git a/feature/more/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/more/home/MoreHomeScaffold.kt b/feature/more/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/more/home/MoreHomeScaffold.kt index 52500171..1ae749b2 100644 --- a/feature/more/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/more/home/MoreHomeScaffold.kt +++ b/feature/more/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/more/home/MoreHomeScaffold.kt @@ -74,35 +74,6 @@ internal fun MoreHomeScaffold( } } } - - item { - Card( - onClick = { - val throwable = IllegalStateException("test crash") - - DiaryLogger.log(AnalyticsLogEntry(name = "test_crash")) - DiaryLogger.log(CrashlyticsLogEntry(message = "test crash", throwable = throwable)) - - throw throwable - }, - modifier = Modifier.aspectRatio(1F), - ) { - Column( - modifier = Modifier.fillMaxSize(), - verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally, - ) { - Text( - text = "💥", - fontSize = 24.sp, - ) - Text( - text = "Crash", - style = DiaryTheme.typography.bodySmall, - ) - } - } - } } } } diff --git a/feature/routine/build.gradle.kts b/feature/routine/build.gradle.kts index 36ebcf98..e1ac3ee5 100644 --- a/feature/routine/build.gradle.kts +++ b/feature/routine/build.gradle.kts @@ -9,7 +9,6 @@ kotlin { dependencies { implementation(projects.domain.routine) implementation(projects.domain.sync) - implementation(projects.library.composeUi) implementation(libs.androidx.paging.compose) } } diff --git a/feature/routine/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/routine/add/component/RRuleEditorDialog.kt b/feature/routine/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/routine/add/component/RRuleEditorDialog.kt index 678d895a..c8b683fc 100644 --- a/feature/routine/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/routine/add/component/RRuleEditorDialog.kt +++ b/feature/routine/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/routine/add/component/RRuleEditorDialog.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalMaterial3Api::class) + package io.github.taetae98coding.diary.feature.routine.add.component import androidx.compose.foundation.layout.Arrangement @@ -7,6 +9,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.Text import androidx.compose.material3.TextButton diff --git a/feature/routine/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/routine/detail/component/RoutineDateListCard.kt b/feature/routine/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/routine/detail/component/RoutineDateListCard.kt index 21236754..5be8f370 100644 --- a/feature/routine/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/routine/detail/component/RoutineDateListCard.kt +++ b/feature/routine/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/routine/detail/component/RoutineDateListCard.kt @@ -1,7 +1,10 @@ +@file:OptIn(ExperimentalFlexBoxApi::class) + package io.github.taetae98coding.diary.feature.routine.detail.component import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ExperimentalFlexBoxApi import androidx.compose.foundation.layout.FlexBox import androidx.compose.foundation.layout.FlexWrap import androidx.compose.foundation.layout.padding diff --git a/feature/routine/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/routine/home/RoutineHomeScaffoldState.kt b/feature/routine/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/routine/home/RoutineHomeScaffoldState.kt index 3f884739..3a0bab1a 100644 --- a/feature/routine/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/routine/home/RoutineHomeScaffoldState.kt +++ b/feature/routine/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/routine/home/RoutineHomeScaffoldState.kt @@ -2,8 +2,10 @@ package io.github.taetae98coding.diary.feature.routine.home import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable import androidx.compose.runtime.retain.retain +@Stable internal class RoutineHomeScaffoldState { val hostState: SnackbarHostState = SnackbarHostState() } diff --git a/feature/tag/build.gradle.kts b/feature/tag/build.gradle.kts index 077dcc99..2ac73f2f 100644 --- a/feature/tag/build.gradle.kts +++ b/feature/tag/build.gradle.kts @@ -10,7 +10,6 @@ kotlin { implementation(projects.domain.sync) implementation(projects.domain.tag) implementation(projects.presenter.memo) - implementation(projects.library.composeUi) implementation(libs.androidx.paging.compose) } } diff --git a/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/add/TagAddScaffoldState.kt b/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/add/TagAddScaffoldState.kt index a9006dce..30f561ba 100644 --- a/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/add/TagAddScaffoldState.kt +++ b/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/add/TagAddScaffoldState.kt @@ -3,6 +3,7 @@ package io.github.taetae98coding.diary.feature.tag.add import androidx.compose.foundation.text.input.clearText import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable import androidx.compose.runtime.retain.retain import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb @@ -17,6 +18,7 @@ import io.github.taetae98coding.diary.library.compose.ui.random import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch +@Stable internal class TagAddScaffoldState( val titleCardState: TitleCardState, val descriptionCardState: DescriptionCardState, diff --git a/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/detail/TagDetailScaffold.kt b/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/detail/TagDetailScaffold.kt index 6b35861b..877e0e3b 100644 --- a/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/detail/TagDetailScaffold.kt +++ b/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/detail/TagDetailScaffold.kt @@ -1,3 +1,8 @@ +@file:OptIn( + ExperimentalMaterial3Api::class, + ExperimentalMaterial3ExpressiveApi::class, +) + package io.github.taetae98coding.diary.feature.tag.detail import androidx.compose.animation.AnimatedContent @@ -5,6 +10,7 @@ import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.Crossfade import androidx.compose.animation.scaleIn import androidx.compose.animation.scaleOut +import androidx.compose.foundation.basicMarquee import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.WindowInsets @@ -17,6 +23,8 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material3.Card import androidx.compose.material3.CircularWavyProgressIndicator +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.IconButton import androidx.compose.material3.IconToggleButton import androidx.compose.material3.SnackbarHost @@ -167,7 +175,16 @@ private fun TopBar( onDelete: () -> Unit = {}, ) { TopAppBar( - title = { detailProvider()?.let { Text(text = it.title) } }, + title = { + detailProvider() + ?.let { + Text( + text = it.title, + modifier = Modifier.basicMarquee(iterations = Int.MAX_VALUE), + maxLines = 1, + ) + } + }, modifier = modifier, navigationIcon = { NavigateUpButton(onClick = dropUnlessResumed(block = onNavigateUp)) }, actions = { diff --git a/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/detail/TagDetailScaffoldState.kt b/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/detail/TagDetailScaffoldState.kt index 10d20649..d2f672e1 100644 --- a/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/detail/TagDetailScaffoldState.kt +++ b/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/detail/TagDetailScaffoldState.kt @@ -2,6 +2,7 @@ package io.github.taetae98coding.diary.feature.tag.detail import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable import androidx.compose.runtime.retain.retain import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb @@ -14,6 +15,7 @@ import io.github.taetae98coding.diary.compose.core.card.rememberTitleCardState import io.github.taetae98coding.diary.core.model.tag.Tag import io.github.taetae98coding.diary.core.model.tag.TagDetail +@Stable internal class TagDetailScaffoldState( val titleCardState: TitleCardState, val descriptionCardState: DescriptionCardState, diff --git a/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/detail/TagDetailViewModel.kt b/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/detail/TagDetailViewModel.kt index cfb00a1c..ff30087e 100644 --- a/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/detail/TagDetailViewModel.kt +++ b/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/detail/TagDetailViewModel.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.feature.tag.detail import androidx.lifecycle.ViewModel @@ -10,6 +12,7 @@ import io.github.taetae98coding.diary.domain.tag.usecase.FinishTagUseCase import io.github.taetae98coding.diary.domain.tag.usecase.GetTagUseCase import io.github.taetae98coding.diary.domain.tag.usecase.RestartTagUseCase import io.github.taetae98coding.diary.domain.tag.usecase.UpdateTagUseCase +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow diff --git a/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/home/TagHomeViewModel.kt b/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/home/TagHomeViewModel.kt index 92256944..61ce2bb6 100644 --- a/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/home/TagHomeViewModel.kt +++ b/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/home/TagHomeViewModel.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.feature.tag.home import androidx.lifecycle.ViewModel @@ -6,6 +8,7 @@ import io.github.taetae98coding.diary.core.model.sync.SyncStatus import io.github.taetae98coding.diary.core.model.sync.SyncType import io.github.taetae98coding.diary.domain.sync.usecase.GetSyncStatusUseCase import io.github.taetae98coding.diary.domain.sync.usecase.RequestSyncUseCase +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.map diff --git a/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/home/TagListScaffoldState.kt b/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/home/TagListScaffoldState.kt index a4c6079e..6e1d0b40 100644 --- a/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/home/TagListScaffoldState.kt +++ b/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/home/TagListScaffoldState.kt @@ -2,8 +2,10 @@ package io.github.taetae98coding.diary.feature.tag.home import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable import androidx.compose.runtime.retain.retain +@Stable internal class TagListScaffoldState { val hostState: SnackbarHostState = SnackbarHostState() } diff --git a/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/home/TagListViewModel.kt b/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/home/TagListViewModel.kt index 59ffe0d5..455988c9 100644 --- a/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/home/TagListViewModel.kt +++ b/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/home/TagListViewModel.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.feature.tag.home import androidx.lifecycle.ViewModel @@ -6,6 +8,7 @@ import androidx.paging.PagingData import androidx.paging.cachedIn import io.github.taetae98coding.diary.core.model.tag.Tag import io.github.taetae98coding.diary.domain.tag.usecase.PageTagUseCase +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.mapLatest import org.koin.core.annotation.KoinViewModel diff --git a/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/memo/TagMemoViewModel.kt b/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/memo/TagMemoViewModel.kt index 6cf4f9ab..1a5b0489 100644 --- a/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/memo/TagMemoViewModel.kt +++ b/feature/tag/src/commonMain/kotlin/io/github/taetae98coding/diary/feature/tag/memo/TagMemoViewModel.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.feature.tag.memo import androidx.lifecycle.ViewModel @@ -8,6 +10,7 @@ import io.github.taetae98coding.diary.core.navigation.argument.TagId import io.github.taetae98coding.diary.domain.sync.usecase.GetSyncStatusUseCase import io.github.taetae98coding.diary.domain.sync.usecase.RequestSyncUseCase import io.github.taetae98coding.diary.domain.tag.usecase.GetTagUseCase +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.mapLatest diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4cb2c13e..fd84500a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,35 +5,35 @@ ksp = "2.3.7" # https://github.com/google/ksp/ # agp agp = "9.1.1" # https://developer.android.com/build/releases/gradle-plugin?hl=en # jetbrains -jetbrains-compose = "1.11.0-beta03" # https://github.com/JetBrains/compose-multiplatform/releases +jetbrains-compose = "1.11.0-rc01" # https://github.com/JetBrains/compose-multiplatform/releases jetbrains-compose-material-icons = "1.7.3" jetbrains-compose-material3 = "1.11.0-alpha07" -jetbrains-lifecycle = "2.11.0-alpha03" -jetbrains-navigation3 = "1.1.0" +jetbrains-lifecycle = "2.11.0-beta01" +jetbrains-navigation3 = "1.1.1" # kotlinx -kotlinx-browser = "0.5.0" # https://github.com/Kotlin/kotlinx-browser/releases -kotlinx-coroutines = "1.11.0-rc02" # https://github.com/Kotlin/kotlinx.coroutines/releases -kotlinx-datetime = "0.8.0-rc02" # https://github.com/Kotlin/kotlinx-datetime/releases +kotlinx-browser = "0.5.0" # https://github.com/Kotlin/kotlinx-browser +kotlinx-coroutines = "1.11.0" # https://github.com/Kotlin/kotlinx.coroutines/releases +kotlinx-datetime = "0.8.0" # https://github.com/Kotlin/kotlinx-datetime/releases kotlinx-serialization = "1.11.0" # https://github.com/Kotlin/kotlinx.serialization/releases # androidx androidx-activity = "1.13.0" # https://developer.android.com/jetpack/androidx/releases/activity?hl=en -androidx-compose = "1.11.0-rc01" -androidx-navigation3 = "1.1.0" # https://developer.android.com/jetpack/androidx/releases/navigation3?hl=en +androidx-compose = "1.11.0" +androidx-navigation3 = "1.1.1" # https://developer.android.com/jetpack/androidx/releases/navigation3?hl=en androidx-credentials = "1.6.0" # https://developer.android.com/jetpack/androidx/releases/credentials?hl=en -androidx-lifecycle = "2.11.0-alpha03" # https://developer.android.com/jetpack/androidx/releases/lifecycle?hl=en -androidx-datastore = "1.3.0-alpha08" # https://developer.android.com/jetpack/androidx/releases/datastore?hl=en -androidx-paging = "3.5.0-rc01" # https://developer.android.com/jetpack/androidx/releases/paging?hl=en -androidx-room3 = "3.0.0-alpha03" # https://developer.android.com/jetpack/androidx/releases/room3?hl=en -androidx-sqlite = "2.7.0-alpha03" # https://developer.android.com/jetpack/androidx/releases/sqlite?hl=en +androidx-lifecycle = "2.11.0-beta01" # https://developer.android.com/jetpack/androidx/releases/lifecycle?hl=en +androidx-datastore = "1.3.0-alpha09" # https://developer.android.com/jetpack/androidx/releases/datastore?hl=en +androidx-paging = "3.5.0" # https://developer.android.com/jetpack/androidx/releases/paging?hl=en +androidx-room3 = "3.0.0-alpha04" # https://developer.android.com/jetpack/androidx/releases/room3?hl=en +androidx-sqlite = "2.7.0-alpha04" # https://developer.android.com/jetpack/androidx/releases/sqlite?hl=en androidx-startup = "1.2.0" # https://developer.android.com/jetpack/androidx/releases/startup?hl=en androidx-test-core = "1.7.0" # https://developer.android.com/jetpack/androidx/releases/test?hl=en androidx-work = "2.11.2" # https://developer.android.com/jetpack/androidx/releases/work?hl=en # abc -buildkonfig = "0.18.0" # https://github.com/yshrsmz/BuildKonfig/releases +buildkonfig = "0.20.0" # https://github.com/yshrsmz/BuildKonfig/releases dependency-guard = "0.5.0" # https://github.com/dropbox/dependency-guard/releases project-guard = "1.0.0-rc03" # https://github.com/rubensousa/ProjectGuard/releases google-services = "4.4.4" # https://firebase.google.com/support/release-notes/android?hl=en -firebase-bom = "34.12.0" # https://firebase.google.com/support/release-notes/android?hl=en +firebase-bom = "34.13.0" # https://firebase.google.com/support/release-notes/android?hl=en firebase-crashlytics-plugin = "3.0.7" firebase-perf-plugin = "2.0.2" coil = "3.4.0" # https://github.com/coil-kt/coil/releases @@ -51,7 +51,7 @@ napier = "2.7.1" # https://github.com/AAkira/Napier/releases robolectric = "4.16.1" # https://github.com/robolectric/robolectric/releases multiplatform-markdown = "0.40.2" # https://github.com/mikepenz/multiplatform-markdown-renderer/releases spotless = "8.4.0" # https://github.com/diffplug/spotless/blob/main/plugin-gradle/CHANGES.md -spm = "1.9.1" # https://github.com/frankois944/spm4Kmp/releases +spm = "1.9.2" # https://github.com/frankois944/spm4Kmp/releases supabase = "3.6.0" # https://github.com/supabase-community/supabase-kt/releases turbine = "1.2.1" # https://github.com/cashapp/turbine/releases diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 73eb6c49..6394b464 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.0-bin.zip validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/library/kotlinx-coroutines-core/src/commonMain/kotlin/io/github/taetae98coding/diary/library/coroutines/FlowCollectionExt.kt b/library/kotlinx-coroutines-core/src/commonMain/kotlin/io/github/taetae98coding/diary/library/coroutines/FlowCollectionExt.kt index a1fa5af6..fe4165a1 100644 --- a/library/kotlinx-coroutines-core/src/commonMain/kotlin/io/github/taetae98coding/diary/library/coroutines/FlowCollectionExt.kt +++ b/library/kotlinx-coroutines-core/src/commonMain/kotlin/io/github/taetae98coding/diary/library/coroutines/FlowCollectionExt.kt @@ -1,5 +1,8 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.library.coroutines +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.mapLatest diff --git a/library/paging-common/src/commonMain/kotlin/io/github/taetae98coding/diary/library/paging/common/PagingDataExt.kt b/library/paging-common/src/commonMain/kotlin/io/github/taetae98coding/diary/library/paging/common/PagingDataExt.kt index c1c1ae35..1d5be18a 100644 --- a/library/paging-common/src/commonMain/kotlin/io/github/taetae98coding/diary/library/paging/common/PagingDataExt.kt +++ b/library/paging-common/src/commonMain/kotlin/io/github/taetae98coding/diary/library/paging/common/PagingDataExt.kt @@ -1,7 +1,10 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.library.paging.common import androidx.paging.PagingData import androidx.paging.map +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.mapLatest diff --git a/presenter/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/presenter/memo/api/ListMemoFilterStateHolder.kt b/presenter/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/presenter/memo/api/ListMemoFilterStateHolder.kt index 579d2f95..df20cfac 100644 --- a/presenter/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/presenter/memo/api/ListMemoFilterStateHolder.kt +++ b/presenter/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/presenter/memo/api/ListMemoFilterStateHolder.kt @@ -1,6 +1,9 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.presenter.memo.api import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.mapLatest diff --git a/presenter/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/presenter/memo/api/MemoListStateHolder.kt b/presenter/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/presenter/memo/api/MemoListStateHolder.kt index c0114bf1..a23d590e 100644 --- a/presenter/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/presenter/memo/api/MemoListStateHolder.kt +++ b/presenter/memo/src/commonMain/kotlin/io/github/taetae98coding/diary/presenter/memo/api/MemoListStateHolder.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.github.taetae98coding.diary.presenter.memo.api import androidx.paging.PagingData @@ -5,6 +7,7 @@ import androidx.paging.cachedIn import io.github.taetae98coding.diary.core.model.memo.Memo import kotlin.uuid.Uuid import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow