2026-04-11 01:24:35 +08:00
|
|
|
# Project Discussion
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
## Requirements
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
1. **Two-column layout**: Note list on the left, editor/preview on the right
|
|
|
|
|
2. **SQLite storage**: Using libsql client
|
|
|
|
|
3. **Markdown support**: Render Markdown content
|
|
|
|
|
4. **Glow-like effect**: Terminal Markdown rendering
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
## Technical Issues and Solutions
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
### OpenTUI Markdown Component Issue
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
**Problem**: OpenTUI's `<markdown>` component could not render styles correctly (tried multiple methods, all failed)
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
**Solution**: Implement a custom Markdown parser using OpenTUI's `<text>` components for manual rendering
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
### Textarea Wrap Issue
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
**Problem**: Default wrapMode in textarea React types is missing
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
**Solution**: Make textarea usable by setting `focused` attribute, access EditBufferRenderable's wrapMode option through underlying access
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
### Preview Mode Line Break Issue
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
**Problem**: Line breaks from edit mode not showing in preview
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
**Solution**: Handle empty lines in `renderMarkdown` function, add `<text>{" "}</text>`
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
### Code Block Rendering
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
**Problem**: Indentation rendering issues inside ``` code blocks
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
**Solution**: Implement code block detection and rendering logic, render each code line separately
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
### Multi-select Feature
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
**Problem**: OpenTUI's `onMouseDown` event doesn't include ctrlKey/shiftKey modifier info, and `useKeyboard` couldn't capture modifier keys
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
**Solution**:
|
|
|
|
|
- Tried using `useKeyboard` to listen for modifier keys but failed (terminal may not send separate modifier key events)
|
|
|
|
|
- Switched to double-click "selection mode" approach: double-click any note to toggle selection mode, click to multi-select in selection mode
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
### Cross-platform Database Path
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
**Problem**: Hardcoded database path not compatible across platforms
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
**Solution**: Implement `getDbPath()` function to use `~/.config/mio/cache.db` for all platforms
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
## Unresolved Issues
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
1. **Multi-select feature**: Double-click selection mode experience is not ideal, keyboard modifier key approach couldn't be implemented
|
|
|
|
|
2. **TypeScript type errors**: Some type errors in NoteEditor (bold attribute doesn't exist, etc.)
|
2026-04-11 01:24:17 +08:00
|
|
|
|
2026-04-11 02:40:14 +08:00
|
|
|
## Gitea Runner and Release Workflow
|
|
|
|
|
|
|
|
|
|
### Runner Configuration
|
|
|
|
|
|
|
|
|
|
- **Image**: `hub.gaomia.site/titor/bun:latest` (based on Debian bookworm with Bun installed)
|
|
|
|
|
- **Default label**: `ubuntu-latest`
|
|
|
|
|
- **Issue**: Custom image doesn't have git pre-installed
|
|
|
|
|
|
|
|
|
|
**Solution**: Install git in workflow:
|
|
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
|
- name: Install git
|
|
|
|
|
run: apt-get update && apt-get install -y git
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Release Workflow (Auto-changelog)
|
|
|
|
|
|
|
|
|
|
Trigger on push tag (`v*`):
|
|
|
|
|
|
|
|
|
|
1. Clone repository using token
|
|
|
|
|
2. Install dependencies: `bun install`
|
|
|
|
|
3. Build: `bun run build`
|
|
|
|
|
4. Create release and upload source archive:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
TAG_NAME="${GITHUB_REF#refs/tags/}"
|
|
|
|
|
PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
|
|
|
|
|
CHANGES=$(git log --pretty=format:"- %s (%h)" "$PREV_TAG..HEAD" 2>/dev/null || echo "")
|
|
|
|
|
|
|
|
|
|
# Create release via Gitea API
|
|
|
|
|
curl -X POST "https://hub.gaomia.site/api/v1/repos/titor/mio/releases" \
|
|
|
|
|
-H "Authorization: token ${GITEA_TOKEN}" \
|
|
|
|
|
-d "{\"tag_name\":\"${TAG_NAME}\",\"name\":\"${TAG_NAME}\",\"body\":\"${CHANGES}\"}"
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Cross-platform Build Limitation
|
|
|
|
|
|
|
|
|
|
- Bun's `bun build --compile` runs on Linux runner → can only produce Linux executable
|
|
|
|
|
- Cannot compile Windows/macOS binaries on Linux environment
|
|
|
|
|
- Workaround: Publish source code archive instead of binaries
|
|
|
|
|
|
|
|
|
|
### Bun Compilation Bug with Native Modules
|
|
|
|
|
|
|
|
|
|
**Problem**: Using `@libsql/client` (native SQLite binding) causes runtime error:
|
|
|
|
|
```
|
|
|
|
|
error: Cannot find module '@libsql/win32-x64-msvc' from 'B:\~BUN\root\mio.exe'
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
This is a known bug in Bun 1.3.4+ with native modules.
|
|
|
|
|
|
|
|
|
|
**Solution**: Replace `@libsql/client` with `sql.js` (pure JavaScript SQLite implementation):
|
|
|
|
|
|
|
|
|
|
1. Replace dependency in package.json
|
|
|
|
|
2. Rewrite db.ts to use sql.js API (async initialization, different query syntax)
|
|
|
|
|
3. Update all function calls in index.tsx and NoteEditor.tsx
|
|
|
|
|
|
|
|
|
|
Result: `bun build --compile` works correctly on all platforms.
|
|
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
## Build Instructions
|
2026-04-11 01:24:17 +08:00
|
|
|
|
|
|
|
|
```bash
|
2026-04-11 01:24:35 +08:00
|
|
|
npm run dev # Development mode
|
|
|
|
|
npm run build # Build to mio.exe
|
2026-04-11 01:24:17 +08:00
|
|
|
```
|
|
|
|
|
|
2026-04-11 01:24:35 +08:00
|
|
|
Database location: `~/.config/mio/cache.db`
|