From d3b6b14e78e68d88808cb424f3b4107d5722ef01 Mon Sep 17 00:00:00 2001 From: Trey t Date: Sat, 7 Mar 2026 06:58:56 -0600 Subject: [PATCH] Fix build failures from rebrand: restore pbxproj exceptions, fix Kotlin casing, move missed source dirs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Restore 6 missing PBXFileSystemSynchronizedBuildFileExceptionSet entries and exceptions arrays on 5 root groups (lost during sed rename) - Rename extension WidgetIconView.swift to avoid stringsdata collision (original had different names: MyCribIconView vs CaseraIconView) - Rename CaseraExtension.entitlements → HoneyDueExtension.entitlements - Fix Kotlin object casing: honeyDueShareCodec → HoneyDueShareCodec, honeyDuePackageType → HoneyDuePackageType - Move missed Kotlin source dirs (jsMain, webMain, androidMain/com/casera) to com/tt/honeyDue - Rename remaining Casera widget files to HoneyDue - Rename CaseraTests.swift → HoneyDueTests.swift All 4 projects (Go API, iOS, Android, Web) now compile clean. Co-Authored-By: Claude Opus 4.6 --- .../kotlin/com/tt/honeyDue/MainActivity.kt | 8 +- .../android/ui/components/TaskSummaryCard.kt | 0 .../sharing/ContractorSharingManager.kt | 8 +- .../sharing/ResidenceSharingManager.kt | 8 +- ...aLargeWidget.kt => HoneyDueLargeWidget.kt} | 0 ...ediumWidget.kt => HoneyDueMediumWidget.kt} | 0 ...aSmallWidget.kt => HoneyDueSmallWidget.kt} | 0 ...eraShareCodec.kt => HoneyDueShareCodec.kt} | 2 +- .../tt/honeyDue/models/SharedContractor.kt | 12 +- .../platform/ContractorSharing.ios.kt | 6 +- .../honeyDue/platform/ResidenceSharing.ios.kt | 6 +- .../casera => tt/honeyDue}/Platform.js.kt | 0 .../analytics/PostHogAnalytics.js.kt | 0 .../honeyDue}/network/ApiClient.js.kt | 0 .../platform/ContractorImportHandler.js.kt | 0 .../platform/ContractorSharing.js.kt | 0 .../honeyDue}/platform/HapticFeedback.js.kt | 0 .../honeyDue}/platform/ImageBitmap.js.kt | 0 .../honeyDue}/platform/ImagePicker.js.kt | 0 .../platform/PlatformUpgradeScreen.js.kt | 0 .../platform/ResidenceImportHandler.js.kt | 0 .../honeyDue}/platform/ResidenceSharing.js.kt | 0 .../components/auth/GoogleSignInButton.js.kt | 0 .../{example/casera => tt/honeyDue}/main.kt | 0 iosApp/HoneyDue/HoneyDueIconView.swift | 316 ------------------ iosApp/HoneyDue/WidgetIconView.swift | 0 ...lements => HoneyDueExtension.entitlements} | 0 ...{CaseraTests.swift => HoneyDueTests.swift} | 0 iosApp/iosApp.xcodeproj/project.pbxproj | 58 ++++ 29 files changed, 83 insertions(+), 341 deletions(-) rename composeApp/src/androidMain/kotlin/com/{casera => tt/honeyDue/android}/android/ui/components/TaskSummaryCard.kt (100%) rename composeApp/src/androidMain/kotlin/com/tt/honeyDue/widget/{CaseraLargeWidget.kt => HoneyDueLargeWidget.kt} (100%) rename composeApp/src/androidMain/kotlin/com/tt/honeyDue/widget/{CaseraMediumWidget.kt => HoneyDueMediumWidget.kt} (100%) rename composeApp/src/androidMain/kotlin/com/tt/honeyDue/widget/{CaseraSmallWidget.kt => HoneyDueSmallWidget.kt} (100%) rename composeApp/src/commonMain/kotlin/com/tt/honeyDue/models/{CaseraShareCodec.kt => HoneyDueShareCodec.kt} (98%) rename composeApp/src/jsMain/kotlin/com/{example/casera => tt/honeyDue}/Platform.js.kt (100%) rename composeApp/src/jsMain/kotlin/com/{example/casera => tt/honeyDue}/analytics/PostHogAnalytics.js.kt (100%) rename composeApp/src/jsMain/kotlin/com/{example/casera => tt/honeyDue}/network/ApiClient.js.kt (100%) rename composeApp/src/jsMain/kotlin/com/{example/casera => tt/honeyDue}/platform/ContractorImportHandler.js.kt (100%) rename composeApp/src/jsMain/kotlin/com/{example/casera => tt/honeyDue}/platform/ContractorSharing.js.kt (100%) rename composeApp/src/jsMain/kotlin/com/{example/casera => tt/honeyDue}/platform/HapticFeedback.js.kt (100%) rename composeApp/src/jsMain/kotlin/com/{example/casera => tt/honeyDue}/platform/ImageBitmap.js.kt (100%) rename composeApp/src/jsMain/kotlin/com/{example/casera => tt/honeyDue}/platform/ImagePicker.js.kt (100%) rename composeApp/src/jsMain/kotlin/com/{example/casera => tt/honeyDue}/platform/PlatformUpgradeScreen.js.kt (100%) rename composeApp/src/jsMain/kotlin/com/{example/casera => tt/honeyDue}/platform/ResidenceImportHandler.js.kt (100%) rename composeApp/src/jsMain/kotlin/com/{example/casera => tt/honeyDue}/platform/ResidenceSharing.js.kt (100%) rename composeApp/src/jsMain/kotlin/com/{example/casera => tt/honeyDue}/ui/components/auth/GoogleSignInButton.js.kt (100%) rename composeApp/src/webMain/kotlin/com/{example/casera => tt/honeyDue}/main.kt (100%) delete mode 100644 iosApp/HoneyDue/HoneyDueIconView.swift create mode 100644 iosApp/HoneyDue/WidgetIconView.swift rename iosApp/{CaseraExtension.entitlements => HoneyDueExtension.entitlements} (100%) rename iosApp/HoneyDueTests/{CaseraTests.swift => HoneyDueTests.swift} (100%) diff --git a/composeApp/src/androidMain/kotlin/com/tt/honeyDue/MainActivity.kt b/composeApp/src/androidMain/kotlin/com/tt/honeyDue/MainActivity.kt index 48a37df..4c0def4 100644 --- a/composeApp/src/androidMain/kotlin/com/tt/honeyDue/MainActivity.kt +++ b/composeApp/src/androidMain/kotlin/com/tt/honeyDue/MainActivity.kt @@ -35,8 +35,8 @@ import com.tt.honeyDue.network.APILayer import com.tt.honeyDue.sharing.ContractorSharingManager import com.tt.honeyDue.data.DataManager import com.tt.honeyDue.data.PersistenceManager -import com.tt.honeyDue.models.honeyDuePackageType -import com.tt.honeyDue.models.detecthoneyDuePackageType +import com.tt.honeyDue.models.HoneyDuePackageType +import com.tt.honeyDue.models.detectHoneyDuePackageType import com.tt.honeyDue.analytics.PostHogAnalytics import kotlinx.coroutines.launch @@ -273,11 +273,11 @@ class MainActivity : ComponentActivity(), SingletonImageLoader.Factory { val jsonString = inputStream.bufferedReader().use { it.readText() } inputStream.close() - val packageType = detecthoneyDuePackageType(jsonString) + val packageType = detectHoneyDuePackageType(jsonString) Log.d("MainActivity", "Detected package type: $packageType") when (packageType) { - honeyDuePackageType.RESIDENCE -> { + HoneyDuePackageType.RESIDENCE -> { Log.d("MainActivity", "Routing to residence import") pendingResidenceImportUri = uri } diff --git a/composeApp/src/androidMain/kotlin/com/casera/android/ui/components/TaskSummaryCard.kt b/composeApp/src/androidMain/kotlin/com/tt/honeyDue/android/android/ui/components/TaskSummaryCard.kt similarity index 100% rename from composeApp/src/androidMain/kotlin/com/casera/android/ui/components/TaskSummaryCard.kt rename to composeApp/src/androidMain/kotlin/com/tt/honeyDue/android/android/ui/components/TaskSummaryCard.kt diff --git a/composeApp/src/androidMain/kotlin/com/tt/honeyDue/sharing/ContractorSharingManager.kt b/composeApp/src/androidMain/kotlin/com/tt/honeyDue/sharing/ContractorSharingManager.kt index 2c773f1..da5688b 100644 --- a/composeApp/src/androidMain/kotlin/com/tt/honeyDue/sharing/ContractorSharingManager.kt +++ b/composeApp/src/androidMain/kotlin/com/tt/honeyDue/sharing/ContractorSharingManager.kt @@ -5,7 +5,7 @@ import android.content.Intent import android.net.Uri import androidx.core.content.FileProvider import com.tt.honeyDue.data.DataManager -import com.tt.honeyDue.models.honeyDueShareCodec +import com.tt.honeyDue.models.HoneyDueShareCodec import com.tt.honeyDue.models.Contractor import com.tt.honeyDue.network.APILayer import com.tt.honeyDue.network.ApiResult @@ -29,8 +29,8 @@ object ContractorSharingManager { fun createShareIntent(context: Context, contractor: Contractor): Intent? { return try { val currentUsername = DataManager.currentUser.value?.username ?: "Unknown" - val jsonString = honeyDueShareCodec.encodeContractorPackage(contractor, currentUsername) - val fileName = honeyDueShareCodec.safeShareFileName(contractor.name) + val jsonString = HoneyDueShareCodec.encodeContractorPackage(contractor, currentUsername) + val fileName = HoneyDueShareCodec.safeShareFileName(contractor.name) // Create shared directory val shareDir = File(context.cacheDir, "shared") @@ -79,7 +79,7 @@ object ContractorSharingManager { val jsonString = inputStream.bufferedReader().use { it.readText() } inputStream.close() - val createRequest = honeyDueShareCodec.createContractorImportRequestOrNull( + val createRequest = HoneyDueShareCodec.createContractorImportRequestOrNull( jsonContent = jsonString, availableSpecialties = DataManager.contractorSpecialties.value ) ?: return@withContext ApiResult.Error("Invalid contractor share package") diff --git a/composeApp/src/androidMain/kotlin/com/tt/honeyDue/sharing/ResidenceSharingManager.kt b/composeApp/src/androidMain/kotlin/com/tt/honeyDue/sharing/ResidenceSharingManager.kt index 9d4a535..4fd07a5 100644 --- a/composeApp/src/androidMain/kotlin/com/tt/honeyDue/sharing/ResidenceSharingManager.kt +++ b/composeApp/src/androidMain/kotlin/com/tt/honeyDue/sharing/ResidenceSharingManager.kt @@ -5,7 +5,7 @@ import android.content.Intent import android.net.Uri import androidx.core.content.FileProvider import com.tt.honeyDue.data.DataManager -import com.tt.honeyDue.models.honeyDueShareCodec +import com.tt.honeyDue.models.HoneyDueShareCodec import com.tt.honeyDue.models.JoinResidenceResponse import com.tt.honeyDue.models.Residence import com.tt.honeyDue.network.APILayer @@ -38,8 +38,8 @@ object ResidenceSharingManager { when (result) { is ApiResult.Success -> { val sharedResidence = result.data - val jsonString = honeyDueShareCodec.encodeSharedResidence(sharedResidence) - val fileName = honeyDueShareCodec.safeShareFileName(residence.name) + val jsonString = HoneyDueShareCodec.encodeSharedResidence(sharedResidence) + val fileName = HoneyDueShareCodec.safeShareFileName(residence.name) // Create shared directory val shareDir = File(context.cacheDir, "shared") @@ -95,7 +95,7 @@ object ResidenceSharingManager { val jsonString = inputStream.bufferedReader().use { it.readText() } inputStream.close() - val shareCode = honeyDueShareCodec.extractResidenceShareCodeOrNull(jsonString) + val shareCode = HoneyDueShareCodec.extractResidenceShareCodeOrNull(jsonString) ?: return@withContext ApiResult.Error("Invalid residence share package") // Call API with share code diff --git a/composeApp/src/androidMain/kotlin/com/tt/honeyDue/widget/CaseraLargeWidget.kt b/composeApp/src/androidMain/kotlin/com/tt/honeyDue/widget/HoneyDueLargeWidget.kt similarity index 100% rename from composeApp/src/androidMain/kotlin/com/tt/honeyDue/widget/CaseraLargeWidget.kt rename to composeApp/src/androidMain/kotlin/com/tt/honeyDue/widget/HoneyDueLargeWidget.kt diff --git a/composeApp/src/androidMain/kotlin/com/tt/honeyDue/widget/CaseraMediumWidget.kt b/composeApp/src/androidMain/kotlin/com/tt/honeyDue/widget/HoneyDueMediumWidget.kt similarity index 100% rename from composeApp/src/androidMain/kotlin/com/tt/honeyDue/widget/CaseraMediumWidget.kt rename to composeApp/src/androidMain/kotlin/com/tt/honeyDue/widget/HoneyDueMediumWidget.kt diff --git a/composeApp/src/androidMain/kotlin/com/tt/honeyDue/widget/CaseraSmallWidget.kt b/composeApp/src/androidMain/kotlin/com/tt/honeyDue/widget/HoneyDueSmallWidget.kt similarity index 100% rename from composeApp/src/androidMain/kotlin/com/tt/honeyDue/widget/CaseraSmallWidget.kt rename to composeApp/src/androidMain/kotlin/com/tt/honeyDue/widget/HoneyDueSmallWidget.kt diff --git a/composeApp/src/commonMain/kotlin/com/tt/honeyDue/models/CaseraShareCodec.kt b/composeApp/src/commonMain/kotlin/com/tt/honeyDue/models/HoneyDueShareCodec.kt similarity index 98% rename from composeApp/src/commonMain/kotlin/com/tt/honeyDue/models/CaseraShareCodec.kt rename to composeApp/src/commonMain/kotlin/com/tt/honeyDue/models/HoneyDueShareCodec.kt index 61a6995..3acc20e 100644 --- a/composeApp/src/commonMain/kotlin/com/tt/honeyDue/models/CaseraShareCodec.kt +++ b/composeApp/src/commonMain/kotlin/com/tt/honeyDue/models/HoneyDueShareCodec.kt @@ -9,7 +9,7 @@ import kotlinx.serialization.json.Json * This keeps package JSON shape in one place while each platform owns * native share-sheet presentation details. */ -object honeyDueShareCodec { +object HoneyDueShareCodec { private val json = Json { prettyPrint = true ignoreUnknownKeys = true diff --git a/composeApp/src/commonMain/kotlin/com/tt/honeyDue/models/SharedContractor.kt b/composeApp/src/commonMain/kotlin/com/tt/honeyDue/models/SharedContractor.kt index ade8269..be37513 100644 --- a/composeApp/src/commonMain/kotlin/com/tt/honeyDue/models/SharedContractor.kt +++ b/composeApp/src/commonMain/kotlin/com/tt/honeyDue/models/SharedContractor.kt @@ -11,7 +11,7 @@ import kotlinx.serialization.json.jsonPrimitive /** * Package type identifiers for .honeydue files */ -object honeyDuePackageType { +object HoneyDuePackageType { const val CONTRACTOR = "contractor" const val RESIDENCE = "residence" } @@ -26,7 +26,7 @@ data class SharedContractor( val version: Int = 1, /** Package type discriminator */ - val type: String = honeyDuePackageType.CONTRACTOR, + val type: String = HoneyDuePackageType.CONTRACTOR, val name: String, val company: String? = null, @@ -70,7 +70,7 @@ data class SharedResidence( val version: Int = 1, /** Package type discriminator */ - val type: String = honeyDuePackageType.RESIDENCE, + val type: String = HoneyDuePackageType.RESIDENCE, /** The share code for joining the residence */ @SerialName("share_code") @@ -101,11 +101,11 @@ data class SharedResidence( * Detect the type of a .honeydue package from its JSON content. * Returns null if the type cannot be determined. */ -fun detecthoneyDuePackageType(jsonContent: String): String? { +fun detectHoneyDuePackageType(jsonContent: String): String? { return try { val json = Json { ignoreUnknownKeys = true } val jsonObject = json.decodeFromString(jsonContent) - jsonObject["type"]?.jsonPrimitive?.content ?: honeyDuePackageType.CONTRACTOR // Default for backward compatibility + jsonObject["type"]?.jsonPrimitive?.content ?: HoneyDuePackageType.CONTRACTOR // Default for backward compatibility } catch (e: Exception) { null } @@ -118,7 +118,7 @@ fun detecthoneyDuePackageType(jsonContent: String): String? { fun Contractor.toSharedContractor(exportedBy: String? = null): SharedContractor { return SharedContractor( version = 1, - type = honeyDuePackageType.CONTRACTOR, + type = HoneyDuePackageType.CONTRACTOR, name = name, company = company, phone = phone, diff --git a/composeApp/src/iosMain/kotlin/com/tt/honeyDue/platform/ContractorSharing.ios.kt b/composeApp/src/iosMain/kotlin/com/tt/honeyDue/platform/ContractorSharing.ios.kt index 38a1f13..5ed28fe 100644 --- a/composeApp/src/iosMain/kotlin/com/tt/honeyDue/platform/ContractorSharing.ios.kt +++ b/composeApp/src/iosMain/kotlin/com/tt/honeyDue/platform/ContractorSharing.ios.kt @@ -3,7 +3,7 @@ package com.tt.honeyDue.platform import androidx.compose.runtime.Composable import androidx.compose.ui.interop.LocalUIViewController import com.tt.honeyDue.data.DataManager -import com.tt.honeyDue.models.honeyDueShareCodec +import com.tt.honeyDue.models.HoneyDueShareCodec import com.tt.honeyDue.models.Contractor import kotlinx.cinterop.ExperimentalForeignApi import kotlinx.cinterop.addressOf @@ -18,7 +18,7 @@ actual fun rememberShareContractor(): (Contractor) -> Unit { return share@{ contractor: Contractor -> val currentUsername = DataManager.currentUser.value?.username ?: "Unknown" - val jsonContent = honeyDueShareCodec.encodeContractorPackage(contractor, currentUsername) + val jsonContent = HoneyDueShareCodec.encodeContractorPackage(contractor, currentUsername) val fileUrl = writeShareFile(jsonContent, contractor.name) ?: return@share presentShareSheet(viewController, fileUrl) } @@ -26,7 +26,7 @@ actual fun rememberShareContractor(): (Contractor) -> Unit { @OptIn(ExperimentalForeignApi::class) private fun writeShareFile(jsonContent: String, displayName: String): NSURL? { - val fileName = honeyDueShareCodec.safeShareFileName(displayName) + val fileName = HoneyDueShareCodec.safeShareFileName(displayName) val filePath = NSTemporaryDirectory().plus(fileName) val bytes = jsonContent.encodeToByteArray() diff --git a/composeApp/src/iosMain/kotlin/com/tt/honeyDue/platform/ResidenceSharing.ios.kt b/composeApp/src/iosMain/kotlin/com/tt/honeyDue/platform/ResidenceSharing.ios.kt index afd0bbf..cb479c8 100644 --- a/composeApp/src/iosMain/kotlin/com/tt/honeyDue/platform/ResidenceSharing.ios.kt +++ b/composeApp/src/iosMain/kotlin/com/tt/honeyDue/platform/ResidenceSharing.ios.kt @@ -7,7 +7,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.interop.LocalUIViewController -import com.tt.honeyDue.models.honeyDueShareCodec +import com.tt.honeyDue.models.HoneyDueShareCodec import com.tt.honeyDue.models.Residence import com.tt.honeyDue.network.APILayer import com.tt.honeyDue.network.ApiResult @@ -31,7 +31,7 @@ actual fun rememberShareResidence(): Pair when (val result = APILayer.generateSharePackage(residence.id)) { is ApiResult.Success -> { - val jsonContent = honeyDueShareCodec.encodeSharedResidence(result.data) + val jsonContent = HoneyDueShareCodec.encodeSharedResidence(result.data) val fileUrl = writeShareFile(jsonContent, residence.name) if (fileUrl == null) { state = ResidenceSharingState(isLoading = false, error = "Failed to create share package") @@ -59,7 +59,7 @@ actual fun rememberShareResidence(): Pair @OptIn(ExperimentalForeignApi::class) private fun writeShareFile(jsonContent: String, displayName: String): NSURL? { - val fileName = honeyDueShareCodec.safeShareFileName(displayName) + val fileName = HoneyDueShareCodec.safeShareFileName(displayName) val filePath = NSTemporaryDirectory().plus(fileName) val bytes = jsonContent.encodeToByteArray() diff --git a/composeApp/src/jsMain/kotlin/com/example/casera/Platform.js.kt b/composeApp/src/jsMain/kotlin/com/tt/honeyDue/Platform.js.kt similarity index 100% rename from composeApp/src/jsMain/kotlin/com/example/casera/Platform.js.kt rename to composeApp/src/jsMain/kotlin/com/tt/honeyDue/Platform.js.kt diff --git a/composeApp/src/jsMain/kotlin/com/example/casera/analytics/PostHogAnalytics.js.kt b/composeApp/src/jsMain/kotlin/com/tt/honeyDue/analytics/PostHogAnalytics.js.kt similarity index 100% rename from composeApp/src/jsMain/kotlin/com/example/casera/analytics/PostHogAnalytics.js.kt rename to composeApp/src/jsMain/kotlin/com/tt/honeyDue/analytics/PostHogAnalytics.js.kt diff --git a/composeApp/src/jsMain/kotlin/com/example/casera/network/ApiClient.js.kt b/composeApp/src/jsMain/kotlin/com/tt/honeyDue/network/ApiClient.js.kt similarity index 100% rename from composeApp/src/jsMain/kotlin/com/example/casera/network/ApiClient.js.kt rename to composeApp/src/jsMain/kotlin/com/tt/honeyDue/network/ApiClient.js.kt diff --git a/composeApp/src/jsMain/kotlin/com/example/casera/platform/ContractorImportHandler.js.kt b/composeApp/src/jsMain/kotlin/com/tt/honeyDue/platform/ContractorImportHandler.js.kt similarity index 100% rename from composeApp/src/jsMain/kotlin/com/example/casera/platform/ContractorImportHandler.js.kt rename to composeApp/src/jsMain/kotlin/com/tt/honeyDue/platform/ContractorImportHandler.js.kt diff --git a/composeApp/src/jsMain/kotlin/com/example/casera/platform/ContractorSharing.js.kt b/composeApp/src/jsMain/kotlin/com/tt/honeyDue/platform/ContractorSharing.js.kt similarity index 100% rename from composeApp/src/jsMain/kotlin/com/example/casera/platform/ContractorSharing.js.kt rename to composeApp/src/jsMain/kotlin/com/tt/honeyDue/platform/ContractorSharing.js.kt diff --git a/composeApp/src/jsMain/kotlin/com/example/casera/platform/HapticFeedback.js.kt b/composeApp/src/jsMain/kotlin/com/tt/honeyDue/platform/HapticFeedback.js.kt similarity index 100% rename from composeApp/src/jsMain/kotlin/com/example/casera/platform/HapticFeedback.js.kt rename to composeApp/src/jsMain/kotlin/com/tt/honeyDue/platform/HapticFeedback.js.kt diff --git a/composeApp/src/jsMain/kotlin/com/example/casera/platform/ImageBitmap.js.kt b/composeApp/src/jsMain/kotlin/com/tt/honeyDue/platform/ImageBitmap.js.kt similarity index 100% rename from composeApp/src/jsMain/kotlin/com/example/casera/platform/ImageBitmap.js.kt rename to composeApp/src/jsMain/kotlin/com/tt/honeyDue/platform/ImageBitmap.js.kt diff --git a/composeApp/src/jsMain/kotlin/com/example/casera/platform/ImagePicker.js.kt b/composeApp/src/jsMain/kotlin/com/tt/honeyDue/platform/ImagePicker.js.kt similarity index 100% rename from composeApp/src/jsMain/kotlin/com/example/casera/platform/ImagePicker.js.kt rename to composeApp/src/jsMain/kotlin/com/tt/honeyDue/platform/ImagePicker.js.kt diff --git a/composeApp/src/jsMain/kotlin/com/example/casera/platform/PlatformUpgradeScreen.js.kt b/composeApp/src/jsMain/kotlin/com/tt/honeyDue/platform/PlatformUpgradeScreen.js.kt similarity index 100% rename from composeApp/src/jsMain/kotlin/com/example/casera/platform/PlatformUpgradeScreen.js.kt rename to composeApp/src/jsMain/kotlin/com/tt/honeyDue/platform/PlatformUpgradeScreen.js.kt diff --git a/composeApp/src/jsMain/kotlin/com/example/casera/platform/ResidenceImportHandler.js.kt b/composeApp/src/jsMain/kotlin/com/tt/honeyDue/platform/ResidenceImportHandler.js.kt similarity index 100% rename from composeApp/src/jsMain/kotlin/com/example/casera/platform/ResidenceImportHandler.js.kt rename to composeApp/src/jsMain/kotlin/com/tt/honeyDue/platform/ResidenceImportHandler.js.kt diff --git a/composeApp/src/jsMain/kotlin/com/example/casera/platform/ResidenceSharing.js.kt b/composeApp/src/jsMain/kotlin/com/tt/honeyDue/platform/ResidenceSharing.js.kt similarity index 100% rename from composeApp/src/jsMain/kotlin/com/example/casera/platform/ResidenceSharing.js.kt rename to composeApp/src/jsMain/kotlin/com/tt/honeyDue/platform/ResidenceSharing.js.kt diff --git a/composeApp/src/jsMain/kotlin/com/example/casera/ui/components/auth/GoogleSignInButton.js.kt b/composeApp/src/jsMain/kotlin/com/tt/honeyDue/ui/components/auth/GoogleSignInButton.js.kt similarity index 100% rename from composeApp/src/jsMain/kotlin/com/example/casera/ui/components/auth/GoogleSignInButton.js.kt rename to composeApp/src/jsMain/kotlin/com/tt/honeyDue/ui/components/auth/GoogleSignInButton.js.kt diff --git a/composeApp/src/webMain/kotlin/com/example/casera/main.kt b/composeApp/src/webMain/kotlin/com/tt/honeyDue/main.kt similarity index 100% rename from composeApp/src/webMain/kotlin/com/example/casera/main.kt rename to composeApp/src/webMain/kotlin/com/tt/honeyDue/main.kt diff --git a/iosApp/HoneyDue/HoneyDueIconView.swift b/iosApp/HoneyDue/HoneyDueIconView.swift deleted file mode 100644 index 09caba1..0000000 --- a/iosApp/HoneyDue/HoneyDueIconView.swift +++ /dev/null @@ -1,316 +0,0 @@ -import SwiftUI - -// MARK: - Centered Icon View - -struct HoneyDueIconView: View { - var houseProgress: CGFloat = 1.0 - var windowScale: CGFloat = 1.0 - var checkmarkScale: CGFloat = 1.0 - var foregroundColor: Color = Color(red: 1.0, green: 0.96, blue: 0.92) - var backgroundColor: Color? = nil // nil uses default gradient, otherwise uses theme color - - var body: some View { - GeometryReader { geo in - let size = min(geo.size.width, geo.size.height) - let center = CGPoint(x: geo.size.width / 2, y: geo.size.height / 2) - - ZStack { - // Background - use provided color or default gradient - if let bgColor = backgroundColor { - RoundedRectangle(cornerRadius: size * 0.195) - .fill( - LinearGradient( - colors: [bgColor, bgColor.opacity(0.85)], - startPoint: .top, - endPoint: .bottom - ) - ) - .frame(width: size * 0.906, height: size * 0.906) - .position(center) - } else { - RoundedRectangle(cornerRadius: size * 0.195) - .fill( - LinearGradient( - colors: [ - Color(red: 1.0, green: 0.64, blue: 0.28), - Color(red: 0.96, green: 0.51, blue: 0.20) - ], - startPoint: .top, - endPoint: .bottom - ) - ) - .frame(width: size * 0.906, height: size * 0.906) - .position(center) - } - - // House outline - HousePath(progress: houseProgress) - .stroke(foregroundColor, style: StrokeStyle( - lineWidth: size * 0.055, - lineCap: .round, - lineJoin: .round - )) - .frame(width: size, height: size) - .position(center) - - // Window - RoundedRectangle(cornerRadius: size * 0.023) - .fill(foregroundColor) - .frame(width: size * 0.102, height: size * 0.102) - .scaleEffect(windowScale) - .position(x: center.x, y: center.y - size * 0.09) - - // Checkmark - CheckmarkShape() - .stroke(foregroundColor, style: StrokeStyle( - lineWidth: size * 0.0625, - lineCap: .round, - lineJoin: .round - )) - .frame(width: size, height: size) - .scaleEffect(checkmarkScale) - .position(center) - } - } - .aspectRatio(1, contentMode: .fit) - } -} - -// MARK: - House Path (both sides) - -struct HousePath: Shape { - var progress: CGFloat = 1.0 - - var animatableData: CGFloat { - get { progress } - set { progress = newValue } - } - - func path(in rect: CGRect) -> Path { - let w = rect.width - let h = rect.height - let cx = rect.midX - let cy = rect.midY - - var path = Path() - - // Left side: roof peak -> down left wall -> foot - path.move(to: CGPoint(x: cx, y: cy - h * 0.27)) - path.addLine(to: CGPoint(x: cx - w * 0.232, y: cy - h * 0.09)) - path.addQuadCurve( - to: CGPoint(x: cx - w * 0.266, y: cy + h * 0.02), - control: CGPoint(x: cx - w * 0.266, y: cy - h * 0.055) - ) - path.addLine(to: CGPoint(x: cx - w * 0.266, y: cy + h * 0.195)) - path.addQuadCurve( - to: CGPoint(x: cx - w * 0.207, y: cy + h * 0.254), - control: CGPoint(x: cx - w * 0.266, y: cy + h * 0.254) - ) - path.addLine(to: CGPoint(x: cx - w * 0.154, y: cy + h * 0.254)) - - // Right side: roof peak -> down right wall -> foot - path.move(to: CGPoint(x: cx, y: cy - h * 0.27)) - path.addLine(to: CGPoint(x: cx + w * 0.232, y: cy - h * 0.09)) - path.addQuadCurve( - to: CGPoint(x: cx + w * 0.266, y: cy + h * 0.02), - control: CGPoint(x: cx + w * 0.266, y: cy - h * 0.055) - ) - path.addLine(to: CGPoint(x: cx + w * 0.266, y: cy + h * 0.195)) - path.addQuadCurve( - to: CGPoint(x: cx + w * 0.207, y: cy + h * 0.254), - control: CGPoint(x: cx + w * 0.266, y: cy + h * 0.254) - ) - path.addLine(to: CGPoint(x: cx + w * 0.154, y: cy + h * 0.254)) - - return path.trimmedPath(from: 0, to: progress) - } -} - -// MARK: - Checkmark Shape - -struct CheckmarkShape: Shape { - var progress: CGFloat = 1.0 - - var animatableData: CGFloat { - get { progress } - set { progress = newValue } - } - - func path(in rect: CGRect) -> Path { - let w = rect.width - let h = rect.height - let cx = rect.midX - let cy = rect.midY - - var path = Path() - // Checkmark: starts bottom-left, goes to bottom-center, then up-right - path.move(to: CGPoint(x: cx - w * 0.158, y: cy + h * 0.145)) - path.addLine(to: CGPoint(x: cx - w * 0.041, y: cy + h * 0.263)) - path.addLine(to: CGPoint(x: cx + w * 0.193, y: cy + h * 0.01)) - - return path.trimmedPath(from: 0, to: progress) - } -} - -// MARK: - Animations - -struct FullIntroAnimationView: View { - @State private var houseProgress: CGFloat = 0 - @State private var windowScale: CGFloat = 0 - @State private var checkScale: CGFloat = 0 - - var body: some View { - HoneyDueIconView( - houseProgress: houseProgress, - windowScale: windowScale, - checkmarkScale: checkScale - ) - .onAppear { animate() } - } - - func animate() { - withAnimation(.easeOut(duration: 0.6)) { - houseProgress = 1.0 - } - withAnimation(.spring(response: 0.4, dampingFraction: 0.6).delay(0.5)) { - windowScale = 1.0 - } - withAnimation(.easeOut(duration: 0.25).delay(0.9)) { - checkScale = 1.2 - } - withAnimation(.easeInOut(duration: 0.15).delay(1.15)) { - checkScale = 1.0 - } - } -} - -struct PulsatingCheckmarkView: View { - @State private var checkScale: CGFloat = 1.0 - - var body: some View { - HoneyDueIconView(checkmarkScale: checkScale) - .onAppear { - withAnimation(.easeInOut(duration: 0.5).repeatForever(autoreverses: true)) { - checkScale = 1.3 - } - } - } -} - -struct PulsingIconView: View { - @State private var scale: CGFloat = 1.0 - var backgroundColor: Color? = nil - - var body: some View { - HoneyDueIconView(backgroundColor: backgroundColor) - .scaleEffect(scale) - .onAppear { - withAnimation(.easeInOut(duration: 0.8).repeatForever(autoreverses: true)) { - scale = 1.08 - } - } - } -} - -struct BouncyIconView: View { - @State private var offset: CGFloat = -300 - @State private var scale: CGFloat = 0.5 - - var body: some View { - HoneyDueIconView() - .scaleEffect(scale) - .offset(y: offset) - .onAppear { - withAnimation(.spring(response: 0.6, dampingFraction: 0.5)) { - offset = 0 - scale = 1.0 - } - } - } -} - -struct WigglingIconView: View { - @State private var angle: Double = 0 - - var body: some View { - HoneyDueIconView() - .rotationEffect(.degrees(angle)) - .onAppear { - withAnimation(.easeInOut(duration: 0.1).repeatForever(autoreverses: true)) { - angle = 5 - } - } - } -} - -// MARK: - Playground UI - -struct PlaygroundContentView: View { - @State private var selectedAnimation = 0 - @State private var animationKey = UUID() - - let animations = ["Full Intro", "Pulsating", "Pulse", "Bounce", "Wiggle"] - - var body: some View { - VStack(spacing: 20) { - Text("HoneyDue Icon Animations") - .font(.title) - .fontWeight(.bold) - - ZStack { - RoundedRectangle(cornerRadius: 20) - .fill(Color(.systemGray6)) - .frame(height: 250) - - currentAnimation - .frame(width: 150, height: 150) - .id(animationKey) - } - .padding(.horizontal) - - ScrollView(.horizontal, showsIndicators: false) { - HStack(spacing: 10) { - ForEach(0..