Archive Steam docs; add itch.io upload guide
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.
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user