@cachly-dev/mcp-server 0.10.49 → 0.10.56

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.
Files changed (310) hide show
  1. package/.github/workflows/publish.yml +2 -2
  2. package/README.md +33 -5
  3. package/dist/__tests__/auth.test.js.map +1 -0
  4. package/dist/{src/__tests__ → __tests__}/brain-flow.test.js +0 -141
  5. package/dist/__tests__/brain-flow.test.js.map +1 -0
  6. package/dist/__tests__/brain-predict-failures.test.d.ts +17 -0
  7. package/dist/__tests__/brain-predict-failures.test.js +339 -0
  8. package/dist/__tests__/brain-predict-failures.test.js.map +1 -0
  9. package/dist/__tests__/confidence.test.js.map +1 -0
  10. package/dist/__tests__/e2e/api-auth.test.js.map +1 -0
  11. package/dist/__tests__/e2e/api-health.test.js.map +1 -0
  12. package/dist/__tests__/e2e/cli.test.js.map +1 -0
  13. package/dist/__tests__/e2e/config.js.map +1 -0
  14. package/dist/__tests__/e2e/funnel.test.js.map +1 -0
  15. package/dist/__tests__/e2e/mcp-tools.test.js.map +1 -0
  16. package/dist/__tests__/e2e/provisioning.test.js.map +1 -0
  17. package/dist/{src/__tests__ → __tests__}/handlers-unit.test.js +2 -0
  18. package/dist/__tests__/handlers-unit.test.js.map +1 -0
  19. package/dist/__tests__/namespace.test.js.map +1 -0
  20. package/dist/auth.js.map +1 -0
  21. package/dist/ckg.js.map +1 -0
  22. package/dist/confidence.js.map +1 -0
  23. package/dist/embeddings.js.map +1 -0
  24. package/dist/handlers/advanced.js.map +1 -0
  25. package/dist/{src/handlers → handlers}/brain.js +141 -135
  26. package/dist/handlers/brain.js.map +1 -0
  27. package/dist/handlers/cache.js.map +1 -0
  28. package/dist/{src/handlers → handlers}/context.js +4 -9
  29. package/dist/handlers/context.js.map +1 -0
  30. package/dist/{src/handlers → handlers}/fedbrain.d.ts +0 -6
  31. package/dist/{src/handlers → handlers}/fedbrain.js +7 -19
  32. package/dist/handlers/fedbrain.js.map +1 -0
  33. package/dist/handlers/instances.js.map +1 -0
  34. package/dist/{src/handlers → handlers}/roadmap.js +3 -7
  35. package/dist/handlers/roadmap.js.map +1 -0
  36. package/dist/handlers/syndicate.js.map +1 -0
  37. package/dist/{src/handlers → handlers}/team.js +3 -1
  38. package/dist/handlers/team.js.map +1 -0
  39. package/dist/{src/index.js → index.js} +428 -206
  40. package/dist/index.js.map +1 -0
  41. package/dist/namespace.js.map +1 -0
  42. package/dist/search.js.map +1 -0
  43. package/dist/search.test.js.map +1 -0
  44. package/dist/{src/tools.d.ts → tools.d.ts} +0 -196
  45. package/dist/{src/tools.js → tools.js} +0 -178
  46. package/dist/tools.js.map +1 -0
  47. package/dist/utils.js.map +1 -0
  48. package/package.json +3 -3
  49. package/smithery.yaml +16 -27
  50. package/src/__tests__/brain-flow.test.ts +0 -174
  51. package/src/__tests__/brain-predict-failures.test.ts +430 -0
  52. package/src/__tests__/handlers-unit.test.ts +2 -1
  53. package/src/handlers/brain.ts +142 -142
  54. package/src/handlers/context.ts +4 -9
  55. package/src/handlers/fedbrain.ts +7 -21
  56. package/src/handlers/roadmap.ts +3 -7
  57. package/src/handlers/team.ts +3 -1
  58. package/src/index.ts +415 -221
  59. package/src/tools.ts +0 -191
  60. package/tsconfig.json +3 -2
  61. package/.github/workflows/eas-build-android.yml +0 -58
  62. package/.github/workflows/eas-update.yml +0 -55
  63. package/STRATEGY.md +0 -209
  64. package/apps/travel-chaos-organizer/.env.example +0 -49
  65. package/apps/travel-chaos-organizer/DEPLOY.md +0 -328
  66. package/apps/travel-chaos-organizer/Makefile +0 -57
  67. package/apps/travel-chaos-organizer/README.md +0 -159
  68. package/apps/travel-chaos-organizer/backend/.env.example +0 -10
  69. package/apps/travel-chaos-organizer/backend/Dockerfile +0 -25
  70. package/apps/travel-chaos-organizer/backend/alembic/env.py +0 -56
  71. package/apps/travel-chaos-organizer/backend/alembic/script.py.mako +0 -24
  72. package/apps/travel-chaos-organizer/backend/alembic/versions/.gitkeep +0 -0
  73. package/apps/travel-chaos-organizer/backend/alembic/versions/0001_stripe_customer_id.py +0 -24
  74. package/apps/travel-chaos-organizer/backend/alembic/versions/0002_telegram_chat_id.py +0 -24
  75. package/apps/travel-chaos-organizer/backend/alembic.ini +0 -39
  76. package/apps/travel-chaos-organizer/backend/app/__init__.py +0 -0
  77. package/apps/travel-chaos-organizer/backend/app/auth/__init__.py +0 -0
  78. package/apps/travel-chaos-organizer/backend/app/auth/keycloak.py +0 -81
  79. package/apps/travel-chaos-organizer/backend/app/config.py +0 -66
  80. package/apps/travel-chaos-organizer/backend/app/db/__init__.py +0 -0
  81. package/apps/travel-chaos-organizer/backend/app/db/database.py +0 -20
  82. package/apps/travel-chaos-organizer/backend/app/db/migrations/001_init.sql +0 -71
  83. package/apps/travel-chaos-organizer/backend/app/db/migrations/002_telemetry_freemium.sql +0 -31
  84. package/apps/travel-chaos-organizer/backend/app/db/migrations/003_telegram_chat_id.sql +0 -4
  85. package/apps/travel-chaos-organizer/backend/app/db/migrations/004_stripe_and_email.sql +0 -5
  86. package/apps/travel-chaos-organizer/backend/app/limiter.py +0 -4
  87. package/apps/travel-chaos-organizer/backend/app/logging_config.py +0 -25
  88. package/apps/travel-chaos-organizer/backend/app/main.py +0 -77
  89. package/apps/travel-chaos-organizer/backend/app/models/__init__.py +0 -0
  90. package/apps/travel-chaos-organizer/backend/app/models/schemas.py +0 -142
  91. package/apps/travel-chaos-organizer/backend/app/routers/__init__.py +0 -0
  92. package/apps/travel-chaos-organizer/backend/app/routers/admin.py +0 -237
  93. package/apps/travel-chaos-organizer/backend/app/routers/cache.py +0 -13
  94. package/apps/travel-chaos-organizer/backend/app/routers/events.py +0 -29
  95. package/apps/travel-chaos-organizer/backend/app/routers/export.py +0 -122
  96. package/apps/travel-chaos-organizer/backend/app/routers/inbox.py +0 -122
  97. package/apps/travel-chaos-organizer/backend/app/routers/items.py +0 -130
  98. package/apps/travel-chaos-organizer/backend/app/routers/mail.py +0 -108
  99. package/apps/travel-chaos-organizer/backend/app/routers/parse.py +0 -303
  100. package/apps/travel-chaos-organizer/backend/app/routers/payments.py +0 -179
  101. package/apps/travel-chaos-organizer/backend/app/routers/trips.py +0 -134
  102. package/apps/travel-chaos-organizer/backend/app/routers/users.py +0 -169
  103. package/apps/travel-chaos-organizer/backend/app/routers/waitlist.py +0 -37
  104. package/apps/travel-chaos-organizer/backend/app/services/__init__.py +0 -0
  105. package/apps/travel-chaos-organizer/backend/app/services/cache.py +0 -131
  106. package/apps/travel-chaos-organizer/backend/app/services/drip.py +0 -128
  107. package/apps/travel-chaos-organizer/backend/app/services/email.py +0 -61
  108. package/apps/travel-chaos-organizer/backend/app/services/errors.py +0 -44
  109. package/apps/travel-chaos-organizer/backend/app/services/notifier.py +0 -10
  110. package/apps/travel-chaos-organizer/backend/app/services/ollama.py +0 -101
  111. package/apps/travel-chaos-organizer/backend/app/services/parser.py +0 -22
  112. package/apps/travel-chaos-organizer/backend/app/services/quota.py +0 -85
  113. package/apps/travel-chaos-organizer/backend/app/services/sentry.py +0 -11
  114. package/apps/travel-chaos-organizer/backend/app/services/telemetry.py +0 -35
  115. package/apps/travel-chaos-organizer/backend/pytest.ini +0 -4
  116. package/apps/travel-chaos-organizer/backend/requirements-dev.txt +0 -6
  117. package/apps/travel-chaos-organizer/backend/requirements.txt +0 -25
  118. package/apps/travel-chaos-organizer/backend/tests/__init__.py +0 -0
  119. package/apps/travel-chaos-organizer/backend/tests/conftest.py +0 -223
  120. package/apps/travel-chaos-organizer/backend/tests/test_admin.py +0 -99
  121. package/apps/travel-chaos-organizer/backend/tests/test_cache.py +0 -142
  122. package/apps/travel-chaos-organizer/backend/tests/test_drip.py +0 -32
  123. package/apps/travel-chaos-organizer/backend/tests/test_e2e_chain.py +0 -121
  124. package/apps/travel-chaos-organizer/backend/tests/test_export.py +0 -48
  125. package/apps/travel-chaos-organizer/backend/tests/test_inbox.py +0 -107
  126. package/apps/travel-chaos-organizer/backend/tests/test_items.py +0 -138
  127. package/apps/travel-chaos-organizer/backend/tests/test_mail.py +0 -113
  128. package/apps/travel-chaos-organizer/backend/tests/test_ollama.py +0 -145
  129. package/apps/travel-chaos-organizer/backend/tests/test_parse_url.py +0 -98
  130. package/apps/travel-chaos-organizer/backend/tests/test_parser.py +0 -72
  131. package/apps/travel-chaos-organizer/backend/tests/test_payments.py +0 -163
  132. package/apps/travel-chaos-organizer/backend/tests/test_quota.py +0 -46
  133. package/apps/travel-chaos-organizer/backend/tests/test_search.py +0 -67
  134. package/apps/travel-chaos-organizer/backend/tests/test_trips.py +0 -123
  135. package/apps/travel-chaos-organizer/backend/tests/test_users.py +0 -52
  136. package/apps/travel-chaos-organizer/backups/.gitkeep +0 -0
  137. package/apps/travel-chaos-organizer/caddy/Caddyfile +0 -27
  138. package/apps/travel-chaos-organizer/docker-compose.node1.yml +0 -31
  139. package/apps/travel-chaos-organizer/docker-compose.override.yml +0 -14
  140. package/apps/travel-chaos-organizer/docker-compose.yml +0 -128
  141. package/apps/travel-chaos-organizer/frontend/.env.example +0 -13
  142. package/apps/travel-chaos-organizer/frontend/app/(app)/_layout.tsx +0 -80
  143. package/apps/travel-chaos-organizer/frontend/app/(app)/inbox.tsx +0 -166
  144. package/apps/travel-chaos-organizer/frontend/app/(app)/search.tsx +0 -130
  145. package/apps/travel-chaos-organizer/frontend/app/(app)/settings.tsx +0 -381
  146. package/apps/travel-chaos-organizer/frontend/app/(app)/trips/[id].tsx +0 -346
  147. package/apps/travel-chaos-organizer/frontend/app/(app)/trips.tsx +0 -363
  148. package/apps/travel-chaos-organizer/frontend/app/(app)/upgrade/cancel.tsx +0 -34
  149. package/apps/travel-chaos-organizer/frontend/app/(app)/upgrade/success.tsx +0 -35
  150. package/apps/travel-chaos-organizer/frontend/app/(auth)/login.tsx +0 -91
  151. package/apps/travel-chaos-organizer/frontend/app/_layout.tsx +0 -71
  152. package/apps/travel-chaos-organizer/frontend/app/auth.tsx +0 -29
  153. package/apps/travel-chaos-organizer/frontend/app/index.tsx +0 -16
  154. package/apps/travel-chaos-organizer/frontend/app/onboarding.tsx +0 -119
  155. package/apps/travel-chaos-organizer/frontend/app.config.ts +0 -54
  156. package/apps/travel-chaos-organizer/frontend/assets/adaptive-icon.svg +0 -66
  157. package/apps/travel-chaos-organizer/frontend/assets/icon.svg +0 -79
  158. package/apps/travel-chaos-organizer/frontend/assets/splash.svg +0 -15
  159. package/apps/travel-chaos-organizer/frontend/components/BottomSheet.tsx +0 -102
  160. package/apps/travel-chaos-organizer/frontend/components/ConfettiCannon.tsx +0 -107
  161. package/apps/travel-chaos-organizer/frontend/components/ConfirmDialog.tsx +0 -109
  162. package/apps/travel-chaos-organizer/frontend/components/ErrorBoundary.tsx +0 -45
  163. package/apps/travel-chaos-organizer/frontend/components/FileUploadButton.tsx +0 -19
  164. package/apps/travel-chaos-organizer/frontend/components/ImportSheet.tsx +0 -155
  165. package/apps/travel-chaos-organizer/frontend/components/OfflineBadge.tsx +0 -55
  166. package/apps/travel-chaos-organizer/frontend/components/QRCodeViewer.tsx +0 -80
  167. package/apps/travel-chaos-organizer/frontend/components/ScoreRing.tsx +0 -39
  168. package/apps/travel-chaos-organizer/frontend/components/Screen.tsx +0 -39
  169. package/apps/travel-chaos-organizer/frontend/components/Skeleton.tsx +0 -70
  170. package/apps/travel-chaos-organizer/frontend/components/SwipeableInboxItem.tsx +0 -121
  171. package/apps/travel-chaos-organizer/frontend/components/SwipeableTimelineItem.tsx +0 -70
  172. package/apps/travel-chaos-organizer/frontend/components/TimelineItem.tsx +0 -73
  173. package/apps/travel-chaos-organizer/frontend/components/TimelineItemDetail.tsx +0 -130
  174. package/apps/travel-chaos-organizer/frontend/components/Toast.tsx +0 -60
  175. package/apps/travel-chaos-organizer/frontend/components/ToastContext.tsx +0 -42
  176. package/apps/travel-chaos-organizer/frontend/components/TripCard.tsx +0 -146
  177. package/apps/travel-chaos-organizer/frontend/components/TripQRModal.tsx +0 -70
  178. package/apps/travel-chaos-organizer/frontend/components/UpgradeBanner.tsx +0 -44
  179. package/apps/travel-chaos-organizer/frontend/eas.json +0 -22
  180. package/apps/travel-chaos-organizer/frontend/hooks/useInbox.ts +0 -24
  181. package/apps/travel-chaos-organizer/frontend/hooks/useNetworkSync.ts +0 -60
  182. package/apps/travel-chaos-organizer/frontend/hooks/useTrips.ts +0 -112
  183. package/apps/travel-chaos-organizer/frontend/lib/api.ts +0 -223
  184. package/apps/travel-chaos-organizer/frontend/lib/auth.ts +0 -93
  185. package/apps/travel-chaos-organizer/frontend/lib/db.ts +0 -86
  186. package/apps/travel-chaos-organizer/frontend/lib/fileCache.ts +0 -54
  187. package/apps/travel-chaos-organizer/frontend/lib/haptics.ts +0 -13
  188. package/apps/travel-chaos-organizer/frontend/lib/notifications.ts +0 -112
  189. package/apps/travel-chaos-organizer/frontend/lib/offlineQueue.ts +0 -145
  190. package/apps/travel-chaos-organizer/frontend/lib/quota.tsx +0 -43
  191. package/apps/travel-chaos-organizer/frontend/lib/sentry.ts +0 -28
  192. package/apps/travel-chaos-organizer/frontend/lib/shareIntent.ts +0 -44
  193. package/apps/travel-chaos-organizer/frontend/package-lock.json +0 -13037
  194. package/apps/travel-chaos-organizer/frontend/package.json +0 -44
  195. package/apps/travel-chaos-organizer/frontend/tsconfig.json +0 -23
  196. package/apps/travel-chaos-organizer/keycloak/realm-export.json +0 -59
  197. package/apps/travel-chaos-organizer/landing/index.html +0 -773
  198. package/apps/travel-chaos-organizer/scripts/backup.sh +0 -14
  199. package/apps/travel-chaos-organizer/scripts/configure-env.sh +0 -82
  200. package/apps/travel-chaos-organizer/scripts/deploy.sh +0 -54
  201. package/apps/travel-chaos-organizer/scripts/health-check.sh +0 -36
  202. package/apps/travel-chaos-organizer/scripts/migrate.sh +0 -7
  203. package/apps/travel-chaos-organizer/scripts/server-setup.sh +0 -85
  204. package/apps/travel-chaos-organizer/scripts/smoke-test.sh +0 -29
  205. package/apps/travel-chaos-organizer/scripts/verify-tracking.sh +0 -71
  206. package/apps/travel-chaos-organizer/telegram-bot/.env.example +0 -3
  207. package/apps/travel-chaos-organizer/telegram-bot/Dockerfile +0 -6
  208. package/apps/travel-chaos-organizer/telegram-bot/bot.py +0 -504
  209. package/apps/travel-chaos-organizer/telegram-bot/requirements.txt +0 -3
  210. package/dist/packages/telegram-notify/client.d.ts +0 -19
  211. package/dist/packages/telegram-notify/client.js +0 -75
  212. package/dist/packages/telegram-notify/client.js.map +0 -1
  213. package/dist/src/__tests__/auth.test.js.map +0 -1
  214. package/dist/src/__tests__/brain-flow.test.js.map +0 -1
  215. package/dist/src/__tests__/confidence.test.js.map +0 -1
  216. package/dist/src/__tests__/e2e/api-auth.test.js.map +0 -1
  217. package/dist/src/__tests__/e2e/api-health.test.js.map +0 -1
  218. package/dist/src/__tests__/e2e/cli.test.js.map +0 -1
  219. package/dist/src/__tests__/e2e/config.js.map +0 -1
  220. package/dist/src/__tests__/e2e/funnel.test.js.map +0 -1
  221. package/dist/src/__tests__/e2e/mcp-tools.test.js.map +0 -1
  222. package/dist/src/__tests__/e2e/provisioning.test.js.map +0 -1
  223. package/dist/src/__tests__/handlers-unit.test.js.map +0 -1
  224. package/dist/src/__tests__/namespace.test.js.map +0 -1
  225. package/dist/src/auth.js.map +0 -1
  226. package/dist/src/ckg.js.map +0 -1
  227. package/dist/src/confidence.js.map +0 -1
  228. package/dist/src/embeddings.js.map +0 -1
  229. package/dist/src/handlers/advanced.js.map +0 -1
  230. package/dist/src/handlers/brain.js.map +0 -1
  231. package/dist/src/handlers/cache.js.map +0 -1
  232. package/dist/src/handlers/context.js.map +0 -1
  233. package/dist/src/handlers/fedbrain.js.map +0 -1
  234. package/dist/src/handlers/instances.js.map +0 -1
  235. package/dist/src/handlers/roadmap.js.map +0 -1
  236. package/dist/src/handlers/syndicate.js.map +0 -1
  237. package/dist/src/handlers/tco.d.ts +0 -16
  238. package/dist/src/handlers/tco.js +0 -303
  239. package/dist/src/handlers/tco.js.map +0 -1
  240. package/dist/src/handlers/team.js.map +0 -1
  241. package/dist/src/index.js.map +0 -1
  242. package/dist/src/namespace.js.map +0 -1
  243. package/dist/src/notifier.d.ts +0 -5
  244. package/dist/src/notifier.js +0 -6
  245. package/dist/src/notifier.js.map +0 -1
  246. package/dist/src/search.js.map +0 -1
  247. package/dist/src/search.test.js.map +0 -1
  248. package/dist/src/tools.js.map +0 -1
  249. package/dist/src/utils.js.map +0 -1
  250. package/packages/telegram-notify/SPLIT_PLAN.md +0 -106
  251. package/packages/telegram-notify/client.ts +0 -88
  252. package/packages/telegram-notify/emojis.json +0 -22
  253. package/packages/telegram-notify/pyproject.toml +0 -17
  254. package/packages/telegram-notify/telegram_notify/__init__.py +0 -3
  255. package/packages/telegram-notify/telegram_notify/client.py +0 -87
  256. package/packages/telegram-notify/telegram_notify/emojis.json +0 -22
  257. package/scripts/generate-icons.js +0 -28
  258. package/src/handlers/tco.ts +0 -347
  259. package/src/notifier.ts +0 -5
  260. /package/dist/{src/__tests__ → __tests__}/auth.test.d.ts +0 -0
  261. /package/dist/{src/__tests__ → __tests__}/auth.test.js +0 -0
  262. /package/dist/{src/__tests__ → __tests__}/brain-flow.test.d.ts +0 -0
  263. /package/dist/{src/__tests__ → __tests__}/confidence.test.d.ts +0 -0
  264. /package/dist/{src/__tests__ → __tests__}/confidence.test.js +0 -0
  265. /package/dist/{src/__tests__ → __tests__}/e2e/api-auth.test.d.ts +0 -0
  266. /package/dist/{src/__tests__ → __tests__}/e2e/api-auth.test.js +0 -0
  267. /package/dist/{src/__tests__ → __tests__}/e2e/api-health.test.d.ts +0 -0
  268. /package/dist/{src/__tests__ → __tests__}/e2e/api-health.test.js +0 -0
  269. /package/dist/{src/__tests__ → __tests__}/e2e/cli.test.d.ts +0 -0
  270. /package/dist/{src/__tests__ → __tests__}/e2e/cli.test.js +0 -0
  271. /package/dist/{src/__tests__ → __tests__}/e2e/config.d.ts +0 -0
  272. /package/dist/{src/__tests__ → __tests__}/e2e/config.js +0 -0
  273. /package/dist/{src/__tests__ → __tests__}/e2e/funnel.test.d.ts +0 -0
  274. /package/dist/{src/__tests__ → __tests__}/e2e/funnel.test.js +0 -0
  275. /package/dist/{src/__tests__ → __tests__}/e2e/mcp-tools.test.d.ts +0 -0
  276. /package/dist/{src/__tests__ → __tests__}/e2e/mcp-tools.test.js +0 -0
  277. /package/dist/{src/__tests__ → __tests__}/e2e/provisioning.test.d.ts +0 -0
  278. /package/dist/{src/__tests__ → __tests__}/e2e/provisioning.test.js +0 -0
  279. /package/dist/{src/__tests__ → __tests__}/handlers-unit.test.d.ts +0 -0
  280. /package/dist/{src/__tests__ → __tests__}/namespace.test.d.ts +0 -0
  281. /package/dist/{src/__tests__ → __tests__}/namespace.test.js +0 -0
  282. /package/dist/{src/auth.d.ts → auth.d.ts} +0 -0
  283. /package/dist/{src/auth.js → auth.js} +0 -0
  284. /package/dist/{src/ckg.d.ts → ckg.d.ts} +0 -0
  285. /package/dist/{src/ckg.js → ckg.js} +0 -0
  286. /package/dist/{src/confidence.d.ts → confidence.d.ts} +0 -0
  287. /package/dist/{src/confidence.js → confidence.js} +0 -0
  288. /package/dist/{src/embeddings.d.ts → embeddings.d.ts} +0 -0
  289. /package/dist/{src/embeddings.js → embeddings.js} +0 -0
  290. /package/dist/{src/handlers → handlers}/advanced.d.ts +0 -0
  291. /package/dist/{src/handlers → handlers}/advanced.js +0 -0
  292. /package/dist/{src/handlers → handlers}/brain.d.ts +0 -0
  293. /package/dist/{src/handlers → handlers}/cache.d.ts +0 -0
  294. /package/dist/{src/handlers → handlers}/cache.js +0 -0
  295. /package/dist/{src/handlers → handlers}/context.d.ts +0 -0
  296. /package/dist/{src/handlers → handlers}/instances.d.ts +0 -0
  297. /package/dist/{src/handlers → handlers}/instances.js +0 -0
  298. /package/dist/{src/handlers → handlers}/roadmap.d.ts +0 -0
  299. /package/dist/{src/handlers → handlers}/syndicate.d.ts +0 -0
  300. /package/dist/{src/handlers → handlers}/syndicate.js +0 -0
  301. /package/dist/{src/handlers → handlers}/team.d.ts +0 -0
  302. /package/dist/{src/index.d.ts → index.d.ts} +0 -0
  303. /package/dist/{src/namespace.d.ts → namespace.d.ts} +0 -0
  304. /package/dist/{src/namespace.js → namespace.js} +0 -0
  305. /package/dist/{src/search.d.ts → search.d.ts} +0 -0
  306. /package/dist/{src/search.js → search.js} +0 -0
  307. /package/dist/{src/search.test.d.ts → search.test.d.ts} +0 -0
  308. /package/dist/{src/search.test.js → search.test.js} +0 -0
  309. /package/dist/{src/utils.d.ts → utils.d.ts} +0 -0
  310. /package/dist/{src/utils.js → utils.js} +0 -0
@@ -1,119 +0,0 @@
1
- import { useRef, useState } from "react";
2
- import {
3
- Animated, Dimensions, FlatList, StyleSheet, Text,
4
- TouchableOpacity, View,
5
- } from "react-native";
6
- import { useRouter } from "expo-router";
7
- import AsyncStorage from "@react-native-async-storage/async-storage";
8
- import { haptics } from "../lib/haptics";
9
-
10
- const { width } = Dimensions.get("window");
11
- const ONBOARDING_KEY = "tco_onboarding_done";
12
-
13
- const SLIDES = [
14
- {
15
- icon: "✈️",
16
- title: "Reisechaos ade",
17
- body: "Alle Buchungen, Tickets und Dokumente an einem Ort — automatisch sortiert.",
18
- },
19
- {
20
- icon: "📸",
21
- title: "Einfach scannen",
22
- body: "Screenshot machen, PDF teilen oder E-Mail einfügen. KI erkennt alle Details automatisch.",
23
- },
24
- {
25
- icon: "📶",
26
- title: "Offline verfügbar",
27
- body: "Deine Tickets und QR-Codes sind auch ohne Internet abrufbar — am Gate, im Zug, überall.",
28
- },
29
- {
30
- icon: "🔐",
31
- title: "Deine Daten, dein Server",
32
- body: "Alles läuft auf deiner eigenen Infrastruktur. Keine Cloud, kein Tracking.",
33
- },
34
- ];
35
-
36
- export async function isOnboardingDone(): Promise<boolean> {
37
- return (await AsyncStorage.getItem(ONBOARDING_KEY)) === "done";
38
- }
39
-
40
- export default function OnboardingScreen() {
41
- const router = useRouter();
42
- const [index, setIndex] = useState(0);
43
- const scrollX = useRef(new Animated.Value(0)).current;
44
- const listRef = useRef<FlatList>(null);
45
-
46
- async function next() {
47
- await haptics.tap();
48
- if (index < SLIDES.length - 1) {
49
- listRef.current?.scrollToIndex({ index: index + 1, animated: true });
50
- setIndex(index + 1);
51
- } else {
52
- await finish();
53
- }
54
- }
55
-
56
- async function finish() {
57
- await AsyncStorage.setItem(ONBOARDING_KEY, "done");
58
- await haptics.success();
59
- router.replace("/(auth)/login");
60
- }
61
-
62
- return (
63
- <View style={s.container}>
64
- <TouchableOpacity style={s.skip} onPress={finish}>
65
- <Text style={s.skipText}>Überspringen</Text>
66
- </TouchableOpacity>
67
-
68
- <Animated.FlatList
69
- ref={listRef}
70
- data={SLIDES}
71
- horizontal
72
- pagingEnabled
73
- showsHorizontalScrollIndicator={false}
74
- scrollEnabled={false}
75
- onScroll={Animated.event([{ nativeEvent: { contentOffset: { x: scrollX } } }], { useNativeDriver: false })}
76
- keyExtractor={(_, i) => String(i)}
77
- renderItem={({ item }) => (
78
- <View style={[s.slide, { width }]}>
79
- <Text style={s.icon}>{item.icon}</Text>
80
- <Text style={s.title}>{item.title}</Text>
81
- <Text style={s.body}>{item.body}</Text>
82
- </View>
83
- )}
84
- />
85
-
86
- <View style={s.footer}>
87
- <View style={s.dots}>
88
- {SLIDES.map((_, i) => {
89
- const inputRange = [(i - 1) * width, i * width, (i + 1) * width];
90
- const dotWidth = scrollX.interpolate({ inputRange, outputRange: [8, 24, 8], extrapolate: "clamp" });
91
- const opacity = scrollX.interpolate({ inputRange, outputRange: [0.3, 1, 0.3], extrapolate: "clamp" });
92
- return <Animated.View key={i} style={[s.dot, { width: dotWidth, opacity }]} />;
93
- })}
94
- </View>
95
-
96
- <TouchableOpacity style={s.button} onPress={next}>
97
- <Text style={s.buttonText}>
98
- {index < SLIDES.length - 1 ? "Weiter" : "Los geht's"}
99
- </Text>
100
- </TouchableOpacity>
101
- </View>
102
- </View>
103
- );
104
- }
105
-
106
- const s = StyleSheet.create({
107
- container: { flex: 1, backgroundColor: "#0f0f1a" },
108
- skip: { position: "absolute", top: 56, right: 24, zIndex: 10 },
109
- skipText: { color: "#4a4a7a", fontSize: 14 },
110
- slide: { flex: 1, alignItems: "center", justifyContent: "center", padding: 40, gap: 24 },
111
- icon: { fontSize: 88 },
112
- title: { fontSize: 30, fontWeight: "800", color: "#fff", textAlign: "center", lineHeight: 36 },
113
- body: { fontSize: 16, color: "#8888aa", textAlign: "center", lineHeight: 24, maxWidth: 300 },
114
- footer: { padding: 32, gap: 24, alignItems: "center" },
115
- dots: { flexDirection: "row", gap: 6, alignItems: "center" },
116
- dot: { height: 8, borderRadius: 4, backgroundColor: "#4f46e5" },
117
- button: { backgroundColor: "#4f46e5", paddingVertical: 16, borderRadius: 14, width: "100%", alignItems: "center" },
118
- buttonText: { color: "#fff", fontSize: 17, fontWeight: "700" },
119
- });
@@ -1,54 +0,0 @@
1
- import { ExpoConfig } from "expo/config";
2
-
3
- const config: ExpoConfig = {
4
- name: "Travel Chaos Organizer",
5
- slug: "travel-chaos-organizer",
6
- version: "0.1.0",
7
- scheme: "tco",
8
- runtimeVersion: {
9
- policy: "appVersion",
10
- },
11
- orientation: "portrait",
12
- icon: "./assets/icon.png",
13
- splash: {
14
- image: "./assets/splash.png",
15
- backgroundColor: "#0f0f1a",
16
- },
17
- updates: {
18
- url: "https://u.expo.dev/ed92c1f4-4f25-411f-a945-3c77f58d8550",
19
- enabled: true,
20
- fallbackToCacheTimeout: 3000,
21
- checkAutomatically: "ON_LOAD",
22
- },
23
- ios: {
24
- bundleIdentifier: "dev.cachly.tco",
25
- supportsTablet: true,
26
- },
27
- android: {
28
- package: "dev.cachly.tco",
29
- adaptiveIcon: {
30
- foregroundImage: "./assets/adaptive-icon.png",
31
- backgroundColor: "#0f0f1a",
32
- },
33
- },
34
- plugins: [
35
- "expo-router",
36
- "expo-sqlite",
37
- "expo-updates",
38
- ["expo-image-picker", { photosPermission: "Allow TCO to access your photos for travel document scanning." }],
39
- ["expo-document-picker", {}],
40
- [
41
- "expo-notifications",
42
- {
43
- icon: "./assets/icon.png",
44
- color: "#4f46e5",
45
- sounds: [],
46
- },
47
- ],
48
- ],
49
- extra: {
50
- eas: { projectId: "ed92c1f4-4f25-411f-a945-3c77f58d8550" },
51
- },
52
- };
53
-
54
- export default config;
@@ -1,66 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="1024" height="1024">
2
- <defs>
3
- <radialGradient id="glow" cx="50%" cy="43%" r="27%" fx="50%" fy="43%">
4
- <stop offset="0%" stop-color="#4f46e5" stop-opacity="0.25"/>
5
- <stop offset="100%" stop-color="#4f46e5" stop-opacity="0"/>
6
- </radialGradient>
7
- <filter id="planeShadow" x="-20%" y="-20%" width="140%" height="140%">
8
- <feDropShadow dx="0" dy="8" stdDeviation="16" flood-color="#4f46e5" flood-opacity="0.4"/>
9
- </filter>
10
- </defs>
11
-
12
- <!-- Radial glow behind plane -->
13
- <ellipse cx="512" cy="440" rx="300" ry="280" fill="url(#glow)"/>
14
-
15
- <!-- Paper plane group, centered ~(512, 420) -->
16
- <g filter="url(#planeShadow)">
17
- <!-- Main wing body -->
18
- <polygon
19
- points="192,540 512,270 832,420 512,480"
20
- fill="#ffffff"
21
- opacity="0.97"
22
- />
23
- <!-- Lower wing / tail -->
24
- <polygon
25
- points="192,540 512,480 400,620"
26
- fill="#c7c4f0"
27
- opacity="0.85"
28
- />
29
- <!-- Nose crease highlight -->
30
- <polygon
31
- points="512,270 832,420 512,380"
32
- fill="#e8e6ff"
33
- opacity="0.6"
34
- />
35
- <!-- Tail fold accent -->
36
- <polygon
37
- points="400,620 512,480 512,560"
38
- fill="#9d9ae8"
39
- opacity="0.7"
40
- />
41
- </g>
42
-
43
- <!-- TCO text -->
44
- <text
45
- x="512"
46
- y="692"
47
- font-family="system-ui, -apple-system, sans-serif"
48
- font-size="140"
49
- font-weight="700"
50
- fill="#ffffff"
51
- text-anchor="middle"
52
- letter-spacing="12"
53
- >TCO</text>
54
-
55
- <!-- Subtitle text -->
56
- <text
57
- x="512"
58
- y="778"
59
- font-family="system-ui, -apple-system, sans-serif"
60
- font-size="52"
61
- font-weight="400"
62
- fill="#6666aa"
63
- text-anchor="middle"
64
- letter-spacing="3"
65
- >Travel Chaos Organizer</text>
66
- </svg>
@@ -1,79 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="1024" height="1024">
2
- <defs>
3
- <radialGradient id="glow" cx="50%" cy="43%" r="27%" fx="50%" fy="43%">
4
- <stop offset="0%" stop-color="#4f46e5" stop-opacity="0.25"/>
5
- <stop offset="100%" stop-color="#4f46e5" stop-opacity="0"/>
6
- </radialGradient>
7
- <radialGradient id="bgGlow" cx="50%" cy="50%" r="60%">
8
- <stop offset="0%" stop-color="#1a1535"/>
9
- <stop offset="100%" stop-color="#0f0f1a"/>
10
- </radialGradient>
11
- <filter id="planeShadow" x="-20%" y="-20%" width="140%" height="140%">
12
- <feDropShadow dx="0" dy="8" stdDeviation="16" flood-color="#4f46e5" flood-opacity="0.4"/>
13
- </filter>
14
- </defs>
15
-
16
- <!-- Background -->
17
- <rect width="1024" height="1024" rx="220" fill="url(#bgGlow)"/>
18
-
19
- <!-- Subtle top highlight -->
20
- <rect width="1024" height="1024" rx="220" fill="url(#bgGlow)" opacity="0"/>
21
-
22
- <!-- Accent border glow -->
23
- <rect width="1024" height="1024" rx="220" fill="none" stroke="#4f46e5" stroke-width="2" stroke-opacity="0.15"/>
24
-
25
- <!-- Radial glow behind plane -->
26
- <ellipse cx="512" cy="440" rx="300" ry="280" fill="url(#glow)"/>
27
-
28
- <!-- Paper plane group, centered ~(512, 420) -->
29
- <g filter="url(#planeShadow)">
30
- <!-- Main wing body: large right-pointing shape -->
31
- <polygon
32
- points="192,540 512,270 832,420 512,480"
33
- fill="#ffffff"
34
- opacity="0.97"
35
- />
36
- <!-- Lower wing / tail -->
37
- <polygon
38
- points="192,540 512,480 400,620"
39
- fill="#c7c4f0"
40
- opacity="0.85"
41
- />
42
- <!-- Nose crease highlight -->
43
- <polygon
44
- points="512,270 832,420 512,380"
45
- fill="#e8e6ff"
46
- opacity="0.6"
47
- />
48
- <!-- Tail fold accent -->
49
- <polygon
50
- points="400,620 512,480 512,560"
51
- fill="#9d9ae8"
52
- opacity="0.7"
53
- />
54
- </g>
55
-
56
- <!-- TCO text -->
57
- <text
58
- x="512"
59
- y="692"
60
- font-family="system-ui, -apple-system, sans-serif"
61
- font-size="140"
62
- font-weight="700"
63
- fill="#ffffff"
64
- text-anchor="middle"
65
- letter-spacing="12"
66
- >TCO</text>
67
-
68
- <!-- Subtitle text -->
69
- <text
70
- x="512"
71
- y="778"
72
- font-family="system-ui, -apple-system, sans-serif"
73
- font-size="52"
74
- font-weight="400"
75
- fill="#6666aa"
76
- text-anchor="middle"
77
- letter-spacing="3"
78
- >Travel Chaos Organizer</text>
79
- </svg>
@@ -1,15 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="1284" height="2778" viewBox="0 0 1284 2778">
2
- <rect width="1284" height="2778" fill="#0f0f1a"/>
3
- <radialGradient id="g" cx="642" cy="1389" r="400" gradientUnits="userSpaceOnUse">
4
- <stop offset="0" stop-color="#4f46e5" stop-opacity="0.25"/>
5
- <stop offset="1" stop-color="#4f46e5" stop-opacity="0"/>
6
- </radialGradient>
7
- <circle cx="642" cy="1389" r="400" fill="url(#g)"/>
8
- <g transform="translate(642,1330)">
9
- <polygon points="-110,-80 160,0 -110,80 -40,0" fill="#ffffff"/>
10
- <polygon points="-110,80 -40,0 -110,20" fill="#a5b4fc"/>
11
- <polygon points="-110,-80 -40,0 20,-60" fill="#e0e7ff" opacity="0.6"/>
12
- </g>
13
- <text x="642" y="1510" font-family="system-ui,-apple-system,sans-serif" font-size="120" font-weight="700" fill="#ffffff" text-anchor="middle" letter-spacing="12">TCO</text>
14
- <text x="642" y="1590" font-family="system-ui,-apple-system,sans-serif" font-size="40" fill="#6666aa" text-anchor="middle" letter-spacing="3">Travel Chaos Organizer</text>
15
- </svg>
@@ -1,102 +0,0 @@
1
- /**
2
- * Native-feel bottom sheet — replaces Modal for most action sheets.
3
- * Animated slide-up, backdrop tap to dismiss, safe-area aware.
4
- */
5
- import { ReactNode, useEffect, useRef } from "react";
6
- import {
7
- Animated, Dimensions, KeyboardAvoidingView, Platform, Pressable, ScrollView, StyleSheet, View,
8
- } from "react-native";
9
- import { useSafeAreaInsets } from "react-native-safe-area-context";
10
-
11
- const { height: SCREEN_HEIGHT } = Dimensions.get("window");
12
-
13
- type Props = {
14
- visible: boolean;
15
- onClose: () => void;
16
- children?: ReactNode;
17
- /** Sheet takes up this fraction of screen height (default 0.5) */
18
- heightFraction?: number;
19
- /** Set true when sheet contains text inputs so keyboard doesn't cover them */
20
- hasInputs?: boolean;
21
- };
22
-
23
- export default function BottomSheet({ visible, onClose, children, heightFraction = 0.5, hasInputs = false }: Props) {
24
- const insets = useSafeAreaInsets();
25
- const translateY = useRef(new Animated.Value(SCREEN_HEIGHT)).current;
26
- const backdropOpacity = useRef(new Animated.Value(0)).current;
27
-
28
- useEffect(() => {
29
- if (visible) {
30
- Animated.parallel([
31
- Animated.spring(translateY, { toValue: 0, useNativeDriver: true, damping: 20, stiffness: 200 }),
32
- Animated.timing(backdropOpacity, { toValue: 1, duration: 200, useNativeDriver: true }),
33
- ]).start();
34
- } else {
35
- Animated.parallel([
36
- Animated.timing(translateY, { toValue: SCREEN_HEIGHT, duration: 250, useNativeDriver: true }),
37
- Animated.timing(backdropOpacity, { toValue: 0, duration: 200, useNativeDriver: true }),
38
- ]).start();
39
- }
40
- }, [visible]);
41
-
42
- if (!visible && (translateY as any).__getValue() === SCREEN_HEIGHT) return null;
43
-
44
- return (
45
- <View style={StyleSheet.absoluteFill} pointerEvents={visible ? "auto" : "none"}>
46
- <Animated.View style={[s.backdrop, { opacity: backdropOpacity }]}>
47
- <Pressable style={StyleSheet.absoluteFill} onPress={onClose} />
48
- </Animated.View>
49
-
50
- <Animated.View
51
- style={[
52
- s.sheet,
53
- {
54
- height: SCREEN_HEIGHT * heightFraction,
55
- paddingBottom: insets.bottom + 16,
56
- transform: [{ translateY }],
57
- },
58
- ]}
59
- >
60
- <View style={s.handle} />
61
- {hasInputs ? (
62
- <KeyboardAvoidingView
63
- style={{ flex: 1 }}
64
- behavior={Platform.OS === "ios" ? "padding" : "height"}
65
- keyboardVerticalOffset={16}
66
- >
67
- <ScrollView
68
- keyboardShouldPersistTaps="handled"
69
- showsVerticalScrollIndicator={false}
70
- contentContainerStyle={{ flexGrow: 1 }}
71
- >
72
- {children}
73
- </ScrollView>
74
- </KeyboardAvoidingView>
75
- ) : children}
76
- </Animated.View>
77
- </View>
78
- );
79
- }
80
-
81
- const s = StyleSheet.create({
82
- backdrop: { ...StyleSheet.absoluteFillObject, backgroundColor: "#000000bb" },
83
- sheet: {
84
- position: "absolute",
85
- bottom: 0,
86
- left: 0,
87
- right: 0,
88
- backgroundColor: "#1a1a2e",
89
- borderTopLeftRadius: 24,
90
- borderTopRightRadius: 24,
91
- paddingTop: 12,
92
- paddingHorizontal: 20,
93
- },
94
- handle: {
95
- width: 40,
96
- height: 4,
97
- borderRadius: 2,
98
- backgroundColor: "#3a3a5e",
99
- alignSelf: "center",
100
- marginBottom: 20,
101
- },
102
- });
@@ -1,107 +0,0 @@
1
- import { useEffect, useRef } from "react";
2
- import { Animated, Dimensions, StyleSheet, View } from "react-native";
3
-
4
- type Props = {
5
- visible: boolean;
6
- };
7
-
8
- const COLORS = ["#4f46e5", "#a5b4fc", "#818cf8", "#c7d2fe", "#f59e0b", "#10b981"];
9
- const COUNT = 24;
10
- const { width } = Dimensions.get("window");
11
-
12
- function rand(min: number, max: number) {
13
- return Math.random() * (max - min) + min;
14
- }
15
-
16
- type Particle = {
17
- x: Animated.Value;
18
- y: Animated.Value;
19
- opacity: Animated.Value;
20
- scale: Animated.Value;
21
- color: string;
22
- startX: number;
23
- };
24
-
25
- export default function ConfettiCannon({ visible }: Props) {
26
- const particles = useRef<Particle[]>(
27
- Array.from({ length: COUNT }, (_, i) => ({
28
- x: new Animated.Value(0),
29
- y: new Animated.Value(0),
30
- opacity: new Animated.Value(0),
31
- scale: new Animated.Value(1),
32
- color: COLORS[i % COLORS.length],
33
- startX: rand(0, width),
34
- }))
35
- ).current;
36
-
37
- useEffect(() => {
38
- if (!visible) return;
39
-
40
- particles.forEach((p) => {
41
- p.x.setValue(0);
42
- p.y.setValue(0);
43
- p.opacity.setValue(1);
44
- p.scale.setValue(1);
45
- });
46
-
47
- const animations = particles.map((p) => {
48
- const duration = rand(900, 1200);
49
- const tx = rand(-150, 150);
50
- const ty = rand(-300, -50);
51
-
52
- return Animated.parallel([
53
- Animated.timing(p.x, { toValue: tx, duration, useNativeDriver: true }),
54
- Animated.timing(p.y, { toValue: ty, duration, useNativeDriver: true }),
55
- Animated.timing(p.scale, { toValue: 0.3, duration, useNativeDriver: true }),
56
- Animated.sequence([
57
- Animated.delay(duration * 0.6),
58
- Animated.timing(p.opacity, { toValue: 0, duration: duration * 0.4, useNativeDriver: true }),
59
- ]),
60
- ]);
61
- });
62
-
63
- Animated.parallel(animations).start();
64
- }, [visible]);
65
-
66
- if (!visible) return null;
67
-
68
- return (
69
- <View style={s.container} pointerEvents="none">
70
- {particles.map((p, i) => (
71
- <Animated.View
72
- key={i}
73
- style={[
74
- s.particle,
75
- { backgroundColor: p.color, left: p.startX - 4 },
76
- {
77
- opacity: p.opacity,
78
- transform: [
79
- { translateX: p.x },
80
- { translateY: p.y },
81
- { scale: p.scale },
82
- ],
83
- },
84
- ]}
85
- />
86
- ))}
87
- </View>
88
- );
89
- }
90
-
91
- const s = StyleSheet.create({
92
- container: {
93
- position: "absolute",
94
- bottom: 80,
95
- left: 0,
96
- right: 0,
97
- zIndex: 100,
98
- pointerEvents: "none",
99
- } as any,
100
- particle: {
101
- position: "absolute",
102
- width: 10,
103
- height: 10,
104
- borderRadius: 5,
105
- bottom: 0,
106
- },
107
- });
@@ -1,109 +0,0 @@
1
- import React, { useEffect, useRef } from "react";
2
- import { Animated, Pressable, StyleSheet, Text, TouchableOpacity, View } from "react-native";
3
-
4
- type Action = {
5
- label: string;
6
- style?: "default" | "cancel" | "destructive";
7
- onPress?: () => void;
8
- };
9
-
10
- type Props = {
11
- visible: boolean;
12
- title: string;
13
- message?: string;
14
- actions: Action[];
15
- };
16
-
17
- export default function ConfirmDialog({ visible, title, message, actions }: Props) {
18
- const opacity = useRef(new Animated.Value(0)).current;
19
- const scale = useRef(new Animated.Value(0.92)).current;
20
-
21
- useEffect(() => {
22
- if (visible) {
23
- Animated.parallel([
24
- Animated.timing(opacity, { toValue: 1, duration: 180, useNativeDriver: true }),
25
- Animated.spring(scale, { toValue: 1, useNativeDriver: true, damping: 18, stiffness: 280 }),
26
- ]).start();
27
- } else {
28
- Animated.parallel([
29
- Animated.timing(opacity, { toValue: 0, duration: 140, useNativeDriver: true }),
30
- Animated.timing(scale, { toValue: 0.92, duration: 140, useNativeDriver: true }),
31
- ]).start();
32
- }
33
- }, [visible]);
34
-
35
- if (!visible) return null;
36
-
37
- return (
38
- <View style={s.overlay} pointerEvents="box-none">
39
- <Pressable style={StyleSheet.absoluteFill} />
40
- <Animated.View style={[s.backdrop, { opacity }]} />
41
- <Animated.View style={[s.card, { opacity, transform: [{ scale }] }]}>
42
- <Text style={s.title}>{title}</Text>
43
- {message ? <Text style={s.message}>{message}</Text> : null}
44
- <View style={s.actions}>
45
- {actions.map((a, i) => (
46
- <TouchableOpacity
47
- key={i}
48
- style={[
49
- s.btn,
50
- a.style === "destructive" && s.btnDestructive,
51
- a.style === "cancel" && s.btnCancel,
52
- ]}
53
- onPress={a.onPress}
54
- activeOpacity={0.75}
55
- accessibilityRole="button"
56
- accessibilityLabel={a.label}
57
- >
58
- <Text
59
- style={[
60
- s.btnText,
61
- a.style === "destructive" && s.btnTextDestructive,
62
- a.style === "cancel" && s.btnTextCancel,
63
- ]}
64
- >
65
- {a.label}
66
- </Text>
67
- </TouchableOpacity>
68
- ))}
69
- </View>
70
- </Animated.View>
71
- </View>
72
- );
73
- }
74
-
75
- const s = StyleSheet.create({
76
- overlay: {
77
- ...StyleSheet.absoluteFillObject,
78
- alignItems: "center",
79
- justifyContent: "center",
80
- zIndex: 9999,
81
- },
82
- backdrop: {
83
- ...StyleSheet.absoluteFillObject,
84
- backgroundColor: "#000000bb",
85
- },
86
- card: {
87
- backgroundColor: "#1a1a2e",
88
- borderRadius: 20,
89
- padding: 24,
90
- width: 300,
91
- borderWidth: 1,
92
- borderColor: "#2a2a4a",
93
- gap: 8,
94
- },
95
- title: { color: "#fff", fontSize: 17, fontWeight: "700" },
96
- message: { color: "#9999cc", fontSize: 14, lineHeight: 20 },
97
- actions: { flexDirection: "column", gap: 8, marginTop: 8 },
98
- btn: {
99
- backgroundColor: "#4f46e5",
100
- borderRadius: 12,
101
- paddingVertical: 12,
102
- alignItems: "center",
103
- },
104
- btnCancel: { backgroundColor: "transparent", borderWidth: 1, borderColor: "#2a2a4a" },
105
- btnDestructive: { backgroundColor: "#7f1d1d" },
106
- btnText: { color: "#fff", fontWeight: "700", fontSize: 15 },
107
- btnTextCancel: { color: "#9999cc" },
108
- btnTextDestructive: { color: "#fca5a5" },
109
- });