Files
buzz/desktop-new/package.json
morgmart 179af349f1 desktop-new: composition-input spike for inline composer tiles
Answers the blocking question in the Desktop New plan before the composer is
designed: does staged character input (ja/ko/zh) survive beside an inline atom
tile? It does. Twelve tests, Chromium composition driven through CDP
Input.imeSetComposition plus a WebKit pass.

Measured findings:
- Composition beside a tile is safe in every position; a committed composition
  leaves the tile address byte-identical. No fence needed.
- selectable:false is load-bearing. With selectable:true an arrow key selects
  the tile and the next keystroke replaces it.
- atom:true is redundant for a contentless node (isAtom = isLeaf || spec.atom)
  and kept as documentation of intent.
- Whole-tile deletion works natively; no custom Backspace handler required.
- One real gap: the caret position before a leading tile. ArrowLeft reaches it,
  Home and a pointer click do not, in both engines. Those two tests carry
  test.fail() until the caret-boundary layer lands.

The harness is temporary and deleted when the real composer lands.

Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
2026-09-06 15:01:11 -07:00

48 lines
1.5 KiB
JSON

{
"name": "buzz-desktop-new",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"typecheck": "tsc --noEmit",
"preview": "vite preview",
"lint": "biome lint .",
"check": "biome check . && node scripts/check-type.mjs && node scripts/check-contrast.mjs",
"format": "biome format --write .",
"check:type": "node scripts/check-type.mjs",
"check:contrast": "node scripts/check-contrast.mjs",
"test": "vitest run src",
"test:e2e": "playwright test",
"tauri:dev": "node ../desktop/scripts/tauri-command.mjs dev --config ../desktop-new/tauri.conf.json --config ../desktop/src-tauri/tauri.dev.conf.json"
},
"dependencies": {
"@base-ui/react": "1.7.0",
"@fontsource-variable/inter": "^5.2.8",
"@fontsource/jetbrains-mono": "^5.3.0",
"@tabler/icons-react": "^3.46.0",
"@tanstack/react-router": "^1.168.10",
"@tauri-apps/api": "~2.11.1",
"@tiptap/core": "^3.22.3",
"@tiptap/pm": "^3.22.3",
"@tiptap/react": "^3.22.3",
"@tiptap/starter-kit": "^3.22.3",
"dockview-react": "8.2.0",
"react": "^19.1.0",
"react-dom": "^19.1.0"
},
"devDependencies": {
"@playwright/test": "^1.60.0",
"@tailwindcss/postcss": "^4.3.0",
"@tanstack/router-plugin": "^1.167.12",
"@types/react": "^19.1.8",
"@types/react-dom": "^19.1.6",
"@vitejs/plugin-react": "^6.0.0",
"tailwindcss": "^4.3.0",
"typescript": "~6.0.0",
"vite": "^8.0.0",
"vitest": "^4.1.11"
}
}