@astryxdesign/core 0.7.5-canary.fccd771 → 0.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +211 -10
- package/README.md +15 -12
- package/dist/AlertDialog/AlertDialog.js +1 -1
- package/dist/AppShell/AppShell.d.ts +0 -22
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +155 -1
- package/dist/Avatar/AvatarStatusDot.js +2 -2
- package/dist/Badge/Badge.d.ts.map +1 -1
- package/dist/Badge/Badge.js +18 -2
- package/dist/Banner/Banner.d.ts +1 -0
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +64 -9
- package/dist/BottomSheet/BottomSheet.d.ts +53 -5
- package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +435 -198
- package/dist/BottomSheet/BottomSheetHostContext.d.ts +8 -0
- package/dist/BottomSheet/BottomSheetHostContext.d.ts.map +1 -0
- package/dist/BottomSheet/BottomSheetHostContext.js +35 -0
- package/dist/BottomSheet/BottomSheetPanel.d.ts +9 -1
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +77 -23
- package/dist/BottomSheet/BottomSheetSwitcher.d.ts +53 -14
- package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetSwitcher.js +229 -27
- package/dist/BottomSheet/BottomSheetSwitcherContext.d.ts +6 -0
- package/dist/BottomSheet/BottomSheetSwitcherContext.d.ts.map +1 -1
- package/dist/BottomSheet/bottomSheetEscape.d.ts +3 -0
- package/dist/BottomSheet/bottomSheetEscape.d.ts.map +1 -0
- package/dist/BottomSheet/bottomSheetEscape.js +20 -0
- package/dist/BottomSheet/bottomSheetStack.d.ts +262 -0
- package/dist/BottomSheet/bottomSheetStack.d.ts.map +1 -0
- package/dist/BottomSheet/bottomSheetStack.js +1675 -0
- package/dist/BottomSheet/useSheetGestures.d.ts +19 -3
- package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
- package/dist/BottomSheet/useSheetGestures.js +43 -14
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +36 -3
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +18 -7
- package/dist/Chat/ChatComposer.d.ts.map +1 -1
- package/dist/Chat/ChatComposer.js +25 -32
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +55 -16
- package/dist/Chat/ChatMessageMetadata.js +2 -2
- package/dist/Chat/ChatPastedTextToken.d.ts.map +1 -1
- package/dist/Chat/ChatPastedTextToken.js +7 -6
- package/dist/Chat/ChatToolCalls.js +4 -4
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +10 -6
- package/dist/CodeBlock/CodeBlock.d.ts +25 -2
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +58 -19
- package/dist/CodeBlock/grammar.d.ts +134 -0
- package/dist/CodeBlock/grammar.d.ts.map +1 -0
- package/dist/CodeBlock/grammar.js +219 -0
- package/dist/CodeBlock/index.d.ts +2 -0
- package/dist/CodeBlock/index.d.ts.map +1 -1
- package/dist/CodeBlock/index.js +1 -0
- package/dist/CodeBlock/languages/dockerfile.d.ts +3 -0
- package/dist/CodeBlock/languages/dockerfile.d.ts.map +1 -0
- package/dist/CodeBlock/languages/dockerfile.js +45 -0
- package/dist/CodeBlock/languages/graphql.d.ts +3 -0
- package/dist/CodeBlock/languages/graphql.d.ts.map +1 -0
- package/dist/CodeBlock/languages/graphql.js +27 -0
- package/dist/CodeBlock/languages/java.d.ts +3 -0
- package/dist/CodeBlock/languages/java.d.ts.map +1 -0
- package/dist/CodeBlock/languages/java.js +24 -0
- package/dist/CodeBlock/languages/lua.d.ts +3 -0
- package/dist/CodeBlock/languages/lua.d.ts.map +1 -0
- package/dist/CodeBlock/languages/lua.js +21 -0
- package/dist/CodeBlock/languages/objective-c.d.ts +3 -0
- package/dist/CodeBlock/languages/objective-c.d.ts.map +1 -0
- package/dist/CodeBlock/languages/objective-c.js +27 -0
- package/dist/CodeBlock/languages/powershell.d.ts +3 -0
- package/dist/CodeBlock/languages/powershell.d.ts.map +1 -0
- package/dist/CodeBlock/languages/powershell.js +30 -0
- package/dist/CodeBlock/languages/ruby.d.ts +3 -0
- package/dist/CodeBlock/languages/ruby.d.ts.map +1 -0
- package/dist/CodeBlock/languages/ruby.js +24 -0
- package/dist/CodeBlock/languages/thrift.d.ts +3 -0
- package/dist/CodeBlock/languages/thrift.d.ts.map +1 -0
- package/dist/CodeBlock/languages/thrift.js +18 -0
- package/dist/CodeBlock/languages/toml.d.ts +3 -0
- package/dist/CodeBlock/languages/toml.d.ts.map +1 -0
- package/dist/CodeBlock/languages/toml.js +53 -0
- package/dist/CodeBlock/tokenizer.d.ts +8 -4
- package/dist/CodeBlock/tokenizer.d.ts.map +1 -1
- package/dist/CodeBlock/tokenizer.js +158 -8
- package/dist/Collapsible/Collapsible.d.ts +8 -1
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +84 -2
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +15 -1
- package/dist/CommandPalette/CommandPaletteEmpty.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteEmpty.js +1 -0
- package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteInput.js +14 -2
- package/dist/CommandPalette/busyStartSettle.d.ts +4 -0
- package/dist/CommandPalette/busyStartSettle.d.ts.map +1 -0
- package/dist/CommandPalette/busyStartSettle.js +23 -0
- package/dist/ComplexSelector/ComplexSelector.d.ts +20 -2
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +42 -7
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +48 -13
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +12 -5
- package/dist/DateInput/NativeDateField.d.ts.map +1 -1
- package/dist/DateInput/NativeDateField.js +2 -1
- package/dist/DateInput/TouchDateField.d.ts.map +1 -1
- package/dist/DateInput/TouchDateField.js +2 -1
- package/dist/DateInput/Wheel.d.ts.map +1 -1
- package/dist/DateInput/Wheel.js +1 -1
- package/dist/Dialog/Dialog.d.ts +4 -0
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +20 -8
- package/dist/Drawer/Drawer.d.ts.map +1 -1
- package/dist/Drawer/Drawer.js +18 -13
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +34 -30
- package/dist/DropdownMenu/DropdownMenuGroup.d.ts +7 -4
- package/dist/DropdownMenu/DropdownMenuGroup.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuGroup.js +10 -4
- package/dist/DropdownMenu/DropdownMenuItem.js +3 -3
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +10 -5
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.js +13 -5
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts +6 -6
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +0 -3
- package/dist/DropdownMenu/MenuBottomSheet.d.ts +11 -4
- package/dist/DropdownMenu/MenuBottomSheet.d.ts.map +1 -1
- package/dist/DropdownMenu/MenuBottomSheet.js +35 -9
- package/dist/DropdownMenu/MenuBottomSheetActionList.js +3 -3
- package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts +2 -0
- package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts.map +1 -1
- package/dist/DropdownMenu/lazyMenuBottomSheet.js +25 -3
- package/dist/DropdownMenu/menuBottomSheet.stylex.d.ts +23 -0
- package/dist/DropdownMenu/menuBottomSheet.stylex.d.ts.map +1 -0
- package/dist/DropdownMenu/menuBottomSheet.stylex.js +29 -0
- package/dist/DropdownMenu/menuItemHover.d.ts +3 -0
- package/dist/DropdownMenu/menuItemHover.d.ts.map +1 -1
- package/dist/DropdownMenu/menuItemHover.js +14 -1
- package/dist/DropdownMenu/menuTouchAction.stylex.d.ts +25 -0
- package/dist/DropdownMenu/menuTouchAction.stylex.d.ts.map +1 -0
- package/dist/DropdownMenu/menuTouchAction.stylex.js +29 -0
- package/dist/DropdownMenu/useMenuDrillIn.d.ts.map +1 -1
- package/dist/DropdownMenu/useMenuDrillIn.js +7 -5
- package/dist/EmptyState/EmptyState.d.ts +4 -2
- package/dist/EmptyState/EmptyState.d.ts.map +1 -1
- package/dist/EmptyState/EmptyState.js +6 -4
- package/dist/Field/Field.js +1 -1
- package/dist/Field/FieldLabel.js +1 -1
- package/dist/Field/PanelSearchInput.d.ts +9 -1
- package/dist/Field/PanelSearchInput.d.ts.map +1 -1
- package/dist/Field/PanelSearchInput.js +31 -22
- package/dist/Field/inputDisabledFocus.d.ts +14 -0
- package/dist/Field/inputDisabledFocus.d.ts.map +1 -0
- package/dist/Field/inputDisabledFocus.js +19 -0
- package/dist/Field/inputStyles.stylex.d.ts +9 -9
- package/dist/Field/inputStyles.stylex.js +9 -9
- package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
- package/dist/FieldStatus/FieldStatus.js +7 -3
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +22 -12
- package/dist/Icon/Icon.d.ts +37 -5
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/Icon.js +65 -11
- package/dist/Icon/IconSize.stylex.d.ts +16 -11
- package/dist/Icon/IconSize.stylex.d.ts.map +1 -1
- package/dist/Icon/IconSize.stylex.js +27 -11
- package/dist/Icon/globalIconRegistry.d.ts +71 -4
- package/dist/Icon/globalIconRegistry.d.ts.map +1 -1
- package/dist/Icon/globalIconRegistry.js +163 -23
- package/dist/Icon/index.d.ts +26 -2
- package/dist/Icon/index.d.ts.map +1 -1
- package/dist/Icon/index.js +24 -1
- package/dist/Icon/useIcon.d.ts +5 -1
- package/dist/Icon/useIcon.d.ts.map +1 -1
- package/dist/Icon/useIcon.js +5 -1
- package/dist/InputGroup/InputGroup.d.ts +1 -1
- package/dist/InputGroup/InputGroup.d.ts.map +1 -1
- package/dist/InputGroup/InputGroup.js +46 -36
- package/dist/InputGroup/InputGroupInternalContext.d.ts +4 -0
- package/dist/InputGroup/InputGroupInternalContext.d.ts.map +1 -0
- package/dist/InputGroup/InputGroupInternalContext.js +15 -0
- package/dist/InputGroup/InputGroupText.d.ts.map +1 -1
- package/dist/InputGroup/InputGroupText.js +2 -0
- package/dist/InputGroup/groupStyles.d.ts +9 -0
- package/dist/InputGroup/groupStyles.d.ts.map +1 -1
- package/dist/InputGroup/groupStyles.js +28 -14
- package/dist/Item/Item.d.ts +5 -1
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +23 -7
- package/dist/Item/ItemMarkerColumns.a11y.chromium.spec.d.ts +2 -0
- package/dist/Item/ItemMarkerColumns.a11y.chromium.spec.d.ts.map +1 -0
- package/dist/Item/ItemMarkerColumns.a11y.chromium.spec.js +132 -0
- package/dist/Item/ItemMarkerColumnsContext.d.ts +14 -0
- package/dist/Item/ItemMarkerColumnsContext.d.ts.map +1 -0
- package/dist/Item/ItemMarkerColumnsContext.js +18 -0
- package/dist/Item/ItemSwipeLayer.d.ts.map +1 -1
- package/dist/Item/ItemSwipeLayer.js +3 -0
- package/dist/Item/useSwipeAction.d.ts.map +1 -1
- package/dist/Item/useSwipeAction.js +60 -5
- package/dist/Kbd/Kbd.d.ts +2 -2
- package/dist/Kbd/Kbd.d.ts.map +1 -1
- package/dist/Kbd/Kbd.js +18 -11
- package/dist/Layer/layerAnimations.stylex.d.ts +9 -5
- package/dist/Layer/layerAnimations.stylex.d.ts.map +1 -1
- package/dist/Layer/layerAnimations.stylex.js +23 -10
- package/dist/Layer/layerSlideRules.d.ts +62 -2
- package/dist/Layer/layerSlideRules.d.ts.map +1 -1
- package/dist/Layer/layerSlideRules.js +124 -3
- package/dist/Layer/layerStack.d.ts +12 -9
- package/dist/Layer/layerStack.d.ts.map +1 -1
- package/dist/Layer/layerStack.js +116 -53
- package/dist/Layer/modalOutlet.d.ts +44 -6
- package/dist/Layer/modalOutlet.d.ts.map +1 -1
- package/dist/Layer/modalOutlet.js +150 -14
- package/dist/Layer/preserveAnimations.d.ts +11 -0
- package/dist/Layer/preserveAnimations.d.ts.map +1 -0
- package/dist/Layer/preserveAnimations.js +245 -0
- package/dist/Layer/useLayer.d.ts +19 -2
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +531 -44
- package/dist/Layer/useLayerDismissal.d.ts +10 -7
- package/dist/Layer/useLayerDismissal.d.ts.map +1 -1
- package/dist/Layer/useLayerDismissal.js +8 -8
- package/dist/Layer/useTouchTrigger.d.ts +14 -1
- package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
- package/dist/Layer/useTouchTrigger.js +72 -17
- package/dist/Layout/Layout.d.ts.map +1 -1
- package/dist/Layout/Layout.js +4 -0
- package/dist/Layout/LayoutContent.d.ts.map +1 -1
- package/dist/Layout/LayoutContent.js +2 -2
- package/dist/Layout/LayoutFooter.d.ts.map +1 -1
- package/dist/Layout/LayoutFooter.js +2 -1
- package/dist/Layout/LayoutHeader.d.ts.map +1 -1
- package/dist/Layout/LayoutHeader.js +2 -1
- package/dist/Layout/layoutEdges.stylex.d.ts +20 -0
- package/dist/Layout/layoutEdges.stylex.d.ts.map +1 -0
- package/dist/Layout/layoutEdges.stylex.js +28 -0
- package/dist/Lightbox/Lightbox.d.ts +5 -2
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +111 -89
- package/dist/Lightbox/LightboxKeyboard.a11y.browser.spec.d.ts +2 -0
- package/dist/Lightbox/LightboxKeyboard.a11y.browser.spec.d.ts.map +1 -0
- package/dist/Lightbox/LightboxKeyboard.a11y.browser.spec.js +78 -0
- package/dist/Lightbox/LightboxViewport.a11y.browser.spec.d.ts +2 -0
- package/dist/Lightbox/LightboxViewport.a11y.browser.spec.d.ts.map +1 -0
- package/dist/Lightbox/LightboxViewport.a11y.browser.spec.js +65 -0
- package/dist/List/List.d.ts +2 -1
- package/dist/List/List.d.ts.map +1 -1
- package/dist/List/List.js +9 -2
- package/dist/List/ListContext.d.ts +16 -4
- package/dist/List/ListContext.d.ts.map +1 -1
- package/dist/List/ListContext.js +10 -5
- package/dist/List/ListItem.d.ts +7 -1
- package/dist/List/ListItem.d.ts.map +1 -1
- package/dist/List/ListItem.js +52 -8
- package/dist/List/ListMarkers.a11y.chromium.spec.d.ts +2 -0
- package/dist/List/ListMarkers.a11y.chromium.spec.d.ts.map +1 -0
- package/dist/List/ListMarkers.a11y.chromium.spec.js +677 -0
- package/dist/Markdown/Markdown.d.ts +11 -1
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.fr23.bench.js +3 -1
- package/dist/Markdown/Markdown.fr23.sampling.d.ts +16 -0
- package/dist/Markdown/Markdown.fr23.sampling.d.ts.map +1 -1
- package/dist/Markdown/Markdown.fr23.sampling.js +13 -4
- package/dist/Markdown/Markdown.js +41 -14
- package/dist/Markdown/MarkdownTable.a11y.chromium.spec.js +1 -0
- package/dist/MobileNav/MobileNav.d.ts +2 -1
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +46 -37
- package/dist/MobileNav/MobileNavPinchZoom.a11y.chromium.spec.js +1 -0
- package/dist/MobileNav/MobileNavToggle.d.ts +7 -3
- package/dist/MobileNav/MobileNavToggle.d.ts.map +1 -1
- package/dist/MobileNav/MobileNavToggle.js +11 -3
- package/dist/MultiSelector/CreateRow.a11y.chromium.spec.js +53 -6
- package/dist/MultiSelector/MultiSelector.d.ts +1 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.disabledFocus.a11y.chromium.spec.js +1 -0
- package/dist/MultiSelector/MultiSelector.js +21 -5
- package/dist/MultiSelector/OptionActions.a11y.chromium.spec.js +1 -0
- package/dist/NavMenu/NavHeadingMenu.d.ts +1 -1
- package/dist/NavMenu/NavHeadingMenu.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenu.js +29 -5
- package/dist/NavMenu/NavHeadingMenuItem.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenuItem.js +51 -7
- package/dist/NavMenu/NavMenuContext.d.ts +9 -0
- package/dist/NavMenu/NavMenuContext.d.ts.map +1 -1
- package/dist/NavMenu/NavMenuContext.js +9 -0
- package/dist/NumberInput/NumberInput.d.ts +4 -4
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +61 -24
- package/dist/Overlay/Overlay.d.ts +3 -3
- package/dist/Overlay/Overlay.d.ts.map +1 -1
- package/dist/Overlay/Overlay.js +12 -5
- package/dist/Popover/Popover.d.ts +41 -2
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +276 -44
- package/dist/Popover/index.d.ts +1 -1
- package/dist/Popover/index.d.ts.map +1 -1
- package/dist/Popover/lazyPopoverBottomSheet.d.ts +23 -0
- package/dist/Popover/lazyPopoverBottomSheet.d.ts.map +1 -0
- package/dist/Popover/lazyPopoverBottomSheet.js +40 -0
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +11 -5
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +7 -5
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +8 -0
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +10 -2
- package/dist/ScrollableArea/ScrollableArea.d.ts.map +1 -1
- package/dist/ScrollableArea/ScrollableArea.js +1 -1
- package/dist/SegmentedControl/SegmentedControl.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +6 -2
- package/dist/SelectableCard/SelectableCard.d.ts +5 -5
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +15 -11
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +27 -8
- package/dist/Selector/hooks.d.ts +52 -6
- package/dist/Selector/hooks.d.ts.map +1 -1
- package/dist/Selector/hooks.js +145 -2
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +58 -2
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +79 -3
- package/dist/SideNav/SideNavItem.d.ts +5 -1
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +36 -13
- package/dist/SideNav/railMotion.d.ts +54 -0
- package/dist/SideNav/railMotion.d.ts.map +1 -0
- package/dist/SideNav/railMotion.js +253 -0
- package/dist/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/Skeleton/Skeleton.js +12 -3
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +52 -15
- package/dist/StatusDot/StatusDot.d.ts.map +1 -1
- package/dist/StatusDot/StatusDot.js +12 -0
- package/dist/Stepper/Step.d.ts.map +1 -1
- package/dist/Stepper/Step.js +10 -6
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +5 -5
- package/dist/Switch/switch.markers.stylex.d.ts +7 -2
- package/dist/Switch/switch.markers.stylex.d.ts.map +1 -1
- package/dist/Switch/switch.markers.stylex.js +8 -3
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +5 -1
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +25 -3
- package/dist/Table/TableCell.d.ts.map +1 -1
- package/dist/Table/TableCell.js +5 -1
- package/dist/Table/TableHeaderCell.d.ts.map +1 -1
- package/dist/Table/TableHeaderCell.js +1 -0
- package/dist/Table/TableRow.d.ts.map +1 -1
- package/dist/Table/TableRow.js +3 -0
- package/dist/Table/glidingDivider.d.ts +96 -0
- package/dist/Table/glidingDivider.d.ts.map +1 -0
- package/dist/Table/glidingDivider.js +275 -0
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +11 -2
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +8 -0
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +374 -13
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +244 -6
- package/dist/Table/rowDivider.d.ts +34 -0
- package/dist/Table/rowDivider.d.ts.map +1 -0
- package/dist/Table/rowDivider.js +118 -0
- package/dist/TextArea/TextArea.d.ts +6 -4
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +15 -12
- package/dist/TextInput/TextInput.d.ts +7 -5
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +43 -22
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +45 -11
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +12 -4
- package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
- package/dist/TimeInput/TouchTimeField.js +2 -1
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +62 -6
- package/dist/Tokenizer/Tokenizer.d.ts +71 -4
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +430 -45
- package/dist/Tokenizer/TokenizerBottomSheet.d.ts +98 -0
- package/dist/Tokenizer/TokenizerBottomSheet.d.ts.map +1 -0
- package/dist/Tokenizer/TokenizerBottomSheet.js +721 -0
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +9 -3
- package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
- package/dist/TopNav/TopNavHeading.js +26 -0
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +4 -4
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +32 -4
- package/dist/TreeList/TreeList.d.ts +8 -23
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +175 -3
- package/dist/TreeList/TreeListBranches.d.ts.map +1 -1
- package/dist/TreeList/TreeListBranches.js +7 -5
- package/dist/TreeList/TreeListItem.d.ts +7 -1
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +5 -3
- package/dist/Typeahead/BaseTypeahead.d.ts +1 -1
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.emptyState.a11y.chromium.spec.d.ts +2 -0
- package/dist/Typeahead/BaseTypeahead.emptyState.a11y.chromium.spec.d.ts.map +1 -0
- package/dist/Typeahead/BaseTypeahead.emptyState.a11y.chromium.spec.js +118 -0
- package/dist/Typeahead/BaseTypeahead.js +27 -11
- package/dist/Typeahead/Typeahead.d.ts +1 -1
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +31 -14
- package/dist/astryx.css +164 -41
- package/dist/gestures/GestureArena.d.ts +175 -0
- package/dist/gestures/GestureArena.d.ts.map +1 -0
- package/dist/gestures/GestureArena.js +816 -0
- package/dist/gestures/GestureRecognizer.d.ts +239 -0
- package/dist/gestures/GestureRecognizer.d.ts.map +1 -0
- package/dist/gestures/GestureRecognizer.js +487 -0
- package/dist/gestures/LongPressGestureRecognizer.d.ts +32 -0
- package/dist/gestures/LongPressGestureRecognizer.d.ts.map +1 -0
- package/dist/gestures/LongPressGestureRecognizer.js +135 -0
- package/dist/gestures/PanGestureRecognizer.d.ts +117 -0
- package/dist/gestures/PanGestureRecognizer.d.ts.map +1 -0
- package/dist/gestures/PanGestureRecognizer.js +349 -0
- package/dist/gestures/TapGestureRecognizer.d.ts +39 -0
- package/dist/gestures/TapGestureRecognizer.d.ts.map +1 -0
- package/dist/gestures/TapGestureRecognizer.js +151 -0
- package/dist/gestures/VelocityTracker.d.ts +51 -0
- package/dist/gestures/VelocityTracker.d.ts.map +1 -0
- package/dist/gestures/VelocityTracker.js +186 -0
- package/dist/gestures/geometry.d.ts +17 -0
- package/dist/gestures/geometry.d.ts.map +1 -0
- package/dist/gestures/geometry.js +55 -0
- package/dist/gestures/types.d.ts +139 -0
- package/dist/gestures/types.d.ts.map +1 -0
- package/dist/gestures/types.js +67 -0
- package/dist/hooks/AnnounceRenderedText.d.ts +17 -0
- package/dist/hooks/AnnounceRenderedText.d.ts.map +1 -0
- package/dist/hooks/AnnounceRenderedText.js +32 -0
- package/dist/hooks/ModalAnnounceProvider.d.ts +41 -0
- package/dist/hooks/ModalAnnounceProvider.d.ts.map +1 -0
- package/dist/hooks/ModalAnnounceProvider.js +133 -0
- package/dist/hooks/actionGroupTracker.d.ts +98 -0
- package/dist/hooks/actionGroupTracker.d.ts.map +1 -0
- package/dist/hooks/actionGroupTracker.js +338 -0
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/menuPressOnItems.d.ts +19 -0
- package/dist/hooks/menuPressOnItems.d.ts.map +1 -0
- package/dist/hooks/menuPressOnItems.js +32 -0
- package/dist/hooks/modalAnnounce.d.ts +18 -0
- package/dist/hooks/modalAnnounce.d.ts.map +1 -0
- package/dist/hooks/modalAnnounce.js +382 -0
- package/dist/hooks/scrollGeometry.d.ts +28 -0
- package/dist/hooks/scrollGeometry.d.ts.map +1 -1
- package/dist/hooks/scrollGeometry.js +36 -2
- package/dist/hooks/useAdaptivePresentation.d.ts +9 -1
- package/dist/hooks/useAdaptivePresentation.d.ts.map +1 -1
- package/dist/hooks/useAdaptivePresentation.js +33 -8
- package/dist/hooks/useAnimatedLayout.d.ts +42 -0
- package/dist/hooks/useAnimatedLayout.d.ts.map +1 -0
- package/dist/hooks/useAnimatedLayout.js +46 -0
- package/dist/hooks/useAnnounce.d.ts +132 -1
- package/dist/hooks/useAnnounce.d.ts.map +1 -1
- package/dist/hooks/useAnnounce.js +356 -27
- package/dist/hooks/useAnnounceRenderedText.d.ts +19 -2
- package/dist/hooks/useAnnounceRenderedText.d.ts.map +1 -1
- package/dist/hooks/useAnnounceRenderedText.js +52 -11
- package/dist/hooks/useBusyAnnouncement.d.ts +9 -5
- package/dist/hooks/useBusyAnnouncement.d.ts.map +1 -1
- package/dist/hooks/useBusyAnnouncement.js +58 -46
- package/dist/hooks/useFocusTrap.d.ts +1 -1
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +57 -26
- package/dist/hooks/useMenuHover.d.ts.map +1 -1
- package/dist/hooks/useMenuHover.js +6 -2
- package/dist/hooks/useMenuPress.d.ts +4 -2
- package/dist/hooks/useMenuPress.d.ts.map +1 -1
- package/dist/hooks/useMenuPress.js +58 -33
- package/dist/hooks/usePressFeedback.d.ts +5 -2
- package/dist/hooks/usePressFeedback.d.ts.map +1 -1
- package/dist/hooks/usePressFeedback.js +5 -2
- package/dist/hooks/useScrollableArea.d.ts +5 -0
- package/dist/hooks/useScrollableArea.d.ts.map +1 -1
- package/dist/hooks/useScrollableArea.js +104 -11
- package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/en.generated.js +33 -0
- package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pseudo.generated.js +33 -0
- package/dist/internal/tokenizer-presentation.d.ts +21 -0
- package/dist/internal/tokenizer-presentation.d.ts.map +1 -0
- package/dist/internal/tokenizer-presentation.js +21 -0
- package/dist/internal/touch.d.ts +26 -0
- package/dist/internal/touch.d.ts.map +1 -0
- package/dist/internal/touch.js +28 -0
- package/dist/motion/LayoutChangeSnapshot.d.ts +33 -0
- package/dist/motion/LayoutChangeSnapshot.d.ts.map +1 -0
- package/dist/motion/LayoutChangeSnapshot.js +37 -0
- package/dist/motion/animatedLayout.d.ts +190 -0
- package/dist/motion/animatedLayout.d.ts.map +1 -0
- package/dist/motion/animatedLayout.js +1502 -0
- package/dist/motion/animator.d.ts +240 -0
- package/dist/motion/animator.d.ts.map +1 -0
- package/dist/motion/animator.js +2203 -0
- package/dist/motion/bezier.d.ts +18 -0
- package/dist/motion/bezier.d.ts.map +1 -0
- package/dist/motion/bezier.js +60 -0
- package/dist/motion/coast.d.ts +61 -0
- package/dist/motion/coast.d.ts.map +1 -0
- package/dist/motion/coast.js +107 -0
- package/dist/motion/decay.d.ts +41 -0
- package/dist/motion/decay.d.ts.map +1 -0
- package/dist/motion/decay.js +90 -0
- package/dist/motion/projection.d.ts +36 -0
- package/dist/motion/projection.d.ts.map +1 -0
- package/dist/motion/projection.js +92 -0
- package/dist/motion/reducedMotion.d.ts +25 -0
- package/dist/motion/reducedMotion.d.ts.map +1 -0
- package/dist/motion/reducedMotion.js +85 -0
- package/dist/motion/reducedMotion.stylex.d.ts +19 -0
- package/dist/motion/reducedMotion.stylex.d.ts.map +1 -0
- package/dist/motion/reducedMotion.stylex.js +37 -0
- package/dist/motion/reducedMotionPlan.d.ts +89 -0
- package/dist/motion/reducedMotionPlan.d.ts.map +1 -0
- package/dist/motion/reducedMotionPlan.js +194 -0
- package/dist/motion/resolveSnapPoint.d.ts +52 -0
- package/dist/motion/resolveSnapPoint.d.ts.map +1 -0
- package/dist/motion/resolveSnapPoint.js +135 -0
- package/dist/motion/roleValue.d.ts +33 -0
- package/dist/motion/roleValue.d.ts.map +1 -0
- package/dist/motion/roleValue.js +84 -0
- package/dist/motion/roles.d.ts +79 -0
- package/dist/motion/roles.d.ts.map +1 -0
- package/dist/motion/roles.js +199 -0
- package/dist/motion/rubberBand.d.ts +20 -0
- package/dist/motion/rubberBand.d.ts.map +1 -0
- package/dist/motion/rubberBand.js +91 -0
- package/dist/motion/selectPage.d.ts +26 -0
- package/dist/motion/selectPage.d.ts.map +1 -0
- package/dist/motion/selectPage.js +55 -0
- package/dist/motion/spring.d.ts +193 -0
- package/dist/motion/spring.d.ts.map +1 -0
- package/dist/motion/spring.js +442 -0
- package/dist/motion/transientCopy.d.ts +33 -0
- package/dist/motion/transientCopy.d.ts.map +1 -0
- package/dist/motion/transientCopy.js +314 -0
- package/dist/motion/uikit/gestures.d.ts +642 -0
- package/dist/motion/uikit/gestures.d.ts.map +1 -0
- package/dist/motion/uikit/gestures.js +428 -0
- package/dist/motion/uikit/index.d.ts +24 -0
- package/dist/motion/uikit/index.d.ts.map +1 -0
- package/dist/motion/uikit/index.js +26 -0
- package/dist/motion/uikit/navigation.d.ts +54 -0
- package/dist/motion/uikit/navigation.d.ts.map +1 -0
- package/dist/motion/uikit/navigation.js +83 -0
- package/dist/motion/uikit/scroll.d.ts +116 -0
- package/dist/motion/uikit/scroll.d.ts.map +1 -0
- package/dist/motion/uikit/scroll.js +146 -0
- package/dist/motion/uikit/springs.d.ts +545 -0
- package/dist/motion/uikit/springs.d.ts.map +1 -0
- package/dist/motion/uikit/springs.js +548 -0
- package/dist/motion/uikit/timing.d.ts +202 -0
- package/dist/motion/uikit/timing.d.ts.map +1 -0
- package/dist/motion/uikit/timing.js +201 -0
- package/dist/reset.a11y.chromium.spec.js +1 -0
- package/dist/reset.until-found.a11y.browser.spec.js +1 -0
- package/dist/theme/declarationBoundary.d.ts +13 -0
- package/dist/theme/declarationBoundary.d.ts.map +1 -1
- package/dist/theme/declarationBoundary.js +264 -1
- package/dist/theme/defineTheme.d.ts +111 -11
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/defineTheme.js +97 -7
- package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +9 -0
- package/dist/theme/generateThemeRules.d.ts +6 -2
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +468 -24
- package/dist/theme/index.d.ts +2 -2
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +1 -1
- package/dist/theme/statusColor.d.ts +48 -0
- package/dist/theme/statusColor.d.ts.map +1 -0
- package/dist/theme/statusColor.js +203 -0
- package/dist/theme/statusRoleDerivation.d.ts +11 -0
- package/dist/theme/statusRoleDerivation.d.ts.map +1 -0
- package/dist/theme/statusRoleDerivation.js +236 -0
- package/dist/theme/syntax/SyntaxTheme.d.ts +1 -1
- package/dist/theme/syntax/SyntaxTheme.js +1 -1
- package/dist/theme/syntax/defineSyntaxTheme.js +1 -1
- package/dist/theme/syntax/presets.d.ts +1 -1
- package/dist/theme/syntax/presets.js +1 -1
- package/dist/theme/syntax/tokens.d.ts +1 -1
- package/dist/theme/syntax/tokens.js +1 -1
- package/dist/theme/themeAdaptations.d.ts +25 -1
- package/dist/theme/themeAdaptations.d.ts.map +1 -1
- package/dist/theme/themeAdaptations.js +30 -1
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +16 -1
- package/dist/theme/tokens.stylex.d.ts +42 -2
- package/dist/theme/tokens.stylex.d.ts.map +1 -1
- package/dist/theme/tokens.stylex.js +54 -3
- package/dist/theme/useTheme.d.ts +4 -2
- package/dist/theme/useTheme.d.ts.map +1 -1
- package/dist/theme/useTheme.js +10 -4
- package/dist/utils/edgeAutoscroll.d.ts +53 -0
- package/dist/utils/edgeAutoscroll.d.ts.map +1 -0
- package/dist/utils/edgeAutoscroll.js +81 -0
- package/dist/utils/hitArea.d.ts +72 -0
- package/dist/utils/hitArea.d.ts.map +1 -0
- package/dist/utils/hitArea.js +681 -0
- package/dist/utils/interactionOverlay.stylex.d.ts +4 -1
- package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
- package/dist/utils/interactionOverlay.stylex.js +4 -1
- package/dist/utils/pressFeedback.d.ts +5 -1
- package/dist/utils/pressFeedback.d.ts.map +1 -1
- package/dist/utils/pressFeedback.js +285 -54
- package/dist/utils/pressGesture.d.ts +13 -1
- package/dist/utils/pressGesture.d.ts.map +1 -1
- package/dist/utils/pressGesture.js +40 -1
- package/dist/utils/touchPresentation.d.ts +48 -0
- package/dist/utils/touchPresentation.d.ts.map +1 -0
- package/dist/utils/touchPresentation.js +133 -0
- package/locales/af-ZA.json +1 -1
- package/locales/ar-SA.json +1 -1
- package/locales/ca-ES.json +1 -1
- package/locales/cs-CZ.json +1 -1
- package/locales/da-DK.json +1 -1
- package/locales/de-DE.json +1 -1
- package/locales/el-GR.json +1 -1
- package/locales/en.json +132 -0
- package/locales/es-ES.json +1 -1
- package/locales/fi-FI.json +1 -1
- package/locales/fr-FR.json +1 -1
- package/locales/he-IL.json +1 -1
- package/locales/hu-HU.json +1 -1
- package/locales/it-IT.json +1 -1
- package/locales/ja-JP.json +1 -1
- package/locales/ko-KR.json +1 -1
- package/locales/nl-NL.json +1 -1
- package/locales/no-NO.json +1 -1
- package/locales/pl-PL.json +1 -1
- package/locales/pseudo.json +99 -0
- package/locales/pt-BR.json +1 -1
- package/locales/pt-PT.json +1 -1
- package/locales/ro-RO.json +1 -1
- package/locales/ru-RU.json +1 -1
- package/locales/sr-SP.json +1 -1
- package/locales/sv-SE.json +1 -1
- package/locales/tr-TR.json +1 -1
- package/locales/uk-UA.json +1 -1
- package/locales/vi-VN.json +1 -1
- package/locales/zh-CN.json +1 -1
- package/locales/zh-TW.json +1 -1
- package/package.json +63 -8
- package/src/AlertDialog/AlertDialog.spec.md +85 -31
- package/src/AlertDialog/AlertDialog.tsx +1 -1
- package/src/AlertDialog/__tests__/AlertDialog.a11y.chromium.spec.ts +1 -0
- package/src/AppShell/AppShell.spec.md +334 -0
- package/src/AppShell/AppShell.tsx +170 -2
- package/src/AspectRatio/AspectRatio.spec.md +179 -0
- package/src/AspectRatio/__tests__/AspectRatioFitLayers.a11y.browser.spec.ts +1 -0
- package/src/Avatar/Avatar.spec.md +253 -0
- package/src/Avatar/AvatarStatusDot.spec.md +93 -79
- package/src/Avatar/AvatarStatusDot.test.tsx +22 -0
- package/src/Avatar/AvatarStatusDot.tsx +2 -2
- package/src/AvatarGroup/AvatarGroup.spec.md +205 -0
- package/src/AvatarGroup/AvatarGroupOverflow.spec.md +123 -120
- package/src/Badge/Badge.spec.md +207 -0
- package/src/Badge/Badge.test.tsx +13 -0
- package/src/Badge/Badge.tsx +38 -2
- package/src/Banner/Banner.spec.md +41 -28
- package/src/Banner/Banner.test.tsx +118 -16
- package/src/Banner/Banner.tsx +94 -7
- package/src/Blockquote/Blockquote.spec.md +171 -0
- package/src/BottomSheet/BottomSheet.doc.mjs +106 -24
- package/src/BottomSheet/BottomSheet.spec.md +271 -40
- package/src/BottomSheet/BottomSheet.test.tsx +491 -5
- package/src/BottomSheet/BottomSheet.tsx +544 -145
- package/src/BottomSheet/BottomSheetHostContext.ts +44 -0
- package/src/BottomSheet/BottomSheetPanel.test.tsx +73 -19
- package/src/BottomSheet/BottomSheetPanel.tsx +178 -63
- package/src/BottomSheet/BottomSheetReplace.test.tsx +1638 -0
- package/src/BottomSheet/BottomSheetStacking.announce.test.tsx +246 -0
- package/src/BottomSheet/BottomSheetStacking.test.tsx +3184 -0
- package/src/BottomSheet/BottomSheetSwitcher.doc.mjs +27 -31
- package/src/BottomSheet/BottomSheetSwitcher.spec.md +138 -43
- package/src/BottomSheet/BottomSheetSwitcher.tsx +275 -26
- package/src/BottomSheet/BottomSheetSwitcherContext.ts +6 -0
- package/src/BottomSheet/__tests__/BottomSheetDrag.a11y.chromium.spec.ts +1 -0
- package/src/BottomSheet/__tests__/BottomSheetFocusReturn.a11y.browser.spec.ts +1 -0
- package/src/BottomSheet/__tests__/BottomSheetKeyboard.a11y.browser.spec.ts +4 -1
- package/src/BottomSheet/__tests__/BottomSheetNativeModal.a11y.browser.spec.ts +1 -0
- package/src/BottomSheet/__tests__/BottomSheetPinchZoom.a11y.chromium.spec.ts +1 -0
- package/src/BottomSheet/__tests__/BottomSheetToastOutlet.a11y.chromium.spec.ts +83 -0
- package/src/BottomSheet/bottomSheetEscape.ts +21 -0
- package/src/BottomSheet/bottomSheetStack.ts +2054 -0
- package/src/BottomSheet/useSheetGestures.ts +68 -12
- package/src/Breadcrumbs/BreadcrumbItem.spec.md +104 -60
- package/src/Breadcrumbs/BreadcrumbItem.tsx +30 -1
- package/src/Breadcrumbs/Breadcrumbs.spec.md +165 -0
- package/src/Breadcrumbs/Breadcrumbs.test.tsx +90 -0
- package/src/Breadcrumbs/__tests__/Breadcrumbs.a11y.chromium.spec.ts +1 -0
- package/src/Button/Button.spec.md +322 -0
- package/src/Button/Button.test.tsx +8 -1
- package/src/Button/Button.tsx +36 -7
- package/src/Button/__tests__/Button.a11y.chromium.spec.ts +1 -0
- package/src/ButtonGroup/ButtonGroup.spec.md +220 -0
- package/src/Calendar/__tests__/Calendar.a11y.chromium.spec.ts +1 -0
- package/src/Card/Card.spec.md +205 -0
- package/src/Carousel/__tests__/Carousel.a11y.chromium.spec.ts +1 -0
- package/src/Center/Center.spec.md +104 -124
- package/src/Chat/ChatComposer.test.tsx +54 -0
- package/src/Chat/ChatComposer.tsx +41 -27
- package/src/Chat/ChatComposerInput.test.tsx +165 -21
- package/src/Chat/ChatComposerInput.tsx +73 -16
- package/src/Chat/ChatMessageMetadata.tsx +1 -1
- package/src/Chat/ChatPastedTextToken.test.tsx +71 -0
- package/src/Chat/ChatPastedTextToken.tsx +8 -7
- package/src/Chat/ChatToolCalls.tsx +5 -5
- package/src/Chat/__tests__/ChatLayoutScrollButton.a11y.chromium.spec.ts +22 -4
- package/src/Chat/__tests__/ChatLayoutScrollButtonSurface.a11y.chromium.spec.ts +1 -0
- package/src/Chat/__tests__/ChatMessageList.a11y.chromium.spec.ts +1 -0
- package/src/Chat/__tests__/ChatMessageMetadata.a11y.chromium.spec.ts +1 -0
- package/src/Chat/__tests__/ChatSendButton.a11y.chromium.spec.ts +1 -0
- package/src/Chat/__tests__/ChatSystemMessage.a11y.chromium.spec.ts +1 -0
- package/src/Chat/__tests__/ChatTokenizedText.a11y.chromium.spec.ts +1 -0
- package/src/Chat/__tests__/useChatStreamScroll.a11y.chromium.spec.ts +1 -0
- package/src/CheckboxInput/CheckboxInput.spec.md +97 -66
- package/src/CheckboxInput/__tests__/Checkbox.a11y.chromium.spec.ts +1 -0
- package/src/CheckboxList/CheckboxList.spec.md +92 -78
- package/src/CheckboxList/CheckboxListItem.spec.md +86 -60
- package/src/CheckboxList/__tests__/CheckboxList.a11y.chromium.spec.ts +1 -0
- package/src/ClickableCard/ClickableCard.doc.mjs +1 -2
- package/src/ClickableCard/ClickableCard.spec.md +124 -128
- package/src/ClickableCard/ClickableCard.test.tsx +14 -3
- package/src/ClickableCard/ClickableCard.tsx +44 -28
- package/src/Code/Code.spec.md +30 -32
- package/src/CodeBlock/CodeBlock.doc.mjs +21 -4
- package/src/CodeBlock/CodeBlock.spec.md +96 -61
- package/src/CodeBlock/CodeBlock.test.tsx +97 -1
- package/src/CodeBlock/CodeBlock.tsx +132 -22
- package/src/CodeBlock/CodeLanguage.test.tsx +173 -0
- package/src/CodeBlock/__tests__/CodeBlockCopyClearance.a11y.chromium.spec.ts +290 -0
- package/src/CodeBlock/__tests__/CodeBlockLanguages.a11y.chromium.spec.ts +64 -0
- package/src/CodeBlock/__tests__/CodeBlockOverflowStop.a11y.chromium.spec.ts +1 -0
- package/src/CodeBlock/__tests__/DiffRowPaint.a11y.chromium.spec.ts +1 -0
- package/src/CodeBlock/grammar.ts +291 -0
- package/src/CodeBlock/index.ts +7 -0
- package/src/CodeBlock/languages/dockerfile.ts +43 -0
- package/src/CodeBlock/languages/graphql.ts +30 -0
- package/src/CodeBlock/languages/java.ts +28 -0
- package/src/CodeBlock/languages/lua.ts +21 -0
- package/src/CodeBlock/languages/objective-c.ts +26 -0
- package/src/CodeBlock/languages/powershell.ts +31 -0
- package/src/CodeBlock/languages/ruby.ts +29 -0
- package/src/CodeBlock/languages/thrift.ts +32 -0
- package/src/CodeBlock/languages/toml.ts +36 -0
- package/src/CodeBlock/languages.test.ts +402 -0
- package/src/CodeBlock/tokenizer.ts +176 -16
- package/src/CodeBlock/tokenizerBudget.test.ts +112 -0
- package/src/Collapsible/Collapsible.doc.mjs +6 -0
- package/src/Collapsible/Collapsible.spec.md +26 -23
- package/src/Collapsible/Collapsible.tsx +121 -2
- package/src/Collapsible/__tests__/Collapsible.a11y.chromium.spec.ts +1 -0
- package/src/Collapsible/__tests__/CollapsibleGroup.a11y.chromium.spec.ts +1 -0
- package/src/Collapsible/__tests__/CollapsibleGroupAccordion.a11y.chromium.spec.ts +1 -0
- package/src/CommandPalette/CommandPalette.perf.test.ts +8 -4
- package/src/CommandPalette/CommandPalette.tsx +17 -1
- package/src/CommandPalette/CommandPaletteEmpty.doc.mjs +6 -3
- package/src/CommandPalette/CommandPaletteEmpty.spec.md +190 -0
- package/src/CommandPalette/CommandPaletteEmpty.tsx +4 -0
- package/src/CommandPalette/CommandPaletteInput.tsx +21 -2
- package/src/CommandPalette/__tests__/CommandPalette.a11y.chromium.spec.ts +1 -0
- package/src/CommandPalette/__tests__/CommandPaletteEmptyAudit.a11y.chromium.spec.ts +715 -0
- package/src/CommandPalette/__tests__/CommandPaletteFooter.a11y.chromium.spec.ts +3 -2
- package/src/CommandPalette/__tests__/CommandPaletteInputAudit.a11y.chromium.spec.ts +1 -0
- package/src/CommandPalette/__tests__/CommandPaletteItemAudit.a11y.chromium.spec.ts +1 -0
- package/src/CommandPalette/busyStartSettle.ts +26 -0
- package/src/ComplexSelector/ComplexSelector.doc.mjs +1 -1
- package/src/ComplexSelector/ComplexSelector.focusableDisabled.test.tsx +1 -1
- package/src/ComplexSelector/ComplexSelector.fr10.test.tsx +9 -9
- package/src/ComplexSelector/ComplexSelector.spec.md +161 -107
- package/src/ComplexSelector/ComplexSelector.test.tsx +236 -17
- package/src/ComplexSelector/ComplexSelector.tsx +69 -4
- package/src/ComplexSelector/__tests__/ComplexSelector.a11y.chromium.spec.ts +965 -0
- package/src/ContextMenu/ContextMenu.doc.mjs +1 -1
- package/src/ContextMenu/ContextMenu.spec.md +38 -30
- package/src/ContextMenu/ContextMenu.test.tsx +189 -11
- package/src/ContextMenu/ContextMenu.tsx +75 -17
- package/src/ContextMenu/__tests__/ContextMenuAudit.a11y.chromium.spec.ts +1 -0
- package/src/ContextMenu/__tests__/ContextMenuCursorAnchor.a11y.browser.spec.ts +1 -0
- package/src/ContextMenu/__tests__/ContextMenuLongPress.a11y.chromium.spec.ts +117 -0
- package/src/DateInput/DateInput.tsx +9 -4
- package/src/DateInput/DateInputTouch.test.tsx +10 -1
- package/src/DateInput/NativeDateField.tsx +2 -1
- package/src/DateInput/TouchDateField.tsx +2 -1
- package/src/DateInput/Wheel.tsx +4 -1
- package/src/DateInput/__tests__/DateInputAudit.a11y.chromium.spec.ts +1 -0
- package/src/DateInput/__tests__/WheelPinchZoom.a11y.chromium.spec.ts +171 -0
- package/src/Dialog/Dialog.doc.mjs +201 -47
- package/src/Dialog/Dialog.spec.md +20 -4
- package/src/Dialog/Dialog.tsx +37 -10
- package/src/Dialog/__tests__/Dialog.a11y.browser.spec.ts +1 -0
- package/src/Dialog/__tests__/Dialog.a11y.chromium.spec.ts +1 -0
- package/src/Dialog/__tests__/Dialog.reduced-motion.a11y.browser.spec.ts +252 -0
- package/src/Divider/Divider.spec.md +79 -70
- package/src/Drawer/Drawer.tsx +38 -35
- package/src/Drawer/__tests__/DrawerAudit.a11y.chromium.spec.ts +1 -0
- package/src/Drawer/__tests__/DrawerHeaderAudit.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/DropdownMenu.spec.md +14 -6
- package/src/DropdownMenu/DropdownMenu.ssr.test.tsx +44 -8
- package/src/DropdownMenu/DropdownMenu.test.tsx +107 -5
- package/src/DropdownMenu/DropdownMenu.tsx +51 -34
- package/src/DropdownMenu/DropdownMenuGroup.doc.mjs +2 -2
- package/src/DropdownMenu/DropdownMenuGroup.tsx +12 -6
- package/src/DropdownMenu/DropdownMenuItem.tsx +5 -5
- package/src/DropdownMenu/DropdownMenuRadioItem.doc.mjs +5 -2
- package/src/DropdownMenu/DropdownMenuRadioItem.spec.md +226 -0
- package/src/DropdownMenu/DropdownMenuRadioItem.tsx +32 -16
- package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +158 -0
- package/src/DropdownMenu/DropdownMenuSheetFirstOpen.test.tsx +72 -0
- package/src/DropdownMenu/DropdownMenuSubMenu.doc.mjs +9 -0
- package/src/DropdownMenu/DropdownMenuSubMenu.spec.md +225 -0
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +105 -0
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +6 -6
- package/src/DropdownMenu/MenuBottomSheet.tsx +42 -7
- package/src/DropdownMenu/MenuBottomSheetActionList.tsx +3 -3
- package/src/DropdownMenu/__tests__/DropdownMenuDividerAudit.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/__tests__/DropdownMenuDrillIn.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/__tests__/DropdownMenuFocusReturn.a11y.browser.spec.ts +1 -0
- package/src/DropdownMenu/__tests__/DropdownMenuGroupAudit.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/__tests__/DropdownMenuItemAudit.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/__tests__/DropdownMenuRadioGroupAudit.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/__tests__/DropdownMenuRadioItemAudit.a11y.chromium.spec.ts +540 -0
- package/src/DropdownMenu/__tests__/DropdownMenuSubMenuAudit.a11y.chromium.spec.ts +671 -0
- package/src/DropdownMenu/__tests__/Menu.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/__tests__/MenuButton.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/__tests__/MenuHeaderFooter.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/__tests__/MenuHoverFocus.a11y.chromium.spec.ts +238 -0
- package/src/DropdownMenu/__tests__/MenuPinchZoom.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/__tests__/MenuPress.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/__tests__/SubMenuHeaderFooter.a11y.chromium.spec.ts +1 -0
- package/src/DropdownMenu/lazyMenuBottomSheet.ts +28 -2
- package/src/DropdownMenu/menuBottomSheet.stylex.ts +33 -0
- package/src/DropdownMenu/menuItemHover.ts +13 -1
- package/src/DropdownMenu/menuTouchAction.stylex.ts +28 -0
- package/src/DropdownMenu/modules/useMenuPress.spec.md +90 -62
- package/src/DropdownMenu/useMenuDrillIn.tsx +7 -5
- package/src/EmptyState/EmptyState.announce.test.tsx +227 -0
- package/src/EmptyState/EmptyState.doc.mjs +1 -1
- package/src/EmptyState/EmptyState.spec.md +22 -14
- package/src/EmptyState/EmptyState.test.tsx +8 -8
- package/src/EmptyState/EmptyState.tsx +7 -5
- package/src/Field/Field.spec.md +57 -48
- package/src/Field/Field.tsx +1 -1
- package/src/Field/FieldLabel.spec.md +70 -59
- package/src/Field/FieldLabel.tsx +1 -1
- package/src/Field/PanelSearchInput.tsx +23 -13
- package/src/Field/__tests__/FieldLabelAudit.a11y.chromium.spec.ts +1 -0
- package/src/Field/inputDisabledFocus.ts +28 -0
- package/src/Field/inputStyles.stylex.ts +15 -15
- package/src/FieldStatus/FieldStatus.test.tsx +12 -0
- package/src/FieldStatus/FieldStatus.tsx +12 -3
- package/src/FieldStatus/__tests__/StatusMessage.a11y.chromium.spec.ts +1 -0
- package/src/FileInput/FileInput.doc.mjs +1 -1
- package/src/FileInput/FileInput.test.tsx +102 -0
- package/src/FileInput/FileInput.tsx +18 -12
- package/src/FormLayout/FormLayout.spec.md +69 -51
- package/src/Grid/Grid.spec.md +72 -69
- package/src/Grid/GridSpan.spec.md +158 -0
- package/src/Heading/Heading.spec.md +198 -0
- package/src/HoverCard/HoverCard.spec.md +244 -0
- package/src/HoverCard/HoverCard.test.tsx +93 -3
- package/src/Icon/Icon.doc.mjs +67 -5
- package/src/Icon/Icon.test.tsx +548 -9
- package/src/Icon/Icon.tsx +79 -15
- package/src/Icon/IconSize.stylex.ts +27 -11
- package/src/Icon/globalIconRegistry.test.tsx +395 -3
- package/src/Icon/globalIconRegistry.tsx +184 -36
- package/src/Icon/index.ts +29 -1
- package/src/Icon/useIcon.ts +5 -1
- package/src/IconButton/IconButton.spec.md +197 -0
- package/src/IconButton/IconButton.test.tsx +5 -2
- package/src/InputGroup/InputGroup.spec.md +199 -0
- package/src/InputGroup/InputGroup.test.tsx +120 -0
- package/src/InputGroup/InputGroup.tsx +59 -52
- package/src/InputGroup/InputGroupInternalContext.ts +15 -0
- package/src/InputGroup/InputGroupText.spec.md +139 -0
- package/src/InputGroup/InputGroupText.tsx +2 -0
- package/src/InputGroup/groupStyles.ts +22 -11
- package/src/Item/Item.test.tsx +158 -1
- package/src/Item/Item.tsx +42 -7
- package/src/Item/ItemMarkerColumns.a11y.chromium.spec.ts +211 -0
- package/src/Item/ItemMarkerColumnsContext.tsx +20 -0
- package/src/Item/ItemSwipeLayer.tsx +9 -0
- package/src/Item/__tests__/ItemSwipeActions.a11y.chromium.spec.ts +1 -0
- package/src/Item/__tests__/ItemSwipePinchZoom.a11y.chromium.spec.ts +186 -0
- package/src/Item/useSwipeAction.ts +71 -5
- package/src/Kbd/Kbd.test.tsx +95 -0
- package/src/Kbd/Kbd.tsx +30 -23
- package/src/Layer/LayerProvider.spec.md +149 -0
- package/src/Layer/__tests__/LayerReducedMotion.a11y.chromium.spec.ts +176 -0
- package/src/Layer/__tests__/TouchTrigger.a11y.chromium.spec.ts +200 -0
- package/src/Layer/layerAnimations.stylex.ts +22 -2
- package/src/Layer/layerDismissalInvariants.test.tsx +9 -0
- package/src/Layer/layerSlideRules.ts +141 -8
- package/src/Layer/layerStack.ts +129 -62
- package/src/Layer/modalOutlet.ts +156 -15
- package/src/Layer/preserveAnimations.ts +304 -0
- package/src/Layer/useLayer.doc.mjs +1 -1
- package/src/Layer/useLayer.test.tsx +850 -0
- package/src/Layer/useLayer.tsx +644 -58
- package/src/Layer/useLayerDismissal.test.tsx +85 -2
- package/src/Layer/useLayerDismissal.ts +12 -9
- package/src/Layer/useTouchTrigger.ts +95 -41
- package/src/Layout/Layout.tsx +18 -0
- package/src/Layout/LayoutContent.tsx +5 -14
- package/src/Layout/LayoutFooter.tsx +2 -0
- package/src/Layout/LayoutHeader.tsx +2 -0
- package/src/Layout/__tests__/Layout.a11y.chromium.spec.ts +1 -0
- package/src/Layout/layoutEdges.stylex.ts +25 -0
- package/src/Lightbox/Lightbox.spec.md +9 -8
- package/src/Lightbox/Lightbox.test.tsx +83 -0
- package/src/Lightbox/Lightbox.tsx +149 -125
- package/src/Lightbox/LightboxKeyboard.a11y.browser.spec.ts +78 -0
- package/src/Lightbox/LightboxViewport.a11y.browser.spec.ts +70 -0
- package/src/Link/Link.spec.md +229 -0
- package/src/Link/LinkProvider.spec.md +167 -0
- package/src/Link/__tests__/Link.a11y.chromium.spec.ts +1 -0
- package/src/Link/__tests__/Link.navigation.a11y.chromium.spec.ts +1 -0
- package/src/List/List.spec.md +113 -34
- package/src/List/List.tsx +13 -1
- package/src/List/ListContext.tsx +19 -5
- package/src/List/ListItem.doc.mjs +3 -3
- package/src/List/ListItem.tsx +97 -28
- package/src/List/ListMarkers.a11y.chromium.spec.ts +904 -0
- package/src/Markdown/Markdown.codeLanguages.test.tsx +137 -0
- package/src/Markdown/Markdown.doc.mjs +12 -0
- package/src/Markdown/Markdown.fr23.bench.ts +3 -1
- package/src/Markdown/Markdown.fr23.perf.test.ts +45 -3
- package/src/Markdown/Markdown.fr23.sampling.ts +13 -4
- package/src/Markdown/Markdown.spec.md +71 -59
- package/src/Markdown/Markdown.test.tsx +50 -0
- package/src/Markdown/Markdown.tsx +61 -8
- package/src/Markdown/MarkdownTable.a11y.chromium.spec.ts +1 -0
- package/src/Markdown/__tests__/MarkdownNesting.a11y.chromium.spec.ts +1 -0
- package/src/MobileNav/MobileNav.doc.mjs +2 -2
- package/src/MobileNav/MobileNav.spec.md +161 -64
- package/src/MobileNav/MobileNav.test.tsx +27 -10
- package/src/MobileNav/MobileNav.tsx +51 -38
- package/src/MobileNav/MobileNavPinchZoom.a11y.chromium.spec.ts +1 -0
- package/src/MobileNav/MobileNavToggle.test.tsx +63 -0
- package/src/MobileNav/MobileNavToggle.tsx +13 -5
- package/src/MobileNav/__tests__/MobileNavWidth.a11y.chromium.spec.ts +103 -0
- package/src/MoreMenu/MoreMenu.doc.mjs +2 -2
- package/src/MoreMenu/MoreMenu.spec.md +88 -53
- package/src/MultiSelector/CreateRow.a11y.chromium.spec.ts +67 -9
- package/src/MultiSelector/MultiSelector.disabledFocus.a11y.chromium.spec.ts +1 -0
- package/src/MultiSelector/MultiSelector.test.tsx +122 -10
- package/src/MultiSelector/MultiSelector.tsx +24 -4
- package/src/MultiSelector/OptionActions.a11y.chromium.spec.ts +1 -0
- package/src/MultiSelector/__tests__/MultiSelector.a11y.chromium.spec.ts +1 -0
- package/src/NavIcon/NavIcon.spec.md +66 -38
- package/src/NavMenu/NavHeadingMenu.spec.md +104 -46
- package/src/NavMenu/NavHeadingMenu.test.tsx +276 -2
- package/src/NavMenu/NavHeadingMenu.tsx +42 -4
- package/src/NavMenu/NavHeadingMenuItem.tsx +60 -6
- package/src/NavMenu/NavMenuContext.tsx +11 -0
- package/src/NavMenu/__tests__/NavMenusSlideSelection.a11y.chromium.spec.ts +137 -0
- package/src/NumberInput/NumberInput.doc.mjs +6 -6
- package/src/NumberInput/NumberInput.spec.md +248 -0
- package/src/NumberInput/NumberInput.test.tsx +187 -14
- package/src/NumberInput/NumberInput.tsx +86 -24
- package/src/NumberInput/__tests__/NumberInput.a11y.chromium.spec.ts +1 -0
- package/src/Overlay/Overlay.doc.mjs +2 -2
- package/src/Overlay/Overlay.test.tsx +72 -4
- package/src/Overlay/Overlay.tsx +18 -8
- package/src/Pagination/Pagination.test.tsx +2 -2
- package/src/Popover/Popover.doc.mjs +38 -2
- package/src/Popover/Popover.spec.md +90 -11
- package/src/Popover/Popover.test.tsx +340 -2
- package/src/Popover/Popover.tsx +401 -35
- package/src/Popover/PopoverPresentation.test.tsx +952 -0
- package/src/Popover/__tests__/PopoverSecondDocument.a11y.chromium.spec.ts +205 -0
- package/src/Popover/index.ts +5 -1
- package/src/Popover/lazyPopoverBottomSheet.ts +57 -0
- package/src/Popover/usePopover.tsx +11 -5
- package/src/PowerSearch/PowerSearch.spec.md +423 -53
- package/src/PowerSearch/PowerSearch.test.tsx +77 -1
- package/src/PowerSearch/PowerSearch.tsx +7 -5
- package/src/ProgressBar/ProgressBar.test.tsx +12 -0
- package/src/ProgressBar/ProgressBar.tsx +18 -0
- package/src/ProgressBar/__tests__/ProgressBar.a11y.chromium.spec.ts +1 -0
- package/src/RadioList/RadioList.spec.md +227 -0
- package/src/RadioList/RadioList.test.tsx +34 -7
- package/src/RadioList/RadioListItem.press.source-build.test.mjs +80 -0
- package/src/RadioList/RadioListItem.spec.md +223 -0
- package/src/RadioList/RadioListItem.tsx +26 -12
- package/src/RadioList/__tests__/RadioGroup.a11y.chromium.spec.ts +1 -0
- package/src/Resizable/__tests__/ResizeHandle.a11y.chromium.spec.ts +1 -0
- package/src/ScrollableArea/ScrollableArea.spec.md +6 -5
- package/src/ScrollableArea/ScrollableArea.test.tsx +5 -0
- package/src/ScrollableArea/ScrollableArea.tsx +4 -0
- package/src/Section/Section.spec.md +102 -44
- package/src/SegmentedControl/SegmentedControl.spec.md +162 -53
- package/src/SegmentedControl/SegmentedControl.test.tsx +46 -0
- package/src/SegmentedControl/SegmentedControl.tsx +7 -3
- package/src/SegmentedControl/SegmentedControlItem.spec.md +206 -0
- package/src/SelectableCard/SelectableCard.doc.mjs +7 -6
- package/src/SelectableCard/SelectableCard.spec.md +230 -0
- package/src/SelectableCard/SelectableCard.test.tsx +11 -1
- package/src/SelectableCard/SelectableCard.tsx +49 -33
- package/src/Selector/Selector.sheetActiveDescendant.test.tsx +95 -0
- package/src/Selector/Selector.spec.md +12 -4
- package/src/Selector/Selector.test.tsx +114 -8
- package/src/Selector/Selector.tsx +30 -6
- package/src/Selector/__tests__/ComboboxField.a11y.chromium.spec.ts +458 -0
- package/src/Selector/__tests__/EmptyStateAnnouncement.a11y.chromium.spec.ts +1 -0
- package/src/Selector/__tests__/Listbox.a11y.chromium.spec.ts +1 -0
- package/src/Selector/__tests__/Selector.a11y.chromium.spec.ts +1 -0
- package/src/Selector/__tests__/Selector.combobox.a11y.chromium.spec.ts +1 -0
- package/src/Selector/hooks.ts +234 -10
- package/src/Selector/useCombobox.doc.mjs +156 -9
- package/src/Selector/useCombobox.public.test.tsx +89 -0
- package/src/Selector/useCombobox.test.tsx +444 -0
- package/src/SideNav/SideNav.spec.md +50 -30
- package/src/SideNav/SideNav.test.tsx +425 -25
- package/src/SideNav/SideNav.tsx +85 -1
- package/src/SideNav/SideNavCollapseButton.spec.md +161 -0
- package/src/SideNav/SideNavHeading.spec.md +226 -0
- package/src/SideNav/SideNavHeading.tsx +102 -6
- package/src/SideNav/SideNavItem.spec.md +246 -0
- package/src/SideNav/SideNavItem.tsx +40 -9
- package/src/SideNav/SideNavRailMotion.test.tsx +620 -0
- package/src/SideNav/SideNavSection.spec.md +153 -0
- package/src/SideNav/__tests__/SideNavRailMotion.interaction.browser.spec.ts +417 -0
- package/src/SideNav/railMotion.ts +315 -0
- package/src/Skeleton/Skeleton.spec.md +99 -42
- package/src/Skeleton/Skeleton.test.tsx +108 -1
- package/src/Skeleton/Skeleton.tsx +30 -2
- package/src/Slider/Slider.fr10.test.tsx +34 -0
- package/src/Slider/Slider.test.tsx +172 -0
- package/src/Slider/Slider.tsx +70 -14
- package/src/Slider/__tests__/Slider.a11y.chromium.spec.ts +1 -0
- package/src/Spinner/Spinner.spec.md +231 -0
- package/src/Stack/Stack.spec.md +104 -56
- package/src/StatusDot/StatusDot.spec.md +139 -51
- package/src/StatusDot/StatusDot.test.tsx +13 -0
- package/src/StatusDot/StatusDot.tsx +27 -0
- package/src/Stepper/Step.spec.md +206 -0
- package/src/Stepper/Step.tsx +19 -3
- package/src/Stepper/Stepper.test.tsx +50 -0
- package/src/Switch/Switch.focusRing.source-build.test.mjs +81 -0
- package/src/Switch/Switch.spec.md +150 -66
- package/src/Switch/Switch.tsx +11 -9
- package/src/Switch/__tests__/Switch.a11y.chromium.spec.ts +1 -0
- package/src/Switch/switch.markers.stylex.ts +7 -2
- package/src/TabList/Tab.spec.md +201 -0
- package/src/TabList/Tab.tsx +7 -1
- package/src/TabList/TabList.doc.mjs +3 -3
- package/src/TabList/TabList.test.tsx +27 -0
- package/src/TabList/TabMenu.spec.md +198 -0
- package/src/TabList/TabMenu.tsx +24 -1
- package/src/TabList/__tests__/TabListOverflow.interaction.browser.spec.ts +99 -0
- package/src/TabList/__tests__/Tabs.a11y.chromium.spec.ts +1 -0
- package/src/Table/Table.spec.md +54 -30
- package/src/Table/TableCell.tsx +9 -0
- package/src/Table/TableHeaderCell.tsx +2 -0
- package/src/Table/TableRow.tsx +3 -0
- package/src/Table/__tests__/Table.a11y.chromium.spec.ts +129 -0
- package/src/Table/__tests__/Table.a11y.contracts.ts +35 -0
- package/src/Table/__tests__/Table.a11y.renders.tsx +112 -0
- package/src/Table/__tests__/Table.a11y.states.ts +140 -0
- package/src/Table/__tests__/Table.a11y.test.tsx +198 -0
- package/src/Table/__tests__/TableMinWidth.a11y.chromium.spec.ts +1 -0
- package/src/Table/__tests__/TableRowGlide.a11y.browser.spec.ts +382 -0
- package/src/Table/__tests__/TableScroll.a11y.chromium.spec.ts +1 -0
- package/src/Table/__tests__/TableStickyDividers.a11y.browser.spec.ts +560 -0
- package/src/Table/glidingDivider.ts +336 -0
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +23 -8
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.glide.test.tsx +280 -0
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +91 -9
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +471 -10
- package/src/Table/plugins/rowStatus/useTableRowStatus.spec.md +4 -4
- package/src/Table/plugins/sortable/__tests__/useTableSortable.a11y.test.tsx +174 -0
- package/src/Table/plugins/sortable/__tests__/useTableSortable.a11y.ts +86 -0
- package/src/Table/plugins/sortable/useTableSortable.test.tsx +0 -12
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.test.tsx +51 -1
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +312 -12
- package/src/Table/rowDivider.ts +154 -0
- package/src/Table/useTableRowExpansion.doc.mjs +8 -0
- package/src/Text/Text.spec.md +114 -127
- package/src/TextArea/TextArea.doc.mjs +6 -6
- package/src/TextArea/TextArea.spec.md +164 -64
- package/src/TextArea/TextArea.test.tsx +65 -6
- package/src/TextArea/TextArea.tsx +27 -15
- package/src/TextInput/TextInput.doc.mjs +8 -8
- package/src/TextInput/TextInput.spec.md +260 -0
- package/src/TextInput/TextInput.test.tsx +126 -10
- package/src/TextInput/TextInput.tsx +57 -23
- package/src/TextInput/__tests__/TextInput.a11y.chromium.spec.ts +1 -0
- package/src/Thumbnail/Thumbnail.doc.mjs +1 -2
- package/src/Thumbnail/Thumbnail.spec.md +244 -0
- package/src/Thumbnail/Thumbnail.test.tsx +120 -7
- package/src/Thumbnail/Thumbnail.tsx +77 -31
- package/src/TimeInput/TimeInput.spec.md +273 -0
- package/src/TimeInput/TimeInput.tsx +12 -4
- package/src/TimeInput/TouchTimeField.tsx +2 -1
- package/src/Timestamp/Timestamp.spec.md +252 -0
- package/src/Toast/Toast.spec.md +300 -0
- package/src/Toast/ToastViewport.modalHost.test.tsx +630 -5
- package/src/Toast/ToastViewport.test.tsx +137 -0
- package/src/Toast/ToastViewport.tsx +63 -6
- package/src/ToggleButton/ToggleButton.spec.md +256 -0
- package/src/ToggleButton/ToggleButtonGroup.spec.md +195 -0
- package/src/ToggleButton/__tests__/ToggleButton.a11y.chromium.spec.ts +1 -0
- package/src/Token/Token.spec.md +271 -0
- package/src/Token/__tests__/TokenRemoveTarget.a11y.chromium.spec.ts +1 -0
- package/src/Tokenizer/Tokenizer.props-type.test.tsx +126 -0
- package/src/Tokenizer/Tokenizer.spec.md +313 -72
- package/src/Tokenizer/Tokenizer.ssr.test.tsx +196 -0
- package/src/Tokenizer/Tokenizer.test.tsx +44 -8
- package/src/Tokenizer/Tokenizer.tsx +586 -41
- package/src/Tokenizer/TokenizerBottomSheet.test.tsx +2719 -0
- package/src/Tokenizer/TokenizerBottomSheet.tsx +957 -0
- package/src/Tokenizer/__tests__/TokenizerEndLane.a11y.chromium.spec.ts +61 -27
- package/src/Toolbar/Toolbar.spec.md +103 -49
- package/src/Toolbar/__tests__/Toolbar.a11y.chromium.spec.ts +1 -0
- package/src/Tooltip/Tooltip.spec.md +161 -36
- package/src/Tooltip/Tooltip.test.tsx +171 -3
- package/src/Tooltip/__tests__/Tooltip.a11y.chromium.spec.ts +1 -0
- package/src/Tooltip/__tests__/Tooltip.a11y.states.ts +2 -2
- package/src/Tooltip/__tests__/TooltipFocusReturn.a11y.chromium.spec.ts +1 -0
- package/src/Tooltip/__tests__/TooltipHoverBridge.a11y.chromium.spec.ts +1 -0
- package/src/Tooltip/__tests__/TooltipTallContent.a11y.browser.spec.ts +673 -0
- package/src/Tooltip/__tests__/TooltipTallContentTracking.a11y.browser.spec.ts +1162 -0
- package/src/Tooltip/useTooltip.tsx +7 -2
- package/src/TopNav/TopNav.spec.md +190 -0
- package/src/TopNav/TopNav.test.tsx +89 -0
- package/src/TopNav/TopNavHeading.spec.md +211 -0
- package/src/TopNav/TopNavHeading.tsx +35 -2
- package/src/TopNav/TopNavItem.spec.md +189 -0
- package/src/TopNav/TopNavMegaMenu.reduced-motion.source-build.test.mjs +83 -0
- package/src/TopNav/TopNavMegaMenu.spec.md +190 -0
- package/src/TopNav/TopNavMegaMenu.tsx +21 -4
- package/src/TopNav/TopNavMegaMenuFeaturedCard.spec.md +150 -0
- package/src/TopNav/TopNavMegaMenuItem.spec.md +155 -0
- package/src/TopNav/TopNavMenu.spec.md +202 -0
- package/src/TopNav/TopNavMenu.test.tsx +65 -1
- package/src/TopNav/TopNavMenu.tsx +30 -1
- package/src/TopNav/__tests__/TopNavMobileLongHeading.a11y.chromium.spec.ts +1 -0
- package/src/TreeList/TreeList.doc.mjs +13 -0
- package/src/TreeList/TreeList.spec.md +54 -35
- package/src/TreeList/TreeList.tsx +234 -2
- package/src/TreeList/TreeListBranches.tsx +8 -6
- package/src/TreeList/TreeListItem.tsx +12 -6
- package/src/TreeList/__tests__/TreeList.a11y.chromium.spec.ts +19 -6
- package/src/TreeList/__tests__/TreeListGuideAlignment.interaction.browser.spec.ts +127 -0
- package/src/TreeList/__tests__/TreeListRowNames.a11y.chromium.spec.ts +1 -0
- package/src/Typeahead/BaseTypeahead.emptyState.a11y.chromium.spec.ts +138 -0
- package/src/Typeahead/BaseTypeahead.test.tsx +201 -4
- package/src/Typeahead/BaseTypeahead.tsx +26 -10
- package/src/Typeahead/Typeahead.test.tsx +114 -1
- package/src/Typeahead/Typeahead.tsx +34 -16
- package/src/VisuallyHidden/VisuallyHidden.spec.md +170 -0
- package/src/__tests__/BusyOwnerAnnouncement.test.tsx +66 -5
- package/src/__tests__/CardPress.a11y.chromium.spec.ts +353 -0
- package/src/__tests__/DisabledTriggerFocus.a11y.chromium.spec.ts +2 -1
- package/src/__tests__/PressModality.a11y.chromium.spec.ts +392 -0
- package/src/__tests__/PressedState.a11y.chromium.spec.ts +1 -0
- package/src/__tests__/pressState.ts +43 -1
- package/src/__tests__/unthemedLength.ts +34 -0
- package/src/gestures/GestureArena.ts +966 -0
- package/src/gestures/GestureRecognizer.ts +626 -0
- package/src/gestures/LongPressGestureRecognizer.ts +186 -0
- package/src/gestures/PanGestureRecognizer.ts +410 -0
- package/src/gestures/TapGestureRecognizer.ts +192 -0
- package/src/gestures/VelocityTracker.ts +194 -0
- package/src/gestures/__tests__/LongPressGestureRecognizer.test.ts +141 -0
- package/src/gestures/__tests__/PanGestureRecognizer.test.ts +327 -0
- package/src/gestures/__tests__/TapGestureRecognizer.test.ts +154 -0
- package/src/gestures/__tests__/VelocityTracker.streams.test.ts +243 -0
- package/src/gestures/__tests__/VelocityTracker.test.ts +261 -0
- package/src/gestures/__tests__/arena.test.ts +824 -0
- package/src/gestures/__tests__/arenaContinuous.test.ts +207 -0
- package/src/gestures/__tests__/arenaTapLongPress.test.ts +211 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/README.md +82 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/android-chromium-fling.json +130 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/android-chromium-slow.json +860 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/android-chromium-stop-release.json +357 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/android-firefox-fling.json +66 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/android-firefox-slow.json +268 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/android-firefox-stop-release.json +128 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/capture.html +123 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-mouse-fling.json +64 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-mouse-slow.json +268 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-mouse-stop-release.json +124 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-pen-fling.json +64 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-pen-slow.json +268 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-pen-stop-release.json +124 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-touch-fling.json +84 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-touch-slow.json +381 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-touch-stop-release.json +171 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/ios-safari-fling.json +45 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/ios-safari-slow.json +101 -0
- package/src/gestures/__tests__/fixtures/pointer-streams/ios-safari-stop-release.json +130 -0
- package/src/gestures/__tests__/harness.ts +204 -0
- package/src/gestures/geometry.ts +55 -0
- package/src/gestures/types.ts +161 -0
- package/src/hooks/AnnounceRenderedText.tsx +27 -0
- package/src/hooks/ModalAnnounceProvider.tsx +155 -0
- package/src/hooks/__tests__/MenuPressShadowRoot.a11y.chromium.spec.ts +98 -4
- package/src/hooks/__tests__/menuLinkClicks.ts +71 -0
- package/src/hooks/actionGroupTracker.exports.test.ts +28 -0
- package/src/hooks/actionGroupTracker.test.ts +510 -0
- package/src/hooks/actionGroupTracker.ts +449 -0
- package/src/hooks/index.ts +6 -0
- package/src/hooks/menuPressOnItems.ts +40 -0
- package/src/hooks/modalAnnounce.ts +439 -0
- package/src/hooks/scrollGeometry.ts +71 -4
- package/src/hooks/useAdaptivePresentation.ts +46 -9
- package/src/hooks/useAnimatedLayout.doc.mjs +101 -0
- package/src/hooks/useAnimatedLayout.ts +61 -0
- package/src/hooks/useAnnounce.doc.mjs +4 -4
- package/src/hooks/useAnnounce.modal.test.tsx +1291 -0
- package/src/hooks/useAnnounce.test.tsx +64 -4
- package/src/hooks/useAnnounce.ts +452 -28
- package/src/hooks/useAnnounceRenderedText.adopters.test.tsx +226 -0
- package/src/hooks/useAnnounceRenderedText.ts +81 -11
- package/src/hooks/useBusyAnnouncement.adopters.test.tsx +69 -0
- package/src/hooks/useBusyAnnouncement.test.tsx +112 -0
- package/src/hooks/useBusyAnnouncement.ts +64 -54
- package/src/hooks/useFocusTrap.doc.mjs +3 -3
- package/src/hooks/useFocusTrap.test.tsx +135 -2
- package/src/hooks/useFocusTrap.ts +59 -27
- package/src/hooks/useMenuHover.ts +6 -2
- package/src/hooks/useMenuPress.doc.mjs +2 -2
- package/src/hooks/useMenuPress.test.tsx +5 -2
- package/src/hooks/useMenuPress.ts +72 -37
- package/src/hooks/usePressFeedback.doc.mjs +4 -4
- package/src/hooks/usePressFeedback.ts +5 -2
- package/src/hooks/useScrollableArea.test.tsx +344 -3
- package/src/hooks/useScrollableArea.ts +120 -12
- package/src/i18n/generated-locales/en.generated.ts +35 -0
- package/src/i18n/generated-locales/pseudo.generated.ts +37 -0
- package/src/internal/tokenizer-presentation.test.ts +29 -0
- package/src/internal/tokenizer-presentation.ts +25 -0
- package/src/internal/touch.test.ts +44 -0
- package/src/internal/touch.ts +41 -0
- package/src/motion/LayoutChangeSnapshot.tsx +50 -0
- package/src/motion/MEASUREMENTS.md +271 -0
- package/src/motion/README.md +218 -0
- package/src/motion/__tests__/animatedLayout.interaction.browser.spec.ts +1613 -0
- package/src/motion/__tests__/animatedLayoutAdopters.interaction.browser.spec.ts +217 -0
- package/src/motion/__tests__/animatedLayoutBundle.ts +17 -0
- package/src/motion/animatedLayout.boundary.test.ts +155 -0
- package/src/motion/animatedLayout.swap.test.ts +827 -0
- package/src/motion/animatedLayout.test.ts +1154 -0
- package/src/motion/animatedLayout.ts +1801 -0
- package/src/motion/animatedLayoutAdopters.test.tsx +500 -0
- package/src/motion/animator.test.ts +2653 -0
- package/src/motion/animator.ts +2794 -0
- package/src/motion/bezier.test.ts +52 -0
- package/src/motion/bezier.ts +64 -0
- package/src/motion/coast.test.ts +99 -0
- package/src/motion/coast.ts +150 -0
- package/src/motion/decay.test.ts +120 -0
- package/src/motion/decay.ts +126 -0
- package/src/motion/projection.test.ts +107 -0
- package/src/motion/projection.ts +116 -0
- package/src/motion/reducedMotion.stylex.ts +41 -0
- package/src/motion/reducedMotion.test.ts +129 -0
- package/src/motion/reducedMotion.ts +94 -0
- package/src/motion/reducedMotionPlan.test.ts +182 -0
- package/src/motion/reducedMotionPlan.ts +263 -0
- package/src/motion/resolveSnapPoint.test.ts +189 -0
- package/src/motion/resolveSnapPoint.ts +169 -0
- package/src/motion/roleValue.ts +105 -0
- package/src/motion/roles.test.ts +256 -0
- package/src/motion/roles.ts +262 -0
- package/src/motion/rubberBand.test.ts +88 -0
- package/src/motion/rubberBand.ts +115 -0
- package/src/motion/selectPage.test.ts +31 -0
- package/src/motion/selectPage.ts +55 -0
- package/src/motion/spring.test.ts +650 -0
- package/src/motion/spring.ts +551 -0
- package/src/motion/transientCopy.ts +374 -0
- package/src/motion/uikit/gestures.test.ts +89 -0
- package/src/motion/uikit/gestures.ts +359 -0
- package/src/motion/uikit/index.ts +80 -0
- package/src/motion/uikit/navigation.ts +83 -0
- package/src/motion/uikit/scroll.ts +141 -0
- package/src/motion/uikit/springRows.test.ts +71 -0
- package/src/motion/uikit/springs.ts +514 -0
- package/src/motion/uikit/timing.ts +210 -0
- package/src/motion/uikit/uikit.test.ts +364 -0
- package/src/motion/uikit/values.test.ts +110 -0
- package/src/reset.a11y.chromium.spec.ts +1 -0
- package/src/reset.until-found.a11y.browser.spec.ts +1 -0
- package/src/serverSafeComponents.test.ts +10 -0
- package/src/tailwind-theme.css +51 -1
- package/src/tailwind-theme.test.ts +51 -0
- package/src/theme/Theme.test.tsx +28 -0
- package/src/theme/__tests__/SpacingRootFontSize.a11y.chromium.spec.ts +1 -0
- package/src/theme/declarationBoundary.ts +282 -1
- package/src/theme/defineTheme.test.ts +529 -12
- package/src/theme/defineTheme.ts +231 -19
- package/src/theme/derivedVarRegistry.test.ts +34 -5
- package/src/theme/derivedVarRegistry.ts +4 -0
- package/src/theme/expandMotionScale.test.ts +17 -0
- package/src/theme/extensibleAxes.test.ts +74 -29
- package/src/theme/generateThemeRules.ts +772 -35
- package/src/theme/index.ts +3 -0
- package/src/theme/onMediaTokens.test.ts +186 -0
- package/src/theme/statusColor.ts +189 -0
- package/src/theme/statusRoleDerivation.ts +289 -0
- package/src/theme/syntax/SyntaxTheme.tsx +1 -1
- package/src/theme/syntax/defineSyntaxTheme.ts +1 -1
- package/src/theme/syntax/presets.ts +1 -1
- package/src/theme/syntax/tokens.ts +1 -1
- package/src/theme/themeAdaptations.test.ts +412 -0
- package/src/theme/themeAdaptations.ts +43 -1
- package/src/theme/tokens.stylex.ts +36 -2
- package/src/theme/tokens.test.ts +111 -1
- package/src/theme/tokens.ts +23 -1
- package/src/theme/useTheme.ts +10 -4
- package/src/utils/customPropertyArmLayering.test.ts +131 -0
- package/src/utils/edgeAutoscroll.test.ts +192 -0
- package/src/utils/edgeAutoscroll.ts +111 -0
- package/src/utils/hitArea.test.ts +628 -0
- package/src/utils/hitArea.ts +770 -0
- package/src/utils/interactionOverlay.stylex.ts +4 -1
- package/src/utils/pressFeedback.test.ts +310 -2
- package/src/utils/pressFeedback.ts +306 -54
- package/src/utils/pressGesture.test.ts +50 -0
- package/src/utils/pressGesture.ts +40 -2
- package/src/utils/touchPresentation.test.ts +323 -0
- package/src/utils/touchPresentation.ts +153 -0
|
@@ -4,24 +4,37 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file Tokenizer.tsx
|
|
7
|
-
* @input Uses React, BaseTypeahead, Field, Token, useAnnounce
|
|
8
|
-
*
|
|
7
|
+
* @input Uses React, BaseTypeahead, Field, Token, useAnnounce,
|
|
8
|
+
* useAdaptivePresentation, and TokenizerBottomSheet (lazy)
|
|
9
|
+
* @output Exports Tokenizer multi-select typeahead component, and the
|
|
10
|
+
* internal TokenizerWithPresentation signature the `internal/tokenizer-presentation`
|
|
11
|
+
* entry re-exports
|
|
9
12
|
* @position Composed component; forwards DOM ref and exposes focus control via
|
|
10
|
-
* handleRef
|
|
13
|
+
* handleRef. The sheet presentation — a trigger that opens
|
|
14
|
+
* TokenizerBottomSheet — is implemented but not exposed: `TokenizerProps`
|
|
15
|
+
* offers no `experimental.presentation` while its user experience is being
|
|
16
|
+
* finished (`component:Tokenizer` DEC-3, implementation gap), and only
|
|
17
|
+
* Astryx's own packages reach it through the internal entry
|
|
18
|
+
* (`architecture:react-component-runtime` INV13).
|
|
11
19
|
*
|
|
12
20
|
* SYNC: When modified, update:
|
|
13
21
|
* - /packages/core/src/Tokenizer/index.ts
|
|
22
|
+
* - /packages/core/src/Tokenizer/TokenizerBottomSheet.tsx (sheet presentation)
|
|
14
23
|
* - /apps/storybook/stories/Tokenizer.stories.tsx
|
|
15
24
|
* - /packages/cli/assets/templates/blocks/components/Tokenizer/ (showcase blocks)
|
|
16
25
|
*/
|
|
17
26
|
|
|
18
27
|
import React, {
|
|
28
|
+
lazy,
|
|
29
|
+
Suspense,
|
|
19
30
|
useCallback,
|
|
31
|
+
useEffect,
|
|
20
32
|
useId,
|
|
21
33
|
useImperativeHandle,
|
|
22
34
|
useMemo,
|
|
23
35
|
useRef,
|
|
24
36
|
useState,
|
|
37
|
+
type ComponentType,
|
|
25
38
|
type ReactNode,
|
|
26
39
|
type RefObject,
|
|
27
40
|
} from 'react';
|
|
@@ -39,6 +52,10 @@ import {
|
|
|
39
52
|
} from '../Field/fieldParts';
|
|
40
53
|
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
41
54
|
import {useBusyAnnouncement} from '../hooks/useBusyAnnouncement';
|
|
55
|
+
import {useAdaptivePresentation} from '../hooks/useAdaptivePresentation';
|
|
56
|
+
import {useIsHydrating} from '../hooks/useIsHydrating';
|
|
57
|
+
import {VisuallyHidden} from '../VisuallyHidden';
|
|
58
|
+
import {warnOnce} from '../utils/devWarning';
|
|
42
59
|
import type {SizeValue} from '../utils/types';
|
|
43
60
|
import {BaseTypeahead} from '../Typeahead/BaseTypeahead';
|
|
44
61
|
import {useSize} from '../SizeContext/SizeContext';
|
|
@@ -67,9 +84,10 @@ import {
|
|
|
67
84
|
typeScaleVars,
|
|
68
85
|
} from '../theme/tokens.stylex';
|
|
69
86
|
import type {SearchableItem, SearchSource} from '../Typeahead/types';
|
|
70
|
-
import {mergeProps} from '../utils';
|
|
87
|
+
import {composeEventHandlers, mergeProps} from '../utils';
|
|
71
88
|
import {themeProps} from '../utils/themeProps';
|
|
72
89
|
import {useTranslator} from '../i18n';
|
|
90
|
+
import type {TokenizerBottomSheetProps} from './TokenizerBottomSheet';
|
|
73
91
|
|
|
74
92
|
// Re-export status types for convenience
|
|
75
93
|
export type {
|
|
@@ -111,6 +129,36 @@ export interface TokenizerHandle {
|
|
|
111
129
|
blur(): void;
|
|
112
130
|
}
|
|
113
131
|
|
|
132
|
+
/**
|
|
133
|
+
* The presentation options the sheet-capable signature admits. Not public:
|
|
134
|
+
* `TokenizerProps` has no `experimental` while the sheet's user experience is
|
|
135
|
+
* being finished; Astryx's own packages reach the sheet through
|
|
136
|
+
* `@astryxdesign/core/internal/tokenizer-presentation`.
|
|
137
|
+
*/
|
|
138
|
+
export interface TokenizerPresentationOptions {
|
|
139
|
+
/**
|
|
140
|
+
* How the field presents its choices.
|
|
141
|
+
* - `'popover'`: the inline combobox with its anchored suggestion menu —
|
|
142
|
+
* the stable behavior.
|
|
143
|
+
* - `'bottom-sheet'`: a trigger showing the selected tokens that opens one
|
|
144
|
+
* tall modal sheet: a search row on top, full-width checkbox rows that
|
|
145
|
+
* keep their place while the sheet is open, a create row with
|
|
146
|
+
* `hasCreate`, and a footer with a confirmed Clear all and Done. Suited
|
|
147
|
+
* to compact touch screens, where the inline combobox competes with the
|
|
148
|
+
* software keyboard.
|
|
149
|
+
* - `'adaptive'`: the bottom sheet on compact coarse-pointer screens,
|
|
150
|
+
* otherwise the popover — the same resolution Selector uses.
|
|
151
|
+
*
|
|
152
|
+
* In the sheet presentation the trigger is the control: `ref`, `id`,
|
|
153
|
+
* `aria-*`, and `data-*` reach it. `renderItem`, `renderToken`,
|
|
154
|
+
* `endContent`, `hasClear`, `hasEntriesOnFocus`, `menuWidth`,
|
|
155
|
+
* `tokenOverflowBehavior`, and `hasAutoFocus` have no surface to act on
|
|
156
|
+
* and warn once in development.
|
|
157
|
+
* @default 'popover'
|
|
158
|
+
*/
|
|
159
|
+
presentation?: 'popover' | 'bottom-sheet' | 'adaptive';
|
|
160
|
+
}
|
|
161
|
+
|
|
114
162
|
export interface TokenizerProps<T extends SearchableItem> extends Omit<
|
|
115
163
|
FieldInputBaseProps<HTMLInputElement>,
|
|
116
164
|
'onChange' | 'onFocus' | 'onBlur' | 'onKeyDown'
|
|
@@ -264,6 +312,28 @@ export interface TokenizerProps<T extends SearchableItem> extends Omit<
|
|
|
264
312
|
handleRef?: React.Ref<TokenizerHandle>;
|
|
265
313
|
}
|
|
266
314
|
|
|
315
|
+
/**
|
|
316
|
+
* The props of the sheet-capable signature: `TokenizerProps` plus the
|
|
317
|
+
* presentation options and a `ref` that also accepts the sheet presentation's
|
|
318
|
+
* trigger button, the control it stands for there. Not public: reached only
|
|
319
|
+
* as `TokenizerWithPresentation` through the internal entry, so the released
|
|
320
|
+
* `TokenizerProps` — an interface, so `interface X extends TokenizerProps<T>`,
|
|
321
|
+
* `Omit<TokenizerProps<T>, …>` and `ComponentProps<typeof Tokenizer>` keep
|
|
322
|
+
* their released shapes — names no presentation.
|
|
323
|
+
*/
|
|
324
|
+
export type TokenizerWithPresentationProps<T extends SearchableItem> = Omit<
|
|
325
|
+
TokenizerProps<T>,
|
|
326
|
+
'ref'
|
|
327
|
+
> & {
|
|
328
|
+
/** How the field presents its choices; see `TokenizerPresentationOptions`. */
|
|
329
|
+
experimental?: TokenizerPresentationOptions;
|
|
330
|
+
/**
|
|
331
|
+
* Ref forwarded to the control: the combobox input in the popover
|
|
332
|
+
* presentation, the trigger button in the sheet presentation.
|
|
333
|
+
*/
|
|
334
|
+
ref?: React.Ref<HTMLInputElement | HTMLButtonElement>;
|
|
335
|
+
};
|
|
336
|
+
|
|
267
337
|
// =============================================================================
|
|
268
338
|
// Styles
|
|
269
339
|
// =============================================================================
|
|
@@ -394,6 +464,55 @@ const styles = stylex.create({
|
|
|
394
464
|
color: colorVars['--color-text-secondary'],
|
|
395
465
|
paddingInline: spacingVars['--spacing-1'],
|
|
396
466
|
},
|
|
467
|
+
// The sheet presentation's trigger: the field's own control box, as a
|
|
468
|
+
// button. It wraps tokens like the inline field, but there is no input to
|
|
469
|
+
// type into, so the cursor says "press".
|
|
470
|
+
sheetTrigger: {
|
|
471
|
+
width: '100%',
|
|
472
|
+
fontFamily: 'inherit',
|
|
473
|
+
fontSize: 'inherit',
|
|
474
|
+
color: 'inherit',
|
|
475
|
+
textAlign: 'start',
|
|
476
|
+
appearance: 'none',
|
|
477
|
+
cursor: {
|
|
478
|
+
default: 'pointer',
|
|
479
|
+
':is(:disabled,[aria-disabled="true"])': 'default',
|
|
480
|
+
},
|
|
481
|
+
},
|
|
482
|
+
// An aria-disabled button gets no system disabled paint in forced colors;
|
|
483
|
+
// GrayText is the platform's disabled affordance there. Defaults repeat the
|
|
484
|
+
// base values, since StyleX merges per property.
|
|
485
|
+
sheetTriggerDisabled: {
|
|
486
|
+
borderColor: {
|
|
487
|
+
default: colorVars['--color-border-emphasized'],
|
|
488
|
+
'@media (forced-colors: active)': 'GrayText',
|
|
489
|
+
},
|
|
490
|
+
color: {
|
|
491
|
+
default: null,
|
|
492
|
+
'@media (forced-colors: active)': 'GrayText',
|
|
493
|
+
},
|
|
494
|
+
},
|
|
495
|
+
sheetTriggerPlaceholder: {
|
|
496
|
+
color: colorVars['--color-text-secondary'],
|
|
497
|
+
// Match the input's text inset so the placeholder sits where the typed
|
|
498
|
+
// query would.
|
|
499
|
+
paddingInline: spacingVars['--spacing-1'],
|
|
500
|
+
},
|
|
501
|
+
sheetTriggerPlaceholderDisabled: {
|
|
502
|
+
color: {
|
|
503
|
+
default: colorVars['--color-text-secondary'],
|
|
504
|
+
'@media (forced-colors: active)': 'GrayText',
|
|
505
|
+
},
|
|
506
|
+
},
|
|
507
|
+
// A Token authors its own color, which forced colors replace with
|
|
508
|
+
// CanvasText; GrayText marks the tokens of a disabled trigger as disabled.
|
|
509
|
+
// The default repeats Token's own default color.
|
|
510
|
+
sheetTokenDisabled: {
|
|
511
|
+
color: {
|
|
512
|
+
default: colorVars['--color-text-primary'],
|
|
513
|
+
'@media (forced-colors: active)': 'GrayText',
|
|
514
|
+
},
|
|
515
|
+
},
|
|
397
516
|
});
|
|
398
517
|
|
|
399
518
|
const sizeStyles = stylex.create({
|
|
@@ -437,6 +556,46 @@ const layerPlaceholderSizeStyles = stylex.create({
|
|
|
437
556
|
// "Create: X" suggestions from real search results.
|
|
438
557
|
const CREATABLE_ID_PREFIX = '__xds_create__';
|
|
439
558
|
|
|
559
|
+
// The touch sheet (BottomSheet, its gestures, the confirmation dialog, and
|
|
560
|
+
// the empty state) only renders for the bottom-sheet presentation. Loading it
|
|
561
|
+
// on demand keeps it out of pages whose tokenizers stay inline combobox fields
|
|
562
|
+
// (`component:Tokenizer` PR6).
|
|
563
|
+
// One import promise, shared by the preload and the lazy element: the sheet
|
|
564
|
+
// presentation loads its chunk as soon as it is active, so the first press
|
|
565
|
+
// does not wait for the network, while nothing of the sheet is rendered until
|
|
566
|
+
// a press (`architecture:component-style-authoring` INV7).
|
|
567
|
+
const loadTokenizerBottomSheet = async () => import('./TokenizerBottomSheet');
|
|
568
|
+
const LazyTokenizerBottomSheet = lazy(async () =>
|
|
569
|
+
loadTokenizerBottomSheet().then(module => ({
|
|
570
|
+
default: module.TokenizerBottomSheet,
|
|
571
|
+
})),
|
|
572
|
+
);
|
|
573
|
+
|
|
574
|
+
/**
|
|
575
|
+
* Hosts the lazily loaded sheet. Renders nothing on the server or in the
|
|
576
|
+
* render that hydrates server HTML: a lazy component that has not loaded yet
|
|
577
|
+
* would leave server markup incomplete and abort hydration. The closed sheet
|
|
578
|
+
* has no visible markup, so it first renders right after hydration.
|
|
579
|
+
*/
|
|
580
|
+
function TokenizerSheetHost<T extends SearchableItem>(
|
|
581
|
+
props: TokenizerBottomSheetProps<T>,
|
|
582
|
+
) {
|
|
583
|
+
const isHydrating = useIsHydrating();
|
|
584
|
+
if (isHydrating) {
|
|
585
|
+
return null;
|
|
586
|
+
}
|
|
587
|
+
// `lazy` erases the component's type parameter; the module exports the
|
|
588
|
+
// generic component this props type belongs to.
|
|
589
|
+
const Sheet = LazyTokenizerBottomSheet as unknown as ComponentType<
|
|
590
|
+
TokenizerBottomSheetProps<T>
|
|
591
|
+
>;
|
|
592
|
+
return (
|
|
593
|
+
<Suspense fallback={null}>
|
|
594
|
+
<Sheet {...props} />
|
|
595
|
+
</Suspense>
|
|
596
|
+
);
|
|
597
|
+
}
|
|
598
|
+
|
|
440
599
|
/**
|
|
441
600
|
* Multi-select input with token chips and typeahead search.
|
|
442
601
|
*
|
|
@@ -540,6 +699,13 @@ function EndLane({
|
|
|
540
699
|
);
|
|
541
700
|
}
|
|
542
701
|
|
|
702
|
+
// The public signature names no presentation: `ComponentProps<typeof
|
|
703
|
+
// Tokenizer>` and every public call resolve against `TokenizerProps`. The
|
|
704
|
+
// implementation also reads the presentation options, reached only through
|
|
705
|
+
// `TokenizerWithPresentation` below.
|
|
706
|
+
export function Tokenizer<T extends SearchableItem>(
|
|
707
|
+
props: TokenizerProps<T>,
|
|
708
|
+
): React.JSX.Element;
|
|
543
709
|
export function Tokenizer<T extends SearchableItem>({
|
|
544
710
|
label,
|
|
545
711
|
isLabelHidden = false,
|
|
@@ -585,15 +751,19 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
585
751
|
ref,
|
|
586
752
|
handleRef,
|
|
587
753
|
onKeyDown,
|
|
754
|
+
experimental,
|
|
588
755
|
id: idProp,
|
|
589
756
|
'aria-describedby': ariaDescribedByProp,
|
|
590
757
|
...restProps
|
|
591
|
-
}:
|
|
758
|
+
}: TokenizerWithPresentationProps<T>): React.JSX.Element {
|
|
592
759
|
const {rest, container} = useFieldInputStyling('Tokenizer', restProps, {
|
|
593
760
|
containerXstyle,
|
|
594
761
|
containerClassName,
|
|
595
762
|
containerStyle,
|
|
596
763
|
});
|
|
764
|
+
// A caller's onClick arrives through the base props; the sheet trigger
|
|
765
|
+
// composes it with its own open handler rather than letting either win.
|
|
766
|
+
const {onClick: callerOnClick, ...restWithoutClick} = rest;
|
|
597
767
|
const t = useTranslator();
|
|
598
768
|
const size = useSize(sizeProp, 'md');
|
|
599
769
|
const generatedInputId = useId();
|
|
@@ -603,10 +773,159 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
603
773
|
const inputRef = useRef<HTMLInputElement>(null);
|
|
604
774
|
const wrapperRef = useRef<HTMLDivElement>(null);
|
|
605
775
|
|
|
606
|
-
//
|
|
607
|
-
//
|
|
608
|
-
//
|
|
609
|
-
//
|
|
776
|
+
// Experimental presentation (`component:Tokenizer` DEC-3). `adaptive`
|
|
777
|
+
// resolves through the policy the selection controls share; an open sheet
|
|
778
|
+
// keeps its presentation until it closes, so a resolution change mid-task
|
|
779
|
+
// cannot pull the surface out from under the person.
|
|
780
|
+
const presentation = experimental?.presentation ?? 'popover';
|
|
781
|
+
const resolvedPresentation = useAdaptivePresentation(presentation);
|
|
782
|
+
const [isSheetOpen, setIsSheetOpen] = useState(false);
|
|
783
|
+
// Latched for the sheet's lifetime: a sheet stays presented after it closes
|
|
784
|
+
// until BottomSheet has run its exit and handed focus back to the trigger.
|
|
785
|
+
// Without the latch, `adaptive` resolving to `popover` mid-session (a phone
|
|
786
|
+
// turned to landscape) would unmount the sheet and the trigger it returns
|
|
787
|
+
// focus to in the same render, dropping focus to the page body
|
|
788
|
+
// (`component:Tokenizer` FR16).
|
|
789
|
+
const [isSheetPresented, setIsSheetPresented] = useState(false);
|
|
790
|
+
const isSheetPresentation =
|
|
791
|
+
isSheetOpen || isSheetPresented || resolvedPresentation === 'bottom-sheet';
|
|
792
|
+
// Preload the sheet's chunk while the sheet presentation is active, so the
|
|
793
|
+
// first press opens without waiting for the network; nothing renders.
|
|
794
|
+
useEffect(() => {
|
|
795
|
+
if (isSheetPresentation) {
|
|
796
|
+
void loadTokenizerBottomSheet();
|
|
797
|
+
}
|
|
798
|
+
}, [isSheetPresentation]);
|
|
799
|
+
const triggerRef = useRef<HTMLButtonElement>(null);
|
|
800
|
+
// The sheet's query between presentations: the sheet is in the DOM only
|
|
801
|
+
// from a press until its exit completes, and a close the field forces
|
|
802
|
+
// keeps the query (FR18). The ref follows every report; the press
|
|
803
|
+
// snapshots it into the state the next presentation starts from.
|
|
804
|
+
const sheetQueryRef = useRef('');
|
|
805
|
+
const [sheetInitialQuery, setSheetInitialQuery] = useState('');
|
|
806
|
+
const handleSheetQueryChange = useCallback(
|
|
807
|
+
(query: string) => {
|
|
808
|
+
sheetQueryRef.current = query;
|
|
809
|
+
onChangeQuery?.(query);
|
|
810
|
+
},
|
|
811
|
+
[onChangeQuery],
|
|
812
|
+
);
|
|
813
|
+
// Whether the field's control — the inline input or the trigger — holds
|
|
814
|
+
// focus. Kept in a ref by the focus and blur handlers of both, because a
|
|
815
|
+
// control unmounted while focused fires no blur: when a presentation swap
|
|
816
|
+
// removes the focused control (the latch releasing into the popover, or
|
|
817
|
+
// `adaptive` changing while the sheet is closed), the new presentation's
|
|
818
|
+
// control takes the focus over once it has mounted, so focus never lands on
|
|
819
|
+
// the page body (`component:Tokenizer` FR16, `spec:AST-085` FR4).
|
|
820
|
+
const isControlFocusedRef = useRef(false);
|
|
821
|
+
// Set around a focus move the field makes itself — a presentation swap
|
|
822
|
+
// handing focus from one control to the other — so the receiving control
|
|
823
|
+
// does not report it as focus entering from outside.
|
|
824
|
+
const isHandingOffFocusRef = useRef(false);
|
|
825
|
+
// Whether the caller has been told focus entered the field in this visit,
|
|
826
|
+
// so `onBlur` is never reported without its `onFocus`: in Safari a click
|
|
827
|
+
// or tap does not focus a button, so a pointer-opened sheet reports no
|
|
828
|
+
// entry, and the one focus the trigger then gets — BottomSheet's return
|
|
829
|
+
// focus — is the entry to report.
|
|
830
|
+
const hasReportedFocusRef = useRef(false);
|
|
831
|
+
// A control can hold focus without the field having seen a focus event:
|
|
832
|
+
// the inline input server-rendered with `autofocus` (`hasAutoFocus`) is
|
|
833
|
+
// focused before hydration, and the swap to the trigger in the first
|
|
834
|
+
// render after it removes that input. React detaches the old control
|
|
835
|
+
// before any effect of the swapping commit runs, so the live focus is
|
|
836
|
+
// read during that render, while the control is still in the document —
|
|
837
|
+
// a read of `document.activeElement` only, with no update made in render.
|
|
838
|
+
const previousPresentationRef = useRef(isSheetPresentation);
|
|
839
|
+
if (previousPresentationRef.current !== isSheetPresentation) {
|
|
840
|
+
previousPresentationRef.current = isSheetPresentation;
|
|
841
|
+
if (typeof document !== 'undefined') {
|
|
842
|
+
const active = document.activeElement;
|
|
843
|
+
if (
|
|
844
|
+
active != null &&
|
|
845
|
+
(active === inputRef.current || active === triggerRef.current)
|
|
846
|
+
) {
|
|
847
|
+
isControlFocusedRef.current = true;
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
}
|
|
851
|
+
useEffect(() => {
|
|
852
|
+
if (!isControlFocusedRef.current) {
|
|
853
|
+
return;
|
|
854
|
+
}
|
|
855
|
+
const active = document.activeElement;
|
|
856
|
+
if (active != null && active !== document.body) {
|
|
857
|
+
return;
|
|
858
|
+
}
|
|
859
|
+
isHandingOffFocusRef.current = true;
|
|
860
|
+
(isSheetPresentation ? triggerRef.current : inputRef.current)?.focus();
|
|
861
|
+
isHandingOffFocusRef.current = false;
|
|
862
|
+
}, [isSheetPresentation]);
|
|
863
|
+
// The trigger's accessible description names the selected tokens: the
|
|
864
|
+
// button's children are tokens whose own content assistive technology
|
|
865
|
+
// leaves out of a button's name (`spec:AST-020` FR1).
|
|
866
|
+
const triggerTokensId = useId();
|
|
867
|
+
// Each rendered token's id, for the trigger's description; the item id is
|
|
868
|
+
// an arbitrary string, so it is encoded rather than used as is.
|
|
869
|
+
const tokenElementId = (itemId: string) =>
|
|
870
|
+
`${triggerTokensId}-${encodeURIComponent(itemId)}`;
|
|
871
|
+
// Props that describe the inline combobox have no surface in the sheet
|
|
872
|
+
// presentation. Say so once in development rather than dropping them
|
|
873
|
+
// silently (`architecture:public-component-api` INV3).
|
|
874
|
+
const inertSheetProps = isSheetPresentation
|
|
875
|
+
? (
|
|
876
|
+
[
|
|
877
|
+
['renderItem', renderItem],
|
|
878
|
+
['renderToken', renderToken],
|
|
879
|
+
['endContent', endContent],
|
|
880
|
+
['hasClear', hasClear || undefined],
|
|
881
|
+
['hasEntriesOnFocus', hasEntriesOnFocus || undefined],
|
|
882
|
+
['menuWidth', menuWidth],
|
|
883
|
+
['tokenOverflowBehavior', tokenOverflowBehavior],
|
|
884
|
+
['hasAutoFocus', hasAutoFocus || undefined],
|
|
885
|
+
] as const
|
|
886
|
+
)
|
|
887
|
+
.filter(([, v]) => v !== undefined && v !== 'none')
|
|
888
|
+
.map(([name]) => name)
|
|
889
|
+
: [];
|
|
890
|
+
const inertSheetPropsKey = inertSheetProps.join(',');
|
|
891
|
+
useEffect(() => {
|
|
892
|
+
if (inertSheetPropsKey === '') {
|
|
893
|
+
return;
|
|
894
|
+
}
|
|
895
|
+
warnOnce(
|
|
896
|
+
`tokenizer:sheet-inert:${inertSheetPropsKey}`,
|
|
897
|
+
'Tokenizer',
|
|
898
|
+
`\`${inertSheetProps.join('`, `')}\` ${
|
|
899
|
+
inertSheetProps.length === 1 ? 'has' : 'have'
|
|
900
|
+
} no surface in the bottom-sheet presentation and ${
|
|
901
|
+
inertSheetProps.length === 1 ? 'is' : 'are'
|
|
902
|
+
} not rendered there.`,
|
|
903
|
+
);
|
|
904
|
+
// eslint-disable-next-line @eslint-react/exhaustive-deps -- keyed by the joined names
|
|
905
|
+
}, [inertSheetPropsKey]);
|
|
906
|
+
// A field that becomes disabled cannot keep its sheet open, and must not
|
|
907
|
+
// reopen it when re-enabled (`component:Tokenizer` FR17). Adjusted in the
|
|
908
|
+
// render that sees the change, not an effect, so no frame shows both.
|
|
909
|
+
const [wasDisabled, setWasDisabled] = useState(isDisabled);
|
|
910
|
+
// A sheet that was open when the field became disabled stays mounted,
|
|
911
|
+
// closed, so it runs its exit and hands focus back to the trigger; a field
|
|
912
|
+
// that is disabled from the start mounts no sheet.
|
|
913
|
+
const [keepsSheetWhileDisabled, setKeepsSheetWhileDisabled] = useState(false);
|
|
914
|
+
if (isDisabled !== wasDisabled) {
|
|
915
|
+
setWasDisabled(isDisabled);
|
|
916
|
+
if (isDisabled && isSheetOpen) {
|
|
917
|
+
setIsSheetOpen(false);
|
|
918
|
+
setKeepsSheetWhileDisabled(true);
|
|
919
|
+
}
|
|
920
|
+
if (!isDisabled) {
|
|
921
|
+
setKeepsSheetWhileDisabled(false);
|
|
922
|
+
}
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
// Disabled-reason tooltip. The tooltip listeners attach to the input wrapper
|
|
926
|
+
// and the typeahead input stays perceivable via aria-disabled instead of the
|
|
927
|
+
// disabled attribute. Input is blocked by the isDisabled guards in
|
|
928
|
+
// BaseTypeahead and handleWrapperClick.
|
|
610
929
|
const showsDisabledMessage = isDisabled && !!disabledMessage;
|
|
611
930
|
const disabledMessageTooltip = useTooltip({
|
|
612
931
|
placement: 'above',
|
|
@@ -616,12 +935,20 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
616
935
|
isEnabled: showsDisabledMessage,
|
|
617
936
|
});
|
|
618
937
|
|
|
938
|
+
// The sheet presentation has no input; the public ref reaches the trigger,
|
|
939
|
+
// the control it stands for (`family:input-fields` FR10).
|
|
940
|
+
const triggerMergedRef = useMergedRefs<HTMLButtonElement>(
|
|
941
|
+
triggerRef,
|
|
942
|
+
ref as React.Ref<HTMLButtonElement> | undefined,
|
|
943
|
+
disabledMessageTooltip.ref,
|
|
944
|
+
);
|
|
945
|
+
|
|
619
946
|
useImperativeHandle(handleRef, () => ({
|
|
620
947
|
focus() {
|
|
621
|
-
inputRef.current?.focus();
|
|
948
|
+
(isSheetPresentation ? triggerRef : inputRef).current?.focus();
|
|
622
949
|
},
|
|
623
950
|
blur() {
|
|
624
|
-
inputRef.current?.blur();
|
|
951
|
+
(isSheetPresentation ? triggerRef : inputRef).current?.blur();
|
|
625
952
|
},
|
|
626
953
|
}));
|
|
627
954
|
|
|
@@ -694,7 +1021,11 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
694
1021
|
layer.show();
|
|
695
1022
|
}
|
|
696
1023
|
if (comingFromOutside) {
|
|
697
|
-
|
|
1024
|
+
isControlFocusedRef.current = true;
|
|
1025
|
+
if (!isHandingOffFocusRef.current) {
|
|
1026
|
+
hasReportedFocusRef.current = true;
|
|
1027
|
+
onFocus?.(e);
|
|
1028
|
+
}
|
|
698
1029
|
// Redirect to the input so the user doesn't have to tab through
|
|
699
1030
|
// every token remove button.
|
|
700
1031
|
if (e.target !== inputRef.current) {
|
|
@@ -708,6 +1039,8 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
708
1039
|
const handleBlurCapture = useCallback(
|
|
709
1040
|
(e: React.FocusEvent) => {
|
|
710
1041
|
if (!isFocusInTokenizer(e.relatedTarget)) {
|
|
1042
|
+
isControlFocusedRef.current = false;
|
|
1043
|
+
hasReportedFocusRef.current = false;
|
|
711
1044
|
setIsFocusedWithin(false);
|
|
712
1045
|
onBlur?.(e);
|
|
713
1046
|
if (isLayerMode) {
|
|
@@ -794,20 +1127,22 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
794
1127
|
[],
|
|
795
1128
|
);
|
|
796
1129
|
|
|
797
|
-
// Announce token add/remove politely via
|
|
798
|
-
//
|
|
799
|
-
//
|
|
800
|
-
//
|
|
1130
|
+
// Announce token add/remove politely via a persistent live region.
|
|
1131
|
+
// Announce token add/remove politely. `useAnnounce` follows where this
|
|
1132
|
+
// call is made (`spec:AST-086` FR14): the inline field's words go to the
|
|
1133
|
+
// shared channel, or into the modal that encloses the field. The sheet's
|
|
1134
|
+
// own changes are announced from inside the sheet, where FR14 routes them
|
|
1135
|
+
// into the sheet's dialog; the handlers below stay silent for those.
|
|
801
1136
|
const announce = useAnnounce();
|
|
802
1137
|
|
|
803
1138
|
// Handle adding an item — detect creatable synthetic items
|
|
804
1139
|
const handleAdd = useCallback(
|
|
805
|
-
(item: T | null) => {
|
|
806
|
-
if (!item) {
|
|
807
|
-
return;
|
|
1140
|
+
(item: T | null, options?: {silent?: boolean}): boolean => {
|
|
1141
|
+
if (isDisabled || !item) {
|
|
1142
|
+
return false;
|
|
808
1143
|
}
|
|
809
1144
|
if (isAtMax) {
|
|
810
|
-
return;
|
|
1145
|
+
return false;
|
|
811
1146
|
}
|
|
812
1147
|
|
|
813
1148
|
// Detect "Create: X" synthetic items from the creatable source
|
|
@@ -824,26 +1159,32 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
824
1159
|
selectedIds.has(createdValue) ||
|
|
825
1160
|
selectedLabels.has(createdValue.toLowerCase())
|
|
826
1161
|
) {
|
|
827
|
-
return;
|
|
1162
|
+
return false;
|
|
828
1163
|
}
|
|
829
1164
|
const base = {id: createdValue, label: createdValue};
|
|
830
1165
|
const realItem = base as T;
|
|
831
1166
|
const newItems = [...value, realItem];
|
|
832
1167
|
onChange(newItems, {item: realItem, type: 'create'});
|
|
833
|
-
|
|
834
|
-
|
|
1168
|
+
if (!options?.silent) {
|
|
1169
|
+
announce(t('@astryx.tokenizer.tokenAdded', {label: createdValue}));
|
|
1170
|
+
}
|
|
1171
|
+
return true;
|
|
835
1172
|
}
|
|
836
1173
|
|
|
837
1174
|
if (selectedIds.has(item.id)) {
|
|
838
|
-
return;
|
|
1175
|
+
return false;
|
|
839
1176
|
}
|
|
840
1177
|
const newItems = [...value, item];
|
|
841
1178
|
onChange(newItems, {item, type: 'add'});
|
|
842
|
-
|
|
1179
|
+
if (!options?.silent) {
|
|
1180
|
+
announce(t('@astryx.tokenizer.tokenAdded', {label: item.label}));
|
|
1181
|
+
}
|
|
1182
|
+
return true;
|
|
843
1183
|
},
|
|
844
1184
|
[
|
|
845
1185
|
value,
|
|
846
1186
|
onChange,
|
|
1187
|
+
isDisabled,
|
|
847
1188
|
isAtMax,
|
|
848
1189
|
selectedIds,
|
|
849
1190
|
selectedLabels,
|
|
@@ -857,25 +1198,31 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
857
1198
|
// input and the per-token remove buttons route through here, so the
|
|
858
1199
|
// announcement covers both.
|
|
859
1200
|
const handleRemove = useCallback(
|
|
860
|
-
(item: T) => {
|
|
1201
|
+
(item: T, options?: {silent?: boolean}): boolean => {
|
|
1202
|
+
if (isDisabled) {
|
|
1203
|
+
return false;
|
|
1204
|
+
}
|
|
861
1205
|
const newItems = value.filter(v => v.id !== item.id);
|
|
862
1206
|
onChange(newItems, {item, type: 'remove'});
|
|
863
|
-
|
|
1207
|
+
if (!options?.silent) {
|
|
1208
|
+
announce(t('@astryx.tokenizer.tokenRemoved', {label: item.label}));
|
|
1209
|
+
}
|
|
864
1210
|
inputRef.current?.focus();
|
|
1211
|
+
return true;
|
|
865
1212
|
},
|
|
866
|
-
[value, onChange, announce, t],
|
|
1213
|
+
[value, onChange, isDisabled, announce, t],
|
|
867
1214
|
);
|
|
868
1215
|
|
|
869
1216
|
// Handle clearing all items
|
|
870
1217
|
const handleClearAll = useCallback(() => {
|
|
871
|
-
if (value.length === 0) {
|
|
1218
|
+
if (isDisabled || value.length === 0) {
|
|
872
1219
|
return;
|
|
873
1220
|
}
|
|
874
1221
|
// Report the last item as removed (convention)
|
|
875
1222
|
const lastItem = value[value.length - 1];
|
|
876
1223
|
onChange([], {item: lastItem, type: 'remove'});
|
|
877
1224
|
inputRef.current?.focus();
|
|
878
|
-
}, [value, onChange]);
|
|
1225
|
+
}, [value, onChange, isDisabled]);
|
|
879
1226
|
|
|
880
1227
|
// Handle backspace on empty input — remove last token
|
|
881
1228
|
const handleKeyDown = useCallback(
|
|
@@ -1022,7 +1369,12 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
1022
1369
|
<TrailingKeyDownContext value={onKeyDown}>
|
|
1023
1370
|
<BaseTypeahead
|
|
1024
1371
|
{...rest}
|
|
1025
|
-
ref={useMergedRefs(
|
|
1372
|
+
ref={useMergedRefs(
|
|
1373
|
+
inputRef,
|
|
1374
|
+
// With `experimental`, the ref type admits the trigger too; in
|
|
1375
|
+
// this presentation it receives the input.
|
|
1376
|
+
ref as React.Ref<HTMLInputElement> | undefined,
|
|
1377
|
+
)}
|
|
1026
1378
|
searchSource={isAtMax ? emptySource : filteredSource}
|
|
1027
1379
|
value={null}
|
|
1028
1380
|
onChange={handleAdd}
|
|
@@ -1065,16 +1417,9 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
1065
1417
|
</TrailingKeyDownContext>
|
|
1066
1418
|
</BusyIndicatorLaneProvider>
|
|
1067
1419
|
{htmlName != null &&
|
|
1420
|
+
!isDisabled &&
|
|
1068
1421
|
value.map(item => (
|
|
1069
|
-
<input
|
|
1070
|
-
key={item.id}
|
|
1071
|
-
type="hidden"
|
|
1072
|
-
name={htmlName}
|
|
1073
|
-
value={item.id}
|
|
1074
|
-
// Disabled native controls are excluded from form submission;
|
|
1075
|
-
// mirror that for the hidden carriers.
|
|
1076
|
-
disabled={isDisabled}
|
|
1077
|
-
/>
|
|
1422
|
+
<input key={item.id} type="hidden" name={htmlName} value={item.id} />
|
|
1078
1423
|
))}
|
|
1079
1424
|
<EndLane
|
|
1080
1425
|
lane={busyLane}
|
|
@@ -1102,7 +1447,191 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
1102
1447
|
);
|
|
1103
1448
|
|
|
1104
1449
|
let tokenizerContent: ReactNode;
|
|
1105
|
-
if (
|
|
1450
|
+
if (isSheetPresentation) {
|
|
1451
|
+
tokenizerContent = (
|
|
1452
|
+
<>
|
|
1453
|
+
<button
|
|
1454
|
+
// The field-level pass-through props (`data-*`, `aria-*`) were typed
|
|
1455
|
+
// for the inline input; here the control is a button.
|
|
1456
|
+
{...(restWithoutClick as React.ButtonHTMLAttributes<HTMLButtonElement>)}
|
|
1457
|
+
ref={triggerMergedRef}
|
|
1458
|
+
type="button"
|
|
1459
|
+
id={inputId}
|
|
1460
|
+
aria-haspopup="dialog"
|
|
1461
|
+
aria-expanded={isSheetOpen}
|
|
1462
|
+
aria-disabled={isDisabled || undefined}
|
|
1463
|
+
// The description is what the inline input's is, in its order —
|
|
1464
|
+
// the caller's ids, the field description, the status message, the
|
|
1465
|
+
// disabled reason (`spec:AST-085` FR5: a disabled control exposes
|
|
1466
|
+
// its description and reason on itself) — then the hidden count and
|
|
1467
|
+
// the rendered tokens themselves, each by id: the
|
|
1468
|
+
// accessible-description algorithm reads the referenced elements in
|
|
1469
|
+
// order and separates them, so every label renders once
|
|
1470
|
+
// (`architecture:component-style-authoring` INV7) and no locale's
|
|
1471
|
+
// list punctuation is written here (AR6).
|
|
1472
|
+
aria-describedby={
|
|
1473
|
+
[
|
|
1474
|
+
ariaDescribedByProp,
|
|
1475
|
+
ariaDescribedBy,
|
|
1476
|
+
value.length > 0 ? triggerTokensId : null,
|
|
1477
|
+
...value.map(item => tokenElementId(item.id)),
|
|
1478
|
+
]
|
|
1479
|
+
.filter(Boolean)
|
|
1480
|
+
.join(' ') || undefined
|
|
1481
|
+
}
|
|
1482
|
+
// The open runs first and the caller's onClick after it, as the
|
|
1483
|
+
// inline input composes its click: a caller observes the click but
|
|
1484
|
+
// cannot cancel the field's own handling
|
|
1485
|
+
// (`family:input-fields` FR10).
|
|
1486
|
+
onClick={composeEventHandlers<React.MouseEvent<HTMLButtonElement>>(
|
|
1487
|
+
() => {
|
|
1488
|
+
if (isDisabled) {
|
|
1489
|
+
return;
|
|
1490
|
+
}
|
|
1491
|
+
setIsSheetPresented(true);
|
|
1492
|
+
setSheetInitialQuery(sheetQueryRef.current);
|
|
1493
|
+
setIsSheetOpen(true);
|
|
1494
|
+
},
|
|
1495
|
+
// Typed for the input by the base props; here the control is the
|
|
1496
|
+
// trigger button, and the handler only reads the event.
|
|
1497
|
+
callerOnClick as unknown as
|
|
1498
|
+
React.MouseEventHandler<HTMLButtonElement> | undefined,
|
|
1499
|
+
)}
|
|
1500
|
+
onFocus={event => {
|
|
1501
|
+
isControlFocusedRef.current = true;
|
|
1502
|
+
// BottomSheet focuses the trigger only after its exit completes;
|
|
1503
|
+
// that focus is the signal that the retained sheet can leave. If
|
|
1504
|
+
// the resolution moved to the popover meanwhile, the inline input
|
|
1505
|
+
// takes the focus over once it mounts. The field's own sheet is
|
|
1506
|
+
// part of the field: focus coming back from it, or handed over by
|
|
1507
|
+
// a presentation swap, is not focus entering from outside, so the
|
|
1508
|
+
// caller's onFocus — "when focus enters the tokenizer from
|
|
1509
|
+
// outside" — stays quiet for it (`family:input-fields` FR10).
|
|
1510
|
+
const isReturningFromSheet = !isSheetOpen && isSheetPresented;
|
|
1511
|
+
if (isReturningFromSheet) {
|
|
1512
|
+
setIsSheetPresented(false);
|
|
1513
|
+
}
|
|
1514
|
+
const isInsideTheField =
|
|
1515
|
+
(isReturningFromSheet && hasReportedFocusRef.current) ||
|
|
1516
|
+
isHandingOffFocusRef.current;
|
|
1517
|
+
if (!isInsideTheField) {
|
|
1518
|
+
hasReportedFocusRef.current = true;
|
|
1519
|
+
onFocus?.(event);
|
|
1520
|
+
}
|
|
1521
|
+
}}
|
|
1522
|
+
onBlur={event => {
|
|
1523
|
+
// Focus moving into the sheet is still the field's: the flag
|
|
1524
|
+
// stays, and the caller's onBlur — "when focus leaves the
|
|
1525
|
+
// tokenizer entirely" — stays quiet. Only a blur to somewhere
|
|
1526
|
+
// else reports.
|
|
1527
|
+
if (isSheetOpen) {
|
|
1528
|
+
return;
|
|
1529
|
+
}
|
|
1530
|
+
isControlFocusedRef.current = false;
|
|
1531
|
+
hasReportedFocusRef.current = false;
|
|
1532
|
+
onBlur?.(event);
|
|
1533
|
+
}}
|
|
1534
|
+
onKeyDown={onKeyDown}
|
|
1535
|
+
{...mergeProps(
|
|
1536
|
+
themeProps('tokenizer', {
|
|
1537
|
+
size,
|
|
1538
|
+
status: status?.type,
|
|
1539
|
+
disabled: isDisabled ? 'disabled' : null,
|
|
1540
|
+
}),
|
|
1541
|
+
stylex.props(
|
|
1542
|
+
inputWrapperStyles.base,
|
|
1543
|
+
styles.wrapper,
|
|
1544
|
+
styles.sheetTrigger,
|
|
1545
|
+
// The trigger keeps the inline field's height for its size step,
|
|
1546
|
+
// as Selector's bottom-sheet trigger does; the sheet's own rows
|
|
1547
|
+
// and search field carry the touch-sized targets.
|
|
1548
|
+
sizeStyles[size],
|
|
1549
|
+
value.length > 0 && styles.wrapperWithTokens,
|
|
1550
|
+
isDisabled && inputWrapperStyles.disabled,
|
|
1551
|
+
isDisabled && styles.sheetTriggerDisabled,
|
|
1552
|
+
status && inputStatusBorderStyles[status.type],
|
|
1553
|
+
status &&
|
|
1554
|
+
!isDisabled &&
|
|
1555
|
+
inputStatusHoverShadowStyles[status.type],
|
|
1556
|
+
status && inputStatusFocusWithinStyles[status.type],
|
|
1557
|
+
controlXstyle,
|
|
1558
|
+
),
|
|
1559
|
+
controlClassName,
|
|
1560
|
+
controlStyle,
|
|
1561
|
+
)}>
|
|
1562
|
+
{startIcon && (
|
|
1563
|
+
<span
|
|
1564
|
+
{...stylex.props(value.length > 0 && styles.startIconWithTokens)}>
|
|
1565
|
+
{renderIconSlot(startIcon, {size: 'sm', color: 'secondary'})}
|
|
1566
|
+
</span>
|
|
1567
|
+
)}
|
|
1568
|
+
{value.length > 0 ? (
|
|
1569
|
+
value.map(item => (
|
|
1570
|
+
<Token
|
|
1571
|
+
key={item.id}
|
|
1572
|
+
id={tokenElementId(item.id)}
|
|
1573
|
+
label={item.label}
|
|
1574
|
+
size={size}
|
|
1575
|
+
isDisabled={isDisabled}
|
|
1576
|
+
xstyle={isDisabled ? styles.sheetTokenDisabled : undefined}
|
|
1577
|
+
/>
|
|
1578
|
+
))
|
|
1579
|
+
) : (
|
|
1580
|
+
<span
|
|
1581
|
+
{...stylex.props(
|
|
1582
|
+
styles.sheetTriggerPlaceholder,
|
|
1583
|
+
isDisabled && styles.sheetTriggerPlaceholderDisabled,
|
|
1584
|
+
)}>
|
|
1585
|
+
{placeholder ?? ''}
|
|
1586
|
+
</span>
|
|
1587
|
+
)}
|
|
1588
|
+
</button>
|
|
1589
|
+
{value.length > 0 && (
|
|
1590
|
+
<VisuallyHidden id={triggerTokensId}>
|
|
1591
|
+
{t('@astryx.tokenizer.selectedCount', {count: value.length})}
|
|
1592
|
+
</VisuallyHidden>
|
|
1593
|
+
)}
|
|
1594
|
+
{/* Form carriers, gated exactly as the inline branch gates its own: a
|
|
1595
|
+
disabled field submits nothing. */}
|
|
1596
|
+
{htmlName != null &&
|
|
1597
|
+
!isDisabled &&
|
|
1598
|
+
value.map(item => (
|
|
1599
|
+
<input
|
|
1600
|
+
key={item.id}
|
|
1601
|
+
type="hidden"
|
|
1602
|
+
name={htmlName}
|
|
1603
|
+
value={item.id}
|
|
1604
|
+
/>
|
|
1605
|
+
))}
|
|
1606
|
+
{/* Mounted from the press until the sheet's exit has completed and
|
|
1607
|
+
focus is back on the trigger (`isSheetPresented`): at rest the
|
|
1608
|
+
field renders its trigger alone — no closed dialog, rows, search
|
|
1609
|
+
field or confirmation in the DOM (INV7). */}
|
|
1610
|
+
{(isSheetOpen || isSheetPresented) &&
|
|
1611
|
+
(!isDisabled || keepsSheetWhileDisabled) && (
|
|
1612
|
+
<TokenizerSheetHost
|
|
1613
|
+
isOpen={isSheetOpen}
|
|
1614
|
+
onOpenChange={setIsSheetOpen}
|
|
1615
|
+
finalFocusRef={triggerRef}
|
|
1616
|
+
initialQuery={sheetInitialQuery}
|
|
1617
|
+
label={label}
|
|
1618
|
+
searchSource={searchSource}
|
|
1619
|
+
value={value}
|
|
1620
|
+
isAtMax={isAtMax}
|
|
1621
|
+
hasCreate={hasCreate}
|
|
1622
|
+
maxMenuItems={maxMenuItems ?? 10}
|
|
1623
|
+
minQueryLength={minQueryLength ?? 1}
|
|
1624
|
+
debounceMs={debounceMs ?? 150}
|
|
1625
|
+
emptySearchText={emptySearchText}
|
|
1626
|
+
onAdd={handleAdd}
|
|
1627
|
+
onRemove={handleRemove}
|
|
1628
|
+
onClearAll={handleClearAll}
|
|
1629
|
+
onChangeQuery={handleSheetQueryChange}
|
|
1630
|
+
/>
|
|
1631
|
+
)}
|
|
1632
|
+
</>
|
|
1633
|
+
);
|
|
1634
|
+
} else if (isLayerMode) {
|
|
1106
1635
|
const placeholderSizeStyle = layerPlaceholderSizeStyles[size];
|
|
1107
1636
|
tokenizerContent = (
|
|
1108
1637
|
<>
|
|
@@ -1202,3 +1731,19 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
1202
1731
|
}
|
|
1203
1732
|
|
|
1204
1733
|
Tokenizer.displayName = 'Tokenizer';
|
|
1734
|
+
|
|
1735
|
+
/**
|
|
1736
|
+
* The same component with the sheet presentation reachable: `experimental`
|
|
1737
|
+
* (`presentation: 'popover' | 'bottom-sheet' | 'adaptive'`) and a `ref` that
|
|
1738
|
+
* also takes the trigger button. Not public — re-exported only by
|
|
1739
|
+
* `@astryxdesign/core/internal/tokenizer-presentation`, the entry reserved
|
|
1740
|
+
* for Astryx's own packages (`architecture:react-component-runtime` INV13),
|
|
1741
|
+
* while the sheet's user experience is being finished (`component:Tokenizer`
|
|
1742
|
+
* DEC-3). The public `Tokenizer` renders the popover presentation for every
|
|
1743
|
+
* field.
|
|
1744
|
+
*/
|
|
1745
|
+
export const TokenizerWithPresentation = Tokenizer as <
|
|
1746
|
+
T extends SearchableItem,
|
|
1747
|
+
>(
|
|
1748
|
+
props: TokenizerWithPresentationProps<T>,
|
|
1749
|
+
) => React.JSX.Element;
|