[Beta]: Arrow keys should skip Date elements
Bug type
Behavior bug (incorrect output/state without crash)
Browser surface
Yes
Owner surface
Plate framework or plugin
Summary
Date elements should be crossed in one arrow-key press, without an intermediate cursor stop on the Date element.
Public reproduction URL
NOT_ENOUGH_INFO
Steps to reproduce
- Open a Plate next/Beta editor using the default DateKit. The repository provides
/blocks/date-demoas a candidate route. - Insert a Date between two text runs.
- Place a collapsed caret immediately before the Date:
before |[Date] after. - Press ArrowRight once.
- Repeat from immediately after the Date with ArrowLeft.
These steps define the requested case from the user description and source inspection; browser replay is still required.
Expected behavior
One ArrowRight press moves directly from before |[Date] after to before [Date]| after. ArrowLeft should cross the Date in the opposite direction in one press.
Authority: explicit maintainer request that Date elements be skipped during arrow-key navigation. No known-good release comparison was supplied.
Actual behavior
Source inspection indicates an intermediate stop on Date rather than a single-step crossing. BaseDatePlugin declares void: 'inline' without overriding selectable, which defaults to true. Existing Plite character-movement tests expect a selectable inline void to take two steps to cross.
This is a source-backed diagnosis, not an independently observed browser result.
Acceptance criteria
- ArrowRight crosses a Date from its immediate left to its immediate right in one press.
- ArrowLeft crosses it in one press in the reverse direction.
- Movement does not change the Date value or surrounding text.
- Clicking the Date still opens its date picker.
- Verify the default DateKit in a real browser and add coverage for both directions.
Regression range
NOT_ENOUGH_INFO
Reproducibility
NOT_ENOUGH_INFO
Plate / Plite / React versions
Testing lane: Plate next/Beta.
Exact affected build and package versions: NOT_ENOUGH_INFO.
Remote next head at filing: a6afd55c30e97c74fe895d1ad005ca75413110f3. This is a reference snapshot, not a browser-tested failing commit.
Operating system
NOT_ENOUGH_INFO
Install method
NOT_ENOUGH_INFO
Framework / app setup
NOT_ENOUGH_INFO
Affected packages or entry points
platejs/date, platejs/date/react, registry DateKit, Plite caret movement.
Minimal code or config excerpt
Relevant default schema:
schema: {
element: {
// Date value property omitted here.
void: 'inline',
},
}Logs, screenshots, and evidence
Text-only report; no media uploaded. A recording adds no necessary detail to the requested single-key transition. Browser validation remains part of implementation acceptance.
Inspected local source:
packages/platejs/src/features/date/lib/BaseDatePlugin.ts: Date schema.packages/plitejs/src/core/schema-compiler.ts: default selection behavior.packages/plitejs/test/query-contract.ts:supports character movement around inline voids as atomic boundariesandsupports editorAfter by skipping non-selectable inline void descendants.packages/plitejs/src/react/editable/caret-engine.ts: horizontal movement dispatch.
Maintainer Codex context
Start with the default DateKit and reproduce the exact boundary movement. The lower layer already supports skipping non-selectable inline voids. Check Date picker interaction before choosing a schema change; the requested outcome is arrow-key skipping, not disabling Date interaction. This issue does not require adding a public option named skip.
Impact and severity
Date navigation requires an unwanted intermediate stop. Runtime frequency and broader impact: NOT_ENOUGH_INFO.
Source: udecode/plate