@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
|
@@ -0,0 +1,721 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file TokenizerBottomSheet.tsx
|
|
7
|
+
* @input Uses BottomSheet, PanelSearchInput, Button, CheckboxIndicator,
|
|
8
|
+
* EmptyState, AlertDialog, Icon, Spinner, Text, useBusyAnnouncement, and
|
|
9
|
+
* the i18n translator
|
|
10
|
+
* @output Exports TokenizerBottomSheet — the touch surface of
|
|
11
|
+
* `Tokenizer experimental.presentation="bottom-sheet"`: one tall modal sheet
|
|
12
|
+
* with a search row on top, stable-order checkbox rows, progressive
|
|
13
|
+
* long-list rendering, an optional create row, and a confirmed Clear all
|
|
14
|
+
* @position Internal presentation surface of Tokenizer. Loaded on demand by
|
|
15
|
+
* Tokenizer.tsx so the inline combobox never carries it
|
|
16
|
+
* (`component:Tokenizer` PR6).
|
|
17
|
+
*
|
|
18
|
+
* Selection itself stays in Tokenizer: this surface receives `onAdd`,
|
|
19
|
+
* `onRemove`, and `onClearAll` so the add/remove announcements, the create
|
|
20
|
+
* sentinel, and the duplicate checks are the inline field's own. What lives
|
|
21
|
+
* here is the sheet session — the query, the fetched results, the row order
|
|
22
|
+
* snapshot taken when the sheet opens, and the rendered-row window.
|
|
23
|
+
*
|
|
24
|
+
* SYNC: When modified, update:
|
|
25
|
+
* - /packages/core/src/Tokenizer/Tokenizer.tsx (the trigger and the lazy host)
|
|
26
|
+
* - /packages/core/src/Tokenizer/Tokenizer.spec.md (FR16–FR24, AR6, PR6)
|
|
27
|
+
*/
|
|
28
|
+
import { useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
|
|
29
|
+
import * as stylex from '@stylexjs/stylex';
|
|
30
|
+
import { AlertDialog } from "../AlertDialog/AlertDialog.js";
|
|
31
|
+
import { BottomSheet } from "../BottomSheet/BottomSheet.js";
|
|
32
|
+
import { Button } from "../Button/Button.js";
|
|
33
|
+
import { EmptyState } from "../EmptyState/EmptyState.js";
|
|
34
|
+
import { PanelSearchInput } from "../Field/PanelSearchInput.js";
|
|
35
|
+
import { Icon } from "../Icon/index.js";
|
|
36
|
+
import { CheckboxIndicator } from "../Indicator/CheckboxIndicator.js";
|
|
37
|
+
import { Spinner } from "../Spinner/index.js";
|
|
38
|
+
import { useBusyAnnouncement } from "../hooks/useBusyAnnouncement.js";
|
|
39
|
+
import { useIsomorphicLayoutEffect } from "../hooks/useIsomorphicLayoutEffect.js";
|
|
40
|
+
import { useAnnounce } from "../hooks/useAnnounce.js";
|
|
41
|
+
import { useAnnounceRenderedText } from "../hooks/useAnnounceRenderedText.js";
|
|
42
|
+
import { Text } from "../Text/Text.js";
|
|
43
|
+
import { useTranslator } from "../i18n/index.js";
|
|
44
|
+
import { warnOnce } from "../utils/devWarning.js";
|
|
45
|
+
import "../theme/tokens.stylex.js";
|
|
46
|
+
import { colorVars, radiusVars, spacingVars } from "../theme/tokens.stylex.js";
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Sentinel prefix for the create row's synthetic item. Kept identical to the
|
|
50
|
+
* inline field's so Tokenizer's `handleAdd` recognizes it and turns it into a
|
|
51
|
+
* real item with a `create` change.
|
|
52
|
+
*/
|
|
53
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
54
|
+
const CREATABLE_ID_PREFIX = '__xds_create__';
|
|
55
|
+
/** Rows rendered per batch while a long list scrolls (`component:Tokenizer` FR21). */
|
|
56
|
+
export const LIST_RENDER_BATCH_SIZE = 50;
|
|
57
|
+
const EMPTY_RESULTS = [];
|
|
58
|
+
/** Distance from the list's end at which the next batch renders. */
|
|
59
|
+
const LIST_LOAD_MORE_THRESHOLD_PX = 200;
|
|
60
|
+
const styles = {
|
|
61
|
+
searchField: {
|
|
62
|
+
kAzted: "x1gg8mnh",
|
|
63
|
+
k8WAf4: "xce4md1",
|
|
64
|
+
$$css: true
|
|
65
|
+
},
|
|
66
|
+
rowLabel: {
|
|
67
|
+
kzQI83: "x1iyjqo2",
|
|
68
|
+
k7Eaqz: "xeuugli",
|
|
69
|
+
$$css: true
|
|
70
|
+
},
|
|
71
|
+
indicatorDisabled: {
|
|
72
|
+
kVAM5u: "x14i3s5s xmnqt3w",
|
|
73
|
+
$$css: true
|
|
74
|
+
},
|
|
75
|
+
createLabel: {
|
|
76
|
+
kzQI83: "x1iyjqo2",
|
|
77
|
+
k7Eaqz: "xeuugli",
|
|
78
|
+
$$css: true
|
|
79
|
+
},
|
|
80
|
+
footerAction: {
|
|
81
|
+
kzQI83: "x1iyjqo2",
|
|
82
|
+
kCS8Yb: "x1r8uery",
|
|
83
|
+
$$css: true
|
|
84
|
+
},
|
|
85
|
+
empty: {
|
|
86
|
+
kzQI83: "x1iyjqo2",
|
|
87
|
+
$$css: true
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* The touch surface of Tokenizer's `bottom-sheet` presentation.
|
|
92
|
+
*
|
|
93
|
+
* Rows keep their position while the sheet is open: the items selected when it
|
|
94
|
+
* opened lead, in `value` order, then selected items the results do not carry,
|
|
95
|
+
* then the results. Toggling a row changes its checkbox and nothing else; the
|
|
96
|
+
* next open takes a fresh snapshot and regroups selected-first.
|
|
97
|
+
*/
|
|
98
|
+
/**
|
|
99
|
+
* The sheet: BottomSheet around the content. Split in two so the content —
|
|
100
|
+
* search, rows, footer, and every announcement about them — is rendered
|
|
101
|
+
* inside the sheet's dialog, where `useAnnounce` routes into it while it is
|
|
102
|
+
* open (`spec:AST-086` FR14): a component that renders a modal and announces
|
|
103
|
+
* about its content is inside that modal only when the announcing code is.
|
|
104
|
+
*
|
|
105
|
+
* The outer part also tells the content how a close came about: a close the
|
|
106
|
+
* person made (Done, swipe, scrim, Escape) clears the query so the next open
|
|
107
|
+
* lists the bootstrap set, while a close the field forced (becoming disabled
|
|
108
|
+
* while open) keeps it (`component:Tokenizer` FR18).
|
|
109
|
+
*/
|
|
110
|
+
export function TokenizerBottomSheet({
|
|
111
|
+
isOpen,
|
|
112
|
+
onOpenChange,
|
|
113
|
+
finalFocusRef,
|
|
114
|
+
label,
|
|
115
|
+
...content
|
|
116
|
+
}) {
|
|
117
|
+
// The content owns the query; a close the person makes clears it through
|
|
118
|
+
// this handle, from the closing event, so a close the field forces by
|
|
119
|
+
// becoming disabled (which never comes through here) keeps it.
|
|
120
|
+
const clearQueryRef = useRef(null);
|
|
121
|
+
const requestClose = () => {
|
|
122
|
+
clearQueryRef.current?.();
|
|
123
|
+
onOpenChange(false);
|
|
124
|
+
};
|
|
125
|
+
return /*#__PURE__*/_jsx(BottomSheet, {
|
|
126
|
+
isOpen: isOpen,
|
|
127
|
+
onOpenChange: next => {
|
|
128
|
+
if (next) {
|
|
129
|
+
onOpenChange(true);
|
|
130
|
+
} else {
|
|
131
|
+
requestClose();
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
finalFocusRef: finalFocusRef,
|
|
135
|
+
label: label,
|
|
136
|
+
height: "tall",
|
|
137
|
+
padding: 0,
|
|
138
|
+
children: /*#__PURE__*/_jsx(TokenizerSheetContent, {
|
|
139
|
+
...content,
|
|
140
|
+
isOpen: isOpen,
|
|
141
|
+
label: label,
|
|
142
|
+
clearQueryRef: clearQueryRef,
|
|
143
|
+
onRequestClose: requestClose
|
|
144
|
+
})
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
TokenizerBottomSheet.displayName = 'TokenizerBottomSheet';
|
|
148
|
+
function TokenizerSheetContent({
|
|
149
|
+
isOpen,
|
|
150
|
+
initialQuery,
|
|
151
|
+
clearQueryRef,
|
|
152
|
+
onRequestClose,
|
|
153
|
+
label,
|
|
154
|
+
searchSource,
|
|
155
|
+
value,
|
|
156
|
+
isAtMax,
|
|
157
|
+
hasCreate,
|
|
158
|
+
maxMenuItems,
|
|
159
|
+
minQueryLength,
|
|
160
|
+
debounceMs,
|
|
161
|
+
emptySearchText,
|
|
162
|
+
onAdd,
|
|
163
|
+
onRemove,
|
|
164
|
+
onClearAll,
|
|
165
|
+
onChangeQuery
|
|
166
|
+
}) {
|
|
167
|
+
const t = useTranslator();
|
|
168
|
+
const searchRef = useRef(null);
|
|
169
|
+
const listRef = useRef(null);
|
|
170
|
+
// Whether a checkbox row holds focus, kept by the list's own focus events,
|
|
171
|
+
// so the hand-off below fires only when it was a row that a settled search
|
|
172
|
+
// removed — not the search field or a footer action.
|
|
173
|
+
const isRowFocusedRef = useRef(false);
|
|
174
|
+
// The Clear all confirmation is in the DOM only from the Clear all press
|
|
175
|
+
// until it closes — mounted open, as the sheet itself is mounted from the
|
|
176
|
+
// trigger's press — so an open sheet with no confirmation pending carries
|
|
177
|
+
// no closed dialog (`architecture:component-style-authoring` INV7). Dialog
|
|
178
|
+
// has an entrance animation and no exit, so a close is its unmount; the
|
|
179
|
+
// sheet then places focus itself, in the Effect below, once the modal is
|
|
180
|
+
// gone and the sheet's content can take focus again: on the search field
|
|
181
|
+
// after a confirmed clear — the clear is spent, and the search field is
|
|
182
|
+
// where the next selection starts (FR24, `spec:AST-085` FR4) — and back on
|
|
183
|
+
// Clear all after a cancel. A confirmed clear is announced there too — a
|
|
184
|
+
// change the person hears about, as an add or a remove is
|
|
185
|
+
// (`component:Tokenizer` AR6) — after the confirmation's dialog has gone,
|
|
186
|
+
// so the sheet is the modal on top and the words are delivered inside it
|
|
187
|
+
// (`spec:AST-086` FR14), not into a covered sheet. Every announcement the
|
|
188
|
+
// sheet makes goes through `useAnnounce`, called inside the sheet's
|
|
189
|
+
// dialog, so FR14 routes the words into it while the sheet is open.
|
|
190
|
+
const [isClearConfirmationOpen, setIsClearConfirmationOpen] = useState(false);
|
|
191
|
+
const clearAllRef = useRef(null);
|
|
192
|
+
const afterConfirmationRef = useRef(null);
|
|
193
|
+
const announce = useAnnounce();
|
|
194
|
+
const closeClearConfirmation = confirmed => {
|
|
195
|
+
afterConfirmationRef.current = confirmed ? 'search' : 'clear-all';
|
|
196
|
+
setIsClearConfirmationOpen(false);
|
|
197
|
+
};
|
|
198
|
+
useEffect(() => {
|
|
199
|
+
if (isClearConfirmationOpen || afterConfirmationRef.current == null) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
const destination = afterConfirmationRef.current;
|
|
203
|
+
afterConfirmationRef.current = null;
|
|
204
|
+
if (destination === 'search') {
|
|
205
|
+
searchRef.current?.focus();
|
|
206
|
+
announce(t('@astryx.tokenizer.allRemoved'));
|
|
207
|
+
} else {
|
|
208
|
+
clearAllRef.current?.focus();
|
|
209
|
+
}
|
|
210
|
+
}, [announce, isClearConfirmationOpen, t]);
|
|
211
|
+
const selectedIds = useMemo(() => new Set(value.map(v => v.id)), [value]);
|
|
212
|
+
|
|
213
|
+
// ---- sheet session ----
|
|
214
|
+
// Starts from the field's copy, which `onChangeQuery` keeps current, so the
|
|
215
|
+
// query survives the sheet's unmount between presentations (FR18).
|
|
216
|
+
const [query, setQuery] = useState(initialQuery);
|
|
217
|
+
const [sourceResults, setSourceResults] = useState([]);
|
|
218
|
+
const trimmedQueryForSearch = query.trim();
|
|
219
|
+
// A query shorter than `minQueryLength` is never searched: no source rows,
|
|
220
|
+
// no busy feedback, no empty state, no outcome announcement, as the inline
|
|
221
|
+
// field shows nothing for such a query (`component:Tokenizer` FR20).
|
|
222
|
+
const isBelowMinQuery = trimmedQueryForSearch !== '' && trimmedQueryForSearch.length < minQueryLength;
|
|
223
|
+
const results = isBelowMinQuery ? EMPTY_RESULTS : sourceResults;
|
|
224
|
+
// Whether a query is one the source is asked about: empty (the bootstrap
|
|
225
|
+
// set) or at least `minQueryLength`. Below that nothing is searched, so
|
|
226
|
+
// nothing is pending and no outcome is owed. One rule for every way a query
|
|
227
|
+
// comes to be: the initial one, an open, a change.
|
|
228
|
+
const willSearchFor = trimmed => trimmed === '' || trimmed.length >= minQueryLength;
|
|
229
|
+
// Pending from open, and from each query change, until that search settles
|
|
230
|
+
// (`component:Tokenizer` FR20). Set where the change happens rather than in
|
|
231
|
+
// the Effect, so the debounce window never shows a stale empty state. The
|
|
232
|
+
// sheet mounts already open (the field mounts it from the press), so its
|
|
233
|
+
// first render is its open: the initial state is derived from the initial
|
|
234
|
+
// query the way an open derives it — a kept query below the threshold
|
|
235
|
+
// (after a close the field forced, FR18) starts settled, not pending for a
|
|
236
|
+
// search that never runs.
|
|
237
|
+
const [isPending, setIsPending] = useState(() => !isOpen || willSearchFor(initialQuery.trim()));
|
|
238
|
+
const emptyStateRef = useRef(null);
|
|
239
|
+
// Each search that runs gets a number; its outcome is announced once, keyed
|
|
240
|
+
// on that number, so a stale effect from an earlier commit cannot claim a
|
|
241
|
+
// newer search's announcement and a rerender cannot repeat one. A first
|
|
242
|
+
// render whose query is not searched owes no announcement for search 0.
|
|
243
|
+
const [searchId, setSearchId] = useState(0);
|
|
244
|
+
const searchIdRef = useRef(0);
|
|
245
|
+
const announcedSearchIdRef = useRef(isOpen && !willSearchFor(initialQuery.trim()) ? 0 : -1);
|
|
246
|
+
const startSearch = () => {
|
|
247
|
+
searchIdRef.current += 1;
|
|
248
|
+
setSearchId(searchIdRef.current);
|
|
249
|
+
};
|
|
250
|
+
const [renderedItemCount, setRenderedItemCount] = useState(LIST_RENDER_BATCH_SIZE);
|
|
251
|
+
const seqRef = useRef(0);
|
|
252
|
+
const lastLoadScrollHeightRef = useRef(null);
|
|
253
|
+
const [selectedItemsAtOpen, setSelectedItemsAtOpen] = useState(value);
|
|
254
|
+
|
|
255
|
+
// Snapshot the selection and reset the rendered window in the render that
|
|
256
|
+
// opens the sheet, so the first open frame already shows selected-first
|
|
257
|
+
// order — an effect would paint one frame of the previous session's order.
|
|
258
|
+
const [wasOpen, setWasOpen] = useState(isOpen);
|
|
259
|
+
if (isOpen !== wasOpen) {
|
|
260
|
+
setWasOpen(isOpen);
|
|
261
|
+
if (isOpen) {
|
|
262
|
+
setSelectedItemsAtOpen(value);
|
|
263
|
+
setRenderedItemCount(LIST_RENDER_BATCH_SIZE);
|
|
264
|
+
// An open lists the bootstrap set, or searches a query kept across a
|
|
265
|
+
// close the field forced (FR18), and that load is pending; a kept
|
|
266
|
+
// query below the threshold leaves nothing pending, since no search
|
|
267
|
+
// runs for it.
|
|
268
|
+
const willSearch = willSearchFor(trimmedQueryForSearch);
|
|
269
|
+
setIsPending(willSearch);
|
|
270
|
+
if (willSearch) {
|
|
271
|
+
startSearch();
|
|
272
|
+
} else {
|
|
273
|
+
announcedSearchIdRef.current = searchIdRef.current;
|
|
274
|
+
}
|
|
275
|
+
lastLoadScrollHeightRef.current = null;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// Done, swipe, scrim, and Escape alike clear the query, so the next open
|
|
280
|
+
// lists the bootstrap set (FR18); a close the field forced (becoming
|
|
281
|
+
// disabled while open) keeps it, since nothing the person did changed it.
|
|
282
|
+
// Cleared and reported from the closing event through this handle, never
|
|
283
|
+
// from render (`architecture:react-component-runtime` INV2).
|
|
284
|
+
useImperativeHandle(clearQueryRef, () => () => {
|
|
285
|
+
if (query !== '') {
|
|
286
|
+
setQuery('');
|
|
287
|
+
onChangeQuery?.('');
|
|
288
|
+
}
|
|
289
|
+
}, [query, onChangeQuery]);
|
|
290
|
+
|
|
291
|
+
// The source is read through a ref at request time, as the inline field
|
|
292
|
+
// reads it inside its search callbacks: a caller that rebuilds the source
|
|
293
|
+
// object in render (`searchSource={{search, bootstrap}}`) then causes no
|
|
294
|
+
// new request on an unrelated render — a row toggle, a selection change —
|
|
295
|
+
// and the sheet asks the source only on open, on a query change, and on
|
|
296
|
+
// clearing. The ref is updated in a layout effect, before any request this
|
|
297
|
+
// commit makes.
|
|
298
|
+
const searchSourceRef = useRef(searchSource);
|
|
299
|
+
useIsomorphicLayoutEffect(() => {
|
|
300
|
+
searchSourceRef.current = searchSource;
|
|
301
|
+
}, [searchSource]);
|
|
302
|
+
// Synchronizes the row list with the caller's `searchSource`, an external
|
|
303
|
+
// system this component does not own: it asks the source for the bootstrap
|
|
304
|
+
// set or the query's results and copies the answer into state. The
|
|
305
|
+
// bootstrap set is requested at once — on open and when the query clears —
|
|
306
|
+
// as the inline field requests its focus bootstrap; only a typed query
|
|
307
|
+
// waits `debounceMs`. A layout effect, so a source that answers
|
|
308
|
+
// synchronously settles before the browser paints the open commit: the
|
|
309
|
+
// Loading row never reaches the screen and no busy start is announced for
|
|
310
|
+
// it (`component:Tokenizer` FR20). Cleanup clears the debounce timer so a
|
|
311
|
+
// superseded query never fetches, and the sequence guard drops a response
|
|
312
|
+
// that lands after a newer request, so the list never shows stale results
|
|
313
|
+
// (`architecture:react-component-runtime` INV3).
|
|
314
|
+
useIsomorphicLayoutEffect(() => {
|
|
315
|
+
if (!isOpen) {
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
const trimmed = query.trim();
|
|
319
|
+
const seq = ++seqRef.current;
|
|
320
|
+
if (trimmed !== '' && trimmed.length < minQueryLength) {
|
|
321
|
+
// Not searched; the derived `results` are already empty, and taking a
|
|
322
|
+
// sequence number retires a still-running search so its rows cannot
|
|
323
|
+
// land under this query.
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
const settle = items => {
|
|
327
|
+
if (seqRef.current === seq) {
|
|
328
|
+
setSourceResults(items.slice(0, maxMenuItems));
|
|
329
|
+
setIsPending(false);
|
|
330
|
+
}
|
|
331
|
+
};
|
|
332
|
+
const run = () => {
|
|
333
|
+
let answer;
|
|
334
|
+
const source = searchSourceRef.current;
|
|
335
|
+
try {
|
|
336
|
+
answer = trimmed === '' ? source.bootstrap() : source.search(query);
|
|
337
|
+
} catch {
|
|
338
|
+
answer = [];
|
|
339
|
+
}
|
|
340
|
+
if (Array.isArray(answer)) {
|
|
341
|
+
// An instant source settles in the same tick, before any busy
|
|
342
|
+
// feedback or announcement could start.
|
|
343
|
+
settle(answer);
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
// Anything else is awaited as a thenable — a native Promise, one from
|
|
347
|
+
// another realm, or a library's — as the inline field's `await` does.
|
|
348
|
+
void Promise.resolve(answer).then(settle, () => {
|
|
349
|
+
// A rejecting source settles to no results, as the inline field does:
|
|
350
|
+
// the previous query's rows are not this query's answer.
|
|
351
|
+
settle([]);
|
|
352
|
+
});
|
|
353
|
+
};
|
|
354
|
+
if (trimmed !== '' && debounceMs > 0) {
|
|
355
|
+
const timer = setTimeout(run, debounceMs);
|
|
356
|
+
return () => clearTimeout(timer);
|
|
357
|
+
}
|
|
358
|
+
run();
|
|
359
|
+
}, [isOpen, query, minQueryLength, maxMenuItems, debounceMs]);
|
|
360
|
+
const visibleItems = useMemo(() => {
|
|
361
|
+
const normalizedQuery = query.trim().toLowerCase();
|
|
362
|
+
const matchesQuery = item => normalizedQuery === '' || item.label.toLowerCase().includes(normalizedQuery);
|
|
363
|
+
const selectedAtOpenMatches = selectedItemsAtOpen.filter(matchesQuery);
|
|
364
|
+
const selectedAtOpenIds = new Set(selectedAtOpenMatches.map(item => item.id));
|
|
365
|
+
const resultIds = new Set(results.map(item => item.id));
|
|
366
|
+
const selectedItemsMissingFromResults = value.filter(item => !selectedAtOpenIds.has(item.id) && !resultIds.has(item.id) && matchesQuery(item));
|
|
367
|
+
|
|
368
|
+
// Selection changes update checkbox state without moving an existing row.
|
|
369
|
+
// The next open snapshots the latest value and applies selected-first order.
|
|
370
|
+
return [...selectedAtOpenMatches, ...selectedItemsMissingFromResults, ...results.filter(item => !selectedAtOpenIds.has(item.id))];
|
|
371
|
+
}, [query, results, selectedItemsAtOpen, value]);
|
|
372
|
+
const renderedItems = visibleItems.slice(0, renderedItemCount);
|
|
373
|
+
|
|
374
|
+
// A settled search may remove the row that holds focus: it was listed from
|
|
375
|
+
// the previous search and is not in this one. Focus would fall to the page
|
|
376
|
+
// body behind the modal; the search field takes it instead, where the next
|
|
377
|
+
// query starts (FR20, `spec:AST-085` FR4).
|
|
378
|
+
useEffect(() => {
|
|
379
|
+
if (!isOpen || isPending || !isRowFocusedRef.current) {
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
const active = document.activeElement;
|
|
383
|
+
if (active == null || active === document.body) {
|
|
384
|
+
isRowFocusedRef.current = false;
|
|
385
|
+
searchRef.current?.focus();
|
|
386
|
+
}
|
|
387
|
+
}, [isOpen, isPending, renderedItems]);
|
|
388
|
+
|
|
389
|
+
// `action` is declared on `SearchableItem` for the grid-adopting hosts; the
|
|
390
|
+
// sheet rows have not adopted it, so a row renders the item without the
|
|
391
|
+
// control and says so (`spec:AST-058` FR9), as the inline panel does.
|
|
392
|
+
useEffect(() => {
|
|
393
|
+
if (results.some(item => item.action != null)) {
|
|
394
|
+
warnOnce('tokenizer-sheet:item-action', 'Tokenizer', 'A result carries `action`, which the bottom-sheet rows do not render ' + 'yet; the item is shown without it.');
|
|
395
|
+
}
|
|
396
|
+
}, [results]);
|
|
397
|
+
|
|
398
|
+
// The pending Spinner below stays named, as the inline field's does
|
|
399
|
+
// (`family:input-fields` FR7), but is not a live region; the sheet announces
|
|
400
|
+
// each busy start once, through the region inside its own modal dialog
|
|
401
|
+
// (`spec:AST-086` FR8, FR14).
|
|
402
|
+
useBusyAnnouncement(isOpen && isPending, t('@astryx.typeahead.loading'), listRef);
|
|
403
|
+
const trimmedQuery = query.trim();
|
|
404
|
+
const createItem = useMemo(() => {
|
|
405
|
+
// Judged against this query's own results: while the search is pending
|
|
406
|
+
// `results` still hold the previous query's rows, and a create row then
|
|
407
|
+
// could offer a value the source already has.
|
|
408
|
+
if (!hasCreate || trimmedQuery === '' || isAtMax || isPending) {
|
|
409
|
+
return null;
|
|
410
|
+
}
|
|
411
|
+
const lowered = trimmedQuery.toLowerCase();
|
|
412
|
+
if (selectedIds.has(trimmedQuery) || value.some(item => item.label.toLowerCase() === lowered) || results.some(item => item.label.toLowerCase() === lowered)) {
|
|
413
|
+
return null;
|
|
414
|
+
}
|
|
415
|
+
return {
|
|
416
|
+
id: `${CREATABLE_ID_PREFIX}${trimmedQuery}`,
|
|
417
|
+
label: t('@astryx.tokenizer.create', {
|
|
418
|
+
value: trimmedQuery
|
|
419
|
+
})
|
|
420
|
+
};
|
|
421
|
+
}, [hasCreate, trimmedQuery, isAtMax, isPending, selectedIds, value, results, t]);
|
|
422
|
+
const resetListWindow = () => {
|
|
423
|
+
lastLoadScrollHeightRef.current = null;
|
|
424
|
+
setRenderedItemCount(LIST_RENDER_BATCH_SIZE);
|
|
425
|
+
};
|
|
426
|
+
const handleQueryChange = next => {
|
|
427
|
+
resetListWindow();
|
|
428
|
+
const willSearch = willSearchFor(next.trim());
|
|
429
|
+
// A search still unsettled from the previous query is retired
|
|
430
|
+
// unannounced, so "0 results" is never said for a query that was never
|
|
431
|
+
// searched. Only a query that runs gets a search number.
|
|
432
|
+
setIsPending(willSearch);
|
|
433
|
+
if (willSearch) {
|
|
434
|
+
startSearch();
|
|
435
|
+
} else {
|
|
436
|
+
announcedSearchIdRef.current = searchIdRef.current;
|
|
437
|
+
}
|
|
438
|
+
setQuery(next);
|
|
439
|
+
onChangeQuery?.(next);
|
|
440
|
+
};
|
|
441
|
+
const searchLabel = t('@astryx.tokenizer.search', {
|
|
442
|
+
label
|
|
443
|
+
});
|
|
444
|
+
// An empty state only once the search has settled; while pending the busy
|
|
445
|
+
// row above stands in for it.
|
|
446
|
+
const isQueryEmpty = trimmedQuery === '';
|
|
447
|
+
// An empty state is a searched query's answer. An empty query that lists
|
|
448
|
+
// nothing — nothing selected and a source whose bootstrap set is empty,
|
|
449
|
+
// such as a search-only source — shows only the search field, no list, no
|
|
450
|
+
// message, and announces nothing, as the inline field opens no menu and
|
|
451
|
+
// reports nothing for a bootstrap that returned nothing (`component:Tokenizer`
|
|
452
|
+
// FR20): nothing has failed, typing is what finds items.
|
|
453
|
+
const isSettledEmpty = !isPending && !isBelowMinQuery && !isQueryEmpty && visibleItems.length === 0 && createItem == null;
|
|
454
|
+
const isSettledBlank = !isPending && !isBelowMinQuery && isQueryEmpty && visibleItems.length === 0 && createItem == null;
|
|
455
|
+
const noResultsTitle = typeof emptySearchText === 'string' ? emptySearchText : t('@astryx.typeahead.emptySearchResults');
|
|
456
|
+
|
|
457
|
+
// How each search ended, once per settle (`component:Tokenizer` AR6),
|
|
458
|
+
// keyed on the search's number. The result count is an action announcement
|
|
459
|
+
// this owner makes. The empty state's words are rendered content: the
|
|
460
|
+
// default EmptyState announces its own title and description once when it
|
|
461
|
+
// appears (its own contract, `spec:AST-086` FR2, FR11), so the sheet speaks
|
|
462
|
+
// nothing for it; a caller's `emptySearchText` element is the sheet's own
|
|
463
|
+
// rendered content, so the shared own-content module reads and speaks it
|
|
464
|
+
// (`spec:AST-056` FR3, `architecture:react-component-runtime` INV10). Both
|
|
465
|
+
// go through `useAnnounce`, which, called from inside the sheet's dialog,
|
|
466
|
+
// routes into it while the sheet is open (`spec:AST-086` FR14).
|
|
467
|
+
const hasCustomEmptyElement = typeof emptySearchText !== 'string' && emptySearchText != null;
|
|
468
|
+
useAnnounceRenderedText(emptyStateRef, isOpen && isSettledEmpty && hasCustomEmptyElement, String(searchId));
|
|
469
|
+
useEffect(() => {
|
|
470
|
+
if (!isOpen || isPending || announcedSearchIdRef.current === searchId) {
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
announcedSearchIdRef.current = searchId;
|
|
474
|
+
if (!isSettledEmpty && !isQueryEmpty) {
|
|
475
|
+
// The rows the sheet lists for this query — the source's results,
|
|
476
|
+
// capped by `maxMenuItems`, selected items the source did not return,
|
|
477
|
+
// such as a created value, and the create row when it is offered — as
|
|
478
|
+
// the inline field announces the entries it shows (its create entry
|
|
479
|
+
// included), not the source's count.
|
|
480
|
+
announce(t('@astryx.typeahead.resultCount', {
|
|
481
|
+
count: visibleItems.length + (createItem == null ? 0 : 1)
|
|
482
|
+
}));
|
|
483
|
+
}
|
|
484
|
+
}, [announce, createItem, isOpen, isPending, isQueryEmpty, isSettledEmpty, visibleItems.length, searchId, t]);
|
|
485
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
486
|
+
...{
|
|
487
|
+
className: "x78zum5 xdt5ytf x5yr21d x2lwn1j xrrkdod xoxd1wu xvmdzux"
|
|
488
|
+
},
|
|
489
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
490
|
+
...{
|
|
491
|
+
className: "x1wesfrj"
|
|
492
|
+
},
|
|
493
|
+
children: /*#__PURE__*/_jsx(PanelSearchInput, {
|
|
494
|
+
ref: searchRef,
|
|
495
|
+
label: searchLabel,
|
|
496
|
+
clearLabel: t('@astryx.textInput.clearLabel', {
|
|
497
|
+
label: searchLabel
|
|
498
|
+
}),
|
|
499
|
+
placeholder: t('@astryx.tokenizer.searchPlaceholder'),
|
|
500
|
+
value: query,
|
|
501
|
+
onValueChange: handleQueryChange,
|
|
502
|
+
fieldXstyle: styles.searchField
|
|
503
|
+
})
|
|
504
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
505
|
+
ref: listRef,
|
|
506
|
+
...{
|
|
507
|
+
className: "x78zum5 xdt5ytf x1iyjqo2 x1odjw0f x2lwn1j"
|
|
508
|
+
},
|
|
509
|
+
"aria-busy": isPending || undefined,
|
|
510
|
+
"data-rendered-count": renderedItems.length,
|
|
511
|
+
"data-total-count": visibleItems.length,
|
|
512
|
+
onFocusCapture: event => {
|
|
513
|
+
isRowFocusedRef.current = event.target instanceof HTMLElement && event.target.getAttribute('role') === 'checkbox';
|
|
514
|
+
},
|
|
515
|
+
onBlurCapture: event => {
|
|
516
|
+
// A row unmounted while focused fires no blur, so a blur that
|
|
517
|
+
// does arrive is a real move elsewhere.
|
|
518
|
+
if (event.relatedTarget != null) {
|
|
519
|
+
isRowFocusedRef.current = false;
|
|
520
|
+
}
|
|
521
|
+
},
|
|
522
|
+
onScroll: event => {
|
|
523
|
+
const list = event.currentTarget;
|
|
524
|
+
const distanceFromBottom = list.scrollHeight - list.scrollTop - list.clientHeight;
|
|
525
|
+
if (distanceFromBottom <= LIST_LOAD_MORE_THRESHOLD_PX && lastLoadScrollHeightRef.current !== list.scrollHeight) {
|
|
526
|
+
lastLoadScrollHeightRef.current = list.scrollHeight;
|
|
527
|
+
setRenderedItemCount(current => Math.min(current + LIST_RENDER_BATCH_SIZE, visibleItems.length));
|
|
528
|
+
}
|
|
529
|
+
},
|
|
530
|
+
children: [createItem ? /*#__PURE__*/_jsxs("div", {
|
|
531
|
+
...{
|
|
532
|
+
className: "x78zum5 x6s0dn4 x1txdalj xh8yej3 x1gg8mnh xce4md1 x7a5moj"
|
|
533
|
+
},
|
|
534
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
535
|
+
type: "body",
|
|
536
|
+
xstyle: styles.createLabel,
|
|
537
|
+
children: createItem.label
|
|
538
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
539
|
+
label: t('@astryx.tokenizer.add'),
|
|
540
|
+
"aria-label": t('@astryx.tokenizer.addValue', {
|
|
541
|
+
value: trimmedQuery
|
|
542
|
+
}),
|
|
543
|
+
variant: "secondary",
|
|
544
|
+
size: "lg",
|
|
545
|
+
onClick: () => {
|
|
546
|
+
if (onAdd(createItem, {
|
|
547
|
+
silent: true
|
|
548
|
+
})) {
|
|
549
|
+
// The created value, as the inline field announces it; the
|
|
550
|
+
// item's label is the row's caption ("Create …").
|
|
551
|
+
announce(t('@astryx.tokenizer.tokenAdded', {
|
|
552
|
+
label: trimmedQuery
|
|
553
|
+
}));
|
|
554
|
+
}
|
|
555
|
+
// The same path a typed change takes, so the bootstrap
|
|
556
|
+
// reload shows its pending state and reports the change.
|
|
557
|
+
handleQueryChange('');
|
|
558
|
+
// The row this control sits on is gone with the query; the
|
|
559
|
+
// search field is where the next value starts (FR22).
|
|
560
|
+
searchRef.current?.focus();
|
|
561
|
+
}
|
|
562
|
+
})]
|
|
563
|
+
}) : null, isPending ?
|
|
564
|
+
/*#__PURE__*/
|
|
565
|
+
// Named busy feedback while the source works
|
|
566
|
+
// (`family:input-fields` FR7), above any rows still listed from
|
|
567
|
+
// the previous search; the empty states wait for it.
|
|
568
|
+
_jsx("div", {
|
|
569
|
+
...{
|
|
570
|
+
className: "x78zum5 x6s0dn4 xl56j7k x1gg8mnh xce4md1"
|
|
571
|
+
},
|
|
572
|
+
children: /*#__PURE__*/_jsx(Spinner, {
|
|
573
|
+
size: "md",
|
|
574
|
+
role: "img",
|
|
575
|
+
"aria-label": t('@astryx.typeahead.loading')
|
|
576
|
+
})
|
|
577
|
+
}) : null, isSettledEmpty ? /*#__PURE__*/_jsx("div", {
|
|
578
|
+
ref: emptyStateRef,
|
|
579
|
+
...{
|
|
580
|
+
className: "xjp7ctv"
|
|
581
|
+
},
|
|
582
|
+
children: hasCustomEmptyElement ? /*#__PURE__*/_jsx("div", {
|
|
583
|
+
...{
|
|
584
|
+
className: "x1iyjqo2"
|
|
585
|
+
},
|
|
586
|
+
children: emptySearchText
|
|
587
|
+
}) : /*#__PURE__*/_jsx(EmptyState, {
|
|
588
|
+
icon: /*#__PURE__*/_jsx(Icon, {
|
|
589
|
+
icon: "search",
|
|
590
|
+
size: "lg",
|
|
591
|
+
color: "secondary"
|
|
592
|
+
}),
|
|
593
|
+
title: noResultsTitle,
|
|
594
|
+
description: t('@astryx.tokenizer.noResultsDescription'),
|
|
595
|
+
isCompact: true,
|
|
596
|
+
xstyle: styles.empty
|
|
597
|
+
})
|
|
598
|
+
}) : isSettledBlank ? null :
|
|
599
|
+
/*#__PURE__*/
|
|
600
|
+
// A list of items: each listitem carries its place in the whole
|
|
601
|
+
// set, not the rendered window, so a person moving through the
|
|
602
|
+
// rows hears "n of total" and learns more exist before the list
|
|
603
|
+
// has scrolled (FR21). The position attributes live on the
|
|
604
|
+
// listitem because `checkbox` does not admit them.
|
|
605
|
+
_jsx("div", {
|
|
606
|
+
role: "list",
|
|
607
|
+
...{
|
|
608
|
+
className: "x78zum5 xdt5ytf"
|
|
609
|
+
},
|
|
610
|
+
children: renderedItems.map((item, index) => {
|
|
611
|
+
const isSelected = selectedIds.has(item.id);
|
|
612
|
+
const rowDisabled = !isSelected && isAtMax;
|
|
613
|
+
const isLastRendered = index === renderedItems.length - 1;
|
|
614
|
+
return /*#__PURE__*/_jsx("div", {
|
|
615
|
+
role: "listitem",
|
|
616
|
+
"aria-setsize": visibleItems.length,
|
|
617
|
+
"aria-posinset": index + 1,
|
|
618
|
+
...{
|
|
619
|
+
className: "xjp7ctv"
|
|
620
|
+
},
|
|
621
|
+
children: /*#__PURE__*/_jsxs("button", {
|
|
622
|
+
type: "button",
|
|
623
|
+
role: "checkbox",
|
|
624
|
+
"aria-checked": isSelected,
|
|
625
|
+
"aria-label": item.label,
|
|
626
|
+
"aria-disabled": rowDisabled || undefined,
|
|
627
|
+
onFocus: isLastRendered && renderedItems.length < visibleItems.length ? () => {
|
|
628
|
+
// Focus reaching the last rendered row renders the
|
|
629
|
+
// next batch, so Tab and arrow keys reach every row
|
|
630
|
+
// without a scroll (FR21).
|
|
631
|
+
setRenderedItemCount(current => Math.min(current + LIST_RENDER_BATCH_SIZE, visibleItems.length));
|
|
632
|
+
} : undefined,
|
|
633
|
+
onClick: () => {
|
|
634
|
+
if (rowDisabled) {
|
|
635
|
+
return;
|
|
636
|
+
}
|
|
637
|
+
if (isSelected) {
|
|
638
|
+
if (onRemove(item, {
|
|
639
|
+
silent: true
|
|
640
|
+
})) {
|
|
641
|
+
announce(t('@astryx.tokenizer.tokenRemoved', {
|
|
642
|
+
label: item.label
|
|
643
|
+
}));
|
|
644
|
+
}
|
|
645
|
+
} else if (onAdd(item, {
|
|
646
|
+
silent: true
|
|
647
|
+
})) {
|
|
648
|
+
announce(t('@astryx.tokenizer.tokenAdded', {
|
|
649
|
+
label: item.label
|
|
650
|
+
}));
|
|
651
|
+
}
|
|
652
|
+
},
|
|
653
|
+
...{
|
|
654
|
+
0: {
|
|
655
|
+
className: "x78zum5 x6s0dn4 x1qughib x1txdalj xh8yej3 x1gg8mnh xce4md1 x7a5moj xc342km xh6dtrn xjbqb8w x1tgivj0 xjb2p0i x1yc453h x1ypdohk x16khyan"
|
|
656
|
+
},
|
|
657
|
+
1: {
|
|
658
|
+
className: "x78zum5 x6s0dn4 x1qughib x1txdalj xh8yej3 x1gg8mnh xce4md1 x7a5moj xc342km xh6dtrn xjbqb8w xjb2p0i x1yc453h x1ypdohk x16khyan x1tgivj0 x1bhcspo"
|
|
659
|
+
}
|
|
660
|
+
}[!!rowDisabled << 0],
|
|
661
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
662
|
+
type: "body",
|
|
663
|
+
color: rowDisabled ? 'inherit' : undefined,
|
|
664
|
+
xstyle: styles.rowLabel,
|
|
665
|
+
children: item.label
|
|
666
|
+
}), /*#__PURE__*/_jsx(CheckboxIndicator, {
|
|
667
|
+
state: isSelected ? 'checked' : 'unchecked',
|
|
668
|
+
size: "md",
|
|
669
|
+
isDisabled: rowDisabled,
|
|
670
|
+
xstyle: rowDisabled ? styles.indicatorDisabled : undefined
|
|
671
|
+
})]
|
|
672
|
+
})
|
|
673
|
+
}, item.id);
|
|
674
|
+
})
|
|
675
|
+
})]
|
|
676
|
+
}), isQueryEmpty && /*#__PURE__*/_jsxs("div", {
|
|
677
|
+
...{
|
|
678
|
+
className: "x78zum5 x6s0dn4 x1txdalj x1vlblms xr1yuqi"
|
|
679
|
+
},
|
|
680
|
+
children: [/*#__PURE__*/_jsx(Button, {
|
|
681
|
+
label: t('@astryx.tokenizer.clearAll'),
|
|
682
|
+
variant: "secondary",
|
|
683
|
+
size: "lg",
|
|
684
|
+
isDisabled: value.length === 0
|
|
685
|
+
// With a tooltip, Button's disabled mode is `aria-disabled`: the
|
|
686
|
+
// action keeps its focus order and says why it does nothing
|
|
687
|
+
// (`spec:AST-085` FR1), instead of leaving the tab order as a
|
|
688
|
+
// natively disabled button does — a confirmed Clear all returns
|
|
689
|
+
// focus here before the search field takes it (FR24).
|
|
690
|
+
,
|
|
691
|
+
tooltip: value.length === 0 ? t('@astryx.tokenizer.nothingToClear') : undefined,
|
|
692
|
+
ref: clearAllRef,
|
|
693
|
+
onClick: () => setIsClearConfirmationOpen(true),
|
|
694
|
+
xstyle: styles.footerAction
|
|
695
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
696
|
+
label: t('@astryx.tokenizer.done'),
|
|
697
|
+
variant: "primary",
|
|
698
|
+
size: "lg",
|
|
699
|
+
onClick: onRequestClose,
|
|
700
|
+
xstyle: styles.footerAction
|
|
701
|
+
})]
|
|
702
|
+
}), isClearConfirmationOpen && /*#__PURE__*/_jsx(AlertDialog, {
|
|
703
|
+
isOpen: true,
|
|
704
|
+
onOpenChange: next => {
|
|
705
|
+
if (!next) {
|
|
706
|
+
closeClearConfirmation(false);
|
|
707
|
+
}
|
|
708
|
+
},
|
|
709
|
+
title: t('@astryx.tokenizer.clearAllTitle'),
|
|
710
|
+
description: t('@astryx.tokenizer.clearAllDescription', {
|
|
711
|
+
label
|
|
712
|
+
}),
|
|
713
|
+
actionLabel: t('@astryx.tokenizer.clearSelection'),
|
|
714
|
+
onAction: () => {
|
|
715
|
+
onClearAll();
|
|
716
|
+
closeClearConfirmation(true);
|
|
717
|
+
}
|
|
718
|
+
})]
|
|
719
|
+
});
|
|
720
|
+
}
|
|
721
|
+
TokenizerSheetContent.displayName = 'TokenizerSheetContent';
|