Skip to content

feat(ui): selection and collections #4902

Description

@ubugeeei

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

Outcome

Ship list, select, combobox, and transfer collections on the existing collection, typeahead, and composite-navigation primitives.

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

  • Listbox: single/multiple, sections, grouping, typeahead, async, virtualization
  • Select and Native Select
  • Combobox and Autocomplete with custom values, async filtering, creation, mobile
  • MultiSelect, Cascade Select, Tree Select
  • Transfer / Pick List and Order List
  • Grid List with Item, Section, Header, Separator, Empty, Loading
  • Filtering, highlighting, match ranges, and no-results recovery

Dependencies

Depends on #4890, #4897, and #4905. Tree tables are #4908.

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

Roving focus, aria-activedescendant, virtual items, and portalled lists. Large collection SFCs for the compiler corpus.

Out of scope

Virtualizer primitive and form Field belong to their issues. Tree data display belongs in the data family.

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