feat(flow): input feather, center puppet, smiley nav, arc buttons

- Input bar: show bouncing feather icon while typing (circle static); send
  after pause or on submit; debounced isTyping state
- Move puppet to center empty state (replacing feather); hide when there
  are messages
- Add smiley button next to mic; same as Talk (web: location, native: modal)
- Puppet actions: place four buttons in arc above puppet with icons; increase
  spacing between buttons and puppet
This commit is contained in:
Ada
2026-02-07 01:06:44 -08:00
parent 1e6c06bfef
commit 6ac492983a
8 changed files with 546 additions and 71 deletions

43
package-lock.json generated
View File

@@ -22,12 +22,14 @@
"buffer": "^6.0.3",
"expo": "~52.0.0",
"expo-asset": "~11.0.5",
"expo-av": "~15.0.2",
"expo-constants": "~17.0.8",
"expo-crypto": "~14.0.2",
"expo-font": "~13.0.4",
"expo-haptics": "~14.0.0",
"expo-image-picker": "^17.0.10",
"expo-linear-gradient": "~14.0.2",
"expo-speech": "~13.0.1",
"expo-status-bar": "~2.0.0",
"react": "18.3.1",
"react-dom": "18.3.1",
@@ -39,6 +41,7 @@
"react-native-svg": "^15.15.2",
"react-native-view-shot": "^3.8.0",
"react-native-web": "~0.19.13",
"react-native-webview": "13.12.2",
"readable-stream": "^4.7.0",
"vm-browserify": "^1.1.2"
},
@@ -6134,6 +6137,23 @@
"react-native": "*"
}
},
"node_modules/expo-av": {
"version": "15.0.2",
"resolved": "https://registry.npmjs.org/expo-av/-/expo-av-15.0.2.tgz",
"integrity": "sha512-AHIHXdqLgK1dfHZF0JzX3YSVySGMrWn9QtPzaVjw54FAzvXfMt4sIoq4qRL/9XWCP9+ICcCs/u3EcvmxQjrfcA==",
"license": "MIT",
"peerDependencies": {
"expo": "*",
"react": "*",
"react-native": "*",
"react-native-web": "*"
},
"peerDependenciesMeta": {
"react-native-web": {
"optional": true
}
}
},
"node_modules/expo-constants": {
"version": "17.0.8",
"resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-17.0.8.tgz",
@@ -6278,6 +6298,15 @@
"invariant": "^2.2.4"
}
},
"node_modules/expo-speech": {
"version": "13.0.1",
"resolved": "https://registry.npmjs.org/expo-speech/-/expo-speech-13.0.1.tgz",
"integrity": "sha512-J7tvFzORsFpIKihMnayeY5lCPc15giDrlN+ws2uUNo0MvLv1HCYEu/5p3+aMmZXXsY5I1QlconD4CwRWw3JFig==",
"license": "MIT",
"peerDependencies": {
"expo": "*"
}
},
"node_modules/expo-status-bar": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-2.0.1.tgz",
@@ -10034,6 +10063,20 @@
"integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==",
"license": "MIT"
},
"node_modules/react-native-webview": {
"version": "13.12.2",
"resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-13.12.2.tgz",
"integrity": "sha512-OpRcEhf1IEushREax6rrKTeqGrHZ9OmryhZLBLQQU4PwjqVsq55iC8OdYSD61/F628f9rURn9THyxEZjrknpQQ==",
"license": "MIT",
"dependencies": {
"escape-string-regexp": "^4.0.0",
"invariant": "2.2.4"
},
"peerDependencies": {
"react": "*",
"react-native": "*"
}
},
"node_modules/react-native/node_modules/babel-plugin-syntax-hermes-parser": {
"version": "0.23.1",
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.23.1.tgz",