Skip to content

feat(ui): editing and developer surfaces #4909

Description

@ubugeeei

Tracks this family from #3134. Experimental @vizejs/ui workstream.

Outcome

Ship rich editing, code, terminal, in-place edit, and drawing surfaces with accessible fallbacks.

Authoring contract

  • Public components are real .vue files. Handwritten render functions and JSX are not the public authoring model.
  • Generated compiler output stays an internal artifact.
  • Hover and completion must be enough to use the API without leaving the editor.
  • Keep runtime script small. Prefer native HTML, CSS, and platform APIs.
  • Extension is a first-class contract: parts, slots, CSS properties, and typed hooks.

Inventory

  • Rich Text Editor: semantic model, toolbar, links, lists, tables, media, history, paste sanitation, collaboration adapters
  • Markdown Editor: preview, source, extensions, sanitization, round-trip tests
  • Code Editor and Diff Editor: highlighting, diagnostics, completion, search, minimap, textarea fallback
  • Terminal and log viewer: ANSI, streaming, selection, search, copy, resize, screen-reader transcript
  • In-place Editor and Cell Editor: commit/cancel, conflict, optimistic persistence
  • Drag Handle, Sortable, Resize Handle, Selection Rectangle
  • Signature Pad and drawing canvas: eraser, pressure adapter, export, keyboard-accessible alternative

Dependencies

Depends on #4892 and #4891. HTML-in-canvas host is #4912.

Quality gates

This family is not done until it satisfies the parent definition of done in #3134:

  • Canonical Vue SFCs with explicit <template>, <script setup lang="ts">, and scoped <style>
  • kebab-case filenames for every public source, test, story, and fixture
  • Every public prop, emit, slot, expose, CSS custom property, part, and data attribute documented; every option states @default
  • Literal types for props, emits, slots, expose, and useTemplateRef
  • Equivalent public contracts across DOM, SSR, and Vapor builds
  • WCAG 2.2 AA, WAI-ARIA APG, keyboard, pointer, touch, focus, and dismissal where applicable
  • LTR/RTL, locale, reduced motion, forced colors, and zoom
  • SSR, hydration, deterministic IDs, Teleport, Suspense, islands, and no request-global state
  • Colocated Vue Test Utils tests, Vitest browser-mode coverage, and Playwright visual regression
  • Musea stories covering states, slots, parts, and presets
  • Tree-shakable ESM subpath, exact sideEffects, and enforced bundle budgets
  • Headless by default; visual style arrives only through opt-in presets

Testbed notes

Contenteditable and textarea fallback dual trees. Terminal ANSI parsing tests. Drawing canvas hit-testing in browser mode.

Out of scope

Shortcut/history primitives and drag primitives are dependencies. HTML-in-canvas host belongs in next-gen.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:uiAccessible SFC UI package (@vizejs/ui)priority:p1High priority before v1 alpha production readiness

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions