feat(design): a video's one action list (C1) — the card's "…", the menu holds the rest (E28 S3e1)
- useContextMenu gains buttonProps (a row's visible "…" opens the same menu under the button; a second press closes it) and anchor (the element the menu came from, for a panel a row opens). - ui/MoreButton; ActionMenu rows can run inGesture (a clipboard write inside the click, Safari). - useVideoActions: one builder for a video's menu (play / restart, channel, watched, save, add to playlist, download, details, copy title / link, hide, reset, pin), composed by the feed and by Home's rails; the playlists and details panels open anchored beside the card (VideoFollowUp). - The card keeps watched / save / add to playlist and the "…": on the picture on hover (the duration steps aside), in the rows' action column; on touch only a 44px "…" beside the title. Download, hide, reset and the hover info card leave the card. - The title is selectable: a click ending a selection neither plays nor follows the link. - DESIGN.md: how C1 is built + the log row.
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
// docs/DESIGN.md "Text stays selectable": a click that ends a text selection does nothing. The
|
||||
// mouseup of a drag-select fires a click on whatever the drag started in, so a title that opens its
|
||||
// video on click would play it the moment the reader finished selecting its words to copy them.
|
||||
// A plain click collapses any selection on mousedown, so a non-empty selection that touches the
|
||||
// element at click time can only be the one this gesture just made.
|
||||
|
||||
/** True when the page's selection is non-empty and starts or ends inside `el`. */
|
||||
export function endsTextSelection(el: Element): boolean {
|
||||
const sel = typeof window === "undefined" ? null : window.getSelection();
|
||||
if (!sel || sel.isCollapsed || !sel.toString().trim()) return false;
|
||||
return (
|
||||
(!!sel.anchorNode && el.contains(sel.anchorNode)) ||
|
||||
(!!sel.focusNode && el.contains(sel.focusNode))
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user