* perf(app): keep composer typing responsive The controlled web textarea pushed every keystroke through the draft store and broad composer tree before paint. Keep live text in the focused DOM input and publish draft and selection state after paint so persistence and reactive features remain intact without blocking the typed character. * fix(app): preserve live composer state at actions * fix(app): use live input for autocomplete clicks * fix(app): keep submit activity atomic
158 lines
6.8 KiB
JSON
158 lines
6.8 KiB
JSON
{
|
|
"name": "@getpaseo/app",
|
|
"version": "0.4.0",
|
|
"private": true,
|
|
"main": "index.ts",
|
|
"scripts": {
|
|
"start": "npm run start:expo",
|
|
"start:expo": "cross-env APP_VARIANT=development expo start",
|
|
"reset-project": "node ./scripts/reset-project.js",
|
|
"eas-build-post-install": "npm --prefix ../.. run build:app-deps && npm run build:terminal-webview",
|
|
"android": "npm run android:development",
|
|
"android:development": "npm --prefix ../.. run build:client && cross-env APP_VARIANT=development expo prebuild --platform android --non-interactive && cross-env APP_VARIANT=development expo run:android --variant=debug",
|
|
"android:production": "npm --prefix ../.. run build:client && cross-env APP_VARIANT=production expo prebuild --platform android --non-interactive && cross-env APP_VARIANT=production expo run:android --variant=release",
|
|
"android:release": "npm run android:production",
|
|
"android:clear": "node -e \"require('node:fs').rmSync('android', { recursive: true, force: true })\"",
|
|
"ios": "npm --prefix ../.. run build:client && expo run:ios",
|
|
"ios:release": "npm --prefix ../.. run build:client && expo run:ios --configuration Release",
|
|
"web": "npm --prefix ../.. run build:client && concurrently --kill-others --names protocol,client,expo --prefix-colors yellow,blue,magenta \"npm --prefix ../.. run watch:protocol\" \"npm --prefix ../.. run watch:client\" \"npm run web:expo\"",
|
|
"web:expo": "expo start --web",
|
|
"lint": "expo lint",
|
|
"typecheck": "tsgo --noEmit",
|
|
"test": "vitest run",
|
|
"test:browser": "vitest run --project browser",
|
|
"test:e2e": "playwright test --project=browser",
|
|
"test:e2e:real": "cross-env E2E_FORK_PASEO_HOME_FROM=../../.dev/paseo-home playwright test --project=real-provider",
|
|
"test:e2e:relay-deployment": "npm --prefix ../.. run build:server && npm --prefix ../.. run build:daemon-web-ui && cross-env E2E_FORK_PASEO_HOME_FROM=../../.dev/paseo-home playwright test --project=relay-deployment e2e/browser/relay-deployment-reconnect.real.spec.ts",
|
|
"test:e2e:ui": "playwright test --ui",
|
|
"build": "npm run build:web",
|
|
"build:web": "npm --prefix ../.. run build:app-deps && expo export --platform web",
|
|
"profile:composer-typing": "node ./scripts/profile-composer-typing.mjs",
|
|
"profile:workspace-switching": "node ./scripts/profile-workspace-switching.mjs",
|
|
"profile:workspace-tabs": "node ./scripts/profile-workspace-tabs.mjs",
|
|
"deploy:web": "npm run build:web && wrangler pages deploy dist --project-name paseo-app --branch main",
|
|
"build:terminal-webview": "node ./scripts/build-terminal-webview-html.mjs",
|
|
"build:mermaid-runtime": "node ./src/components/markdown/fence/mermaid/build-runtime.mjs"
|
|
},
|
|
"dependencies": {
|
|
"@codemirror/commands": "6.10.4",
|
|
"@codemirror/language": "6.12.4",
|
|
"@codemirror/search": "6.7.1",
|
|
"@codemirror/state": "6.7.1",
|
|
"@codemirror/view": "6.43.6",
|
|
"@dnd-kit/core": "^6.3.1",
|
|
"@dnd-kit/sortable": "^10.0.0",
|
|
"@dnd-kit/utilities": "^3.2.2",
|
|
"@floating-ui/react-native": "^0.10.7",
|
|
"@getpaseo/client": "*",
|
|
"@getpaseo/expo-two-way-audio": "*",
|
|
"@getpaseo/highlight": "*",
|
|
"@getpaseo/protocol": "*",
|
|
"@gorhom/bottom-sheet": "^5.2.14",
|
|
"@gorhom/portal": "^1.0.14",
|
|
"@mattermost/react-native-paste-input": "2.0.1",
|
|
"@paseo/plugin": "*",
|
|
"@react-native-async-storage/async-storage": "2.2.0",
|
|
"@react-native-masked-view/masked-view": "^0.3.2",
|
|
"@react-native/normalize-colors": "^0.81.5",
|
|
"@react-navigation/native": "^7.1.8",
|
|
"@replit/codemirror-vim": "6.3.0",
|
|
"@tanstack/react-query": "^5.90.11",
|
|
"@tanstack/react-virtual": "^3.13.21",
|
|
"@xterm/addon-clipboard": "^0.3.0-beta.213",
|
|
"@xterm/addon-fit": "^0.12.0-beta.213",
|
|
"@xterm/addon-image": "^0.10.0-beta.213",
|
|
"@xterm/addon-ligatures": "^0.11.0-beta.213",
|
|
"@xterm/addon-search": "^0.17.0-beta.213",
|
|
"@xterm/addon-unicode11": "^0.10.0-beta.213",
|
|
"@xterm/addon-web-links": "^0.13.0-beta.213",
|
|
"@xterm/addon-webgl": "^0.20.0-beta.212",
|
|
"@xterm/xterm": "^6.1.0-beta.213",
|
|
"buffer": "^6.0.3",
|
|
"expo": "^54.0.18",
|
|
"expo-asset": "~12.0.12",
|
|
"expo-audio": "~1.0.13",
|
|
"expo-build-properties": "^1.0.9",
|
|
"expo-camera": "~17.0.10",
|
|
"expo-clipboard": "~8.0.7",
|
|
"expo-constants": "~18.0.9",
|
|
"expo-crypto": "^15.0.8",
|
|
"expo-dev-client": "^6.0.15",
|
|
"expo-document-picker": "~14.0.8",
|
|
"expo-file-system": "~19.0.17",
|
|
"expo-haptics": "~15.0.7",
|
|
"expo-image": "~3.0.10",
|
|
"expo-image-manipulator": "~14.0.8",
|
|
"expo-image-picker": "^17.0.8",
|
|
"expo-keep-awake": "^15.0.7",
|
|
"expo-linking": "~8.0.8",
|
|
"expo-localization": "~17.0.9",
|
|
"expo-notifications": "^0.32.16",
|
|
"expo-router": "~6.0.13",
|
|
"expo-sharing": "^14.0.8",
|
|
"expo-splash-screen": "~31.0.10",
|
|
"expo-system-ui": "~6.0.7",
|
|
"fast-deep-equal": "^3.1.3",
|
|
"htmlparser2": "^12.0.0",
|
|
"i18next": "^26.3.0",
|
|
"lucide-react-native": "^0.546.0",
|
|
"markdown-it": "^10.0.0",
|
|
"mermaid": "^11.16.0",
|
|
"mnemonic-id": "^3.2.7",
|
|
"qrcode": "^1.5.4",
|
|
"react": "19.1.0",
|
|
"react-dom": "19.1.0",
|
|
"react-i18next": "^17.0.8",
|
|
"react-native": "0.81.5",
|
|
"react-native-draggable-flatlist": "^4.0.3",
|
|
"react-native-edge-to-edge": "^1.7.0",
|
|
"react-native-gesture-handler": "~2.28.0",
|
|
"react-native-keyboard-controller": "1.21.12",
|
|
"react-native-markdown-display": "^7.0.2",
|
|
"react-native-nitro-modules": "0.35.5",
|
|
"react-native-reanimated": "~4.3.1",
|
|
"react-native-safe-area-context": "~5.6.0",
|
|
"react-native-screens": "~4.16.0",
|
|
"react-native-svg": "^15.14.0",
|
|
"react-native-uitextview": "^2.2.0",
|
|
"react-native-unistyles": "^3.2.4",
|
|
"react-native-web": "~0.21.0",
|
|
"react-native-webview": "^13.16.0",
|
|
"react-native-worklets": "~0.8.3",
|
|
"tiny-invariant": "^1.3.3",
|
|
"turndown": "^7.2.4",
|
|
"turndown-plugin-gfm": "^1.0.2",
|
|
"use-sync-external-store": "^1.6.0",
|
|
"yaml": "^2.8.4",
|
|
"zod": "^4.4.3",
|
|
"zustand": "^5.0.9"
|
|
},
|
|
"devDependencies": {
|
|
"@playwright/test": "^1.56.1",
|
|
"@testing-library/dom": "^10.4.1",
|
|
"@testing-library/react": "^16.3.2",
|
|
"@types/markdown-it": "^14.1.2",
|
|
"@types/qrcode": "^1.5.6",
|
|
"@types/react": "~19.2.0",
|
|
"@types/turndown": "^5.0.6",
|
|
"@types/ws": "^8.18.1",
|
|
"@vitest/browser": "^4.1.7",
|
|
"@vitest/browser-playwright": "^4.1.7",
|
|
"@xterm/headless": "^6.1.0-beta.213",
|
|
"dotenv": "^17.2.3",
|
|
"eas-cli": "^16.24.1",
|
|
"esbuild": "0.28.1",
|
|
"eslint": "^9.25.0",
|
|
"eslint-config-expo": "~10.0.0",
|
|
"expo-gradle-jvmargs": "^1.1.2",
|
|
"jsdom": "^20.0.3",
|
|
"material-icon-theme": "^5.32.0",
|
|
"playwright": "^1.56.1",
|
|
"serve-sim": "^0.1.40",
|
|
"typescript": "~5.9.2",
|
|
"vitest": "^4.1.6",
|
|
"wrangler": "^4.105.0",
|
|
"ws": "^8.20.0"
|
|
}
|
|
}
|