vibefast-cli 0.6.2 → 0.7.1
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/__tests__/recipes.test.js +5 -5
- package/dist/__tests__/recipes.test.js.map +1 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +136 -48
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +106 -89
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/remove.js +1 -1
- package/dist/commands/remove.js.map +1 -1
- package/dist/core/__tests__/fsx.test.js +3 -1
- package/dist/core/__tests__/fsx.test.js.map +1 -1
- package/dist/core/__tests__/prompt.test.js +12 -12
- package/dist/core/__tests__/prompt.test.js.map +1 -1
- package/dist/core/__tests__/validate.test.js +4 -3
- package/dist/core/__tests__/validate.test.js.map +1 -1
- package/dist/core/auth.d.ts.map +1 -1
- package/dist/core/auth.js +8 -0
- package/dist/core/auth.js.map +1 -1
- package/dist/core/codemod.d.ts +13 -0
- package/dist/core/codemod.d.ts.map +1 -1
- package/dist/core/codemod.js +50 -0
- package/dist/core/codemod.js.map +1 -1
- package/dist/core/errors.js +1 -1
- package/dist/core/fsx.js +1 -1
- package/dist/core/fsx.js.map +1 -1
- package/dist/core/recipes.d.ts.map +1 -1
- package/dist/core/recipes.js +71 -9
- package/dist/core/recipes.js.map +1 -1
- package/package.json +1 -1
- package/recipes/animated-chip/recipe.json +15 -0
- package/recipes/animated-chip@latest.zip +0 -0
- package/recipes/animated-switch/recipe.json +15 -0
- package/recipes/animated-switch@latest.zip +0 -0
- package/recipes/audio-recorder@latest.zip +0 -0
- package/recipes/charts/apps/native/src/features/charts/components/doughnut-chart.tsx +29 -18
- package/recipes/charts@latest.zip +0 -0
- package/recipes/chatbot/apps/native/src/features/chatbot/components/message-list.tsx +1 -1
- package/recipes/chatbot/apps/native/src/features/chatbot/hooks/use-smart-scroll-manager.ts +6 -0
- package/recipes/chatbot/recipe.json +21 -5
- package/recipes/chatbot@latest.zip +0 -0
- package/recipes/glowing-button/recipe.json +1 -3
- package/recipes/glowing-button@latest.zip +0 -0
- package/recipes/image-analysis/recipe.json +36 -19
- package/recipes/image-analysis@latest.zip +0 -0
- package/recipes/image-generator/apps/native/src/features/image-generator/app/_layout.tsx +1 -0
- package/recipes/image-generator/apps/native/src/features/image-generator/app/gallery.tsx +1 -1
- package/recipes/image-generator/apps/native/src/features/image-generator/components/gallery-image.tsx +2 -3
- package/recipes/image-generator/recipe.json +5 -3
- package/recipes/image-generator@latest.zip +0 -0
- package/recipes/ios-widget/recipe.json +24 -0
- package/recipes/ios-widget@latest.zip +0 -0
- package/recipes/number-stepper/recipe.json +15 -0
- package/recipes/number-stepper@latest.zip +0 -0
- package/recipes/payments/recipe.json +30 -0
- package/recipes/payments@latest.zip +0 -0
- package/recipes/posthog.json +2 -1
- package/recipes/progress-circle/recipe.json +15 -0
- package/recipes/progress-circle@latest.zip +0 -0
- package/recipes/quiz@latest.zip +0 -0
- package/recipes/sentry.json +2 -1
- package/recipes/swipe-slider/recipe.json +15 -0
- package/recipes/swipe-slider@latest.zip +0 -0
- package/recipes/{0 → timeline}/recipe.json +3 -6
- package/recipes/timeline@latest.zip +0 -0
- package/recipes/tracker-app@latest.zip +0 -0
- package/recipes/upload-all.sh +13 -2
- package/recipes/voice-bot/recipe.json +15 -2
- package/recipes/voice-bot@latest.zip +0 -0
- package/recipes/wake-word/apps/native/src/app/(root)/(protected)/test-wake-word.tsx +0 -2
- package/recipes/wake-word/recipe.json +2 -2
- package/recipes/wake-word@latest.zip +0 -0
- package/src/__tests__/recipes.test.ts +5 -5
- package/src/commands/add.ts +230 -54
- package/src/commands/init.ts +118 -102
- package/src/commands/remove.ts +1 -1
- package/src/core/__tests__/fsx.test.ts +3 -1
- package/src/core/__tests__/prompt.test.ts +12 -12
- package/src/core/__tests__/validate.test.ts +4 -3
- package/src/core/auth.ts +8 -0
- package/src/core/codemod.ts +66 -0
- package/src/core/errors.ts +1 -1
- package/src/core/fsx.ts +1 -1
- package/src/core/recipes.ts +73 -9
- package/2/.claude/agents/architect.md +0 -74
- package/2/.claude/agents/convex-reviewer.md +0 -267
- package/2/.claude/agents/debug-detective.md +0 -62
- package/2/.claude/agents/learner.md +0 -64
- package/2/.claude/agents/perf-optimizer.md +0 -71
- package/2/.claude/agents/security-researcher.md +0 -42
- package/2/.claude/agents/tech-researcher.md +0 -46
- package/2/.claude/agents/ux-designer.md +0 -45
- package/2/.claude/commands/create-app-design.md +0 -279
- package/2/.claude/commands/create-prd-interactive.md +0 -113
- package/2/.claude/commands/create-prd.md +0 -111
- package/2/.claude/commands/create-tech-stack.md +0 -345
- package/2/.claude/commands/update-app-design.md +0 -298
- package/2/.claude/commands/update-project-structure.md +0 -14
- package/2/.claude/commands/update-tech-stack.md +0 -325
- package/2/.claude/docs/CONVEX_FEATURES_PLAN.md +0 -249
- package/2/.claude/docs/app-design-document.md +0 -0
- package/2/.claude/docs/project-status.md +0 -25
- package/2/.claude/docs/project-structure.md +0 -7
- package/2/.claude/docs/tech-stack.md +0 -157
- package/2/.claude/scripts/tree.sh +0 -70
- package/2/.claude/settings.json +0 -30
- package/2/.cursor/commands/code-review-high.md +0 -190
- package/2/.cursorignore +0 -3
- package/2/.github/ISSUE_TEMPLATE.md +0 -13
- package/2/.github/PULL_REQUEST_TEMPLATE.md +0 -23
- package/2/.github/actions/eas-build/action.yml +0 -85
- package/2/.github/actions/setup-jdk-generate-apk/action.yml +0 -48
- package/2/.github/actions/setup-node-pnpm-install/action.yml +0 -29
- package/2/.github/scripts/expo-doctor.sh +0 -26
- package/2/.github/workflows/compress-images.yml +0 -48
- package/2/.github/workflows/e2e-android-eas-build.yml +0 -111
- package/2/.github/workflows/e2e-android-maestro.yml +0 -52
- package/2/.github/workflows/e2e-android.yml +0 -119
- package/2/.github/workflows/eas-build-prod.yml +0 -43
- package/2/.github/workflows/eas-build-qa.yml +0 -47
- package/2/.github/workflows/expo-doctor.yml +0 -61
- package/2/.github/workflows/lint-ts.yml +0 -49
- package/2/.github/workflows/new-app-version.yml +0 -65
- package/2/.github/workflows/new-github-release.yml +0 -34
- package/2/.github/workflows/stale.yml +0 -24
- package/2/.github/workflows/test.yml +0 -50
- package/2/.github/workflows/type-check.yml +0 -54
- package/2/.husky/commit-msg +0 -1
- package/2/.husky/common.sh +0 -8
- package/2/.husky/post-merge +0 -18
- package/2/.husky/pre-commit +0 -24
- package/2/.prettierignore +0 -14
- package/2/.prettierrc.json +0 -10
- package/2/.vibefast/README.md +0 -59
- package/2/.vibefast/config.json +0 -4
- package/2/.vibefast/journal.json +0 -234
- package/2/.vibefast/starter.json +0 -5
- package/2/AGENTS.md +0 -48
- package/2/LICENSE +0 -21
- package/2/README.md +0 -127
- package/2/apps/native/__mocks__/bottom-sheet.js +0 -6
- package/2/apps/native/__mocks__/expo-router.js +0 -16
- package/2/apps/native/__mocks__/react-native-gesture-handler.ts +0 -17
- package/2/apps/native/app-env.d.ts +0 -2
- package/2/apps/native/app.config.ts +0 -167
- package/2/apps/native/assets/adaptive-icon.png +0 -0
- package/2/apps/native/assets/favicon.png +0 -0
- package/2/apps/native/assets/fonts/Inter.ttf +0 -0
- package/2/apps/native/assets/fonts/SF-Pro-Display-Bold.otf +0 -0
- package/2/apps/native/assets/fonts/SF-Pro-Display-Medium.otf +0 -0
- package/2/apps/native/assets/fonts/SF-Pro-Display-Regular.otf +0 -0
- package/2/apps/native/assets/fonts/SF-Pro-Display-Semibold.otf +0 -0
- package/2/apps/native/assets/fonts/SpaceMono-Regular.ttf +0 -0
- package/2/apps/native/assets/icon.png +0 -0
- package/2/apps/native/assets/images/cover-image.png +0 -0
- package/2/apps/native/assets/lottie-animations/onboarding-1.json +0 -6504
- package/2/apps/native/assets/lottie-animations/onboarding-2.json +0 -1993
- package/2/apps/native/assets/lottie-animations/onboarding-3.json +0 -50159
- package/2/apps/native/assets/lottie-animations/onboarding-4.json +0 -735
- package/2/apps/native/assets/lottie-animations/onboarding-6.json +0 -2167
- package/2/apps/native/assets/splash-icon.png +0 -0
- package/2/apps/native/babel.config.js +0 -39
- package/2/apps/native/eas.json +0 -75
- package/2/apps/native/env.js +0 -196
- package/2/apps/native/global.css +0 -51
- package/2/apps/native/index.ts +0 -5
- package/2/apps/native/jest-setup.ts +0 -7
- package/2/apps/native/jest.config.js +0 -72
- package/2/apps/native/metro.config.js +0 -85
- package/2/apps/native/nativewind-env.d.ts +0 -1
- package/2/apps/native/package.json +0 -232
- package/2/apps/native/scripts/DRY_RUN_REPORT.md +0 -0
- package/2/apps/native/scripts/QUICK_START.md +0 -76
- package/2/apps/native/scripts/README.md +0 -187
- package/2/apps/native/scripts/convex-setup.js +0 -48
- package/2/apps/native/scripts/genrate-apk-and-install +0 -39
- package/2/apps/native/scripts/i18next-syntax-validation.js +0 -23
- package/2/apps/native/scripts/starter-setup.mjs +0 -246
- package/2/apps/native/src/api-client/auth.ts +0 -68
- package/2/apps/native/src/api-client/chatbot.ts +0 -83
- package/2/apps/native/src/api-client/client.ts +0 -4
- package/2/apps/native/src/api-client/image-generator.ts +0 -34
- package/2/apps/native/src/api-client/index.ts +0 -27
- package/2/apps/native/src/api-client/payments.ts +0 -44
- package/2/apps/native/src/api-client/reporting.ts +0 -29
- package/2/apps/native/src/api-client/shared.ts +0 -43
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/_layout.tsx +0 -166
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/index.tsx +0 -174
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/profile.tsx +0 -320
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/settings.tsx +0 -344
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/_layout.tsx +0 -198
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/accordion.tsx +0 -60
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/advanced.tsx +0 -24
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/avatar.tsx +0 -154
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/badge-chips-toggle.tsx +0 -81
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/buttons.tsx +0 -24
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/charts.tsx +0 -3
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/date-picker.tsx +0 -120
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/file-picker.tsx +0 -133
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/gallery-video.tsx +0 -119
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/index.tsx +0 -69
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/inputs-stepper.tsx +0 -78
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/picker-dropdown.tsx +0 -56
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/popover-bottomsheet.tsx +0 -229
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/progress.tsx +0 -38
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/searchbar.tsx +0 -70
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/sliders.tsx +0 -93
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/spinner.tsx +0 -80
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/switch.tsx +0 -47
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/table.tsx +0 -352
- package/2/apps/native/src/app/(root)/(protected)/(tabs)/style/tabs-timeline.tsx +0 -122
- package/2/apps/native/src/app/(root)/(protected)/_layout.tsx +0 -143
- package/2/apps/native/src/app/(root)/(protected)/audio-recorder/index.tsx +0 -5
- package/2/apps/native/src/app/(root)/(protected)/charts/index.tsx +0 -6
- package/2/apps/native/src/app/(root)/(protected)/chatbot/index.tsx +0 -2
- package/2/apps/native/src/app/(root)/(protected)/image-generator/gallery.tsx +0 -3
- package/2/apps/native/src/app/(root)/(protected)/image-generator/index.tsx +0 -3
- package/2/apps/native/src/app/(root)/(protected)/paywall/index.tsx +0 -74
- package/2/apps/native/src/app/(root)/(protected)/paywall/local.tsx +0 -25
- package/2/apps/native/src/app/(root)/(protected)/paywall/remote.tsx +0 -23
- package/2/apps/native/src/app/(root)/(protected)/quick-actions-demo/index.tsx +0 -32
- package/2/apps/native/src/app/(root)/(protected)/quiz/index.tsx +0 -47
- package/2/apps/native/src/app/(root)/(protected)/test-wake-word.tsx +0 -214
- package/2/apps/native/src/app/(root)/(protected)/tracker-app/index.tsx +0 -1
- package/2/apps/native/src/app/(root)/(protected)/voice-bot/index.tsx +0 -27
- package/2/apps/native/src/app/(root)/(public)/(auth)/_layout.tsx +0 -44
- package/2/apps/native/src/app/(root)/(public)/(auth)/forgot-password.tsx +0 -185
- package/2/apps/native/src/app/(root)/(public)/(auth)/login.tsx +0 -219
- package/2/apps/native/src/app/(root)/(public)/(auth)/otp-verification.tsx +0 -369
- package/2/apps/native/src/app/(root)/(public)/(auth)/reset-password.tsx +0 -247
- package/2/apps/native/src/app/(root)/(public)/(auth)/signup.tsx +0 -207
- package/2/apps/native/src/app/(root)/(public)/_layout.tsx +0 -60
- package/2/apps/native/src/app/(root)/(public)/onboarding/demo-one.tsx +0 -5
- package/2/apps/native/src/app/(root)/(public)/onboarding/demo-two.tsx +0 -52
- package/2/apps/native/src/app/(root)/(public)/onboarding/index.tsx +0 -82
- package/2/apps/native/src/app/(root)/_layout.tsx +0 -30
- package/2/apps/native/src/app/+html.tsx +0 -46
- package/2/apps/native/src/app/[...messing].tsx +0 -24
- package/2/apps/native/src/app/_layout.tsx +0 -56
- package/2/apps/native/src/app/tsconfig.json +0 -3
- package/2/apps/native/src/components/advanced-ui/buttons/glowing-button.tsx +0 -366
- package/2/apps/native/src/components/analytics/navigation-tracker.tsx +0 -10
- package/2/apps/native/src/components/demo/advanced-ui-components.tsx +0 -46
- package/2/apps/native/src/components/demo/buttons-demo.tsx +0 -56
- package/2/apps/native/src/components/demo/colors-demo.tsx +0 -52
- package/2/apps/native/src/components/demo/dropdown-picker-demo.tsx +0 -274
- package/2/apps/native/src/components/demo/inputs-demo.tsx +0 -99
- package/2/apps/native/src/components/demo/notification-demo.tsx +0 -434
- package/2/apps/native/src/components/demo/title-demo.tsx +0 -16
- package/2/apps/native/src/components/demo/toast-demo.tsx +0 -81
- package/2/apps/native/src/components/demo/typography-demo.tsx +0 -28
- package/2/apps/native/src/components/performance/render-performance-monitor.tsx +0 -36
- package/2/apps/native/src/components/ui/accordion.tsx +0 -138
- package/2/apps/native/src/components/ui/avatar.tsx +0 -66
- package/2/apps/native/src/components/ui/badge.tsx +0 -68
- package/2/apps/native/src/components/ui/bottom-sheet.tsx +0 -61
- package/2/apps/native/src/components/ui/colors.js +0 -290
- package/2/apps/native/src/components/ui/core/button.tsx +0 -317
- package/2/apps/native/src/components/ui/core/card.tsx +0 -40
- package/2/apps/native/src/components/ui/core/checkbox.tsx +0 -264
- package/2/apps/native/src/components/ui/core/feature-button.tsx +0 -162
- package/2/apps/native/src/components/ui/core/focus-aware-status-bar.tsx +0 -21
- package/2/apps/native/src/components/ui/core/image.tsx +0 -30
- package/2/apps/native/src/components/ui/core/inputs/floating-text-input.tsx +0 -369
- package/2/apps/native/src/components/ui/core/inputs/input-otp.tsx +0 -304
- package/2/apps/native/src/components/ui/core/inputs/input.tsx +0 -373
- package/2/apps/native/src/components/ui/core/list.tsx +0 -60
- package/2/apps/native/src/components/ui/core/navigation/animated-header.tsx +0 -87
- package/2/apps/native/src/components/ui/core/navigation/screen-footer.tsx +0 -67
- package/2/apps/native/src/components/ui/core/overlays/dropdown.tsx +0 -290
- package/2/apps/native/src/components/ui/core/overlays/full-screen-loading.tsx +0 -15
- package/2/apps/native/src/components/ui/core/overlays/modal-keyboard-aware-scroll-view.tsx +0 -46
- package/2/apps/native/src/components/ui/core/overlays/modal.tsx +0 -247
- package/2/apps/native/src/components/ui/core/pagination-dots.tsx +0 -231
- package/2/apps/native/src/components/ui/core/pressable.tsx +0 -48
- package/2/apps/native/src/components/ui/core/progress-bar.tsx +0 -47
- package/2/apps/native/src/components/ui/core/progress.tsx +0 -149
- package/2/apps/native/src/components/ui/core/select.tsx +0 -261
- package/2/apps/native/src/components/ui/core/spinner.tsx +0 -387
- package/2/apps/native/src/components/ui/core/text.tsx +0 -45
- package/2/apps/native/src/components/ui/core/toast.tsx +0 -190
- package/2/apps/native/src/components/ui/custom-switch.tsx +0 -90
- package/2/apps/native/src/components/ui/date-time-picker.tsx +0 -268
- package/2/apps/native/src/components/ui/debug.ts +0 -2
- package/2/apps/native/src/components/ui/extras/debug-credit-tester.tsx +0 -107
- package/2/apps/native/src/components/ui/extras/debug-mmkv-state.tsx +0 -53
- package/2/apps/native/src/components/ui/extras/handle-error.ts +0 -191
- package/2/apps/native/src/components/ui/extras/hello-wave.tsx +0 -70
- package/2/apps/native/src/components/ui/extras/icon.tsx +0 -36
- package/2/apps/native/src/components/ui/extras/network-connectivity-wrapper.tsx +0 -36
- package/2/apps/native/src/components/ui/extras/offline-indicator.tsx +0 -55
- package/2/apps/native/src/components/ui/extras/social-login-buttons.tsx +0 -296
- package/2/apps/native/src/components/ui/file-picker.tsx +0 -177
- package/2/apps/native/src/components/ui/gallery.tsx +0 -79
- package/2/apps/native/src/components/ui/icons/apple.tsx +0 -19
- package/2/apps/native/src/components/ui/icons/arrow-right.tsx +0 -26
- package/2/apps/native/src/components/ui/icons/camera.tsx +0 -26
- package/2/apps/native/src/components/ui/icons/caret-down.tsx +0 -20
- package/2/apps/native/src/components/ui/icons/chevron-up.tsx +0 -21
- package/2/apps/native/src/components/ui/icons/claude.tsx +0 -15
- package/2/apps/native/src/components/ui/icons/copy.tsx +0 -27
- package/2/apps/native/src/components/ui/icons/deepseek.tsx +0 -15
- package/2/apps/native/src/components/ui/icons/download.tsx +0 -32
- package/2/apps/native/src/components/ui/icons/feed.tsx +0 -12
- package/2/apps/native/src/components/ui/icons/gemini.tsx +0 -15
- package/2/apps/native/src/components/ui/icons/github.tsx +0 -30
- package/2/apps/native/src/components/ui/icons/google.tsx +0 -24
- package/2/apps/native/src/components/ui/icons/groq.tsx +0 -15
- package/2/apps/native/src/components/ui/icons/home.tsx +0 -19
- package/2/apps/native/src/components/ui/icons/index.tsx +0 -26
- package/2/apps/native/src/components/ui/icons/language.tsx +0 -33
- package/2/apps/native/src/components/ui/icons/llama.tsx +0 -15
- package/2/apps/native/src/components/ui/icons/microphone.tsx +0 -20
- package/2/apps/native/src/components/ui/icons/mistral.tsx +0 -22
- package/2/apps/native/src/components/ui/icons/nutrition.tsx +0 -15
- package/2/apps/native/src/components/ui/icons/openai.tsx +0 -15
- package/2/apps/native/src/components/ui/icons/perplexity.tsx +0 -22
- package/2/apps/native/src/components/ui/icons/qwen.tsx +0 -15
- package/2/apps/native/src/components/ui/icons/rate.tsx +0 -24
- package/2/apps/native/src/components/ui/icons/report.tsx +0 -20
- package/2/apps/native/src/components/ui/icons/send-horizontal.tsx +0 -26
- package/2/apps/native/src/components/ui/icons/settings.tsx +0 -12
- package/2/apps/native/src/components/ui/icons/share.tsx +0 -16
- package/2/apps/native/src/components/ui/icons/square.tsx +0 -9
- package/2/apps/native/src/components/ui/icons/style.tsx +0 -22
- package/2/apps/native/src/components/ui/icons/support.tsx +0 -27
- package/2/apps/native/src/components/ui/icons/trash2.tsx +0 -42
- package/2/apps/native/src/components/ui/icons/user.tsx +0 -12
- package/2/apps/native/src/components/ui/icons/website.tsx +0 -28
- package/2/apps/native/src/components/ui/icons/wifi-off.tsx +0 -17
- package/2/apps/native/src/components/ui/index.tsx +0 -14
- package/2/apps/native/src/components/ui/nav-item.tsx +0 -42
- package/2/apps/native/src/components/ui/patterns/index.ts +0 -16
- package/2/apps/native/src/components/ui/picker.tsx +0 -244
- package/2/apps/native/src/components/ui/popover.tsx +0 -313
- package/2/apps/native/src/components/ui/primitives/index.ts +0 -38
- package/2/apps/native/src/components/ui/radio-group.tsx +0 -47
- package/2/apps/native/src/components/ui/searchbar.tsx +0 -118
- package/2/apps/native/src/components/ui/sheet.tsx +0 -93
- package/2/apps/native/src/components/ui/switch.tsx +0 -37
- package/2/apps/native/src/components/ui/table.tsx +0 -296
- package/2/apps/native/src/components/ui/tabs.tsx +0 -115
- package/2/apps/native/src/components/ui/toggle.tsx +0 -50
- package/2/apps/native/src/components/ui/utils.tsx +0 -34
- package/2/apps/native/src/components/ui/video.tsx +0 -39
- package/2/apps/native/src/core/analytics/analytics-service.ts +0 -94
- package/2/apps/native/src/core/analytics/index.ts +0 -2
- package/2/apps/native/src/core/analytics/posthog-analytics-adapter.ts +0 -192
- package/2/apps/native/src/core/auth/auth-service.ts +0 -33
- package/2/apps/native/src/core/auth/index.ts +0 -1
- package/2/apps/native/src/core/cache/__tests__/cache-service.test.ts +0 -599
- package/2/apps/native/src/core/cache/cache-service.ts +0 -89
- package/2/apps/native/src/core/cache/index.ts +0 -45
- package/2/apps/native/src/core/config/config.service.ts +0 -153
- package/2/apps/native/src/core/config/index.ts +0 -2
- package/2/apps/native/src/core/config/telemetry.ts +0 -38
- package/2/apps/native/src/core/local-notifications/local-notification-manager.ts +0 -409
- package/2/apps/native/src/core/logging/custom-transports.ts +0 -126
- package/2/apps/native/src/core/logging/index.ts +0 -1
- package/2/apps/native/src/core/logging/logger.ts +0 -182
- package/2/apps/native/src/core/navigation/deep-link-handler.ts +0 -295
- package/2/apps/native/src/core/navigation/navigation-types.ts +0 -53
- package/2/apps/native/src/core/payments/index.ts +0 -1
- package/2/apps/native/src/core/payments/payment-service.ts +0 -32
- package/2/apps/native/src/core/quick-actions/index.ts +0 -2
- package/2/apps/native/src/core/quick-actions/quick-actions-adapter.ts +0 -54
- package/2/apps/native/src/core/quick-actions/types.ts +0 -29
- package/2/apps/native/src/core/storage/index.ts +0 -1
- package/2/apps/native/src/core/storage/mmkv.ts +0 -62
- package/2/apps/native/src/core/storage/notification-storage.ts +0 -312
- package/2/apps/native/src/core/types/common.ts +0 -0
- package/2/apps/native/src/core/utils/convex-http-api.ts +0 -30
- package/2/apps/native/src/features/audio-recorder/components/audio-player.tsx +0 -301
- package/2/apps/native/src/features/audio-recorder/components/audio-recorder.tsx +0 -373
- package/2/apps/native/src/features/audio-recorder/components/audio-waveform.tsx +0 -270
- package/2/apps/native/src/features/audio-recorder/components/index.ts +0 -4
- package/2/apps/native/src/features/audio-recorder/components/recording-list.tsx +0 -89
- package/2/apps/native/src/features/audio-recorder/demo/audio-player-demo.tsx +0 -66
- package/2/apps/native/src/features/audio-recorder/demo/audio-recorder-cloud.tsx +0 -68
- package/2/apps/native/src/features/audio-recorder/demo/audio-recorder-interview.tsx +0 -102
- package/2/apps/native/src/features/audio-recorder/demo/basic.tsx +0 -27
- package/2/apps/native/src/features/audio-recorder/demo/index.ts +0 -5
- package/2/apps/native/src/features/audio-recorder/demo/with-recording-list-demo.tsx +0 -82
- package/2/apps/native/src/features/authentication/components/auth-watcher.tsx +0 -115
- package/2/apps/native/src/features/authentication/components/login-form.tsx +0 -85
- package/2/apps/native/src/features/authentication/services/__tests__/convex-auth.adapter.test.ts +0 -399
- package/2/apps/native/src/features/authentication/services/convex-auth.adapter.ts +0 -497
- package/2/apps/native/src/features/authentication/services/index.ts +0 -2
- package/2/apps/native/src/features/charts/README.md +0 -185
- package/2/apps/native/src/features/charts/app/preview.tsx +0 -226
- package/2/apps/native/src/features/charts/components/area-chart.tsx +0 -43
- package/2/apps/native/src/features/charts/components/bar-chart.tsx +0 -146
- package/2/apps/native/src/features/charts/components/candlestick-chart.tsx +0 -199
- package/2/apps/native/src/features/charts/components/chart-card.tsx +0 -68
- package/2/apps/native/src/features/charts/components/column-chart.tsx +0 -146
- package/2/apps/native/src/features/charts/components/doughnut-chart.tsx +0 -260
- package/2/apps/native/src/features/charts/components/index.ts +0 -13
- package/2/apps/native/src/features/charts/components/line-chart.tsx +0 -311
- package/2/apps/native/src/features/charts/components/radar-chart.tsx +0 -183
- package/2/apps/native/src/features/charts/components/radial-bar-chart.tsx +0 -191
- package/2/apps/native/src/features/charts/components/stacked-area-chart.tsx +0 -268
- package/2/apps/native/src/features/charts/components/stacked-bar-chart.tsx +0 -325
- package/2/apps/native/src/features/charts/data/mock-data.ts +0 -186
- package/2/apps/native/src/features/charts/types/index.ts +0 -69
- package/2/apps/native/src/features/chatbot/app/index.tsx +0 -303
- package/2/apps/native/src/features/chatbot/components/chat-header-buttons.tsx +0 -60
- package/2/apps/native/src/features/chatbot/components/chat-input-bar.tsx +0 -470
- package/2/apps/native/src/features/chatbot/components/chat-markdown.tsx +0 -576
- package/2/apps/native/src/features/chatbot/components/chat-message-bubble.tsx +0 -247
- package/2/apps/native/src/features/chatbot/components/chat-settings-modal.tsx +0 -162
- package/2/apps/native/src/features/chatbot/components/image-preview-list.tsx +0 -116
- package/2/apps/native/src/features/chatbot/components/markdown/code-block.tsx +0 -166
- package/2/apps/native/src/features/chatbot/components/markdown/index.ts +0 -11
- package/2/apps/native/src/features/chatbot/components/markdown/table-renderer.tsx +0 -130
- package/2/apps/native/src/features/chatbot/components/message-error-boundary.tsx +0 -79
- package/2/apps/native/src/features/chatbot/components/message-list.tsx +0 -174
- package/2/apps/native/src/features/chatbot/components/model-selector.tsx +0 -284
- package/2/apps/native/src/features/chatbot/components/report-content-modal.tsx +0 -189
- package/2/apps/native/src/features/chatbot/components/suggested-messages.tsx +0 -68
- package/2/apps/native/src/features/chatbot/constants/models.ts +0 -21
- package/2/apps/native/src/features/chatbot/constants/report-reasons.ts +0 -10
- package/2/apps/native/src/features/chatbot/hooks/use-attachment-cache.ts +0 -144
- package/2/apps/native/src/features/chatbot/hooks/use-chat-config.ts +0 -665
- package/2/apps/native/src/features/chatbot/hooks/use-chat-handlers.ts +0 -360
- package/2/apps/native/src/features/chatbot/hooks/use-chatbot-settings.ts +0 -90
- package/2/apps/native/src/features/chatbot/hooks/use-conversation.ts +0 -80
- package/2/apps/native/src/features/chatbot/hooks/use-image-picker.ts +0 -123
- package/2/apps/native/src/features/chatbot/hooks/use-keyboard-coordinator.ts +0 -162
- package/2/apps/native/src/features/chatbot/hooks/use-smart-scroll-manager.ts +0 -214
- package/2/apps/native/src/features/chatbot/models/index.ts +0 -87
- package/2/apps/native/src/features/chatbot/models/models.ts +0 -163
- package/2/apps/native/src/features/chatbot/models/providers.ts +0 -63
- package/2/apps/native/src/features/chatbot/models/types.ts +0 -41
- package/2/apps/native/src/features/chatbot/services/file-uploader.ts +0 -239
- package/2/apps/native/src/features/chatbot/services/message-handler-service.ts +0 -181
- package/2/apps/native/src/features/chatbot/types/index.ts +0 -61
- package/2/apps/native/src/features/chatbot/utils/chat-telemetry.ts +0 -92
- package/2/apps/native/src/features/image-generator/app/_layout.tsx +0 -26
- package/2/apps/native/src/features/image-generator/app/gallery.tsx +0 -217
- package/2/apps/native/src/features/image-generator/app/index.tsx +0 -237
- package/2/apps/native/src/features/image-generator/components/gallery-image.tsx +0 -25
- package/2/apps/native/src/features/image-generator/components/image-detail-modal.tsx +0 -215
- package/2/apps/native/src/features/image-generator/components/image-model-selector.tsx +0 -210
- package/2/apps/native/src/features/image-generator/components/image-placeholder.tsx +0 -26
- package/2/apps/native/src/features/image-generator/hooks/use-image-gallery.ts +0 -71
- package/2/apps/native/src/features/image-generator/hooks/use-image-generator-settings.ts +0 -152
- package/2/apps/native/src/features/image-generator/hooks/use-image-generator.ts +0 -93
- package/2/apps/native/src/features/image-generator/models/models.ts +0 -66
- package/2/apps/native/src/features/image-generator/services/image-gallery-service.ts +0 -98
- package/2/apps/native/src/features/image-generator/services/image-save-service.ts +0 -121
- package/2/apps/native/src/features/onboarding/analytics/index.ts +0 -9
- package/2/apps/native/src/features/onboarding/components/onboarding-with-analytics.tsx +0 -141
- package/2/apps/native/src/features/onboarding/components/onboarding.tsx +0 -173
- package/2/apps/native/src/features/onboarding/config/onboarding-flow-config.ts +0 -189
- package/2/apps/native/src/features/onboarding/demo-one/app/index.tsx +0 -43
- package/2/apps/native/src/features/onboarding/demo-one/data.ts +0 -32
- package/2/apps/native/src/features/onboarding/hooks/use-onboarding-analytics.ts +0 -323
- package/2/apps/native/src/features/onboarding/services/onboarding-analytics.ts +0 -432
- package/2/apps/native/src/features/payments/README.md +0 -200
- package/2/apps/native/src/features/payments/app/local-paywall.tsx +0 -194
- package/2/apps/native/src/features/payments/app/remote-paywall.tsx +0 -79
- package/2/apps/native/src/features/payments/components/payment-initializer.tsx +0 -95
- package/2/apps/native/src/features/payments/components/paywall-error-state.tsx +0 -60
- package/2/apps/native/src/features/payments/components/paywall-local-mode.tsx +0 -116
- package/2/apps/native/src/features/payments/components/paywall-product-card.tsx +0 -133
- package/2/apps/native/src/features/payments/components/paywall-remote-mode.tsx +0 -146
- package/2/apps/native/src/features/payments/hooks/use-entitlement.ts +0 -63
- package/2/apps/native/src/features/payments/index.ts +0 -8
- package/2/apps/native/src/features/payments/services/revenuecat-adapter.ts +0 -407
- package/2/apps/native/src/features/quick-actions/components/quick-actions-demo.tsx +0 -139
- package/2/apps/native/src/features/quick-actions/config/default-actions.ts +0 -83
- package/2/apps/native/src/features/quick-actions/hooks/use-quick-actions.ts +0 -45
- package/2/apps/native/src/features/quick-actions/index.ts +0 -4
- package/2/apps/native/src/features/quick-actions/utils/quick-actions-manager.ts +0 -105
- package/2/apps/native/src/features/quiz/components/question.tsx +0 -67
- package/2/apps/native/src/features/quiz/config.ts +0 -11
- package/2/apps/native/src/features/quiz/index.tsx +0 -133
- package/2/apps/native/src/features/settings/ui/debug-info.tsx +0 -75
- package/2/apps/native/src/features/settings/ui/dev-tools.tsx +0 -1
- package/2/apps/native/src/features/settings/ui/item.tsx +0 -45
- package/2/apps/native/src/features/settings/ui/items-container.tsx +0 -23
- package/2/apps/native/src/features/settings/ui/language-item.tsx +0 -52
- package/2/apps/native/src/features/settings/ui/notification-item.tsx +0 -59
- package/2/apps/native/src/features/settings/ui/theme-item.tsx +0 -45
- package/2/apps/native/src/features/tracker-app/app/index.tsx +0 -108
- package/2/apps/native/src/features/tracker-app/components/animated-number.tsx +0 -102
- package/2/apps/native/src/features/tracker-app/components/calorie-card.tsx +0 -66
- package/2/apps/native/src/features/tracker-app/components/circular-progress.tsx +0 -97
- package/2/apps/native/src/features/tracker-app/components/floating-add-button.tsx +0 -27
- package/2/apps/native/src/features/tracker-app/components/macro-card.tsx +0 -80
- package/2/apps/native/src/features/tracker-app/components/promo-banner.tsx +0 -98
- package/2/apps/native/src/features/tracker-app/components/recently-logged.tsx +0 -64
- package/2/apps/native/src/features/tracker-app/components/week-calendar.tsx +0 -68
- package/2/apps/native/src/features/vibefast-features.ts +0 -42
- package/2/apps/native/src/features/voice-bot/README.md +0 -185
- package/2/apps/native/src/features/voice-bot/components/conversation-status.tsx +0 -76
- package/2/apps/native/src/features/voice-bot/components/index.ts +0 -4
- package/2/apps/native/src/features/voice-bot/components/message-input.tsx +0 -98
- package/2/apps/native/src/features/voice-bot/components/voice-bot-screen.tsx +0 -173
- package/2/apps/native/src/features/voice-bot/components/voice-controls.tsx +0 -73
- package/2/apps/native/src/features/voice-bot/index.ts +0 -3
- package/2/apps/native/src/features/voice-bot/services/index.ts +0 -1
- package/2/apps/native/src/features/voice-bot/services/use-voice-bot.ts +0 -161
- package/2/apps/native/src/features/voice-bot/types.ts +0 -29
- package/2/apps/native/src/features/wake-word/components/index.ts +0 -1
- package/2/apps/native/src/features/wake-word/components/wake-word-indicator.tsx +0 -61
- package/2/apps/native/src/features/wake-word/constants.ts +0 -10
- package/2/apps/native/src/features/wake-word/hooks/use-wake-word.ts +0 -181
- package/2/apps/native/src/features/wake-word/index.ts +0 -22
- package/2/apps/native/src/features/wake-word/services/audio-session.ts +0 -40
- package/2/apps/native/src/features/wake-word/services/event-bus.ts +0 -31
- package/2/apps/native/src/features/wake-word/services/keywords.ts +0 -88
- package/2/apps/native/src/features/wake-word/services/wake-word-manager.ts +0 -249
- package/2/apps/native/src/features/wake-word/types.ts +0 -22
- package/2/apps/native/src/lib/env.js +0 -13
- package/2/apps/native/src/lib/hooks/index.tsx +0 -6
- package/2/apps/native/src/lib/hooks/use-device-identifier.tsx +0 -80
- package/2/apps/native/src/lib/hooks/use-gradual-animation.ts +0 -28
- package/2/apps/native/src/lib/hooks/use-is-first-time.tsx +0 -25
- package/2/apps/native/src/lib/hooks/use-navigation-analytics.ts +0 -44
- package/2/apps/native/src/lib/hooks/use-navigation-options.tsx +0 -87
- package/2/apps/native/src/lib/hooks/use-push-notifications.ts +0 -250
- package/2/apps/native/src/lib/hooks/use-responsive-size.tsx +0 -37
- package/2/apps/native/src/lib/hooks/use-selected-theme.tsx +0 -38
- package/2/apps/native/src/lib/hooks/use-viewport-lazy-loading.tsx +0 -124
- package/2/apps/native/src/lib/i18n/index.tsx +0 -30
- package/2/apps/native/src/lib/i18n/react-i18next.d.ts +0 -9
- package/2/apps/native/src/lib/i18n/resources.ts +0 -25
- package/2/apps/native/src/lib/i18n/types.ts +0 -23
- package/2/apps/native/src/lib/i18n/utils.tsx +0 -112
- package/2/apps/native/src/lib/index.tsx +0 -3
- package/2/apps/native/src/lib/state/auth-client-slice.ts +0 -34
- package/2/apps/native/src/lib/state/index.ts +0 -1
- package/2/apps/native/src/lib/storage.tsx +0 -7
- package/2/apps/native/src/lib/test-utils.tsx +0 -43
- package/2/apps/native/src/lib/use-theme-config.tsx +0 -108
- package/2/apps/native/src/lib/utils.ts +0 -29
- package/2/apps/native/src/polyfills.ts +0 -61
- package/2/apps/native/src/providers/convex-provider.tsx +0 -31
- package/2/apps/native/src/providers/index.tsx +0 -6
- package/2/apps/native/src/providers/notification-provider.tsx +0 -168
- package/2/apps/native/src/providers/posthog-provider.tsx +0 -47
- package/2/apps/native/src/providers/root-providers.tsx +0 -46
- package/2/apps/native/src/providers/sentry-provider.tsx +0 -62
- package/2/apps/native/src/providers/splash-screen-provider.tsx +0 -122
- package/2/apps/native/src/providers/theme-provider.tsx +0 -67
- package/2/apps/native/src/translations/ar.json +0 -394
- package/2/apps/native/src/translations/de.json +0 -394
- package/2/apps/native/src/translations/en.json +0 -394
- package/2/apps/native/src/translations/es.json +0 -394
- package/2/apps/native/src/translations/fr.json +0 -394
- package/2/apps/native/src/types/flash-list.d.ts +0 -3
- package/2/apps/native/src/types/index.ts +0 -3
- package/2/apps/native/src/types/react-native-reanimated.d.ts +0 -5
- package/2/apps/native/tailwind.config.js +0 -57
- package/2/apps/native/targets/widget/AppIntent.swift +0 -46
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@1x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@2x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@3x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@1x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@2x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@3x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@1x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@2x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@3x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-60x60@2x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-60x60@3x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-76x76@1x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-76x76@2x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-83.5x83.5@2x.png +0 -0
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -122
- package/2/apps/native/targets/widget/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png +0 -0
- package/2/apps/native/targets/widget/CalorieTrackerWidget.swift +0 -424
- package/2/apps/native/targets/widget/HabitTrackerWidget.swift +0 -305
- package/2/apps/native/targets/widget/Info.plist +0 -11
- package/2/apps/native/targets/widget/WidgetLiveActivity.swift +0 -75
- package/2/apps/native/targets/widget/expo-target.config.js +0 -10
- package/2/apps/native/targets/widget/generated.entitlements +0 -5
- package/2/apps/native/targets/widget/index.swift +0 -18
- package/2/apps/native/targets/widget/widgets.swift +0 -96
- package/2/apps/native/tsconfig.json +0 -88
- package/2/apps/native/vitest.config.mts +0 -14
- package/2/apps/web/README.md +0 -36
- package/2/apps/web/app/favicon.ico +0 -0
- package/2/apps/web/app/globals.css +0 -122
- package/2/apps/web/app/layout.tsx +0 -38
- package/2/apps/web/app/page.tsx +0 -35
- package/2/apps/web/app/users/page.tsx +0 -301
- package/2/apps/web/components/AdminDashboard.tsx +0 -336
- package/2/apps/web/components/AppleLogo.tsx +0 -15
- package/2/apps/web/components/GitHubLogo.tsx +0 -11
- package/2/apps/web/components/GoogleLogo.tsx +0 -23
- package/2/apps/web/components/Layout.tsx +0 -77
- package/2/apps/web/components/ThemeToggle.tsx +0 -23
- package/2/apps/web/components/UserMenu.tsx +0 -66
- package/2/apps/web/components/auth/CodeInput.tsx +0 -24
- package/2/apps/web/components/auth/ResetPasswordWithEmailCode.tsx +0 -85
- package/2/apps/web/components/auth/SignInFormEmailCode.tsx +0 -72
- package/2/apps/web/components/auth/SignInFormEmailLink.tsx +0 -81
- package/2/apps/web/components/auth/SignInFormPassword.tsx +0 -17
- package/2/apps/web/components/auth/SignInFormPasswordAndCustomField.tsx +0 -42
- package/2/apps/web/components/auth/SignInFormPasswordAndResetViaCode.tsx +0 -32
- package/2/apps/web/components/auth/SignInFormPasswordAndVerifyViaCode.tsx +0 -86
- package/2/apps/web/components/auth/SignInFormPhoneCode.tsx +0 -89
- package/2/apps/web/components/auth/SignInFormsShowcase.tsx +0 -64
- package/2/apps/web/components/auth/SignInMethodDivider.tsx +0 -17
- package/2/apps/web/components/auth/SignInWithEmailCode.tsx +0 -49
- package/2/apps/web/components/auth/SignInWithOAuth.tsx +0 -16
- package/2/apps/web/components/auth/SignInWithPassword.tsx +0 -100
- package/2/apps/web/components/auth/oauth/SignInWithApple.tsx +0 -27
- package/2/apps/web/components/auth/oauth/SignInWithGitHub.tsx +0 -27
- package/2/apps/web/components/auth/oauth/SignInWithGoogle.tsx +0 -27
- package/2/apps/web/components/ui/button.tsx +0 -60
- package/2/apps/web/components/ui/card.tsx +0 -92
- package/2/apps/web/components/ui/dialog.tsx +0 -143
- package/2/apps/web/components/ui/dropdown-menu.tsx +0 -257
- package/2/apps/web/components/ui/input-otp.tsx +0 -77
- package/2/apps/web/components/ui/input.tsx +0 -21
- package/2/apps/web/components/ui/skeleton.tsx +0 -13
- package/2/apps/web/components/ui/tabs.tsx +0 -66
- package/2/apps/web/components/ui/toast.tsx +0 -130
- package/2/apps/web/components/ui/toaster.tsx +0 -36
- package/2/apps/web/components/ui/toggle-group.tsx +0 -83
- package/2/apps/web/components/ui/toggle.tsx +0 -47
- package/2/apps/web/components/ui/use-toast.ts +0 -192
- package/2/apps/web/components.json +0 -22
- package/2/apps/web/eslint.config.mjs +0 -18
- package/2/apps/web/lib/convex-provider.tsx +0 -18
- package/2/apps/web/lib/utils.ts +0 -6
- package/2/apps/web/next.config.ts +0 -7
- package/2/apps/web/package.json +0 -46
- package/2/apps/web/postcss.config.mjs +0 -7
- package/2/apps/web/public/file.svg +0 -1
- package/2/apps/web/public/globe.svg +0 -1
- package/2/apps/web/public/next.svg +0 -1
- package/2/apps/web/public/vercel.svg +0 -1
- package/2/apps/web/public/window.svg +0 -1
- package/2/apps/web/tsconfig.json +0 -34
- package/2/bts.jsonc +0 -21
- package/2/commitlint.config.js +0 -1
- package/2/eslint.config.mjs +0 -182
- package/2/lint-staged.config.js +0 -16
- package/2/package.json +0 -64
- package/2/packages/backend/.env.example +0 -20
- package/2/packages/backend/convex/README.md +0 -90
- package/2/packages/backend/convex/_generated/api.d.ts +0 -2599
- package/2/packages/backend/convex/_generated/api.js +0 -23
- package/2/packages/backend/convex/_generated/dataModel.d.ts +0 -60
- package/2/packages/backend/convex/_generated/server.d.ts +0 -149
- package/2/packages/backend/convex/_generated/server.js +0 -90
- package/2/packages/backend/convex/agents.ts +0 -116
- package/2/packages/backend/convex/auth.config.ts +0 -8
- package/2/packages/backend/convex/auth.ts +0 -103
- package/2/packages/backend/convex/authCustomEmailOtpProvider.ts +0 -175
- package/2/packages/backend/convex/authOtp.ts +0 -144
- package/2/packages/backend/convex/authPasswordReset.ts +0 -367
- package/2/packages/backend/convex/authPasswordResetActions.ts +0 -150
- package/2/packages/backend/convex/chatbot/index.ts +0 -30
- package/2/packages/backend/convex/chatbotAgent.ts +0 -1085
- package/2/packages/backend/convex/chatbotHistory.ts +0 -307
- package/2/packages/backend/convex/convex.config.ts +0 -13
- package/2/packages/backend/convex/deviceGrants.ts +0 -58
- package/2/packages/backend/convex/grantFunctions.ts +0 -444
- package/2/packages/backend/convex/http.ts +0 -8
- package/2/packages/backend/convex/imageGeneration/index.ts +0 -12
- package/2/packages/backend/convex/imageGeneratorFunctions.ts +0 -290
- package/2/packages/backend/convex/lib/ai/analysisConfigs.ts +0 -257
- package/2/packages/backend/convex/lib/ai/config.ts +0 -71
- package/2/packages/backend/convex/lib/ai/geminiAdapter.ts +0 -43
- package/2/packages/backend/convex/lib/ai/openaiAdapter.ts +0 -43
- package/2/packages/backend/convex/lib/ai/schemas.ts +0 -79
- package/2/packages/backend/convex/lib/config.ts +0 -111
- package/2/packages/backend/convex/lib/rateLimit.ts +0 -100
- package/2/packages/backend/convex/lib/telemetry.ts +0 -29
- package/2/packages/backend/convex/paymentFunctions.ts +0 -119
- package/2/packages/backend/convex/payments/index.ts +0 -13
- package/2/packages/backend/convex/pushNotificationFunctions.ts +0 -342
- package/2/packages/backend/convex/ragKnowledge.ts +0 -714
- package/2/packages/backend/convex/rateLimit.ts +0 -13
- package/2/packages/backend/convex/recordingFunctions.ts +0 -98
- package/2/packages/backend/convex/reportFunctions.ts +0 -344
- package/2/packages/backend/convex/reporting/index.ts +0 -9
- package/2/packages/backend/convex/router.ts +0 -81
- package/2/packages/backend/convex/schema.ts +0 -237
- package/2/packages/backend/convex/shared/email.ts +0 -172
- package/2/packages/backend/convex/shared/files.ts +0 -96
- package/2/packages/backend/convex/shared/index.ts +0 -17
- package/2/packages/backend/convex/shared/templates/PasswordResetEmail.tsx +0 -72
- package/2/packages/backend/convex/shared/templates/VerificationCodeEmail.tsx +0 -65
- package/2/packages/backend/convex/sharedUsers.ts +0 -48
- package/2/packages/backend/convex/tools/index.ts +0 -18
- package/2/packages/backend/convex/tools/knowledgeRetrieval.ts +0 -92
- package/2/packages/backend/convex/tools/tavilySearch.ts +0 -83
- package/2/packages/backend/convex/tools/userProfile.ts +0 -72
- package/2/packages/backend/convex/tsconfig.json +0 -25
- package/2/packages/backend/convex/users.ts +0 -54
- package/2/packages/backend/index.ts +0 -20
- package/2/packages/backend/package.json +0 -32
- package/2/packages/ui/README.md +0 -63
- package/2/packages/ui/index.ts +0 -1
- package/2/packages/ui/package.json +0 -21
- package/2/packages/ui/src/components/SharedButton.tsx +0 -31
- package/2/packages/ui/src/components/SharedCard.tsx +0 -48
- package/2/packages/ui/src/components/index.ts +0 -2
- package/2/packages/ui/tsconfig.json +0 -10
- package/2/pnpm-lock.yaml +0 -23292
- package/2/pnpm-workspace.yaml +0 -3
- package/2/scripts/i18next-syntax-validation.js +0 -1
- package/2/tsconfig.json +0 -43
- package/2/turbo.json +0 -33
- package/2/vercel.json +0 -6
- package/2/vf-agent/agent-teams/team-vibefast.yaml +0 -14
- package/2/vf-agent/agents/analyst.md +0 -53
- package/2/vf-agent/agents/architect.md +0 -105
- package/2/vf-agent/agents/dev.md +0 -40
- package/2/vf-agent/agents/orchestrator.md +0 -181
- package/2/vf-agent/agents/pm.md +0 -48
- package/2/vf-agent/agents/po.md +0 -38
- package/2/vf-agent/agents/qa.md +0 -30
- package/2/vf-agent/agents/sm.md +0 -38
- package/2/vf-agent/agents/ux-expert.md +0 -33
- package/2/vf-agent/checklists/po-master-checklist.md +0 -73
- package/2/vf-agent/checklists/story-dod-checklist.md +0 -37
- package/2/vf-agent/core-config.yaml +0 -43
- package/2/vf-agent/data/knowledge_base/backend/convex-advanced.md +0 -43
- package/2/vf-agent/data/knowledge_base/backend/convex-database.md +0 -53
- package/2/vf-agent/data/knowledge_base/backend/convex-main.md +0 -65
- package/2/vf-agent/data/knowledge_base/backend/full-guidelines.md +0 -795
- package/2/vf-agent/data/knowledge_base/coding-standards.md +0 -253
- package/2/vf-agent/data/knowledge_base/frontend/full-guidelines.md +0 -254
- package/2/vf-agent/data/knowledge_base/frontend/image-handling.md +0 -48
- package/2/vf-agent/data/knowledge_base/frontend/react-native-main.md +0 -24
- package/2/vf-agent/data/knowledge_base/frontend/ui-and-styling.md +0 -169
- package/2/vf-agent/data/knowledge_base/general-principles.md +0 -26
- package/2/vf-agent/data/knowledge_base/master-rulebook.md +0 -42
- package/2/vf-agent/data/knowledge_base/starter-docs/audio-recorder-reference.md +0 -98
- package/2/vf-agent/data/knowledge_base/starter-docs/authentication-reference.md +0 -155
- package/2/vf-agent/data/knowledge_base/starter-docs/charts-reference.md +0 -149
- package/2/vf-agent/data/knowledge_base/starter-docs/chatbot-reference.md +0 -123
- package/2/vf-agent/data/knowledge_base/starter-docs/feature-reference-index.md +0 -211
- package/2/vf-agent/data/knowledge_base/starter-docs/features-overview.md +0 -221
- package/2/vf-agent/data/knowledge_base/starter-docs/image-analyzer-reference.md +0 -118
- package/2/vf-agent/data/knowledge_base/starter-docs/image-generator-reference.md +0 -110
- package/2/vf-agent/data/knowledge_base/starter-docs/index.md +0 -28
- package/2/vf-agent/data/knowledge_base/starter-docs/onboarding-reference.md +0 -96
- package/2/vf-agent/data/knowledge_base/starter-docs/payments-reference.md +0 -148
- package/2/vf-agent/data/knowledge_base/starter-docs/prd.md +0 -82
- package/2/vf-agent/data/knowledge_base/starter-docs/push-notifications-reference.md +0 -453
- package/2/vf-agent/data/knowledge_base/starter-docs/quick-actions-reference.md +0 -253
- package/2/vf-agent/data/knowledge_base/starter-docs/quiz-reference.md +0 -169
- package/2/vf-agent/data/knowledge_base/starter-docs/settings-reference.md +0 -146
- package/2/vf-agent/data/knowledge_base/starter-docs/tech-stack.md +0 -159
- package/2/vf-agent/data/knowledge_base/starter-docs/tracker-app-reference.md +0 -150
- package/2/vf-agent/data/knowledge_base/starter-docs/unified-project-structure.md +0 -98
- package/2/vf-agent/data/knowledge_base/testing/backend-testing.md +0 -54
- package/2/vf-agent/data/knowledge_base/testing/frontend-testing.md +0 -71
- package/2/vf-agent/data/knowledge_base/testing/testing-strategy.md +0 -31
- package/2/vf-agent/tasks/advanced-elicitation.md +0 -117
- package/2/vf-agent/tasks/brownfield-create-epic.md +0 -160
- package/2/vf-agent/tasks/create-deep-research-prompt.md +0 -278
- package/2/vf-agent/tasks/create-doc.md +0 -42
- package/2/vf-agent/tasks/create-story.md +0 -43
- package/2/vf-agent/tasks/document-project.md +0 -343
- package/2/vf-agent/tasks/facilitate-brainstorming-session.md +0 -136
- package/2/vf-agent/tasks/index-docs.md +0 -173
- package/2/vf-agent/tasks/kb-mode-interaction.md +0 -75
- package/2/vf-agent/tasks/review-story.md +0 -154
- package/2/vf-agent/tasks/shard-doc.md +0 -185
- package/2/vf-agent/tasks/troubleshoot-issue.md +0 -65
- package/2/vf-agent/tasks/validate-next-story.md +0 -47
- package/2/vf-agent/templates/brainstorming-output-tmpl.yaml +0 -156
- package/2/vf-agent/templates/brownfield-architecture-tmpl.yaml +0 -111
- package/2/vf-agent/templates/brownfield-prd-tmpl.yaml +0 -247
- package/2/vf-agent/templates/competitor-analysis-tmpl.yaml +0 -293
- package/2/vf-agent/templates/market-research-tmpl.yaml +0 -252
- package/2/vf-agent/templates/project-brief-tmpl.yaml +0 -221
- package/2/vf-agent/templates/story-tmpl.yaml +0 -143
- package/recipes/0/apps/native/src/components/advanced-ui/timeline/demo.tsx +0 -444
- package/recipes/0/apps/native/src/components/advanced-ui/timeline/timeline-view.tsx +0 -355
- package/recipes/0/apps/native/src/components/advanced-ui/timeline/types.ts +0 -31
- package/recipes/wake-word/scripts/download-vosk-model.mjs +0 -121
- /package/{2 → recipes/animated-chip}/apps/native/src/components/advanced-ui/chip/animated-chip.tsx +0 -0
- /package/{2 → recipes/animated-chip}/apps/native/src/components/advanced-ui/chip/chip.tsx +0 -0
- /package/{2 → recipes/animated-chip}/apps/native/src/components/advanced-ui/chip/demo.tsx +0 -0
- /package/{2 → recipes/animated-chip}/apps/native/src/components/advanced-ui/chip/types.ts +0 -0
- /package/{2 → recipes/animated-switch}/apps/native/src/components/advanced-ui/switch/animated-switch.tsx +0 -0
- /package/{2 → recipes/animated-switch}/apps/native/src/components/advanced-ui/switch/demo.tsx +0 -0
- /package/{2 → recipes/animated-switch}/apps/native/src/components/advanced-ui/switch/types.ts +0 -0
- /package/{2 → recipes/glowing-button}/apps/native/src/components/advanced-ui/buttons/demo.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/assets/features/image-analyzer/front.jpg +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/assets/features/image-analyzer/side.jpg +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/assets/features/image-analyzer/threeQuarter.jpg +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/api-client/image-analyzer.ts +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/app/(root)/(protected)/analysis/[type]/_layout.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/app/(root)/(protected)/analysis/[type]/analysis-options.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/app/(root)/(protected)/analysis/[type]/camera.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/app/(root)/(protected)/analysis/[type]/index.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/app/(root)/(protected)/analysis/[type]/loading.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/app/(root)/(protected)/analysis/[type]/results.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/app/(root)/(protected)/analysis/[type]/trait-details.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/analysis-options-screen.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/camera.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/image-capture-screen.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/loading-screen.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/loading.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/results.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/trait-details.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/use-analysis-data.ts +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/app/use-results-screen.ts +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/achievement-badge.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/achievement-card.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/achievement-unlocked-modal.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/achievements-section.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/advice-list.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/circular-progress.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/content-card.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/error-state.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/index.ts +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/loading-state.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/profile-image.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/results-header.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/score-display.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/share-options-modal.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/components/results/traits-grid.tsx +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/config/analysis-config.ts +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/config/master-analysis-config.ts +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/hooks/index.ts +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/hooks/use-analysis.ts +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/hooks/use-image-analysis.ts +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/services/analysis-service.ts +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/services/share-service.ts +0 -0
- /package/{2 → recipes/image-analysis}/apps/native/src/features/image-analyzer/services/trait-details-service.ts +0 -0
- /package/{2 → recipes/image-analysis}/packages/backend/convex/imageAnalysis/index.ts +0 -0
- /package/{2 → recipes/image-analysis}/packages/backend/convex/imageAnalysisFunctions.ts +0 -0
- /package/{2 → recipes/image-analysis}/packages/backend/convex/lib/ai/imageAnalysisAdapter.ts +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/children/button/stepper-button.tsx +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/children/button/types.ts +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/children/content/stepper-content.tsx +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/children/content/types.ts +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/children/value/stepper-value.tsx +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/children/value/types.ts +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/context/stepper-context.ts +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/context/types.ts +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/demo.tsx +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/index.ts +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/stepper.tsx +0 -0
- /package/{2 → recipes/number-stepper}/apps/native/src/components/advanced-ui/stepper/types.ts +0 -0
- /package/{2 → recipes/progress-circle}/apps/native/src/components/advanced-ui/progress-bars/animated-progress-bar.tsx +0 -0
- /package/{2 → recipes/progress-circle}/apps/native/src/components/advanced-ui/progress-bars/dropdown-picker-page.tsx +0 -0
- /package/{2 → recipes/progress-circle}/apps/native/src/components/advanced-ui/progress-bars/progress-circle-page.tsx +0 -0
- /package/{2 → recipes/progress-circle}/apps/native/src/components/advanced-ui/progress-bars/progress-circle.tsx +0 -0
- /package/{2 → recipes/swipe-slider}/apps/native/src/components/advanced-ui/sliders/swipe-slider-page.tsx +0 -0
- /package/{2 → recipes/swipe-slider}/apps/native/src/components/advanced-ui/sliders/swipe-slider.tsx +0 -0
- /package/{2 → recipes/timeline}/apps/native/src/components/advanced-ui/timeline/demo.tsx +0 -0
- /package/{2 → recipes/timeline}/apps/native/src/components/advanced-ui/timeline/timeline-view.tsx +0 -0
- /package/{2 → recipes/timeline}/apps/native/src/components/advanced-ui/timeline/types.ts +0 -0
- /package/{2 → recipes/wake-word}/apps/native/scripts/download-vosk-model.mjs +0 -0
|
@@ -1,497 +0,0 @@
|
|
|
1
|
-
import { useAuthActions, useAuthToken } from '@convex-dev/auth/react';
|
|
2
|
-
import { Env } from '@env';
|
|
3
|
-
|
|
4
|
-
import { authApi } from '@/api-client/auth';
|
|
5
|
-
import { handleError } from '@/components/ui/extras/handle-error';
|
|
6
|
-
import type { User } from '@/core/auth/auth-service';
|
|
7
|
-
import { getDeviceId } from '@/lib/hooks/use-device-identifier';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
|
|
11
|
-
Transform Convex user document to AuthService User type
|
|
12
|
-
*/
|
|
13
|
-
export const transformUser = (convexUser: any): User | null => {
|
|
14
|
-
if (!convexUser) return null;
|
|
15
|
-
|
|
16
|
-
return {
|
|
17
|
-
id: convexUser._id,
|
|
18
|
-
email: convexUser.email,
|
|
19
|
-
isAnonymous: convexUser.isAnonymous || false,
|
|
20
|
-
};
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
|
|
25
|
-
Hook-based functions that provide access to Convex authentication
|
|
26
|
-
|
|
27
|
-
These need to be used within React components
|
|
28
|
-
*/
|
|
29
|
-
export const useConvexAuth = () => {
|
|
30
|
-
const { signIn: convexSignIn, signOut: convexSignOut } = useAuthActions();
|
|
31
|
-
const authToken = useAuthToken();
|
|
32
|
-
const userQuery = authApi.useViewer();
|
|
33
|
-
|
|
34
|
-
// Convex mutations and actions for OTP functionality
|
|
35
|
-
const signUpWithOtpAction = authApi.useSignUpWithOtp();
|
|
36
|
-
const verifyOtpAction = authApi.useVerifyOtpAndCreateUser();
|
|
37
|
-
|
|
38
|
-
// Convex functions for password reset functionality
|
|
39
|
-
const requestPasswordResetAction = authApi.useRequestPasswordReset();
|
|
40
|
-
const resetPasswordAction = authApi.useResetPassword();
|
|
41
|
-
const verifyPasswordResetTokenFn = authApi.useVerifyPasswordResetToken();
|
|
42
|
-
|
|
43
|
-
// Determine authentication state based on token presence and user data
|
|
44
|
-
const isLoading = userQuery === undefined;
|
|
45
|
-
|
|
46
|
-
// Auth is hydrated when we have user query data (token might be refreshing)
|
|
47
|
-
const authHydrated = userQuery !== undefined;
|
|
48
|
-
|
|
49
|
-
// For regular users: authToken exists AND user document exists
|
|
50
|
-
// For anonymous users: authToken exists BUT user document might be null
|
|
51
|
-
// FAST REFRESH FIX: If we have valid user data but token is temporarily undefined,
|
|
52
|
-
// assume authenticated (token refresh in progress)
|
|
53
|
-
const hasValidUserData = userQuery !== null && userQuery !== undefined;
|
|
54
|
-
const isAuthenticated =
|
|
55
|
-
(!!authToken && (userQuery !== null || !isLoading)) ||
|
|
56
|
-
(hasValidUserData && !isLoading);
|
|
57
|
-
|
|
58
|
-
// Debug logging for token issues
|
|
59
|
-
if (hasValidUserData && !authToken) {
|
|
60
|
-
console.log(
|
|
61
|
-
'[useConvexAuth] Token missing but user data exists - likely token refresh in progress',
|
|
62
|
-
);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
const getCurrentUser = async (): Promise<User | null> => {
|
|
66
|
-
return transformUser(userQuery);
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
const signIn = async (provider: string, credentials?: any): Promise<User> => {
|
|
70
|
-
const deviceId = await getDeviceId();
|
|
71
|
-
|
|
72
|
-
try {
|
|
73
|
-
if (provider === 'password') {
|
|
74
|
-
const { email, password } = credentials;
|
|
75
|
-
await convexSignIn('password', {
|
|
76
|
-
email,
|
|
77
|
-
password,
|
|
78
|
-
flow: 'signIn',
|
|
79
|
-
deviceId,
|
|
80
|
-
});
|
|
81
|
-
} else {
|
|
82
|
-
await convexSignIn(provider as any, { ...credentials, deviceId });
|
|
83
|
-
}
|
|
84
|
-
} catch (error) {
|
|
85
|
-
// Handle authentication errors with user-friendly messages
|
|
86
|
-
const errorStr = error instanceof Error ? error.message : String(error);
|
|
87
|
-
|
|
88
|
-
// Map common Convex errors to user-friendly messages
|
|
89
|
-
let userMessage = 'Authentication failed';
|
|
90
|
-
|
|
91
|
-
if (errorStr.includes('InvalidAccountId')) {
|
|
92
|
-
userMessage =
|
|
93
|
-
'Invalid account. Please check your email or try signing up.';
|
|
94
|
-
} else if (
|
|
95
|
-
errorStr.includes('Invalid credentials') ||
|
|
96
|
-
errorStr.includes('auth.signIn')
|
|
97
|
-
) {
|
|
98
|
-
userMessage = 'Invalid email or password. Please try again.';
|
|
99
|
-
} else if (
|
|
100
|
-
errorStr.includes('Too many requests') ||
|
|
101
|
-
errorStr.includes('rate limit')
|
|
102
|
-
) {
|
|
103
|
-
userMessage =
|
|
104
|
-
'Too many login attempts. Please wait a moment and try again.';
|
|
105
|
-
} else if (
|
|
106
|
-
errorStr.includes('Network error') ||
|
|
107
|
-
errorStr.includes('fetch')
|
|
108
|
-
) {
|
|
109
|
-
userMessage =
|
|
110
|
-
'Network error. Please check your internet connection and try again.';
|
|
111
|
-
} else if (errorStr.includes('Server Error')) {
|
|
112
|
-
userMessage =
|
|
113
|
-
'Server temporarily unavailable. Please try again in a moment.';
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// Log the full technical error for debugging, but show user-friendly message
|
|
117
|
-
handleError(error, {
|
|
118
|
-
feature: 'auth.signIn',
|
|
119
|
-
fallbackMessage: userMessage,
|
|
120
|
-
toast: true, // Show the user-friendly toast
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
// Re-throw for UI layer to handle - this is required so login knows it failed
|
|
124
|
-
throw error;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Return a temporary user object - the actual user state will be handled by AuthWatcher
|
|
128
|
-
return {
|
|
129
|
-
id: 'authenticating',
|
|
130
|
-
email: credentials?.email || '',
|
|
131
|
-
isAnonymous: provider === 'anonymous',
|
|
132
|
-
};
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
const signUpWithOtp = async (details: {
|
|
136
|
-
email: string;
|
|
137
|
-
password?: string;
|
|
138
|
-
name?: string;
|
|
139
|
-
}): Promise<{ navigateToOtp: boolean; error?: string }> => {
|
|
140
|
-
try {
|
|
141
|
-
const { email, password, name } = details;
|
|
142
|
-
if (!password) {
|
|
143
|
-
return {
|
|
144
|
-
navigateToOtp: false,
|
|
145
|
-
error: 'Password is required for signup',
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
const result = await signUpWithOtpAction({
|
|
150
|
-
email,
|
|
151
|
-
password,
|
|
152
|
-
name,
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
return { navigateToOtp: result.navigateToOtp };
|
|
156
|
-
} catch (error) {
|
|
157
|
-
// Sanitize technical errors for user-friendly display
|
|
158
|
-
const errorStr = error instanceof Error ? error.message : String(error);
|
|
159
|
-
let userMessage = 'Failed to sign up. Please try again.';
|
|
160
|
-
|
|
161
|
-
if (
|
|
162
|
-
errorStr.includes('Invalid email') ||
|
|
163
|
-
errorStr.includes('Email already exists') ||
|
|
164
|
-
(errorStr.includes('Account') && errorStr.includes('already exists'))
|
|
165
|
-
) {
|
|
166
|
-
userMessage =
|
|
167
|
-
'This email is already registered. Please try signing in.';
|
|
168
|
-
} else if (
|
|
169
|
-
errorStr.includes('Too many requests') ||
|
|
170
|
-
errorStr.includes('rate limit')
|
|
171
|
-
) {
|
|
172
|
-
userMessage =
|
|
173
|
-
'Too many signup attempts. Please wait a moment and try again.';
|
|
174
|
-
} else if (
|
|
175
|
-
errorStr.includes('Network error') ||
|
|
176
|
-
errorStr.includes('fetch')
|
|
177
|
-
) {
|
|
178
|
-
userMessage =
|
|
179
|
-
'Network error. Please check your internet connection and try again.';
|
|
180
|
-
} else if (errorStr.includes('Server Error')) {
|
|
181
|
-
userMessage =
|
|
182
|
-
'Server temporarily unavailable. Please try again in a moment.';
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
// Log technical error for debugging but don't show toast (UI layer will handle)
|
|
186
|
-
handleError(error, {
|
|
187
|
-
feature: 'auth.signUpWithOtp',
|
|
188
|
-
fallbackMessage: userMessage,
|
|
189
|
-
toast: false, // Don't show toast - let UI layer handle it
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
return {
|
|
193
|
-
navigateToOtp: false,
|
|
194
|
-
error: userMessage,
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
};
|
|
198
|
-
|
|
199
|
-
const verifyOtp = async (otpDetails: {
|
|
200
|
-
email: string;
|
|
201
|
-
otp: string;
|
|
202
|
-
name?: string;
|
|
203
|
-
password: string;
|
|
204
|
-
}): Promise<{ success: boolean; user?: User; error?: string }> => {
|
|
205
|
-
try {
|
|
206
|
-
const result = await verifyOtpAction(otpDetails);
|
|
207
|
-
|
|
208
|
-
if (result.success) {
|
|
209
|
-
const currentUser = await getCurrentUser();
|
|
210
|
-
return { success: true, user: currentUser || undefined };
|
|
211
|
-
}
|
|
212
|
-
return { success: false, error: result.error || 'Invalid OTP' };
|
|
213
|
-
} catch (error) {
|
|
214
|
-
// Sanitize technical errors for user-friendly display
|
|
215
|
-
const errorStr = error instanceof Error ? error.message : String(error);
|
|
216
|
-
let userMessage = 'OTP verification failed. Please try again.';
|
|
217
|
-
|
|
218
|
-
if (errorStr.includes('Invalid OTP') || errorStr.includes('otp')) {
|
|
219
|
-
userMessage = 'Invalid verification code. Please check and try again.';
|
|
220
|
-
} else if (errorStr.includes('expired')) {
|
|
221
|
-
userMessage =
|
|
222
|
-
'Verification code has expired. Please request a new one.';
|
|
223
|
-
} else if (
|
|
224
|
-
errorStr.includes('Too many requests') ||
|
|
225
|
-
errorStr.includes('rate limit')
|
|
226
|
-
) {
|
|
227
|
-
userMessage =
|
|
228
|
-
'Too many verification attempts. Please wait and try again.';
|
|
229
|
-
} else if (
|
|
230
|
-
errorStr.includes('Network error') ||
|
|
231
|
-
errorStr.includes('fetch')
|
|
232
|
-
) {
|
|
233
|
-
userMessage =
|
|
234
|
-
'Network error. Please check your connection and try again.';
|
|
235
|
-
} else if (errorStr.includes('Server Error')) {
|
|
236
|
-
userMessage =
|
|
237
|
-
'Server temporarily unavailable. Please try again in a moment.';
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
// Log technical error for debugging
|
|
241
|
-
handleError(error, {
|
|
242
|
-
feature: 'auth.verifyOtp',
|
|
243
|
-
fallbackMessage: userMessage,
|
|
244
|
-
});
|
|
245
|
-
|
|
246
|
-
return {
|
|
247
|
-
success: false,
|
|
248
|
-
error: userMessage,
|
|
249
|
-
};
|
|
250
|
-
}
|
|
251
|
-
};
|
|
252
|
-
|
|
253
|
-
const resendOtp = async (
|
|
254
|
-
email: string,
|
|
255
|
-
password?: string,
|
|
256
|
-
name?: string,
|
|
257
|
-
): Promise<{ success: boolean; error?: string }> => {
|
|
258
|
-
try {
|
|
259
|
-
const result = await signUpWithOtpAction({
|
|
260
|
-
email,
|
|
261
|
-
password: password || '',
|
|
262
|
-
name,
|
|
263
|
-
});
|
|
264
|
-
return {
|
|
265
|
-
success: result.navigateToOtp,
|
|
266
|
-
error: result.navigateToOtp ? undefined : 'Failed to resend OTP',
|
|
267
|
-
};
|
|
268
|
-
} catch (error) {
|
|
269
|
-
// Sanitize technical errors for user-friendly display
|
|
270
|
-
const errorStr = error instanceof Error ? error.message : String(error);
|
|
271
|
-
let userMessage = 'Failed to resend verification code. Please try again.';
|
|
272
|
-
|
|
273
|
-
if (
|
|
274
|
-
errorStr.includes('Too many requests') ||
|
|
275
|
-
errorStr.includes('rate limit')
|
|
276
|
-
) {
|
|
277
|
-
userMessage =
|
|
278
|
-
'Too many requests. Please wait a moment before trying again.';
|
|
279
|
-
} else if (
|
|
280
|
-
errorStr.includes('Network error') ||
|
|
281
|
-
errorStr.includes('fetch')
|
|
282
|
-
) {
|
|
283
|
-
userMessage =
|
|
284
|
-
'Network error. Please check your connection and try again.';
|
|
285
|
-
} else if (errorStr.includes('Server Error')) {
|
|
286
|
-
userMessage =
|
|
287
|
-
'Server temporarily unavailable. Please try again in a moment.';
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
// Log technical error for debugging
|
|
291
|
-
handleError(error, {
|
|
292
|
-
feature: 'auth.resendOtp',
|
|
293
|
-
fallbackMessage: userMessage,
|
|
294
|
-
});
|
|
295
|
-
|
|
296
|
-
return {
|
|
297
|
-
success: false,
|
|
298
|
-
error: userMessage,
|
|
299
|
-
};
|
|
300
|
-
}
|
|
301
|
-
};
|
|
302
|
-
|
|
303
|
-
const signOut = async (): Promise<void> => {
|
|
304
|
-
await convexSignOut();
|
|
305
|
-
};
|
|
306
|
-
|
|
307
|
-
const initiateGuestSession = async (): Promise<User> => {
|
|
308
|
-
const deviceId = await getDeviceId();
|
|
309
|
-
|
|
310
|
-
await convexSignIn('anonymous', { deviceId });
|
|
311
|
-
|
|
312
|
-
return { id: 'guest', email: '', isAnonymous: true };
|
|
313
|
-
};
|
|
314
|
-
|
|
315
|
-
const requestPasswordReset = async (
|
|
316
|
-
email: string,
|
|
317
|
-
): Promise<{ success: boolean; error?: string }> => {
|
|
318
|
-
try {
|
|
319
|
-
const scheme = Env.SCHEME;
|
|
320
|
-
const resetUrlTemplate = `${scheme}://reset-password?token=__TOKEN__`;
|
|
321
|
-
const result = await requestPasswordResetAction({
|
|
322
|
-
email,
|
|
323
|
-
resetUrlTemplate,
|
|
324
|
-
});
|
|
325
|
-
return {
|
|
326
|
-
success: result.success,
|
|
327
|
-
error: result.success ? undefined : 'Failed to send reset email',
|
|
328
|
-
};
|
|
329
|
-
} catch (error) {
|
|
330
|
-
// Sanitize technical errors for user-friendly display
|
|
331
|
-
const errorStr = error instanceof Error ? error.message : String(error);
|
|
332
|
-
let userMessage =
|
|
333
|
-
'Failed to send password reset email. Please try again.';
|
|
334
|
-
|
|
335
|
-
if (
|
|
336
|
-
errorStr.includes('Email not found') ||
|
|
337
|
-
errorStr.includes('user not found')
|
|
338
|
-
) {
|
|
339
|
-
userMessage =
|
|
340
|
-
"If this email is registered, you'll receive a reset link shortly.";
|
|
341
|
-
} else if (
|
|
342
|
-
errorStr.includes('Too many requests') ||
|
|
343
|
-
errorStr.includes('rate limit')
|
|
344
|
-
) {
|
|
345
|
-
userMessage =
|
|
346
|
-
'Too many reset attempts. Please wait a moment and try again.';
|
|
347
|
-
} else if (
|
|
348
|
-
errorStr.includes('Network error') ||
|
|
349
|
-
errorStr.includes('fetch')
|
|
350
|
-
) {
|
|
351
|
-
userMessage =
|
|
352
|
-
'Network error. Please check your connection and try again.';
|
|
353
|
-
} else if (errorStr.includes('Server Error')) {
|
|
354
|
-
userMessage =
|
|
355
|
-
'Server temporarily unavailable. Please try again in a moment.';
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
// Log technical error for debugging
|
|
359
|
-
handleError(error, {
|
|
360
|
-
feature: 'auth.requestPasswordReset',
|
|
361
|
-
fallbackMessage: userMessage,
|
|
362
|
-
});
|
|
363
|
-
|
|
364
|
-
return {
|
|
365
|
-
success: false,
|
|
366
|
-
error: userMessage,
|
|
367
|
-
};
|
|
368
|
-
}
|
|
369
|
-
};
|
|
370
|
-
|
|
371
|
-
const resetPassword = async (details: {
|
|
372
|
-
token: string;
|
|
373
|
-
newPassword: string;
|
|
374
|
-
}): Promise<{ success: boolean; error?: string }> => {
|
|
375
|
-
try {
|
|
376
|
-
const result = await resetPasswordAction({
|
|
377
|
-
token: details.token,
|
|
378
|
-
newPassword: details.newPassword,
|
|
379
|
-
});
|
|
380
|
-
return {
|
|
381
|
-
success: result.success,
|
|
382
|
-
error: result.success ? undefined : 'Failed to reset password',
|
|
383
|
-
};
|
|
384
|
-
} catch (error) {
|
|
385
|
-
// Sanitize technical errors for user-friendly display
|
|
386
|
-
const errorStr = error instanceof Error ? error.message : String(error);
|
|
387
|
-
let userMessage = 'Failed to reset password. Please try again.';
|
|
388
|
-
|
|
389
|
-
if (errorStr.includes('Invalid token') || errorStr.includes('expired')) {
|
|
390
|
-
userMessage =
|
|
391
|
-
'Reset link has expired or is invalid. Please request a new one.';
|
|
392
|
-
} else if (
|
|
393
|
-
errorStr.includes('Weak password') ||
|
|
394
|
-
errorStr.includes('password too weak')
|
|
395
|
-
) {
|
|
396
|
-
userMessage =
|
|
397
|
-
'Password is too weak. Please choose a stronger password.';
|
|
398
|
-
} else if (
|
|
399
|
-
errorStr.includes('Too many requests') ||
|
|
400
|
-
errorStr.includes('rate limit')
|
|
401
|
-
) {
|
|
402
|
-
userMessage =
|
|
403
|
-
'Too many reset attempts. Please wait a moment and try again.';
|
|
404
|
-
} else if (
|
|
405
|
-
errorStr.includes('Network error') ||
|
|
406
|
-
errorStr.includes('fetch')
|
|
407
|
-
) {
|
|
408
|
-
userMessage =
|
|
409
|
-
'Network error. Please check your connection and try again.';
|
|
410
|
-
} else if (errorStr.includes('Server Error')) {
|
|
411
|
-
userMessage =
|
|
412
|
-
'Server temporarily unavailable. Please try again in a moment.';
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
// Log technical error for debugging
|
|
416
|
-
handleError(error, {
|
|
417
|
-
feature: 'auth.resetPassword',
|
|
418
|
-
fallbackMessage: userMessage,
|
|
419
|
-
});
|
|
420
|
-
|
|
421
|
-
return {
|
|
422
|
-
success: false,
|
|
423
|
-
error: userMessage,
|
|
424
|
-
};
|
|
425
|
-
}
|
|
426
|
-
};
|
|
427
|
-
|
|
428
|
-
const verifyPasswordResetToken = async (
|
|
429
|
-
token: string,
|
|
430
|
-
): Promise<{ valid: boolean; error?: string }> => {
|
|
431
|
-
try {
|
|
432
|
-
const result = await verifyPasswordResetTokenFn(token);
|
|
433
|
-
return result;
|
|
434
|
-
} catch (error) {
|
|
435
|
-
// Sanitize technical errors for user-friendly display
|
|
436
|
-
const errorStr = error instanceof Error ? error.message : String(error);
|
|
437
|
-
let userMessage = 'Reset link is invalid or has expired.';
|
|
438
|
-
|
|
439
|
-
if (errorStr.includes('Invalid token') || errorStr.includes('expired')) {
|
|
440
|
-
userMessage =
|
|
441
|
-
'Reset link has expired or is invalid. Please request a new one.';
|
|
442
|
-
} else if (
|
|
443
|
-
errorStr.includes('Network error') ||
|
|
444
|
-
errorStr.includes('fetch')
|
|
445
|
-
) {
|
|
446
|
-
userMessage =
|
|
447
|
-
'Network error. Please check your connection and try again.';
|
|
448
|
-
} else if (errorStr.includes('Server Error')) {
|
|
449
|
-
userMessage =
|
|
450
|
-
'Server temporarily unavailable. Please try again in a moment.';
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
// Log technical error for debugging
|
|
454
|
-
handleError(error, {
|
|
455
|
-
feature: 'auth.verifyPasswordResetToken',
|
|
456
|
-
fallbackMessage: userMessage,
|
|
457
|
-
});
|
|
458
|
-
|
|
459
|
-
return {
|
|
460
|
-
valid: false,
|
|
461
|
-
error: userMessage,
|
|
462
|
-
};
|
|
463
|
-
}
|
|
464
|
-
};
|
|
465
|
-
|
|
466
|
-
return {
|
|
467
|
-
getCurrentUser,
|
|
468
|
-
signIn,
|
|
469
|
-
signUpWithOtp,
|
|
470
|
-
verifyOtp,
|
|
471
|
-
resendOtp,
|
|
472
|
-
signOut,
|
|
473
|
-
initiateGuestSession,
|
|
474
|
-
requestPasswordReset,
|
|
475
|
-
resetPassword,
|
|
476
|
-
verifyPasswordResetToken,
|
|
477
|
-
isAuthenticated,
|
|
478
|
-
isLoading,
|
|
479
|
-
authHydrated,
|
|
480
|
-
userQuery,
|
|
481
|
-
transformUser,
|
|
482
|
-
};
|
|
483
|
-
};
|
|
484
|
-
|
|
485
|
-
/**
|
|
486
|
-
|
|
487
|
-
ConvexAuthAdapter implements the AuthService interface using Convex authentication.
|
|
488
|
-
|
|
489
|
-
This adapter bridges our abstract AuthService interface with @convex-dev/auth implementation.
|
|
490
|
-
|
|
491
|
-
Note: This adapter is designed to work with React components. The methods here provide
|
|
492
|
-
|
|
493
|
-
a bridge to the hook-based functionality but cannot be called directly outside of React
|
|
494
|
-
|
|
495
|
-
component context. Use the AuthService via dependency injection in your React components.
|
|
496
|
-
*/
|
|
497
|
-
// Removed ConvexAuthAdapterClass in favor of useConvexAuth hook
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
# Chart Components
|
|
2
|
-
|
|
3
|
-
A collection of beautiful, animated chart components built with React Native SVG, d3-shape, and React Native Reanimated.
|
|
4
|
-
|
|
5
|
-
## 🚀 Features
|
|
6
|
-
|
|
7
|
-
- **Fully Animated**: Smooth entrance animations with staggered effects
|
|
8
|
-
- **Theme-Aware**: Automatically adapts to light/dark themes using `useThemeConfig`
|
|
9
|
-
- **Responsive**: Horizontal scrolling support for charts that exceed screen width
|
|
10
|
-
- **Accessible**: Proper contrast ratios and accessibility labels
|
|
11
|
-
- **TypeScript**: Fully typed with comprehensive prop interfaces
|
|
12
|
-
- **Customizable**: Extensive styling and behavior options
|
|
13
|
-
|
|
14
|
-
## 📊 Available Charts
|
|
15
|
-
|
|
16
|
-
### BarChart
|
|
17
|
-
|
|
18
|
-
Animated bar charts with horizontal scrolling support.
|
|
19
|
-
|
|
20
|
-
**Features:**
|
|
21
|
-
|
|
22
|
-
- Staggered bar growth animations
|
|
23
|
-
- Grid lines with proper contrast
|
|
24
|
-
- Value labels above bars
|
|
25
|
-
- Category labels below bars
|
|
26
|
-
- Horizontal scrolling for wide datasets
|
|
27
|
-
- Haptic feedback on press
|
|
28
|
-
|
|
29
|
-
**Props:**
|
|
30
|
-
|
|
31
|
-
- `data`: Array of chart data objects with `id`, `label`, `value`, and optional `color`
|
|
32
|
-
- `height`: Chart height (default: 250)
|
|
33
|
-
- `showValues`: Display values above bars (default: true)
|
|
34
|
-
- `showLabels`: Display labels below bars (default: true)
|
|
35
|
-
- `showGrid`: Show grid lines (default: true)
|
|
36
|
-
- `valueFormatter`: Function to format displayed values
|
|
37
|
-
- `barRadius`: Border radius of bars (default: 8)
|
|
38
|
-
- `gap`: Space between bars (default: 12)
|
|
39
|
-
|
|
40
|
-
### LineChart
|
|
41
|
-
|
|
42
|
-
Smooth animated line charts with area fills and data points.
|
|
43
|
-
|
|
44
|
-
**Features:**
|
|
45
|
-
|
|
46
|
-
- Animated path drawing with stroke-dash effects
|
|
47
|
-
- Curved or linear line styles
|
|
48
|
-
- Optional area fills
|
|
49
|
-
- Animated data points
|
|
50
|
-
- Grid overlay support
|
|
51
|
-
|
|
52
|
-
**Props:**
|
|
53
|
-
|
|
54
|
-
- `data`: Array of numeric values
|
|
55
|
-
- `labels`: Array of string labels for x-axis
|
|
56
|
-
- `height`: Chart height (default: 200)
|
|
57
|
-
- `curved`: Use curved lines (default: true)
|
|
58
|
-
- `showArea`: Show area fill (default: true)
|
|
59
|
-
- `showDots`: Show data points (default: true)
|
|
60
|
-
- `valueFormatter`: Function to format displayed values
|
|
61
|
-
|
|
62
|
-
### PieChart
|
|
63
|
-
|
|
64
|
-
Animated pie charts with detailed legends.
|
|
65
|
-
|
|
66
|
-
**Features:**
|
|
67
|
-
|
|
68
|
-
- Slice-by-slice animation with staggered timing
|
|
69
|
-
- Interactive legend with slide-in effects
|
|
70
|
-
- Support for custom colors
|
|
71
|
-
- Touch interactions with haptic feedback
|
|
72
|
-
|
|
73
|
-
**Props:**
|
|
74
|
-
|
|
75
|
-
- `data`: Array of chart data objects
|
|
76
|
-
- `height`: Chart height (default: 300)
|
|
77
|
-
- `radius`: Chart radius (auto-calculated if not provided)
|
|
78
|
-
- `showLegend`: Display legend (default: true)
|
|
79
|
-
- `valueFormatter`: Function to format displayed values
|
|
80
|
-
|
|
81
|
-
### DonutChart
|
|
82
|
-
|
|
83
|
-
Specialized donut charts with center labels.
|
|
84
|
-
|
|
85
|
-
**Features:**
|
|
86
|
-
|
|
87
|
-
- All PieChart features
|
|
88
|
-
- Customizable inner radius ratio
|
|
89
|
-
- Center total display for donut charts
|
|
90
|
-
- Enhanced visual hierarchy
|
|
91
|
-
|
|
92
|
-
**Props:**
|
|
93
|
-
|
|
94
|
-
- All PieChart props except `innerRadius`
|
|
95
|
-
- `innerRadiusRatio`: Inner radius as percentage of outer radius (default: 0.6)
|
|
96
|
-
|
|
97
|
-
## 🎨 Theme Integration
|
|
98
|
-
|
|
99
|
-
All charts use the `useThemeConfig` hook for consistent theming:
|
|
100
|
-
|
|
101
|
-
```typescript
|
|
102
|
-
// Text colors
|
|
103
|
-
theme.colors.foreground; // Primary text
|
|
104
|
-
theme.colors.mutedForeground; // Secondary text
|
|
105
|
-
|
|
106
|
-
// Background colors
|
|
107
|
-
theme.colors.background; // Chart background
|
|
108
|
-
theme.colors.card; // Card backgrounds
|
|
109
|
-
theme.colors.muted; // Legend item backgrounds
|
|
110
|
-
|
|
111
|
-
// Border colors
|
|
112
|
-
theme.colors.outline; // Grid lines and borders
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
## 🔧 Usage Examples
|
|
116
|
-
|
|
117
|
-
### Bar Chart with Horizontal Scrolling
|
|
118
|
-
|
|
119
|
-
```tsx
|
|
120
|
-
<BarChart
|
|
121
|
-
data={salesData}
|
|
122
|
-
height={350}
|
|
123
|
-
showValues={true}
|
|
124
|
-
showGrid={true}
|
|
125
|
-
showLabels={true}
|
|
126
|
-
valueFormatter={(value) => `$${value.toLocaleString()}`}
|
|
127
|
-
/>
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
### Animated Line Chart
|
|
131
|
-
|
|
132
|
-
```tsx
|
|
133
|
-
<LineChart
|
|
134
|
-
data={monthlyActiveUsers}
|
|
135
|
-
labels={monthLabels}
|
|
136
|
-
height={250}
|
|
137
|
-
curved={true}
|
|
138
|
-
showArea={true}
|
|
139
|
-
showDots={true}
|
|
140
|
-
valueFormatter={(value) => value.toLocaleString()}
|
|
141
|
-
/>
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
### Donut Chart with Custom Styling
|
|
145
|
-
|
|
146
|
-
```tsx
|
|
147
|
-
<DonutChart
|
|
148
|
-
data={expensesData}
|
|
149
|
-
height={450}
|
|
150
|
-
radius={130}
|
|
151
|
-
innerRadiusRatio={0.65}
|
|
152
|
-
showLegend={true}
|
|
153
|
-
valueFormatter={(value) => `$${value}k`}
|
|
154
|
-
/>
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
## 🎭 Animation Details
|
|
158
|
-
|
|
159
|
-
- **Bar Charts**: Staggered bar growth with 100ms delays between bars
|
|
160
|
-
- **Line Charts**: Stroke-dash animation followed by area fill and dot appearance
|
|
161
|
-
- **Pie Charts**: Radial growth animation with 150ms delays between slices
|
|
162
|
-
- **Legends**: Slide-in animations with opacity transitions
|
|
163
|
-
|
|
164
|
-
## 📱 Responsive Design
|
|
165
|
-
|
|
166
|
-
Charts automatically adapt to different screen sizes:
|
|
167
|
-
|
|
168
|
-
- Bar charts enable horizontal scrolling when content exceeds screen width
|
|
169
|
-
- Minimum bar widths ensure readability on all devices
|
|
170
|
-
- Dynamic font sizing based on chart dimensions
|
|
171
|
-
- Proper padding and margins for touch interactions
|
|
172
|
-
|
|
173
|
-
## 🔄 Performance Optimizations
|
|
174
|
-
|
|
175
|
-
- React Native Reanimated for smooth 60fps animations
|
|
176
|
-
- Efficient re-renders using `useCallback` and `useMemo`
|
|
177
|
-
- SVG path caching for complex shapes
|
|
178
|
-
- Minimal re-animations on data updates
|
|
179
|
-
|
|
180
|
-
## 🎯 Accessibility
|
|
181
|
-
|
|
182
|
-
- High contrast color schemes for both light and dark themes
|
|
183
|
-
- Proper accessibility labels and roles
|
|
184
|
-
- Touch target sizes meet accessibility guidelines
|
|
185
|
-
- Screen reader friendly value announcements
|