0b51d133a4
Move legacy Steam-related docs into documentation/archived and add a new UPLOAD-ITCH.md describing how to publish builds to itch.io with Butler. Update top-level README to state official releases will be on itch.io. Remove Steam-specific UI/features: drop steamCloudOptIn from first-run preferences, remove the Steam Cloud teaser and summary from the setup flow, and adjust settings/setup copy to reference handheld devices and non‑Steam distribution. Also make a small wording tweak in the plugins doc about rendererPreload.
134 lines
3.8 KiB
Markdown
134 lines
3.8 KiB
Markdown
# Nebot Typing Animation Feature
|
|
|
|
## Overview
|
|
Added a realistic typing animation to the Nebot chat interface that makes AI responses appear character by character, similar to ChatGPT and other modern AI chat interfaces.
|
|
|
|
## Features Added
|
|
|
|
### 1. **Typing Animation**
|
|
- Characters appear one by one instead of instantly
|
|
- Smooth, natural typing rhythm
|
|
- Configurable typing speed
|
|
- Blinking cursor indicator during typing
|
|
|
|
### 2. **Settings Integration**
|
|
- **Enable/Disable Toggle**: Users can turn typing animation on/off
|
|
- **Speed Control**: Adjustable from 10-200 characters per second
|
|
- **Live Preview**: Speed indicator updates in real-time
|
|
- **Persistent Settings**: Preferences are saved and restored
|
|
|
|
### 3. **Smart Behavior**
|
|
- **Queue Management**: Handles fast token streams efficiently
|
|
- **Graceful Fallback**: Falls back to instant display if disabled
|
|
- **Markdown Rendering**: Waits for typing to complete before rendering markdown
|
|
- **Auto-scroll**: Maintains scroll position during animation
|
|
|
|
## Technical Implementation
|
|
|
|
### Code Changes Made:
|
|
|
|
#### 1. **page.js** - Main Logic
|
|
```javascript
|
|
// Typing animation state
|
|
let typingQueue = [];
|
|
let isTyping = false;
|
|
let typingSpeed = 25; // milliseconds per character
|
|
let typingEnabled = true; // can be toggled in settings
|
|
|
|
function startTypingAnimation(element) {
|
|
if (isTyping || typingQueue.length === 0) return;
|
|
|
|
isTyping = true;
|
|
element.classList.add('typing');
|
|
|
|
function typeNext() {
|
|
if (typingQueue.length === 0) {
|
|
isTyping = false;
|
|
element.classList.remove('typing');
|
|
return;
|
|
}
|
|
|
|
const char = typingQueue.shift();
|
|
element.textContent += char;
|
|
els.messages.scrollTop = els.messages.scrollHeight;
|
|
|
|
setTimeout(typeNext, typingSpeed);
|
|
}
|
|
|
|
typeNext();
|
|
}
|
|
```
|
|
|
|
#### 2. **page.css** - Visual Effects
|
|
```css
|
|
/* Typing animation cursor */
|
|
.markdown.typing:after {
|
|
content: "▋";
|
|
color: var(--accent);
|
|
animation: blink 1s infinite;
|
|
margin-left: 1px;
|
|
}
|
|
|
|
@keyframes blink {
|
|
0%, 50% { opacity: 1; }
|
|
51%, 100% { opacity: 0; }
|
|
}
|
|
```
|
|
|
|
#### 3. **Settings UI** - User Controls
|
|
- Checkbox to enable/disable typing animation
|
|
- Range slider for speed control (10-200 chars/sec)
|
|
- Real-time speed display
|
|
- Proper styling for form elements
|
|
|
|
## User Experience
|
|
|
|
### Before:
|
|
- Text appeared instantly when AI responded
|
|
- No visual feedback during response generation
|
|
- Less engaging interaction
|
|
|
|
### After:
|
|
- Smooth character-by-character reveal
|
|
- Blinking cursor shows active typing
|
|
- Configurable speed for user preference
|
|
- More engaging, human-like interaction
|
|
|
|
## Usage Instructions
|
|
|
|
1. **Open Nebot**: Navigate to the Nebot page in Nebula Browser
|
|
2. **Start a Chat**: Send a message to begin conversation
|
|
3. **Watch the Animation**: AI responses will type out naturally
|
|
4. **Customize Settings**:
|
|
- Click the ⚙ Settings button
|
|
- Toggle "Enable typing animation"
|
|
- Adjust typing speed with the slider
|
|
- Save changes
|
|
|
|
## Performance Considerations
|
|
|
|
- **Efficient Queuing**: Uses character queue to handle fast token streams
|
|
- **Memory Friendly**: Minimal memory overhead
|
|
- **Responsive**: Maintains smooth UI during animation
|
|
- **Interruptible**: Can be disabled without restart
|
|
|
|
## Future Enhancements
|
|
|
|
Potential improvements could include:
|
|
- Variable speed based on punctuation (pause at periods)
|
|
- Sound effects for typing
|
|
- Different animation styles
|
|
- Per-conversation speed settings
|
|
- Typing speed based on message length
|
|
|
|
## Testing
|
|
|
|
To test the feature:
|
|
1. Start Nebula Browser (`npm start`)
|
|
2. Navigate to Nebot page
|
|
3. Send a message and observe the typing animation
|
|
4. Try different speed settings in the settings panel
|
|
5. Toggle the feature on/off to compare experiences
|
|
|
|
The typing animation enhances the user experience by making AI interactions feel more natural and engaging, similar to popular chat interfaces like ChatGPT.
|