Skip to content

Conversation

@PeraSite
Copy link
Member

@PeraSite PeraSite commented Nov 4, 2025

Summary

Toast, Dialog, Snackbar의 새로운 디자인을 적용하고, 기존 Toast, Dialog 호출 코드를 개선합니다.

Describe your changes

Screenshot_20251222_235237
  • UiEvent.ShowToast에서 ToastType이라는 새로운 enum을 추가함으로써 ShowToast를 생성하는 모든 호출 부의 코드를 변경했습니다. Default Value를 ToastType.INFO로 집어넣고 점진적 개선을 할 수도 있겠으나, Error로 띄워줘야 할 상황에서 컴파일 오류가 발생하지 않아 Info로 뜨는 상황을 미연에 방지하고자 이렇게 진행했습니다.
  • 메인 모듈의 ToastExtensions.kt에서 common 모듈의 ToastType에 따라 분기처리하는 코드가 있는데, 최선의 방법을 찾지 못했습니다. UiEvent를 상속하는 ShowCustomToast를 메인 모듈에서 선언하는 것도 이상하고(UiEvent만 봤을 때는 안보이니), 그렇다고 UiEvent 자체를 메인 모듈로 옮기기에도 너무 큰 변화입니다. 그래서 그나마 가장 깔끔한 방법인 현재로 진행했습니다. (해결 완료!)

Issue

  • Resolves #

To reviewers

  • Toast 가로 길이가 Figma 상에서는 무조건 고정된 길이여야하는데, 위 스크린샷을 보시면 아시겠지만 여러가지 방법을 사용해도 길이 고정이 되지 않습니다... 아마 XML 자체 Toast 문제인 것 같은데, 진님께서 작성해주신 Compose Toast로 업그레이드해보고 개선해야할 것 같습니다! (해결 완료!)
  • 절대 묵은 PR을 오래 두지 말 것, 한 PR 내에서 여러 작업을 하지 말 것을 또 다시 뼈저리게 느끼고 있습니다,.... 50개 파일 체인지와 수백 줄의 코드 체인지에 대해 깊은 사과를 드립니다 ㅠㅠㅠ

@PeraSite PeraSite self-assigned this Nov 4, 2025
# Conflicts:
#	app/src/main/java/com/eatssu/android/presentation/MainViewModel.kt
#	app/src/main/java/com/eatssu/android/presentation/base/BaseActivity.kt
#	app/src/main/java/com/eatssu/android/presentation/intro/IntroActivity.kt
#	app/src/main/java/com/eatssu/android/presentation/intro/IntroViewModel.kt
#	app/src/main/java/com/eatssu/android/presentation/login/LoginViewModel.kt
#	app/src/main/java/com/eatssu/android/presentation/map/MapViewModel.kt
#	app/src/main/java/com/eatssu/android/presentation/mypage/MyPageViewModel.kt
#	app/src/main/java/com/eatssu/android/presentation/mypage/SignOutViewModel.kt
#	app/src/main/res/values/strings.xml
@PeraSite PeraSite marked this pull request as ready for review December 12, 2025 15:04
@PeraSite PeraSite requested a review from Copilot December 13, 2025 00:33
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR introduces a new design system for Toast, Dialog, and Snackbar components while refactoring all existing usage across the application to leverage a type-safe ToastType enum. The changes improve consistency and user experience by categorizing feedback into INFO, SUCCESS, WARNING, and ERROR types with corresponding visual styles.

Key Changes:

  • Introduced ToastType enum (INFO, SUCCESS, WARNING, ERROR) and updated UiEvent.ShowToast to require explicit type specification
  • Created new DialogUtil.kt with a builder pattern for customizable dialogs, replacing direct AlertDialog usage
  • Added comprehensive toast utility functions in ToastUtil.kt with type-specific convenience methods

Reviewed changes

Copilot reviewed 44 out of 50 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
core/common/src/main/java/com/eatssu/common/enums/ToastType.kt Defines the four toast types (INFO, SUCCESS, WARNING, ERROR) for categorizing user feedback
core/common/src/main/java/com/eatssu/common/UiEvent.kt Updates ShowToast to require a ToastType parameter for type-safe toast messaging
app/src/main/java/com/eatssu/android/presentation/util/ToastExtensions.kt Maps ToastType enum values to Android drawable resources (icons and backgrounds)
app/src/main/java/com/eatssu/android/presentation/util/ToastUtil.kt Provides comprehensive toast utility functions with type-specific convenience methods
app/src/main/java/com/eatssu/android/presentation/util/DialogUtil.kt Implements a builder pattern for creating customizable dialogs with default and destructive variants
app/src/main/java/com/eatssu/android/presentation/util/ContextUtil.kt Removes old toast utility in favor of the new type-safe implementation
app/src/main/java/com/eatssu/android/presentation/util/ActivityUtil.kt Migrates network error dialogs from AlertDialog to new DialogUtil
app/src/main/res/layout/toast_layout.xml Defines the custom toast layout with icon and message text
app/src/main/res/layout/dialog_default.xml Standard dialog layout with cancel button on left, confirm on right
app/src/main/res/layout/dialog_destructive.xml Destructive action dialog layout with confirm button on left in error color
app/src/main/res/drawable/shape_toast_*.xml Background shapes for each toast type with type-specific colors and borders
app/src/main/res/drawable/ic_toast_*.png Icons for each toast type (info, success, warning, error)
app/src/main/res/drawable/shape_dialog_*.xml Button backgrounds and dialog corner styles
app/src/main/res/values/strings.xml Consolidates toast messages into centralized string resources with consistent naming
app/src/main/java/com/eatssu/android/presentation/mypage/*.kt Updates all toast calls to specify appropriate ToastType
app/src/main/java/com/eatssu/android/presentation/login/*.kt Updates login-related toasts to use ERROR type for failures
app/src/main/java/com/eatssu/android/presentation/intro/*.kt Updates intro/initialization toasts with appropriate types
app/src/main/java/com/eatssu/android/presentation/cafeteria/review/*.kt Updates review-related toasts to use SUCCESS for completions and ERROR for failures
app/src/main/java/com/eatssu/android/presentation/common/*.kt Migrates all AlertDialog usages to new DialogUtil for consistency
app/src/main/java/com/eatssu/android/presentation/MainActivity.kt Updates main activity event handling to use new toast API
app/src/main/java/com/eatssu/android/presentation/base/BaseActivity.kt Replaces direct Toast usage with new utility functions for token expiration messages
gradlew Gradle wrapper script addition (unrelated to PR scope)
app/src/main/java/com/eatssu/android/presentation/util/TimeUtil.kt Time utility addition (unrelated to PR scope)

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link
Member

@HI-JIN2 HI-JIN2 left a comment

Choose a reason for hiding this comment

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

Toast 가로 길이가 Figma 상에서는 무조건 고정된 길이여야하는데, 위 스크린샷을 보시면 아시겠지만 여러가지 방법을 사용해도 길이 고정이 되지 않습니다... 아마 XML 자체 Toast 문제인 것 같은데, 진님께서 작성해주신 Compose Toast로 업그레이드해보고 개선해야할 것 같습니다!

이거 SnackBar 컴포넌트를 사용하면 가능할 것 같슴당


if (!success) {
_uiEvent.emit(UiEvent.ShowToast("리뷰 삭제에 실패했습니다."))
_uiEvent.emit(UiEvent.ShowToast("리뷰 삭제에 실패했습니다.", ToastType.ERROR))
Copy link
Member

Choose a reason for hiding this comment

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

지금 드는 생각인데 하드코딩이 아니라 리소스에서 string을 한번에 관리하려면 뷰모델에서는 리소스 접근이 불가하니 event 유형만 넘겨주고 뷰에서 string 호출을 해야하지 않을까..? 싶네영

근데 그 방법이 좋을지는 몰르겠어요...

Copy link
Member Author

Choose a reason for hiding this comment

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

https://medium.com/@muhammetemingundogar53/accessing-string-resource-file-in-viewmodel-65bf2ad8b39
이런 예시처럼 ViewModel에서는 R 문자열 ID만 지정해서 emit하고, View 단에서 context로 해당 ID를 resolve하는 방식이 있더라구요!

다만 궁극적으로 ViewModel이 R 자체를 몰라도 되게끔 I18nProvider 같은 외부 서비스가 enum/String을 집어넣으면 알아서 현재 context에서 resolve해주는 형태로 가야할 것 같아요!

말씀해주신 부분은 이벤트 유형 케이스가 너무..많아서 유지보수가 어려울 것 같네용

Copy link
Member

Choose a reason for hiding this comment

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

뷰모델에서 한테 context 주고 리소스 id를 호출하는게 최선일 것 같슴다

Comment on lines +19 to +20
showDialog("강제 업데이트", "새 버전의 앱을 설치해야 합니다.") {
confirmText = "업데이트"
Copy link
Member

Choose a reason for hiding this comment

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

여기 코멘트 좀만 둥글게 바꾸자고 전사적으로 이야기해보면 좋을 것 같아용

Copy link
Member Author

Choose a reason for hiding this comment

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

.setTitle("네트워크 연결 안 됨")
.setMessage("와이파이 또는 모바일 데이터를 확인해주세요")
.create()
private val dialog: Dialog by lazy {
Copy link
Member

Choose a reason for hiding this comment

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

오? AlertDialog에서 Dialog로 바뀌었네용

import androidx.core.graphics.drawable.toDrawable
import com.eatssu.android.R

class DialogBuilder(
Copy link
Member

Choose a reason for hiding this comment

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

코어:디자인시스템 모듈로 옮기는건 어떨까용

Copy link
Member Author

Choose a reason for hiding this comment

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

실질적인 디자인시스템이나 스타일링에 관여하지 않고 로직만 담당하는 headless 방식 클래스라서 메인 모듈에 있는 것이 맞을 것 같아요!
com.eatssu.android.R 를 참조할 수 없기도 하구용

@PeraSite PeraSite requested review from HI-JIN2 and Copilot December 22, 2025 14:54
@PeraSite
Copy link
Member Author

Snackbar 컴포넌트로 변경해 화면 가로 길이 채우게 수정했습니다!

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 44 out of 50 changed files in this pull request and generated 8 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +201 to +203
<string name="toast_map_partnership_load_fail">제휴 정보를 불러오지 못했어요.</string>
<string name="toast_map_departure_load_fail">내 제휴 정보를 불러오지 못했어요.</string>

Copy link

Copilot AI Dec 22, 2025

Choose a reason for hiding this comment

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

The string resource toast_map_partnership_load_fail is defined but never used in the codebase. Similarly, toast_map_departure_load_fail is also not used. Consider removing these unused string resources or implementing the map feature that requires them in a separate PR.

Copilot uses AI. Check for mistakes.
Comment on lines +218 to 224
showDialog("로그아웃", "로그아웃 하시겠습니까?") {
isDestructive = true
onConfirm {
mainViewModel.logOut() // 로그아웃은 메인 액티비티에서 처리하도록 수정
startActivity(Intent(this@run, LoginActivity::class.java))
}
}
Copy link

Copilot AI Dec 22, 2025

Choose a reason for hiding this comment

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

The logout dialog is set as destructive (isDestructive = true) but doesn't explicitly set button text labels. In the destructive layout (dialog_destructive.xml), the confirm button appears on the left with an error color, and the cancel button appears on the right. This means the default "확인" text will appear on the red button on the left. For better UX, consider explicitly setting confirmText = "로그아웃" to make it clear what the destructive action is.

Copilot uses AI. Check for mistakes.
Comment on lines 25 to 40
private val dialog: Dialog by lazy {
context.showDialog("네트워크 연결 안 됨", "Wi-Fi, 모바일 데이터를 확인해주세요") {
cancellable = false
showCancelButton = false
showWhenStart = false

onConfirm {
context.startActivity(
Intent(Settings.ACTION_WIRELESS_SETTINGS)
.apply {
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
})
dialog.dismiss()
}
}
}
Copy link

Copilot AI Dec 22, 2025

Choose a reason for hiding this comment

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

The dialog is created with showWhenStart = false in the lazy initializer, but this creates a potential issue: if the dialog is shown and dismissed multiple times, calling dialog.show() on an already-dismissed dialog may not work as expected. Consider creating a new dialog instance each time rather than using a lazy singleton pattern, or verify that calling show() on a dismissed Dialog works correctly in all Android versions.

Copilot uses AI. Check for mistakes.
Comment on lines +24 to +45
onConfirm {
// Google Play Store의 앱 페이지로 이동하여 업데이트를 다운로드합니다.
val appPackageName = packageName
try {
startActivity(
Intent(
Intent.ACTION_VIEW,
"market://details?id=$appPackageName".toUri()
)
)
)
} catch (e: android.content.ActivityNotFoundException) {
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse("https://play.google.com/store/apps/details?id=$appPackageName")
} catch (e: android.content.ActivityNotFoundException) {
startActivity(
Intent(
Intent.ACTION_VIEW,
"https://play.google.com/store/apps/details?id=$appPackageName".toUri()
)
)
)
}
}

// 다이얼로그를 종료합니다.
finish()
// 다이얼로그를 종료합니다.
finish()
}
Copy link

Copilot AI Dec 22, 2025

Choose a reason for hiding this comment

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

The onConfirm callback doesn't dismiss the dialog before calling finish(). If the user clicks the update button, the activity finishes but the dialog may still be visible briefly. Consider adding it.dismiss() before finish() or use onDismiss { finish() } instead to ensure proper cleanup.

Copilot uses AI. Check for mistakes.
Copy link
Member

@HI-JIN2 HI-JIN2 left a comment

Choose a reason for hiding this comment

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

굿입니당~~

아직 string 리소스가 아니고 하드코딩된게 보이긴하는데 이거는 나중에 작업해도 될 것 같아염 (브랜치 판지 오래되어서)

Comment on lines 7 to 10
/**
* common 모듈의 ToastType은 순수한 enum이므로 Android 리소스에 접근 불가
* 따라서 ToastExtensions.kt에서 리소스 매핑 제공
*/
Copy link
Member

@HI-JIN2 HI-JIN2 Dec 23, 2025

Choose a reason for hiding this comment

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

core 모듈로 리소스를 옮기면 가능하죵
enum의 변수로 리소스도 가능했던 것 같아욤 아니면 sealed class를 써도 좋구염
굳이 따로 util을 안빼는 것이 유지보수하기 좋지 않을까염

Copy link
Member Author

Choose a reason for hiding this comment

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

core 모듈에는 android 종속성을 절대 안넣으려고 한 그런 생각이 있어서 그랬던 것 같아요!
완전히 순수한 kotlin class들만 core에 넣어야 'core'라고 생각했거든요
사실 그럼 EventLogger나 UiEvent, UiState들도 이상하긴 하네용
리소스 옮기겠습니다!

Copy link
Member

@HI-JIN2 HI-JIN2 Dec 23, 2025

Choose a reason for hiding this comment

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

아하~~~ 그런 뜻이!!! core:common에 대한 제 생각은 짬통..? 이었던 것 같아요 어느 모듈에서든 쓸 수 있는?!
요부분에 대해서 생각이 다르시면 좀더 얘기해봐도 좋을 것 같슴다

Copy link
Member Author

Choose a reason for hiding this comment

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

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 사실 완전 순수한 코드만 쓰려면 정말 많이 뜯어 고쳐야하고... 비즈니스 로직도 다 분리해서 core로 가고 main에서는 core 호출만 하는 레전드 separation of concerns 리팩토링 해야하는데 감히 엄두가 안나네용
우선은 현재 방식이 common에 디자인 시스템 관련도 있으니 괜찮을 것 같습니다!

Copy link
Member

@HI-JIN2 HI-JIN2 Dec 23, 2025

Choose a reason for hiding this comment

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

이거 컬러가 들어갔어도 단색이라 svg -> vector (xml)도 가능할 것 같아염
안되..려나?

Copy link
Member Author

Choose a reason for hiding this comment

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

피그마에서 SVG로 뽑으니까 가능하네요! 반영하겠습니당

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 47 out of 49 changed files in this pull request and generated 10 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

if (nickname.isBlank()) {
_uiState.value = UiState.Success(MainState.NicknameNull)
_uiEvent.emit(UiEvent.ShowToast(context.getString(R.string.set_nickname)))
_uiEvent.emit(UiEvent.ShowToast(context.getString(R.string.set_nickname), ToastType.ERROR))
Copy link

Copilot AI Dec 23, 2025

Choose a reason for hiding this comment

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

Using ToastType.ERROR for a missing nickname seems too severe. A missing nickname is more of a required input prompt rather than an error condition. Consider using ToastType.INFO or ToastType.WARNING instead, as this is guiding the user to complete their profile rather than indicating a system error.

Suggested change
_uiEvent.emit(UiEvent.ShowToast(context.getString(R.string.set_nickname), ToastType.ERROR))
_uiEvent.emit(UiEvent.ShowToast(context.getString(R.string.set_nickname), ToastType.INFO))

Copilot uses AI. Check for mistakes.
Comment on lines +4 to +8
<padding
android:left="18dp"
android:top="18dp"
android:right="18dp"
android:bottom="18dp" />
Copy link

Copilot AI Dec 23, 2025

Choose a reason for hiding this comment

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

The padding is duplicated between the shape drawable (lines 4-8) and the LinearLayout that uses it (line 8 in dialog layouts). Since the dialog layouts already specify android:padding="18dp", the padding in the drawable will be applied in addition to the layout padding, resulting in 36dp total padding instead of the intended 18dp. Remove the padding from either the shape drawable or the layout to avoid this duplication.

Copilot uses AI. Check for mistakes.
Comment on lines +9 to +13
<padding
android:left="16dp"
android:top="16dp"
android:right="16dp"
android:bottom="16dp" />
Copy link

Copilot AI Dec 23, 2025

Choose a reason for hiding this comment

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

The padding is duplicated between all toast shape drawables (lines 9-13) and the toast_layout.xml which specifies android:padding="16dp" on line 9. This will result in 32dp total padding instead of the intended 16dp. Remove the padding from either the shape drawables or the layout to avoid this duplication. This same issue affects all four toast shape files (info, success, warning, error).

Copilot uses AI. Check for mistakes.
Comment on lines +9 to +13
<padding
android:left="16dp"
android:top="16dp"
android:right="16dp"
android:bottom="16dp" />
Copy link

Copilot AI Dec 23, 2025

Choose a reason for hiding this comment

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

Same padding duplication issue as in shape_toast_info.xml. The padding defined here will be added on top of the 16dp padding in toast_layout.xml, resulting in 32dp total padding instead of 16dp.

Copilot uses AI. Check for mistakes.
Comment on lines +9 to +13
<padding
android:left="16dp"
android:top="16dp"
android:right="16dp"
android:bottom="16dp" />
Copy link

Copilot AI Dec 23, 2025

Choose a reason for hiding this comment

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

Same padding duplication issue as in shape_toast_info.xml. The padding defined here will be added on top of the 16dp padding in toast_layout.xml, resulting in 32dp total padding instead of 16dp.

Copilot uses AI. Check for mistakes.
Comment on lines +27 to +38
android:text="제목을 입력해주세요" />

<!-- Description -->
<TextView
android:id="@+id/dialog_description"
style="@style/Subtitle2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:textColor="@color/gray600"
android:gravity="center"
android:text="본문을 입력해주세요" />
Copy link

Copilot AI Dec 23, 2025

Choose a reason for hiding this comment

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

The hardcoded placeholder texts "제목을 입력해주세요" and "본문을 입력해주세요" should be removed. These are development placeholders that will be replaced programmatically in DialogUtil.kt and shouldn't appear in the final layout files.

Copilot uses AI. Check for mistakes.
is VersionCheckResult.ForceUpdateRequired -> {
Timber.d("강제 업데이트 필요: 최신 버전 ${result.minimumVersionCode}")
_uiEvent.emit(UiEvent.ShowToast("앱을 업데이트해주세요"))
_uiEvent.emit(UiEvent.ShowToast("앱을 업데이트해주세요", ToastType.INFO))
Copy link

Copilot AI Dec 23, 2025

Choose a reason for hiding this comment

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

The toast message for force update uses ToastType.INFO, but this is actually a critical action that prevents app usage. Consider using ToastType.WARNING to better convey the urgency of this situation to the user.

Suggested change
_uiEvent.emit(UiEvent.ShowToast("앱을 업데이트해주세요", ToastType.INFO))
_uiEvent.emit(UiEvent.ShowToast("앱을 업데이트해주세요", ToastType.WARNING))

Copilot uses AI. Check for mistakes.
Comment on lines +9 to +13
<padding
android:left="16dp"
android:top="16dp"
android:right="16dp"
android:bottom="16dp" />
Copy link

Copilot AI Dec 23, 2025

Choose a reason for hiding this comment

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

Same padding duplication issue as in shape_toast_info.xml. The padding defined here will be added on top of the 16dp padding in toast_layout.xml, resulting in 32dp total padding instead of 16dp.

Copilot uses AI. Check for mistakes.
android:layout_weight="1"
android:maxLines="2"
android:ellipsize="end"
android:text="테스트" />
Copy link

Copilot AI Dec 23, 2025

Choose a reason for hiding this comment

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

The hardcoded text "테스트" (test) should be removed from the toast layout. This is likely leftover from development and should not be in production code. The actual text will be set programmatically in ToastUtil.kt, making this placeholder text unnecessary.

Copilot uses AI. Check for mistakes.
Comment on lines +27 to +38
android:text="제목을 입력해주세요" />

<!-- Description -->
<TextView
android:id="@+id/dialog_description"
style="@style/Subtitle2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:textColor="@color/gray600"
android:gravity="center"
android:text="본문을 입력해주세요" />
Copy link

Copilot AI Dec 23, 2025

Choose a reason for hiding this comment

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

The hardcoded placeholder texts "제목을 입력해주세요" and "본문을 입력해주세요" should be removed. These are development placeholders that will be replaced programmatically in DialogUtil.kt and shouldn't appear in the final layout files.

Copilot uses AI. Check for mistakes.
Copy link
Member

@HI-JIN2 HI-JIN2 left a comment

Choose a reason for hiding this comment

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

👍

@PeraSite PeraSite merged commit 4a9fd49 into develop Dec 23, 2025
7 checks passed
@PeraSite PeraSite deleted the feat/tf-dialog branch December 23, 2025 01:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants