[Beta]: Safari pagination: Shift+Down selects only the first line of a paged paragraph and then stops extending

Aperta
#5,260 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
1-2 giorni
Idoneità per principianti
48/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
react, typescript

Direzione di ricerca

Start with the pagination rendering style in packages/plitejs/src/pagination/react.tsx near line 621, where the issue reports generated line breaks after native flow breaks. Reproduce the steps on /docs/pagination in Safari and compare them with /docs/toc; investigate whether those breaks stop selection extension. Done means repeated Shift+↓ presses extend the selection line by line in the paged paragraph.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug safari target:beta

Testing lane

  • Repository: udecode/plate
  • Branch: next
  • Release channel: Beta
  • Exact commit/package version: NOT_ENOUGH_INFO

Summary

In Safari, pressing Shift+↓ repeatedly from the start of a paragraph in the paged editor on /docs/pagination selects the first rendered line, and then the selection stops growing. In the same Safari, the same keys in a paragraph of the Table of Contents demo, which is not paged, extend the selection by one line per press. An agent reproduced the stop on 5 of 5 clean loads. Sin, who tested this page, also hit it by hand, but says it happens only sometimes and is hard to repeat.

Reproduction

Repro 1: /docs/pagination, Safari 27
  1. Open https://beta.platejs.org/docs/pagination in Safari, on a fresh load.
  2. In the Preview, click at the start of the first paragraph under Paged documents, before Every Plate plugin renders on pages.
  3. Press Shift+↓ three times.

The first press selects the first rendered line, which ends at keep in the recording. The second and third presses leave the selection as it is. getSelection().toString() also returns only the first line. Shift+↑ shrinks the stuck selection, and a plain ↓ moves the caret to the next line, where typed text lands.

On https://beta.platejs.org/docs/toc in the same Safari, the same keys at the start of the first paragraph, The Table of Contents (TOC) feature allows you ..., select its first line, then its second line, then the next paragraph. That demo is not paged. It shows that Safari delivers the keys. It is not a reference for pagination.

An agent driving Safari 27 on macOS through Computer Use ran these steps on 2026-10-21. The selection stopped at the first line on 5 of 5 clean loads, and also once in the Section 5. paragraph before a reset.

Sin hit the same stop by hand in Safari on 2026-10-23 (Beijing time), but says it is intermittent and hard to repeat. No recording of Sin's case exists, and the exact trigger is not known.

Expected

Each Shift+↓ extends the selection by one more line, as it does on the Table of Contents demo in the same Safari. This is the expected result recorded in the tester's report. The Table of Contents demo is an input control, not a reference, and the pagination page has no reference site.

Actual

After the first Shift+↓, the selection holds the first rendered line, and more presses do not extend it. Because the selection stops inside the page, nobody could check keyboard selection across a page break.

Environment

  • Exact next commit/Beta package version: NOT_ENOUGH_INFO. The agent's run was not tied to a deployed commit.
  • Repro 1: Safari 27 on macOS, 2026-10-21. An agent drove the real browser through Computer Use, not Playwright.
  • Sin's case: Sin's own Safari, by hand, 2026-10-23 (Beijing time). The Safari and macOS versions were not recorded.
  • Other browsers were not tried with these steps.

Caveat

  • A reading of the code suggests a candidate mechanism, not proven. The paged view ends each rendered line with a generated line break. packages/plitejs/src/pagination/react.tsx:621 on next defines a style that adds content:'\A' after every element marked data-pagination-native-flow-break='true', and the agent saw that attribute at the line ends of the selected paragraph. Safari's line-by-line extension may stop at that break. Nobody has checked this with a breakpoint or a fix.
  • The agent's 5 of 5 ran on 2026-10-21. Sin's retest two days later, possibly on a newer deploy, found the stop only sometimes. The agent's count does not settle how often it happens now.

Evidence

  • Repro 1: English clip, 18 seconds, composed from the agent's Safari window captures of each step. The left side is the paged paragraph on /docs/pagination. The right side is the Table of Contents control, from a separate run, lined up by step. A zoomed strip under each side shows the selection. At 0:00 nothing is selected. From 0:02, after one Shift+↓, both sides select their first line. From 0:04, after the second press, the paged side still has only its first line, while the control has both lines of its first paragraph. From 0:06, after the third press, the paged side is unchanged and the control also selects How to use the Table of Contents:. That state holds to the end.
Repro 1 — Safari 27, /docs/pagination (right side: /docs/toc input control)

https://github.com/user-attachments/assets/ad73e050-56b2-480e-9796-701d2e9ae0a3

Related

Other Beta issues on the pagination pages from the same round of testing:

  • #5253: in Facing mode, clicks on the first left page land on the right page and drag-select selects nothing
  • #5254: the docs sidebar covers the page and toolbar at 1280 px and wider
  • #5255: with Facing on, the right page is cut off on first load
  • #5257: in Safari, text shifts when the caret moves and headings overlap the text during selection
  • #5258: typing lags with the default 990 stress pages
Lingua principale
TypeScript
Stelle
16.6k
Fork
993
Merge medio
20h 2m
PR unite (30g)
62

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di udecode/plate

Tutte le issue di udecode/plate

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.