Repository navigation
chore(sandbox): preview only, do not merge, the ContextMenu lift on and off #11198
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
+14,888
−547
Closed
Changes from all commits
Commits
Show all changes
141 commits
Select commit
Hold shift + click to select a range
3dd581e
feat(core): one progress module for the motion foundation
vjeux 3cfb3b1
refactor(animatedLayout): take the settle spring's progress from prog…
cixzhang 273da1e
feat(core): the rect morph's paths, the rect a grow-out presentation …
vjeux f1149cd
Merge remote-tracking branch 'origin/main' into motion/morph-path
cixzhang 131ca14
feat(core): one rect morph for touch presentations that grow out of a…
vjeux f19df27
fix(rectMorph): a handed-in animator stays on the element through a c…
cixzhang e3a43d0
fix(motion): one timed curve keeps a retargeted velocity, for the pag…
cixzhang c99210a
fix(rectMorph): a timed motion from rest plays its easing as given
cixzhang 3272828
docs(rectMorph): the timing follows the component's motion record
cixzhang 2bcc49a
feat(ContextMenu): open from a held finger on iOS 26's timeline
vjeux 812d3a4
test(ContextMenu): the hold's menu commits in its deciding task (red)
vjeux 0776b40
fix(ContextMenu): the hold commits its menu in the task that decides it
vjeux e8f5ca1
test(ContextMenu): the menu mounts, closed, at the hold's commit (red)
vjeux 0fbd309
fix(ContextMenu): the hold mounts the menu at its commit, closed
vjeux 32e75c7
test(ContextMenu): a mouse press closes the menu in its own document
vjeux ba77ca8
Merge commit 'c8b4cba38181263ffa8fcc897975b61154cb91b0' into HEAD
vjeux df6fd04
docs(ContextMenu): PR1 names the outside-press watch and the touch query
vjeux 1cedda2
feat(ContextMenu): a held finger grows the trigger on the lift spring
vjeux 7f9d428
test(ContextMenu): each animation hold names the motion it judges
vjeux 791357d
test(ContextMenu): a late touch grows from rest at its onset (red)
vjeux 6fd83b2
fix(ContextMenu): a frame, not a timer, starts the touch growth
vjeux d44956d
test(ContextMenu): the lift shows the menu inside its own dispatch
vjeux 409e581
test(ContextMenu): the menu loads the animator at once for its growth
vjeux abb70e1
test(ContextMenu): a starved page fails the 735 ms proof by name
vjeux 983e46f
feat(ContextMenu): the finger that opened the menu slides to an item
vjeux 4edb900
test(ContextMenu): Reduce Motion's menu shows in its deciding task too
vjeux b8a9055
Merge commit '62c7802e873ed3d020192e8218e5e1bcd4f8fad2' into HEAD
vjeux 8130a0b
Merge commit '8da39a830b6bc4b8d3dc93e9192c7c15f2feb974' into HEAD
vjeux 8da39a8
Merge commit 'b8a9055733b01d1a2379923035f598d405df7606' into HEAD
vjeux e66ff1d
Merge commit '92784f658939912fae623dd497cd35e499e13878' into HEAD
vjeux 08a3ad5
Merge commit '343df06699191ed4ff94b606ae0247671988db2e' into HEAD
vjeux 343df06
Merge commit 'e66ff1d4f8d74ee9cce277cc7cb3ac14ed1368a0' into HEAD
vjeux ad37823
Merge commit 'c9d07a9136573e6e87da98745d5afb84a271cf59' into HEAD
vjeux 24c03c1
test(ContextMenu): a starved page's late timer fails by name in WebKit
vjeux c9d07a9
Merge commit '24c03c1e10039a5eb52569848433ab8f7643419f' into HEAD
vjeux 0ac4cb7
ci: record ContextMenuLongPress's WebKit time for the leg count
vjeux 339bf7e
docs(ContextMenu): PR1 names each presentation's query subscriptions
vjeux 3d78dae
docs(ContextMenu): the record names the touch open's focus gap
vjeux cc254d7
Merge commit '3d78dae488ec298c7ddefea756032ee181008321' into HEAD
vjeux f62eada
Merge commit 'cc254d737d56e644530fb8334162ca895be65539' into HEAD
vjeux df642e0
Merge main into motion/morph-path
vjeux 8c8f726
Merge motion/morph-path into motion/rect-morph
vjeux 3fdca8f
fix(rectMorph): AST-094 links the morph; the proof imports a safe test
vjeux d4903e2
test(SnapPaging): the pager's bundle lists the progress module
vjeux 1b794af
test(motion): the popover's proofs read Popover's live geometry
vjeux 5dd6a6a
Merge motion/morph-path into motion/rect-morph
vjeux 3bfa524
refactor(motion): one eased progress, with a retargeted velocity
vjeux ad7f8fb
test(motion): the popover's turn-around reads Popover's live curves
vjeux 99d352d
Merge motion/morph-path into motion/rect-morph
vjeux 20dc83f
Merge branch 'main' into uikit/c20-contextmenu-press
cixzhang 4c936d1
Merge branch 'uikit/c20-contextmenu-press' into uikit/c20-contextmenu…
cixzhang 33a3ee8
docs(changeset): the rect morph's note names the eased-progress move
vjeux 292bbe9
Merge branch 'uikit/c20-contextmenu-growth' into uikit/c20-contextmen…
cixzhang 218a277
Merge main into uikit/c20-contextmenu-scrub
vjeux 2bf8f8a
Merge main into motion/rect-morph
vjeux 822013a
test(motion): the popover's turn-around compares opacity as drawn
vjeux 2651e17
Merge motion/morph-path into motion/rect-morph
vjeux 6354fa3
fix(motion): a popover's morph never reads an opacity below 0
vjeux dcfa346
Merge motion/morph-path into motion/rect-morph
vjeux 6b6310c
test(motion): the morph proofs drop the menu's old straight line
vjeux 9d6c0a2
feat(lift): one opt-in lift-from-trigger presentation
vjeux a13c9b0
docs(lift): the lift's springs are the caller's, not motion roles
vjeux b3e79df
refactor(lift): the lift holds input through the layer runtime's inpu…
vjeux 68c64c1
refactor(liftFromTrigger): the lift-from-trigger module takes its rec…
vjeux d2c974e
test(liftFromTrigger): a lifted list item leaves its list valid and t…
vjeux e0eb8e1
fix(liftFromTrigger): an li holds a list item's spot, and takes no nu…
vjeux 08cb1b7
test(liftFromTrigger): the zoom's copy of a source, through the lift …
vjeux d5fb378
feat(liftFromTrigger): liftCopy, the zoom's copy of a source through …
vjeux 9d4bf2b
test(liftFromTrigger): browser proofs of the zoom's copy
vjeux 5ef5f36
docs(layer-runtime): the lift-from-trigger module exists
vjeux 1d704a2
fix(liftFromTrigger): each spring reaches the rect morph as a motion
vjeux 23bf224
refactor(liftFromTrigger): the caller names the lift's marks
vjeux fe3b5c2
docs(liftFromTrigger): comments say why, not which record
vjeux 6a58c11
test(liftFromTrigger): a finger taps the growing lift, from the harness
vjeux 8e4f4c5
docs(liftFromTrigger): comment sentences keep to 25 words
vjeux 96ef395
test(liftFromTrigger): a tall source fits between the gutters
vjeux da70e02
fix(liftFromTrigger): the lift fits between the gutters on both axes
vjeux 67116fb
test(liftFromTrigger): a pinch on the lifted backdrop zooms the page
vjeux ff7e468
fix(liftFromTrigger): the lift layer keeps the page's pinch-zoom
vjeux 9e7b0b4
test(liftFromTrigger): a drop mid-rise turns the tint with its velocity
vjeux 917d51d
fix(liftFromTrigger): the tint fades on the animator's backdrop channel
vjeux 50f150c
refactor(liftFromTrigger): the shadow rides a rect morph of its own
vjeux 87b4151
test(liftFromTrigger): a dropped row's margin returns with no transition
vjeux 29677fd
fix(liftFromTrigger): the restore flushes style with a non-geometry read
vjeux 5f36262
fix(liftFromTrigger): the lifted trigger casts no shadow
vjeux d2e52c0
test(liftFromTrigger): the growth sample reads its animations at 30 ms
vjeux bae645b
fix(liftFromTrigger): a source lifts at its layout width
vjeux 4e989c6
feat(liftFromTrigger): a surface can show as the layer shows
vjeux a0eec83
feat(liftFromTrigger): the caller can pin styles with the lift's own
vjeux cb0cc0b
Merge the lift module into the ContextMenu stack
vjeux a33130e
feat(ContextMenu): a held finger lifts a block trigger above a tint
vjeux bed2a23
feat(ContextMenu): a lifted trigger with no box gets a platter
vjeux 0887567
docs(ContextMenu): the lift decision records the plate rule
vjeux c3fbad3
fix(ContextMenu): the menu shows as the lift's layer shows
vjeux 1acc3b3
docs(ContextMenu): the records and notes say ContextMenu lifts
vjeux dd5acaa
refactor(ContextMenu): the plate rides the lift's pin
vjeux a9188e6
Merge main
vjeux 15de4d7
test(ContextMenu): cases for the plate behind a lifted trigger
vjeux 4692ba8
fix(ContextMenu): the plate follows what a lifted trigger shows
vjeux a5a0e12
test(ContextMenu): a finger that lifts before 400 ms is a plain tap
vjeux 1e206ad
chore(sandbox): the lift page holds more trigger shapes
vjeux 382edd5
docs(ContextMenu): shorter sentences in the plate comments
vjeux 5d52587
test(ContextMenu): the lift cases wait for conditions, not for time
vjeux cc5afbd
docs(ContextMenu): a new decision replaces DEC-2's element count
vjeux 704cff3
Merge #8125's head into the press feedback
vjeux 06c942c
test(ContextMenu): a press leaves the open menu as an unpressed open
vjeux 597e158
fix(ContextMenu): the press grows the trigger's visual, not its anchor
vjeux 2ef1714
test(ContextMenu): the long-press cases wait for conditions, not time
vjeux ec0cc34
Merge #9816's head into the slide to pick
vjeux 8b33ba1
Merge #8133's head into the lift
vjeux a6253f3
test(ContextMenu): a late drift past 11.5 px, a known Chromium gap
vjeux d26b15b
test(ContextMenu): a set-height trigger keeps a full-height child
vjeux 3c39a05
test(ContextMenu): a late drift past 11.5 px cancels in every engine
vjeux a4e0404
fix(ContextMenu): the menu waits for the finger's late moves
vjeux 7d23141
fix(ContextMenu): the trigger's visual takes the trigger's height
vjeux a75cf09
test(ContextMenu): the inner visual box adds no attribute
vjeux c346da0
Merge #8125's head into the press feedback
vjeux dbb295a
fix(ContextMenu): the lift and its plate read the trigger's visual
vjeux 4c88c64
docs(ContextMenu): FR5's gap names only what remains
vjeux 3b76a8c
test(ContextMenu): a finger inside the tolerance at the menu's moment
vjeux 88cc0d8
fix(ContextMenu): the press reads each move's own time from the arena
vjeux e25ec8c
Merge #8125's head into the press feedback
vjeux 967b5f6
Merge #9816's head into the slide to pick
vjeux 548ccb5
Merge #8133's head into the lift
vjeux 180083f
test(ContextMenu): the outside tap waits for the lift to settle
vjeux ba4a81e
docs(ContextMenu): the lift's placement effect names what it syncs
vjeux 46bc0da
test(ContextMenu): coalesced late samples and an on-time move
vjeux cad79ec
fix(ContextMenu): judge each sample at its time, wait only when late
vjeux 782cdbd
Merge #8125's head into the press feedback
vjeux ac3dab7
Merge #9816's head into the slide to pick
vjeux 889aded
test(ContextMenu): moves held behind a block decide before the menu
vjeux 45bfb44
fix(ContextMenu): a late menu timer waits for moves behind the block
vjeux 2a36eba
Merge #8125's head into the press feedback
vjeux d743922
test(ContextMenu): the press's page time comes from the arena's clock
vjeux cae3644
fix(ContextMenu): the press reads the page's time from the arena
vjeux 0b1f31c
Merge #8125's head into the press feedback
vjeux b80098f
Merge #9816's head into the slide to pick
vjeux 17cab2a
test(ContextMenu): the stays-put case reads the menu as laid out
vjeux 61f0365
Merge #8133's head into the lift
vjeux d096b78
test(ContextMenu): the inline stays-put case reads the menu as laid out
vjeux 61de1b5
chore(sandbox): preview only, the ContextMenu lift on and off
vjeux File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| --- | ||
| '@astryxdesign/core': patch | ||
| --- | ||
|
|
||
| [fix] ContextMenu closes on an outside press through the layer's outside-press watch. A mouse or pen press closes it at its `mousedown`, in the menu's own document, so a menu in an iframe or a Picture-in-Picture window no longer closes on a press in the page. | ||
|
|
||
| @vjeux |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| --- | ||
| '@astryxdesign/core': patch | ||
| --- | ||
|
|
||
| [feat] ContextMenu where the primary pointer is coarse and the menu opens at the finger: when the held finger opens the menu on a block trigger, the trigger lifts out of the page, as on iOS. It grows by up to 15% above a tinted page, its spot in the page held, and the menu fades in beside it, below when it fits, else above. A tap on the tint closes the menu and reaches nothing beneath; the trigger returns to its place. The lifted trigger casts no shadow; one with no background of its own, such as a row of text, lifts on the theme's surface, rounded. An inline trigger, the bottom sheet, `presentation="popover"` and a menu opened by mouse or keyboard keep today's look. | ||
|
|
||
| @vjeux |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| --- | ||
| '@astryxdesign/core': patch | ||
| --- | ||
|
|
||
| [feat] ContextMenu where the primary pointer is coarse and the menu opens at the finger (`presentation` unset, or `adaptive` where it stays a popover): after the held finger opens the menu, the same finger may slide onto an action without lifting, as on iOS. Lifting over an action picks it, and lifting over no action leaves the menu open. The finger picks only after it has moved 10 px in the open menu, so a still lift picks nothing. | ||
|
|
||
| @vjeux |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| --- | ||
| '@astryxdesign/core': patch | ||
| --- | ||
|
|
||
| [feat] ContextMenu opens from a held finger on iOS 26's measured timeline where the primary pointer is coarse. A block trigger whose menu opens at the finger starts to grow 150 ms after the finger lands, toward its held size on UIKit's lift spring, played on the compositor, and the hold keeps UIKit's measured moments. The growth scales an inner box that holds the trigger's children, so the menu never takes the press's scale. At 400 ms the press takes the finger: its lift no longer sends a click, and the page cannot scroll under it. The menu opens at 735 ms if the finger is still down, or as soon as it lifts after 400 ms. A finger that lifts before 400 ms, or drifts more than 11.5 px on either axis before the menu opens, gets no menu, and the trigger springs back to its size. A touch outside the menu closes it as it begins to pan, or at its lift. Over a lifted trigger's tint that pan scrolls nothing; the next one scrolls the page. The trigger returns to its size when the menu closes. A touch open lights no row: the menu takes the focus, and a row lights only under the finger, as in UIKit (keyboard and pointer opens still focus the first item). A second finger cancels the press before 400 ms; after it, the menu still opens. A fine pointer (a mouse) keeps the right-click menu, and a finger there keeps today's 500 ms long press. Pass `presentation="popover"` to keep today's menu: the menu at the pointer, opened by a finger held for 500 ms. | ||
|
|
||
| @vjeux |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| --- | ||
| '@astryxdesign/core': patch | ||
| --- | ||
|
|
||
| [chore] Internal: one opt-in lift-from-trigger presentation for touch surfaces. The trigger itself lifts into the top layer above a tinted backdrop; a surface grows out of the press beside it on the shared rect morph and shrinks back into it on the layer runtime's exit copy; the trigger returns to its place. Translate, scale and opacity only; nothing mounted at rest, three elements while lifted, and no shadow. A zoom from a thumbnail lifts a copy of the thumbnail's picture into the viewer instead, while the thumbnail hides in place. Not exported from the package entry point; ContextMenu's touch lift uses it, and nothing else does yet. | ||
|
|
||
| @vjeux | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| --- | ||
| '@astryxdesign/core': patch | ||
| --- | ||
|
|
||
| [chore] Internal: the rect morph's paths, the geometry touch presentations share when they grow out of a source rect and shrink back into it. `lerpPath` (a straight line between two rects) and `edgeGrowPath` (UIKit's popover, growing out of a point on its edge) name the rect an element shows at each progress, and say how an interrupted motion continues in their own law; `morphCurves` turns a path into compositor curves (`translate`, `scale` and a companion `opacity`). Not exported from the package entry point; ContextMenu's touch lift uses `lerpPath`, through the lift module. | ||
|
|
||
| @vjeux |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| --- | ||
| '@astryxdesign/core': patch | ||
| --- | ||
|
|
||
| [chore] Internal: the rect morph, one way for a touch presentation to grow out of a source rect and shrink back into it. `createRectMorph` presents an element along a path (`lerpPath`, `edgeGrowPath`) and dismisses it back on a copy or on itself, each continuing the other from the rect on screen. Each play takes the timing the component's motion record names (AST-094 FR45): a duration and easing, or a spring, starting from the velocity it is given. Reduced Motion is left to the animator. `easedProgress` moves to the progress helpers and keeps a retargeted velocity; `timedCurve` joins them. Not exported from the package entry point; ContextMenu's touch lift uses it, through the lift module. | ||
|
|
||
| @vjeux |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
123 changes: 123 additions & 0 deletions
123
apps/sandbox/src/app/(raw)/pages/context-menu-lift-shapes/page.tsx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,123 @@ | ||
| // Copyright (c) Meta Platforms, Inc. and affiliates. | ||
|
|
||
| /** | ||
| * @file page.tsx | ||
| * @input ContextMenu and the preview's lift switch | ||
| * @output Preview only: one list of message rows, each with the same | ||
| * ContextMenu, with the lift on (`?lift=L0`) or off (`?lift=L2`) | ||
| * @position A raw Sandbox page (/pages/context-menu-lift-shapes/) with no | ||
| * sandbox frame. The document scrolls. | ||
| */ | ||
|
|
||
| 'use client'; | ||
|
|
||
| import {useEffect, useState} from 'react'; | ||
| import * as stylex from '@stylexjs/stylex'; | ||
| import {ContextMenu} from '@astryxdesign/core/ContextMenu'; | ||
| import {Item} from '@astryxdesign/core/Item'; | ||
| import {VStack} from '@astryxdesign/core/Layout'; | ||
| import {Heading, Text} from '@astryxdesign/core/Text'; | ||
| import {useThemeControls} from '../../../providers'; | ||
|
|
||
| type LiftShape = 'L0' | 'L2'; | ||
|
|
||
| const SHAPES: Record<LiftShape, string> = { | ||
| L0: 'L0: the row lifts above a dimmed page', | ||
| L2: 'L2: no lift', | ||
| }; | ||
|
|
||
| const ACTIONS = ['Copy', 'Share', 'Rename', 'Delete']; | ||
|
|
||
| const ROWS = Array.from({length: 12}, (_, i) => `Message ${i + 1}`); | ||
|
|
||
| const styles = stylex.create({ | ||
| switches: { | ||
| display: 'flex', | ||
| gap: 12, | ||
| }, | ||
| switchLink: { | ||
| paddingBlock: 10, | ||
| paddingInline: 20, | ||
| borderRadius: 8, | ||
| borderWidth: 1, | ||
| borderStyle: 'solid', | ||
| borderColor: 'currentColor', | ||
| color: 'inherit', | ||
| fontWeight: 600, | ||
| textDecoration: 'none', | ||
| }, | ||
| current: { | ||
| backgroundColor: 'var(--color-background-secondary)', | ||
| }, | ||
| }); | ||
|
|
||
| function readShape(): LiftShape { | ||
| return new URLSearchParams(window.location.search).get('lift') === 'L2' | ||
| ? 'L2' | ||
| : 'L0'; | ||
| } | ||
|
|
||
| export default function ContextMenuLiftShapesPage() { | ||
| const {setThemeName, setMode} = useThemeControls(); | ||
| const [shape, setShape] = useState<LiftShape | null>(null); | ||
| const [lastAction, setLastAction] = useState('none'); | ||
|
|
||
| // The switch is read once, after hydration, before any hold. | ||
| useEffect(() => { | ||
| const next = readShape(); | ||
| ( | ||
| globalThis as {__astryxPreviewLiftShape?: LiftShape} | ||
| ).__astryxPreviewLiftShape = next; | ||
| setShape(next); | ||
| }, []); | ||
|
|
||
| // The page opens in Neutral light. The reset waits one frame, so it comes | ||
| // after the Sandbox restores the theme it kept from an earlier visit. | ||
| useEffect(() => { | ||
| const frame = requestAnimationFrame(() => { | ||
| setThemeName('neutral'); | ||
| setMode('light'); | ||
| }); | ||
| return () => cancelAnimationFrame(frame); | ||
| }, [setThemeName, setMode]); | ||
|
|
||
| const menu = ACTIONS.map(label => ({ | ||
| label, | ||
| onClick: () => setLastAction(label), | ||
| })); | ||
|
|
||
| return ( | ||
| <VStack gap={4} padding={4}> | ||
| <VStack gap={2}> | ||
| <Heading level={1}>ContextMenu lift preview</Heading> | ||
| <Text type="body" weight="bold"> | ||
| {shape == null ? 'Reading the switch' : SHAPES[shape]} | ||
| </Text> | ||
| <nav {...stylex.props(styles.switches)}> | ||
| {(['L0', 'L2'] as const).map(option => ( | ||
| <a | ||
| key={option} | ||
| href={`?lift=${option}`} | ||
| {...stylex.props( | ||
| styles.switchLink, | ||
| option === shape && styles.current, | ||
| )}> | ||
| {option} | ||
| </a> | ||
| ))} | ||
| </nav> | ||
| <Text type="supporting">{`Last action: ${lastAction}`}</Text> | ||
| </VStack> | ||
| <VStack gap={0}> | ||
| {ROWS.map(row => ( | ||
| <ContextMenu key={row} items={menu} label={row}> | ||
| <Item | ||
| label={row} | ||
| description="Hold the row until its menu shows." | ||
| /> | ||
| </ContextMenu> | ||
| ))} | ||
| </VStack> | ||
| </VStack> | ||
| ); | ||
| } |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The head no longer shrinks a surface back on the layer runtime's exit copy (
dismissSurfaceis removed), so this release note announces an exit that does not ship. The README says the same at lines 6, 33-35 and 70.