@depup/react-aria-components 1.21.0-depup.0 → 1.22.0-depup.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +4 -3
  2. package/Sheet/package.json +5 -0
  3. package/changes.json +6 -2
  4. package/dist/exports/Sheet.cjs +30 -0
  5. package/dist/exports/Sheet.cjs.map +1 -0
  6. package/dist/exports/Sheet.js +21 -0
  7. package/dist/exports/Sheet.js.map +1 -0
  8. package/dist/exports/Sheet.mjs +21 -0
  9. package/dist/exports/Sheet.mjs.map +1 -0
  10. package/dist/exports/TokenField.cjs +1 -0
  11. package/dist/exports/TokenField.cjs.map +1 -1
  12. package/dist/exports/TokenField.js +2 -2
  13. package/dist/exports/TokenField.js.map +1 -1
  14. package/dist/exports/TokenField.mjs +2 -2
  15. package/dist/exports/TokenField.mjs.map +1 -1
  16. package/dist/exports/index.cjs +7 -0
  17. package/dist/exports/index.cjs.map +1 -1
  18. package/dist/exports/index.js +3 -1
  19. package/dist/exports/index.js.map +1 -1
  20. package/dist/exports/index.mjs +3 -1
  21. package/dist/exports/index.mjs.map +1 -1
  22. package/dist/private/Breadcrumbs.cjs +1 -1
  23. package/dist/private/Breadcrumbs.cjs.map +1 -1
  24. package/dist/private/Breadcrumbs.js +1 -1
  25. package/dist/private/Breadcrumbs.js.map +1 -1
  26. package/dist/private/Breadcrumbs.mjs +1 -1
  27. package/dist/private/Breadcrumbs.mjs.map +1 -1
  28. package/dist/private/Modal.cjs +56 -11
  29. package/dist/private/Modal.cjs.map +1 -1
  30. package/dist/private/Modal.js +61 -14
  31. package/dist/private/Modal.js.map +1 -1
  32. package/dist/private/Modal.mjs +58 -14
  33. package/dist/private/Modal.mjs.map +1 -1
  34. package/dist/private/NavigationTree.cjs.map +1 -1
  35. package/dist/private/NavigationTree.js.map +1 -1
  36. package/dist/private/NavigationTree.mjs.map +1 -1
  37. package/dist/private/Popover.cjs +10 -2
  38. package/dist/private/Popover.cjs.map +1 -1
  39. package/dist/private/Popover.js +10 -2
  40. package/dist/private/Popover.js.map +1 -1
  41. package/dist/private/Popover.mjs +10 -2
  42. package/dist/private/Popover.mjs.map +1 -1
  43. package/dist/private/Sheet.cjs +827 -0
  44. package/dist/private/Sheet.cjs.map +1 -0
  45. package/dist/private/Sheet.js +820 -0
  46. package/dist/private/Sheet.js.map +1 -0
  47. package/dist/private/Sheet.mjs +814 -0
  48. package/dist/private/Sheet.mjs.map +1 -0
  49. package/dist/types/exports/Sheet.d.ts +3 -0
  50. package/dist/types/exports/TokenField.d.ts +2 -2
  51. package/dist/types/exports/index.d.ts +2 -0
  52. package/dist/types/src/Modal.d.ts +28 -1
  53. package/dist/types/src/NavigationTree.d.ts +1 -1
  54. package/dist/types/src/Sheet.d.ts +149 -0
  55. package/package.json +13 -8
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["packages/react-aria-components/src/Sheet.tsx"],"sourcesContent":["/*\n * Copyright 2026 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nimport {ClassNameOrFunction, RenderProps, useRenderProps} from './utils';\nimport {Dialog, DialogProps, DialogTrigger, DialogTriggerProps} from './Dialog';\nimport {filterDOMProps} from 'react-aria/filterDOMProps';\nimport {GlobalDOMAttributes} from '@react-types/shared';\nimport {\n InternalModalContext,\n Modal,\n ModalOverlay,\n ModalOverlayProps,\n ModalRenderProps\n} from './Modal';\nimport {isIOS, isSafari} from 'react-aria/private/utils/platform';\nimport {mergeRefs} from 'react-aria/mergeRefs';\nimport {OverlayTriggerStateContext} from './Dialog';\nimport {PressResponder} from 'react-aria/private/interactions/PressResponder';\nimport React, {\n createContext,\n CSSProperties,\n ForwardedRef,\n forwardRef,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport {useEffectEvent} from 'react-aria/private/utils/useEffectEvent';\nimport {useId} from 'react-aria/useId';\nimport {useLayoutEffect} from 'react-aria/private/utils/useLayoutEffect';\nimport {useLocale} from 'react-aria/I18nProvider';\nimport {useObjectRef} from 'react-aria/useObjectRef';\nimport {useOverlayTriggerState} from 'react-stately/useOverlayTriggerState';\nimport {useSyncExternalStore} from 'use-sync-external-store/shim/index.js';\n\ntype SheetPosition = 'bottom' | 'top' | 'left' | 'right' | 'center';\ntype SheetSwipeDirection = 'bottom' | 'top' | 'vertical' | 'left' | 'right' | 'horizontal';\n\nexport interface SheetRenderProps extends ModalRenderProps {\n /**\n * The placement of the sheet on the screen. `start` and `end` are resolved to `left` or `right`\n * based on the locale direction.\n *\n * @selector [data-position=\"bottom | top | left | right | center\"]\n */\n position: SheetPosition;\n /**\n * The direction the sheet can be swiped. `start` and `end` are resolved to `left` or `right`\n * based on the locale direction.\n *\n * @selector [data-swipe-direction=\"bottom | top | vertical | left | right | horizontal\"]\n */\n swipeDirection: SheetSwipeDirection;\n /**\n * The index of the sheet in the stack.\n *\n * @selector [data-stack-index=\"0 | 1 | 2 | ...\"]\n */\n stackIndex: number;\n /**\n * Whether the sheet has descendants.\n *\n * @selector [data-has-descendants]\n */\n hasDescendants: boolean;\n /**\n * Whether the sheet is fully expanded to its last snap point.\n *\n * @selector [data-expanded]\n */\n isExpanded: boolean;\n}\n\nexport interface SheetOverlayProps\n extends\n Omit<\n ModalOverlayProps,\n | 'className'\n | 'style'\n | 'children'\n | 'render'\n | 'onEnter'\n | 'onExit'\n | 'isEntering'\n | 'isExiting'\n | 'isDismissable'\n | 'isKeyboardDismissDisabled'\n >,\n RenderProps<SheetRenderProps> {\n /**\n * The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the\n * element. A function may be provided to compute the class based on component state.\n *\n * @default 'react-aria-SheetOverlay'\n */\n className?: ClassNameOrFunction<SheetRenderProps>;\n /**\n * The placement of the sheet on the screen. `start` and `end` are mirrored in right-to-left\n * locales.\n *\n * @default 'bottom'\n */\n position?: 'bottom' | 'top' | 'left' | 'right' | 'start' | 'end' | 'center';\n /**\n * The direction the sheet can be swiped. `start` and `end` are mirrored in right-to-left locales.\n * Defaults to the same direction as `position`.\n */\n swipeDirection?:\n | 'bottom'\n | 'top'\n | 'vertical'\n | 'left'\n | 'right'\n | 'start'\n | 'end'\n | 'horizontal';\n /**\n * Snap points the sheet will stop at, expressed as the amount of the sheet that is visible.\n * Numbers are pixels, and percentages are relative to the size of the sheet. Sheets initially\n * open to the first snap point.\n */\n snapPoints?: Array<number | string>;\n /**\n * Whether to prevent the user from closing the sheet by swiping, pressing Escape, or interacting\n * outside it.\n *\n * @default false\n */\n preventDismissal?: boolean;\n}\n\ntype SheetValues = Omit<SheetRenderProps, keyof ModalRenderProps>;\n\ninterface InternalSheetContextValue extends Omit<SheetOverlayProps, 'position' | 'swipeDirection'> {\n position: SheetPosition;\n swipeDirection: SheetSwipeDirection;\n index: number;\n descendants: SheetStackEntry[];\n isEntering: boolean;\n isExiting: boolean;\n values: SheetValues;\n}\n\nconst InternalSheetContext = createContext<InternalSheetContextValue | null>(null);\n\ninterface SheetStackEntry {\n id: string;\n range: string;\n direction: string;\n iterations: number;\n}\n\nlet sheetStack: SheetStackEntry[] = [];\nlet stackListeners = new Set<() => void>();\n\nfunction emitStackChange() {\n // Hoist every mounted sheet's timeline name to the root so a parent\n // can still resolve the child's timeline by name.\n // TODO: don't override existing timelines declared in CSS or inline styles.\n let names = Array.from({length: sheetStack.length})\n .map((_, i) => `--sheet-timeline-${i}`)\n .join(', ');\n document.documentElement.style.setProperty('timeline-scope', names);\n stackListeners.forEach(listener => listener());\n}\n\nfunction subscribeStack(listener: () => void) {\n stackListeners.add(listener);\n return () => {\n stackListeners.delete(listener);\n };\n}\n\nfunction registerSheet(config: SheetStackEntry) {\n sheetStack = [...sheetStack, config];\n emitStackChange();\n return () => {\n sheetStack = sheetStack.filter(e => e.id !== config.id);\n emitStackChange();\n };\n}\n\nfunction getSheetStack() {\n return sheetStack;\n}\n\nconst supportsViewTimeline =\n typeof CSS !== 'undefined' &&\n typeof CSS.supports === 'function' &&\n CSS.supports('animation-timeline: view()');\n\nexport interface SheetTriggerProps extends DialogTriggerProps {}\n\n/**\n * A SheetTrigger opens a sheet when a trigger element is pressed.\n */\nexport function SheetTrigger(props: SheetTriggerProps) {\n return (\n <DialogTrigger {...props}>\n {/* Prevent the trigger element from appearing stuck while the sheet is open. */}\n <PressResponder isPressed={false}>{props.children}</PressResponder>\n </DialogTrigger>\n );\n}\n\n// Additional padding added to the viewport to account for browser toolbar.\n// More content than 100lvh is actually visible on iOS, even when the toolbar is collapsed.\nconst VIEWPORT_PADDING = isIOS() && isSafari() ? 'calc(100lvh - 100svh + 58px)' : '0px';\nconst viewportPadding = (after: boolean, axis: Axis) =>\n after && axis === 'y' ? VIEWPORT_PADDING : '0px';\n\n/**\n * A SheetOverlay is a container for a SheetBackdrop and a Sheet.\n */\nexport const SheetOverlay = forwardRef(function SheetOverlay(\n props: SheetOverlayProps,\n domRef: ForwardedRef<HTMLDivElement>\n) {\n let {children, preventDismissal = false} = props;\n let {direction} = useLocale();\n let position = resolveDirection(props.position ?? 'bottom', direction);\n let swipeDirection = props.swipeDirection\n ? resolveDirection(props.swipeDirection, direction)\n : position === 'center'\n ? 'vertical'\n : position;\n // Resolve the state the same way ModalOverlay does, so that swiping to close works\n // both inside a SheetTrigger and when the open state is passed directly to SheetOverlay.\n let contextState = useContext(OverlayTriggerStateContext);\n let localState = useOverlayTriggerState(props);\n let state =\n props.isOpen != null || props.defaultOpen != null || !contextState ? localState : contextState;\n let onCloseEvent = useEffectEvent(() => {\n state.close();\n });\n\n let {axis, before, after, maxScroll, enteredScroll, viewRange, viewDirection, viewIterations} =\n getSwipeConfig(swipeDirection);\n\n let id = useId();\n let stackItem = useMemo(\n () => ({\n id,\n range: viewRange,\n direction: viewDirection,\n iterations: viewIterations\n }),\n [id, viewRange, viewDirection, viewIterations]\n );\n\n let [isExpanded, setExpanded] = useState(false);\n let isVisible = useRef(false);\n let ref = useCallback(\n (element: HTMLDivElement) => {\n if (!element) {\n return;\n }\n\n // Sheets that rest at scroll 0 (top/left) mount already entered. Move them to the exit position\n // before observing, since onEnter may be deferred (e.g. while waiting for the software keyboard),\n // and the observer would otherwise see the sheet as entered and then close it once onEnter\n // jumps to the exit position.\n if (enteredScroll === 0) {\n let scroller = element.querySelector<HTMLElement>('[data-sheet-scroll]');\n if (scroller) {\n let vp = axis === 'y' ? window.innerHeight : window.innerWidth;\n scrollAlongAxis(scroller, axis, (maxScroll / 100) * vp);\n }\n }\n\n // iOS displays content outside the reported viewport, e.g. behind the browser toolbar.\n // Add additional margin to account for that so that the sheet disappears only when it is entirely invisible.\n let rootMargin = `0px 0px ${calcToPx(viewportPadding(after, axis))} 0px`;\n\n let hasEntered = false;\n let observer = new IntersectionObserver(\n entries => {\n let entry = entries[0];\n\n // Expose whether the sheet is resting at its fully-entered detent (all of it revealed). Apps\n // can use `[data-expanded]` to only make the sheet's inner content scrollable once expanded,\n // so that at a partial detent a swipe on the content expands the sheet instead (like iOS).\n setExpanded(entry.intersectionRatio >= 1);\n isVisible.current = entry.intersectionRatio > 0;\n\n hasEntered ||= entry.intersectionRatio > 0;\n if (hasEntered && entry.intersectionRatio <= 0) {\n // eslint-disable-next-line react/react-compiler\n onCloseEvent();\n element.dispatchEvent(new CustomEvent('react-aria-sheet-close'));\n }\n },\n {threshold: [0, 1], rootMargin}\n );\n\n let el = element.querySelector('[data-sheet-content]');\n if (el) {\n observer.observe(el);\n }\n\n let removeSheet = registerSheet(stackItem);\n\n return () => {\n observer.disconnect();\n removeSheet();\n };\n },\n [stackItem, axis, maxScroll, enteredScroll, after]\n );\n\n let mergedRefs = useMemo(() => mergeRefs(ref, domRef), [ref, domRef]);\n\n let sheetStack = useSyncExternalStore(subscribeStack, getSheetStack, getSheetStack);\n let index = Math.max(\n 0,\n sheetStack.findIndex(e => e.id === id)\n );\n let descendants = sheetStack.slice(index + 1);\n let values: SheetValues = {\n position,\n swipeDirection,\n isExpanded,\n stackIndex: index,\n hasDescendants: descendants.length > 0\n };\n let sheetProps = useSheetRenderProps(props, values, 'react-aria-SheetOverlay', {\n // absolute rather than fixed so the modal is not clipped by iOS Safari.\n position: 'absolute',\n top: 0,\n left: 0,\n width: 'max(var(--page-width), 100vw)',\n height: 'max(var(--page-height), 100dvh)',\n overflow: 'clip',\n // @ts-ignore\n '--sheet-scroll-padding-x': 'calc(100vw - var(--visual-viewport-width))',\n '--sheet-scroll-padding-y': 'calc(100dvh - var(--visual-viewport-height))'\n });\n\n return (\n <ModalOverlay\n {...props}\n isOpen={state.isOpen}\n defaultOpen={undefined}\n onOpenChange={state.setOpen}\n ref={mergedRefs}\n isDismissable={!preventDismissal}\n isKeyboardDismissDisabled={preventDismissal}\n // Moving the VoiceOver cursor into the sheet (via focus, or by making the content behind it\n // inert) scrolls, which interrupts the enter scroll animation on iOS. Wait until it has entered.\n UNSTABLE_deferUntilEntered\n UNSTABLE_overrideFocus\n {...sheetProps}\n onEnter={element => {\n // The overlay is the document-anchored wrapper; the swipe gesture scrolls the inner container.\n let scroller = element.querySelector<HTMLElement>('[data-sheet-scroll]')!;\n let vp =\n axis === 'y'\n ? window.innerHeight + parseFloat(calcToPx(viewportPadding(after, axis)))\n : window.innerWidth;\n // Open at the first custom detent when provided, otherwise the fully-entered position.\n let initial = element.querySelector<HTMLElement>('[data-sheet-initial]');\n let scrollToRest = (smooth: boolean) => {\n if (initial) {\n scrollDetentIntoView(scroller, initial, axis, after ? 'start' : 'end', smooth);\n } else {\n scrollAlongAxis(scroller, axis, (enteredScroll / 100) * vp, smooth);\n }\n };\n if (enteredScroll === 0) {\n // The rest position is at scroll 0, so the sheet mounts already entered. Jump to the exit\n // first, then animate back in on the next frame — doing both in the same task can leave\n // the browser stuck at the jumped-to position instead of running the smooth scroll.\n scrollAlongAxis(scroller, axis, (maxScroll / 100) * vp);\n requestAnimationFrame(() => scrollToRest(true));\n } else {\n scrollToRest(true);\n }\n\n return new Promise<void>(resolve => {\n // eslint-disable-next-line rsp-rules/no-non-composing-event-listener\n scroller.addEventListener('scrollend', () => resolve(), {once: true});\n });\n }}\n onExit={element => {\n let scroller = element.querySelector<HTMLElement>('[data-sheet-scroll]')!;\n if (!isVisible.current) {\n // Wait for the end of the scroll gesture in Safari to avoid momentum scrolling re-targeting to the sheet behind.\n if (isSafari() && !isIOS()) {\n return new Promise<void>(resolve => {\n // eslint-disable-next-line rsp-rules/no-non-composing-event-listener\n scroller.addEventListener(\n 'scrollend',\n () => {\n setTimeout(() => resolve(), 50);\n },\n {once: true}\n );\n });\n }\n return;\n }\n\n let vp =\n axis === 'y'\n ? window.innerHeight + parseFloat(calcToPx(viewportPadding(after, axis)))\n : window.innerWidth;\n let maxScrollPx = (maxScroll / 100) * vp;\n let current = axis === 'y' ? scroller.scrollTop : scroller.scrollLeft;\n let target: number;\n if (after && !before) {\n target = 0;\n } else if (before && !after) {\n target = maxScrollPx;\n } else {\n // Dual direction: exit toward whichever edge is nearest the current position.\n target = current > (enteredScroll / 100) * vp ? maxScrollPx : 0;\n }\n scrollAlongAxis(scroller, axis, target, true);\n\n // The close event is dispatched on the overlay wrapper by the IntersectionObserver below.\n return new Promise<void>(resolve => {\n element.addEventListener('react-aria-sheet-close', () => resolve(), {once: true});\n });\n }}>\n {renderProps => (\n <InternalSheetContext.Provider\n value={{\n ...props,\n position,\n swipeDirection,\n index,\n descendants,\n isEntering: renderProps.isEntering,\n isExiting: renderProps.isExiting,\n values\n }}>\n {typeof children === 'function' ? children({...renderProps, ...values}) : children}\n </InternalSheetContext.Provider>\n )}\n </ModalOverlay>\n );\n});\n\nfunction getDataAttributes(values: SheetValues) {\n return {\n 'data-position': values.position,\n 'data-swipe-direction': values.swipeDirection,\n 'data-expanded': values.isExpanded || undefined,\n 'data-stack-index': values.stackIndex,\n 'data-has-descendants': values.hasDescendants || undefined\n };\n}\n\n// Merges the sheet-specific values into the render props, className, and style of a Modal or ModalOverlay.\nfunction useSheetRenderProps(\n props: RenderProps<SheetRenderProps>,\n values: SheetValues,\n defaultClassName: string,\n defaultStyle: CSSProperties,\n overrideStyle?: CSSProperties\n) {\n return {\n ...getDataAttributes(values),\n render: props.render\n ? (domProps: React.JSX.IntrinsicElements['div'], renderProps: ModalRenderProps) =>\n props.render!(domProps, {...renderProps, ...values})\n : undefined,\n className: (renderProps: ModalRenderProps & {defaultClassName: string | undefined}) =>\n typeof props.className === 'function'\n ? props.className({...renderProps, ...values})\n : props.className || defaultClassName,\n style: (renderProps: ModalRenderProps & {defaultStyle: CSSProperties}) => ({\n ...defaultStyle,\n ...(typeof props.style === 'function'\n ? props.style({...renderProps, ...values})\n : props.style),\n ...overrideStyle\n })\n };\n}\n\nfunction resolveDirection<T extends string>(\n value: T | 'start' | 'end',\n direction: 'ltr' | 'rtl'\n): T | 'left' | 'right' {\n if (value === 'start') {\n return direction === 'rtl' ? 'right' : 'left';\n }\n if (value === 'end') {\n return direction === 'rtl' ? 'left' : 'right';\n }\n return value as T;\n}\n\ntype Axis = 'x' | 'y';\n\ninterface SwipeConfig {\n /** Scroll axis: 'y' for top/bottom/vertical, 'x' for left/right/horizontal. */\n axis: Axis;\n /** Whether the sheet may be swiped off the start edge (top/left). */\n before: boolean;\n /** Whether the sheet may be swiped off the end edge (bottom/right). */\n after: boolean;\n /** Distance in viewport percent between the two extreme scroll positions. */\n maxScroll: number;\n /** Scroll position (viewport percent) at which the sheet is fully entered. */\n enteredScroll: number;\n /** Offset of the scroll container along the swipe axis, in viewport percent. */\n containerOffset: number;\n /** CSS animation range. */\n viewRange: 'cover' | 'exit' | 'entry';\n /** CSS animation direction. */\n viewDirection: 'normal' | 'reverse' | 'alternate';\n /** CSS animation iteration count. */\n viewIterations: number;\n}\n\n// The sheet lives inside an oversized scroll container. Scrolling slides a viewport-sized \"stage\"\n// (which holds the sheet) on and off screen along the swipe axis, so the browser drives the swipe\n// gesture natively. The container is always 2 viewports along the axis; a fixed 1-viewport window\n// (the actual browser viewport) looks onto it. The stage always sits 1 viewport into the content,\n// and snap markers at the content extremes define the entered/exited resting positions.\nfunction getSwipeConfig(swipeDirection: SheetSwipeDirection): SwipeConfig {\n let axis: Axis =\n swipeDirection === 'top' || swipeDirection === 'bottom' || swipeDirection === 'vertical'\n ? 'y'\n : 'x';\n let before =\n swipeDirection === 'top' ||\n swipeDirection === 'left' ||\n swipeDirection === 'vertical' ||\n swipeDirection === 'horizontal';\n let after =\n swipeDirection === 'bottom' ||\n swipeDirection === 'right' ||\n swipeDirection === 'vertical' ||\n swipeDirection === 'horizontal';\n // Each exitable side adds a viewport of scroll travel.\n let maxScroll = (Number(before) + Number(after)) * 100;\n // When the sheet can only exit toward the start edge (top/left), it rests at scroll 0 and is\n // swiped toward maxScroll to dismiss. Otherwise it rests 1 viewport in.\n let enteredScroll = before && !after ? 0 : 100;\n // Position the container so the rest position lands in the real viewport.\n let containerOffset = before && !after ? -100 : 0;\n\n // The sheet crosses a single viewport edge (the swipe edge), so map the animation to just that\n // crossing. In view-timeline terms `entry` is the scrollport's end edge (bottom/right, where the\n // sheet appears from) and `exit` is the start edge (top/left). Direction is chosen so progress 0\n // is the exited state and 1 is entered, matching keyframes authored from exited -> entered:\n // `entry` already runs gone -> entered, while `exit` runs entered -> gone and is reversed.\n //\n // Dual directions cross both edges, so run the same keyframe over the full `cover` range twice\n // (iteration count 2) with `alternate`: the view timeline splits its progress across the two\n // iterations, so it plays exited -> entered -> exited around the centered rest position. This\n // reuses a single exited -> entered keyframe rather than requiring an author to also write a\n // symmetric (0%/50%/100%) variant.\n const viewRange = before && after ? 'cover' : before ? 'exit' : 'entry';\n const viewDirection = before && after ? 'alternate' : before ? 'reverse' : 'normal';\n const viewIterations = before && after ? 2 : 1;\n\n return {\n axis,\n before,\n after,\n maxScroll,\n enteredScroll,\n containerOffset,\n viewRange,\n viewDirection,\n viewIterations\n };\n}\n\n// The resting [x, y] flex alignment for each sheet position, independent of the swipe direction.\nconst POSITION_ALIGNMENT: Record<SheetPosition, [string, string]> = {\n top: ['center', 'flex-start'],\n bottom: ['center', 'flex-end'],\n left: ['flex-start', 'center'],\n right: ['flex-end', 'center'],\n center: ['center', 'center']\n};\n\ninterface SnapPointProps {\n point: number | string;\n align: 'start' | 'end' | 'none';\n axis: Axis;\n}\n\n// Converts a snap point value to a CSS length: numbers are pixels.\nfunction toLength(point: number | string): string {\n return typeof point === 'number' ? `${point}px` : point;\n}\n\nfunction SnapPoint({point, align, axis}: SnapPointProps) {\n let mainUnit = axis === 'y' ? 'dvh' : 'dvw';\n let offset = toLength(point);\n return (\n <div\n style={{\n position: 'absolute',\n top: axis === 'y' ? offset : 0,\n left: axis === 'x' ? offset : 0,\n scrollSnapAlign: align,\n // A full viewport along the swipe axis so its start/end edge lands at the snap position.\n width: axis === 'x' ? `100${mainUnit}` : 1,\n height: axis === 'y' ? `100${mainUnit}` : 1\n }}\n />\n );\n}\n\ninterface DetentPointProps {\n point: number | string;\n axis: Axis;\n after: boolean;\n isInitial?: boolean;\n}\n\n// A snap marker placed inside the sheet, `point` in from its leading edge. Because it moves with\n// the sheet, snapping it with a `scroll-margin` of one viewport rests the marker at the edge of the\n// visible viewport, leaving exactly `point` of the sheet on screen. Since `point` is an inset rather\n// than part of the margin, percentages resolve relative to the sheet's size.\nfunction DetentPoint({point, axis, after, isInitial}: DetentPointProps) {\n let viewport = axis === 'y' ? '100dvh' : '100dvw';\n let offset = toLength(point);\n let common: React.CSSProperties = {\n position: 'absolute',\n width: 1,\n height: 1,\n scrollSnapAlign: after ? 'start' : 'end'\n };\n let edge: React.CSSProperties =\n axis === 'y'\n ? after\n ? {top: offset, left: 0, scrollMarginTop: viewport}\n : {bottom: offset, left: 0, scrollMarginBottom: viewport}\n : after\n ? {top: 0, left: offset, scrollMarginLeft: viewport}\n : {top: 0, right: offset, scrollMarginRight: viewport};\n return (\n <div\n data-sheet-detent\n data-sheet-initial={isInitial || undefined}\n style={{...common, ...edge}}\n />\n );\n}\n\nexport interface SheetProps\n extends\n Omit<\n ModalOverlayProps,\n | 'className'\n | 'style'\n | 'children'\n | 'render'\n | 'onEnter'\n | 'onExit'\n | 'isEntering'\n | 'isExiting'\n | 'isDismissable'\n | 'isOpen'\n | 'defaultOpen'\n | 'onOpenChange'\n | 'isKeyboardDismissDisabled'\n | 'shouldCloseOnInteractOutside'\n >,\n RenderProps<SheetRenderProps> {\n /**\n * The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the\n * element. A function may be provided to compute the class based on component state.\n *\n * @default 'react-aria-Sheet'\n */\n className?: ClassNameOrFunction<SheetRenderProps>;\n /** CSS `@keyframes` name for the animation that occurs while the user swipes. */\n swipeAnimation?: string;\n /**\n * The snap point indices between which the swipe animation occurs. If omitted, the animation will\n * occur over the full range of the sheet's movement.\n */\n swipeAnimationRange?: {start?: number; end?: number};\n /** CSS `@keyframes` name for the animation that occurs when a sheet has descendants. */\n stackAnimation?: string;\n /** Whether to add padding to the sheet so that it appears to continue outside the viewport. */\n overscrollPadding?: boolean;\n}\n\n/**\n * A Sheet is a swipeable overlay that slides in from the edge of the viewport.\n */\nexport const Sheet = forwardRef(function Sheet(\n props: SheetProps,\n domRef: ForwardedRef<HTMLDivElement>\n) {\n let ref = useObjectRef(domRef);\n let scrollRef = useRef<HTMLDivElement>(null);\n let stageRef = useRef<HTMLDivElement>(null);\n let {\n position,\n swipeDirection,\n snapPoints,\n index,\n descendants,\n isEntering,\n isExiting,\n preventDismissal = false,\n values\n } = useContext(InternalSheetContext)!;\n // The ModalOverlay may defer its enter animation (e.g. until the software keyboard opens), during\n // which isEntering is false. The sheet is not settled until it has opened, so treat it as entering.\n let isOpen = useContext(InternalModalContext)?.isOpen ?? true;\n let isTransitioning = !isOpen || isEntering || isExiting;\n let {direction} = useLocale();\n let {axis, after, before, containerOffset} = getSwipeConfig(swipeDirection);\n let viewport = axis === 'y' ? '100dvh' : '100dvw';\n\n // A non-dismissable sheet can still be swiped between its snap points, but not past the smallest\n // one. Enter/exit animations still need the exit space, so only clamp while settled.\n let hasSnapPoints = !!snapPoints?.length && before !== after;\n let isClamped = preventDismissal && !isTransitioning;\n let snapTravel = useSnapPointTravel(\n stageRef,\n ref,\n axis,\n after,\n preventDismissal && hasSnapPoints ? snapPoints!.join(' ') : null\n );\n\n // Scroll travel between the smallest snap point and the fully revealed sheet. It is at least 1px\n // so the scroll container remains scrollable, which lets the browser show its native overscroll\n // bounce even when there is nowhere to snap to.\n let clampedTravel = `${hasSnapPoints ? Math.max(1, snapTravel) : 1}px`;\n\n // The stage normally sits 1 viewport in so the sheet can scroll fully off screen toward the start\n // edge. When clamped, sheets exiting toward the end edge move it so scroll 0 rests at the smallest\n // snap point. Sheets exiting toward the start edge rest at scroll 0 already, so only the end of\n // the scroll content (the smallest snap point) moves. Dual direction sheets get 1px either side.\n // viewportPadding pushes bottom sheets down so that they can scroll beyond the viewport behind the iOS toolbar.\n let stageStart =\n isClamped && after ? clampedTravel : `calc(${viewport} + ${viewportPadding(after, axis)})`;\n let endMarker: string;\n if (isClamped && before && after) {\n endMarker = `calc(${stageStart} + ${viewport} + 1px)`;\n } else if (isClamped && before) {\n endMarker = `calc(${clampedTravel} + ${viewport})`;\n } else {\n endMarker = `calc(${stageStart} + ${viewport}${before && after ? ` + ${viewport}` : ''})`;\n }\n\n // Keep the sheet visually in place when switching between the clamped and unclamped geometry.\n // Scroll snapping is disabled while a non-dismissable sheet enters and exits so the browser\n // doesn't re-snap when the geometry changes, which would otherwise differ between browsers.\n let prevStageOffset = useRef<number | null>(null);\n let prevClamped = useRef(isClamped);\n useLayoutEffect(() => {\n let stage = stageRef.current;\n let scroller = scrollRef.current;\n if (!stage || !scroller) {\n return;\n }\n let offset = axis === 'y' ? stage.offsetTop : stage.offsetLeft;\n if (prevClamped.current !== isClamped && prevStageOffset.current != null) {\n let delta = offset - prevStageOffset.current;\n if (delta !== 0) {\n if (axis === 'y') {\n scroller.scrollTop += delta;\n } else {\n scroller.scrollLeft += delta;\n }\n }\n }\n prevClamped.current = isClamped;\n prevStageOffset.current = offset;\n });\n\n let swipeAnimation = useSwipeAnimation(props);\n let style: Record<string, string | number | undefined> = {\n // Positioned so the detent markers below anchor to the sheet's own box.\n position: 'relative',\n ...swipeAnimation\n };\n\n let overscrollInset: string | undefined;\n if (props.overscrollPadding && position === swipeDirection) {\n overscrollInset = axis === 'y' ? '100vh' : '100vw';\n // Extra padding to allow overscrolling, and a negative margin to offset it.\n switch (position) {\n case 'top':\n style.paddingTop = '100vh';\n style.marginTop = '-100vh';\n break;\n case 'bottom':\n style.paddingBottom = '100vh';\n style.marginBottom = '-100vh';\n break;\n case 'left':\n style.paddingLeft = '100vw';\n style.marginLeft = '-100vw';\n break;\n case 'right':\n style.paddingRight = '100vw';\n style.marginRight = '-100vw';\n break;\n }\n }\n\n if (props.stackAnimation && descendants.length > 0 && supportsViewTimeline) {\n // Append one animation per descendant sheet, driven by that descendant's view timeline.\n let stackStyle: Record<string, (d: SheetStackEntry, i: number) => string> = {\n animationName: () => props.stackAnimation!,\n animationTimeline: (_, i) => `--sheet-timeline-${index + 1 + i}`,\n animationDirection: d => d.direction,\n animationIterationCount: d => String(d.iterations),\n animationFillMode: () => 'both',\n animationRange: d => d.range,\n animationComposition: () => 'accumulate',\n animationTimingFunction: () => 'linear'\n };\n for (let [key, value] of Object.entries(stackStyle)) {\n style[key] = [style[key], ...descendants.map(value)].filter(Boolean).join(', ');\n }\n }\n\n let sheetProps = useSheetRenderProps(props, values, 'react-aria-Sheet', {direction}, style);\n let [x, y] = POSITION_ALIGNMENT[position];\n let justifyContent = axis === 'y' ? y : x;\n let alignItems = axis === 'y' ? x : y;\n let {scrollX, scrollY} = typeof window !== 'undefined' ? window : {scrollX: 0, scrollY: 0};\n\n return (\n <div\n ref={scrollRef}\n data-sheet-scroll\n style={{\n position: 'absolute',\n top: axis === 'y' ? `calc(${scrollY}px + ${containerOffset}dvh)` : scrollY,\n left: axis === 'x' ? `calc(${scrollX}px + ${containerOffset}dvw)` : scrollX,\n // The container is 2 viewports along the swipe axis and 1 viewport on the cross axis.\n height: axis === 'y' ? '200dvh' : '100dvh',\n width: axis === 'x' ? '200dvw' : '100dvw',\n overflowX: axis === 'x' ? 'auto' : 'hidden',\n overflowY: axis === 'y' ? 'auto' : 'hidden',\n // Snapping is only disabled when the geometry changes. Changing it during a swipe to dismiss\n // cancels the momentum scroll in Safari without firing scrollend, which onExit waits for.\n scrollSnapType: preventDismissal && isTransitioning ? 'none' : `${axis} mandatory`,\n overscrollBehaviorY: axis === 'y' ? 'contain' : 'none',\n overscrollBehaviorX: axis === 'x' ? 'contain' : 'none',\n scrollbarWidth: 'none',\n // The scroll geometry is physical, so keep the scroll origin and flex alignment\n // left-to-right regardless of the document direction.\n direction: 'ltr'\n }}>\n {/* Snap marker for the exit at scroll 0 (also the rest position for top/left).\n When clamped, the exit positions are unreachable so they are not snap targets. */}\n <SnapPoint point={0} align={isClamped && after ? 'none' : 'start'} axis={axis} />\n {/* When the sheet can exit both ways, add a center snap for the rest position. */}\n {before && after && <SnapPoint point={stageStart} align=\"start\" axis={axis} />}\n <div\n ref={stageRef}\n style={{\n position: 'absolute',\n // The stage normally sits 1 viewport into the content along the swipe axis.\n top: axis === 'y' ? stageStart : 0,\n left: axis === 'x' ? stageStart : 0,\n height: '100dvh',\n width: '100dvw',\n display: 'flex',\n flexDirection: axis === 'y' ? 'column' : 'row',\n alignItems,\n justifyContent\n }}>\n <Modal {...props} ref={ref} {...sheetProps}>\n {renderProps => (\n <>\n {snapPoints && (\n // Excludes the overscroll padding so percentages are relative to the visible sheet.\n <div\n style={{\n position: 'absolute',\n inset: 0,\n ...(overscrollInset ? {[position]: overscrollInset} : null),\n pointerEvents: 'none'\n }}>\n {snapPoints.map((point, i) => (\n <DetentPoint\n key={i}\n point={point}\n axis={axis}\n after={after}\n isInitial={i === 0}\n />\n ))}\n </div>\n )}\n {typeof props.children === 'function'\n ? props.children({...renderProps, ...values})\n : props.children}\n </>\n )}\n </Modal>\n </div>\n {/* Snap marker for the exit at the far end of the scroll content. */}\n <SnapPoint point={endMarker} align={isClamped && before ? 'none' : 'end'} axis={axis} />\n </div>\n );\n});\n\n// Measures how far the sheet must scroll from its smallest snap point to be fully revealed, i.e. the\n// distance from that snap point's marker to the stage's exit edge. Measuring the rendered markers\n// means snap points can use any CSS length, including percentages of the sheet. Uses layout offsets\n// rather than bounding rects so swipe/stack animation transforms don't affect it.\nfunction useSnapPointTravel(\n stageRef: React.RefObject<HTMLDivElement | null>,\n sheetRef: React.RefObject<HTMLDivElement | null>,\n axis: Axis,\n after: boolean,\n // Space-separated snap points, so markers are re-measured when they change. Null to disable.\n snapPointsKey: string | null\n): number {\n let [travel, setTravel] = useState(0);\n useLayoutEffect(() => {\n let stage = stageRef.current;\n let sheet = sheetRef.current;\n if (snapPointsKey == null || !stage || !sheet) {\n return;\n }\n\n let measure = () => {\n let stageSize = axis === 'y' ? stage.clientHeight : stage.clientWidth;\n let max = 0;\n for (let marker of sheet.querySelectorAll<HTMLElement>('[data-sheet-detent]')) {\n let offset = 0;\n let el: HTMLElement | null = marker;\n while (el && el !== stage) {\n offset += axis === 'y' ? el.offsetTop : el.offsetLeft;\n el = el.offsetParent as HTMLElement | null;\n }\n // Markers sit at the snap point's start edge for sheets exiting toward the end edge, and at\n // its end edge for sheets exiting toward the start edge. The smallest snap point travels most.\n let size = axis === 'y' ? marker.offsetHeight : marker.offsetWidth;\n max = Math.max(max, after ? stageSize - offset : offset + size);\n }\n setTravel(max);\n };\n\n measure();\n let observer = new ResizeObserver(measure);\n observer.observe(stage);\n observer.observe(sheet);\n return () => observer.disconnect();\n }, [stageRef, sheetRef, axis, after, snapPointsKey]);\n\n return travel;\n}\n\nexport interface SheetBackdropProps\n extends RenderProps<SheetRenderProps>, GlobalDOMAttributes<HTMLDivElement> {\n /**\n * The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for\n * the element. A function may be provided to compute the class based on component state.\n *\n * @default 'react-aria-SheetBackdrop'\n */\n className?: ClassNameOrFunction<SheetRenderProps>;\n /** CSS `@keyframes` name for the animation that occurs while the user swipes. */\n swipeAnimation?: string;\n /**\n * The snap point indices between which the swipe animation occurs. If omitted, the animation will\n * occur over the full range of the sheet's movement.\n */\n swipeAnimationRange?: {start?: number; end?: number};\n}\n\n/**\n * The backdrop behind a sheet.\n */\nexport const SheetBackdrop = forwardRef(function SheetBackdrop(\n props: SheetBackdropProps,\n ref: ForwardedRef<HTMLDivElement>\n) {\n let style = useSwipeAnimation(props);\n let {values, isEntering, isExiting} = useContext(InternalSheetContext)!;\n let state = useContext(OverlayTriggerStateContext)!;\n let renderProps = useRenderProps({\n ...props,\n defaultClassName: 'react-aria-SheetBackdrop',\n defaultStyle: {...style, position: 'absolute', inset: 0},\n values: {...values, isEntering, isExiting, state}\n });\n\n return (\n <div\n ref={ref}\n {...filterDOMProps(props, {global: true})}\n {...renderProps}\n {...getDataAttributes(values)}\n data-entering={isEntering || undefined}\n data-exiting={isExiting || undefined}\n />\n );\n});\n\nfunction useSwipeAnimation(props: SheetBackdropProps) {\n let {swipeDirection, snapPoints, index, isEntering, isExiting} =\n useContext(InternalSheetContext)!;\n let {viewRange, viewDirection, viewIterations} = getSwipeConfig(swipeDirection);\n\n if (props.swipeAnimation) {\n let rangeStart =\n props.swipeAnimationRange?.start != null\n ? toLength(snapPoints?.[props.swipeAnimationRange.start] ?? '0%')\n : '0%';\n let rangeEnd =\n props.swipeAnimationRange?.end != null\n ? toLength(snapPoints?.[props.swipeAnimationRange.end] ?? '100%')\n : '100%';\n if (swipeDirection === 'top' || swipeDirection === 'left') {\n rangeStart = `calc(100% - ${rangeStart})`;\n rangeEnd = `calc(100% - ${rangeEnd})`;\n [rangeStart, rangeEnd] = [rangeEnd, rangeStart];\n }\n\n // TODO: fix cover with range\n\n if (supportsViewTimeline) {\n return {\n animationName: props.swipeAnimation,\n animationTimeline: `--sheet-timeline-${index}`,\n animationDirection: viewDirection,\n animationIterationCount: viewIterations,\n animationFillMode: 'both',\n animationRange: `${viewRange} ${rangeStart} ${viewRange} ${rangeEnd}`,\n animationTimingFunction: 'linear',\n animationComposition: 'replace'\n };\n } else if (isEntering || isExiting) {\n // Fallback for Firefox, which doesn't support view timelines.\n return {\n animationName: props.swipeAnimation,\n animationDirection: isExiting ? 'reverse' : 'normal',\n animationDuration: '300ms',\n animationIterationCount: '1',\n animationFillMode: 'both',\n animationTimingFunction: 'linear',\n animationComposition: 'replace'\n };\n }\n }\n\n return {};\n}\n\nexport interface SheetContentProps extends Omit<DialogProps, 'className' | 'isEntering'> {\n /**\n * The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the\n * element.\n *\n * @default 'react-aria-SheetContent'\n */\n className?: string;\n}\n\n/**\n * The scrollable content area of a sheet.\n */\nexport const SheetContent = forwardRef(function SheetContent(\n props: SheetContentProps,\n ref: ForwardedRef<HTMLDivElement>\n) {\n let {swipeDirection, index} = useContext(InternalSheetContext)!;\n let {axis, before, after} = getSwipeConfig(swipeDirection);\n let viewportLength = axis === 'y' ? '100dvh' : '100dvw';\n\n return (\n <Dialog\n {...props}\n ref={ref}\n className={props.className || 'react-aria-SheetContent'}\n data-sheet-content\n style={{\n ...props.style,\n width: '100%',\n height: '100%',\n // The dialog is the subject of the view-progress timeline that drives all sheet animations.\n // It is _not_ the Modal because that may have additional padding for overscroll and therefore never be entirely visible.\n // The inset crops the scroll container's scrollport down to the visible viewport.\n // @ts-ignore\n viewTimelineName: `--sheet-timeline-${index}`,\n viewTimelineAxis: axis,\n viewTimelineInset: before && !after ? `${viewportLength} 0` : `0 ${viewportLength}`\n }}\n />\n );\n});\n\nfunction reduceMotion() {\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\nfunction scrollAlongAxis(element: HTMLElement, axis: Axis, value: number, smooth = false) {\n let behavior: ScrollBehavior | undefined = smooth && !reduceMotion() ? 'smooth' : undefined;\n element.scrollTo(axis === 'y' ? {top: value, behavior} : {left: value, behavior});\n}\n\nfunction scrollDetentIntoView(\n scroller: HTMLElement,\n marker: HTMLElement,\n axis: Axis,\n align: 'start' | 'end',\n smooth = false\n) {\n let behavior: ScrollBehavior = smooth && !reduceMotion() ? 'smooth' : 'auto';\n let markerRect = marker.getBoundingClientRect();\n let scrollerRect = scroller.getBoundingClientRect();\n let style = getComputedStyle(marker);\n if (axis === 'y') {\n if (align === 'start') {\n let margin = parseFloat(style.scrollMarginTop) || 0;\n // Rest the marker's start edge (less its scroll-margin) at the scrollport's start.\n let top = markerRect.top - scrollerRect.top + scroller.scrollTop - margin;\n scroller.scrollTo({top, behavior});\n } else {\n let margin = parseFloat(style.scrollMarginBottom) || 0;\n // Rest the marker's end edge (plus its scroll-margin) at the scrollport's end.\n let top =\n markerRect.bottom - scrollerRect.top + scroller.scrollTop + margin - scroller.clientHeight;\n scroller.scrollTo({top, behavior});\n }\n } else {\n if (align === 'start') {\n let margin = parseFloat(style.scrollMarginLeft) || 0;\n let left = markerRect.left - scrollerRect.left + scroller.scrollLeft - margin;\n scroller.scrollTo({left, behavior});\n } else {\n let margin = parseFloat(style.scrollMarginRight) || 0;\n let left =\n markerRect.right - scrollerRect.left + scroller.scrollLeft + margin - scroller.clientWidth;\n scroller.scrollTo({left, behavior});\n }\n }\n}\n\nfunction calcToPx(calc: string) {\n if (!calc.startsWith('calc(')) {\n return calc;\n }\n\n let measure = document.createElement('div');\n measure.inert = true;\n measure.style.position = 'absolute';\n measure.style.top = '0px';\n measure.style.left = '0px';\n measure.style.contain = 'strict';\n measure.style.height = calc;\n document.body.appendChild(measure);\n let height = window.getComputedStyle(measure).height;\n measure.remove();\n return height;\n}\n"],"names":[],"version":3,"file":"Sheet.mjs.map"}
@@ -0,0 +1,3 @@
1
+ import 'client-only';
2
+ export { SheetTrigger, SheetOverlay, Sheet, SheetBackdrop, SheetContent } from '../src/Sheet';
3
+ export type { SheetOverlayProps, SheetProps, SheetRenderProps, SheetBackdropProps, SheetContentProps, SheetTriggerProps } from '../src/Sheet';
@@ -1,5 +1,5 @@
1
- export { TokenField, TokenInput, Token } from '../src/TokenField';
2
- export type { TokenFieldProps, TokenFieldRenderProps, TokenInputProps, TokenInputRenderProps, TokenProps, TokenRenderProps, TokenFieldContext } from '../src/TokenField';
1
+ export { TokenField, TokenInput, Token, TokenFieldContext } from '../src/TokenField';
2
+ export type { TokenFieldProps, TokenFieldRenderProps, TokenInputProps, TokenInputRenderProps, TokenProps, TokenRenderProps } from '../src/TokenField';
3
3
  export { tokenFieldPositionToDOMRange, setTokenFieldSelection } from 'react-aria/useTokenField';
4
4
  export { TokenFieldValue } from 'react-stately/useTokenFieldState';
5
5
  export type { TokenFieldSegment, TokenSegment, TextSegment, Position, TokenFieldValueOptions } from 'react-stately/useTokenFieldState';
@@ -48,6 +48,7 @@ export { Select, SelectValue, SelectContext, SelectValueContext, SelectStateCont
48
48
  export { SelectionIndicator, SelectionIndicatorContext } from '../src/SelectionIndicator';
49
49
  export { Separator, SeparatorContext } from '../src/Separator';
50
50
  export { SharedElementTransition, SharedElement } from '../src/SharedElementTransition';
51
+ export { SheetTrigger, SheetOverlay, Sheet, SheetBackdrop, SheetContent } from '../src/Sheet';
51
52
  export { Slider, SliderOutput, SliderTrack, SliderThumb, SliderFill, SliderContext, SliderOutputContext, SliderTrackContext, SliderFillContext, SliderStateContext } from '../src/Slider';
52
53
  export { Switch, SwitchField, SwitchButton, SwitchContext, SwitchFieldContext } from '../src/Switch';
53
54
  export { TableLoadMoreItem, Table, Row, Cell, Column, ColumnResizer, TableHeader, TableBody, TableContext, ResizableTableContainer, useTableOptions, TableStateContext, TableColumnResizeStateContext, TableFooter } from '../src/Table';
@@ -136,6 +137,7 @@ export type { SelectProps, SelectValueProps, SelectValueRenderProps, SelectRende
136
137
  export type { SelectionIndicatorProps } from '../src/SelectionIndicator';
137
138
  export type { SharedElementTransitionProps, SharedElementProps, SharedElementRenderProps } from '../src/SharedElementTransition';
138
139
  export type { SeparatorProps } from '../src/Separator';
140
+ export type { SheetOverlayProps, SheetProps, SheetRenderProps, SheetBackdropProps, SheetContentProps, SheetTriggerProps } from '../src/Sheet';
139
141
  export type { SliderOutputProps, SliderProps, SliderRenderProps, SliderThumbProps, SliderTrackProps, SliderTrackRenderProps, SliderFillProps, SliderFillRenderProps, SliderThumbRenderProps } from '../src/Slider';
140
142
  export type { SwitchProps, SwitchRenderProps, SwitchFieldProps, SwitchFieldRenderProps, SwitchButtonProps, SwitchButtonRenderProps } from '../src/Switch';
141
143
  export type { TableProps, TableRenderProps, TableHeaderProps, TableBodyProps, TableBodyRenderProps, ResizableTableContainerProps, ColumnProps, ColumnRenderProps, ColumnResizerProps, ColumnResizerRenderProps, RowProps, RowRenderProps, CellProps, CellRenderProps, TableLoadMoreItemProps, TableFooterProps } from '../src/Table';
@@ -1,6 +1,6 @@
1
1
  import { AriaModalOverlayProps } from 'react-aria/useModalOverlay';
2
2
  import { ClassNameOrFunction, ContextValue, RenderProps, SlotProps } from './utils';
3
- import { GlobalDOMAttributes } from '@react-types/shared';
3
+ import { DOMAttributes, GlobalDOMAttributes, RefObject } from '@react-types/shared';
4
4
  import { OverlayTriggerProps, OverlayTriggerState } from 'react-stately/useOverlayTriggerState';
5
5
  import React from 'react';
6
6
  export interface ModalOverlayProps extends AriaModalOverlayProps, OverlayTriggerProps, RenderProps<ModalRenderProps>, SlotProps, GlobalDOMAttributes<HTMLDivElement> {
@@ -19,6 +19,16 @@ export interface ModalOverlayProps extends AriaModalOverlayProps, OverlayTrigger
19
19
  * Whether the modal is currently performing an exit animation.
20
20
  */
21
21
  isExiting?: boolean;
22
+ /**
23
+ * Callback when the modal starts entering. Return a promise to indicate when the entry animation
24
+ * has completed.
25
+ */
26
+ onEnter?: (element: HTMLElement) => void | Promise<void>;
27
+ /**
28
+ * Callback when the modal starts exiting. Return a promise to indicate when the exit animation
29
+ * has completed.
30
+ */
31
+ onExit?: (element: HTMLElement) => void | Promise<void>;
22
32
  /**
23
33
  * The container element in which the overlay portal will be placed. This may have unknown
24
34
  * behavior depending on where it is portalled to.
@@ -27,8 +37,24 @@ export interface ModalOverlayProps extends AriaModalOverlayProps, OverlayTrigger
27
37
  * @default document.body
28
38
  */
29
39
  UNSTABLE_portalContainer?: Element;
40
+ /**
41
+ * Whether to wait until the entry animation completes before hiding content outside the modal
42
+ * and moving focus into it.
43
+ *
44
+ * @private
45
+ */
46
+ UNSTABLE_deferUntilEntered?: boolean;
47
+ }
48
+ interface InternalModalContextValue {
49
+ modalProps: DOMAttributes;
50
+ modalRef: RefObject<HTMLDivElement | null>;
51
+ isOpen: boolean;
52
+ isExiting: boolean;
53
+ isDismissable?: boolean;
54
+ onExitRef?: RefObject<ModalOverlayProps['onExit'] | null>;
30
55
  }
31
56
  export declare const ModalContext: React.Context<ContextValue<ModalOverlayProps, HTMLDivElement>>;
57
+ export declare const InternalModalContext: React.Context<InternalModalContextValue | null>;
32
58
  export interface ModalRenderProps {
33
59
  /**
34
60
  * Whether the modal is currently entering. Use this to apply animations.
@@ -55,3 +81,4 @@ export declare const Modal: (props: ModalOverlayProps & React.RefAttributes<HTML
55
81
  * A ModalOverlay is a wrapper for a Modal which allows customizing the backdrop element.
56
82
  */
57
83
  export declare const ModalOverlay: (props: ModalOverlayProps & React.RefAttributes<HTMLDivElement>) => React.ReactElement | null;
84
+ export {};
@@ -38,7 +38,7 @@ export interface NavigationTreeItemRenderProps extends TreeItemRenderProps {
38
38
  */
39
39
  isCurrentAncestor: boolean;
40
40
  }
41
- export interface NavigationTreeItemProps<T = object> extends Omit<TreeItemProps<T>, 'className' | 'style' | 'render' | 'onAction' | 'allowsArrowNavigation' | 'focusMode' | 'value'>, StyleRenderProps<NavigationTreeItemRenderProps> {
41
+ export interface NavigationTreeItemProps<T = object> extends Omit<TreeItemProps<T>, 'className' | 'style' | 'render' | 'onAction' | 'allowsArrowNavigation' | 'value'>, StyleRenderProps<NavigationTreeItemRenderProps> {
42
42
  /**
43
43
  * The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the
44
44
  * element. A function may be provided to compute the class based on component state.
@@ -0,0 +1,149 @@
1
+ import { ClassNameOrFunction, RenderProps } from './utils';
2
+ import { DialogProps, DialogTriggerProps } from './Dialog';
3
+ import { GlobalDOMAttributes } from '@react-types/shared';
4
+ import { ModalOverlayProps, ModalRenderProps } from './Modal';
5
+ import React from 'react';
6
+ type SheetPosition = 'bottom' | 'top' | 'left' | 'right' | 'center';
7
+ type SheetSwipeDirection = 'bottom' | 'top' | 'vertical' | 'left' | 'right' | 'horizontal';
8
+ export interface SheetRenderProps extends ModalRenderProps {
9
+ /**
10
+ * The placement of the sheet on the screen. `start` and `end` are resolved to `left` or `right`
11
+ * based on the locale direction.
12
+ *
13
+ * @selector [data-position="bottom | top | left | right | center"]
14
+ */
15
+ position: SheetPosition;
16
+ /**
17
+ * The direction the sheet can be swiped. `start` and `end` are resolved to `left` or `right`
18
+ * based on the locale direction.
19
+ *
20
+ * @selector [data-swipe-direction="bottom | top | vertical | left | right | horizontal"]
21
+ */
22
+ swipeDirection: SheetSwipeDirection;
23
+ /**
24
+ * The index of the sheet in the stack.
25
+ *
26
+ * @selector [data-stack-index="0 | 1 | 2 | ..."]
27
+ */
28
+ stackIndex: number;
29
+ /**
30
+ * Whether the sheet has descendants.
31
+ *
32
+ * @selector [data-has-descendants]
33
+ */
34
+ hasDescendants: boolean;
35
+ /**
36
+ * Whether the sheet is fully expanded to its last snap point.
37
+ *
38
+ * @selector [data-expanded]
39
+ */
40
+ isExpanded: boolean;
41
+ }
42
+ export interface SheetOverlayProps extends Omit<ModalOverlayProps, 'className' | 'style' | 'children' | 'render' | 'onEnter' | 'onExit' | 'isEntering' | 'isExiting' | 'isDismissable' | 'isKeyboardDismissDisabled'>, RenderProps<SheetRenderProps> {
43
+ /**
44
+ * The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the
45
+ * element. A function may be provided to compute the class based on component state.
46
+ *
47
+ * @default 'react-aria-SheetOverlay'
48
+ */
49
+ className?: ClassNameOrFunction<SheetRenderProps>;
50
+ /**
51
+ * The placement of the sheet on the screen. `start` and `end` are mirrored in right-to-left
52
+ * locales.
53
+ *
54
+ * @default 'bottom'
55
+ */
56
+ position?: 'bottom' | 'top' | 'left' | 'right' | 'start' | 'end' | 'center';
57
+ /**
58
+ * The direction the sheet can be swiped. `start` and `end` are mirrored in right-to-left locales.
59
+ * Defaults to the same direction as `position`.
60
+ */
61
+ swipeDirection?: 'bottom' | 'top' | 'vertical' | 'left' | 'right' | 'start' | 'end' | 'horizontal';
62
+ /**
63
+ * Snap points the sheet will stop at, expressed as the amount of the sheet that is visible.
64
+ * Numbers are pixels, and percentages are relative to the size of the sheet. Sheets initially
65
+ * open to the first snap point.
66
+ */
67
+ snapPoints?: Array<number | string>;
68
+ /**
69
+ * Whether to prevent the user from closing the sheet by swiping, pressing Escape, or interacting
70
+ * outside it.
71
+ *
72
+ * @default false
73
+ */
74
+ preventDismissal?: boolean;
75
+ }
76
+ export interface SheetTriggerProps extends DialogTriggerProps {
77
+ }
78
+ /**
79
+ * A SheetTrigger opens a sheet when a trigger element is pressed.
80
+ */
81
+ export declare function SheetTrigger(props: SheetTriggerProps): React.JSX.Element;
82
+ /**
83
+ * A SheetOverlay is a container for a SheetBackdrop and a Sheet.
84
+ */
85
+ export declare const SheetOverlay: React.ForwardRefExoticComponent<SheetOverlayProps & React.RefAttributes<HTMLDivElement>>;
86
+ export interface SheetProps extends Omit<ModalOverlayProps, 'className' | 'style' | 'children' | 'render' | 'onEnter' | 'onExit' | 'isEntering' | 'isExiting' | 'isDismissable' | 'isOpen' | 'defaultOpen' | 'onOpenChange' | 'isKeyboardDismissDisabled' | 'shouldCloseOnInteractOutside'>, RenderProps<SheetRenderProps> {
87
+ /**
88
+ * The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the
89
+ * element. A function may be provided to compute the class based on component state.
90
+ *
91
+ * @default 'react-aria-Sheet'
92
+ */
93
+ className?: ClassNameOrFunction<SheetRenderProps>;
94
+ /** CSS `@keyframes` name for the animation that occurs while the user swipes. */
95
+ swipeAnimation?: string;
96
+ /**
97
+ * The snap point indices between which the swipe animation occurs. If omitted, the animation will
98
+ * occur over the full range of the sheet's movement.
99
+ */
100
+ swipeAnimationRange?: {
101
+ start?: number;
102
+ end?: number;
103
+ };
104
+ /** CSS `@keyframes` name for the animation that occurs when a sheet has descendants. */
105
+ stackAnimation?: string;
106
+ /** Whether to add padding to the sheet so that it appears to continue outside the viewport. */
107
+ overscrollPadding?: boolean;
108
+ }
109
+ /**
110
+ * A Sheet is a swipeable overlay that slides in from the edge of the viewport.
111
+ */
112
+ export declare const Sheet: React.ForwardRefExoticComponent<SheetProps & React.RefAttributes<HTMLDivElement>>;
113
+ export interface SheetBackdropProps extends RenderProps<SheetRenderProps>, GlobalDOMAttributes<HTMLDivElement> {
114
+ /**
115
+ * The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for
116
+ * the element. A function may be provided to compute the class based on component state.
117
+ *
118
+ * @default 'react-aria-SheetBackdrop'
119
+ */
120
+ className?: ClassNameOrFunction<SheetRenderProps>;
121
+ /** CSS `@keyframes` name for the animation that occurs while the user swipes. */
122
+ swipeAnimation?: string;
123
+ /**
124
+ * The snap point indices between which the swipe animation occurs. If omitted, the animation will
125
+ * occur over the full range of the sheet's movement.
126
+ */
127
+ swipeAnimationRange?: {
128
+ start?: number;
129
+ end?: number;
130
+ };
131
+ }
132
+ /**
133
+ * The backdrop behind a sheet.
134
+ */
135
+ export declare const SheetBackdrop: React.ForwardRefExoticComponent<SheetBackdropProps & React.RefAttributes<HTMLDivElement>>;
136
+ export interface SheetContentProps extends Omit<DialogProps, 'className' | 'isEntering'> {
137
+ /**
138
+ * The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the
139
+ * element.
140
+ *
141
+ * @default 'react-aria-SheetContent'
142
+ */
143
+ className?: string;
144
+ }
145
+ /**
146
+ * The scrollable content area of a sheet.
147
+ */
148
+ export declare const SheetContent: React.ForwardRefExoticComponent<SheetContentProps & React.RefAttributes<HTMLDivElement>>;
149
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@depup/react-aria-components",
3
- "version": "1.21.0-depup.0",
3
+ "version": "1.22.0-depup.0",
4
4
  "description": "A library of styleable components built using React Aria (with updated dependencies)",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -56,11 +56,12 @@
56
56
  "dependencies": {
57
57
  "@internationalized/date": "^3.12.4",
58
58
  "@internationalized/string": "^3.2.10",
59
- "@react-types/shared": "^3.36.1",
59
+ "@react-types/shared": "^3.37.0",
60
60
  "@swc/helpers": "^0.5.23",
61
61
  "client-only": "^0.0.1",
62
- "react-aria": "3.52.0",
63
- "react-stately": "3.50.0"
62
+ "react-aria": "3.53.0",
63
+ "react-stately": "3.51.0",
64
+ "use-sync-external-store": "^1.7.0"
64
65
  },
65
66
  "devDependencies": {
66
67
  "@tailwindcss/postcss": "^4.0.0",
@@ -106,7 +107,7 @@
106
107
  }
107
108
  }
108
109
  },
109
- "gitHead": "0a2a7e68e4d896b3ac46c3647fe48fac9ea3ae2e",
110
+ "gitHead": "1abc52dd5ad238143f168912963ff3ad932547a4",
110
111
  "keywords": [
111
112
  "react-aria-components",
112
113
  "depup",
@@ -120,12 +121,16 @@
120
121
  "@swc/helpers": {
121
122
  "from": "^0.5.0",
122
123
  "to": "^0.5.23"
124
+ },
125
+ "use-sync-external-store": {
126
+ "from": "^1.6.0",
127
+ "to": "^1.7.0"
123
128
  }
124
129
  },
125
- "depsUpdated": 1,
130
+ "depsUpdated": 2,
126
131
  "originalPackage": "react-aria-components",
127
- "originalVersion": "1.21.0",
128
- "processedAt": "2026-09-01T16:34:09.364Z",
132
+ "originalVersion": "1.22.0",
133
+ "processedAt": "2026-10-08T08:16:50.088Z",
129
134
  "smokeTest": "passed"
130
135
  }
131
136
  }