@umituz/react-native-settings 5.3.37 → 5.3.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/account.d.ts +27 -0
- package/dist/application/ports/ISettingsRepository.d.ts +45 -0
- package/dist/domains/about/domain/entities/AppInfo.d.ts +76 -0
- package/dist/domains/about/domain/repositories/IAboutRepository.d.ts +19 -0
- package/dist/domains/about/index.d.ts +10 -0
- package/dist/domains/about/infrastructure/repositories/AboutRepository.d.ts +18 -0
- package/dist/domains/about/presentation/components/AboutContent.d.ts +14 -0
- package/dist/domains/about/presentation/components/AboutHeader.d.ts +21 -0
- package/dist/domains/about/presentation/components/AboutSection.d.ts +14 -0
- package/dist/domains/about/presentation/components/AboutSettingItem.d.ts +39 -0
- package/dist/domains/about/presentation/hooks/useAboutInfo.d.ts +2 -0
- package/dist/domains/about/presentation/hooks/useAboutInfo.types.d.ts +29 -0
- package/dist/domains/about/presentation/screens/AboutScreen.d.ts +21 -0
- package/dist/domains/about/presentation/screens/AboutScreenContent.d.ts +15 -0
- package/dist/domains/about/utils/AppInfoFactory.d.ts +9 -0
- package/dist/domains/appearance/data/colorPalettes.d.ts +25 -0
- package/dist/domains/appearance/hooks/useAppearance.d.ts +11 -0
- package/dist/domains/appearance/hooks/useAppearanceActions.d.ts +9 -0
- package/dist/domains/appearance/index.d.ts +9 -0
- package/dist/domains/appearance/presentation/components/AppearanceHeader.d.ts +18 -0
- package/dist/domains/appearance/presentation/components/AppearancePreview.d.ts +21 -0
- package/dist/domains/appearance/presentation/components/AppearanceSection.d.ts +16 -0
- package/dist/domains/appearance/presentation/components/ColorPicker.d.ts +15 -0
- package/dist/domains/appearance/presentation/components/CustomColorsSection.d.ts +25 -0
- package/dist/domains/appearance/presentation/components/ThemeModeSection.d.ts +24 -0
- package/dist/domains/appearance/presentation/components/ThemeOption.d.ts +20 -0
- package/dist/domains/appearance/presentation/components/index.d.ts +6 -0
- package/dist/domains/appearance/presentation/screens/AppearanceScreen.d.ts +16 -0
- package/dist/domains/appearance/types/index.d.ts +48 -0
- package/dist/domains/cloud-sync/index.d.ts +6 -0
- package/dist/domains/cloud-sync/presentation/components/CloudSyncSetting.d.ts +14 -0
- package/dist/domains/dev/index.d.ts +14 -0
- package/dist/domains/dev/presentation/components/DevSettingsSection.d.ts +34 -0
- package/dist/domains/dev/presentation/components/EnvViewerSetting.d.ts +20 -0
- package/dist/domains/dev/presentation/components/StorageClearSetting.d.ts +13 -0
- package/dist/domains/dev/presentation/screens/EnvViewerScreen.d.ts +12 -0
- package/dist/domains/dev/types.d.ts +22 -0
- package/dist/domains/disclaimer/index.d.ts +17 -0
- package/dist/domains/disclaimer/presentation/components/DisclaimerCard.d.ts +14 -0
- package/dist/domains/disclaimer/presentation/components/DisclaimerModal.d.ts +12 -0
- package/dist/domains/disclaimer/presentation/components/DisclaimerSetting.d.ts +34 -0
- package/dist/domains/disclaimer/presentation/screens/DisclaimerScreen.d.ts +27 -0
- package/dist/domains/faqs/domain/entities/FAQEntity.d.ts +21 -0
- package/dist/domains/faqs/domain/services/FAQSearchService.d.ts +12 -0
- package/dist/domains/faqs/index.d.ts +8 -0
- package/dist/domains/faqs/presentation/components/FAQCategory.d.ts +21 -0
- package/dist/domains/faqs/presentation/components/FAQEmptyState.d.ts +20 -0
- package/dist/domains/faqs/presentation/components/FAQItem.d.ts +24 -0
- package/dist/domains/faqs/presentation/components/FAQSearchBar.d.ts +18 -0
- package/dist/domains/faqs/presentation/components/index.d.ts +11 -0
- package/dist/domains/faqs/presentation/hooks/index.d.ts +5 -0
- package/dist/domains/faqs/presentation/hooks/useFAQExpansion.d.ts +12 -0
- package/dist/domains/faqs/presentation/hooks/useFAQSearch.d.ts +12 -0
- package/dist/domains/faqs/presentation/screens/FAQScreen.d.ts +33 -0
- package/dist/domains/feedback/domain/entities/FeedbackEntity.d.ts +25 -0
- package/dist/domains/feedback/domain/repositories/IFeedbackRepository.d.ts +20 -0
- package/dist/domains/feedback/index.d.ts +10 -0
- package/dist/domains/feedback/presentation/components/FeedbackForm.d.ts +7 -0
- package/dist/domains/feedback/presentation/components/FeedbackForm.styles.d.ts +48 -0
- package/dist/domains/feedback/presentation/components/FeedbackFormProps.d.ts +26 -0
- package/dist/domains/feedback/presentation/components/FeedbackModal.d.ts +23 -0
- package/dist/domains/feedback/presentation/components/SupportSection.d.ts +62 -0
- package/dist/domains/feedback/presentation/hooks/useFeedbackForm.d.ts +19 -0
- package/dist/domains/feedback/presentation/screens/FeatureRequestScreen.d.ts +2 -0
- package/dist/domains/gamification/components/AchievementCard.d.ts +23 -0
- package/dist/domains/gamification/components/AchievementItem.d.ts +7 -0
- package/dist/domains/gamification/components/AchievementToast.d.ts +21 -0
- package/dist/domains/gamification/components/GamificationScreen/AchievementsList.d.ts +17 -0
- package/dist/domains/gamification/components/GamificationScreen/GamificationScreen.d.ts +11 -0
- package/dist/domains/gamification/components/GamificationScreen/GamificationScreenWithConfig.d.ts +11 -0
- package/dist/domains/gamification/components/GamificationScreen/StatsGrid.d.ts +16 -0
- package/dist/domains/gamification/components/GamificationScreen/index.d.ts +17 -0
- package/dist/domains/gamification/components/GamificationScreen/styles.d.ts +40 -0
- package/dist/domains/gamification/components/GamificationScreen/types.d.ts +42 -0
- package/dist/domains/gamification/components/LevelProgress.d.ts +27 -0
- package/dist/domains/gamification/components/PointsBadge.d.ts +16 -0
- package/dist/domains/gamification/components/StatsCard.d.ts +20 -0
- package/dist/domains/gamification/components/StreakDisplay.d.ts +21 -0
- package/dist/domains/gamification/components/index.d.ts +14 -0
- package/dist/domains/gamification/components/styles/achievementItemStyles.d.ts +71 -0
- package/dist/domains/gamification/components/types/AchievementItemProps.d.ts +22 -0
- package/dist/domains/gamification/hooks/useGamification.d.ts +22 -0
- package/dist/domains/gamification/index.d.ts +13 -0
- package/dist/domains/gamification/store/gamificationStore.d.ts +6 -0
- package/dist/domains/gamification/types/index.d.ts +99 -0
- package/dist/domains/gamification/utils/calculations.d.ts +10 -0
- package/dist/domains/legal/domain/entities/LegalConfig.d.ts +28 -0
- package/dist/domains/legal/domain/services/ContentValidationService.d.ts +19 -0
- package/dist/domains/legal/domain/services/StyleCacheService.d.ts +38 -0
- package/dist/domains/legal/domain/services/UrlHandlerService.d.ts +32 -0
- package/dist/domains/legal/index.d.ts +8 -0
- package/dist/domains/legal/presentation/components/LegalDocumentsList.d.ts +21 -0
- package/dist/domains/legal/presentation/components/LegalItem.d.ts +35 -0
- package/dist/domains/legal/presentation/components/LegalScreenHeader.d.ts +12 -0
- package/dist/domains/legal/presentation/components/LegalSection.d.ts +14 -0
- package/dist/domains/legal/presentation/screens/LegalContentScreen.d.ts +19 -0
- package/dist/domains/legal/presentation/screens/LegalScreen.d.ts +24 -0
- package/dist/domains/legal/presentation/screens/PrivacyPolicyScreen.d.ts +15 -0
- package/dist/domains/legal/presentation/screens/TermsOfServiceScreen.d.ts +15 -0
- package/dist/domains/localization/domain/repositories/ILocalizationRepository.d.ts +16 -0
- package/dist/domains/localization/index.d.ts +16 -0
- package/dist/domains/localization/infrastructure/components/LanguageSwitcher.d.ts +19 -0
- package/dist/domains/localization/infrastructure/components/LanguageSwitcher.styles.d.ts +37 -0
- package/dist/domains/localization/infrastructure/components/useLanguageNavigation.d.ts +4 -0
- package/dist/domains/localization/infrastructure/components/useLanguageSwitcher.d.ts +13 -0
- package/dist/domains/localization/infrastructure/config/DeviceLocale.d.ts +10 -0
- package/dist/domains/localization/infrastructure/config/I18nInitializer.d.ts +14 -0
- package/dist/domains/localization/infrastructure/config/LanguageQuery.d.ts +10 -0
- package/dist/domains/localization/infrastructure/config/LocaleMapping.d.ts +5 -0
- package/dist/domains/localization/infrastructure/config/NamespaceResolver.d.ts +11 -0
- package/dist/domains/localization/infrastructure/config/ResourceBuilder.d.ts +10 -0
- package/dist/domains/localization/infrastructure/config/TranslationLoader.d.ts +16 -0
- package/dist/domains/localization/infrastructure/config/constants/defaultLanguages.d.ts +6 -0
- package/dist/domains/localization/infrastructure/config/i18n.d.ts +7 -0
- package/dist/domains/localization/infrastructure/config/languages.d.ts +7 -0
- package/dist/domains/localization/infrastructure/hooks/useLanguageSelection.d.ts +11 -0
- package/dist/domains/localization/infrastructure/hooks/useLocalization.d.ts +12 -0
- package/dist/domains/localization/infrastructure/hooks/useTranslation.d.ts +23 -0
- package/dist/domains/localization/infrastructure/repository/LanguageRepository.d.ts +18 -0
- package/dist/domains/localization/infrastructure/storage/LanguageInitializer.d.ts +20 -0
- package/dist/domains/localization/infrastructure/storage/LanguageSwitcher.d.ts +16 -0
- package/dist/domains/localization/infrastructure/storage/LocalizationStore.d.ts +6 -0
- package/dist/domains/localization/infrastructure/storage/localizationStoreUtils.d.ts +44 -0
- package/dist/domains/localization/infrastructure/storage/types/Language.d.ts +12 -0
- package/dist/domains/localization/infrastructure/storage/types/LocalizationState.d.ts +22 -0
- package/dist/domains/localization/presentation/components/LanguageItem.d.ts +23 -0
- package/dist/domains/localization/presentation/components/LanguageItem.styles.d.ts +30 -0
- package/dist/domains/localization/presentation/components/LanguageSection.d.ts +15 -0
- package/dist/domains/localization/presentation/providers/LocalizationManager.d.ts +12 -0
- package/dist/domains/localization/presentation/screens/LanguageSelectionScreen.d.ts +7 -0
- package/dist/domains/localization/presentation/screens/LanguageSelectionScreen.styles.d.ts +7 -0
- package/dist/domains/localization/presentation/screens/LanguageSelectionScreen.types.d.ts +26 -0
- package/dist/domains/notifications/index.d.ts +46 -0
- package/dist/domains/notifications/infrastructure/config/notificationsConfig.d.ts +19 -0
- package/dist/domains/notifications/infrastructure/hooks/useNotificationSettings.d.ts +8 -0
- package/dist/domains/notifications/infrastructure/services/NotificationBadgeManager.d.ts +4 -0
- package/dist/domains/notifications/infrastructure/services/NotificationManager.d.ts +23 -0
- package/dist/domains/notifications/infrastructure/services/NotificationPermissions.d.ts +5 -0
- package/dist/domains/notifications/infrastructure/services/NotificationScheduler.d.ts +7 -0
- package/dist/domains/notifications/infrastructure/services/NotificationService.d.ts +31 -0
- package/dist/domains/notifications/infrastructure/services/types.d.ts +147 -0
- package/dist/domains/notifications/infrastructure/storage/UnifiedNotificationStore.d.ts +42 -0
- package/dist/domains/notifications/infrastructure/utils/idGenerator.d.ts +6 -0
- package/dist/domains/notifications/infrastructure/utils/triggerBuilder.d.ts +6 -0
- package/dist/domains/notifications/presentation/components/NotificationsSection.d.ts +16 -0
- package/dist/domains/notifications/presentation/components/RemindersNavRow.d.ts +12 -0
- package/dist/domains/notifications/presentation/components/RemindersNavRow.styles.d.ts +34 -0
- package/dist/domains/notifications/presentation/components/SettingRow.d.ts +14 -0
- package/dist/domains/notifications/presentation/hooks/useNotificationSettingsUI.d.ts +13 -0
- package/dist/domains/notifications/presentation/hooks/useTimePicker.d.ts +21 -0
- package/dist/domains/notifications/presentation/screens/NotificationSettingsScreen.d.ts +12 -0
- package/dist/domains/notifications/presentation/screens/NotificationSettingsScreen.styles.d.ts +26 -0
- package/dist/domains/notifications/presentation/screens/NotificationsScreen.d.ts +18 -0
- package/dist/domains/notifications/quietHours/infrastructure/hooks/useQuietHoursActions.d.ts +13 -0
- package/dist/domains/notifications/quietHours/presentation/components/QuietHoursCard.d.ts +14 -0
- package/dist/domains/notifications/reminders/infrastructure/config/reminderPresets.d.ts +24 -0
- package/dist/domains/notifications/reminders/infrastructure/hooks/useReminderActions.d.ts +11 -0
- package/dist/domains/notifications/reminders/presentation/components/FormButton.d.ts +12 -0
- package/dist/domains/notifications/reminders/presentation/components/FrequencySelector.d.ts +14 -0
- package/dist/domains/notifications/reminders/presentation/components/ReminderForm.constants.d.ts +28 -0
- package/dist/domains/notifications/reminders/presentation/components/ReminderForm.d.ts +7 -0
- package/dist/domains/notifications/reminders/presentation/components/ReminderForm.styles.d.ts +31 -0
- package/dist/domains/notifications/reminders/presentation/components/ReminderItem.d.ts +20 -0
- package/dist/domains/notifications/reminders/presentation/components/TimePresetSelector.d.ts +20 -0
- package/dist/domains/notifications/reminders/presentation/components/WeekdaySelector.d.ts +11 -0
- package/dist/domains/notifications/reminders/presentation/screens/ReminderListScreen.d.ts +13 -0
- package/dist/domains/rating/application/services/RatingService.d.ts +33 -0
- package/dist/domains/rating/domain/entities/Rating.d.ts +15 -0
- package/dist/domains/rating/domain/entities/RatingConfig.d.ts +120 -0
- package/dist/domains/rating/index.d.ts +12 -0
- package/dist/domains/rating/infrastructure/storage/RatingStorage.d.ts +50 -0
- package/dist/domains/rating/presentation/components/RatingPromptModal.d.ts +16 -0
- package/dist/domains/rating/presentation/components/StarRating.d.ts +13 -0
- package/dist/domains/rating/presentation/hooks/useAppRating.d.ts +9 -0
- package/dist/domains/video-tutorials/index.d.ts +18 -0
- package/dist/domains/video-tutorials/presentation/components/VideoTutorialCard.d.ts +13 -0
- package/dist/domains/video-tutorials/presentation/components/VideoTutorialSection.d.ts +25 -0
- package/dist/domains/video-tutorials/presentation/screens/VideoTutorialsScreen.d.ts +25 -0
- package/dist/domains/video-tutorials/types/index.d.ts +26 -0
- package/dist/index.d.ts +41 -0
- package/dist/infrastructure/repositories/SettingsRepository.d.ts +12 -0
- package/dist/infrastructure/services/SettingsService.d.ts +14 -0
- package/dist/infrastructure/utils/configFactory.d.ts +39 -0
- package/dist/infrastructure/utils/constants/textLimits.d.ts +16 -0
- package/dist/infrastructure/utils/sanitizers.d.ts +13 -0
- package/dist/infrastructure/utils/validation/core.d.ts +8 -0
- package/dist/infrastructure/utils/validation/formValidators.d.ts +26 -0
- package/dist/infrastructure/utils/validation/index.d.ts +5 -0
- package/dist/infrastructure/utils/validators.d.ts +21 -0
- package/dist/presentation/components/SettingsFooter.d.ts +7 -0
- package/dist/presentation/components/SettingsItemCard.d.ts +22 -0
- package/dist/presentation/components/SettingsNavigationItem.d.ts +67 -0
- package/dist/presentation/components/SettingsSection.d.ts +6 -0
- package/dist/presentation/components/settings/SettingsItemCardContent.d.ts +12 -0
- package/dist/presentation/components/settings/SettingsItemCardRightElement.d.ts +11 -0
- package/dist/presentation/components/settings/SettingsItemCardSection.d.ts +5 -0
- package/dist/presentation/hooks/mutations/useSettingsMutations.d.ts +20 -0
- package/dist/presentation/hooks/queries/useSettingsQuery.d.ts +7 -0
- package/dist/presentation/hooks/useSettings.d.ts +26 -0
- package/dist/presentation/hooks/useSettingsScreenConfig.d.ts +41 -0
- package/dist/presentation/navigation/SettingsStackNavigator.d.ts +9 -0
- package/dist/presentation/navigation/hooks/index.d.ts +5 -0
- package/dist/presentation/navigation/hooks/useNavigationHandlers.d.ts +14 -0
- package/dist/presentation/navigation/hooks/useSettingsNavigation.d.ts +22 -0
- package/dist/presentation/navigation/hooks/useSettingsScreens.d.ts +12 -0
- package/dist/presentation/navigation/types.d.ts +135 -0
- package/dist/presentation/navigation/utils/index.d.ts +5 -0
- package/dist/presentation/navigation/utils/navigationHelpers.d.ts +13 -0
- package/dist/presentation/navigation/utils/navigationTranslations.d.ts +35 -0
- package/dist/presentation/screens/AppearanceScreen.d.ts +6 -0
- package/dist/presentation/screens/SettingsScreen.d.ts +49 -0
- package/dist/presentation/screens/components/SettingsContent.d.ts +3 -0
- package/dist/presentation/screens/components/SettingsHeader.d.ts +8 -0
- package/dist/presentation/screens/components/sections/CustomSettingsList.d.ts +7 -0
- package/dist/presentation/screens/components/sections/FeatureSettingsSection.d.ts +13 -0
- package/dist/presentation/screens/components/sections/IdentitySettingsSection.d.ts +12 -0
- package/dist/presentation/screens/components/sections/ProfileSectionLoader.d.ts +17 -0
- package/dist/presentation/screens/components/sections/SupportSettingsSection.d.ts +13 -0
- package/dist/presentation/screens/components/types/SettingsContentProps.d.ts +47 -0
- package/dist/presentation/screens/components/utils/featureChecker.d.ts +10 -0
- package/dist/presentation/screens/hooks/useFeatureDetection.d.ts +28 -0
- package/dist/presentation/screens/hooks/useSettingsScreen.d.ts +36 -0
- package/dist/presentation/screens/types/BaseTypes.d.ts +11 -0
- package/dist/presentation/screens/types/ContentConfig.d.ts +76 -0
- package/dist/presentation/screens/types/CustomSection.d.ts +38 -0
- package/dist/presentation/screens/types/SettingsConfig.d.ts +122 -0
- package/dist/presentation/screens/types/SettingsTranslations.d.ts +159 -0
- package/dist/presentation/screens/types/UserFeatureConfig.d.ts +178 -0
- package/dist/presentation/screens/types/index.d.ts +11 -0
- package/dist/presentation/screens/utils/normalizeConfig.d.ts +68 -0
- package/dist/presentation/utils/accountConfigUtils.d.ts +34 -0
- package/dist/presentation/utils/config-creators/base-configs.d.ts +26 -0
- package/dist/presentation/utils/config-creators/feature-configs.d.ts +17 -0
- package/dist/presentation/utils/config-creators/index.d.ts +7 -0
- package/dist/presentation/utils/config-creators/support-configs.d.ts +19 -0
- package/dist/presentation/utils/config-creators/types.d.ts +20 -0
- package/dist/presentation/utils/faqTranslator.d.ts +3 -0
- package/dist/presentation/utils/index.d.ts +8 -0
- package/dist/presentation/utils/screenFactory.d.ts +26 -0
- package/dist/presentation/utils/settingsConfigFactory.d.ts +33 -0
- package/dist/presentation/utils/userProfileUtils.d.ts +20 -0
- package/dist/utils/appUtils.d.ts +4 -0
- package/dist/utils/devUtils.d.ts +31 -0
- package/dist/utils/errorUtils.d.ts +22 -0
- package/dist/utils/hooks/useAsyncStateUpdate.d.ts +35 -0
- package/dist/utils/hooks/useMountSafety.d.ts +1 -0
- package/package.json +1 -1
- package/src/domains/feedback/presentation/screens/FeatureRequestScreen.tsx +449 -0
- package/src/presentation/navigation/hooks/useSettingsScreens.ts +29 -9
- package/src/presentation/navigation/types.ts +1 -0
- package/src/presentation/screens/components/sections/SupportSettingsSection.tsx +1 -1
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Support Section Component
|
|
3
|
+
* Renders Support entry points: Feedback and Rating
|
|
4
|
+
* Agnostic of UI implementation via render props
|
|
5
|
+
*/
|
|
6
|
+
import React from "react";
|
|
7
|
+
import type { FeedbackType } from "../../domain/entities/FeedbackEntity";
|
|
8
|
+
export interface FeedbackConfig {
|
|
9
|
+
enabled?: boolean;
|
|
10
|
+
title?: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
initialType?: FeedbackType;
|
|
13
|
+
onSubmit?: (data: {
|
|
14
|
+
type: FeedbackType;
|
|
15
|
+
rating: number;
|
|
16
|
+
description: string;
|
|
17
|
+
title: string;
|
|
18
|
+
}) => Promise<void>;
|
|
19
|
+
onPress?: () => void;
|
|
20
|
+
}
|
|
21
|
+
export interface RatingConfig {
|
|
22
|
+
enabled?: boolean;
|
|
23
|
+
title?: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
storeUrl?: string;
|
|
26
|
+
onRate?: () => void;
|
|
27
|
+
}
|
|
28
|
+
export interface FeedbackModalTexts {
|
|
29
|
+
title?: string;
|
|
30
|
+
ratingLabel: string;
|
|
31
|
+
descriptionPlaceholder: string;
|
|
32
|
+
submitButton: string;
|
|
33
|
+
submittingButton: string;
|
|
34
|
+
feedbackTypes: Array<{
|
|
35
|
+
type: FeedbackType;
|
|
36
|
+
label: string;
|
|
37
|
+
}>;
|
|
38
|
+
defaultTitle: (type: FeedbackType) => string;
|
|
39
|
+
}
|
|
40
|
+
export interface SupportSectionProps {
|
|
41
|
+
feedbackConfig: {
|
|
42
|
+
enabled: boolean;
|
|
43
|
+
config?: FeedbackConfig;
|
|
44
|
+
};
|
|
45
|
+
ratingConfig: {
|
|
46
|
+
enabled: boolean;
|
|
47
|
+
config?: RatingConfig;
|
|
48
|
+
};
|
|
49
|
+
renderSection: (props: {
|
|
50
|
+
title: string;
|
|
51
|
+
children: React.ReactNode;
|
|
52
|
+
}) => React.ReactElement | null;
|
|
53
|
+
renderItem: (props: {
|
|
54
|
+
title: string;
|
|
55
|
+
icon: string;
|
|
56
|
+
onPress: () => void;
|
|
57
|
+
isLast?: boolean;
|
|
58
|
+
}) => React.ReactElement | null;
|
|
59
|
+
/** Texts for the feedback modal */
|
|
60
|
+
feedbackModalTexts?: FeedbackModalTexts;
|
|
61
|
+
}
|
|
62
|
+
export declare const SupportSection: React.FC<SupportSectionProps>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feedback Form Hook
|
|
3
|
+
*/
|
|
4
|
+
import type { FeedbackType, FeedbackRating } from '../../domain/entities/FeedbackEntity';
|
|
5
|
+
export interface FeedbackFormState {
|
|
6
|
+
type: FeedbackType;
|
|
7
|
+
title: string;
|
|
8
|
+
description: string;
|
|
9
|
+
rating?: FeedbackRating;
|
|
10
|
+
}
|
|
11
|
+
export declare function useFeedbackForm(defaultValues?: Partial<FeedbackFormState>): {
|
|
12
|
+
formState: FeedbackFormState;
|
|
13
|
+
setType: (type: FeedbackType) => void;
|
|
14
|
+
setTitle: (title: string) => void;
|
|
15
|
+
setDescription: (description: string) => void;
|
|
16
|
+
setRating: (rating: FeedbackRating | undefined) => void;
|
|
17
|
+
reset: () => void;
|
|
18
|
+
isValid: boolean;
|
|
19
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AchievementCard Component
|
|
3
|
+
* Displays achievement - all text via props
|
|
4
|
+
*/
|
|
5
|
+
import React from "react";
|
|
6
|
+
import { type ViewStyle, type TextStyle } from "react-native";
|
|
7
|
+
export interface AchievementCardProps {
|
|
8
|
+
title: string;
|
|
9
|
+
description: string;
|
|
10
|
+
icon: React.ReactNode;
|
|
11
|
+
isUnlocked: boolean;
|
|
12
|
+
progress: number;
|
|
13
|
+
containerStyle?: ViewStyle;
|
|
14
|
+
titleStyle?: TextStyle;
|
|
15
|
+
descriptionStyle?: TextStyle;
|
|
16
|
+
progressBarStyle?: ViewStyle;
|
|
17
|
+
unlockedColor?: string;
|
|
18
|
+
lockedColor?: string;
|
|
19
|
+
backgroundColor?: string;
|
|
20
|
+
textColor?: string;
|
|
21
|
+
subtextColor?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare const AchievementCard: React.FC<AchievementCardProps>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AchievementToast Component
|
|
3
|
+
* Shows achievement unlock notification - all text via props
|
|
4
|
+
*/
|
|
5
|
+
import React from "react";
|
|
6
|
+
import { type ViewStyle, type TextStyle } from "react-native";
|
|
7
|
+
export interface AchievementToastProps {
|
|
8
|
+
visible: boolean;
|
|
9
|
+
title: string;
|
|
10
|
+
label: string;
|
|
11
|
+
icon: React.ReactNode;
|
|
12
|
+
onDismiss: () => void;
|
|
13
|
+
duration?: number;
|
|
14
|
+
containerStyle?: ViewStyle;
|
|
15
|
+
labelStyle?: TextStyle;
|
|
16
|
+
titleStyle?: TextStyle;
|
|
17
|
+
backgroundColor?: string;
|
|
18
|
+
textColor?: string;
|
|
19
|
+
labelColor?: string;
|
|
20
|
+
}
|
|
21
|
+
export declare const AchievementToast: React.FC<AchievementToastProps>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GamificationScreen AchievementsList Component
|
|
3
|
+
*/
|
|
4
|
+
import React from "react";
|
|
5
|
+
import { type TextStyle } from "react-native";
|
|
6
|
+
import type { AchievementItemProps } from "../types/AchievementItemProps";
|
|
7
|
+
export interface AchievementsListProps {
|
|
8
|
+
achievementsTitle: string;
|
|
9
|
+
achievements: Array<Omit<AchievementItemProps, "accentColor" | "backgroundColor" | "textColor" | "subtextColor" | "lockedOpacity">>;
|
|
10
|
+
emptyAchievementsText?: string;
|
|
11
|
+
accentColor: string;
|
|
12
|
+
cardBackgroundColor: string;
|
|
13
|
+
textColor: string;
|
|
14
|
+
subtextColor: string;
|
|
15
|
+
sectionTitleStyle?: TextStyle;
|
|
16
|
+
}
|
|
17
|
+
export declare const AchievementsList: React.FC<AchievementsListProps>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GamificationScreen - Pure Presentational Component
|
|
3
|
+
* Renders the gamification dashboard with all data provided as props
|
|
4
|
+
* Under 200 lines - only presentation logic
|
|
5
|
+
*/
|
|
6
|
+
import React from "react";
|
|
7
|
+
import type { GamificationScreenProps } from "./types";
|
|
8
|
+
/**
|
|
9
|
+
* Internal component that renders the screen with all props
|
|
10
|
+
*/
|
|
11
|
+
export declare const GamificationScreenInner: React.FC<GamificationScreenProps>;
|
package/dist/domains/gamification/components/GamificationScreen/GamificationScreenWithConfig.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GamificationScreen With Config
|
|
3
|
+
* Component that uses the hook to fetch data and render the screen
|
|
4
|
+
* Separated to satisfy React Hooks rules
|
|
5
|
+
*/
|
|
6
|
+
import React from "react";
|
|
7
|
+
import type { GamificationConfigProps } from "./types";
|
|
8
|
+
/**
|
|
9
|
+
* Component that uses the hook - separated to satisfy React Hooks rules
|
|
10
|
+
*/
|
|
11
|
+
export declare const GamificationScreenWithConfig: React.FC<GamificationConfigProps>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GamificationScreen StatsGrid Component
|
|
3
|
+
*/
|
|
4
|
+
import React from "react";
|
|
5
|
+
import { type TextStyle } from "react-native";
|
|
6
|
+
import type { StatsCardProps } from "../StatsCard";
|
|
7
|
+
export interface StatsGridProps {
|
|
8
|
+
statsTitle: string;
|
|
9
|
+
stats: Array<Omit<StatsCardProps, "accentColor" | "backgroundColor" | "textColor" | "subtextColor">>;
|
|
10
|
+
accentColor: string;
|
|
11
|
+
cardBackgroundColor: string;
|
|
12
|
+
textColor: string;
|
|
13
|
+
subtextColor: string;
|
|
14
|
+
sectionTitleStyle?: TextStyle;
|
|
15
|
+
}
|
|
16
|
+
export declare const StatsGrid: React.FC<StatsGridProps>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GamificationScreen Component
|
|
3
|
+
* Full gamification screen with integrated hook
|
|
4
|
+
* Generic for 100+ apps - NO hardcoded strings
|
|
5
|
+
*
|
|
6
|
+
* Split into multiple files to keep each under 200 lines:
|
|
7
|
+
* - GamificationScreen.tsx: Pure presentational component
|
|
8
|
+
* - GamificationScreenWithConfig.tsx: Config-based version with hook
|
|
9
|
+
* - index.tsx: Main entry point that routes to appropriate component
|
|
10
|
+
*/
|
|
11
|
+
import React from "react";
|
|
12
|
+
import type { GamificationScreenProps, GamificationConfigProps } from "./types";
|
|
13
|
+
/**
|
|
14
|
+
* GamificationScreen that accepts either detailed props OR a config object
|
|
15
|
+
* When config is provided, a hook consumer component is used
|
|
16
|
+
*/
|
|
17
|
+
export declare const GamificationScreen: React.FC<GamificationScreenProps | GamificationConfigProps>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GamificationScreen Styles
|
|
3
|
+
*/
|
|
4
|
+
export declare const styles: {
|
|
5
|
+
container: {
|
|
6
|
+
flex: number;
|
|
7
|
+
};
|
|
8
|
+
scrollView: {
|
|
9
|
+
flex: number;
|
|
10
|
+
};
|
|
11
|
+
scrollContent: {
|
|
12
|
+
padding: number;
|
|
13
|
+
paddingBottom: number;
|
|
14
|
+
};
|
|
15
|
+
header: {
|
|
16
|
+
marginBottom: number;
|
|
17
|
+
};
|
|
18
|
+
title: {
|
|
19
|
+
fontSize: number;
|
|
20
|
+
fontWeight: "bold";
|
|
21
|
+
};
|
|
22
|
+
section: {
|
|
23
|
+
marginBottom: number;
|
|
24
|
+
};
|
|
25
|
+
sectionTitle: {
|
|
26
|
+
fontSize: number;
|
|
27
|
+
fontWeight: "600";
|
|
28
|
+
marginBottom: number;
|
|
29
|
+
};
|
|
30
|
+
statsGrid: {
|
|
31
|
+
flexDirection: "row";
|
|
32
|
+
flexWrap: "wrap";
|
|
33
|
+
gap: number;
|
|
34
|
+
};
|
|
35
|
+
emptyText: {
|
|
36
|
+
fontSize: number;
|
|
37
|
+
textAlign: "center";
|
|
38
|
+
paddingVertical: number;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GamificationScreen Types
|
|
3
|
+
* Generic types for 100+ apps - NO app-specific code
|
|
4
|
+
*/
|
|
5
|
+
import type React from 'react';
|
|
6
|
+
import type { LevelProgressProps } from "../LevelProgress";
|
|
7
|
+
import type { StatsCardProps } from "../StatsCard";
|
|
8
|
+
import type { AchievementItemProps } from "../types/AchievementItemProps";
|
|
9
|
+
import type { StreakDisplayProps } from "../StreakDisplay";
|
|
10
|
+
import type { ViewStyle, TextStyle } from "react-native";
|
|
11
|
+
import type { GamificationConfig } from "../../types";
|
|
12
|
+
export interface GamificationConfigProps extends Partial<Omit<GamificationScreenProps, 'config'>> {
|
|
13
|
+
config: GamificationConfig;
|
|
14
|
+
}
|
|
15
|
+
export interface GamificationScreenProps {
|
|
16
|
+
title: string;
|
|
17
|
+
statsTitle: string;
|
|
18
|
+
achievementsTitle: string;
|
|
19
|
+
streakTitle: string;
|
|
20
|
+
levelProps: Omit<LevelProgressProps, "primaryColor" | "backgroundColor" | "textColor" | "subtextColor">;
|
|
21
|
+
stats: Array<Omit<StatsCardProps, "accentColor" | "backgroundColor" | "textColor" | "subtextColor">>;
|
|
22
|
+
achievements: Array<Omit<AchievementItemProps, "accentColor" | "backgroundColor" | "textColor" | "subtextColor" | "lockedOpacity">>;
|
|
23
|
+
streakProps?: Omit<StreakDisplayProps, "primaryColor" | "backgroundColor" | "textColor" | "subtextColor">;
|
|
24
|
+
emptyAchievementsText?: string;
|
|
25
|
+
containerStyle?: ViewStyle;
|
|
26
|
+
headerStyle?: ViewStyle;
|
|
27
|
+
titleStyle?: TextStyle;
|
|
28
|
+
sectionTitleStyle?: TextStyle;
|
|
29
|
+
accentColor?: string;
|
|
30
|
+
backgroundColor?: string;
|
|
31
|
+
cardBackgroundColor?: string;
|
|
32
|
+
textColor?: string;
|
|
33
|
+
subtextColor?: string;
|
|
34
|
+
headerComponent?: React.ReactNode;
|
|
35
|
+
}
|
|
36
|
+
export interface GamificationScreenStyleProps {
|
|
37
|
+
accentColor: string;
|
|
38
|
+
backgroundColor: string;
|
|
39
|
+
cardBackgroundColor: string;
|
|
40
|
+
textColor: string;
|
|
41
|
+
subtextColor: string;
|
|
42
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LevelProgress Component
|
|
3
|
+
* Displays level and progress - all text via props
|
|
4
|
+
*/
|
|
5
|
+
import React from "react";
|
|
6
|
+
import { type ViewStyle, type TextStyle } from "react-native";
|
|
7
|
+
export interface LevelProgressProps {
|
|
8
|
+
level: number;
|
|
9
|
+
points: number;
|
|
10
|
+
levelTitle: string;
|
|
11
|
+
pointsToNext: number;
|
|
12
|
+
progress: number;
|
|
13
|
+
showPoints?: boolean;
|
|
14
|
+
containerStyle?: ViewStyle;
|
|
15
|
+
titleStyle?: TextStyle;
|
|
16
|
+
subtitleStyle?: TextStyle;
|
|
17
|
+
progressBarStyle?: ViewStyle;
|
|
18
|
+
progressFillStyle?: ViewStyle;
|
|
19
|
+
badgeStyle?: ViewStyle;
|
|
20
|
+
badgeTextStyle?: TextStyle;
|
|
21
|
+
primaryColor?: string;
|
|
22
|
+
secondaryColor?: string;
|
|
23
|
+
backgroundColor?: string;
|
|
24
|
+
textColor?: string;
|
|
25
|
+
subtextColor?: string;
|
|
26
|
+
}
|
|
27
|
+
export declare const LevelProgress: React.FC<LevelProgressProps>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PointsBadge Component
|
|
3
|
+
* Displays points with optional icon - all text via props
|
|
4
|
+
*/
|
|
5
|
+
import React from "react";
|
|
6
|
+
import { type ViewStyle, type TextStyle } from "react-native";
|
|
7
|
+
export interface PointsBadgeProps {
|
|
8
|
+
points: number;
|
|
9
|
+
icon?: React.ReactNode;
|
|
10
|
+
containerStyle?: ViewStyle;
|
|
11
|
+
textStyle?: TextStyle;
|
|
12
|
+
backgroundColor?: string;
|
|
13
|
+
textColor?: string;
|
|
14
|
+
borderColor?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare const PointsBadge: React.FC<PointsBadgeProps>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StatsCard Component - Modern Design
|
|
3
|
+
* Clean card-based stat display with large emoji icons
|
|
4
|
+
*/
|
|
5
|
+
import React from "react";
|
|
6
|
+
import { type ViewStyle, type TextStyle } from "react-native";
|
|
7
|
+
export interface StatsCardProps {
|
|
8
|
+
value: number;
|
|
9
|
+
label: string;
|
|
10
|
+
icon?: React.ReactNode | string;
|
|
11
|
+
suffix?: string;
|
|
12
|
+
containerStyle?: ViewStyle;
|
|
13
|
+
valueStyle?: TextStyle;
|
|
14
|
+
labelStyle?: TextStyle;
|
|
15
|
+
accentColor?: string;
|
|
16
|
+
backgroundColor?: string;
|
|
17
|
+
textColor?: string;
|
|
18
|
+
subtextColor?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare const StatsCard: React.FC<StatsCardProps>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StreakDisplay Component - Modern Design
|
|
3
|
+
* Clean card-based design with gradient fire icon
|
|
4
|
+
*/
|
|
5
|
+
import React from "react";
|
|
6
|
+
import { type ViewStyle, type TextStyle } from "react-native";
|
|
7
|
+
export interface StreakDisplayProps {
|
|
8
|
+
current: number;
|
|
9
|
+
longest: number;
|
|
10
|
+
bestLabel: string;
|
|
11
|
+
daysLabel: string;
|
|
12
|
+
icon?: React.ReactNode | string;
|
|
13
|
+
containerStyle?: ViewStyle;
|
|
14
|
+
numberStyle?: TextStyle;
|
|
15
|
+
labelStyle?: TextStyle;
|
|
16
|
+
primaryColor?: string;
|
|
17
|
+
backgroundColor?: string;
|
|
18
|
+
textColor?: string;
|
|
19
|
+
subtextColor?: string;
|
|
20
|
+
}
|
|
21
|
+
export declare const StreakDisplay: React.FC<StreakDisplayProps>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gamification Components
|
|
3
|
+
* All text via props - NO hardcoded strings
|
|
4
|
+
*/
|
|
5
|
+
export { LevelProgress, type LevelProgressProps } from "./LevelProgress";
|
|
6
|
+
export { PointsBadge, type PointsBadgeProps } from "./PointsBadge";
|
|
7
|
+
export { AchievementCard, type AchievementCardProps } from "./AchievementCard";
|
|
8
|
+
export { AchievementToast, type AchievementToastProps } from "./AchievementToast";
|
|
9
|
+
export { StreakDisplay, type StreakDisplayProps } from "./StreakDisplay";
|
|
10
|
+
export { StatsCard, type StatsCardProps } from "./StatsCard";
|
|
11
|
+
export { AchievementItem } from "./AchievementItem";
|
|
12
|
+
export type { AchievementItemProps } from "./types/AchievementItemProps";
|
|
13
|
+
export { GamificationScreen } from "./GamificationScreen/index";
|
|
14
|
+
export type { GamificationScreenProps, GamificationConfigProps } from "./GamificationScreen/types";
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AchievementItem Styles
|
|
3
|
+
*/
|
|
4
|
+
export declare const achievementItemStyles: {
|
|
5
|
+
container: {
|
|
6
|
+
flexDirection: "row";
|
|
7
|
+
alignItems: "center";
|
|
8
|
+
padding: number;
|
|
9
|
+
borderRadius: number;
|
|
10
|
+
marginBottom: number;
|
|
11
|
+
};
|
|
12
|
+
iconContainer: {
|
|
13
|
+
width: number;
|
|
14
|
+
height: number;
|
|
15
|
+
borderRadius: number;
|
|
16
|
+
alignItems: "center";
|
|
17
|
+
justifyContent: "center";
|
|
18
|
+
marginRight: number;
|
|
19
|
+
};
|
|
20
|
+
content: {
|
|
21
|
+
flex: number;
|
|
22
|
+
};
|
|
23
|
+
header: {
|
|
24
|
+
flexDirection: "row";
|
|
25
|
+
alignItems: "center";
|
|
26
|
+
justifyContent: "space-between";
|
|
27
|
+
marginBottom: number;
|
|
28
|
+
};
|
|
29
|
+
title: {
|
|
30
|
+
fontSize: number;
|
|
31
|
+
fontWeight: "600";
|
|
32
|
+
flex: number;
|
|
33
|
+
};
|
|
34
|
+
checkmark: {
|
|
35
|
+
width: number;
|
|
36
|
+
height: number;
|
|
37
|
+
borderRadius: number;
|
|
38
|
+
alignItems: "center";
|
|
39
|
+
justifyContent: "center";
|
|
40
|
+
marginLeft: number;
|
|
41
|
+
};
|
|
42
|
+
checkmarkText: {
|
|
43
|
+
fontSize: number;
|
|
44
|
+
fontWeight: "bold";
|
|
45
|
+
};
|
|
46
|
+
description: {
|
|
47
|
+
fontSize: number;
|
|
48
|
+
lineHeight: number;
|
|
49
|
+
};
|
|
50
|
+
progressContainer: {
|
|
51
|
+
marginTop: number;
|
|
52
|
+
flexDirection: "row";
|
|
53
|
+
alignItems: "center";
|
|
54
|
+
gap: number;
|
|
55
|
+
};
|
|
56
|
+
progressBar: {
|
|
57
|
+
flex: number;
|
|
58
|
+
height: number;
|
|
59
|
+
borderRadius: number;
|
|
60
|
+
overflow: "hidden";
|
|
61
|
+
};
|
|
62
|
+
progressFill: {
|
|
63
|
+
height: "100%";
|
|
64
|
+
borderRadius: number;
|
|
65
|
+
};
|
|
66
|
+
progressText: {
|
|
67
|
+
fontSize: number;
|
|
68
|
+
minWidth: number;
|
|
69
|
+
textAlign: "right";
|
|
70
|
+
};
|
|
71
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AchievementItem Props Types
|
|
3
|
+
*/
|
|
4
|
+
import type { ViewStyle, TextStyle } from 'react-native';
|
|
5
|
+
export interface AchievementItemProps {
|
|
6
|
+
id?: string;
|
|
7
|
+
title: string;
|
|
8
|
+
description: string;
|
|
9
|
+
icon: React.ReactNode | string;
|
|
10
|
+
isUnlocked: boolean;
|
|
11
|
+
progress: number;
|
|
12
|
+
threshold: number;
|
|
13
|
+
progressLabel?: string;
|
|
14
|
+
containerStyle?: ViewStyle;
|
|
15
|
+
titleStyle?: TextStyle;
|
|
16
|
+
descriptionStyle?: TextStyle;
|
|
17
|
+
accentColor?: string;
|
|
18
|
+
backgroundColor?: string;
|
|
19
|
+
textColor?: string;
|
|
20
|
+
subtextColor?: string;
|
|
21
|
+
lockedOpacity?: number;
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useGamification Hook
|
|
3
|
+
* Main hook for gamification operations
|
|
4
|
+
*/
|
|
5
|
+
import type { GamificationConfig, LevelState, Achievement } from "../types";
|
|
6
|
+
export interface UseGamificationReturn {
|
|
7
|
+
points: number;
|
|
8
|
+
totalTasksCompleted: number;
|
|
9
|
+
level: LevelState;
|
|
10
|
+
streak: {
|
|
11
|
+
current: number;
|
|
12
|
+
longest: number;
|
|
13
|
+
};
|
|
14
|
+
achievements: Achievement[];
|
|
15
|
+
isLoading: boolean;
|
|
16
|
+
isInitialized: boolean;
|
|
17
|
+
initialize: (config: GamificationConfig) => Promise<void>;
|
|
18
|
+
completeTask: () => void;
|
|
19
|
+
addPoints: (amount: number) => void;
|
|
20
|
+
reset: () => Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
export declare const useGamification: (config?: GamificationConfig) => UseGamificationReturn;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gamification Domain
|
|
3
|
+
* Part of @umituz/react-native-settings
|
|
4
|
+
*
|
|
5
|
+
* Generic gamification system for React Native apps
|
|
6
|
+
* All text via props - NO hardcoded strings
|
|
7
|
+
* Designed for 100+ apps
|
|
8
|
+
*/
|
|
9
|
+
export type { AchievementDefinition, Achievement, LevelDefinition, LevelState, StreakState, GamificationConfig, GamificationSettingsConfig, GamificationState, GamificationActions, GamificationStore, } from "./types";
|
|
10
|
+
export { useGamificationStore } from "./store/gamificationStore";
|
|
11
|
+
export { useGamification, type UseGamificationReturn } from "./hooks/useGamification";
|
|
12
|
+
export { calculateLevel, checkAchievementUnlock, updateAchievementProgress, isStreakActive, isSameDay, } from "./utils/calculations";
|
|
13
|
+
export { LevelProgress, type LevelProgressProps, PointsBadge, type PointsBadgeProps, AchievementCard, type AchievementCardProps, AchievementToast, type AchievementToastProps, StreakDisplay, type StreakDisplayProps, StatsCard, type StatsCardProps, AchievementItem, type AchievementItemProps, GamificationScreen, type GamificationScreenProps, } from "./components";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gamification Store
|
|
3
|
+
* Zustand store with persist middleware
|
|
4
|
+
*/
|
|
5
|
+
import type { GamificationState, GamificationActions } from "../types";
|
|
6
|
+
export declare const useGamificationStore: import("zustand").UseBoundStore<import("zustand").StoreApi<GamificationState & GamificationActions>>;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gamification Types
|
|
3
|
+
* Generic types for 100+ apps - NO app-specific code
|
|
4
|
+
*/
|
|
5
|
+
export interface AchievementDefinition {
|
|
6
|
+
id: string;
|
|
7
|
+
threshold: number;
|
|
8
|
+
type: "count" | "streak" | "milestone";
|
|
9
|
+
title: string;
|
|
10
|
+
description: string;
|
|
11
|
+
icon: string;
|
|
12
|
+
}
|
|
13
|
+
export interface Achievement extends AchievementDefinition {
|
|
14
|
+
isUnlocked: boolean;
|
|
15
|
+
unlockedAt?: string;
|
|
16
|
+
progress: number;
|
|
17
|
+
}
|
|
18
|
+
export interface LevelDefinition {
|
|
19
|
+
level: number;
|
|
20
|
+
minPoints: number;
|
|
21
|
+
maxPoints: number;
|
|
22
|
+
}
|
|
23
|
+
export interface LevelState {
|
|
24
|
+
currentLevel: number;
|
|
25
|
+
currentPoints: number;
|
|
26
|
+
pointsToNext: number;
|
|
27
|
+
progress: number;
|
|
28
|
+
}
|
|
29
|
+
export interface StreakState {
|
|
30
|
+
current: number;
|
|
31
|
+
longest: number;
|
|
32
|
+
lastActivityDate: string | null;
|
|
33
|
+
}
|
|
34
|
+
export interface GamificationTranslations {
|
|
35
|
+
title?: string;
|
|
36
|
+
statsTitle?: string;
|
|
37
|
+
pointsLabel?: string;
|
|
38
|
+
totalCompletedLabel?: string;
|
|
39
|
+
achievementsTitle?: string;
|
|
40
|
+
streakTitle?: string;
|
|
41
|
+
bestStreak?: string;
|
|
42
|
+
currentStreak?: string;
|
|
43
|
+
days?: string;
|
|
44
|
+
levelTitle?: string;
|
|
45
|
+
emptyAchievements?: string;
|
|
46
|
+
}
|
|
47
|
+
export interface GamificationConfig {
|
|
48
|
+
storageKey: string;
|
|
49
|
+
achievements: AchievementDefinition[];
|
|
50
|
+
levels: LevelDefinition[];
|
|
51
|
+
pointsPerAction?: number;
|
|
52
|
+
streakBonusMultiplier?: number;
|
|
53
|
+
enabled?: boolean;
|
|
54
|
+
translations?: GamificationTranslations;
|
|
55
|
+
}
|
|
56
|
+
export type GamificationSettingsConfig = GamificationConfig;
|
|
57
|
+
export interface GamificationState {
|
|
58
|
+
points: number;
|
|
59
|
+
totalTasksCompleted: number;
|
|
60
|
+
achievements: Achievement[];
|
|
61
|
+
streak: StreakState;
|
|
62
|
+
isLoading: boolean;
|
|
63
|
+
isInitialized: boolean;
|
|
64
|
+
}
|
|
65
|
+
export interface GamificationActions {
|
|
66
|
+
initialize: (config: GamificationConfig) => Promise<void>;
|
|
67
|
+
addPoints: (amount: number) => void;
|
|
68
|
+
completeTask: () => void;
|
|
69
|
+
updateStreak: () => void;
|
|
70
|
+
checkAchievements: () => Achievement[];
|
|
71
|
+
reset: () => Promise<void>;
|
|
72
|
+
}
|
|
73
|
+
export type GamificationStore = GamificationState & GamificationActions;
|
|
74
|
+
export interface LevelProgressProps {
|
|
75
|
+
level: number;
|
|
76
|
+
points: number;
|
|
77
|
+
levelTitle: string;
|
|
78
|
+
pointsToNext: number;
|
|
79
|
+
progress: number;
|
|
80
|
+
showPoints?: boolean;
|
|
81
|
+
}
|
|
82
|
+
export interface AchievementCardProps {
|
|
83
|
+
title: string;
|
|
84
|
+
description: string;
|
|
85
|
+
icon: string;
|
|
86
|
+
isUnlocked: boolean;
|
|
87
|
+
progress: number;
|
|
88
|
+
threshold: number;
|
|
89
|
+
}
|
|
90
|
+
export interface StreakDisplayProps {
|
|
91
|
+
current: number;
|
|
92
|
+
longest: number;
|
|
93
|
+
streakLabel: string;
|
|
94
|
+
bestLabel: string;
|
|
95
|
+
}
|
|
96
|
+
export interface PointsBadgeProps {
|
|
97
|
+
points: number;
|
|
98
|
+
label?: string;
|
|
99
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gamification Calculations
|
|
3
|
+
* Pure utility functions - NO side effects
|
|
4
|
+
*/
|
|
5
|
+
import type { LevelDefinition, LevelState, AchievementDefinition } from "../types";
|
|
6
|
+
export declare const calculateLevel: (points: number, levels: LevelDefinition[]) => LevelState;
|
|
7
|
+
export declare const checkAchievementUnlock: (definition: AchievementDefinition, tasksCompleted: number, currentStreak: number) => boolean;
|
|
8
|
+
export declare const updateAchievementProgress: (definition: AchievementDefinition, tasksCompleted: number, currentStreak: number) => number;
|
|
9
|
+
export declare const isStreakActive: (lastActivityDate: string | null) => boolean;
|
|
10
|
+
export declare const isSameDay: (date1: Date, date2: Date) => boolean;
|