diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/last-build.bin b/buildSrc/build/kotlin/compileKotlin/cacheable/last-build.bin index 7f3e2a35..0a092cd6 100644 Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/last-build.bin and b/buildSrc/build/kotlin/compileKotlin/cacheable/last-build.bin differ diff --git a/buildSrc/build/kotlin/compileKotlin/local-state/build-history.bin b/buildSrc/build/kotlin/compileKotlin/local-state/build-history.bin index 0802f9a6..b41bc1b5 100644 Binary files a/buildSrc/build/kotlin/compileKotlin/local-state/build-history.bin and b/buildSrc/build/kotlin/compileKotlin/local-state/build-history.bin differ diff --git a/buildSrc/build/libs/buildSrc.jar b/buildSrc/build/libs/buildSrc.jar index fd94d043..11557991 100644 Binary files a/buildSrc/build/libs/buildSrc.jar and b/buildSrc/build/libs/buildSrc.jar differ diff --git a/core/designsystem/src/main/java/com/dpm/designsystem/SpotSnackBar.kt b/core/designsystem/src/main/java/com/dpm/designsystem/SpotSnackBar.kt index 84a5feda..cd291041 100644 --- a/core/designsystem/src/main/java/com/dpm/designsystem/SpotSnackBar.kt +++ b/core/designsystem/src/main/java/com/dpm/designsystem/SpotSnackBar.kt @@ -10,18 +10,18 @@ import com.depromeet.designsystem.databinding.SpotSnackbarBinding import com.dpm.designsystem.extension.dpToPx import com.google.android.material.snackbar.Snackbar - class SpotSnackBar( view: View, private val snackBarBackground: Int, private val message: String, private val marginBottom: Int, private val endMessage: String, - private val onClick: () -> Unit + private val onClick: () -> Unit, + private val visibleDialog: () -> Unit = {}, ) { companion object { - fun make(view: View, background: Int = R.drawable.rect_transfer_black_03_fill_60, marginBottom: Int = 0, message: String = "", endMessage: String = "", onClick: () -> Unit) = - SpotSnackBar(view = view, snackBarBackground = background, marginBottom = marginBottom, message= message, endMessage = endMessage, onClick = onClick) + fun make(view: View, background: Int = R.drawable.rect_transfer_black_03_fill_60, marginBottom: Int = 0, message: String = "", endMessage: String = "", onClick: () -> Unit, visibleDialog: () -> Unit = {}) = + SpotSnackBar(view = view, snackBarBackground = background, marginBottom = marginBottom, message = message, endMessage = endMessage, onClick = onClick, visibleDialog = visibleDialog) } private val context = view.context @@ -57,6 +57,11 @@ class SpotSnackBar( tvTrigger.text = endMessage clContainer.setBackgroundResource(snackBarBackground) } + snackbar.addCallback(object : Snackbar.Callback() { + override fun onDismissed(transientBottomBar: Snackbar?, event: Int) { + visibleDialog() + } + }) } private fun initEvent() { @@ -73,4 +78,4 @@ class SpotSnackBar( fun dismiss() { snackbar.dismiss() } -} \ No newline at end of file +} diff --git a/data/src/main/java/com/dpm/data/model/response/seatreview/ResponseSeatReviewDto.kt b/data/src/main/java/com/dpm/data/model/response/seatreview/ResponseSeatReviewDto.kt index f66f04c7..576d0c33 100644 --- a/data/src/main/java/com/dpm/data/model/response/seatreview/ResponseSeatReviewDto.kt +++ b/data/src/main/java/com/dpm/data/model/response/seatreview/ResponseSeatReviewDto.kt @@ -9,7 +9,7 @@ data class ResponseSeatReviewDto( @SerialName("id") val id: Int, @SerialName("member") - val member: Member, + val member: Member?, @SerialName("stadium") val stadium: Stadium, @SerialName("section") @@ -19,7 +19,7 @@ data class ResponseSeatReviewDto( @SerialName("row") val row: Row, @SerialName("seat") - val seat: Seat, + val seat: Seat?, @SerialName("dateTime") val dateTime: String, @SerialName("content") @@ -39,7 +39,7 @@ data class ResponseSeatReviewDto( @Serializable data class Member( @SerialName("profileImage") - val profileImage: String, + val profileImage: String?, @SerialName("nickname") val nickname: String, @SerialName("level") @@ -85,7 +85,7 @@ data class ResponseSeatReviewDto( @SerialName("id") val id: Int, @SerialName("seatNumber") - val seatNumber: Int, + val seatNumber: Int?, ) @Serializable diff --git a/presentation/src/main/java/com/dpm/presentation/home/HomeActivity.kt b/presentation/src/main/java/com/dpm/presentation/home/HomeActivity.kt index d99d4d1b..931a0b3d 100644 --- a/presentation/src/main/java/com/dpm/presentation/home/HomeActivity.kt +++ b/presentation/src/main/java/com/dpm/presentation/home/HomeActivity.kt @@ -15,6 +15,7 @@ import com.dpm.designsystem.SpotSnackBar import com.dpm.domain.entity.response.home.ResponseHomeFeed import com.dpm.domain.entity.response.viewfinder.ResponseStadiums import com.dpm.domain.model.seatreview.ReviewMethod +import com.dpm.domain.preference.SharedPreference import com.dpm.presentation.extension.dpToPx import com.dpm.presentation.extension.getCompatibleParcelableExtra import com.dpm.presentation.home.adapter.StadiumAdapter @@ -29,6 +30,7 @@ import com.dpm.presentation.seatrecord.adapter.LinearSpacingItemDecoration import com.dpm.presentation.seatreview.dialog.ReviewTypeDialog import com.dpm.presentation.seatreview.dialog.feed.FeedUploadDialog import com.dpm.presentation.seatreview.dialog.view.ViewUploadDialog +import com.dpm.presentation.seatreview.sample.LevelUpManager import com.dpm.presentation.setting.SettingActivity import com.dpm.presentation.util.MixpanelManager import com.dpm.presentation.util.Utils @@ -36,11 +38,15 @@ import com.dpm.presentation.viewfinder.StadiumActivity import com.dpm.presentation.viewfinder.StadiumDetailActivity import com.dpm.presentation.viewfinder.StadiumSelectionActivity import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject @AndroidEntryPoint class HomeActivity : BaseActivity( - ActivityHomeBinding::inflate + ActivityHomeBinding::inflate, ) { + @Inject + lateinit var sharedPreference: SharedPreference + companion object { const val STADIUM_EXTRA_ID = "stadium_id" private const val START_SPACING_DP = 16 @@ -59,15 +65,48 @@ class HomeActivity : BaseActivity( override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - initView() initEvent() initObserver() + + if (intent.getBooleanExtra("IS_VISIBLE_LEVELUP_DIALOG", false)) { + homeViewModel.getHomeFeed(isVisibleDialog = true) { + if (sharedPreference.level < it.level) { + LevelupDialog( + it.levelTitle, + it.level, + it.mascotImageUrl, + ).show(supportFragmentManager, LevelupDialog.TAG) + } + sharedPreference.teamId = it.teamId ?: 0 + sharedPreference.levelTitle = it.levelTitle + sharedPreference.teamName = it.teamName ?: "" + sharedPreference.level = it.level + } + } + + LevelUpManager.setOnLevelUpListener { + homeViewModel.getHomeFeed(isVisibleDialog = true) { + if (sharedPreference.level < it.level) { + LevelupDialog( + it.levelTitle, + it.level, + it.mascotImageUrl, + ).show(supportFragmentManager, LevelupDialog.TAG) + } + sharedPreference.teamId = it.teamId ?: 0 + sharedPreference.levelTitle = it.levelTitle + sharedPreference.teamName = it.teamName ?: "" + sharedPreference.level = it.level + } + } } override fun onResume() { super.onResume() - homeViewModel.getHomeFeed() + if (!(intent.getBooleanExtra("IS_VISIBLE_LEVELUP_DIALOG", false))) { + homeViewModel.getHomeFeed() + } } private fun initView() { @@ -104,17 +143,34 @@ class HomeActivity : BaseActivity( message = "시야찾기에 내 게시글이 올라갔어요!", endMessage = "확인하러 가기", marginBottom = 87, - ) { - val reviewData = intent.getCompatibleParcelableExtra(REVIEW_DATA) - if (reviewData != null) { - Intent(this@HomeActivity, StadiumDetailActivity::class.java).apply { - addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) - putExtra(SchemeKey.STADIUM_ID, reviewData.stadiumId) - putExtra(SchemeKey.BLOCK_CODE, reviewData.blockCode) - putExtra(SchemeKey.REVIEW_ID, reviewData.reviewId) - }.let { startActivity(it) } + onClick = { + val reviewData = intent.getCompatibleParcelableExtra(REVIEW_DATA) + if (reviewData != null) { + Intent(this@HomeActivity, StadiumDetailActivity::class.java).apply { + addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) + putExtra(SchemeKey.STADIUM_ID, reviewData.stadiumId) + putExtra(SchemeKey.BLOCK_CODE, reviewData.blockCode) + putExtra(SchemeKey.REVIEW_ID, reviewData.reviewId) + putExtra("IMAGE_UPLOAD", true) + }.let { startActivity(it) } + } + }, + visibleDialog = { + homeViewModel.getHomeFeed(isVisibleDialog = true) { + if (sharedPreference.level < it.level) { + LevelupDialog( + it.levelTitle, + it.level, + it.mascotImageUrl, + ).show(supportFragmentManager, LevelupDialog.TAG) + } + sharedPreference.teamId = it.teamId ?: 0 + sharedPreference.levelTitle = it.levelTitle + sharedPreference.teamName = it.teamName ?: "" + sharedPreference.level = it.level + } } - }.show() + ).show() } } @@ -126,9 +182,10 @@ class HomeActivity : BaseActivity( private fun initEvent() = with(binding) { clHomeArchiving.setOnClickListener { MixpanelManager.track("home_archiving") - startSeatRecordActivity() } + startSeatRecordActivity() + } ivHomeInfo.setOnClickListener { showLevelDescriptionDialog() } - clHomeScrap.setOnClickListener{ + clHomeScrap.setOnClickListener { MixpanelManager.track("home_scrap") startScrapActivity() } @@ -181,19 +238,6 @@ class HomeActivity : BaseActivity( setHomeFeedShimmer(false) } } - - } - - homeViewModel.levelState.asLiveData().observe(this) { - val currentState = homeViewModel.homeFeed.value - if (it && currentState is UiState.Success) { - LevelupDialog( - currentState.data.levelTitle, - currentState.data.level, - currentState.data.mascotImageUrl - ).show(supportFragmentManager, LevelupDialog.TAG) - homeViewModel.levelState.value = false - } } } @@ -218,30 +262,29 @@ class HomeActivity : BaseActivity( message = "현재 잠실야구장만 이용할 수 있어요!", endMessage = "잠실야구장 보기", marginBottom = 87, - ) { - startStadiumActivity(it) - }.show() + onClick = {startStadiumActivity(it)} + ) .show() + } else { MixpanelManager.track("home_find_view") startStadiumActivity(it) } - } + }, ) binding.rvHomeStadium.adapter = stadiumAdapter binding.rvHomeStadium.addItemDecoration( LinearSpacingItemDecoration( START_SPACING_DP.dpToPx(this), - BETWEEN_SPADING_DP.dpToPx(this) - ) + BETWEEN_SPADING_DP.dpToPx(this), + ), ) binding.rvHomeStadium.itemAnimator = null } - private fun startStadiumSelectionActivity() { Intent(this@HomeActivity, StadiumSelectionActivity::class.java).apply { startActivity( - this + this, ) } } @@ -257,7 +300,7 @@ class HomeActivity : BaseActivity( private fun startStadiumActivity(stadium: ResponseStadiums) { val intent = Intent( this@HomeActivity, - StadiumActivity::class.java + StadiumActivity::class.java, ).apply { if (stadium.id != 1) { putExtra(STADIUM_EXTRA_ID, 1) @@ -276,11 +319,9 @@ class HomeActivity : BaseActivity( if (isLoading) { shimmerHomeStadium.startShimmer() shimmerHomeStadium.visibility = View.VISIBLE - } else { shimmerHomeStadium.stopShimmer() shimmerHomeStadium.visibility = View.GONE - } } private fun setHomeFeedVisibility(isSuccess: Boolean) { @@ -306,7 +347,6 @@ class HomeActivity : BaseActivity( } else { csbvHomeTitle.setTextPart("시야 사진 ", data.reviewCntToLevelup, "장 더 올리면 레벨업!") } - } private fun navigateToReviewActivity() { @@ -334,7 +374,7 @@ class HomeActivity : BaseActivity( messageColor = com.depromeet.designsystem.R.color.color_foreground_white, icon = com.depromeet.designsystem.R.drawable.ic_alert_circle, iconColor = com.depromeet.designsystem.R.color.color_error_secondary, - marginBottom = 87 + marginBottom = 87, ).show() } @@ -360,7 +400,8 @@ class HomeActivity : BaseActivity( putExtra(SchemeKey.STADIUM_ID, navReviewDetail.stadiumId) putExtra(SchemeKey.BLOCK_CODE, navReviewDetail.blockCode) putExtra(SchemeKey.REVIEW_ID, navReviewDetail.reviewId) + putExtra("IMAGE_UPLOAD", true) }.let { startActivity(it) } } } -} \ No newline at end of file +} diff --git a/presentation/src/main/java/com/dpm/presentation/home/viewmodel/HomeGuiViewModel.kt b/presentation/src/main/java/com/dpm/presentation/home/viewmodel/HomeGuiViewModel.kt index f3857d01..0c2cfc8a 100644 --- a/presentation/src/main/java/com/dpm/presentation/home/viewmodel/HomeGuiViewModel.kt +++ b/presentation/src/main/java/com/dpm/presentation/home/viewmodel/HomeGuiViewModel.kt @@ -1,5 +1,7 @@ package com.dpm.presentation.home.viewmodel +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.dpm.core.state.UiState @@ -38,7 +40,7 @@ class HomeGuiViewModel @Inject constructor( private val _levelUpInfo = MutableStateFlow>(UiState.Loading) val levelUpInfo = _levelUpInfo.asStateFlow() - val levelState = MutableStateFlow(false) + val levelState = MutableLiveData(false) fun getStadiums() { viewModelScope.launch { @@ -53,7 +55,6 @@ class HomeGuiViewModel @Inject constructor( fun getLevelDescription() { viewModelScope.launch { homeRepository.getLevelByPost().onSuccess { - _levelDescriptions.value = UiState.Success(it) }.onFailure { _levelDescriptions.value = UiState.Failure(it.message.toString()) @@ -61,12 +62,18 @@ class HomeGuiViewModel @Inject constructor( } } - fun getHomeFeed() { + fun getHomeFeed( + isVisibleDialog: Boolean = false, + onSuccess : (ResponseHomeFeed) -> Unit = {} + ) { viewModelScope.launch { homeRepository.getHomeFeed().onSuccess { _homeFeed.value = UiState.Success(it) - putProfileInfo(it) - + if (isVisibleDialog) { + onSuccess(it) + } else { + putProfileInfo(it) + } }.onFailure { _homeFeed.value = UiState.Failure(it.message.toString()) } @@ -83,18 +90,9 @@ class HomeGuiViewModel @Inject constructor( } } - private fun checkLevelUp(level: Int) { - if (sharedPreference.level < level && sharedPreference.level != -1) { - levelState.value = true - } - sharedPreference.level = level - } - private fun putProfileInfo(data : ResponseHomeFeed){ - checkLevelUp(data.level) sharedPreference.teamId = data.teamId ?: 0 sharedPreference.levelTitle = data.levelTitle sharedPreference.teamName = data.teamName ?: "" - sharedPreference.level = data.level } } \ No newline at end of file diff --git a/presentation/src/main/java/com/dpm/presentation/scrap/ScrapDetailPictureFragment.kt b/presentation/src/main/java/com/dpm/presentation/scrap/ScrapDetailPictureFragment.kt index 7ac908f7..66e70a0c 100644 --- a/presentation/src/main/java/com/dpm/presentation/scrap/ScrapDetailPictureFragment.kt +++ b/presentation/src/main/java/com/dpm/presentation/scrap/ScrapDetailPictureFragment.kt @@ -110,9 +110,9 @@ class ScrapDetailPictureFragment : BindingFragment({ private const val SELECT_SEAT_DIALOG = "SelectSeatDialog" private const val DATE_PICKER_DIALOG_TAG = "DatePickerDialogTag" private const val IMAGE_UPLOAD_DIALOG = "ImageUploadDialog" + private const val UNSAVED_DATA_DIALOG = "UnsavedDataDialog" private const val REVIEW_DATA = "REVIEW_DATA" private const val METHOD_KEY = "METHOD_KEY" private const val DIALOG_TYPE = "DIALOG_TYPE" @@ -103,7 +105,7 @@ class ReviewActivity : BaseActivity({ private fun initEvent() { initEventUploadBtn() initEventRemoveBtn() - initEventToHome() + initEventToBack() } private fun initObserve() { @@ -141,6 +143,7 @@ class ReviewActivity : BaseActivity({ private fun observeReviewViewModel() { viewModel.selectedImages.asLiveData().observe(this) { image -> updateNextButtonState() + initEventToBack() } viewModel.reviewCount.asLiveData().observe(this) { count -> @@ -150,10 +153,15 @@ class ReviewActivity : BaseActivity({ viewModel.selectedGoodReview.asLiveData().observe(this) { count -> updateNextButtonState() + initEventToBack() } viewModel.selectedBadReview.asLiveData().observe(this) { count -> updateNextButtonState() + initEventToBack() + } + viewModel.selectedBlock.asLiveData().observe(this){ + initEventToBack() } } @@ -170,6 +178,7 @@ class ReviewActivity : BaseActivity({ val number = bundle.getString("number", "") val sectionId = bundle.getInt("sectionId", 0) val isColumnCheckEnabled = bundle.getBoolean("isColumnCheckEnabled", false) + updateNextButtonState() with(binding) { when (sectionId) { 10 -> { @@ -266,9 +275,17 @@ class ReviewActivity : BaseActivity({ } } - private fun initEventToHome() { + private fun initEventToBack() { + val isSelectedImageFilled = viewModel.selectedImages.value.isNotEmpty() + val isSelectedGoodBtnFilled = viewModel.selectedGoodReview.value.isNotEmpty() + val isSelectedBadBtnFilled = viewModel.selectedBadReview.value.isNotEmpty() + val isSelectedBlockFilled = viewModel.selectedBlock.value.isNotEmpty() binding.btnBack.setOnSingleClickListener { - finish() + if (isSelectedImageFilled || isSelectedGoodBtnFilled || isSelectedBadBtnFilled || isSelectedBlockFilled) { + UnSavedDataDialog().show(supportFragmentManager, UNSAVED_DATA_DIALOG) + } else { + finish() + } } } @@ -431,7 +448,7 @@ class ReviewActivity : BaseActivity({ (isSelectedGoodBtnFilled || isSelectedBadBtnFilled) && (isSelectedBlockFilled && (isSelectedColumnFilled || isSelectedNumberFilled)) && !(isSelectedImageFilled) -> { binding.tvUploadBtn.setBackgroundResource(R.drawable.rect_action_disabled_fill_8) makeSpotImageAppbar("사진을 등록해주세요") - } + } else -> { val uniqueImageUris = selectedImageUris.distinct() diff --git a/presentation/src/main/java/com/dpm/presentation/seatreview/SelectViewImageActivity.kt b/presentation/src/main/java/com/dpm/presentation/seatreview/SelectViewImageActivity.kt index f20a8f41..7b98ae95 100644 --- a/presentation/src/main/java/com/dpm/presentation/seatreview/SelectViewImageActivity.kt +++ b/presentation/src/main/java/com/dpm/presentation/seatreview/SelectViewImageActivity.kt @@ -63,13 +63,13 @@ class SelectViewImageActivity : BaseActivity({ is UiState.Success -> { var reviewData = intent.getParcelableExtra(REVIEW_DATA) reviewData = reviewData?.copy( - reviewId = uiState.data.id + reviewId = uiState.data.id, ) Intent(this, HomeActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) putExtra(UPLOAD_SNACKBAR, true) - putExtra(REVIEW_DATA,reviewData) + putExtra(REVIEW_DATA, reviewData) }.let { finish() startActivity(it) @@ -104,14 +104,14 @@ class SelectViewImageActivity : BaseActivity({ } private fun setupImageSelection() { - val selectImage = listOf( - binding.ivFirstImage to binding.ivFirstImageCheck, - binding.ivSecondImage to binding.ivSecondImageCheck, - binding.ivThirdImage to binding.ivThirdImageCheck, + val selectImageContainers = listOf( + binding.clFirstImage to binding.ivFirstImage, + binding.clSecondImage to binding.ivSecondImage, + binding.clThirdImage to binding.ivThirdImage, ) - selectImage.forEach { (image, isChecked) -> - image.setOnSingleClickListener { + selectImageContainers.forEach { (container, image) -> + container.setOnClickListener { val imageUri = image.tag as? String if (imageUri != null) { viewModel.toggleImageSelection(imageUri) @@ -161,12 +161,16 @@ class SelectViewImageActivity : BaseActivity({ private fun initEvent() { binding.tvCancel.setOnSingleClickListener { - startActivity( - Intent(this, HomeActivity::class.java).putExtra( - CANCEL_SNACKBAR, - true, - ), - ).also { finish() } + if (intent.getBooleanExtra("IMAGE_UPLOAD", false)) { + startToHomeActivity() + } else { + startActivity( + Intent(this, HomeActivity::class.java).putExtra( + CANCEL_SNACKBAR, + true, + ), + ).also { finish() } + } } binding.tvUploadBtn.setOnSingleClickListener { val reviewData = intent.getParcelableExtra(REVIEW_DATA) @@ -186,7 +190,20 @@ class SelectViewImageActivity : BaseActivity({ viewModel.postSeatReview(ReviewMethod.VIEW) } binding.ivExit.setOnSingleClickListener { - startActivity(Intent(this, HomeActivity::class.java)) + if (intent.getBooleanExtra("IMAGE_UPLOAD", false)) { + startToHomeActivity() + } else { + finish() + } + } + } + + private fun startToHomeActivity() { + Intent(this, HomeActivity::class.java).apply { + putExtra("IS_VISIBLE_LEVELUP_DIALOG", true) + putExtra(CANCEL_SNACKBAR, true) + startActivity(this) + finishAffinity() } } } diff --git a/presentation/src/main/java/com/dpm/presentation/seatreview/dialog/main/ReviewMySeatDialog.kt b/presentation/src/main/java/com/dpm/presentation/seatreview/dialog/main/ReviewMySeatDialog.kt index 6ea30e84..22de4f81 100644 --- a/presentation/src/main/java/com/dpm/presentation/seatreview/dialog/main/ReviewMySeatDialog.kt +++ b/presentation/src/main/java/com/dpm/presentation/seatreview/dialog/main/ReviewMySeatDialog.kt @@ -167,7 +167,6 @@ class ReviewMySeatDialog : BindingBottomSheetDialog( + R.layout.fragment_unsaved_data_dialog, + FragmentUnsavedDataDialogBinding::inflate, +) { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setStyle(STYLE_NORMAL, R.style.TransparentMaterialDialogFragment) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initEvent() + } + + private fun initEvent() { + binding.btnCancel.setOnSingleClickListener { + dismiss() + } + binding.btnDismiss.setOnSingleClickListener { + activity?.finish() + } + } +} diff --git a/presentation/src/main/java/com/dpm/presentation/seatreview/dialog/view/SeatShareDialog.kt b/presentation/src/main/java/com/dpm/presentation/seatreview/dialog/view/SeatShareDialog.kt index 2927168c..56a347b6 100644 --- a/presentation/src/main/java/com/dpm/presentation/seatreview/dialog/view/SeatShareDialog.kt +++ b/presentation/src/main/java/com/dpm/presentation/seatreview/dialog/view/SeatShareDialog.kt @@ -13,6 +13,7 @@ import com.depromeet.presentation.databinding.FragmentSightShareBottomSheetBindi import com.dpm.core.base.BindingBottomSheetDialog import com.dpm.presentation.extension.setOnSingleClickListener import com.dpm.presentation.seatreview.SelectViewImageActivity +import com.dpm.presentation.seatreview.sample.LevelUpManager class SeatShareDialog : BindingBottomSheetDialog( R.layout.fragment_sight_share_bottom_sheet, @@ -45,10 +46,12 @@ class SeatShareDialog : BindingBottomSheetDialog( @@ -34,6 +35,7 @@ class ViewUploadDialog : BindingDialogFragment( private fun initEvent() { val reviewData = arguments?.getParcelable(REVIEW_DATA) binding.btnCancel.setOnSingleClickListener { + LevelUpManager.triggerLevelUp() dismiss() } binding.btnConfirmReview.setOnSingleClickListener { diff --git a/presentation/src/main/java/com/dpm/presentation/seatreview/sample/DialogStateManager.kt b/presentation/src/main/java/com/dpm/presentation/seatreview/sample/DialogStateManager.kt new file mode 100644 index 00000000..29c6e08e --- /dev/null +++ b/presentation/src/main/java/com/dpm/presentation/seatreview/sample/DialogStateManager.kt @@ -0,0 +1,5 @@ +package com.dpm.presentation.seatreview.sample + +object DialogStateManager { + var shouldShowLevelUpDialog: Boolean = false +} diff --git a/presentation/src/main/java/com/dpm/presentation/seatreview/sample/LevelUpManager.kt b/presentation/src/main/java/com/dpm/presentation/seatreview/sample/LevelUpManager.kt new file mode 100644 index 00000000..aae42454 --- /dev/null +++ b/presentation/src/main/java/com/dpm/presentation/seatreview/sample/LevelUpManager.kt @@ -0,0 +1,21 @@ +package com.dpm.presentation.seatreview.sample +object LevelUpManager { + private var levelUpListener: (() -> Unit)? = null + private var levelUpListener2: (() -> Unit)? = null + + fun setOnLevelUpListener(listener: () -> Unit) { + levelUpListener = listener + } + + fun triggerLevelUp() { + levelUpListener?.invoke() + } + + fun setOnLevelUpListener2(listener: () -> Unit) { + levelUpListener2 = listener + } + + fun triggerLevelUp2() { + levelUpListener2?.invoke() + } +} diff --git a/presentation/src/main/java/com/dpm/presentation/seatreview/viewmodel/ReviewViewModel.kt b/presentation/src/main/java/com/dpm/presentation/seatreview/viewmodel/ReviewViewModel.kt index 0f984964..01b0e116 100644 --- a/presentation/src/main/java/com/dpm/presentation/seatreview/viewmodel/ReviewViewModel.kt +++ b/presentation/src/main/java/com/dpm/presentation/seatreview/viewmodel/ReviewViewModel.kt @@ -1,6 +1,7 @@ package com.dpm.presentation.seatreview.viewmodel import android.net.Uri +import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -393,19 +394,23 @@ class ReviewViewModel @Inject constructor( Timber.d("Selected seatNumber: ${selectedNumber.value}") Timber.d("Selected reviewType: $reviewType") _postReviewState.value = UiState.Loading - seatReviewRepository.postSeatReview( - _selectedBlockId.value, - requestSeatReview, - ) - .onSuccess { id -> + + try { + seatReviewRepository.postSeatReview( + _selectedBlockId.value, + requestSeatReview, + ).onSuccess { id -> _postReviewState.value = UiState.Success(id) + Log.d("minju3", "뷰모델 성공") Timber.d("POST REVIEW SUCCESS") + }.onFailure { t -> + Log.d("minju3", "뷰모델 실패") + Timber.e(t, "POST REVIEW FAILURE: ${t.message}") } - .onFailure { t -> - if (t is HttpException) { - Timber.e("POST REVIEW FAILURE: $t") - } - } + } catch (e: Exception) { + Log.d("minju3", "뷰모델 예외 발생") + Timber.e(e, "Exception in postSeatReview") + } } } diff --git a/presentation/src/main/java/com/dpm/presentation/viewfinder/StadiumDetailActivity.kt b/presentation/src/main/java/com/dpm/presentation/viewfinder/StadiumDetailActivity.kt index 086127e7..c3e937ae 100644 --- a/presentation/src/main/java/com/dpm/presentation/viewfinder/StadiumDetailActivity.kt +++ b/presentation/src/main/java/com/dpm/presentation/viewfinder/StadiumDetailActivity.kt @@ -24,6 +24,7 @@ import com.dpm.presentation.extension.getCompatibleParcelableExtra import com.dpm.presentation.home.HomeActivity import com.dpm.presentation.scheme.SchemeKey import com.dpm.presentation.scrap.ScrapActivity +import com.dpm.presentation.seatreview.sample.LevelUpManager import com.dpm.presentation.util.KakaoUtils import com.dpm.presentation.util.MixpanelManager import com.dpm.presentation.util.Utils @@ -138,7 +139,11 @@ class StadiumDetailActivity : BaseActivity({ private fun initEvent() { binding.spotAppbar.setNavigationOnClickListener { - finish() + if (intent.getBooleanExtra("IMAGE_UPLOAD", false)) { + startToHomeActivity() + } else { + finish() + } } binding.spotAppbar.setMenuOnClickListener { @@ -209,10 +214,8 @@ class StadiumDetailActivity : BaseActivity({ } private fun startToHomeActivity() { - Intent( - this, - HomeActivity::class.java - ).apply { + Intent(this, HomeActivity::class.java).apply { + putExtra("IS_VISIBLE_LEVELUP_DIALOG", true) startActivity(this) finishAffinity() } diff --git a/presentation/src/main/res/layout/fragment_select_seat_bottom_sheet.xml b/presentation/src/main/res/layout/fragment_select_seat_bottom_sheet.xml index b1221416..81938004 100644 --- a/presentation/src/main/res/layout/fragment_select_seat_bottom_sheet.xml +++ b/presentation/src/main/res/layout/fragment_select_seat_bottom_sheet.xml @@ -606,6 +606,8 @@ android:layout_marginTop="10dp" android:drawableStart="@drawable/ic_select_seat_error" android:drawablePadding="4dp" + android:gravity="center" + android:textAlignment="center" android:text="존재하지 않는 열이에요" android:textAppearance="@style/TextAppearance.Spot.Label12" android:textColor="@color/color_error_primary" diff --git a/presentation/src/main/res/layout/fragment_unsaved_data_dialog.xml b/presentation/src/main/res/layout/fragment_unsaved_data_dialog.xml new file mode 100644 index 00000000..59ea0c9d --- /dev/null +++ b/presentation/src/main/res/layout/fragment_unsaved_data_dialog.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/presentation/src/main/res/raw/check.json b/presentation/src/main/res/raw/check.json index 3f1d57c1..bf2fafd2 100644 --- a/presentation/src/main/res/raw/check.json +++ b/presentation/src/main/res/raw/check.json @@ -1 +1 @@ -{"assets":[],"ddd":0,"fr":30,"h":500,"ip":0,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Path 1","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[80.996,9.672]},"o":{"a":0,"k":100},"p":{"a":0,"k":[248.994,253]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":61,"st":0,"bm":0,"shapes":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0],[0,0]],"o":[[-0.895,-0.265],[0,0],[0,0]],"v":[[0,0],[60.449,63.672],[162.002,-44.329]]}}},{"ty":"st","hd":false,"bm":0,"c":{"a":0,"k":[1,1,1]},"lc":2,"lj":2,"ml":28.96,"o":{"a":0,"k":100},"w":{"a":0,"k":32}},{"ty":"tm","hd":false,"bm":0,"e":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":2.4,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":15.6,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"o":{"a":0,"k":0},"s":{"a":0,"k":0},"m":1}]},{"ddd":0,"ind":2,"ty":4,"nm":"Oval 1","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":1,"k":[{"t":0,"s":[250,250],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":2.4,"s":[250,250],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":61,"st":0,"bm":0,"shapes":[{"ty":"sh","hd":false,"nm":"Oval 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[-96.65,0],[0,-96.65],[96.65,0],[0,96.65]],"o":[[96.65,0],[0,96.65],[-96.65,0],[0,-96.65]],"v":[[0,-175],[175,0],[0,175],[-175,0]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":1,"k":[{"t":0,"s":[0,175],"i":{"x":0,"y":0},"o":{"x":1,"y":1}},{"t":2.4,"s":[0,175],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"g":{"p":2,"k":{"a":1,"k":[{"t":0,"s":[0,0.173,0.843,0.651,1,0.365,0.824,0.506,0,1,1,1],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":2.4,"s":[0,0.173,0.843,0.651,1,0.365,0.824,0.506,0,1,1,1],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":2.4,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":1,"s":{"a":1,"k":[{"t":0,"s":[0,-175],"i":{"x":0,"y":0},"o":{"x":1,"y":1}},{"t":2.4,"s":[0,-175],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}}]},{"ddd":0,"ind":3,"ty":4,"nm":"\bright-sparkle01","hd":false,"sr":1,"ks":{"a":{"a":1,"k":[{"t":0,"s":[14,14],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":18.3,"s":[12,12],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"o":{"a":0,"k":100},"p":{"a":1,"k":[{"t":0,"s":[347,145],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[0,0],"to":[0,0]},{"t":18.3,"s":[347,145],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[-87.60387811634342,14.473684210526315],"to":[0,0]},{"t":33.6,"s":[456.867,44.936],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":18.3,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[20],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":1,"ip":0,"op":61,"st":0,"bm":0,"shapes":[{"ty":"rc","hd":false,"nm":"\bright-sparkle01","d":1,"p":{"a":1,"k":[{"t":0,"s":[14,14],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":18.3,"s":[12,12],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":4},"s":{"a":1,"k":[{"t":0,"s":[28,28],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":18.3,"s":[24,24],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"fl","hd":false,"bm":0,"c":{"a":1,"k":[{"t":0,"s":[1,0.976,0.624],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[1,0.965,0.447],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":1,"o":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"tm","hd":false,"bm":0,"e":{"a":0,"k":100},"o":{"a":0,"k":0},"s":{"a":0,"k":0},"m":1}]},{"ddd":0,"ind":4,"ty":4,"nm":"\bright-sparkle02","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":1,"k":[{"t":0,"s":[347,145],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[0,0],"to":[0,0]},{"t":20.4,"s":[349,193],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[-68.500251428446,1.756416703293496],"to":[0,0]},{"t":35.7,"s":[452.122,125.68],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":20.4,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":35.7,"s":[-80],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":61,"st":0,"bm":0,"shapes":[{"ty":"sh","hd":false,"nm":"\bright-sparkle02","d":1,"ks":{"a":1,"k":[{"t":0,"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[14,-14],[14,14],[-14,14],[-14,-14]]}],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":20.4,"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[10,-10],[10,10],[-10,10],[-10,-10]]}],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":35.7,"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[10,-10],[10,10],[-10,10],[-10,-10]]}],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"rd","hd":false,"r":{"a":0,"k":4}},{"ty":"fl","hd":false,"bm":0,"c":{"a":1,"k":[{"t":0,"s":[1,0.976,0.624],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":35.7,"s":[0.78,0.973,0.471],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":1,"o":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":35.7,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"tm","hd":false,"bm":0,"e":{"a":0,"k":100},"o":{"a":0,"k":0},"s":{"a":0,"k":0},"m":1}]},{"ddd":0,"ind":5,"ty":4,"nm":"\bright-sparkle03","hd":false,"sr":1,"ks":{"a":{"a":1,"k":[{"t":0,"s":[14,14],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":17.1,"s":[12,12],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":34.5,"s":[13,13],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"o":{"a":0,"k":100},"p":{"a":1,"k":[{"t":0,"s":[347,145],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[0,0],"to":[0,0]},{"t":17.1,"s":[327,145],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[-87.60387811634342,14.473684210526315],"to":[0,0]},{"t":34.5,"s":[398.666,59.104],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":17.1,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":34.5,"s":[80],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":61,"st":0,"bm":0,"shapes":[{"ty":"rc","hd":false,"nm":"\bright-sparkle03","d":1,"p":{"a":1,"k":[{"t":0,"s":[14,14],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":17.1,"s":[12,12],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":34.5,"s":[13,13],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":4},"s":{"a":1,"k":[{"t":0,"s":[28,28],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":17.1,"s":[24,24],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":34.5,"s":[26,26],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"fl","hd":false,"bm":0,"c":{"a":1,"k":[{"t":0,"s":[1,0.976,0.624],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":34.5,"s":[0.518,0.898,0.325],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":1,"o":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":34.5,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"tm","hd":false,"bm":0,"e":{"a":0,"k":100},"o":{"a":0,"k":0},"s":{"a":0,"k":0},"m":1}]},{"ddd":0,"ind":6,"ty":4,"nm":"left-sparkle03","hd":false,"sr":1,"ks":{"a":{"a":1,"k":[{"t":0,"s":[14,14],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":20.1,"s":[12,12],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":35.4,"s":[13,13],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"o":{"a":0,"k":100},"p":{"a":1,"k":[{"t":0,"s":[146,145],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[0,0],"to":[0,0]},{"t":20.1,"s":[188,115],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[73.64911620066118,0.4544175747782191],"to":[0,0]},{"t":35.4,"s":[107.409,64.877],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":20.1,"s":[50],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":35.4,"s":[-50],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":61,"st":0,"bm":0,"shapes":[{"ty":"rc","hd":false,"nm":"left-sparkle03","d":1,"p":{"a":1,"k":[{"t":0,"s":[14,14],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":20.1,"s":[12,12],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":35.4,"s":[13,13],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":4},"s":{"a":1,"k":[{"t":0,"s":[28,28],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":20.1,"s":[24,24],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":35.4,"s":[26,26],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"fl","hd":false,"bm":0,"c":{"a":1,"k":[{"t":0,"s":[1,0.976,0.624],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":35.4,"s":[1,0.98,0.373],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":1,"o":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":35.4,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"tm","hd":false,"bm":0,"e":{"a":0,"k":100},"o":{"a":0,"k":0},"s":{"a":0,"k":0},"m":1}]},{"ddd":0,"ind":7,"ty":4,"nm":"left-sparkle01","hd":false,"sr":1,"ks":{"a":{"a":1,"k":[{"t":0,"s":[14,14],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":18.3,"s":[12,12],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"o":{"a":0,"k":100},"p":{"a":1,"k":[{"t":0,"s":[146,145],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[0,0],"to":[0,0]},{"t":18.3,"s":[147,145],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[88.49445983379508,2.2659279778393397],"to":[0,0]},{"t":33.6,"s":[33,110],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":18.3,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[20],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":1,"ip":0,"op":61,"st":0,"bm":0,"shapes":[{"ty":"rc","hd":false,"nm":"left-sparkle01","d":1,"p":{"a":1,"k":[{"t":0,"s":[14,14],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":18.3,"s":[12,12],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":4},"s":{"a":1,"k":[{"t":0,"s":[28,28],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":18.3,"s":[24,24],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"fl","hd":false,"bm":0,"c":{"a":1,"k":[{"t":0,"s":[1,0.976,0.624],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[0.78,0.973,0.471],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":1,"o":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"tm","hd":false,"bm":0,"e":{"a":0,"k":100},"o":{"a":0,"k":0},"s":{"a":0,"k":0},"m":1}]},{"ddd":0,"ind":8,"ty":4,"nm":"left-sparkle02","hd":false,"sr":1,"ks":{"a":{"a":1,"k":[{"t":0,"s":[14,14],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":21.9,"s":[10,10],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[10,10],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"o":{"a":0,"k":100},"p":{"a":1,"k":[{"t":0,"s":[146,175],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[0,0],"to":[0,0]},{"t":21.9,"s":[139,177],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[48.701615140708896,1.1878254222077373],"to":[0,0]},{"t":33.6,"s":[57.129,160.593],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":21.9,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[-20],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":1,"ip":0,"op":61,"st":0,"bm":0,"shapes":[{"ty":"rc","hd":false,"nm":"left-sparkle02","d":1,"p":{"a":1,"k":[{"t":0,"s":[14,14],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":21.9,"s":[10,10],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[10,10],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":4},"s":{"a":1,"k":[{"t":0,"s":[28,28],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":21.9,"s":[20,20],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[20,20],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"fl","hd":false,"bm":0,"c":{"a":1,"k":[{"t":0,"s":[1,0.976,0.624],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[0.518,0.898,0.325],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":1,"o":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"tm","hd":false,"bm":0,"e":{"a":0,"k":100},"o":{"a":0,"k":0},"s":{"a":0,"k":0},"m":1}]},{"ddd":0,"ind":9,"ty":4,"nm":"Screen","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[250,250]},"o":{"a":0,"k":100},"p":{"a":0,"k":[250,250]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":61,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Screen Group","bm":0,"it":[{"ty":"rc","hd":false,"nm":"Screen","d":1,"p":{"a":0,"k":[250,250]},"r":{"a":0,"k":0},"s":{"a":0,"k":[500,500]}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]}],"meta":{"g":"@phase-software/lottie-exporter 0.7.0"},"nm":"","op":60,"v":"5.6.0","w":500} \ No newline at end of file +{"assets":[],"ddd":0,"fr":30,"h":550,"ip":0,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Path 1","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[80.996,9.672]},"o":{"a":0,"k":100},"p":{"a":1,"k":[{"t":0,"s":[277.996,277.001],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25},"ti":[0,0],"to":[0,0]},{"t":2.4,"s":[277.996,277.001],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25},"ti":[0,0],"to":[0,0]},{"t":15.6,"s":[277.994,277],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":61,"st":0,"bm":0,"shapes":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0],[0,0]],"o":[[-0.895,-0.265],[0,0],[0,0]],"v":[[0,0],[60.449,63.672],[162.002,-44.329]]}}},{"ty":"st","hd":false,"bm":0,"c":{"a":0,"k":[1,1,1]},"lc":2,"lj":2,"ml":28.96,"o":{"a":0,"k":100},"w":{"a":0,"k":32}},{"ty":"tm","hd":false,"bm":0,"e":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":2.4,"s":[0],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":15.6,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"o":{"a":0,"k":0},"s":{"a":0,"k":0},"m":1}]},{"ddd":0,"ind":2,"ty":4,"nm":"Oval 1","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":1,"k":[{"t":0,"s":[275,275],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25},"ti":[0,0],"to":[0,0]},{"t":2.4,"s":[275,275],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":61,"st":0,"bm":0,"shapes":[{"ty":"sh","hd":false,"nm":"Oval 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[-96.65,0],[0,-96.65],[96.65,0],[0,96.65]],"o":[[96.65,0],[0,96.65],[-96.65,0],[0,-96.65]],"v":[[0,-175],[175,0],[0,175],[-175,0]]}}},{"ty":"gf","hd":false,"bm":0,"e":{"a":1,"k":[{"t":0,"s":[0,175],"i":{"x":0,"y":0},"o":{"x":1,"y":1}},{"t":2.4,"s":[0,175],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"g":{"p":2,"k":{"a":1,"k":[{"t":0,"s":[0,0.173,0.843,0.651,1,0.365,0.824,0.506,0,1,1,1],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":2.4,"s":[0,0.173,0.843,0.651,1,0.365,0.824,0.506,0,1,1,1],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},"t":1,"a":{"a":0,"k":0},"h":{"a":0,"k":0},"o":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":2.4,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":1,"s":{"a":1,"k":[{"t":0,"s":[0,-175],"i":{"x":0,"y":0},"o":{"x":1,"y":1}},{"t":2.4,"s":[0,-175],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}}]},{"ddd":0,"ind":3,"ty":4,"nm":"\bright-sparkle01","hd":false,"sr":1,"ks":{"a":{"a":1,"k":[{"t":0,"s":[14,14],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":16.8,"s":[12,12],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":33.6,"s":[18,18],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"o":{"a":0,"k":100},"p":{"a":1,"k":[{"t":0,"s":[377,175],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[0,0],"to":[0,0]},{"t":16.8,"s":[367,175],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[-87.60387811634342,14.473684210526315],"to":[0,0]},{"t":33.6,"s":[501.659,51.939],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":16.8,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[20],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":1,"ip":0,"op":61,"st":0,"bm":0,"shapes":[{"ty":"rc","hd":false,"nm":"\bright-sparkle01","d":1,"p":{"a":1,"k":[{"t":0,"s":[14,14],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":16.8,"s":[12,12],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":33.6,"s":[18,18],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":4},"s":{"a":1,"k":[{"t":0,"s":[28,28],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":16.8,"s":[24,24],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":33.6,"s":[36,36],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"fl","hd":false,"bm":0,"c":{"a":1,"k":[{"t":0,"s":[1,0.976,0.624],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[1,0.965,0.447],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":1,"o":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"tm","hd":false,"bm":0,"e":{"a":0,"k":100},"o":{"a":0,"k":0},"s":{"a":0,"k":0},"m":1}]},{"ddd":0,"ind":4,"ty":4,"nm":"\bright-sparkle02","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":1,"k":[{"t":0,"s":[377,175],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25},"ti":[0,0],"to":[0,0]},{"t":18.3,"s":[369.163,222.895],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[0,0],"to":[0,0]},{"t":20.4,"s":[349,193],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[-95.45344920189495,-23.472877095026718],"to":[0,0]},{"t":35.7,"s":[507.916,151.624],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":20.4,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":35.7,"s":[-80],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":61,"st":0,"bm":0,"shapes":[{"ty":"sh","hd":false,"nm":"\bright-sparkle02","d":1,"ks":{"a":1,"k":[{"t":0,"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[14,-14],[14,14],[-14,14],[-14,-14]]}],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":20.4,"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[10,-10],[10,10],[-10,10],[-10,-10]]}],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":35.7,"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[15.001,-15.001],[15.001,15.001],[-15.001,15.001],[-15.001,-15.001]]}],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"rd","hd":false,"r":{"a":0,"k":4}},{"ty":"fl","hd":false,"bm":0,"c":{"a":1,"k":[{"t":0,"s":[1,0.976,0.624],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":35.7,"s":[0.78,0.973,0.471],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":1,"o":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":35.7,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"tm","hd":false,"bm":0,"e":{"a":0,"k":100},"o":{"a":0,"k":0},"s":{"a":0,"k":0},"m":1}]},{"ddd":0,"ind":5,"ty":4,"nm":"\bright-sparkle03","hd":false,"sr":1,"ks":{"a":{"a":1,"k":[{"t":0,"s":[14,14],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":17.1,"s":[12,12],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":34.5,"s":[14,14],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"o":{"a":0,"k":100},"p":{"a":1,"k":[{"t":0,"s":[377,175],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[0,0],"to":[0,0]},{"t":17.1,"s":[327,145],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25},"ti":[0,0],"to":[0,0]},{"t":18.3,"s":[346.189,155.045],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[-87.60387811634342,14.473684210526315],"to":[0,0]},{"t":34.5,"s":[430.855,78.262],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":17.1,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":34.5,"s":[80],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":61,"st":0,"bm":0,"shapes":[{"ty":"rc","hd":false,"nm":"\bright-sparkle03","d":1,"p":{"a":1,"k":[{"t":0,"s":[14,14],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":17.1,"s":[12,12],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":34.5,"s":[14,14],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":4},"s":{"a":1,"k":[{"t":0,"s":[28,28],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":17.1,"s":[24,24],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":34.5,"s":[28,28],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"fl","hd":false,"bm":0,"c":{"a":1,"k":[{"t":0,"s":[1,0.976,0.624],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":34.5,"s":[0.518,0.898,0.325],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":1,"o":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":34.5,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"tm","hd":false,"bm":0,"e":{"a":0,"k":100},"o":{"a":0,"k":0},"s":{"a":0,"k":0},"m":1}]},{"ddd":0,"ind":6,"ty":4,"nm":"left-sparkle03","hd":false,"sr":1,"ks":{"a":{"a":1,"k":[{"t":0,"s":[14,14],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":20.1,"s":[12,12],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":35.4,"s":[17,17],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"o":{"a":0,"k":100},"p":{"a":1,"k":[{"t":0,"s":[176,175],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25},"ti":[0,0],"to":[0,0]},{"t":18.3,"s":[207.948,145.262],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[0,0],"to":[0,0]},{"t":20.1,"s":[209.128,132.293],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[73.64911620066118,0.4544175747782191],"to":[0,0]},{"t":35.4,"s":[107.591,54.384],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":20.1,"s":[50],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":35.4,"s":[-50],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":61,"st":0,"bm":0,"shapes":[{"ty":"rc","hd":false,"nm":"left-sparkle03","d":1,"p":{"a":1,"k":[{"t":0,"s":[14,14],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":20.1,"s":[12,12],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":35.4,"s":[17,17],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":4},"s":{"a":1,"k":[{"t":0,"s":[28,28],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":20.1,"s":[24,24],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":35.4,"s":[34,34],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"fl","hd":false,"bm":0,"c":{"a":1,"k":[{"t":0,"s":[1,0.976,0.624],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":35.4,"s":[1,0.98,0.373],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":1,"o":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":35.4,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"tm","hd":false,"bm":0,"e":{"a":0,"k":100},"o":{"a":0,"k":0},"s":{"a":0,"k":0},"m":1}]},{"ddd":0,"ind":7,"ty":4,"nm":"left-sparkle01","hd":false,"sr":1,"ks":{"a":{"a":1,"k":[{"t":0,"s":[14,14],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":18.3,"s":[15,15],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":33.6,"s":[19,19],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"o":{"a":0,"k":100},"p":{"a":1,"k":[{"t":0,"s":[176,175],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[0,0],"to":[0,0]},{"t":18.3,"s":[164,172],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[88.49445983379508,2.2659279778393397],"to":[0,0]},{"t":33.6,"s":[26.047,100.924],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":18.3,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[20],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":1,"ip":0,"op":61,"st":0,"bm":0,"shapes":[{"ty":"rc","hd":false,"nm":"left-sparkle01","d":1,"p":{"a":1,"k":[{"t":0,"s":[14,14],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":18.3,"s":[15,15],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":33.6,"s":[19,19],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":4},"s":{"a":1,"k":[{"t":0,"s":[28,28],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":18.3,"s":[30,30],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":33.6,"s":[38,38],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"fl","hd":false,"bm":0,"c":{"a":1,"k":[{"t":0,"s":[1,0.976,0.624],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[0.78,0.973,0.471],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":1,"o":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"tm","hd":false,"bm":0,"e":{"a":0,"k":100},"o":{"a":0,"k":0},"s":{"a":0,"k":0},"m":1}]},{"ddd":0,"ind":8,"ty":4,"nm":"left-sparkle02","hd":false,"sr":1,"ks":{"a":{"a":1,"k":[{"t":0,"s":[14,14],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":21.9,"s":[10,10],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[14,14],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"o":{"a":0,"k":100},"p":{"a":1,"k":[{"t":0,"s":[176,205],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25},"ti":[0,0],"to":[0,0]},{"t":18.3,"s":[159.565,207.428],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[0,0],"to":[0,0]},{"t":21.9,"s":[139,177],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23},"ti":[45.08307057823214,-10.10003328760294],"to":[0,0]},{"t":33.6,"s":[67.063,156.078],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":1,"k":[{"t":0,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":21.9,"s":[0],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[-20],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":1,"ip":0,"op":61,"st":0,"bm":0,"shapes":[{"ty":"rc","hd":false,"nm":"left-sparkle02","d":1,"p":{"a":1,"k":[{"t":0,"s":[14,14],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":21.9,"s":[10,10],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[14,14],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":4},"s":{"a":1,"k":[{"t":0,"s":[28,28],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":21.9,"s":[20,20],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[28,28],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"fl","hd":false,"bm":0,"c":{"a":1,"k":[{"t":0,"s":[1,0.976,0.624],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[0.518,0.898,0.325],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":1,"o":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.3,"y":1},"o":{"x":0.12,"y":0.23}},{"t":33.6,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]}},{"ty":"tm","hd":false,"bm":0,"e":{"a":0,"k":100},"o":{"a":0,"k":0},"s":{"a":0,"k":0},"m":1}]},{"ddd":0,"ind":9,"ty":4,"nm":"Screen","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[275,275]},"o":{"a":0,"k":100},"p":{"a":0,"k":[275,275]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":61,"st":0,"bm":0,"shapes":[{"ty":"gr","hd":false,"nm":"Screen Group","bm":0,"it":[{"ty":"rc","hd":false,"nm":"Screen","d":1,"p":{"a":0,"k":[275,275]},"r":{"a":0,"k":0},"s":{"a":0,"k":[550,550]}},{"ty":"fl","hd":false,"bm":0,"c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","nm":"Transform","a":{"a":0,"k":[0,0]},"o":{"a":0,"k":100},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}}],"np":0}]}],"meta":{"g":"@phase-software/lottie-exporter 0.7.0"},"nm":"","op":60,"v":"5.6.0","w":550} \ No newline at end of file