@astryxdesign/core 0.7.5-canary.fccd771 → 0.7.5
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.
- package/CHANGELOG.md +211 -10
- package/README.md +15 -12
- package/dist/AlertDialog/AlertDialog.js +1 -1
- package/dist/AppShell/AppShell.d.ts +0 -22
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +155 -1
- package/dist/Avatar/AvatarStatusDot.js +2 -2
- package/dist/Badge/Badge.d.ts.map +1 -1
- package/dist/Badge/Badge.js +18 -2
- package/dist/Banner/Banner.d.ts +1 -0
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +64 -9
- package/dist/BottomSheet/BottomSheet.d.ts +53 -5
- package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +435 -198
- package/dist/BottomSheet/BottomSheetHostContext.d.ts +8 -0
- package/dist/BottomSheet/BottomSheetHostContext.d.ts.map +1 -0
- package/dist/BottomSheet/BottomSheetHostContext.js +35 -0
- package/dist/BottomSheet/BottomSheetPanel.d.ts +9 -1
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +77 -23
- package/dist/BottomSheet/BottomSheetSwitcher.d.ts +53 -14
- package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetSwitcher.js +229 -27
- package/dist/BottomSheet/BottomSheetSwitcherContext.d.ts +6 -0
- package/dist/BottomSheet/BottomSheetSwitcherContext.d.ts.map +1 -1
- package/dist/BottomSheet/bottomSheetEscape.d.ts +3 -0
- package/dist/BottomSheet/bottomSheetEscape.d.ts.map +1 -0
- package/dist/BottomSheet/bottomSheetEscape.js +20 -0
- package/dist/BottomSheet/bottomSheetStack.d.ts +262 -0
- package/dist/BottomSheet/bottomSheetStack.d.ts.map +1 -0
- package/dist/BottomSheet/bottomSheetStack.js +1675 -0
- package/dist/BottomSheet/useSheetGestures.d.ts +19 -3
- package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
- package/dist/BottomSheet/useSheetGestures.js +43 -14
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +36 -3
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +18 -7
- package/dist/Chat/ChatComposer.d.ts.map +1 -1
- package/dist/Chat/ChatComposer.js +25 -32
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +55 -16
- package/dist/Chat/ChatMessageMetadata.js +2 -2
- package/dist/Chat/ChatPastedTextToken.d.ts.map +1 -1
- package/dist/Chat/ChatPastedTextToken.js +7 -6
- package/dist/Chat/ChatToolCalls.js +4 -4
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +10 -6
- package/dist/CodeBlock/CodeBlock.d.ts +25 -2
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +58 -19
- package/dist/CodeBlock/grammar.d.ts +134 -0
- package/dist/CodeBlock/grammar.d.ts.map +1 -0
- package/dist/CodeBlock/grammar.js +219 -0
- package/dist/CodeBlock/index.d.ts +2 -0
- package/dist/CodeBlock/index.d.ts.map +1 -1
- package/dist/CodeBlock/index.js +1 -0
- package/dist/CodeBlock/languages/dockerfile.d.ts +3 -0
- package/dist/CodeBlock/languages/dockerfile.d.ts.map +1 -0
- package/dist/CodeBlock/languages/dockerfile.js +45 -0
- package/dist/CodeBlock/languages/graphql.d.ts +3 -0
- package/dist/CodeBlock/languages/graphql.d.ts.map +1 -0
- package/dist/CodeBlock/languages/graphql.js +27 -0
- package/dist/CodeBlock/languages/java.d.ts +3 -0
- package/dist/CodeBlock/languages/java.d.ts.map +1 -0
- package/dist/CodeBlock/languages/java.js +24 -0
- package/dist/CodeBlock/languages/lua.d.ts +3 -0
- package/dist/CodeBlock/languages/lua.d.ts.map +1 -0
- package/dist/CodeBlock/languages/lua.js +21 -0
- package/dist/CodeBlock/languages/objective-c.d.ts +3 -0
- package/dist/CodeBlock/languages/objective-c.d.ts.map +1 -0
- package/dist/CodeBlock/languages/objective-c.js +27 -0
- package/dist/CodeBlock/languages/powershell.d.ts +3 -0
- package/dist/CodeBlock/languages/powershell.d.ts.map +1 -0
- package/dist/CodeBlock/languages/powershell.js +30 -0
- package/dist/CodeBlock/languages/ruby.d.ts +3 -0
- package/dist/CodeBlock/languages/ruby.d.ts.map +1 -0
- package/dist/CodeBlock/languages/ruby.js +24 -0
- package/dist/CodeBlock/languages/thrift.d.ts +3 -0
- package/dist/CodeBlock/languages/thrift.d.ts.map +1 -0
- package/dist/CodeBlock/languages/thrift.js +18 -0
- package/dist/CodeBlock/languages/toml.d.ts +3 -0
- package/dist/CodeBlock/languages/toml.d.ts.map +1 -0
- package/dist/CodeBlock/languages/toml.js +53 -0
- package/dist/CodeBlock/tokenizer.d.ts +8 -4
- package/dist/CodeBlock/tokenizer.d.ts.map +1 -1
- package/dist/CodeBlock/tokenizer.js +158 -8
- package/dist/Collapsible/Collapsible.d.ts +8 -1
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +84 -2
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +15 -1
- package/dist/CommandPalette/CommandPaletteEmpty.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteEmpty.js +1 -0
- package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteInput.js +14 -2
- package/dist/CommandPalette/busyStartSettle.d.ts +4 -0
- package/dist/CommandPalette/busyStartSettle.d.ts.map +1 -0
- package/dist/CommandPalette/busyStartSettle.js +23 -0
- package/dist/ComplexSelector/ComplexSelector.d.ts +20 -2
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +42 -7
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +48 -13
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +12 -5
- package/dist/DateInput/NativeDateField.d.ts.map +1 -1
- package/dist/DateInput/NativeDateField.js +2 -1
- package/dist/DateInput/TouchDateField.d.ts.map +1 -1
- package/dist/DateInput/TouchDateField.js +2 -1
- package/dist/DateInput/Wheel.d.ts.map +1 -1
- package/dist/DateInput/Wheel.js +1 -1
- package/dist/Dialog/Dialog.d.ts +4 -0
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +20 -8
- package/dist/Drawer/Drawer.d.ts.map +1 -1
- package/dist/Drawer/Drawer.js +18 -13
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +34 -30
- package/dist/DropdownMenu/DropdownMenuGroup.d.ts +7 -4
- package/dist/DropdownMenu/DropdownMenuGroup.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuGroup.js +10 -4
- package/dist/DropdownMenu/DropdownMenuItem.js +3 -3
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +10 -5
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.js +13 -5
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts +6 -6
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +0 -3
- package/dist/DropdownMenu/MenuBottomSheet.d.ts +11 -4
- package/dist/DropdownMenu/MenuBottomSheet.d.ts.map +1 -1
- package/dist/DropdownMenu/MenuBottomSheet.js +35 -9
- package/dist/DropdownMenu/MenuBottomSheetActionList.js +3 -3
- package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts +2 -0
- package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts.map +1 -1
- package/dist/DropdownMenu/lazyMenuBottomSheet.js +25 -3
- package/dist/DropdownMenu/menuBottomSheet.stylex.d.ts +23 -0
- package/dist/DropdownMenu/menuBottomSheet.stylex.d.ts.map +1 -0
- package/dist/DropdownMenu/menuBottomSheet.stylex.js +29 -0
- package/dist/DropdownMenu/menuItemHover.d.ts +3 -0
- package/dist/DropdownMenu/menuItemHover.d.ts.map +1 -1
- package/dist/DropdownMenu/menuItemHover.js +14 -1
- package/dist/DropdownMenu/menuTouchAction.stylex.d.ts +25 -0
- package/dist/DropdownMenu/menuTouchAction.stylex.d.ts.map +1 -0
- package/dist/DropdownMenu/menuTouchAction.stylex.js +29 -0
- package/dist/DropdownMenu/useMenuDrillIn.d.ts.map +1 -1
- package/dist/DropdownMenu/useMenuDrillIn.js +7 -5
- package/dist/EmptyState/EmptyState.d.ts +4 -2
- package/dist/EmptyState/EmptyState.d.ts.map +1 -1
- package/dist/EmptyState/EmptyState.js +6 -4
- package/dist/Field/Field.js +1 -1
- package/dist/Field/FieldLabel.js +1 -1
- package/dist/Field/PanelSearchInput.d.ts +9 -1
- package/dist/Field/PanelSearchInput.d.ts.map +1 -1
- package/dist/Field/PanelSearchInput.js +31 -22
- package/dist/Field/inputDisabledFocus.d.ts +14 -0
- package/dist/Field/inputDisabledFocus.d.ts.map +1 -0
- package/dist/Field/inputDisabledFocus.js +19 -0
- package/dist/Field/inputStyles.stylex.d.ts +9 -9
- package/dist/Field/inputStyles.stylex.js +9 -9
- package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
- package/dist/FieldStatus/FieldStatus.js +7 -3
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +22 -12
- package/dist/Icon/Icon.d.ts +37 -5
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/Icon.js +65 -11
- package/dist/Icon/IconSize.stylex.d.ts +16 -11
- package/dist/Icon/IconSize.stylex.d.ts.map +1 -1
- package/dist/Icon/IconSize.stylex.js +27 -11
- package/dist/Icon/globalIconRegistry.d.ts +71 -4
- package/dist/Icon/globalIconRegistry.d.ts.map +1 -1
- package/dist/Icon/globalIconRegistry.js +163 -23
- package/dist/Icon/index.d.ts +26 -2
- package/dist/Icon/index.d.ts.map +1 -1
- package/dist/Icon/index.js +24 -1
- package/dist/Icon/useIcon.d.ts +5 -1
- package/dist/Icon/useIcon.d.ts.map +1 -1
- package/dist/Icon/useIcon.js +5 -1
- package/dist/InputGroup/InputGroup.d.ts +1 -1
- package/dist/InputGroup/InputGroup.d.ts.map +1 -1
- package/dist/InputGroup/InputGroup.js +46 -36
- package/dist/InputGroup/InputGroupInternalContext.d.ts +4 -0
- package/dist/InputGroup/InputGroupInternalContext.d.ts.map +1 -0
- package/dist/InputGroup/InputGroupInternalContext.js +15 -0
- package/dist/InputGroup/InputGroupText.d.ts.map +1 -1
- package/dist/InputGroup/InputGroupText.js +2 -0
- package/dist/InputGroup/groupStyles.d.ts +9 -0
- package/dist/InputGroup/groupStyles.d.ts.map +1 -1
- package/dist/InputGroup/groupStyles.js +28 -14
- package/dist/Item/Item.d.ts +5 -1
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +23 -7
- package/dist/Item/ItemMarkerColumns.a11y.chromium.spec.d.ts +2 -0
- package/dist/Item/ItemMarkerColumns.a11y.chromium.spec.d.ts.map +1 -0
- package/dist/Item/ItemMarkerColumns.a11y.chromium.spec.js +132 -0
- package/dist/Item/ItemMarkerColumnsContext.d.ts +14 -0
- package/dist/Item/ItemMarkerColumnsContext.d.ts.map +1 -0
- package/dist/Item/ItemMarkerColumnsContext.js +18 -0
- package/dist/Item/ItemSwipeLayer.d.ts.map +1 -1
- package/dist/Item/ItemSwipeLayer.js +3 -0
- package/dist/Item/useSwipeAction.d.ts.map +1 -1
- package/dist/Item/useSwipeAction.js +60 -5
- package/dist/Kbd/Kbd.d.ts +2 -2
- package/dist/Kbd/Kbd.d.ts.map +1 -1
- package/dist/Kbd/Kbd.js +18 -11
- package/dist/Layer/layerAnimations.stylex.d.ts +9 -5
- package/dist/Layer/layerAnimations.stylex.d.ts.map +1 -1
- package/dist/Layer/layerAnimations.stylex.js +23 -10
- package/dist/Layer/layerSlideRules.d.ts +62 -2
- package/dist/Layer/layerSlideRules.d.ts.map +1 -1
- package/dist/Layer/layerSlideRules.js +124 -3
- package/dist/Layer/layerStack.d.ts +12 -9
- package/dist/Layer/layerStack.d.ts.map +1 -1
- package/dist/Layer/layerStack.js +116 -53
- package/dist/Layer/modalOutlet.d.ts +44 -6
- package/dist/Layer/modalOutlet.d.ts.map +1 -1
- package/dist/Layer/modalOutlet.js +150 -14
- package/dist/Layer/preserveAnimations.d.ts +11 -0
- package/dist/Layer/preserveAnimations.d.ts.map +1 -0
- package/dist/Layer/preserveAnimations.js +245 -0
- package/dist/Layer/useLayer.d.ts +19 -2
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +531 -44
- package/dist/Layer/useLayerDismissal.d.ts +10 -7
- package/dist/Layer/useLayerDismissal.d.ts.map +1 -1
- package/dist/Layer/useLayerDismissal.js +8 -8
- package/dist/Layer/useTouchTrigger.d.ts +14 -1
- package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
- package/dist/Layer/useTouchTrigger.js +72 -17
- package/dist/Layout/Layout.d.ts.map +1 -1
- package/dist/Layout/Layout.js +4 -0
- package/dist/Layout/LayoutContent.d.ts.map +1 -1
- package/dist/Layout/LayoutContent.js +2 -2
- package/dist/Layout/LayoutFooter.d.ts.map +1 -1
- package/dist/Layout/LayoutFooter.js +2 -1
- package/dist/Layout/LayoutHeader.d.ts.map +1 -1
- package/dist/Layout/LayoutHeader.js +2 -1
- package/dist/Layout/layoutEdges.stylex.d.ts +20 -0
- package/dist/Layout/layoutEdges.stylex.d.ts.map +1 -0
- package/dist/Layout/layoutEdges.stylex.js +28 -0
- package/dist/Lightbox/Lightbox.d.ts +5 -2
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +111 -89
- package/dist/Lightbox/LightboxKeyboard.a11y.browser.spec.d.ts +2 -0
- package/dist/Lightbox/LightboxKeyboard.a11y.browser.spec.d.ts.map +1 -0
- package/dist/Lightbox/LightboxKeyboard.a11y.browser.spec.js +78 -0
- package/dist/Lightbox/LightboxViewport.a11y.browser.spec.d.ts +2 -0
- package/dist/Lightbox/LightboxViewport.a11y.browser.spec.d.ts.map +1 -0
- package/dist/Lightbox/LightboxViewport.a11y.browser.spec.js +65 -0
- package/dist/List/List.d.ts +2 -1
- package/dist/List/List.d.ts.map +1 -1
- package/dist/List/List.js +9 -2
- package/dist/List/ListContext.d.ts +16 -4
- package/dist/List/ListContext.d.ts.map +1 -1
- package/dist/List/ListContext.js +10 -5
- package/dist/List/ListItem.d.ts +7 -1
- package/dist/List/ListItem.d.ts.map +1 -1
- package/dist/List/ListItem.js +52 -8
- package/dist/List/ListMarkers.a11y.chromium.spec.d.ts +2 -0
- package/dist/List/ListMarkers.a11y.chromium.spec.d.ts.map +1 -0
- package/dist/List/ListMarkers.a11y.chromium.spec.js +677 -0
- package/dist/Markdown/Markdown.d.ts +11 -1
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.fr23.bench.js +3 -1
- package/dist/Markdown/Markdown.fr23.sampling.d.ts +16 -0
- package/dist/Markdown/Markdown.fr23.sampling.d.ts.map +1 -1
- package/dist/Markdown/Markdown.fr23.sampling.js +13 -4
- package/dist/Markdown/Markdown.js +41 -14
- package/dist/Markdown/MarkdownTable.a11y.chromium.spec.js +1 -0
- package/dist/MobileNav/MobileNav.d.ts +2 -1
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +46 -37
- package/dist/MobileNav/MobileNavPinchZoom.a11y.chromium.spec.js +1 -0
- package/dist/MobileNav/MobileNavToggle.d.ts +7 -3
- package/dist/MobileNav/MobileNavToggle.d.ts.map +1 -1
- package/dist/MobileNav/MobileNavToggle.js +11 -3
- package/dist/MultiSelector/CreateRow.a11y.chromium.spec.js +53 -6
- package/dist/MultiSelector/MultiSelector.d.ts +1 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.disabledFocus.a11y.chromium.spec.js +1 -0
- package/dist/MultiSelector/MultiSelector.js +21 -5
- package/dist/MultiSelector/OptionActions.a11y.chromium.spec.js +1 -0
- package/dist/NavMenu/NavHeadingMenu.d.ts +1 -1
- package/dist/NavMenu/NavHeadingMenu.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenu.js +29 -5
- package/dist/NavMenu/NavHeadingMenuItem.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenuItem.js +51 -7
- package/dist/NavMenu/NavMenuContext.d.ts +9 -0
- package/dist/NavMenu/NavMenuContext.d.ts.map +1 -1
- package/dist/NavMenu/NavMenuContext.js +9 -0
- package/dist/NumberInput/NumberInput.d.ts +4 -4
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +61 -24
- package/dist/Overlay/Overlay.d.ts +3 -3
- package/dist/Overlay/Overlay.d.ts.map +1 -1
- package/dist/Overlay/Overlay.js +12 -5
- package/dist/Popover/Popover.d.ts +41 -2
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +276 -44
- package/dist/Popover/index.d.ts +1 -1
- package/dist/Popover/index.d.ts.map +1 -1
- package/dist/Popover/lazyPopoverBottomSheet.d.ts +23 -0
- package/dist/Popover/lazyPopoverBottomSheet.d.ts.map +1 -0
- package/dist/Popover/lazyPopoverBottomSheet.js +40 -0
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +11 -5
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +7 -5
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +8 -0
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +10 -2
- package/dist/ScrollableArea/ScrollableArea.d.ts.map +1 -1
- package/dist/ScrollableArea/ScrollableArea.js +1 -1
- package/dist/SegmentedControl/SegmentedControl.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +6 -2
- package/dist/SelectableCard/SelectableCard.d.ts +5 -5
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +15 -11
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +27 -8
- package/dist/Selector/hooks.d.ts +52 -6
- package/dist/Selector/hooks.d.ts.map +1 -1
- package/dist/Selector/hooks.js +145 -2
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +58 -2
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +79 -3
- package/dist/SideNav/SideNavItem.d.ts +5 -1
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +36 -13
- package/dist/SideNav/railMotion.d.ts +54 -0
- package/dist/SideNav/railMotion.d.ts.map +1 -0
- package/dist/SideNav/railMotion.js +253 -0
- package/dist/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/Skeleton/Skeleton.js +12 -3
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +52 -15
- package/dist/StatusDot/StatusDot.d.ts.map +1 -1
- package/dist/StatusDot/StatusDot.js +12 -0
- package/dist/Stepper/Step.d.ts.map +1 -1
- package/dist/Stepper/Step.js +10 -6
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +5 -5
- package/dist/Switch/switch.markers.stylex.d.ts +7 -2
- package/dist/Switch/switch.markers.stylex.d.ts.map +1 -1
- package/dist/Switch/switch.markers.stylex.js +8 -3
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +5 -1
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +25 -3
- package/dist/Table/TableCell.d.ts.map +1 -1
- package/dist/Table/TableCell.js +5 -1
- package/dist/Table/TableHeaderCell.d.ts.map +1 -1
- package/dist/Table/TableHeaderCell.js +1 -0
- package/dist/Table/TableRow.d.ts.map +1 -1
- package/dist/Table/TableRow.js +3 -0
- package/dist/Table/glidingDivider.d.ts +96 -0
- package/dist/Table/glidingDivider.d.ts.map +1 -0
- package/dist/Table/glidingDivider.js +275 -0
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +11 -2
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +8 -0
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +374 -13
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +244 -6
- package/dist/Table/rowDivider.d.ts +34 -0
- package/dist/Table/rowDivider.d.ts.map +1 -0
- package/dist/Table/rowDivider.js +118 -0
- package/dist/TextArea/TextArea.d.ts +6 -4
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +15 -12
- package/dist/TextInput/TextInput.d.ts +7 -5
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +43 -22
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +45 -11
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +12 -4
- package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
- package/dist/TimeInput/TouchTimeField.js +2 -1
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +62 -6
- package/dist/Tokenizer/Tokenizer.d.ts +71 -4
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +430 -45
- package/dist/Tokenizer/TokenizerBottomSheet.d.ts +98 -0
- package/dist/Tokenizer/TokenizerBottomSheet.d.ts.map +1 -0
- package/dist/Tokenizer/TokenizerBottomSheet.js +721 -0
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +9 -3
- package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
- package/dist/TopNav/TopNavHeading.js +26 -0
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +4 -4
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +32 -4
- package/dist/TreeList/TreeList.d.ts +8 -23
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +175 -3
- package/dist/TreeList/TreeListBranches.d.ts.map +1 -1
- package/dist/TreeList/TreeListBranches.js +7 -5
- package/dist/TreeList/TreeListItem.d.ts +7 -1
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +5 -3
- package/dist/Typeahead/BaseTypeahead.d.ts +1 -1
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.emptyState.a11y.chromium.spec.d.ts +2 -0
- package/dist/Typeahead/BaseTypeahead.emptyState.a11y.chromium.spec.d.ts.map +1 -0
- package/dist/Typeahead/BaseTypeahead.emptyState.a11y.chromium.spec.js +118 -0
- package/dist/Typeahead/BaseTypeahead.js +27 -11
- package/dist/Typeahead/Typeahead.d.ts +1 -1
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +31 -14
- package/dist/astryx.css +164 -41
- package/dist/gestures/GestureArena.d.ts +175 -0
- package/dist/gestures/GestureArena.d.ts.map +1 -0
- package/dist/gestures/GestureArena.js +816 -0
- package/dist/gestures/GestureRecognizer.d.ts +239 -0
- package/dist/gestures/GestureRecognizer.d.ts.map +1 -0
- package/dist/gestures/GestureRecognizer.js +487 -0
- package/dist/gestures/LongPressGestureRecognizer.d.ts +32 -0
- package/dist/gestures/LongPressGestureRecognizer.d.ts.map +1 -0
- package/dist/gestures/LongPressGestureRecognizer.js +135 -0
- package/dist/gestures/PanGestureRecognizer.d.ts +117 -0
- package/dist/gestures/PanGestureRecognizer.d.ts.map +1 -0
- package/dist/gestures/PanGestureRecognizer.js +349 -0
- package/dist/gestures/TapGestureRecognizer.d.ts +39 -0
- package/dist/gestures/TapGestureRecognizer.d.ts.map +1 -0
- package/dist/gestures/TapGestureRecognizer.js +151 -0
- package/dist/gestures/VelocityTracker.d.ts +51 -0
- package/dist/gestures/VelocityTracker.d.ts.map +1 -0
- package/dist/gestures/VelocityTracker.js +186 -0
- package/dist/gestures/geometry.d.ts +17 -0
- package/dist/gestures/geometry.d.ts.map +1 -0
- package/dist/gestures/geometry.js +55 -0
- package/dist/gestures/types.d.ts +139 -0
- package/dist/gestures/types.d.ts.map +1 -0
- package/dist/gestures/types.js +67 -0
- package/dist/hooks/AnnounceRenderedText.d.ts +17 -0
- package/dist/hooks/AnnounceRenderedText.d.ts.map +1 -0
- package/dist/hooks/AnnounceRenderedText.js +32 -0
- package/dist/hooks/ModalAnnounceProvider.d.ts +41 -0
- package/dist/hooks/ModalAnnounceProvider.d.ts.map +1 -0
- package/dist/hooks/ModalAnnounceProvider.js +133 -0
- package/dist/hooks/actionGroupTracker.d.ts +98 -0
- package/dist/hooks/actionGroupTracker.d.ts.map +1 -0
- package/dist/hooks/actionGroupTracker.js +338 -0
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/menuPressOnItems.d.ts +19 -0
- package/dist/hooks/menuPressOnItems.d.ts.map +1 -0
- package/dist/hooks/menuPressOnItems.js +32 -0
- package/dist/hooks/modalAnnounce.d.ts +18 -0
- package/dist/hooks/modalAnnounce.d.ts.map +1 -0
- package/dist/hooks/modalAnnounce.js +382 -0
- package/dist/hooks/scrollGeometry.d.ts +28 -0
- package/dist/hooks/scrollGeometry.d.ts.map +1 -1
- package/dist/hooks/scrollGeometry.js +36 -2
- package/dist/hooks/useAdaptivePresentation.d.ts +9 -1
- package/dist/hooks/useAdaptivePresentation.d.ts.map +1 -1
- package/dist/hooks/useAdaptivePresentation.js +33 -8
- package/dist/hooks/useAnimatedLayout.d.ts +42 -0
- package/dist/hooks/useAnimatedLayout.d.ts.map +1 -0
- package/dist/hooks/useAnimatedLayout.js +46 -0
- package/dist/hooks/useAnnounce.d.ts +132 -1
- package/dist/hooks/useAnnounce.d.ts.map +1 -1
- package/dist/hooks/useAnnounce.js +356 -27
- package/dist/hooks/useAnnounceRenderedText.d.ts +19 -2
- package/dist/hooks/useAnnounceRenderedText.d.ts.map +1 -1
- package/dist/hooks/useAnnounceRenderedText.js +52 -11
- package/dist/hooks/useBusyAnnouncement.d.ts +9 -5
- package/dist/hooks/useBusyAnnouncement.d.ts.map +1 -1
- package/dist/hooks/useBusyAnnouncement.js +58 -46
- package/dist/hooks/useFocusTrap.d.ts +1 -1
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +57 -26
- package/dist/hooks/useMenuHover.d.ts.map +1 -1
- package/dist/hooks/useMenuHover.js +6 -2
- package/dist/hooks/useMenuPress.d.ts +4 -2
- package/dist/hooks/useMenuPress.d.ts.map +1 -1
- package/dist/hooks/useMenuPress.js +58 -33
- package/dist/hooks/usePressFeedback.d.ts +5 -2
- package/dist/hooks/usePressFeedback.d.ts.map +1 -1
- package/dist/hooks/usePressFeedback.js +5 -2
- package/dist/hooks/useScrollableArea.d.ts +5 -0
- package/dist/hooks/useScrollableArea.d.ts.map +1 -1
- package/dist/hooks/useScrollableArea.js +104 -11
- package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/en.generated.js +33 -0
- package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pseudo.generated.js +33 -0
- package/dist/internal/tokenizer-presentation.d.ts +21 -0
- package/dist/internal/tokenizer-presentation.d.ts.map +1 -0
- package/dist/internal/tokenizer-presentation.js +21 -0
- package/dist/internal/touch.d.ts +26 -0
- package/dist/internal/touch.d.ts.map +1 -0
- package/dist/internal/touch.js +28 -0
- package/dist/motion/LayoutChangeSnapshot.d.ts +33 -0
- package/dist/motion/LayoutChangeSnapshot.d.ts.map +1 -0
- package/dist/motion/LayoutChangeSnapshot.js +37 -0
- package/dist/motion/animatedLayout.d.ts +190 -0
- package/dist/motion/animatedLayout.d.ts.map +1 -0
- package/dist/motion/animatedLayout.js +1502 -0
- package/dist/motion/animator.d.ts +240 -0
- package/dist/motion/animator.d.ts.map +1 -0
- package/dist/motion/animator.js +2203 -0
- package/dist/motion/bezier.d.ts +18 -0
- package/dist/motion/bezier.d.ts.map +1 -0
- package/dist/motion/bezier.js +60 -0
- package/dist/motion/coast.d.ts +61 -0
- package/dist/motion/coast.d.ts.map +1 -0
- package/dist/motion/coast.js +107 -0
- package/dist/motion/decay.d.ts +41 -0
- package/dist/motion/decay.d.ts.map +1 -0
- package/dist/motion/decay.js +90 -0
- package/dist/motion/projection.d.ts +36 -0
- package/dist/motion/projection.d.ts.map +1 -0
- package/dist/motion/projection.js +92 -0
- package/dist/motion/reducedMotion.d.ts +25 -0
- package/dist/motion/reducedMotion.d.ts.map +1 -0
- package/dist/motion/reducedMotion.js +85 -0
- package/dist/motion/reducedMotion.stylex.d.ts +19 -0
- package/dist/motion/reducedMotion.stylex.d.ts.map +1 -0
- package/dist/motion/reducedMotion.stylex.js +37 -0
- package/dist/motion/reducedMotionPlan.d.ts +89 -0
- package/dist/motion/reducedMotionPlan.d.ts.map +1 -0
- package/dist/motion/reducedMotionPlan.js +194 -0
- package/dist/motion/resolveSnapPoint.d.ts +52 -0
- package/dist/motion/resolveSnapPoint.d.ts.map +1 -0
- package/dist/motion/resolveSnapPoint.js +135 -0
- package/dist/motion/roleValue.d.ts +33 -0
- package/dist/motion/roleValue.d.ts.map +1 -0
- package/dist/motion/roleValue.js +84 -0
- package/dist/motion/roles.d.ts +79 -0
- package/dist/motion/roles.d.ts.map +1 -0
- package/dist/motion/roles.js +199 -0
- package/dist/motion/rubberBand.d.ts +20 -0
- package/dist/motion/rubberBand.d.ts.map +1 -0
- package/dist/motion/rubberBand.js +91 -0
- package/dist/motion/selectPage.d.ts +26 -0
- package/dist/motion/selectPage.d.ts.map +1 -0
- package/dist/motion/selectPage.js +55 -0
- package/dist/motion/spring.d.ts +193 -0
- package/dist/motion/spring.d.ts.map +1 -0
- package/dist/motion/spring.js +442 -0
- package/dist/motion/transientCopy.d.ts +33 -0
- package/dist/motion/transientCopy.d.ts.map +1 -0
- package/dist/motion/transientCopy.js +314 -0
- package/dist/motion/uikit/gestures.d.ts +642 -0
- package/dist/motion/uikit/gestures.d.ts.map +1 -0
- package/dist/motion/uikit/gestures.js +428 -0
- package/dist/motion/uikit/index.d.ts +24 -0
- package/dist/motion/uikit/index.d.ts.map +1 -0
- package/dist/motion/uikit/index.js +26 -0
- package/dist/motion/uikit/navigation.d.ts +54 -0
- package/dist/motion/uikit/navigation.d.ts.map +1 -0
- package/dist/motion/uikit/navigation.js +83 -0
- package/dist/motion/uikit/scroll.d.ts +116 -0
- package/dist/motion/uikit/scroll.d.ts.map +1 -0
- package/dist/motion/uikit/scroll.js +146 -0
- package/dist/motion/uikit/springs.d.ts +545 -0
- package/dist/motion/uikit/springs.d.ts.map +1 -0
- package/dist/motion/uikit/springs.js +548 -0
- package/dist/motion/uikit/timing.d.ts +202 -0
- package/dist/motion/uikit/timing.d.ts.map +1 -0
- package/dist/motion/uikit/timing.js +201 -0
- package/dist/reset.a11y.chromium.spec.js +1 -0
- package/dist/reset.until-found.a11y.browser.spec.js +1 -0
- package/dist/theme/declarationBoundary.d.ts +13 -0
- package/dist/theme/declarationBoundary.d.ts.map +1 -1
- package/dist/theme/declarationBoundary.js +264 -1
- package/dist/theme/defineTheme.d.ts +111 -11
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/defineTheme.js +97 -7
- package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +9 -0
- package/dist/theme/generateThemeRules.d.ts +6 -2
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +468 -24
- package/dist/theme/index.d.ts +2 -2
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +1 -1
- package/dist/theme/statusColor.d.ts +48 -0
- package/dist/theme/statusColor.d.ts.map +1 -0
- package/dist/theme/statusColor.js +203 -0
- package/dist/theme/statusRoleDerivation.d.ts +11 -0
- package/dist/theme/statusRoleDerivation.d.ts.map +1 -0
- package/dist/theme/statusRoleDerivation.js +236 -0
- package/dist/theme/syntax/SyntaxTheme.d.ts +1 -1
- package/dist/theme/syntax/SyntaxTheme.js +1 -1
- package/dist/theme/syntax/defineSyntaxTheme.js +1 -1
- package/dist/theme/syntax/presets.d.ts +1 -1
- package/dist/theme/syntax/presets.js +1 -1
- package/dist/theme/syntax/tokens.d.ts +1 -1
- package/dist/theme/syntax/tokens.js +1 -1
- package/dist/theme/themeAdaptations.d.ts +25 -1
- package/dist/theme/themeAdaptations.d.ts.map +1 -1
- package/dist/theme/themeAdaptations.js +30 -1
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +16 -1
- package/dist/theme/tokens.stylex.d.ts +42 -2
- package/dist/theme/tokens.stylex.d.ts.map +1 -1
- package/dist/theme/tokens.stylex.js +54 -3
- package/dist/theme/useTheme.d.ts +4 -2
- package/dist/theme/useTheme.d.ts.map +1 -1
- package/dist/theme/useTheme.js +10 -4
- package/dist/utils/edgeAutoscroll.d.ts +53 -0
- package/dist/utils/edgeAutoscroll.d.ts.map +1 -0
- package/dist/utils/edgeAutoscroll.js +81 -0
- package/dist/utils/hitArea.d.ts +72 -0
- package/dist/utils/hitArea.d.ts.map +1 -0
- package/dist/utils/hitArea.js +681 -0
- package/dist/utils/interactionOverlay.stylex.d.ts +4 -1
- package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
- package/dist/utils/interactionOverlay.stylex.js +4 -1
- package/dist/utils/pressFeedback.d.ts +5 -1
- package/dist/utils/pressFeedback.d.ts.map +1 -1
- package/dist/utils/pressFeedback.js +285 -54
- package/dist/utils/pressGesture.d.ts +13 -1
- package/dist/utils/pressGesture.d.ts.map +1 -1
- package/dist/utils/pressGesture.js +40 -1
- package/dist/utils/touchPresentation.d.ts +48 -0
- package/dist/utils/touchPresentation.d.ts.map +1 -0
- package/dist/utils/touchPresentation.js +133 -0
- package/locales/af-ZA.json +1 -1
- package/locales/ar-SA.json +1 -1
- package/locales/ca-ES.json +1 -1
- package/locales/cs-CZ.json +1 -1
- package/locales/da-DK.json +1 -1
- package/locales/de-DE.json +1 -1
- package/locales/el-GR.json +1 -1
- package/locales/en.json +132 -0
- package/locales/es-ES.json +1 -1
- package/locales/fi-FI.json +1 -1
- package/locales/fr-FR.json +1 -1
- package/locales/he-IL.json +1 -1
- package/locales/hu-HU.json +1 -1
- package/locales/it-IT.json +1 -1
- package/locales/ja-JP.json +1 -1
- package/locales/ko-KR.json +1 -1
- package/locales/nl-NL.json +1 -1
- package/locales/no-NO.json +1 -1
- package/locales/pl-PL.json +1 -1
- package/locales/pseudo.json +99 -0
- package/locales/pt-BR.json +1 -1
- package/locales/pt-PT.json +1 -1
- package/locales/ro-RO.json +1 -1
- package/locales/ru-RU.json +1 -1
- package/locales/sr-SP.json +1 -1
- package/locales/sv-SE.json +1 -1
- package/locales/tr-TR.json +1 -1
- package/locales/uk-UA.json +1 -1
- package/locales/vi-VN.json +1 -1
- package/locales/zh-CN.json +1 -1
- package/locales/zh-TW.json +1 -1
- package/package.json +63 -8
- package/src/AlertDialog/AlertDialog.spec.md +85 -31
- package/src/AlertDialog/AlertDialog.tsx +1 -1
- package/src/AlertDialog/__tests__/AlertDialog.a11y.chromium.spec.ts +1 -0
- package/src/AppShell/AppShell.spec.md +334 -0
- package/src/AppShell/AppShell.tsx +170 -2
- package/src/AspectRatio/AspectRatio.spec.md +179 -0
- package/src/AspectRatio/__tests__/AspectRatioFitLayers.a11y.browser.spec.ts +1 -0
- package/src/Avatar/Avatar.spec.md +253 -0
- package/src/Avatar/AvatarStatusDot.spec.md +93 -79
- package/src/Avatar/AvatarStatusDot.test.tsx +22 -0
- package/src/Avatar/AvatarStatusDot.tsx +2 -2
- package/src/AvatarGroup/AvatarGroup.spec.md +205 -0
- package/src/AvatarGroup/AvatarGroupOverflow.spec.md +123 -120
- package/src/Badge/Badge.spec.md +207 -0
- package/src/Badge/Badge.test.tsx +13 -0
- package/src/Badge/Badge.tsx +38 -2
- package/src/Banner/Banner.spec.md +41 -28
- package/src/Banner/Banner.test.tsx +118 -16
- package/src/Banner/Banner.tsx +94 -7
- package/src/Blockquote/Blockquote.spec.md +171 -0
- package/src/BottomSheet/BottomSheet.doc.mjs +106 -24
- package/src/BottomSheet/BottomSheet.spec.md +271 -40
- package/src/BottomSheet/BottomSheet.test.tsx +491 -5
- package/src/BottomSheet/BottomSheet.tsx +544 -145
- package/src/BottomSheet/BottomSheetHostContext.ts +44 -0
- package/src/BottomSheet/BottomSheetPanel.test.tsx +73 -19
- package/src/BottomSheet/BottomSheetPanel.tsx +178 -63
- package/src/BottomSheet/BottomSheetReplace.test.tsx +1638 -0
- package/src/BottomSheet/BottomSheetStacking.announce.test.tsx +246 -0
- package/src/BottomSheet/BottomSheetStacking.test.tsx +3184 -0
- package/src/BottomSheet/BottomSheetSwitcher.doc.mjs +27 -31
- package/src/BottomSheet/BottomSheetSwitcher.spec.md +138 -43
- package/src/BottomSheet/BottomSheetSwitcher.tsx +275 -26
- package/src/BottomSheet/BottomSheetSwitcherContext.ts +6 -0
- package/src/BottomSheet/__tests__/BottomSheetDrag.a11y.chromium.spec.ts +1 -0
- package/src/BottomSheet/__tests__/BottomSheetFocusReturn.a11y.browser.spec.ts +1 -0
- package/src/BottomSheet/__tests__/BottomSheetKeyboard.a11y.browser.spec.ts +4 -1
- package/src/BottomSheet/__tests__/BottomSheetNativeModal.a11y.browser.spec.ts +1 -0
- package/src/BottomSheet/__tests__/BottomSheetPinchZoom.a11y.chromium.spec.ts +1 -0
- package/src/BottomSheet/__tests__/BottomSheetToastOutlet.a11y.chromium.spec.ts +83 -0
- package/src/BottomSheet/bottomSheetEscape.ts +21 -0
- package/src/BottomSheet/bottomSheetStack.ts +2054 -0
- package/src/BottomSheet/useSheetGestures.ts +68 -12
- package/src/Breadcrumbs/BreadcrumbItem.spec.md +104 -60
- package/src/Breadcrumbs/BreadcrumbItem.tsx +30 -1
- package/src/Breadcrumbs/Breadcrumbs.spec.md +165 -0
- package/src/Breadcrumbs/Breadcrumbs.test.tsx +90 -0
- package/src/Breadcrumbs/__tests__/Breadcrumbs.a11y.chromium.spec.ts +1 -0
- package/src/Button/Button.spec.md +322 -0
- package/src/Button/Button.test.tsx +8 -1
- package/src/Button/Button.tsx +36 -7
- package/src/Button/__tests__/Button.a11y.chromium.spec.ts +1 -0
- package/src/ButtonGroup/ButtonGroup.spec.md +220 -0
- package/src/Calendar/__tests__/Calendar.a11y.chromium.spec.ts +1 -0
- package/src/Card/Card.spec.md +205 -0
- package/src/Carousel/__tests__/Carousel.a11y.chromium.spec.ts +1 -0
- package/src/Center/Center.spec.md +104 -124
- package/src/Chat/ChatComposer.test.tsx +54 -0
- package/src/Chat/ChatComposer.tsx +41 -27
- package/src/Chat/ChatComposerInput.test.tsx +165 -21
- package/src/Chat/ChatComposerInput.tsx +73 -16
- package/src/Chat/ChatMessageMetadata.tsx +1 -1
- package/src/Chat/ChatPastedTextToken.test.tsx +71 -0
- package/src/Chat/ChatPastedTextToken.tsx +8 -7
- package/src/Chat/ChatToolCalls.tsx +5 -5
- package/src/Chat/__tests__/ChatLayoutScrollButton.a11y.chromium.spec.ts +22 -4
- package/src/Chat/__tests__/ChatLayoutScrollButtonSurface.a11y.chromium.spec.ts +1 -0
- package/src/Chat/__tests__/ChatMessageList.a11y.chromium.spec.ts +1 -0
- package/src/Chat/__tests__/ChatMessageMetadata.a11y.chromium.spec.ts +1 -0
- package/src/Chat/__tests__/ChatSendButton.a11y.chromium.spec.ts +1 -0
- package/src/Chat/__tests__/ChatSystemMessage.a11y.chromium.spec.ts +1 -0
- package/src/Chat/__tests__/ChatTokenizedText.a11y.chromium.spec.ts +1 -0
- package/src/Chat/__tests__/useChatStreamScroll.a11y.chromium.spec.ts +1 -0
- package/src/CheckboxInput/CheckboxInput.spec.md +97 -66
- package/src/CheckboxInput/__tests__/Checkbox.a11y.chromium.spec.ts +1 -0
- package/src/CheckboxList/CheckboxList.spec.md +92 -78
- package/src/CheckboxList/CheckboxListItem.spec.md +86 -60
- package/src/CheckboxList/__tests__/CheckboxList.a11y.chromium.spec.ts +1 -0
- package/src/ClickableCard/ClickableCard.doc.mjs +1 -2
- package/src/ClickableCard/ClickableCard.spec.md +124 -128
- package/src/ClickableCard/ClickableCard.test.tsx +14 -3
- package/src/ClickableCard/ClickableCard.tsx +44 -28
- package/src/Code/Code.spec.md +30 -32
- package/src/CodeBlock/CodeBlock.doc.mjs +21 -4
- package/src/CodeBlock/CodeBlock.spec.md +96 -61
- package/src/CodeBlock/CodeBlock.test.tsx +97 -1
- package/src/CodeBlock/CodeBlock.tsx +132 -22
- package/src/CodeBlock/CodeLanguage.test.tsx +173 -0
- package/src/CodeBlock/__tests__/CodeBlockCopyClearance.a11y.chromium.spec.ts +290 -0
- package/src/CodeBlock/__tests__/CodeBlockLanguages.a11y.chromium.spec.ts +64 -0
- package/src/CodeBlock/__tests__/CodeBlockOverflowStop.a11y.chromium.spec.ts +1 -0
- package/src/CodeBlock/__tests__/DiffRowPaint.a11y.chromium.spec.ts +1 -0
- package/src/CodeBlock/grammar.ts +291 -0
- package/src/CodeBlock/index.ts +7 -0
- package/src/CodeBlock/languages/dockerfile.ts +43 -0
- package/src/CodeBlock/languages/graphql.ts +30 -0
- package/src/CodeBlock/languages/java.ts +28 -0
- package/src/CodeBlock/languages/lua.ts +21 -0
- package/src/CodeBlock/languages/objective-c.ts +26 -0
- package/src/CodeBlock/languages/powershell.ts +31 -0
- package/src/CodeBlock/languages/ruby.ts +29 -0
- package/src/CodeBlock/languages/thrift.ts +32 -0
- package/src/CodeBlock/languages/toml.ts +36 -0
- package/src/CodeBlock/languages.test.ts +402 -0
- package/src/CodeBlock/tokenizer.ts +176 -16
- package/src/CodeBlock/tokenizerBudget.test.ts +112 -0
- package/src/Collapsible/Collapsible.doc.mjs +6 -0
- package/src/Collapsible/Collapsible.spec.md +26 -23
- package/src/Collapsible/Collapsible.tsx +121 -2
- package/src/Collapsible/__tests__/Collapsible.a11y.chromium.spec.ts +1 -0
- package/src/Collapsible/__tests__/CollapsibleGroup.a11y.chromium.spec.ts +1 -0
- package/src/Collapsible/__tests__/CollapsibleGroupAccordion.a11y.chromium.spec.ts +1 -0
- package/src/CommandPalette/CommandPalette.perf.test.ts +8 -4
- package/src/CommandPalette/CommandPalette.tsx +17 -1
- package/src/CommandPalette/CommandPaletteEmpty.doc.mjs +6 -3
- package/src/CommandPalette/CommandPaletteEmpty.spec.md +190 -0
- package/src/CommandPalette/CommandPaletteEmpty.tsx +4 -0
- package/src/CommandPalette/CommandPaletteInput.tsx +21 -2
- package/src/CommandPalette/__tests__/CommandPalette.a11y.chromium.spec.ts +1 -0
- package/src/CommandPalette/__tests__/CommandPaletteEmptyAudit.a11y.chromium.spec.ts +715 -0
- package/src/CommandPalette/__tests__/CommandPaletteFooter.a11y.chromium.spec.ts +3 -2
- package/src/CommandPalette/__tests__/CommandPaletteInputAudit.a11y.chromium.spec.ts +1 -0
- package/src/CommandPalette/__tests__/CommandPaletteItemAudit.a11y.chromium.spec.ts +1 -0
- package/src/CommandPalette/busyStartSettle.ts +26 -0
- package/src/ComplexSelector/ComplexSelector.doc.mjs +1 -1
- package/src/ComplexSelector/ComplexSelector.focusableDisabled.test.tsx +1 -1
- package/src/ComplexSelector/ComplexSelector.fr10.test.tsx +9 -9
- package/src/ComplexSelector/ComplexSelector.spec.md +161 -107
- package/src/ComplexSelector/ComplexSelector.test.tsx +236 -17
- package/src/ComplexSelector/ComplexSelector.tsx +69 -4
- package/src/ComplexSelector/__tests__/ComplexSelector.a11y.chromium.spec.ts +965 -0
- package/src/ContextMenu/ContextMenu.doc.mjs +1 -1
- package/src/ContextMenu/ContextMenu.spec.md +38 -30
- package/src/ContextMenu/ContextMenu.test.tsx +189 -11
- package/src/ContextMenu/ContextMenu.tsx +75 -17
- package/src/ContextMenu/__tests__/ContextMenuAudit.a11y.chromium.spec.ts +1 -0
- package/src/ContextMenu/__tests__/ContextMenuCursorAnchor.a11y.browser.spec.ts +1 -0
- package/src/ContextMenu/__tests__/ContextMenuLongPress.a11y.chromium.spec.ts +117 -0
- package/src/DateInput/DateInput.tsx +9 -4
- package/src/DateInput/DateInputTouch.test.tsx +10 -1
- package/src/DateInput/NativeDateField.tsx +2 -1
- package/src/DateInput/TouchDateField.tsx +2 -1
- package/src/DateInput/Wheel.tsx +4 -1
- package/src/DateInput/__tests__/DateInputAudit.a11y.chromium.spec.ts +1 -0
- package/src/DateInput/__tests__/WheelPinchZoom.a11y.chromium.spec.ts +171 -0
- package/src/Dialog/Dialog.doc.mjs +201 -47
- package/src/Dialog/Dialog.spec.md +20 -4
- package/src/Dialog/Dialog.tsx +37 -10
- package/src/Dialog/__tests__/Dialog.a11y.browser.spec.ts +1 -0
- package/src/Dialog/__tests__/Dialog.a11y.chromium.spec.ts +1 -0
- package/src/Dialog/__tests__/Dialog.reduced-motion.a11y.browser.spec.ts +252 -0
- package/src/Divider/Divider.spec.md +79 -70
- package/src/Drawer/Drawer.tsx +38 -35
- package/src/Drawer/__tests__/DrawerAudit.a11y.chromium.spec.ts +1 -0
- package/src/Drawer/__tests__/DrawerHeaderAudit.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/DropdownMenu.spec.md +14 -6
- package/src/DropdownMenu/DropdownMenu.ssr.test.tsx +44 -8
- package/src/DropdownMenu/DropdownMenu.test.tsx +107 -5
- package/src/DropdownMenu/DropdownMenu.tsx +51 -34
- package/src/DropdownMenu/DropdownMenuGroup.doc.mjs +2 -2
- package/src/DropdownMenu/DropdownMenuGroup.tsx +12 -6
- package/src/DropdownMenu/DropdownMenuItem.tsx +5 -5
- package/src/DropdownMenu/DropdownMenuRadioItem.doc.mjs +5 -2
- package/src/DropdownMenu/DropdownMenuRadioItem.spec.md +226 -0
- package/src/DropdownMenu/DropdownMenuRadioItem.tsx +32 -16
- package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +158 -0
- package/src/DropdownMenu/DropdownMenuSheetFirstOpen.test.tsx +72 -0
- package/src/DropdownMenu/DropdownMenuSubMenu.doc.mjs +9 -0
- package/src/DropdownMenu/DropdownMenuSubMenu.spec.md +225 -0
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +105 -0
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +6 -6
- package/src/DropdownMenu/MenuBottomSheet.tsx +42 -7
- package/src/DropdownMenu/MenuBottomSheetActionList.tsx +3 -3
- package/src/DropdownMenu/__tests__/DropdownMenuDividerAudit.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/__tests__/DropdownMenuDrillIn.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/__tests__/DropdownMenuFocusReturn.a11y.browser.spec.ts +1 -0
- package/src/DropdownMenu/__tests__/DropdownMenuGroupAudit.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/__tests__/DropdownMenuItemAudit.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/__tests__/DropdownMenuRadioGroupAudit.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/__tests__/DropdownMenuRadioItemAudit.a11y.chromium.spec.ts +540 -0
- package/src/DropdownMenu/__tests__/DropdownMenuSubMenuAudit.a11y.chromium.spec.ts +671 -0
- package/src/DropdownMenu/__tests__/Menu.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/__tests__/MenuButton.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/__tests__/MenuHeaderFooter.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/__tests__/MenuHoverFocus.a11y.chromium.spec.ts +238 -0
- package/src/DropdownMenu/__tests__/MenuPinchZoom.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/__tests__/MenuPress.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/__tests__/SubMenuHeaderFooter.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/lazyMenuBottomSheet.ts +28 -2
- package/src/DropdownMenu/menuBottomSheet.stylex.ts +33 -0
- package/src/DropdownMenu/menuItemHover.ts +13 -1
- package/src/DropdownMenu/menuTouchAction.stylex.ts +28 -0
- package/src/DropdownMenu/modules/useMenuPress.spec.md +90 -62
- package/src/DropdownMenu/useMenuDrillIn.tsx +7 -5
- package/src/EmptyState/EmptyState.announce.test.tsx +227 -0
- package/src/EmptyState/EmptyState.doc.mjs +1 -1
- package/src/EmptyState/EmptyState.spec.md +22 -14
- package/src/EmptyState/EmptyState.test.tsx +8 -8
- package/src/EmptyState/EmptyState.tsx +7 -5
- package/src/Field/Field.spec.md +57 -48
- package/src/Field/Field.tsx +1 -1
- package/src/Field/FieldLabel.spec.md +70 -59
- package/src/Field/FieldLabel.tsx +1 -1
- package/src/Field/PanelSearchInput.tsx +23 -13
- package/src/Field/__tests__/FieldLabelAudit.a11y.chromium.spec.ts +1 -0
- package/src/Field/inputDisabledFocus.ts +28 -0
- package/src/Field/inputStyles.stylex.ts +15 -15
- package/src/FieldStatus/FieldStatus.test.tsx +12 -0
- package/src/FieldStatus/FieldStatus.tsx +12 -3
- package/src/FieldStatus/__tests__/StatusMessage.a11y.chromium.spec.ts +1 -0
- package/src/FileInput/FileInput.doc.mjs +1 -1
- package/src/FileInput/FileInput.test.tsx +102 -0
- package/src/FileInput/FileInput.tsx +18 -12
- package/src/FormLayout/FormLayout.spec.md +69 -51
- package/src/Grid/Grid.spec.md +72 -69
- package/src/Grid/GridSpan.spec.md +158 -0
- package/src/Heading/Heading.spec.md +198 -0
- package/src/HoverCard/HoverCard.spec.md +244 -0
- package/src/HoverCard/HoverCard.test.tsx +93 -3
- package/src/Icon/Icon.doc.mjs +67 -5
- package/src/Icon/Icon.test.tsx +548 -9
- package/src/Icon/Icon.tsx +79 -15
- package/src/Icon/IconSize.stylex.ts +27 -11
- package/src/Icon/globalIconRegistry.test.tsx +395 -3
- package/src/Icon/globalIconRegistry.tsx +184 -36
- package/src/Icon/index.ts +29 -1
- package/src/Icon/useIcon.ts +5 -1
- package/src/IconButton/IconButton.spec.md +197 -0
- package/src/IconButton/IconButton.test.tsx +5 -2
- package/src/InputGroup/InputGroup.spec.md +199 -0
- package/src/InputGroup/InputGroup.test.tsx +120 -0
- package/src/InputGroup/InputGroup.tsx +59 -52
- package/src/InputGroup/InputGroupInternalContext.ts +15 -0
- package/src/InputGroup/InputGroupText.spec.md +139 -0
- package/src/InputGroup/InputGroupText.tsx +2 -0
- package/src/InputGroup/groupStyles.ts +22 -11
- package/src/Item/Item.test.tsx +158 -1
- package/src/Item/Item.tsx +42 -7
- package/src/Item/ItemMarkerColumns.a11y.chromium.spec.ts +211 -0
- package/src/Item/ItemMarkerColumnsContext.tsx +20 -0
- package/src/Item/ItemSwipeLayer.tsx +9 -0
- package/src/Item/__tests__/ItemSwipeActions.a11y.chromium.spec.ts +1 -0
- package/src/Item/__tests__/ItemSwipePinchZoom.a11y.chromium.spec.ts +186 -0
- package/src/Item/useSwipeAction.ts +71 -5
- package/src/Kbd/Kbd.test.tsx +95 -0
- package/src/Kbd/Kbd.tsx +30 -23
- package/src/Layer/LayerProvider.spec.md +149 -0
- package/src/Layer/__tests__/LayerReducedMotion.a11y.chromium.spec.ts +176 -0
- package/src/Layer/__tests__/TouchTrigger.a11y.chromium.spec.ts +200 -0
- package/src/Layer/layerAnimations.stylex.ts +22 -2
- package/src/Layer/layerDismissalInvariants.test.tsx +9 -0
- package/src/Layer/layerSlideRules.ts +141 -8
- package/src/Layer/layerStack.ts +129 -62
- package/src/Layer/modalOutlet.ts +156 -15
- package/src/Layer/preserveAnimations.ts +304 -0
- package/src/Layer/useLayer.doc.mjs +1 -1
- package/src/Layer/useLayer.test.tsx +850 -0
- package/src/Layer/useLayer.tsx +644 -58
- package/src/Layer/useLayerDismissal.test.tsx +85 -2
- package/src/Layer/useLayerDismissal.ts +12 -9
- package/src/Layer/useTouchTrigger.ts +95 -41
- package/src/Layout/Layout.tsx +18 -0
- package/src/Layout/LayoutContent.tsx +5 -14
- package/src/Layout/LayoutFooter.tsx +2 -0
- package/src/Layout/LayoutHeader.tsx +2 -0
- package/src/Layout/__tests__/Layout.a11y.chromium.spec.ts +1 -0
- package/src/Layout/layoutEdges.stylex.ts +25 -0
- package/src/Lightbox/Lightbox.spec.md +9 -8
- package/src/Lightbox/Lightbox.test.tsx +83 -0
- package/src/Lightbox/Lightbox.tsx +149 -125
- package/src/Lightbox/LightboxKeyboard.a11y.browser.spec.ts +78 -0
- package/src/Lightbox/LightboxViewport.a11y.browser.spec.ts +70 -0
- package/src/Link/Link.spec.md +229 -0
- package/src/Link/LinkProvider.spec.md +167 -0
- package/src/Link/__tests__/Link.a11y.chromium.spec.ts +1 -0
- package/src/Link/__tests__/Link.navigation.a11y.chromium.spec.ts +1 -0
- package/src/List/List.spec.md +113 -34
- package/src/List/List.tsx +13 -1
- package/src/List/ListContext.tsx +19 -5
- package/src/List/ListItem.doc.mjs +3 -3
- package/src/List/ListItem.tsx +97 -28
- package/src/List/ListMarkers.a11y.chromium.spec.ts +904 -0
- package/src/Markdown/Markdown.codeLanguages.test.tsx +137 -0
- package/src/Markdown/Markdown.doc.mjs +12 -0
- package/src/Markdown/Markdown.fr23.bench.ts +3 -1
- package/src/Markdown/Markdown.fr23.perf.test.ts +45 -3
- package/src/Markdown/Markdown.fr23.sampling.ts +13 -4
- package/src/Markdown/Markdown.spec.md +71 -59
- package/src/Markdown/Markdown.test.tsx +50 -0
- package/src/Markdown/Markdown.tsx +61 -8
- package/src/Markdown/MarkdownTable.a11y.chromium.spec.ts +1 -0
- package/src/Markdown/__tests__/MarkdownNesting.a11y.chromium.spec.ts +1 -0
- package/src/MobileNav/MobileNav.doc.mjs +2 -2
- package/src/MobileNav/MobileNav.spec.md +161 -64
- package/src/MobileNav/MobileNav.test.tsx +27 -10
- package/src/MobileNav/MobileNav.tsx +51 -38
- package/src/MobileNav/MobileNavPinchZoom.a11y.chromium.spec.ts +1 -0
- package/src/MobileNav/MobileNavToggle.test.tsx +63 -0
- package/src/MobileNav/MobileNavToggle.tsx +13 -5
- package/src/MobileNav/__tests__/MobileNavWidth.a11y.chromium.spec.ts +103 -0
- package/src/MoreMenu/MoreMenu.doc.mjs +2 -2
- package/src/MoreMenu/MoreMenu.spec.md +88 -53
- package/src/MultiSelector/CreateRow.a11y.chromium.spec.ts +67 -9
- package/src/MultiSelector/MultiSelector.disabledFocus.a11y.chromium.spec.ts +1 -0
- package/src/MultiSelector/MultiSelector.test.tsx +122 -10
- package/src/MultiSelector/MultiSelector.tsx +24 -4
- package/src/MultiSelector/OptionActions.a11y.chromium.spec.ts +1 -0
- package/src/MultiSelector/__tests__/MultiSelector.a11y.chromium.spec.ts +1 -0
- package/src/NavIcon/NavIcon.spec.md +66 -38
- package/src/NavMenu/NavHeadingMenu.spec.md +104 -46
- package/src/NavMenu/NavHeadingMenu.test.tsx +276 -2
- package/src/NavMenu/NavHeadingMenu.tsx +42 -4
- package/src/NavMenu/NavHeadingMenuItem.tsx +60 -6
- package/src/NavMenu/NavMenuContext.tsx +11 -0
- package/src/NavMenu/__tests__/NavMenusSlideSelection.a11y.chromium.spec.ts +137 -0
- package/src/NumberInput/NumberInput.doc.mjs +6 -6
- package/src/NumberInput/NumberInput.spec.md +248 -0
- package/src/NumberInput/NumberInput.test.tsx +187 -14
- package/src/NumberInput/NumberInput.tsx +86 -24
- package/src/NumberInput/__tests__/NumberInput.a11y.chromium.spec.ts +1 -0
- package/src/Overlay/Overlay.doc.mjs +2 -2
- package/src/Overlay/Overlay.test.tsx +72 -4
- package/src/Overlay/Overlay.tsx +18 -8
- package/src/Pagination/Pagination.test.tsx +2 -2
- package/src/Popover/Popover.doc.mjs +38 -2
- package/src/Popover/Popover.spec.md +90 -11
- package/src/Popover/Popover.test.tsx +340 -2
- package/src/Popover/Popover.tsx +401 -35
- package/src/Popover/PopoverPresentation.test.tsx +952 -0
- package/src/Popover/__tests__/PopoverSecondDocument.a11y.chromium.spec.ts +205 -0
- package/src/Popover/index.ts +5 -1
- package/src/Popover/lazyPopoverBottomSheet.ts +57 -0
- package/src/Popover/usePopover.tsx +11 -5
- package/src/PowerSearch/PowerSearch.spec.md +423 -53
- package/src/PowerSearch/PowerSearch.test.tsx +77 -1
- package/src/PowerSearch/PowerSearch.tsx +7 -5
- package/src/ProgressBar/ProgressBar.test.tsx +12 -0
- package/src/ProgressBar/ProgressBar.tsx +18 -0
- package/src/ProgressBar/__tests__/ProgressBar.a11y.chromium.spec.ts +1 -0
- package/src/RadioList/RadioList.spec.md +227 -0
- package/src/RadioList/RadioList.test.tsx +34 -7
- package/src/RadioList/RadioListItem.press.source-build.test.mjs +80 -0
- package/src/RadioList/RadioListItem.spec.md +223 -0
- package/src/RadioList/RadioListItem.tsx +26 -12
- package/src/RadioList/__tests__/RadioGroup.a11y.chromium.spec.ts +1 -0
- package/src/Resizable/__tests__/ResizeHandle.a11y.chromium.spec.ts +1 -0
- package/src/ScrollableArea/ScrollableArea.spec.md +6 -5
- package/src/ScrollableArea/ScrollableArea.test.tsx +5 -0
- package/src/ScrollableArea/ScrollableArea.tsx +4 -0
- package/src/Section/Section.spec.md +102 -44
- package/src/SegmentedControl/SegmentedControl.spec.md +162 -53
- package/src/SegmentedControl/SegmentedControl.test.tsx +46 -0
- package/src/SegmentedControl/SegmentedControl.tsx +7 -3
- package/src/SegmentedControl/SegmentedControlItem.spec.md +206 -0
- package/src/SelectableCard/SelectableCard.doc.mjs +7 -6
- package/src/SelectableCard/SelectableCard.spec.md +230 -0
- package/src/SelectableCard/SelectableCard.test.tsx +11 -1
- package/src/SelectableCard/SelectableCard.tsx +49 -33
- package/src/Selector/Selector.sheetActiveDescendant.test.tsx +95 -0
- package/src/Selector/Selector.spec.md +12 -4
- package/src/Selector/Selector.test.tsx +114 -8
- package/src/Selector/Selector.tsx +30 -6
- package/src/Selector/__tests__/ComboboxField.a11y.chromium.spec.ts +458 -0
- package/src/Selector/__tests__/EmptyStateAnnouncement.a11y.chromium.spec.ts +1 -0
- package/src/Selector/__tests__/Listbox.a11y.chromium.spec.ts +1 -0
- package/src/Selector/__tests__/Selector.a11y.chromium.spec.ts +1 -0
- package/src/Selector/__tests__/Selector.combobox.a11y.chromium.spec.ts +1 -0
- package/src/Selector/hooks.ts +234 -10
- package/src/Selector/useCombobox.doc.mjs +156 -9
- package/src/Selector/useCombobox.public.test.tsx +89 -0
- package/src/Selector/useCombobox.test.tsx +444 -0
- package/src/SideNav/SideNav.spec.md +50 -30
- package/src/SideNav/SideNav.test.tsx +425 -25
- package/src/SideNav/SideNav.tsx +85 -1
- package/src/SideNav/SideNavCollapseButton.spec.md +161 -0
- package/src/SideNav/SideNavHeading.spec.md +226 -0
- package/src/SideNav/SideNavHeading.tsx +102 -6
- package/src/SideNav/SideNavItem.spec.md +246 -0
- package/src/SideNav/SideNavItem.tsx +40 -9
- package/src/SideNav/SideNavRailMotion.test.tsx +620 -0
- package/src/SideNav/SideNavSection.spec.md +153 -0
- package/src/SideNav/__tests__/SideNavRailMotion.interaction.browser.spec.ts +417 -0
- package/src/SideNav/railMotion.ts +315 -0
- package/src/Skeleton/Skeleton.spec.md +99 -42
- package/src/Skeleton/Skeleton.test.tsx +108 -1
- package/src/Skeleton/Skeleton.tsx +30 -2
- package/src/Slider/Slider.fr10.test.tsx +34 -0
- package/src/Slider/Slider.test.tsx +172 -0
- package/src/Slider/Slider.tsx +70 -14
- package/src/Slider/__tests__/Slider.a11y.chromium.spec.ts +1 -0
- package/src/Spinner/Spinner.spec.md +231 -0
- package/src/Stack/Stack.spec.md +104 -56
- package/src/StatusDot/StatusDot.spec.md +139 -51
- package/src/StatusDot/StatusDot.test.tsx +13 -0
- package/src/StatusDot/StatusDot.tsx +27 -0
- package/src/Stepper/Step.spec.md +206 -0
- package/src/Stepper/Step.tsx +19 -3
- package/src/Stepper/Stepper.test.tsx +50 -0
- package/src/Switch/Switch.focusRing.source-build.test.mjs +81 -0
- package/src/Switch/Switch.spec.md +150 -66
- package/src/Switch/Switch.tsx +11 -9
- package/src/Switch/__tests__/Switch.a11y.chromium.spec.ts +1 -0
- package/src/Switch/switch.markers.stylex.ts +7 -2
- package/src/TabList/Tab.spec.md +201 -0
- package/src/TabList/Tab.tsx +7 -1
- package/src/TabList/TabList.doc.mjs +3 -3
- package/src/TabList/TabList.test.tsx +27 -0
- package/src/TabList/TabMenu.spec.md +198 -0
- package/src/TabList/TabMenu.tsx +24 -1
- package/src/TabList/__tests__/TabListOverflow.interaction.browser.spec.ts +99 -0
- package/src/TabList/__tests__/Tabs.a11y.chromium.spec.ts +1 -0
- package/src/Table/Table.spec.md +54 -30
- package/src/Table/TableCell.tsx +9 -0
- package/src/Table/TableHeaderCell.tsx +2 -0
- package/src/Table/TableRow.tsx +3 -0
- package/src/Table/__tests__/Table.a11y.chromium.spec.ts +129 -0
- package/src/Table/__tests__/Table.a11y.contracts.ts +35 -0
- package/src/Table/__tests__/Table.a11y.renders.tsx +112 -0
- package/src/Table/__tests__/Table.a11y.states.ts +140 -0
- package/src/Table/__tests__/Table.a11y.test.tsx +198 -0
- package/src/Table/__tests__/TableMinWidth.a11y.chromium.spec.ts +1 -0
- package/src/Table/__tests__/TableRowGlide.a11y.browser.spec.ts +382 -0
- package/src/Table/__tests__/TableScroll.a11y.chromium.spec.ts +1 -0
- package/src/Table/__tests__/TableStickyDividers.a11y.browser.spec.ts +560 -0
- package/src/Table/glidingDivider.ts +336 -0
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +23 -8
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.glide.test.tsx +280 -0
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +91 -9
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +471 -10
- package/src/Table/plugins/rowStatus/useTableRowStatus.spec.md +4 -4
- package/src/Table/plugins/sortable/__tests__/useTableSortable.a11y.test.tsx +174 -0
- package/src/Table/plugins/sortable/__tests__/useTableSortable.a11y.ts +86 -0
- package/src/Table/plugins/sortable/useTableSortable.test.tsx +0 -12
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.test.tsx +51 -1
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +312 -12
- package/src/Table/rowDivider.ts +154 -0
- package/src/Table/useTableRowExpansion.doc.mjs +8 -0
- package/src/Text/Text.spec.md +114 -127
- package/src/TextArea/TextArea.doc.mjs +6 -6
- package/src/TextArea/TextArea.spec.md +164 -64
- package/src/TextArea/TextArea.test.tsx +65 -6
- package/src/TextArea/TextArea.tsx +27 -15
- package/src/TextInput/TextInput.doc.mjs +8 -8
- package/src/TextInput/TextInput.spec.md +260 -0
- package/src/TextInput/TextInput.test.tsx +126 -10
- package/src/TextInput/TextInput.tsx +57 -23
- package/src/TextInput/__tests__/TextInput.a11y.chromium.spec.ts +1 -0
- package/src/Thumbnail/Thumbnail.doc.mjs +1 -2
- package/src/Thumbnail/Thumbnail.spec.md +244 -0
- package/src/Thumbnail/Thumbnail.test.tsx +120 -7
- package/src/Thumbnail/Thumbnail.tsx +77 -31
- package/src/TimeInput/TimeInput.spec.md +273 -0
- package/src/TimeInput/TimeInput.tsx +12 -4
- package/src/TimeInput/TouchTimeField.tsx +2 -1
- package/src/Timestamp/Timestamp.spec.md +252 -0
- package/src/Toast/Toast.spec.md +300 -0
- package/src/Toast/ToastViewport.modalHost.test.tsx +630 -5
- package/src/Toast/ToastViewport.test.tsx +137 -0
- package/src/Toast/ToastViewport.tsx +63 -6
- package/src/ToggleButton/ToggleButton.spec.md +256 -0
- package/src/ToggleButton/ToggleButtonGroup.spec.md +195 -0
- package/src/ToggleButton/__tests__/ToggleButton.a11y.chromium.spec.ts +1 -0
- package/src/Token/Token.spec.md +271 -0
- package/src/Token/__tests__/TokenRemoveTarget.a11y.chromium.spec.ts +1 -0
- package/src/Tokenizer/Tokenizer.props-type.test.tsx +126 -0
- package/src/Tokenizer/Tokenizer.spec.md +313 -72
- package/src/Tokenizer/Tokenizer.ssr.test.tsx +196 -0
- package/src/Tokenizer/Tokenizer.test.tsx +44 -8
- package/src/Tokenizer/Tokenizer.tsx +586 -41
- package/src/Tokenizer/TokenizerBottomSheet.test.tsx +2719 -0
- package/src/Tokenizer/TokenizerBottomSheet.tsx +957 -0
- package/src/Tokenizer/__tests__/TokenizerEndLane.a11y.chromium.spec.ts +61 -27
- package/src/Toolbar/Toolbar.spec.md +103 -49
- package/src/Toolbar/__tests__/Toolbar.a11y.chromium.spec.ts +1 -0
- package/src/Tooltip/Tooltip.spec.md +161 -36
- package/src/Tooltip/Tooltip.test.tsx +171 -3
- package/src/Tooltip/__tests__/Tooltip.a11y.chromium.spec.ts +1 -0
- package/src/Tooltip/__tests__/Tooltip.a11y.states.ts +2 -2
- package/src/Tooltip/__tests__/TooltipFocusReturn.a11y.chromium.spec.ts +1 -0
- package/src/Tooltip/__tests__/TooltipHoverBridge.a11y.chromium.spec.ts +1 -0
- package/src/Tooltip/__tests__/TooltipTallContent.a11y.browser.spec.ts +673 -0
- package/src/Tooltip/__tests__/TooltipTallContentTracking.a11y.browser.spec.ts +1162 -0
- package/src/Tooltip/useTooltip.tsx +7 -2
- package/src/TopNav/TopNav.spec.md +190 -0
- package/src/TopNav/TopNav.test.tsx +89 -0
- package/src/TopNav/TopNavHeading.spec.md +211 -0
- package/src/TopNav/TopNavHeading.tsx +35 -2
- package/src/TopNav/TopNavItem.spec.md +189 -0
- package/src/TopNav/TopNavMegaMenu.reduced-motion.source-build.test.mjs +83 -0
- package/src/TopNav/TopNavMegaMenu.spec.md +190 -0
- package/src/TopNav/TopNavMegaMenu.tsx +21 -4
- package/src/TopNav/TopNavMegaMenuFeaturedCard.spec.md +150 -0
- package/src/TopNav/TopNavMegaMenuItem.spec.md +155 -0
- package/src/TopNav/TopNavMenu.spec.md +202 -0
- package/src/TopNav/TopNavMenu.test.tsx +65 -1
- package/src/TopNav/TopNavMenu.tsx +30 -1
- package/src/TopNav/__tests__/TopNavMobileLongHeading.a11y.chromium.spec.ts +1 -0
- package/src/TreeList/TreeList.doc.mjs +13 -0
- package/src/TreeList/TreeList.spec.md +54 -35
- package/src/TreeList/TreeList.tsx +234 -2
- package/src/TreeList/TreeListBranches.tsx +8 -6
- package/src/TreeList/TreeListItem.tsx +12 -6
- package/src/TreeList/__tests__/TreeList.a11y.chromium.spec.ts +19 -6
- package/src/TreeList/__tests__/TreeListGuideAlignment.interaction.browser.spec.ts +127 -0
- package/src/TreeList/__tests__/TreeListRowNames.a11y.chromium.spec.ts +1 -0
- package/src/Typeahead/BaseTypeahead.emptyState.a11y.chromium.spec.ts +138 -0
- package/src/Typeahead/BaseTypeahead.test.tsx +201 -4
- package/src/Typeahead/BaseTypeahead.tsx +26 -10
- package/src/Typeahead/Typeahead.test.tsx +114 -1
- package/src/Typeahead/Typeahead.tsx +34 -16
- package/src/VisuallyHidden/VisuallyHidden.spec.md +170 -0
- package/src/__tests__/BusyOwnerAnnouncement.test.tsx +66 -5
- package/src/__tests__/CardPress.a11y.chromium.spec.ts +353 -0
- package/src/__tests__/DisabledTriggerFocus.a11y.chromium.spec.ts +2 -1
- package/src/__tests__/PressModality.a11y.chromium.spec.ts +392 -0
- package/src/__tests__/PressedState.a11y.chromium.spec.ts +1 -0
- package/src/__tests__/pressState.ts +43 -1
- package/src/__tests__/unthemedLength.ts +34 -0
- package/src/gestures/GestureArena.ts +966 -0
- package/src/gestures/GestureRecognizer.ts +626 -0
- package/src/gestures/LongPressGestureRecognizer.ts +186 -0
- package/src/gestures/PanGestureRecognizer.ts +410 -0
- package/src/gestures/TapGestureRecognizer.ts +192 -0
- package/src/gestures/VelocityTracker.ts +194 -0
- package/src/gestures/__tests__/LongPressGestureRecognizer.test.ts +141 -0
- package/src/gestures/__tests__/PanGestureRecognizer.test.ts +327 -0
- package/src/gestures/__tests__/TapGestureRecognizer.test.ts +154 -0
- package/src/gestures/__tests__/VelocityTracker.streams.test.ts +243 -0
- package/src/gestures/__tests__/VelocityTracker.test.ts +261 -0
- package/src/gestures/__tests__/arena.test.ts +824 -0
- package/src/gestures/__tests__/arenaContinuous.test.ts +207 -0
- package/src/gestures/__tests__/arenaTapLongPress.test.ts +211 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/README.md +82 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/android-chromium-fling.json +130 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/android-chromium-slow.json +860 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/android-chromium-stop-release.json +357 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/android-firefox-fling.json +66 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/android-firefox-slow.json +268 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/android-firefox-stop-release.json +128 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/capture.html +123 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-mouse-fling.json +64 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-mouse-slow.json +268 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-mouse-stop-release.json +124 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-pen-fling.json +64 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-pen-slow.json +268 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-pen-stop-release.json +124 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-touch-fling.json +84 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-touch-slow.json +381 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-touch-stop-release.json +171 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/ios-safari-fling.json +45 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/ios-safari-slow.json +101 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/ios-safari-stop-release.json +130 -0
- package/src/gestures/__tests__/harness.ts +204 -0
- package/src/gestures/geometry.ts +55 -0
- package/src/gestures/types.ts +161 -0
- package/src/hooks/AnnounceRenderedText.tsx +27 -0
- package/src/hooks/ModalAnnounceProvider.tsx +155 -0
- package/src/hooks/__tests__/MenuPressShadowRoot.a11y.chromium.spec.ts +98 -4
- package/src/hooks/__tests__/menuLinkClicks.ts +71 -0
- package/src/hooks/actionGroupTracker.exports.test.ts +28 -0
- package/src/hooks/actionGroupTracker.test.ts +510 -0
- package/src/hooks/actionGroupTracker.ts +449 -0
- package/src/hooks/index.ts +6 -0
- package/src/hooks/menuPressOnItems.ts +40 -0
- package/src/hooks/modalAnnounce.ts +439 -0
- package/src/hooks/scrollGeometry.ts +71 -4
- package/src/hooks/useAdaptivePresentation.ts +46 -9
- package/src/hooks/useAnimatedLayout.doc.mjs +101 -0
- package/src/hooks/useAnimatedLayout.ts +61 -0
- package/src/hooks/useAnnounce.doc.mjs +4 -4
- package/src/hooks/useAnnounce.modal.test.tsx +1291 -0
- package/src/hooks/useAnnounce.test.tsx +64 -4
- package/src/hooks/useAnnounce.ts +452 -28
- package/src/hooks/useAnnounceRenderedText.adopters.test.tsx +226 -0
- package/src/hooks/useAnnounceRenderedText.ts +81 -11
- package/src/hooks/useBusyAnnouncement.adopters.test.tsx +69 -0
- package/src/hooks/useBusyAnnouncement.test.tsx +112 -0
- package/src/hooks/useBusyAnnouncement.ts +64 -54
- package/src/hooks/useFocusTrap.doc.mjs +3 -3
- package/src/hooks/useFocusTrap.test.tsx +135 -2
- package/src/hooks/useFocusTrap.ts +59 -27
- package/src/hooks/useMenuHover.ts +6 -2
- package/src/hooks/useMenuPress.doc.mjs +2 -2
- package/src/hooks/useMenuPress.test.tsx +5 -2
- package/src/hooks/useMenuPress.ts +72 -37
- package/src/hooks/usePressFeedback.doc.mjs +4 -4
- package/src/hooks/usePressFeedback.ts +5 -2
- package/src/hooks/useScrollableArea.test.tsx +344 -3
- package/src/hooks/useScrollableArea.ts +120 -12
- package/src/i18n/generated-locales/en.generated.ts +35 -0
- package/src/i18n/generated-locales/pseudo.generated.ts +37 -0
- package/src/internal/tokenizer-presentation.test.ts +29 -0
- package/src/internal/tokenizer-presentation.ts +25 -0
- package/src/internal/touch.test.ts +44 -0
- package/src/internal/touch.ts +41 -0
- package/src/motion/LayoutChangeSnapshot.tsx +50 -0
- package/src/motion/MEASUREMENTS.md +271 -0
- package/src/motion/README.md +218 -0
- package/src/motion/__tests__/animatedLayout.interaction.browser.spec.ts +1613 -0
- package/src/motion/__tests__/animatedLayoutAdopters.interaction.browser.spec.ts +217 -0
- package/src/motion/__tests__/animatedLayoutBundle.ts +17 -0
- package/src/motion/animatedLayout.boundary.test.ts +155 -0
- package/src/motion/animatedLayout.swap.test.ts +827 -0
- package/src/motion/animatedLayout.test.ts +1154 -0
- package/src/motion/animatedLayout.ts +1801 -0
- package/src/motion/animatedLayoutAdopters.test.tsx +500 -0
- package/src/motion/animator.test.ts +2653 -0
- package/src/motion/animator.ts +2794 -0
- package/src/motion/bezier.test.ts +52 -0
- package/src/motion/bezier.ts +64 -0
- package/src/motion/coast.test.ts +99 -0
- package/src/motion/coast.ts +150 -0
- package/src/motion/decay.test.ts +120 -0
- package/src/motion/decay.ts +126 -0
- package/src/motion/projection.test.ts +107 -0
- package/src/motion/projection.ts +116 -0
- package/src/motion/reducedMotion.stylex.ts +41 -0
- package/src/motion/reducedMotion.test.ts +129 -0
- package/src/motion/reducedMotion.ts +94 -0
- package/src/motion/reducedMotionPlan.test.ts +182 -0
- package/src/motion/reducedMotionPlan.ts +263 -0
- package/src/motion/resolveSnapPoint.test.ts +189 -0
- package/src/motion/resolveSnapPoint.ts +169 -0
- package/src/motion/roleValue.ts +105 -0
- package/src/motion/roles.test.ts +256 -0
- package/src/motion/roles.ts +262 -0
- package/src/motion/rubberBand.test.ts +88 -0
- package/src/motion/rubberBand.ts +115 -0
- package/src/motion/selectPage.test.ts +31 -0
- package/src/motion/selectPage.ts +55 -0
- package/src/motion/spring.test.ts +650 -0
- package/src/motion/spring.ts +551 -0
- package/src/motion/transientCopy.ts +374 -0
- package/src/motion/uikit/gestures.test.ts +89 -0
- package/src/motion/uikit/gestures.ts +359 -0
- package/src/motion/uikit/index.ts +80 -0
- package/src/motion/uikit/navigation.ts +83 -0
- package/src/motion/uikit/scroll.ts +141 -0
- package/src/motion/uikit/springRows.test.ts +71 -0
- package/src/motion/uikit/springs.ts +514 -0
- package/src/motion/uikit/timing.ts +210 -0
- package/src/motion/uikit/uikit.test.ts +364 -0
- package/src/motion/uikit/values.test.ts +110 -0
- package/src/reset.a11y.chromium.spec.ts +1 -0
- package/src/reset.until-found.a11y.browser.spec.ts +1 -0
- package/src/serverSafeComponents.test.ts +10 -0
- package/src/tailwind-theme.css +51 -1
- package/src/tailwind-theme.test.ts +51 -0
- package/src/theme/Theme.test.tsx +28 -0
- package/src/theme/__tests__/SpacingRootFontSize.a11y.chromium.spec.ts +1 -0
- package/src/theme/declarationBoundary.ts +282 -1
- package/src/theme/defineTheme.test.ts +529 -12
- package/src/theme/defineTheme.ts +231 -19
- package/src/theme/derivedVarRegistry.test.ts +34 -5
- package/src/theme/derivedVarRegistry.ts +4 -0
- package/src/theme/expandMotionScale.test.ts +17 -0
- package/src/theme/extensibleAxes.test.ts +74 -29
- package/src/theme/generateThemeRules.ts +772 -35
- package/src/theme/index.ts +3 -0
- package/src/theme/onMediaTokens.test.ts +186 -0
- package/src/theme/statusColor.ts +189 -0
- package/src/theme/statusRoleDerivation.ts +289 -0
- package/src/theme/syntax/SyntaxTheme.tsx +1 -1
- package/src/theme/syntax/defineSyntaxTheme.ts +1 -1
- package/src/theme/syntax/presets.ts +1 -1
- package/src/theme/syntax/tokens.ts +1 -1
- package/src/theme/themeAdaptations.test.ts +412 -0
- package/src/theme/themeAdaptations.ts +43 -1
- package/src/theme/tokens.stylex.ts +36 -2
- package/src/theme/tokens.test.ts +111 -1
- package/src/theme/tokens.ts +23 -1
- package/src/theme/useTheme.ts +10 -4
- package/src/utils/customPropertyArmLayering.test.ts +131 -0
- package/src/utils/edgeAutoscroll.test.ts +192 -0
- package/src/utils/edgeAutoscroll.ts +111 -0
- package/src/utils/hitArea.test.ts +628 -0
- package/src/utils/hitArea.ts +770 -0
- package/src/utils/interactionOverlay.stylex.ts +4 -1
- package/src/utils/pressFeedback.test.ts +310 -2
- package/src/utils/pressFeedback.ts +306 -54
- package/src/utils/pressGesture.test.ts +50 -0
- package/src/utils/pressGesture.ts +40 -2
- package/src/utils/touchPresentation.test.ts +323 -0
- package/src/utils/touchPresentation.ts +153 -0
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file BottomSheet.tsx
|
|
7
|
-
* @input Uses React, StyleX, core hooks, shared layer dismissal, the shared interaction modality, named BottomSheetPanel, BottomSheetSwitcherContext
|
|
7
|
+
* @input Uses React, StyleX, core hooks, shared layer dismissal, the modal outlet registry, the shared interaction modality, named BottomSheetPanel, BottomSheetSwitcherContext, BottomSheetHostContext, the private bottom-sheet stack registry
|
|
8
8
|
* @output Exports BottomSheet component and BottomSheetProps
|
|
9
9
|
* @position Public BottomSheet router plus private standalone/switcher hosts
|
|
10
10
|
*
|
|
@@ -23,20 +23,57 @@
|
|
|
23
23
|
* scroll is locked by the shared useScrollLock hook, as for Dialog: a
|
|
24
24
|
* standalone sheet holds it while presented, a switcher holds one for the
|
|
25
25
|
* whole modal flow. The remaining script is what no single dialog can
|
|
26
|
-
* decide: gating `cancel` by `purpose` and the shared dismissal stack,
|
|
27
|
-
* in a switcher, handing one scrim between two
|
|
28
|
-
* the active sheet when a retained dialog
|
|
26
|
+
* decide: gating `cancel` by `purpose` and the shared dismissal stack, the
|
|
27
|
+
* stack of sheets below, and, in a switcher, handing one scrim between two
|
|
28
|
+
* dialogs and keeping focus in the active sheet when a retained dialog
|
|
29
|
+
* closes.
|
|
30
|
+
*
|
|
31
|
+
* A standalone sheet also joins the private bottom-sheet stack
|
|
32
|
+
* (bottomSheetStack.ts) while it is presented. The stack is behaviour, not
|
|
33
|
+
* API: a modal sheet opened while another modal sheet is open stacks on top
|
|
34
|
+
* of it, the covered sheet recedes and is blocked, one scrim stays visible,
|
|
35
|
+
* and the native top layer is kept in open order even when several sheets
|
|
36
|
+
* open in one commit. A sheet rendered in another sheet's content leaves
|
|
37
|
+
* with its host and returns with it while its own `isOpen` is still true;
|
|
38
|
+
* its state is never written for it. A modal sheet on its own never
|
|
39
|
+
* notices the stack; when every sheet of a stack closes in one update, the
|
|
40
|
+
* registry returns focus once, to the bottom sheet's target, after the last
|
|
41
|
+
* dialog has closed.
|
|
42
|
+
*
|
|
43
|
+
* A standalone sheet closing in the same update as another standalone sheet
|
|
44
|
+
* opens, at the same level and from a control inside the closing sheet, is
|
|
45
|
+
* replaced by it: the two run the handoff a BottomSheetSwitcher runs between
|
|
46
|
+
* its steps (entering sheet above, retained sheet aligning down then fading,
|
|
47
|
+
* one steady scrim, focus into the new sheet and back to the flow's opener
|
|
48
|
+
* on close). The registry pairs them and drives the handoff; this host
|
|
49
|
+
* renders the retained panel state it reports, and reports its panel's
|
|
50
|
+
* motions back. Non-modal sheets (`hasScrim={false}`) are hosted as manual
|
|
51
|
+
* popovers so the top layer orders them, with `show()` below the Popover API
|
|
52
|
+
* floor; they never stack, but they replace each other the same way, and
|
|
53
|
+
* return focus to their opener on close only while the person is still in
|
|
54
|
+
* them.
|
|
55
|
+
*
|
|
56
|
+
* Every open standalone modal sheet supplies its dialog as an outlet for
|
|
57
|
+
* app-global surfaces (toasts) (Layer/modalOutlet.ts); the latest outlet,
|
|
58
|
+
* the one they render into, follows the sheet stack's order, so toasts land
|
|
59
|
+
* in the top sheet and return to the sheet beneath when it closes.
|
|
29
60
|
*
|
|
30
61
|
* SYNC: When modified, update these files to stay in sync:
|
|
31
62
|
* - /packages/core/src/BottomSheet/BottomSheetPanel.tsx
|
|
32
63
|
* - /packages/core/src/BottomSheet/BottomSheetEdgeTint.tsx
|
|
64
|
+
* - /packages/core/src/BottomSheet/BottomSheetHostContext.ts
|
|
65
|
+
* - /packages/core/src/BottomSheet/bottomSheetStack.ts
|
|
33
66
|
* - /packages/core/src/BottomSheet/BottomSheet.doc.mjs
|
|
34
67
|
* - /packages/core/src/BottomSheet/BottomSheet.test.tsx
|
|
68
|
+
* - /packages/core/src/BottomSheet/BottomSheetStacking.test.tsx
|
|
35
69
|
* - /packages/core/src/BottomSheet/BottomSheetSwitcher.tsx
|
|
36
70
|
* - /packages/core/src/BottomSheet/BottomSheetSwitcher.test.tsx
|
|
37
71
|
* - /packages/core/src/Layer/layerDismissalFamilies.test.tsx
|
|
38
72
|
* - /packages/core/src/Layer/layerDismissalInvariants.test.tsx
|
|
73
|
+
* - /packages/core/src/Toast/ToastViewport.modalHost.test.tsx
|
|
39
74
|
* - /apps/storybook/stories/BottomSheet.stories.tsx
|
|
75
|
+
* - /apps/storybook/stories/BottomSheetStacking.stories.tsx
|
|
76
|
+
* - /apps/storybook/stories/BottomSheetReplace.stories.tsx
|
|
40
77
|
* - /packages/cli/assets/templates/blocks/components/BottomSheet/BottomSheetShowcase.tsx
|
|
41
78
|
*/
|
|
42
79
|
|
|
@@ -54,10 +91,18 @@ import * as stylex from '@stylexjs/stylex';
|
|
|
54
91
|
import type {BaseProps} from '../BaseProps';
|
|
55
92
|
import type {DialogPurpose} from '../Dialog';
|
|
56
93
|
import type {SpacingStep} from '../utils/types';
|
|
57
|
-
import {
|
|
58
|
-
|
|
94
|
+
import {
|
|
95
|
+
colorVars,
|
|
96
|
+
durationVars,
|
|
97
|
+
easeVars,
|
|
98
|
+
spacingVars,
|
|
99
|
+
} from '../theme/tokens.stylex';
|
|
100
|
+
import {useDevWarning} from '../hooks/useDevWarning';
|
|
101
|
+
import {useScrollLock} from '../hooks/useScrollLock';
|
|
59
102
|
import {mergeProps} from '../utils';
|
|
60
103
|
import {LayerDepthProvider} from '../Layer/LayerDepthContext';
|
|
104
|
+
import {ModalAnnounceProvider} from '../hooks/ModalAnnounceProvider';
|
|
105
|
+
import {useModalOutlet} from '../Layer/modalOutlet';
|
|
61
106
|
import {useLayerDismissal} from '../Layer/useLayerDismissal';
|
|
62
107
|
import {focusForLastInput} from '../utils/focusReturn';
|
|
63
108
|
import {useInteractionModalityTracking} from '../utils/interactionModality';
|
|
@@ -67,6 +112,32 @@ import {
|
|
|
67
112
|
type BottomSheetPanelState,
|
|
68
113
|
} from './BottomSheetPanel';
|
|
69
114
|
import {BottomSheetEdgeTint} from './BottomSheetEdgeTint';
|
|
115
|
+
import {
|
|
116
|
+
BottomSheetHostContext,
|
|
117
|
+
CLOSED_BOTTOM_SHEET_HOST,
|
|
118
|
+
OPEN_BOTTOM_SHEET_HOST,
|
|
119
|
+
} from './BottomSheetHostContext';
|
|
120
|
+
import {
|
|
121
|
+
BOTTOM_SHEET_STACK_DEFAULT_VIEW,
|
|
122
|
+
cancelScrimWrite,
|
|
123
|
+
closeDialogKeepingFocus,
|
|
124
|
+
focusSheetPanel,
|
|
125
|
+
getBottomSheetBeneath,
|
|
126
|
+
hideSheetHost,
|
|
127
|
+
isClosingTogether,
|
|
128
|
+
isSheetHostPresented,
|
|
129
|
+
presentStepModally,
|
|
130
|
+
presentWithClearScrim,
|
|
131
|
+
registerBottomSheet,
|
|
132
|
+
reportBottomSheetMotion,
|
|
133
|
+
reportClosedTogether,
|
|
134
|
+
sealBottomSheetBatch,
|
|
135
|
+
setBottomSheetOpen,
|
|
136
|
+
showSheetHostNonModal,
|
|
137
|
+
writeScrimOpacity,
|
|
138
|
+
type BottomSheetScrimWrite,
|
|
139
|
+
type BottomSheetStackView,
|
|
140
|
+
} from './bottomSheetStack';
|
|
70
141
|
import {
|
|
71
142
|
BottomSheetSwitcherContext,
|
|
72
143
|
type BottomSheetSwitcherContextValue,
|
|
@@ -75,6 +146,7 @@ import {
|
|
|
75
146
|
|
|
76
147
|
export type {BottomSheetHeight, BottomSheetSnapPoint} from './BottomSheetPanel';
|
|
77
148
|
import type {BottomSheetHeight, BottomSheetSnapPoint} from './BottomSheetPanel';
|
|
149
|
+
import {BottomSheetEscapeContext} from './bottomSheetEscape';
|
|
78
150
|
|
|
79
151
|
const styles = stylex.create({
|
|
80
152
|
dialog: {
|
|
@@ -96,12 +168,34 @@ const styles = stylex.create({
|
|
|
96
168
|
dialogOpen: {
|
|
97
169
|
display: 'block',
|
|
98
170
|
},
|
|
171
|
+
// An open standalone dialog is its panel's positioner: the panel sits at its
|
|
172
|
+
// block end, centred, with no wrapper between them
|
|
173
|
+
// (architecture:component-style-authoring INV7). A tap beside a narrower
|
|
174
|
+
// panel lands on the dialog itself, which light dismiss reads. The stack's
|
|
175
|
+
// recede (stackPositionerStyles) is applied to this dialog too, so a
|
|
176
|
+
// covered standalone sheet shrinks and lifts as one, panel and all.
|
|
177
|
+
dialogPanelHost: {
|
|
178
|
+
display: 'grid',
|
|
179
|
+
alignContent: 'end',
|
|
180
|
+
justifyItems: 'center',
|
|
181
|
+
},
|
|
182
|
+
// A non-modal sheet is hosted in the top layer (manual popover), so it
|
|
183
|
+
// carries no page-level z-index (spec:AST-027). Below the Popover API
|
|
184
|
+
// floor `show()` leaves it in page stacking order as a reduced fallback:
|
|
185
|
+
// usable, but with no promise over later page content.
|
|
99
186
|
dialogNonModal: {
|
|
100
187
|
pointerEvents: 'none',
|
|
101
|
-
zIndex: 1000,
|
|
102
188
|
width: '100%',
|
|
103
189
|
height: '100%',
|
|
104
190
|
},
|
|
191
|
+
dialogNonModalItem: {
|
|
192
|
+
pointerEvents: 'none',
|
|
193
|
+
width: '100%',
|
|
194
|
+
height: '100%',
|
|
195
|
+
},
|
|
196
|
+
dialogNonModalItemTop: {
|
|
197
|
+
zIndex: 1,
|
|
198
|
+
},
|
|
105
199
|
scrim: {
|
|
106
200
|
'::backdrop': {
|
|
107
201
|
backgroundColor: colorVars['--color-overlay'],
|
|
@@ -110,31 +204,17 @@ const styles = stylex.create({
|
|
|
110
204
|
'@starting-style': 0,
|
|
111
205
|
},
|
|
112
206
|
transitionProperty: 'opacity, display',
|
|
113
|
-
//
|
|
114
|
-
//
|
|
207
|
+
// The scrim changes hands between stacked sheets with no fade at all:
|
|
208
|
+
// the host pins this to 0s inline for the frame the change lands in
|
|
209
|
+
// (see `writeScrimOpacity`). Reduced motion keeps the pin too.
|
|
115
210
|
transitionDuration: `var(--_sheet-scrim-duration, ${durationVars['--duration-medium']})`,
|
|
116
211
|
transitionTimingFunction: easeVars['--ease-standard'],
|
|
117
212
|
transitionBehavior: 'allow-discrete',
|
|
118
213
|
'@media (prefers-reduced-motion: reduce)': {
|
|
119
|
-
// The switcher's scrim takeover pins the duration to 0s for one style
|
|
120
|
-
// flush; a literal here would override that pin and paint a frame
|
|
121
|
-
// with no scrim under reduced motion.
|
|
122
214
|
transitionDuration: 'var(--_sheet-scrim-duration, 0.01s)',
|
|
123
215
|
},
|
|
124
216
|
},
|
|
125
217
|
},
|
|
126
|
-
// A non-modal switcher dialog does not enter the top layer, so DOM order
|
|
127
|
-
// would decide which sheet paints in front during a handoff. The switcher's
|
|
128
|
-
// flow wrapper is the isolated surface for that relationship; inside it the
|
|
129
|
-
// sheet dialogs use local values only, the interactive sheet's on top.
|
|
130
|
-
dialogNonModalItem: {
|
|
131
|
-
pointerEvents: 'none',
|
|
132
|
-
width: '100%',
|
|
133
|
-
height: '100%',
|
|
134
|
-
},
|
|
135
|
-
dialogNonModalItemTop: {
|
|
136
|
-
zIndex: 1,
|
|
137
|
-
},
|
|
138
218
|
/**
|
|
139
219
|
* The dim leaves with the sheet, on a curve that matches.
|
|
140
220
|
*
|
|
@@ -163,8 +243,58 @@ const styles = stylex.create({
|
|
|
163
243
|
positionerTop: {
|
|
164
244
|
zIndex: 1,
|
|
165
245
|
},
|
|
246
|
+
// A sheet in a stack recedes and returns with CSS motion only; the style
|
|
247
|
+
// stays on while another sheet is presented so the return animates too.
|
|
248
|
+
// On a standalone sheet these apply to the dialog itself (its panel's
|
|
249
|
+
// positioner); on a switcher step, to the step's positioner.
|
|
250
|
+
positionerStackMotion: {
|
|
251
|
+
transformOrigin: '50% 0',
|
|
252
|
+
transitionProperty: 'transform',
|
|
253
|
+
transitionDuration: durationVars['--duration-medium'],
|
|
254
|
+
transitionTimingFunction: easeVars['--ease-standard'],
|
|
255
|
+
'@media (prefers-reduced-motion: reduce)': {
|
|
256
|
+
transitionDuration: '0.01s',
|
|
257
|
+
},
|
|
258
|
+
},
|
|
259
|
+
// Covered sheets recede behind the top sheet: the nearest shrinks a step
|
|
260
|
+
// about its top edge and lifts, the next shrinks a second step; deeper
|
|
261
|
+
// sheets share that second step. Only sheets count toward the depth.
|
|
262
|
+
positionerReceded1: {
|
|
263
|
+
transform: `translateY(calc(-1 * ${spacingVars['--spacing-2']})) scale(0.96)`,
|
|
264
|
+
},
|
|
265
|
+
positionerReceded2: {
|
|
266
|
+
transform: `translateY(calc(-2 * ${spacingVars['--spacing-2']})) scale(0.92)`,
|
|
267
|
+
},
|
|
166
268
|
});
|
|
167
269
|
|
|
270
|
+
/** Positioner styles for a sheet's place in the stack; the switcher items share them. */
|
|
271
|
+
function stackPositionerStyles(view: BottomSheetStackView) {
|
|
272
|
+
return [
|
|
273
|
+
view.isStacked && styles.positionerStackMotion,
|
|
274
|
+
view.depth === 1 && styles.positionerReceded1,
|
|
275
|
+
view.depth >= 2 && styles.positionerReceded2,
|
|
276
|
+
] as const;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/** The `data-sheet-stack` value for a host: only set while sheets stack. */
|
|
280
|
+
function stackStateAttribute(
|
|
281
|
+
view: BottomSheetStackView,
|
|
282
|
+
isOpen: boolean,
|
|
283
|
+
): 'top' | 'covered' | 'exiting' | 'replaced' | undefined {
|
|
284
|
+
if (!view.isStacked) {
|
|
285
|
+
return undefined;
|
|
286
|
+
}
|
|
287
|
+
if (!isOpen) {
|
|
288
|
+
return view.replacedMotion != null ? 'replaced' : 'exiting';
|
|
289
|
+
}
|
|
290
|
+
return view.isTop ? 'top' : 'covered';
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/** Scrim opacity for an open modal sheet: one visible backdrop per stack. */
|
|
294
|
+
function scrimOpacityForView(view: BottomSheetStackView): '0' | '1' {
|
|
295
|
+
return view.isStacked && !view.ownsScrim ? '0' : '1';
|
|
296
|
+
}
|
|
297
|
+
|
|
168
298
|
interface BottomSheetSharedProps extends BaseProps<HTMLDivElement> {
|
|
169
299
|
/** Ref forwarded to the visual sheet panel <div>. */
|
|
170
300
|
ref?: React.Ref<HTMLDivElement>;
|
|
@@ -213,12 +343,23 @@ interface StandaloneBottomSheetProps extends BottomSheetSharedProps {
|
|
|
213
343
|
isOpen: boolean;
|
|
214
344
|
onOpenChange: (isOpen: boolean) => void;
|
|
215
345
|
hasScrim?: boolean;
|
|
216
|
-
/**
|
|
346
|
+
/**
|
|
347
|
+
* Element that receives focus after the sheet closes. For a sheet on its
|
|
348
|
+
* own, or the last sheet of a stack, it is always focused, wherever focus
|
|
349
|
+
* was. When the sheet closes with a modal sheet still open beneath it,
|
|
350
|
+
* focus returns into that sheet instead (to this element if it is inside
|
|
351
|
+
* it, else the revealed sheet's panel), because the page is still inert.
|
|
352
|
+
*/
|
|
217
353
|
finalFocusRef?: RefObject<HTMLElement | null>;
|
|
218
354
|
sheetId?: never;
|
|
219
355
|
}
|
|
220
356
|
|
|
221
357
|
interface SwitcherBottomSheetProps extends BottomSheetSharedProps {
|
|
358
|
+
/**
|
|
359
|
+
* @deprecated `BottomSheetSwitcher` is deprecated; give each step its own
|
|
360
|
+
* standalone sheet with `isOpen` instead. Keeps working until a future
|
|
361
|
+
* minor release removes the switcher.
|
|
362
|
+
*/
|
|
222
363
|
sheetId: string;
|
|
223
364
|
isOpen?: never;
|
|
224
365
|
onOpenChange?: never;
|
|
@@ -248,63 +389,13 @@ function panelStateForSwitcherPhase(
|
|
|
248
389
|
}
|
|
249
390
|
}
|
|
250
391
|
|
|
251
|
-
// preventScroll on both: presenting a sheet must not scroll the page to reveal
|
|
252
|
-
// what it just focused. For an autofocused field that reveal is the mobile
|
|
253
|
-
// keyboard's, and it moves the document under a fixed sheet; useMobileKeyboard
|
|
254
|
-
// brings the field into view within the sheet instead.
|
|
255
392
|
function focusPanel(panel: HTMLElement | null, isModal: boolean): void {
|
|
256
|
-
|
|
257
|
-
if (activeElement != null && panel?.contains(activeElement)) {
|
|
258
|
-
return;
|
|
259
|
-
}
|
|
260
|
-
const autofocus = panel?.querySelector<HTMLElement>('[data-autofocus]');
|
|
261
|
-
if (autofocus != null) {
|
|
262
|
-
autofocus.focus({preventScroll: true});
|
|
263
|
-
} else if (isModal) {
|
|
264
|
-
panel?.focus({preventScroll: true});
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
/**
|
|
269
|
-
* Present a switcher step's dialog modally with no focus to return to.
|
|
270
|
-
* showModal() records the element focused at that moment and close() moves
|
|
271
|
-
* focus back to it, in Chromium and WebKit even when focus is in another
|
|
272
|
-
* dialog by then. For a step that element is the control that advanced the
|
|
273
|
-
* flow (Continue, Back) or the flow's opener, and the dialog closes a fade
|
|
274
|
-
* later, while the user is in the next step: the return would pull focus
|
|
275
|
-
* off the active panel with no user action. Blurring first leaves nothing
|
|
276
|
-
* recorded, so the close moves nothing; the entering step then focuses its
|
|
277
|
-
* own panel, and the switcher returns focus to the opener itself when the
|
|
278
|
-
* flow ends. The blur happens in the same task as the present, so no frame
|
|
279
|
-
* paints without focus.
|
|
280
|
-
*/
|
|
281
|
-
function presentStepModally(dialog: HTMLDialogElement): void {
|
|
282
|
-
const focused = dialog.ownerDocument.activeElement;
|
|
283
|
-
if (focused instanceof HTMLElement && focused !== dialog.ownerDocument.body) {
|
|
284
|
-
focused.blur();
|
|
285
|
-
}
|
|
286
|
-
dialog.showModal();
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
/**
|
|
290
|
-
* Present a switcher dialog whose backdrop must start, and stay, clear: the
|
|
291
|
-
* opacity is set with the scrim transition pinned to 0s, the dialog is
|
|
292
|
-
* presented, and the pin is lifted only after a style flush has applied the
|
|
293
|
-
* clear backdrop, so no frame eases from a previous backdrop value.
|
|
294
|
-
*/
|
|
295
|
-
function presentWithClearScrim(dialog: HTMLDialogElement): void {
|
|
296
|
-
dialog.style.setProperty('--_sheet-scrim-duration', '0s');
|
|
297
|
-
dialog.style.setProperty('--_sheet-scrim-opacity', '0');
|
|
298
|
-
presentStepModally(dialog);
|
|
299
|
-
if (typeof getComputedStyle === 'function') {
|
|
300
|
-
void getComputedStyle(dialog, '::backdrop').opacity;
|
|
301
|
-
}
|
|
302
|
-
dialog.style.removeProperty('--_sheet-scrim-duration');
|
|
393
|
+
focusSheetPanel(panel, 'open', isModal);
|
|
303
394
|
}
|
|
304
395
|
|
|
305
396
|
function StandaloneBottomSheet({
|
|
306
397
|
ref,
|
|
307
|
-
isOpen,
|
|
398
|
+
isOpen: isOpenProp,
|
|
308
399
|
onOpenChange,
|
|
309
400
|
label,
|
|
310
401
|
children,
|
|
@@ -319,19 +410,76 @@ function StandaloneBottomSheet({
|
|
|
319
410
|
const dialogRef = useRef<HTMLDialogElement | null>(null);
|
|
320
411
|
const panelRef = useRef<HTMLDivElement | null>(null);
|
|
321
412
|
const triggerRef = useRef<HTMLElement | null>(null);
|
|
413
|
+
// Whether focus was inside this sheet when its close began. A non-modal
|
|
414
|
+
// sheet leaves the page interactive, so it returns focus to its opener
|
|
415
|
+
// only if the person was still in the sheet; a modal sheet always does.
|
|
416
|
+
const hadFocusAtCloseRef = useRef(false);
|
|
417
|
+
const finalFocusRefRef = useRef(finalFocusRef);
|
|
418
|
+
finalFocusRefRef.current = finalFocusRef;
|
|
419
|
+
// A sheet rendered in another sheet's content is presented only while that
|
|
420
|
+
// sheet is open: it leaves with its host and, if its own state is still
|
|
421
|
+
// open, comes back when the host does (see BottomSheetHostContext). Its
|
|
422
|
+
// state stays the consumer's; nothing here writes it.
|
|
423
|
+
const host = use(BottomSheetHostContext);
|
|
424
|
+
const isHostOpen = host?.isOpen ?? true;
|
|
425
|
+
const isOpen = isOpenProp && isHostOpen;
|
|
426
|
+
// Presentation outlives the controlled prop: a closing sheet stays mounted
|
|
427
|
+
// and in its native host through its exit, and only its motion completion
|
|
428
|
+
// (or a replace finishing) clears it. The open flip is derived during
|
|
429
|
+
// render; the close flip is the host's own event.
|
|
322
430
|
const [isPresented, setIsPresented] = useState(isOpen);
|
|
431
|
+
if (isOpen && !isPresented) {
|
|
432
|
+
setIsPresented(true);
|
|
433
|
+
}
|
|
323
434
|
const shouldPresent = isOpen || isPresented;
|
|
435
|
+
|
|
436
|
+
// The sheet's place in the stack of presented modal sheets. Default until
|
|
437
|
+
// the stack reports otherwise, which it does in the commit that presents
|
|
438
|
+
// the sheet, so the first painted frame already shows it.
|
|
439
|
+
const stackKeyRef = useRef<object>({});
|
|
440
|
+
const [stackView, setStackView] = useState<BottomSheetStackView>(
|
|
441
|
+
BOTTOM_SHEET_STACK_DEFAULT_VIEW,
|
|
442
|
+
);
|
|
443
|
+
const isOpenRef = useRef(isOpen);
|
|
444
|
+
isOpenRef.current = isOpen;
|
|
445
|
+
// Closed and being replaced by the sheet that opened in the same update:
|
|
446
|
+
// the panel is retained (stays, aligns, fades) instead of sliding out.
|
|
447
|
+
const isReplaced = !isOpen && isPresented && stackView.replacedMotion != null;
|
|
448
|
+
// Whether a replace pairs this close is known only once every sheet of the
|
|
449
|
+
// commit has reported to the registry, in the layout phase. Until the
|
|
450
|
+
// registry has answered (a synchronous re-render later, before paint) the
|
|
451
|
+
// panel holds its open pose: an exit pose rendered first and read back by
|
|
452
|
+
// the panel's own style query would start the exit transition, and the
|
|
453
|
+
// reversal into the retained pose would then snap the panel to rest. The
|
|
454
|
+
// flag is keyed to the close it settles: every change of `isOpen` starts
|
|
455
|
+
// it over, during render, and the layout effect below settles a close.
|
|
456
|
+
const [isCloseSettled, setIsCloseSettled] = useState(false);
|
|
457
|
+
const [settledIsOpen, setSettledIsOpen] = useState(isOpen);
|
|
458
|
+
if (settledIsOpen !== isOpen) {
|
|
459
|
+
setSettledIsOpen(isOpen);
|
|
460
|
+
setIsCloseSettled(false);
|
|
461
|
+
}
|
|
324
462
|
const panelState: BottomSheetPanelState = isOpen
|
|
325
|
-
? {kind: 'open', entering:
|
|
326
|
-
:
|
|
327
|
-
? {
|
|
328
|
-
|
|
463
|
+
? {kind: 'open', entering: stackView.isReplacing}
|
|
464
|
+
: isReplaced
|
|
465
|
+
? {
|
|
466
|
+
kind: 'retained',
|
|
467
|
+
motion: stackView.replacedMotion ?? 'covered',
|
|
468
|
+
alignmentOffset: stackView.alignmentOffset,
|
|
469
|
+
}
|
|
470
|
+
: isPresented
|
|
471
|
+
? isCloseSettled
|
|
472
|
+
? {kind: 'exiting'}
|
|
473
|
+
: {kind: 'open', entering: false}
|
|
474
|
+
: {kind: 'hidden'};
|
|
329
475
|
|
|
476
|
+
// Popover's sheet may turn Escape off on its own (bottomSheetEscape.ts).
|
|
477
|
+
const isEscapeAllowed = use(BottomSheetEscapeContext);
|
|
330
478
|
const dismissOnEscape = useCallback(() => {
|
|
331
|
-
if (isOpen && purpose !== 'required') {
|
|
479
|
+
if (isOpen && purpose !== 'required' && isEscapeAllowed) {
|
|
332
480
|
onOpenChange(false);
|
|
333
481
|
}
|
|
334
|
-
}, [isOpen, onOpenChange, purpose]);
|
|
482
|
+
}, [isEscapeAllowed, isOpen, onOpenChange, purpose]);
|
|
335
483
|
const dismissOnLightInteraction = useCallback(() => {
|
|
336
484
|
if (purpose === 'info') {
|
|
337
485
|
onOpenChange(false);
|
|
@@ -343,63 +491,224 @@ function StandaloneBottomSheet({
|
|
|
343
491
|
},
|
|
344
492
|
[],
|
|
345
493
|
);
|
|
494
|
+
const stackViewRef = useRef(stackView);
|
|
495
|
+
stackViewRef.current = stackView;
|
|
496
|
+
const scrimWriteRef = useRef<BottomSheetScrimWrite>({frame: null});
|
|
497
|
+
useEffect(() => () => cancelScrimWrite(scrimWriteRef.current), []);
|
|
498
|
+
const writeScrim = useCallback(
|
|
499
|
+
(opacity: '0' | '1') =>
|
|
500
|
+
writeScrimOpacity(dialogRef.current, opacity, scrimWriteRef.current),
|
|
501
|
+
[],
|
|
502
|
+
);
|
|
346
503
|
const handleScrimOpacity = useCallback((opacity: number) => {
|
|
504
|
+
// Only the sheet whose backdrop is the visible scrim thins it; a sheet
|
|
505
|
+
// stacked above it has a transparent backdrop that a drag must not reveal.
|
|
506
|
+
const view = stackViewRef.current;
|
|
507
|
+
if (view.isStacked && !view.ownsScrim) {
|
|
508
|
+
return;
|
|
509
|
+
}
|
|
347
510
|
dialogRef.current?.style.setProperty(
|
|
348
511
|
'--_sheet-scrim-opacity',
|
|
349
512
|
String(opacity),
|
|
350
513
|
);
|
|
351
514
|
}, []);
|
|
352
515
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
516
|
+
// A sheet joins the registry for as long as it is presented. For a modal
|
|
517
|
+
// sheet the registry shows the dialog (in open order, repairing same-commit
|
|
518
|
+
// ties before paint), moves focus into it when it lands on top, and reports
|
|
519
|
+
// the sheet's view. A non-modal sheet is a group of its own: it is shown as
|
|
520
|
+
// a manual popover (or by `show()` below the Popover API floor), never
|
|
521
|
+
// stacks or recedes, and only replaces other non-modal sheets.
|
|
522
|
+
useLayoutEffect(() => {
|
|
523
|
+
if (!shouldPresent) {
|
|
356
524
|
return;
|
|
357
525
|
}
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
526
|
+
const key = stackKeyRef.current;
|
|
527
|
+
return registerBottomSheet(
|
|
528
|
+
{
|
|
529
|
+
key,
|
|
530
|
+
getElement: () => dialogRef.current,
|
|
531
|
+
show: () => {
|
|
532
|
+
const dialog = dialogRef.current;
|
|
533
|
+
if (dialog == null || isSheetHostPresented(dialog)) {
|
|
534
|
+
return;
|
|
535
|
+
}
|
|
536
|
+
if (triggerRef.current == null) {
|
|
537
|
+
triggerRef.current = document.activeElement as HTMLElement | null;
|
|
538
|
+
}
|
|
539
|
+
if (!hasScrim) {
|
|
540
|
+
showSheetHostNonModal(dialog, panelRef.current);
|
|
541
|
+
return;
|
|
542
|
+
}
|
|
543
|
+
dialog.style.setProperty(
|
|
544
|
+
'--_sheet-scrim-opacity',
|
|
545
|
+
scrimOpacityForView(stackViewRef.current),
|
|
546
|
+
);
|
|
547
|
+
dialog.showModal();
|
|
548
|
+
},
|
|
549
|
+
hide: () => closeDialogKeepingFocus(dialogRef.current),
|
|
550
|
+
focus: reason => focusSheetPanel(panelRef.current, reason, hasScrim),
|
|
551
|
+
getReturnTarget: () =>
|
|
552
|
+
finalFocusRefRef.current?.current ?? triggerRef.current,
|
|
553
|
+
onView: view => {
|
|
554
|
+
stackViewRef.current = view;
|
|
555
|
+
setStackView(view);
|
|
556
|
+
// Who owns the scrim is the stack's decision; a change of owner
|
|
557
|
+
// lands with no fade (see writeScrimOpacity). A replaced sheet
|
|
558
|
+
// keeps the scrim it owns until the sheet replacing it takes it
|
|
559
|
+
// over; a closing sheet whose scrim an open sheet took over drops
|
|
560
|
+
// its backdrop the same way; a closing sheet that owned the scrim
|
|
561
|
+
// alone fades it out.
|
|
562
|
+
if (isOpenRef.current || view.replacedMotion != null) {
|
|
563
|
+
writeScrim(scrimOpacityForView(view));
|
|
564
|
+
} else if (view.isScrimTakenOver) {
|
|
565
|
+
writeScrim('0');
|
|
566
|
+
}
|
|
567
|
+
},
|
|
568
|
+
replaceable: {
|
|
569
|
+
getPanel: () => panelRef.current,
|
|
570
|
+
getOpener: () => triggerRef.current,
|
|
571
|
+
setOpener: opener => {
|
|
572
|
+
triggerRef.current = opener;
|
|
573
|
+
},
|
|
574
|
+
finish: () => {
|
|
575
|
+
// The registry has closed the dialog; focus stayed in the sheet
|
|
576
|
+
// that replaced this one, and so did the flow's opener.
|
|
577
|
+
triggerRef.current = null;
|
|
578
|
+
setIsPresented(false);
|
|
579
|
+
},
|
|
580
|
+
},
|
|
581
|
+
},
|
|
582
|
+
isOpenRef.current,
|
|
583
|
+
hasScrim,
|
|
584
|
+
);
|
|
585
|
+
}, [hasScrim, shouldPresent, writeScrim]);
|
|
586
|
+
useLayoutEffect(() => {
|
|
587
|
+
if (!isOpen) {
|
|
588
|
+
// Read before the browser's focus fixup for the exiting sheet's
|
|
589
|
+
// `inert` runs (at the next rendering opportunity), so this is where
|
|
590
|
+
// focus was when the person closed the sheet.
|
|
591
|
+
const dialog = dialogRef.current;
|
|
592
|
+
hadFocusAtCloseRef.current =
|
|
593
|
+
dialog != null && dialog.contains(dialog.ownerDocument.activeElement);
|
|
594
|
+
}
|
|
595
|
+
if (shouldPresent) {
|
|
596
|
+
setBottomSheetOpen(stackKeyRef.current, isOpen);
|
|
597
|
+
}
|
|
598
|
+
if (!isOpen) {
|
|
599
|
+
// The registry has had every sheet's report for this commit; a close
|
|
600
|
+
// that was not paired as a replace is an exit from here on.
|
|
601
|
+
// eslint-disable-next-line @eslint-react/set-state-in-effect -- settles the close once the registry has answered
|
|
602
|
+
setIsCloseSettled(true);
|
|
373
603
|
}
|
|
374
|
-
}, [hasScrim, isOpen]);
|
|
604
|
+
}, [hasScrim, isOpen, shouldPresent]);
|
|
375
605
|
|
|
606
|
+
// Host app-global surfaces (toasts) inside this sheet while it is an open
|
|
607
|
+
// modal, so they stay visible and operable above it. Every open scrim sheet
|
|
608
|
+
// supplies an outlet (each is an active native modal); the latest outlet —
|
|
609
|
+
// the one global hosts render into — follows the sheet stack's order among
|
|
610
|
+
// sheets rather than the order the sheets were supplied in, so a toast lands
|
|
611
|
+
// in the top sheet, and when that sheet closes the sheet it reveals becomes
|
|
612
|
+
// the latest sheet again and takes the toasts back; a Dialog opened from a
|
|
613
|
+
// sheet is supplied later and stays above every sheet. A closing sheet stays modal through its
|
|
614
|
+
// exit animation, but inert and hidden, so it stops supplying as soon as it
|
|
615
|
+
// starts closing. The registry reports a lone open sheet as the top one.
|
|
616
|
+
// Passive: it runs after the layout effects that present.
|
|
617
|
+
useModalOutlet(
|
|
618
|
+
dialogRef,
|
|
619
|
+
isOpen && hasScrim,
|
|
620
|
+
stackView.isTop,
|
|
621
|
+
'bottom-sheet',
|
|
622
|
+
);
|
|
623
|
+
// Closes a batch of same-commit opens; see sealBottomSheetBatch.
|
|
376
624
|
useEffect(() => {
|
|
377
|
-
|
|
378
|
-
|
|
625
|
+
sealBottomSheetBatch();
|
|
626
|
+
});
|
|
627
|
+
|
|
628
|
+
// The scrim at rest: one visible backdrop per stack while open (a sheet
|
|
629
|
+
// stacked above the owner keeps its own backdrop transparent, and a reopen
|
|
630
|
+
// during the exit brings the owner's back), fading out through the exit.
|
|
631
|
+
useLayoutEffect(() => {
|
|
632
|
+
const dialog = dialogRef.current;
|
|
633
|
+
if (dialog == null || !hasScrim) {
|
|
634
|
+
return;
|
|
379
635
|
}
|
|
380
|
-
|
|
636
|
+
// A replaced sheet keeps the scrim it owns until the sheet replacing it
|
|
637
|
+
// takes it over; see bottomSheetStack.
|
|
638
|
+
if (isOpen || isReplaced) {
|
|
639
|
+
dialog.style.setProperty(
|
|
640
|
+
'--_sheet-scrim-opacity',
|
|
641
|
+
scrimOpacityForView(stackViewRef.current),
|
|
642
|
+
);
|
|
643
|
+
} else if (isPresented) {
|
|
644
|
+
dialog.style.setProperty('--_sheet-scrim-opacity', '0');
|
|
645
|
+
}
|
|
646
|
+
}, [hasScrim, isOpen, isPresented, isReplaced]);
|
|
381
647
|
|
|
648
|
+
const handleMotionStart = useCallback((motion: BottomSheetPanelMotion) => {
|
|
649
|
+
reportBottomSheetMotion(stackKeyRef.current, 'start', motion);
|
|
650
|
+
}, []);
|
|
382
651
|
const handleMotionComplete = useCallback(
|
|
383
652
|
(motion: BottomSheetPanelMotion) => {
|
|
653
|
+
// The replace handoff's motions (entering as a replacer, aligning and
|
|
654
|
+
// fading as the replaced sheet) are the registry's to sequence.
|
|
655
|
+
reportBottomSheetMotion(stackKeyRef.current, 'complete', motion);
|
|
384
656
|
if (motion !== 'exiting' || isOpen) {
|
|
385
657
|
return;
|
|
386
658
|
}
|
|
659
|
+
// A sheet closing from code beneath open sheets leaves focus where it
|
|
660
|
+
// is: in the sheet on top. Its own close must not pull focus back to
|
|
661
|
+
// the element its dialog recorded, nor does it move it anywhere else.
|
|
662
|
+
if (hasScrim && stackViewRef.current.depth > 0) {
|
|
663
|
+
closeDialogKeepingFocus(dialogRef.current);
|
|
664
|
+
setIsPresented(false);
|
|
665
|
+
triggerRef.current = null;
|
|
666
|
+
return;
|
|
667
|
+
}
|
|
668
|
+
// Closing together with the other sheets of its stack ("Close all"):
|
|
669
|
+
// the registry returns focus once, after the last dialog has left.
|
|
670
|
+
if (hasScrim && isClosingTogether(stackKeyRef.current)) {
|
|
671
|
+
closeDialogKeepingFocus(dialogRef.current);
|
|
672
|
+
setIsPresented(false);
|
|
673
|
+
triggerRef.current = null;
|
|
674
|
+
reportClosedTogether(stackKeyRef.current);
|
|
675
|
+
return;
|
|
676
|
+
}
|
|
387
677
|
const dialog = dialogRef.current;
|
|
388
|
-
if (dialog
|
|
389
|
-
dialog
|
|
678
|
+
if (dialog != null) {
|
|
679
|
+
hideSheetHost(dialog);
|
|
390
680
|
}
|
|
391
681
|
setIsPresented(false);
|
|
392
682
|
// The returned focus shows the focus-visible ring only after keyboard
|
|
393
683
|
// input (`architecture:interaction-modality` INV1). The native close
|
|
394
684
|
// may already have restored focus to the target with a ring; the helper
|
|
395
685
|
// clears it first.
|
|
396
|
-
|
|
397
|
-
|
|
686
|
+
//
|
|
687
|
+
// With a sheet still open beneath this one, focus returns into that
|
|
688
|
+
// sheet: to the opener when it is there, else to the sheet's panel.
|
|
689
|
+
//
|
|
690
|
+
// An explicit `finalFocusRef` always receives focus, as released. The
|
|
691
|
+
// recorded opener of a non-modal sheet does so only if the person was
|
|
692
|
+
// still in the sheet when it closed (`hidePopover()` never moves
|
|
693
|
+
// focus, and the page behind it was live, so focus the person took
|
|
694
|
+
// elsewhere stays there).
|
|
695
|
+
const revealed = hasScrim
|
|
696
|
+
? getBottomSheetBeneath(stackKeyRef.current)
|
|
697
|
+
: null;
|
|
698
|
+
const returnTarget =
|
|
699
|
+
finalFocusRef?.current ??
|
|
700
|
+
(hasScrim || hadFocusAtCloseRef.current ? triggerRef.current : null);
|
|
701
|
+
if (
|
|
702
|
+
revealed != null &&
|
|
703
|
+
(returnTarget == null || !revealed.element.contains(returnTarget))
|
|
704
|
+
) {
|
|
705
|
+
revealed.focus();
|
|
706
|
+
} else if (returnTarget != null) {
|
|
398
707
|
focusForLastInput(returnTarget);
|
|
399
708
|
}
|
|
400
709
|
triggerRef.current = null;
|
|
401
710
|
},
|
|
402
|
-
[finalFocusRef, isOpen],
|
|
711
|
+
[finalFocusRef, hasScrim, isOpen],
|
|
403
712
|
);
|
|
404
713
|
|
|
405
714
|
useInteractionModalityTracking();
|
|
@@ -421,20 +730,32 @@ function StandaloneBottomSheet({
|
|
|
421
730
|
// rather than letting it close a layer behind it. `required` blocks too.
|
|
422
731
|
const {shouldDismissOnCloseRequest} = useLayerDismissal({
|
|
423
732
|
isActive: shouldPresent,
|
|
424
|
-
escapeBehavior:
|
|
733
|
+
escapeBehavior:
|
|
734
|
+
isOpen && purpose !== 'required' && isEscapeAllowed ? 'close' : 'block',
|
|
425
735
|
onDismiss: dismissOnEscape,
|
|
426
736
|
getContainer: () => dialogRef.current,
|
|
427
|
-
|
|
737
|
+
// A covered sheet is on screen but never the one a press is for: the
|
|
738
|
+
// dismissal stack ranks by tree nesting first, which would hand Escape to
|
|
739
|
+
// a covered sheet nested in another sheet's content ahead of a top sheet
|
|
740
|
+
// written outside it. Standing down while covered keeps Escape and the
|
|
741
|
+
// platform close request with the top sheet, as the sheet stack orders.
|
|
742
|
+
// A replaced sheet stands down the same way: the sheet that replaced it,
|
|
743
|
+
// registered before or after it, takes the press.
|
|
744
|
+
isPresent: () =>
|
|
745
|
+
isSheetHostPresented(dialogRef.current) &&
|
|
746
|
+
!stackViewRef.current.isCovered &&
|
|
747
|
+
stackViewRef.current.replacedMotion == null,
|
|
428
748
|
});
|
|
429
749
|
|
|
430
750
|
// The native `cancel` event is a close request the stack never saw a press
|
|
431
|
-
// for (Android back, the platform close watcher).
|
|
432
|
-
//
|
|
433
|
-
//
|
|
434
|
-
//
|
|
435
|
-
// layer dismisses, and nothing dismisses during an IME composition.
|
|
751
|
+
// for (Android back, the platform close watcher). Always preventDefault so
|
|
752
|
+
// the browser cannot close the controlled <dialog>, then answer with the
|
|
753
|
+
// stack's rules: only the top-most layer dismisses, and nothing dismisses
|
|
754
|
+
// during an IME composition.
|
|
436
755
|
const handleCancel = useCallback(
|
|
437
756
|
(event: React.SyntheticEvent<HTMLDialogElement>) => {
|
|
757
|
+
// A `cancel` that bubbles up from inside is not a close request: a
|
|
758
|
+
// file input fires it when its picker is dismissed, so it is left alone.
|
|
438
759
|
if (event.target !== event.currentTarget) {
|
|
439
760
|
return;
|
|
440
761
|
}
|
|
@@ -454,42 +775,84 @@ function StandaloneBottomSheet({
|
|
|
454
775
|
[dismissOnLightInteraction, hasScrim],
|
|
455
776
|
);
|
|
456
777
|
|
|
778
|
+
const isExiting = !isOpen && isPresented;
|
|
779
|
+
// A covered sheet is blocked by the browser: the top sheet's modal dialog
|
|
780
|
+
// makes everything outside it inert, this dialog included. A covered sheet
|
|
781
|
+
// that contains no presented sheet is marked inert and hidden as well, so
|
|
782
|
+
// the state is explicit; one that does contain the top sheet is left alone,
|
|
783
|
+
// because inert on it would reach the top sheet too.
|
|
784
|
+
const isInert = isExiting || stackView.isBlocked;
|
|
785
|
+
|
|
457
786
|
return (
|
|
458
787
|
<dialog
|
|
459
788
|
{...stylex.props(
|
|
460
789
|
styles.dialog,
|
|
461
790
|
shouldPresent && styles.dialogOpen,
|
|
791
|
+
shouldPresent && styles.dialogPanelHost,
|
|
792
|
+
// The dialog is the panel's positioner, so the stack's recede
|
|
793
|
+
// transforms the dialog: panel, grabber and all shrink and lift as
|
|
794
|
+
// one. The backdrop is not a descendant and stays put.
|
|
795
|
+
...stackPositionerStyles(stackView),
|
|
462
796
|
hasScrim && styles.scrim,
|
|
463
|
-
hasScrim &&
|
|
797
|
+
hasScrim && isExiting && styles.scrimClosing,
|
|
464
798
|
!hasScrim && styles.dialogNonModal,
|
|
465
799
|
)}
|
|
466
800
|
ref={dialogRef}
|
|
801
|
+
// A non-modal sheet is hosted in the top layer as a manual popover
|
|
802
|
+
// (no light dismiss, no backdrop), so sheets order by presentation
|
|
803
|
+
// without a page-level z-index. Below the Popover API floor the
|
|
804
|
+
// attribute is inert and the sheet falls back to show(), in page
|
|
805
|
+
// stacking order (the documented reduced fallback).
|
|
806
|
+
popover={hasScrim ? undefined : 'manual'}
|
|
467
807
|
aria-label={label}
|
|
468
|
-
aria-hidden={
|
|
808
|
+
aria-hidden={isInert ? 'true' : undefined}
|
|
469
809
|
aria-modal={hasScrim && isOpen ? 'true' : undefined}
|
|
470
810
|
role={purpose === 'required' ? 'alertdialog' : undefined}
|
|
471
|
-
inert={
|
|
811
|
+
inert={isInert ? true : undefined}
|
|
812
|
+
data-sheet-stack={
|
|
813
|
+
hasScrim ? stackStateAttribute(stackView, isOpen) : undefined
|
|
814
|
+
}
|
|
815
|
+
data-sheet-stack-depth={
|
|
816
|
+
hasScrim && stackView.depth > 0 ? stackView.depth : undefined
|
|
817
|
+
}
|
|
472
818
|
onCancel={handleCancel}
|
|
473
819
|
onClick={handleClick}>
|
|
474
|
-
<
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
820
|
+
<BottomSheetPanel
|
|
821
|
+
{...props}
|
|
822
|
+
ref={ref}
|
|
823
|
+
state={panelState}
|
|
824
|
+
isOpenRequested={isOpen}
|
|
825
|
+
height={height}
|
|
826
|
+
label={label}
|
|
827
|
+
snapPoints={snapPoints}
|
|
828
|
+
isSwipeDismissAllowed={purpose === 'info'}
|
|
829
|
+
isPageScrollLocked={shouldPresent && hasScrim}
|
|
830
|
+
xstyle={xstyle}
|
|
831
|
+
onDismiss={dismissOnLightInteraction}
|
|
832
|
+
onScrimOpacity={handleScrimOpacity}
|
|
833
|
+
onElementChange={handlePanelElementChange}
|
|
834
|
+
onMotionStart={handleMotionStart}
|
|
835
|
+
onMotionComplete={handleMotionComplete}>
|
|
836
|
+
<ModalAnnounceProvider
|
|
837
|
+
dialogRef={dialogRef}
|
|
838
|
+
isOpen={isOpen && hasScrim}>
|
|
839
|
+
<LayerDepthProvider>
|
|
840
|
+
{/* A sheet opened inside this one starts from Escape on. */}
|
|
841
|
+
<BottomSheetEscapeContext value>
|
|
842
|
+
<BottomSheetHostContext
|
|
843
|
+
value={
|
|
844
|
+
isOpen ? OPEN_BOTTOM_SHEET_HOST : CLOSED_BOTTOM_SHEET_HOST
|
|
845
|
+
}>
|
|
846
|
+
{children}
|
|
847
|
+
</BottomSheetHostContext>
|
|
848
|
+
</BottomSheetEscapeContext>
|
|
849
|
+
</LayerDepthProvider>
|
|
850
|
+
</ModalAnnounceProvider>
|
|
851
|
+
</BottomSheetPanel>
|
|
852
|
+
{/* Its own element, outside the panel's transform, so it stays flush
|
|
853
|
+
with the viewport's bottom edge at every detent; only while the
|
|
854
|
+
sheet is presented, so a closed sheet renders no extra element. */}
|
|
855
|
+
{shouldPresent && <BottomSheetEdgeTint />}
|
|
493
856
|
</dialog>
|
|
494
857
|
);
|
|
495
858
|
}
|
|
@@ -527,6 +890,7 @@ function SwitcherBottomSheetItem({
|
|
|
527
890
|
onSheetEnterStart,
|
|
528
891
|
onSheetTransitionComplete,
|
|
529
892
|
onSheetScrimOpacityChange,
|
|
893
|
+
stackView,
|
|
530
894
|
dialogProps,
|
|
531
895
|
onDialogCancel,
|
|
532
896
|
onDialogClick,
|
|
@@ -547,6 +911,10 @@ function SwitcherBottomSheetItem({
|
|
|
547
911
|
const isPresented = phase !== 'hidden';
|
|
548
912
|
const isTopSheet = phase === 'active' || phase === 'entering';
|
|
549
913
|
const ownsScrim = hasValidSheetId && isScrimOwner(sheetId);
|
|
914
|
+
// The flow is one level of the bottom-sheet stack; a sheet outside the flow
|
|
915
|
+
// covering it blocks every step dialog, the way a covered standalone sheet
|
|
916
|
+
// is blocked. A step is also inactive on its own terms during a handoff.
|
|
917
|
+
const isBlocked = isInactive || (hasScrim && stackView.isBlocked);
|
|
550
918
|
const isHostSheet = hasValidSheetId && hostSheet === sheetId;
|
|
551
919
|
const dialogRef = useRef<HTMLDialogElement | null>(null);
|
|
552
920
|
const dialogModeRef = useRef<'modal' | 'non-modal' | null>(null);
|
|
@@ -760,8 +1128,18 @@ function SwitcherBottomSheetItem({
|
|
|
760
1128
|
}
|
|
761
1129
|
aria-labelledby={switcherAriaLabelledBy}
|
|
762
1130
|
aria-modal={hasScrim && isInteractive ? 'true' : undefined}
|
|
763
|
-
aria-hidden={
|
|
764
|
-
inert={
|
|
1131
|
+
aria-hidden={isBlocked ? 'true' : undefined}
|
|
1132
|
+
inert={isBlocked ? true : undefined}
|
|
1133
|
+
data-sheet-stack={
|
|
1134
|
+
hasScrim && isPresented
|
|
1135
|
+
? stackStateAttribute(stackView, activeSheet != null)
|
|
1136
|
+
: undefined
|
|
1137
|
+
}
|
|
1138
|
+
data-sheet-stack-depth={
|
|
1139
|
+
hasScrim && isPresented && stackView.depth > 0
|
|
1140
|
+
? stackView.depth
|
|
1141
|
+
: undefined
|
|
1142
|
+
}
|
|
765
1143
|
role={purpose === 'required' ? 'alertdialog' : switcherDialogProps.role}
|
|
766
1144
|
onCancel={onDialogCancel}
|
|
767
1145
|
onClick={onDialogClick}
|
|
@@ -771,14 +1149,16 @@ function SwitcherBottomSheetItem({
|
|
|
771
1149
|
styles.positioner,
|
|
772
1150
|
!isPresented && styles.positionerHidden,
|
|
773
1151
|
isTopSheet && styles.positionerTop,
|
|
1152
|
+
...(hasScrim ? stackPositionerStyles(stackView) : []),
|
|
774
1153
|
)}
|
|
775
1154
|
hidden={!isPresented}
|
|
776
|
-
aria-hidden={
|
|
777
|
-
inert={
|
|
1155
|
+
aria-hidden={isBlocked ? 'true' : undefined}
|
|
1156
|
+
inert={isBlocked ? true : undefined}>
|
|
778
1157
|
<BottomSheetPanel
|
|
779
1158
|
{...props}
|
|
780
1159
|
ref={ref}
|
|
781
1160
|
state={panelState}
|
|
1161
|
+
isOpenRequested={hasValidSheetId && activeSheet === sheetId}
|
|
782
1162
|
height={height}
|
|
783
1163
|
label={label}
|
|
784
1164
|
snapPoints={snapPoints}
|
|
@@ -792,9 +1172,28 @@ function SwitcherBottomSheetItem({
|
|
|
792
1172
|
onMotionComplete={handleMotionComplete}>
|
|
793
1173
|
{/* A switcher item consumes its parent controller. Its content starts a
|
|
794
1174
|
fresh ownership scope so a nested BottomSheet is standalone unless
|
|
795
|
-
it establishes a nested BottomSheetSwitcher of its own.
|
|
1175
|
+
it establishes a nested BottomSheetSwitcher of its own. A
|
|
1176
|
+
standalone sheet in this step's content is presented only while
|
|
1177
|
+
the step is the interactive one: it leaves when the step is left,
|
|
1178
|
+
keeps its own isOpen, and returns with the step while still open. */}
|
|
796
1179
|
<BottomSheetSwitcherContext value={null}>
|
|
797
|
-
<
|
|
1180
|
+
<ModalAnnounceProvider
|
|
1181
|
+
dialogRef={dialogRef}
|
|
1182
|
+
isOpen={isPresented && hasScrim}>
|
|
1183
|
+
<LayerDepthProvider>
|
|
1184
|
+
{/* A sheet opened inside this one starts from Escape on. */}
|
|
1185
|
+
<BottomSheetEscapeContext value>
|
|
1186
|
+
<BottomSheetHostContext
|
|
1187
|
+
value={
|
|
1188
|
+
isInteractive
|
|
1189
|
+
? OPEN_BOTTOM_SHEET_HOST
|
|
1190
|
+
: CLOSED_BOTTOM_SHEET_HOST
|
|
1191
|
+
}>
|
|
1192
|
+
{children}
|
|
1193
|
+
</BottomSheetHostContext>
|
|
1194
|
+
</BottomSheetEscapeContext>
|
|
1195
|
+
</LayerDepthProvider>
|
|
1196
|
+
</ModalAnnounceProvider>
|
|
798
1197
|
</BottomSheetSwitcherContext>
|
|
799
1198
|
</BottomSheetPanel>
|
|
800
1199
|
</div>
|