wadi 1.0.0
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/.agent/workflows/auto_sync.md +19 -0
- package/.agent/workflows/kivo_pipeline.md +27 -0
- package/.devcontainer/devcontainer.json +27 -0
- package/.github/workflows/kivo-cicd.yml +45 -0
- package/.github/workflows/monorepo-ci.yml +51 -0
- package/.github/workflows/wadi-ci.yml +38 -0
- package/.husky/pre-commit +2 -0
- package/.prettierignore +12 -0
- package/.prettierrc +9 -0
- package/.vscode/settings.json +19 -0
- package/CHANGELOG.md +56 -0
- package/CODE_OF_CONDUCT.md +43 -0
- package/CONTRIBUTING.md +42 -0
- package/DEPLOY_GUIDE.md +143 -0
- package/GO_LIVE_CHECKLIST.md +41 -0
- package/GO_LIVE_COMPLETE_REPORT.md +58 -0
- package/GO_LIVE_VALIDATION.md +39 -0
- package/LEGAL.md +38 -0
- package/MANIFESTO.md +40 -0
- package/MANUAL.md +82 -0
- package/OPS_PLAN.md +90 -0
- package/README.md +126 -0
- package/RELEASE_NOTES.md +51 -0
- package/ROADMAP.md +51 -0
- package/api_listado.txt +2197 -0
- package/apps/api/WADI_PROTOCOL.md +52 -0
- package/apps/api/debug-brain.js +11 -0
- package/apps/api/package.json +21 -0
- package/apps/api/src/core/analisis.js +17 -0
- package/apps/api/src/core/errors.js +31 -0
- package/apps/api/src/core/logger.js +32 -0
- package/apps/api/src/core/prompt-kivo.js +62 -0
- package/apps/api/src/index.js +212 -0
- package/apps/api/src/layers/human_pattern/composeResponse.js +35 -0
- package/apps/api/src/layers/human_pattern/detectPattern.js +39 -0
- package/apps/api/src/layers/human_pattern/heuristics.js +28 -0
- package/apps/api/src/layers/human_pattern/index.js +28 -0
- package/apps/api/src/layers/human_pattern/socialMemory.js +35 -0
- package/apps/api/src/middleware/errorHandler.js +24 -0
- package/apps/api/src/middleware/rateLimiter.js +38 -0
- package/apps/api/src/middleware/requestLogger.js +31 -0
- package/apps/api/src/middleware/upload.js +21 -0
- package/apps/api/src/middleware/validation.js +70 -0
- package/apps/api/src/modules/data.js +25 -0
- package/apps/api/src/modules/marketing.js +54 -0
- package/apps/api/src/modules/projects.js +40 -0
- package/apps/api/src/openai.js +16 -0
- package/apps/api/src/preferences/index.js +20 -0
- package/apps/api/src/register_user.js +22 -0
- package/apps/api/src/routes/kivo.js +58 -0
- package/apps/api/src/routes/monitoring.js +55 -0
- package/apps/api/src/routes.js +656 -0
- package/apps/api/src/supabase.js +17 -0
- package/apps/api/src/tools/index.js +57 -0
- package/apps/api/src/wadi-brain.js +171 -0
- package/apps/api/supabase/migrations/20251218_audit_logs.sql +27 -0
- package/apps/api/supabase/migrations/v2-chat-persistence.sql +83 -0
- package/apps/api/supabase/migrations/v3-cascade-delete.sql +11 -0
- package/apps/api/supabase/migrations/v3-security-fix.sql +90 -0
- package/apps/api/supabase/migrations/v3-storage.sql +36 -0
- package/apps/api/supabase/migrations/v4-gamification.sql +83 -0
- package/apps/api/supabase/migrations/v5-smoke-index.sql +6 -0
- package/apps/api/supabase/migrations/v6-schema-integrity-fix.sql +98 -0
- package/apps/api/supabase/migrations/v7-performance-indexes.sql +5 -0
- package/apps/api/supabase/migrations/v7-security-hardening.sql +132 -0
- package/apps/api/supabase/migrations/v8-security-hardening.sql +79 -0
- package/apps/api/test_human_pattern.js +30 -0
- package/apps/api/test_human_pattern_vague.js +30 -0
- package/apps/api/test_output.txt +76 -0
- package/apps/api/test_vague.js +30 -0
- package/apps/api/test_vague_block.js +30 -0
- package/apps/api/test_wadi.js +31 -0
- package/apps/api/tsconfig.json +13 -0
- package/apps/frontend/.env.local +3 -0
- package/apps/frontend/README.md +73 -0
- package/apps/frontend/eslint.config.js +27 -0
- package/apps/frontend/index.html +49 -0
- package/apps/frontend/package.json +41 -0
- package/apps/frontend/postcss.config.cjs +6 -0
- package/apps/frontend/public/cursors/wadi-neutral.svg +1 -0
- package/apps/frontend/public/cursors/wadi-select.svg +1 -0
- package/apps/frontend/public/icon-192.svg +1 -0
- package/apps/frontend/public/icon-512.svg +1 -0
- package/apps/frontend/public/manifest.webmanifest +23 -0
- package/apps/frontend/public/sw.js +57 -0
- package/apps/frontend/public/vite.svg +1 -0
- package/apps/frontend/public/wadi.svg +5 -0
- package/apps/frontend/src/assets/react.svg +1 -0
- package/apps/frontend/src/components/AuthLoader.tsx +50 -0
- package/apps/frontend/src/components/ChatInput.tsx +272 -0
- package/apps/frontend/src/components/ChatInterface.tsx +202 -0
- package/apps/frontend/src/components/ErrorBoundary.tsx +52 -0
- package/apps/frontend/src/components/InputArea.tsx +201 -0
- package/apps/frontend/src/components/Layout.tsx +73 -0
- package/apps/frontend/src/components/MessageBubble.tsx +66 -0
- package/apps/frontend/src/components/OnboardingModal.tsx +108 -0
- package/apps/frontend/src/components/SettingsModal.tsx +187 -0
- package/apps/frontend/src/components/Sidebar.tsx +171 -0
- package/apps/frontend/src/components/WadiOnboarding.tsx +71 -0
- package/apps/frontend/src/components/auditor/AuditReport.tsx +166 -0
- package/apps/frontend/src/components/auditor/AuditorHeader.tsx +34 -0
- package/apps/frontend/src/components/auditor/ContextPanel.tsx +138 -0
- package/apps/frontend/src/components/auditor/DataDeconstructor.tsx +85 -0
- package/apps/frontend/src/components/auditor/DecisionWall.tsx +65 -0
- package/apps/frontend/src/components/auditor/Dropzone.tsx +137 -0
- package/apps/frontend/src/components/common/Button.tsx +97 -0
- package/apps/frontend/src/components/common/Card.tsx +43 -0
- package/apps/frontend/src/components/common/Input.tsx +73 -0
- package/apps/frontend/src/components/common/Modal.tsx +53 -0
- package/apps/frontend/src/components/ui/Button.tsx +68 -0
- package/apps/frontend/src/components/ui/Card.tsx +86 -0
- package/apps/frontend/src/components/ui/Input.tsx +28 -0
- package/apps/frontend/src/components/ui/LogItem.tsx +64 -0
- package/apps/frontend/src/components/ui/MondayButton.tsx +40 -0
- package/apps/frontend/src/components/ui/MondayCard.tsx +24 -0
- package/apps/frontend/src/components/ui/Scouter.tsx +208 -0
- package/apps/frontend/src/components/ui/TerminalInput.tsx +202 -0
- package/apps/frontend/src/components/ui/Tooltip.tsx +67 -0
- package/apps/frontend/src/config/chatShortcuts.ts +20 -0
- package/apps/frontend/src/config/supabase.ts +6 -0
- package/apps/frontend/src/final_status.txt +3 -0
- package/apps/frontend/src/hooks/useScouter.ts +28 -0
- package/apps/frontend/src/hooks/useStoreHydration.ts +24 -0
- package/apps/frontend/src/improvement_status.txt +5 -0
- package/apps/frontend/src/index.css +88 -0
- package/apps/frontend/src/main.tsx +62 -0
- package/apps/frontend/src/monday_status.txt +7 -0
- package/apps/frontend/src/pages/ChatPage.tsx +201 -0
- package/apps/frontend/src/pages/DashboardPage.tsx +375 -0
- package/apps/frontend/src/pages/IntroWadi.tsx +114 -0
- package/apps/frontend/src/pages/LandingPage.tsx +103 -0
- package/apps/frontend/src/pages/Login.tsx +190 -0
- package/apps/frontend/src/pages/PrivacyPage.tsx +213 -0
- package/apps/frontend/src/pages/ProjectDetail.tsx +80 -0
- package/apps/frontend/src/pages/Projects.tsx +247 -0
- package/apps/frontend/src/pages/TermsPage.tsx +202 -0
- package/apps/frontend/src/router.tsx +83 -0
- package/apps/frontend/src/store/authStore.ts +152 -0
- package/apps/frontend/src/store/chatStore.ts +837 -0
- package/apps/frontend/src/store/documentStore.ts +89 -0
- package/apps/frontend/src/store/projectsStore.ts +111 -0
- package/apps/frontend/src/store/runsStore.ts +98 -0
- package/apps/frontend/src/utils/api.ts +34 -0
- package/apps/frontend/src/vite-env.d.ts +7 -0
- package/apps/frontend/tailwind.config.cjs +32 -0
- package/apps/frontend/tsconfig.app.json +27 -0
- package/apps/frontend/tsconfig.json +7 -0
- package/apps/frontend/tsconfig.node.json +26 -0
- package/apps/frontend/vite.config.ts +25 -0
- package/apps/kivo/.firebase/hosting.d3d3.cache +11 -0
- package/apps/kivo/.firebaserc +5 -0
- package/apps/kivo/BRANDING_GUIDE.md +71 -0
- package/apps/kivo/DEPLOYMENT_READY.md +46 -0
- package/apps/kivo/DEPLOY_URL.md +12 -0
- package/apps/kivo/IMPLEMENTATION_REPORT.md +35 -0
- package/apps/kivo/IMPLEMENTATION_REPORT_FINAL.md +49 -0
- package/apps/kivo/PLAN_MOBILE_2.0.md +44 -0
- package/apps/kivo/PWA_VERIFICATION_GUIDE.md +77 -0
- package/apps/kivo/README.md +28 -0
- package/apps/kivo/REBUILD_REPORT.md +34 -0
- package/apps/kivo/UPGRADE_REPORT.md +35 -0
- package/apps/kivo/android/app/build.gradle +54 -0
- package/apps/kivo/android/app/capacitor.build.gradle +19 -0
- package/apps/kivo/android/app/proguard-rules.pro +21 -0
- package/apps/kivo/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java +26 -0
- package/apps/kivo/android/app/src/main/AndroidManifest.xml +35 -0
- package/apps/kivo/android/app/src/main/java/com/kivo/app/MainActivity.java +5 -0
- package/apps/kivo/android/app/src/main/res/drawable/ic_launcher_background.xml +170 -0
- package/apps/kivo/android/app/src/main/res/drawable/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-hdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-ldpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-mdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-night-hdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-night-ldpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-night-mdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-night-xhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-night-xxhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-night-xxxhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-xhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-xxhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-land-xxxhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-night/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-hdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-ldpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-mdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-night-hdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-night-ldpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-night-mdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-night-xhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-night-xxhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-night-xxxhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-xhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-xxhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-port-xxxhdpi/splash.png +0 -0
- package/apps/kivo/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +34 -0
- package/apps/kivo/android/app/src/main/res/layout/activity_main.xml +12 -0
- package/apps/kivo/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +9 -0
- package/apps/kivo/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +9 -0
- package/apps/kivo/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-ldpi/ic_launcher.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-ldpi/ic_launcher_background.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-ldpi/ic_launcher_foreground.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-ldpi/ic_launcher_round.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png +0 -0
- package/apps/kivo/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- package/apps/kivo/android/app/src/main/res/values/ic_launcher_background.xml +4 -0
- package/apps/kivo/android/app/src/main/res/values/strings.xml +7 -0
- package/apps/kivo/android/app/src/main/res/values/styles.xml +22 -0
- package/apps/kivo/android/app/src/main/res/xml/file_paths.xml +5 -0
- package/apps/kivo/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java +18 -0
- package/apps/kivo/android/build.gradle +29 -0
- package/apps/kivo/android/capacitor.settings.gradle +3 -0
- package/apps/kivo/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/apps/kivo/android/gradle/wrapper/gradle-wrapper.properties +7 -0
- package/apps/kivo/android/gradle.properties +22 -0
- package/apps/kivo/android/gradlew +252 -0
- package/apps/kivo/android/gradlew.bat +94 -0
- package/apps/kivo/android/settings.gradle +5 -0
- package/apps/kivo/android/variables.gradle +16 -0
- package/apps/kivo/assets/icon.png +0 -0
- package/apps/kivo/assets/splash.png +0 -0
- package/apps/kivo/capacitor.config.json +16 -0
- package/apps/kivo/firebase.json +6 -0
- package/apps/kivo/jest.config.js +4 -0
- package/apps/kivo/package.json +26 -0
- package/apps/kivo/tests_disabled/logic.test.js +34 -0
- package/apps/kivo/www/assets/icon-192.png +0 -0
- package/apps/kivo/www/assets/icon-512.png +0 -0
- package/apps/kivo/www/assets/kivo-icon.png +0 -0
- package/apps/kivo/www/assets/pop.mp3 +0 -0
- package/apps/kivo/www/favicon.ico +0 -0
- package/apps/kivo/www/firebase-config.js +75 -0
- package/apps/kivo/www/index.html +38 -0
- package/apps/kivo/www/manifest.json +29 -0
- package/apps/kivo/www/script.js +72 -0
- package/apps/kivo/www/style.css +82 -0
- package/apps/kivo/www/sw.js +46 -0
- package/apps/kivo-brain-api/.env.example +2 -0
- package/apps/kivo-brain-api/KIVO_BACKEND_SETUP.md +27 -0
- package/apps/kivo-brain-api/controllers/kivoController.js +31 -0
- package/apps/kivo-brain-api/index.js +24 -0
- package/apps/kivo-brain-api/package.json +17 -0
- package/apps/kivo-brain-api/routes/message.js +8 -0
- package/apps/kivo-brain-api/services/openaiService.js +64 -0
- package/apps/tests/wadi-tests.js +155 -0
- package/apps/wadi-brain/docs/README_REMOVE_OPTIONS.md +26 -0
- package/cli/commands/deploy.js +10 -0
- package/cli/commands/docs.js +16 -0
- package/cli/commands/explain.js +29 -0
- package/cli/commands/lint.js +14 -0
- package/cli/index.js +26 -0
- package/cli/package.json +12 -0
- package/docs/CNAME +1 -0
- package/docs/README.md +38 -0
- package/docs/USO.md +30 -0
- package/docs/index.html +46 -0
- package/eslint.config.js +101 -0
- package/final_validation.json +27 -0
- package/frontend_listado.txt +33387 -0
- package/listado.txt +12591 -0
- package/package.json +46 -0
- package/packages/logger/index.js +43 -0
- package/packages/logger/package.json +19 -0
- package/packages/logger/test-logger.js +7 -0
- package/packages_listado.txt +801 -0
- package/pnpm-workspace.yaml +6 -0
- package/reseteador_existencial.ps1 +40 -0
- package/scripts/bump-version.js +26 -0
- package/scripts/env.ps1 +13 -0
- package/scripts/setup_android.ps1 +25 -0
- package/scripts/setup_virtual_env.ps1 +77 -0
- package/scripts/smoke-test.js +84 -0
- package/scripts/trigger_render_deploy.ps1 +3 -0
- package/scripts/validate-release.js +34 -0
- package/temp_check.js +57 -0
- package/tsconfig.json +5 -0
- package/validation_report.json +27 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Kivo Mobile 2.0 Implementation Report
|
|
2
|
+
|
|
3
|
+
## 1. Visual Mockup
|
|
4
|
+
|
|
5
|
+
- [x] Generated UI Mockup.
|
|
6
|
+
|
|
7
|
+
## 2. Mobile Responsive UI (apps/kivo/www/)
|
|
8
|
+
|
|
9
|
+
- [x] **Layout**:
|
|
10
|
+
- [x] Updated `style.css` for iMessage/WhatsApp style bubbles.
|
|
11
|
+
- [x] Ensured fixed input bar with `position: sticky` or `fixed`.
|
|
12
|
+
- [x] Added smooth scrolling and entry animations.
|
|
13
|
+
- [x] **Responsive CSS**:
|
|
14
|
+
- [x] Added media queries for mobile portrait/landscape and tablets.
|
|
15
|
+
- [x] Optimized typography and spacing.
|
|
16
|
+
- [x] **Behavior**:
|
|
17
|
+
- [x] Prevented zoom on input focus.
|
|
18
|
+
- [x] Handled virtual keyboard layout shifts.
|
|
19
|
+
|
|
20
|
+
## 3. Android App via Capacitor
|
|
21
|
+
|
|
22
|
+
- [x] **Configuration**:
|
|
23
|
+
- [x] Updated `capacitor.config.json` with new App ID and plugins.
|
|
24
|
+
- [x] **Assets**:
|
|
25
|
+
- [x] Generated icons and splash screens.
|
|
26
|
+
- [x] **Sync & Build**:
|
|
27
|
+
- [x] Ran `npx cap sync`.
|
|
28
|
+
- [x] Verified Android project structure.
|
|
29
|
+
|
|
30
|
+
## 4. Full PWA Implementation
|
|
31
|
+
|
|
32
|
+
- [x] **Manifest**:
|
|
33
|
+
- [x] Updated `manifest.json` with full PWA properties (standalone, icons, colors).
|
|
34
|
+
- [x] **Service Worker**:
|
|
35
|
+
- [x] Implemented robust caching strategies in `sw.js`.
|
|
36
|
+
- [x] Added offline support.
|
|
37
|
+
- [x] **Install Flow**:
|
|
38
|
+
- [x] Added "Install" button logic (optional/hidden by default but ready).
|
|
39
|
+
|
|
40
|
+
## 5. Verification
|
|
41
|
+
|
|
42
|
+
- [x] Verified UI on mobile viewport.
|
|
43
|
+
- [x] Verified PWA installability (Lighthouse/DevTools).
|
|
44
|
+
- [x] Verified Android build readiness.
|
|
45
|
+
|
|
46
|
+
## Next Steps
|
|
47
|
+
|
|
48
|
+
- **Test PWA**: Open `http://localhost:3000` on a mobile device (via network) and try "Add to Home Screen".
|
|
49
|
+
- **Build Android**: Open `android` folder in Android Studio and run the app on a device/emulator.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Kivo Mobile 2.0 Implementation Plan
|
|
2
|
+
|
|
3
|
+
## 1. Visual Mockup
|
|
4
|
+
|
|
5
|
+
- [x] Generate UI Mockup (in progress)
|
|
6
|
+
|
|
7
|
+
## 2. Mobile Responsive UI (apps/kivo/www/)
|
|
8
|
+
|
|
9
|
+
- [ ] **Layout**:
|
|
10
|
+
- [ ] Update `style.css` for iMessage/WhatsApp style bubbles.
|
|
11
|
+
- [ ] Ensure fixed input bar with `position: sticky` or `fixed`.
|
|
12
|
+
- [ ] Add smooth scrolling and entry animations.
|
|
13
|
+
- [ ] **Responsive CSS**:
|
|
14
|
+
- [ ] Add media queries for mobile portrait/landscape and tablets.
|
|
15
|
+
- [ ] Optimize typography and spacing.
|
|
16
|
+
- [ ] **Behavior**:
|
|
17
|
+
- [ ] Prevent zoom on input focus.
|
|
18
|
+
- [ ] Handle virtual keyboard layout shifts.
|
|
19
|
+
|
|
20
|
+
## 3. Android App via Capacitor
|
|
21
|
+
|
|
22
|
+
- [ ] **Configuration**:
|
|
23
|
+
- [ ] Update `capacitor.config.json` with new App ID and plugins.
|
|
24
|
+
- [ ] **Assets**:
|
|
25
|
+
- [ ] Generate icons and splash screens.
|
|
26
|
+
- [ ] **Sync & Build**:
|
|
27
|
+
- [ ] Run `npx cap sync`.
|
|
28
|
+
- [ ] Verify Android project structure.
|
|
29
|
+
|
|
30
|
+
## 4. Full PWA Implementation
|
|
31
|
+
|
|
32
|
+
- [ ] **Manifest**:
|
|
33
|
+
- [ ] Update `manifest.json` with full PWA properties (standalone, icons, colors).
|
|
34
|
+
- [ ] **Service Worker**:
|
|
35
|
+
- [ ] Implement robust caching strategies in `sw.js`.
|
|
36
|
+
- [ ] Add offline support.
|
|
37
|
+
- [ ] **Install Flow**:
|
|
38
|
+
- [ ] Add "Install" button logic (optional/hidden by default but ready).
|
|
39
|
+
|
|
40
|
+
## 5. Verification
|
|
41
|
+
|
|
42
|
+
- [ ] Verify UI on mobile viewport.
|
|
43
|
+
- [ ] Verify PWA installability (Lighthouse/DevTools).
|
|
44
|
+
- [ ] Verify Android build readiness.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Guía de Verificación Técnica y Mantenimiento PWA - Kivo 5.0
|
|
2
|
+
|
|
3
|
+
Esta guía garantiza que la PWA de Kivo se despliegue correctamente en Firebase Hosting sin errores de recursos y con un ciclo de vida de Service Worker saludable.
|
|
4
|
+
|
|
5
|
+
## 1. Verificación Manual Post-Despliegue
|
|
6
|
+
|
|
7
|
+
Abre [Kivo Web](https://kivo-8c62e.web.app) en Chrome Incognito para evitar cachés previas.
|
|
8
|
+
|
|
9
|
+
### ✅ Estado del Service Worker
|
|
10
|
+
|
|
11
|
+
1. Abre DevTools (`F12`) > **Application** > **Service Workers**.
|
|
12
|
+
2. Verifica que el Status sea `Activated` y corriendo.
|
|
13
|
+
3. El nombre debe ser `kivo-v5` (definido en `sw.js`).
|
|
14
|
+
4. Si ves "waiting to activate", haz clic en "skipWaiting" (esto ya debería ser automático con la última actualización).
|
|
15
|
+
|
|
16
|
+
### ✅ Carga de Recursos (Network)
|
|
17
|
+
|
|
18
|
+
1. Ve a la pestaña **Network**.
|
|
19
|
+
2. Filtra por **"All"** y recarga la página (`Ctrl + R`).
|
|
20
|
+
3. Verifica que NO haya líneas rojas (404).
|
|
21
|
+
4. Confirma la carga exitosa de:
|
|
22
|
+
- `favicon.ico` (200 OK)
|
|
23
|
+
- `manifest.json` (200 OK)
|
|
24
|
+
- `sw.js` (200 OK)
|
|
25
|
+
- `pop.mp3` (200 OK - puede que no se cargue hasta que se use, verificar en `Preload` si aplica o intentar reproducir sonido).
|
|
26
|
+
- `kivo-icon.png` (200 OK).
|
|
27
|
+
|
|
28
|
+
### ✅ Instalación (Manifest)
|
|
29
|
+
|
|
30
|
+
1. Ve a la pestaña **Application** > **Manifest**.
|
|
31
|
+
2. No debe haber errores ni advertencias.
|
|
32
|
+
3. Los iconos deben mostrarse correctamente.
|
|
33
|
+
4. "App installability" no debe tener advertencias bloqueantes.
|
|
34
|
+
|
|
35
|
+
## 2. Optimización y Mantenimiento
|
|
36
|
+
|
|
37
|
+
### 🔄 Ciclo de Vida del Service Worker
|
|
38
|
+
|
|
39
|
+
Hemos añadido `self.skipWaiting()` y `self.clients.claim()` en `sw.js`. Esto asegura que:
|
|
40
|
+
|
|
41
|
+
- **skipWaiting**: El nuevo SW se instala y activa inmediatamente sin esperar a que el usuario cierre todas las pestañas.
|
|
42
|
+
- **clients.claim**: El nuevo SW toma control de la página inmediatamente, sirviendo los nuevos assets al instante.
|
|
43
|
+
|
|
44
|
+
### 🧹 Limpieza de Caché
|
|
45
|
+
|
|
46
|
+
El evento `activate` incluye una lista blanca (`CACHE_NAME = 'kivo-v5'`). Cualquier caché antigua (ej: `kivo-v4`) será borrada automáticamente.
|
|
47
|
+
|
|
48
|
+
### 🚀 Compresión y HTTP/2
|
|
49
|
+
|
|
50
|
+
Firebase Hosting habilita automáticamente HTTP/2 y compresión Brotli/Gzip para todos los recursos estáticos. No se requiere configuración adicional.
|
|
51
|
+
|
|
52
|
+
## 3. Integración en Monorepo
|
|
53
|
+
|
|
54
|
+
Actualmente el ecosistema WADI convive pero no está fuertemente acoplado en código:
|
|
55
|
+
|
|
56
|
+
- **Kivo (apps/kivo)**:
|
|
57
|
+
- Frontend independiente (Vanilla JS).
|
|
58
|
+
- Consume `kivo-brain-api` vía URL directa de Railway.
|
|
59
|
+
- Usa Firebase solo para Hosting y Firestore (configurado en `firebase-config.js`).
|
|
60
|
+
|
|
61
|
+
- **Frontend (apps/frontend)**:
|
|
62
|
+
- Proyecto React/Vite.
|
|
63
|
+
- Configurado con Supabase.
|
|
64
|
+
- Aún no consme `wadi-api` activamente en el código base revisado.
|
|
65
|
+
|
|
66
|
+
## 4. Comandos Útiles
|
|
67
|
+
|
|
68
|
+
**Desplegar solo Kivo:**
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
pnpm --filter kivo build # (Si tuviera build step, actualmente es copia estática)
|
|
72
|
+
cd apps/kivo
|
|
73
|
+
firebase deploy --only hosting
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Verificar caché local PWA:**
|
|
77
|
+
En DevTools > Application > Storage > "Clear Site Data" para resetear completamente el estado del cliente si encuentras problemas extraños.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Kivo V12
|
|
2
|
+
|
|
3
|
+
Tu espacio emocional, técnico y creativo. Este proyecto incluye:
|
|
4
|
+
|
|
5
|
+
- Motor emocional adaptativo
|
|
6
|
+
- Portada y menú de inicio
|
|
7
|
+
- Firebase integrado
|
|
8
|
+
- Estilos dinámicos según emoción y modo
|
|
9
|
+
- Modo instalable (PWA)
|
|
10
|
+
|
|
11
|
+
## 🚀 Cómo desplegar
|
|
12
|
+
|
|
13
|
+
1. Instalar Firebase CLI:
|
|
14
|
+
`npm install -g firebase-tools`
|
|
15
|
+
|
|
16
|
+
2. Iniciar sesión:
|
|
17
|
+
`firebase login`
|
|
18
|
+
|
|
19
|
+
3. Inicializar proyecto:
|
|
20
|
+
`firebase init`
|
|
21
|
+
|
|
22
|
+
4. Subir:
|
|
23
|
+
`firebase deploy`
|
|
24
|
+
|
|
25
|
+
## 📱 Cómo instalar como app
|
|
26
|
+
|
|
27
|
+
- Abrí en Chrome
|
|
28
|
+
- Tocá “Agregar a pantalla de inicio”
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Kivo Mobile 2.0 - Final Rebuild Report
|
|
2
|
+
|
|
3
|
+
## 1. Archivos Regenerados
|
|
4
|
+
|
|
5
|
+
Se ha reconstruido completamente la carpeta `apps/kivo/www/` con la siguiente estructura limpia:
|
|
6
|
+
|
|
7
|
+
- **index.html**: Estructura PWA completa, meta tags corregidos, carga de recursos relativa.
|
|
8
|
+
- **style.css**: Diseño Mobile 2.0 (Glassmorphism, paleta oficial, responsive).
|
|
9
|
+
- **script.js**: Lógica "Standalone" (Cerebro local), manejo de PWA install, sin errores de audio.
|
|
10
|
+
- **manifest.json**: Configuración PWA válida con iconos enlazados.
|
|
11
|
+
- **sw.js**: Service Worker para caché offline.
|
|
12
|
+
- **assets/**: Iconos generados (192x192, 512x512).
|
|
13
|
+
- **firebase-config.js**: Recuperado de la versión anterior funcional.
|
|
14
|
+
|
|
15
|
+
## 2. Correcciones Aplicadas
|
|
16
|
+
|
|
17
|
+
- **Error 416 (Audio)**: Eliminada la precarga de `pop.mp3`.
|
|
18
|
+
- **Rutas**: Todas las referencias son relativas (`./`) para compatibilidad con Firebase Hosting.
|
|
19
|
+
- **PWA**: Meta tags actualizados (`mobile-web-app-capable`) y lógica de instalación protegida.
|
|
20
|
+
- **Cerebro**: Lógica `kivoResponse` integrada en el cliente para funcionamiento sin backend externo.
|
|
21
|
+
|
|
22
|
+
## 3. Estado del Despliegue
|
|
23
|
+
|
|
24
|
+
- **Hosting**: Firebase Hosting
|
|
25
|
+
- **URLs**:
|
|
26
|
+
- https://kivo-8c62e.web.app
|
|
27
|
+
- https://kivo-8c62e.firebaseapp.com
|
|
28
|
+
- **Estado**: ONLINE
|
|
29
|
+
|
|
30
|
+
## 4. Verificación
|
|
31
|
+
|
|
32
|
+
- **Carga**: OK (Sin pantalla blanca).
|
|
33
|
+
- **Chat**: OK (Responde localmente).
|
|
34
|
+
- **PWA**: OK (Instalable).
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Kivo Mobile 2.0 Upgrade Report
|
|
2
|
+
|
|
3
|
+
## 1. UI & UX Overhaul
|
|
4
|
+
|
|
5
|
+
- **Structure**: Refactored `index.html` to support a modern mobile layout with fixed headers and footers.
|
|
6
|
+
- **Styling**: Implemented a complete CSS redesign (`style.css`) featuring:
|
|
7
|
+
- iMessage/WhatsApp-style message bubbles.
|
|
8
|
+
- Dynamic viewport height (`100dvh`) for perfect mobile fit.
|
|
9
|
+
- Safe area insets for notched devices.
|
|
10
|
+
- Glassmorphism effects on header and input bar.
|
|
11
|
+
- **Behavior**: Added `scrollToBottom` helper for smooth auto-scrolling and improved keyboard handling.
|
|
12
|
+
|
|
13
|
+
## 2. PWA Implementation
|
|
14
|
+
|
|
15
|
+
- **Manifest**: Updated `manifest.json` with standalone mode, theme colors, and orientation settings.
|
|
16
|
+
- **Service Worker**: `sw.js` is configured for caching critical assets.
|
|
17
|
+
- **Install Flow**: Added a custom "Install App" button that appears when the `beforeinstallprompt` event fires.
|
|
18
|
+
|
|
19
|
+
## 3. Android (Capacitor)
|
|
20
|
+
|
|
21
|
+
- **Config**: `capacitor.config.json` updated to `com.kivo.chat` with `https` scheme.
|
|
22
|
+
- **Sync**: Web assets synchronized to Android project.
|
|
23
|
+
- **Assets**: Native icons and splash screens generated.
|
|
24
|
+
|
|
25
|
+
## 4. Status
|
|
26
|
+
|
|
27
|
+
- **Web/Mobile Web**: Ready. Responsive and touch-friendly.
|
|
28
|
+
- **PWA**: Ready. Installable and offline-capable.
|
|
29
|
+
- **Android**: Ready to build. Open `android` folder in Android Studio to generate APK/AAB.
|
|
30
|
+
|
|
31
|
+
## 5. Verification
|
|
32
|
+
|
|
33
|
+
- **Local Test**: Run `npm start` and open `http://localhost:3000`.
|
|
34
|
+
- **Mobile Test**: Access via network IP on a phone.
|
|
35
|
+
- **Native Build**: Use Android Studio to build the final artifact.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
apply plugin: 'com.android.application'
|
|
2
|
+
|
|
3
|
+
android {
|
|
4
|
+
namespace "com.kivo.app"
|
|
5
|
+
compileSdk rootProject.ext.compileSdkVersion
|
|
6
|
+
defaultConfig {
|
|
7
|
+
applicationId "com.kivo.app"
|
|
8
|
+
minSdkVersion rootProject.ext.minSdkVersion
|
|
9
|
+
targetSdkVersion rootProject.ext.targetSdkVersion
|
|
10
|
+
versionCode 1
|
|
11
|
+
versionName "1.0"
|
|
12
|
+
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
|
13
|
+
aaptOptions {
|
|
14
|
+
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
|
|
15
|
+
// Default: https://android.googlesource.com/platform/frameworks/base/+/282e181b58cf72b6ca770dc7ca5f91f135444502/tools/aapt/AaptAssets.cpp#61
|
|
16
|
+
ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~'
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
buildTypes {
|
|
20
|
+
release {
|
|
21
|
+
minifyEnabled false
|
|
22
|
+
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
repositories {
|
|
28
|
+
flatDir{
|
|
29
|
+
dirs '../capacitor-cordova-android-plugins/src/main/libs', 'libs'
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
dependencies {
|
|
34
|
+
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
|
35
|
+
implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion"
|
|
36
|
+
implementation "androidx.coordinatorlayout:coordinatorlayout:$androidxCoordinatorLayoutVersion"
|
|
37
|
+
implementation "androidx.core:core-splashscreen:$coreSplashScreenVersion"
|
|
38
|
+
implementation project(':capacitor-android')
|
|
39
|
+
testImplementation "junit:junit:$junitVersion"
|
|
40
|
+
androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion"
|
|
41
|
+
androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion"
|
|
42
|
+
implementation project(':capacitor-cordova-android-plugins')
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
apply from: 'capacitor.build.gradle'
|
|
46
|
+
|
|
47
|
+
try {
|
|
48
|
+
def servicesJSON = file('google-services.json')
|
|
49
|
+
if (servicesJSON.text) {
|
|
50
|
+
apply plugin: 'com.google.gms.google-services'
|
|
51
|
+
}
|
|
52
|
+
} catch(Exception e) {
|
|
53
|
+
logger.info("google-services.json not found, google-services plugin not applied. Push Notifications won't work")
|
|
54
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN
|
|
2
|
+
|
|
3
|
+
android {
|
|
4
|
+
compileOptions {
|
|
5
|
+
sourceCompatibility JavaVersion.VERSION_21
|
|
6
|
+
targetCompatibility JavaVersion.VERSION_21
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle"
|
|
11
|
+
dependencies {
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
if (hasProperty('postBuildExtras')) {
|
|
18
|
+
postBuildExtras()
|
|
19
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Add project specific ProGuard rules here.
|
|
2
|
+
# You can control the set of applied configuration files using the
|
|
3
|
+
# proguardFiles setting in build.gradle.
|
|
4
|
+
#
|
|
5
|
+
# For more details, see
|
|
6
|
+
# http://developer.android.com/guide/developing/tools/proguard.html
|
|
7
|
+
|
|
8
|
+
# If your project uses WebView with JS, uncomment the following
|
|
9
|
+
# and specify the fully qualified class name to the JavaScript interface
|
|
10
|
+
# class:
|
|
11
|
+
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
|
12
|
+
# public *;
|
|
13
|
+
#}
|
|
14
|
+
|
|
15
|
+
# Uncomment this to preserve the line number information for
|
|
16
|
+
# debugging stack traces.
|
|
17
|
+
#-keepattributes SourceFile,LineNumberTable
|
|
18
|
+
|
|
19
|
+
# If you keep the line number information, uncomment this to
|
|
20
|
+
# hide the original source file name.
|
|
21
|
+
#-renamesourcefileattribute SourceFile
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
package com.getcapacitor.myapp;
|
|
2
|
+
|
|
3
|
+
import static org.junit.Assert.*;
|
|
4
|
+
|
|
5
|
+
import android.content.Context;
|
|
6
|
+
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
|
7
|
+
import androidx.test.platform.app.InstrumentationRegistry;
|
|
8
|
+
import org.junit.Test;
|
|
9
|
+
import org.junit.runner.RunWith;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Instrumented test, which will execute on an Android device.
|
|
13
|
+
*
|
|
14
|
+
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
|
15
|
+
*/
|
|
16
|
+
@RunWith(AndroidJUnit4.class)
|
|
17
|
+
public class ExampleInstrumentedTest {
|
|
18
|
+
|
|
19
|
+
@Test
|
|
20
|
+
public void useAppContext() throws Exception {
|
|
21
|
+
// Context of the app under test.
|
|
22
|
+
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
|
|
23
|
+
|
|
24
|
+
assertEquals("com.getcapacitor.app", appContext.getPackageName());
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
|
2
|
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
|
3
|
+
<application
|
|
4
|
+
android:allowBackup="true"
|
|
5
|
+
android:icon="@mipmap/ic_launcher"
|
|
6
|
+
android:label="@string/app_name"
|
|
7
|
+
android:roundIcon="@mipmap/ic_launcher_round"
|
|
8
|
+
android:supportsRtl="true"
|
|
9
|
+
android:theme="@style/AppTheme">
|
|
10
|
+
<activity
|
|
11
|
+
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode|navigation"
|
|
12
|
+
android:name=".MainActivity"
|
|
13
|
+
android:label="@string/title_activity_main"
|
|
14
|
+
android:theme="@style/AppTheme.NoActionBarLaunch"
|
|
15
|
+
android:launchMode="singleTask"
|
|
16
|
+
android:exported="true">
|
|
17
|
+
<intent-filter>
|
|
18
|
+
<action android:name="android.intent.action.MAIN" />
|
|
19
|
+
<category android:name="android.intent.category.LAUNCHER" />
|
|
20
|
+
</intent-filter>
|
|
21
|
+
</activity>
|
|
22
|
+
|
|
23
|
+
<provider
|
|
24
|
+
android:name="androidx.core.content.FileProvider"
|
|
25
|
+
android:authorities="${applicationId}.fileprovider"
|
|
26
|
+
android:exported="false"
|
|
27
|
+
android:grantUriPermissions="true">
|
|
28
|
+
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" />
|
|
29
|
+
</provider>
|
|
30
|
+
</application>
|
|
31
|
+
|
|
32
|
+
<!-- Permissions -->
|
|
33
|
+
|
|
34
|
+
<uses-permission android:name="android.permission.INTERNET" />
|
|
35
|
+
</manifest>
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
3
|
+
android:width="108dp"
|
|
4
|
+
android:height="108dp"
|
|
5
|
+
android:viewportHeight="108"
|
|
6
|
+
android:viewportWidth="108">
|
|
7
|
+
<path
|
|
8
|
+
android:fillColor="#26A69A"
|
|
9
|
+
android:pathData="M0,0h108v108h-108z" />
|
|
10
|
+
<path
|
|
11
|
+
android:fillColor="#00000000"
|
|
12
|
+
android:pathData="M9,0L9,108"
|
|
13
|
+
android:strokeColor="#33FFFFFF"
|
|
14
|
+
android:strokeWidth="0.8" />
|
|
15
|
+
<path
|
|
16
|
+
android:fillColor="#00000000"
|
|
17
|
+
android:pathData="M19,0L19,108"
|
|
18
|
+
android:strokeColor="#33FFFFFF"
|
|
19
|
+
android:strokeWidth="0.8" />
|
|
20
|
+
<path
|
|
21
|
+
android:fillColor="#00000000"
|
|
22
|
+
android:pathData="M29,0L29,108"
|
|
23
|
+
android:strokeColor="#33FFFFFF"
|
|
24
|
+
android:strokeWidth="0.8" />
|
|
25
|
+
<path
|
|
26
|
+
android:fillColor="#00000000"
|
|
27
|
+
android:pathData="M39,0L39,108"
|
|
28
|
+
android:strokeColor="#33FFFFFF"
|
|
29
|
+
android:strokeWidth="0.8" />
|
|
30
|
+
<path
|
|
31
|
+
android:fillColor="#00000000"
|
|
32
|
+
android:pathData="M49,0L49,108"
|
|
33
|
+
android:strokeColor="#33FFFFFF"
|
|
34
|
+
android:strokeWidth="0.8" />
|
|
35
|
+
<path
|
|
36
|
+
android:fillColor="#00000000"
|
|
37
|
+
android:pathData="M59,0L59,108"
|
|
38
|
+
android:strokeColor="#33FFFFFF"
|
|
39
|
+
android:strokeWidth="0.8" />
|
|
40
|
+
<path
|
|
41
|
+
android:fillColor="#00000000"
|
|
42
|
+
android:pathData="M69,0L69,108"
|
|
43
|
+
android:strokeColor="#33FFFFFF"
|
|
44
|
+
android:strokeWidth="0.8" />
|
|
45
|
+
<path
|
|
46
|
+
android:fillColor="#00000000"
|
|
47
|
+
android:pathData="M79,0L79,108"
|
|
48
|
+
android:strokeColor="#33FFFFFF"
|
|
49
|
+
android:strokeWidth="0.8" />
|
|
50
|
+
<path
|
|
51
|
+
android:fillColor="#00000000"
|
|
52
|
+
android:pathData="M89,0L89,108"
|
|
53
|
+
android:strokeColor="#33FFFFFF"
|
|
54
|
+
android:strokeWidth="0.8" />
|
|
55
|
+
<path
|
|
56
|
+
android:fillColor="#00000000"
|
|
57
|
+
android:pathData="M99,0L99,108"
|
|
58
|
+
android:strokeColor="#33FFFFFF"
|
|
59
|
+
android:strokeWidth="0.8" />
|
|
60
|
+
<path
|
|
61
|
+
android:fillColor="#00000000"
|
|
62
|
+
android:pathData="M0,9L108,9"
|
|
63
|
+
android:strokeColor="#33FFFFFF"
|
|
64
|
+
android:strokeWidth="0.8" />
|
|
65
|
+
<path
|
|
66
|
+
android:fillColor="#00000000"
|
|
67
|
+
android:pathData="M0,19L108,19"
|
|
68
|
+
android:strokeColor="#33FFFFFF"
|
|
69
|
+
android:strokeWidth="0.8" />
|
|
70
|
+
<path
|
|
71
|
+
android:fillColor="#00000000"
|
|
72
|
+
android:pathData="M0,29L108,29"
|
|
73
|
+
android:strokeColor="#33FFFFFF"
|
|
74
|
+
android:strokeWidth="0.8" />
|
|
75
|
+
<path
|
|
76
|
+
android:fillColor="#00000000"
|
|
77
|
+
android:pathData="M0,39L108,39"
|
|
78
|
+
android:strokeColor="#33FFFFFF"
|
|
79
|
+
android:strokeWidth="0.8" />
|
|
80
|
+
<path
|
|
81
|
+
android:fillColor="#00000000"
|
|
82
|
+
android:pathData="M0,49L108,49"
|
|
83
|
+
android:strokeColor="#33FFFFFF"
|
|
84
|
+
android:strokeWidth="0.8" />
|
|
85
|
+
<path
|
|
86
|
+
android:fillColor="#00000000"
|
|
87
|
+
android:pathData="M0,59L108,59"
|
|
88
|
+
android:strokeColor="#33FFFFFF"
|
|
89
|
+
android:strokeWidth="0.8" />
|
|
90
|
+
<path
|
|
91
|
+
android:fillColor="#00000000"
|
|
92
|
+
android:pathData="M0,69L108,69"
|
|
93
|
+
android:strokeColor="#33FFFFFF"
|
|
94
|
+
android:strokeWidth="0.8" />
|
|
95
|
+
<path
|
|
96
|
+
android:fillColor="#00000000"
|
|
97
|
+
android:pathData="M0,79L108,79"
|
|
98
|
+
android:strokeColor="#33FFFFFF"
|
|
99
|
+
android:strokeWidth="0.8" />
|
|
100
|
+
<path
|
|
101
|
+
android:fillColor="#00000000"
|
|
102
|
+
android:pathData="M0,89L108,89"
|
|
103
|
+
android:strokeColor="#33FFFFFF"
|
|
104
|
+
android:strokeWidth="0.8" />
|
|
105
|
+
<path
|
|
106
|
+
android:fillColor="#00000000"
|
|
107
|
+
android:pathData="M0,99L108,99"
|
|
108
|
+
android:strokeColor="#33FFFFFF"
|
|
109
|
+
android:strokeWidth="0.8" />
|
|
110
|
+
<path
|
|
111
|
+
android:fillColor="#00000000"
|
|
112
|
+
android:pathData="M19,29L89,29"
|
|
113
|
+
android:strokeColor="#33FFFFFF"
|
|
114
|
+
android:strokeWidth="0.8" />
|
|
115
|
+
<path
|
|
116
|
+
android:fillColor="#00000000"
|
|
117
|
+
android:pathData="M19,39L89,39"
|
|
118
|
+
android:strokeColor="#33FFFFFF"
|
|
119
|
+
android:strokeWidth="0.8" />
|
|
120
|
+
<path
|
|
121
|
+
android:fillColor="#00000000"
|
|
122
|
+
android:pathData="M19,49L89,49"
|
|
123
|
+
android:strokeColor="#33FFFFFF"
|
|
124
|
+
android:strokeWidth="0.8" />
|
|
125
|
+
<path
|
|
126
|
+
android:fillColor="#00000000"
|
|
127
|
+
android:pathData="M19,59L89,59"
|
|
128
|
+
android:strokeColor="#33FFFFFF"
|
|
129
|
+
android:strokeWidth="0.8" />
|
|
130
|
+
<path
|
|
131
|
+
android:fillColor="#00000000"
|
|
132
|
+
android:pathData="M19,69L89,69"
|
|
133
|
+
android:strokeColor="#33FFFFFF"
|
|
134
|
+
android:strokeWidth="0.8" />
|
|
135
|
+
<path
|
|
136
|
+
android:fillColor="#00000000"
|
|
137
|
+
android:pathData="M19,79L89,79"
|
|
138
|
+
android:strokeColor="#33FFFFFF"
|
|
139
|
+
android:strokeWidth="0.8" />
|
|
140
|
+
<path
|
|
141
|
+
android:fillColor="#00000000"
|
|
142
|
+
android:pathData="M29,19L29,89"
|
|
143
|
+
android:strokeColor="#33FFFFFF"
|
|
144
|
+
android:strokeWidth="0.8" />
|
|
145
|
+
<path
|
|
146
|
+
android:fillColor="#00000000"
|
|
147
|
+
android:pathData="M39,19L39,89"
|
|
148
|
+
android:strokeColor="#33FFFFFF"
|
|
149
|
+
android:strokeWidth="0.8" />
|
|
150
|
+
<path
|
|
151
|
+
android:fillColor="#00000000"
|
|
152
|
+
android:pathData="M49,19L49,89"
|
|
153
|
+
android:strokeColor="#33FFFFFF"
|
|
154
|
+
android:strokeWidth="0.8" />
|
|
155
|
+
<path
|
|
156
|
+
android:fillColor="#00000000"
|
|
157
|
+
android:pathData="M59,19L59,89"
|
|
158
|
+
android:strokeColor="#33FFFFFF"
|
|
159
|
+
android:strokeWidth="0.8" />
|
|
160
|
+
<path
|
|
161
|
+
android:fillColor="#00000000"
|
|
162
|
+
android:pathData="M69,19L69,89"
|
|
163
|
+
android:strokeColor="#33FFFFFF"
|
|
164
|
+
android:strokeWidth="0.8" />
|
|
165
|
+
<path
|
|
166
|
+
android:fillColor="#00000000"
|
|
167
|
+
android:pathData="M79,19L79,89"
|
|
168
|
+
android:strokeColor="#33FFFFFF"
|
|
169
|
+
android:strokeWidth="0.8" />
|
|
170
|
+
</vector>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|