| | |
| | | require(preferences, "presentSettingsProPrompt(for: .premiumThemes)", "premium theme selection prompt is missing") |
| | | require(preferences, "proEntitlement.startThemePreview(for: theme)", "premium theme free preview is missing") |
| | | require(preferences, "proEntitlement.stopThemePreview()", "theme preview cleanup is missing") |
| | | require(pro, "func remainingSeconds(at date: Date = Date()) -> Int", "theme preview remaining-seconds helper is missing") |
| | | require(pro, "ceil(endsAt.timeIntervalSince(date))", "theme preview countdown must derive from endsAt") |
| | | require(preferences, "pro.theme.status.previewCountdown", "theme preview status countdown localization is missing") |
| | | require(preferences, "formatThemePreviewCountdown(seconds:", "theme preview countdown formatter is missing") |
| | | require(preferences, ".countdown(text: themePreviewCountdownText ?? \"00:00\")", "current preview theme card must show countdown") |
| | | require(preferences, ".onReceive(themePreviewCountdownTimer)", "theme preview countdown UI timer is missing") |
| | | require(preferences, ".font(.system(size: 10, weight: .semibold, design: .monospaced))", "theme preview card countdown must use monospaced digits") |
| | | |
| | | require(content, "@ObservedObject private var proEntitlement = ProEntitlementCenter.shared", "ContentView does not observe Pro entitlement") |
| | | require(content, "ProEntitlementPolicy.effectiveTheme(for: appGridTheme)", "ContentView does not apply effective Pro theme") |