@astryxdesign/core 0.7.4 → 0.7.5-canary.031a639
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/README.md +12 -9
- package/dist/AlertDialog/AlertDialog.d.ts +2 -2
- package/dist/AlertDialog/AlertDialog.js +1 -1
- package/dist/AlertDialog/index.d.ts +4 -4
- package/dist/AlertDialog/useImperativeAlertDialog.d.ts +1 -1
- package/dist/AppShell/AppShell.d.ts +4 -4
- package/dist/AppShell/index.d.ts +4 -4
- package/dist/AspectRatio/AspectRatio.d.ts +1 -1
- package/dist/AspectRatio/index.d.ts +2 -2
- package/dist/Avatar/Avatar.d.ts +2 -2
- package/dist/Avatar/AvatarStatusDot.d.ts +2 -2
- package/dist/Avatar/AvatarStatusDot.js +2 -2
- package/dist/Avatar/index.d.ts +4 -4
- package/dist/AvatarGroup/AvatarGroup.d.ts +2 -2
- package/dist/AvatarGroup/AvatarGroupContext.d.ts +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts +1 -1
- package/dist/AvatarGroup/index.d.ts +6 -6
- package/dist/Badge/Badge.d.ts +2 -2
- package/dist/Badge/Badge.d.ts.map +1 -1
- package/dist/Badge/Badge.js +18 -2
- package/dist/Badge/index.d.ts +2 -2
- package/dist/Banner/Banner.d.ts +5 -4
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +64 -9
- package/dist/Banner/index.d.ts +2 -2
- package/dist/Blockquote/Blockquote.d.ts +1 -1
- package/dist/Blockquote/index.d.ts +2 -2
- package/dist/BottomSheet/BottomSheet.d.ts +58 -10
- 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 +12 -4
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +76 -22
- package/dist/BottomSheet/BottomSheetSwitcher.d.ts +54 -15
- package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetSwitcher.js +229 -27
- package/dist/BottomSheet/BottomSheetSwitcherContext.d.ts +8 -2
- 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 +1652 -0
- package/dist/BottomSheet/index.d.ts +4 -4
- 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 +4 -4
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +5 -0
- package/dist/Breadcrumbs/Breadcrumbs.d.ts +2 -2
- package/dist/Breadcrumbs/index.d.ts +12 -12
- package/dist/Button/Button.d.ts +4 -4
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +18 -7
- package/dist/Button/index.d.ts +2 -2
- package/dist/ButtonGroup/ButtonGroup.d.ts +4 -4
- package/dist/ButtonGroup/index.d.ts +4 -4
- package/dist/Calendar/Calendar.d.ts +3 -3
- package/dist/Calendar/dayCellUtils.d.ts +1 -1
- package/dist/Calendar/getInitialFocusDate.d.ts +2 -2
- package/dist/Calendar/getStandaloneShortWeekdayNames.d.ts +1 -1
- package/dist/Calendar/hooks/index.d.ts +6 -6
- package/dist/Calendar/hooks/useCalendarConstraints.d.ts +2 -2
- package/dist/Calendar/hooks/useCalendarDays.d.ts +2 -2
- package/dist/Calendar/hooks/useCalendarNavigation.d.ts +2 -2
- package/dist/Calendar/index.d.ts +5 -5
- package/dist/Calendar/utils.d.ts +1 -1
- package/dist/Card/Card.d.ts +4 -4
- package/dist/Card/index.d.ts +2 -2
- package/dist/Carousel/Carousel.d.ts +2 -2
- package/dist/Carousel/index.d.ts +2 -2
- package/dist/Center/Center.d.ts +2 -2
- package/dist/Center/index.d.ts +2 -2
- package/dist/Chat/ChatComposer.d.ts +1 -1
- package/dist/Chat/ChatComposer.d.ts.map +1 -1
- package/dist/Chat/ChatComposer.js +25 -32
- package/dist/Chat/ChatComposerDrawer.d.ts +1 -1
- package/dist/Chat/ChatComposerInput.d.ts +4 -4
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +55 -16
- package/dist/Chat/ChatDictationButton.d.ts +2 -2
- package/dist/Chat/ChatLayout.d.ts +1 -1
- package/dist/Chat/ChatLayoutScrollButton.d.ts +1 -1
- package/dist/Chat/ChatMessage.d.ts +2 -2
- package/dist/Chat/ChatMessageBubble.d.ts +2 -2
- package/dist/Chat/ChatMessageList.d.ts +3 -3
- package/dist/Chat/ChatMessageMetadata.d.ts +1 -1
- 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/ChatSendButton.d.ts +1 -1
- package/dist/Chat/ChatSystemMessage.d.ts +1 -1
- package/dist/Chat/ChatTokenizedText.d.ts +2 -2
- package/dist/Chat/ChatToolCalls.d.ts +1 -1
- package/dist/Chat/ChatToolCalls.js +4 -4
- package/dist/Chat/index.d.ts +43 -43
- package/dist/Chat/useChatComposerTokens.d.ts +1 -1
- package/dist/Chat/useChatDictation.d.ts +1 -1
- package/dist/Chat/useChatPasteAsToken.d.ts +1 -1
- package/dist/Chat/useTriggerMenu.d.ts +2 -2
- package/dist/CheckboxInput/CheckboxInput.d.ts +4 -4
- package/dist/CheckboxInput/index.d.ts +2 -2
- package/dist/CheckboxList/CheckboxList.d.ts +4 -4
- package/dist/CheckboxList/CheckboxListItem.d.ts +2 -2
- package/dist/CheckboxList/index.d.ts +4 -4
- package/dist/Citation/Citation.d.ts +1 -1
- package/dist/Citation/index.d.ts +2 -2
- package/dist/ClickableCard/ClickableCard.d.ts +3 -3
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +10 -6
- package/dist/ClickableCard/index.d.ts +2 -2
- package/dist/Code/Code.d.ts +1 -1
- package/dist/Code/index.d.ts +1 -1
- package/dist/CodeBlock/CodeBlock.d.ts +27 -4
- 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/highlightRanges.d.ts +1 -1
- package/dist/CodeBlock/index.d.ts +10 -8
- 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 +10 -3
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +84 -2
- package/dist/Collapsible/CollapsibleGroup.d.ts +2 -2
- package/dist/Collapsible/index.d.ts +7 -7
- package/dist/CommandPalette/CommandPalette.d.ts +2 -2
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +15 -1
- package/dist/CommandPalette/CommandPaletteContext.d.ts +1 -1
- package/dist/CommandPalette/CommandPaletteEmpty.d.ts +1 -1
- package/dist/CommandPalette/CommandPaletteEmpty.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteEmpty.js +1 -0
- package/dist/CommandPalette/CommandPaletteFooter.d.ts +1 -1
- package/dist/CommandPalette/CommandPaletteGroup.d.ts +1 -1
- package/dist/CommandPalette/CommandPaletteInput.d.ts +1 -1
- package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteInput.js +14 -2
- package/dist/CommandPalette/CommandPaletteItem.d.ts +1 -1
- package/dist/CommandPalette/CommandPaletteList.d.ts +1 -1
- 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/CommandPalette/index.d.ts +16 -16
- package/dist/ComplexSelector/ComplexSelector.d.ts +25 -7
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +42 -7
- package/dist/ComplexSelector/index.d.ts +1 -1
- package/dist/ContextMenu/ContextMenu.d.ts +4 -4
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +48 -13
- package/dist/ContextMenu/index.d.ts +9 -9
- package/dist/DateInput/DateInput.d.ts +7 -7
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +12 -5
- package/dist/DateInput/MonthScroller.d.ts +1 -1
- package/dist/DateInput/NativeDateField.d.ts +1 -1
- package/dist/DateInput/NativeDateField.d.ts.map +1 -1
- package/dist/DateInput/NativeDateField.js +2 -1
- package/dist/DateInput/TouchDateField.d.ts +1 -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/DateInput/index.d.ts +2 -2
- package/dist/DateInput/monthGeometry.d.ts +1 -1
- package/dist/DateRangeInput/DateRangeInput.d.ts +6 -6
- package/dist/DateRangeInput/index.d.ts +2 -2
- package/dist/DateTimeInput/DateTimeInput.d.ts +6 -6
- package/dist/DateTimeInput/NativeDateSegment.d.ts +3 -3
- package/dist/DateTimeInput/NativeTimeSegment.d.ts +4 -4
- package/dist/DateTimeInput/TouchDateTimeField.d.ts +1 -1
- package/dist/DateTimeInput/index.d.ts +2 -2
- package/dist/Dialog/Dialog.d.ts +7 -3
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +20 -8
- package/dist/Dialog/DialogHeader.d.ts +1 -1
- package/dist/Dialog/index.d.ts +6 -6
- package/dist/Dialog/useImperativeDialog.d.ts +1 -1
- package/dist/Divider/Divider.d.ts +2 -2
- package/dist/Divider/index.d.ts +2 -2
- package/dist/Drawer/Drawer.d.ts +3 -3
- package/dist/Drawer/Drawer.d.ts.map +1 -1
- package/dist/Drawer/Drawer.js +18 -13
- package/dist/Drawer/DrawerHeader.d.ts +1 -1
- package/dist/Drawer/index.d.ts +4 -4
- package/dist/DropdownMenu/DropdownMenu.d.ts +5 -5
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +32 -20
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +2 -2
- package/dist/DropdownMenu/DropdownMenuDivider.d.ts +1 -1
- package/dist/DropdownMenu/DropdownMenuGroup.d.ts +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.d.ts +2 -2
- package/dist/DropdownMenu/DropdownMenuItem.js +3 -3
- package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +12 -7
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.js +13 -5
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts +8 -8
- 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.d.ts +1 -1
- package/dist/DropdownMenu/MenuBottomSheetActionList.js +3 -3
- package/dist/DropdownMenu/index.d.ts +10 -10
- package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts +4 -2
- 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/renderDropdownItems.d.ts +1 -1
- package/dist/DropdownMenu/useMenuDrillIn.d.ts +1 -1
- package/dist/DropdownMenu/useMenuDrillIn.d.ts.map +1 -1
- package/dist/DropdownMenu/useMenuDrillIn.js +7 -5
- package/dist/EmptyState/EmptyState.d.ts +5 -3
- package/dist/EmptyState/EmptyState.d.ts.map +1 -1
- package/dist/EmptyState/EmptyState.js +6 -4
- package/dist/EmptyState/index.d.ts +2 -2
- package/dist/Field/Field.d.ts +5 -5
- package/dist/Field/Field.js +1 -1
- package/dist/Field/FieldLabel.d.ts +2 -2
- package/dist/Field/FieldLabel.js +1 -1
- package/dist/Field/PanelSearchInput.d.ts +10 -2
- package/dist/Field/PanelSearchInput.d.ts.map +1 -1
- package/dist/Field/PanelSearchInput.js +31 -22
- package/dist/Field/fieldInputFamily.testing.d.ts +1 -1
- package/dist/Field/fieldParts.d.ts +1 -1
- package/dist/Field/index.d.ts +10 -10
- 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 +3 -3
- package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
- package/dist/FieldStatus/FieldStatus.js +7 -3
- package/dist/FieldStatus/index.d.ts +2 -2
- package/dist/FieldStatus/useFieldStatusAnnouncement.d.ts +1 -1
- package/dist/FileInput/FileInput.d.ts +4 -4
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +15 -9
- package/dist/FileInput/index.d.ts +2 -2
- package/dist/FormLayout/FormLayout.d.ts +2 -2
- package/dist/FormLayout/index.d.ts +4 -4
- package/dist/Grid/Grid.d.ts +3 -3
- package/dist/Grid/GridSpan.d.ts +1 -1
- package/dist/Grid/index.d.ts +4 -4
- package/dist/HStack/HStack.d.ts +2 -2
- package/dist/HStack/index.d.ts +1 -1
- package/dist/Heading/Heading.d.ts +4 -4
- package/dist/Heading/index.d.ts +1 -1
- package/dist/HoverCard/HoverCard.d.ts +4 -4
- package/dist/HoverCard/index.d.ts +4 -4
- package/dist/HoverCard/useHoverCard.d.ts +2 -2
- package/dist/Icon/Icon.d.ts +40 -8
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/Icon.js +65 -11
- package/dist/Icon/IconDefaultSizeContext.d.ts +1 -1
- 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/defaultIcons.d.ts +1 -1
- package/dist/Icon/globalIconRegistry.d.ts +72 -5
- package/dist/Icon/globalIconRegistry.d.ts.map +1 -1
- package/dist/Icon/globalIconRegistry.js +163 -23
- package/dist/Icon/index.d.ts +30 -6
- package/dist/Icon/index.d.ts.map +1 -1
- package/dist/Icon/index.js +24 -1
- package/dist/Icon/useIcon.d.ts +6 -2
- package/dist/Icon/useIcon.d.ts.map +1 -1
- package/dist/Icon/useIcon.js +5 -1
- package/dist/IconButton/IconButton.d.ts +1 -1
- package/dist/IconButton/index.d.ts +2 -2
- package/dist/Indicator/CheckIndicator.d.ts +1 -1
- package/dist/Indicator/CheckboxIndicator.d.ts +1 -1
- package/dist/Indicator/RadioIndicator.d.ts +1 -1
- package/dist/Indicator/index.d.ts +8 -8
- package/dist/Indicator/indicatorRegistry.d.ts +2 -2
- package/dist/Indicator/types.d.ts +1 -1
- package/dist/Indicator/useIndicator.d.ts +2 -2
- package/dist/InputGroup/InputGroup.d.ts +3 -3
- 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 +1 -1
- 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/InputGroup/index.d.ts +6 -6
- package/dist/InteractiveRoleContext/InteractiveRoleContext.d.ts +1 -1
- package/dist/InteractiveRoleContext/index.d.ts +1 -1
- package/dist/Item/Item.d.ts +1 -1
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +1 -1
- package/dist/Item/ItemSwipeLayer.d.ts +2 -2
- package/dist/Item/ItemSwipeLayer.d.ts.map +1 -1
- package/dist/Item/ItemSwipeLayer.js +3 -0
- package/dist/Item/index.d.ts +2 -2
- package/dist/Item/useSwipeAction.d.ts.map +1 -1
- package/dist/Item/useSwipeAction.js +60 -5
- package/dist/Kbd/Kbd.d.ts +3 -3
- package/dist/Kbd/Kbd.d.ts.map +1 -1
- package/dist/Kbd/Kbd.js +18 -11
- package/dist/Kbd/index.d.ts +2 -2
- package/dist/Layer/LayerProvider.d.ts +1 -1
- package/dist/Layer/index.d.ts +18 -18
- 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/layerInset.d.ts +1 -1
- package/dist/Layer/layerSlideRules.d.ts +63 -3
- 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 +500 -43
- package/dist/Layer/useLayerDismissal.d.ts +11 -8
- 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 +2 -2
- package/dist/Layout/Layout.d.ts.map +1 -1
- package/dist/Layout/Layout.js +4 -0
- package/dist/Layout/LayoutContent.d.ts +2 -2
- package/dist/Layout/LayoutContent.d.ts.map +1 -1
- package/dist/Layout/LayoutContent.js +2 -2
- package/dist/Layout/LayoutFooter.d.ts +2 -2
- package/dist/Layout/LayoutFooter.d.ts.map +1 -1
- package/dist/Layout/LayoutFooter.js +2 -1
- package/dist/Layout/LayoutHeader.d.ts +2 -2
- package/dist/Layout/LayoutHeader.d.ts.map +1 -1
- package/dist/Layout/LayoutHeader.js +2 -1
- package/dist/Layout/LayoutPanel.d.ts +3 -3
- package/dist/Layout/index.d.ts +29 -29
- 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/Layout/padding.stylex.d.ts +1 -1
- package/dist/Lightbox/Lightbox.d.ts +6 -3
- 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/Lightbox/index.d.ts +4 -4
- package/dist/Lightbox/useLightbox.d.ts +1 -1
- package/dist/Link/Link.d.ts +3 -3
- package/dist/Link/LinkContext.d.ts +1 -1
- package/dist/Link/LinkProvider.d.ts +1 -1
- package/dist/Link/index.d.ts +8 -8
- package/dist/Link/useLinkComponent.d.ts +1 -1
- package/dist/List/List.d.ts +3 -3
- package/dist/List/ListItem.d.ts +2 -2
- package/dist/List/index.d.ts +4 -4
- package/dist/Markdown/Markdown.d.ts +15 -5
- 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 +23 -9
- package/dist/Markdown/MarkdownTable.a11y.chromium.spec.js +1 -0
- package/dist/Markdown/headingProjection.d.ts +3 -3
- package/dist/Markdown/index.d.ts +7 -7
- package/dist/Markdown/parser/index.d.ts +3 -3
- package/dist/Markdown/parser.d.ts +3 -3
- package/dist/Markdown/plugin-renderer/MarkdownPluginNodeRenderer.d.ts +1 -1
- package/dist/Markdown/plugin-renderer/index.d.ts +2 -2
- package/dist/Markdown/plugins/frontmatter.d.ts +2 -2
- package/dist/Markdown/plugins/headingLinks.d.ts +2 -2
- package/dist/Markdown/plugins/index.d.ts +14 -14
- package/dist/Markdown/plugins/protocol.d.ts +1 -1
- package/dist/Markdown/plugins/semanticFence.d.ts +2 -2
- package/dist/Markdown/plugins/softBreaks.d.ts +1 -1
- package/dist/Markdown/plugins/sourceDecoration.d.ts +2 -2
- package/dist/Markdown/plugins/sourceLines.d.ts +1 -1
- package/dist/Markdown/plugins/textTransform.d.ts +2 -2
- package/dist/Markdown/remark.d.ts +1 -1
- package/dist/Markdown/utils.d.ts +4 -4
- package/dist/MetadataList/MetadataList.d.ts +2 -2
- package/dist/MetadataList/MetadataListItem.d.ts +1 -1
- package/dist/MetadataList/index.d.ts +5 -5
- package/dist/MobileNav/MobileNav.d.ts +3 -2
- 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 +1 -1
- package/dist/MobileNav/index.d.ts +4 -4
- package/dist/MoreMenu/MoreMenu.d.ts +4 -4
- package/dist/MoreMenu/index.d.ts +1 -1
- package/dist/MultiSelector/CreateRow.a11y.chromium.spec.js +1 -0
- package/dist/MultiSelector/MultiSelector.d.ts +8 -8
- 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/MultiSelector/hooks.d.ts +1 -1
- package/dist/MultiSelector/index.d.ts +3 -3
- package/dist/MultiSelector/types.d.ts +1 -1
- package/dist/NavIcon/NavIcon.d.ts +1 -1
- package/dist/NavIcon/index.d.ts +2 -2
- package/dist/NavMenu/NavHeadingMenu.d.ts +2 -2
- package/dist/NavMenu/NavHeadingMenuItem.d.ts +2 -2
- package/dist/NavMenu/NavHeadingMenuItem.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenuItem.js +46 -7
- package/dist/NavMenu/index.d.ts +6 -6
- package/dist/NumberInput/NumberInput.d.ts +9 -9
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +61 -24
- package/dist/NumberInput/index.d.ts +2 -2
- package/dist/NumberInput/numberInputCommit.d.ts +1 -1
- package/dist/NumberInput/numberParser.d.ts +1 -1
- package/dist/Outline/Outline.d.ts +3 -3
- package/dist/Outline/index.d.ts +7 -7
- package/dist/Outline/parseOutlineFromMarkdown.d.ts +2 -2
- package/dist/Outline/useOutlineFromDOM.d.ts +1 -1
- package/dist/Outline/useOutlineFromMarkdown.d.ts +3 -3
- package/dist/Outline/useScrollSpy.d.ts +1 -1
- package/dist/OverflowList/OverflowList.d.ts +2 -2
- package/dist/OverflowList/index.d.ts +2 -2
- package/dist/Overlay/Overlay.d.ts +2 -2
- package/dist/Overlay/index.d.ts +5 -5
- package/dist/Overlay/useOverlay.d.ts +1 -1
- package/dist/Pagination/Pagination.d.ts +2 -2
- package/dist/Pagination/index.d.ts +2 -2
- package/dist/Popover/Popover.d.ts +44 -5
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +276 -44
- package/dist/Popover/index.d.ts +4 -4
- 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 +2 -2
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +11 -5
- package/dist/PowerSearch/PowerSearch.d.ts +5 -5
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +7 -5
- package/dist/PowerSearch/PowerSearchEditPopover.d.ts +2 -2
- package/dist/PowerSearch/PowerSearchFilterEditor.d.ts +1 -1
- package/dist/PowerSearch/PowerSearchToken.d.ts +1 -1
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts +2 -2
- package/dist/PowerSearch/formatFilterValue.d.ts +3 -3
- package/dist/PowerSearch/index.d.ts +8 -8
- package/dist/PowerSearch/resolveDateTimeRangePart.d.ts +1 -1
- package/dist/PowerSearch/resolveOperatorLabel.d.ts +2 -2
- package/dist/PowerSearch/types.d.ts +1 -1
- package/dist/PowerSearch/useInternalConfig.d.ts +1 -1
- package/dist/PowerSearch/usePowerSearchConfig.d.ts +1 -1
- package/dist/PowerSearch/usePowerSearchSource.d.ts +3 -3
- package/dist/PowerSearch/utils.d.ts +3 -3
- package/dist/ProgressBar/ProgressBar.d.ts +2 -2
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +8 -0
- package/dist/ProgressBar/index.d.ts +2 -2
- package/dist/RadioList/RadioList.d.ts +3 -3
- package/dist/RadioList/RadioListItem.d.ts +2 -2
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +10 -2
- package/dist/RadioList/index.d.ts +4 -4
- package/dist/Resizable/ResizeHandle.d.ts +2 -2
- package/dist/Resizable/index.d.ts +6 -6
- package/dist/Resizable/useResizable.d.ts +2 -2
- package/dist/Resizable/utils.d.ts +3 -3
- package/dist/ScrollableArea/ScrollableArea.d.ts +3 -3
- package/dist/ScrollableArea/ScrollableArea.d.ts.map +1 -1
- package/dist/ScrollableArea/ScrollableArea.js +1 -1
- package/dist/ScrollableArea/index.d.ts +4 -4
- package/dist/Section/Section.d.ts +3 -3
- package/dist/Section/index.d.ts +2 -2
- package/dist/SegmentedControl/SegmentedControl.d.ts +2 -2
- package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
- package/dist/SegmentedControl/index.d.ts +5 -5
- package/dist/SelectableCard/SelectableCard.d.ts +8 -8
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +15 -11
- package/dist/SelectableCard/index.d.ts +2 -2
- package/dist/Selector/Selector.d.ts +8 -8
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +16 -5
- package/dist/Selector/SelectorOption.d.ts +1 -1
- package/dist/Selector/hooks.d.ts +1 -1
- package/dist/Selector/index.d.ts +4 -4
- package/dist/Selector/types.d.ts +1 -1
- package/dist/Selector/useSelectorPresentation.d.ts +2 -2
- package/dist/Selector/utils.d.ts +1 -1
- package/dist/SideNav/SideNav.d.ts +3 -3
- package/dist/SideNav/SideNavCollapseButton.d.ts +3 -3
- package/dist/SideNav/SideNavHeading.d.ts +2 -2
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +34 -0
- package/dist/SideNav/SideNavItem.d.ts +9 -5
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +36 -13
- package/dist/SideNav/SideNavSection.d.ts +1 -1
- package/dist/SideNav/index.d.ts +14 -14
- package/dist/SizeContext/index.d.ts +1 -1
- package/dist/Skeleton/Skeleton.d.ts +1 -1
- package/dist/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/Skeleton/Skeleton.js +12 -3
- package/dist/Skeleton/index.d.ts +2 -2
- package/dist/Slider/Slider.d.ts +3 -3
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +45 -12
- package/dist/Slider/index.d.ts +2 -2
- package/dist/Spinner/Spinner.d.ts +1 -1
- package/dist/Spinner/index.d.ts +2 -2
- package/dist/Stack/Stack.d.ts +3 -3
- package/dist/Stack/StackItem.d.ts +2 -2
- package/dist/Stack/index.d.ts +6 -6
- package/dist/Stack/stack.stylex.d.ts +1 -1
- package/dist/StatusDot/StatusDot.d.ts +2 -2
- package/dist/StatusDot/StatusDot.d.ts.map +1 -1
- package/dist/StatusDot/StatusDot.js +12 -0
- package/dist/StatusDot/index.d.ts +2 -2
- package/dist/Stepper/Step.d.ts +2 -2
- package/dist/Stepper/Step.d.ts.map +1 -1
- package/dist/Stepper/Step.js +10 -6
- package/dist/Stepper/Stepper.d.ts +2 -2
- package/dist/Stepper/index.d.ts +7 -7
- package/dist/Switch/Switch.d.ts +4 -4
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +5 -5
- package/dist/Switch/index.d.ts +2 -2
- 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 +2 -2
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +5 -1
- package/dist/TabList/TabList.d.ts +3 -3
- package/dist/TabList/TabMenu.d.ts +2 -2
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +1 -0
- package/dist/TabList/index.d.ts +8 -8
- package/dist/Table/BaseTable.d.ts +1 -1
- package/dist/Table/Table.d.ts +1 -1
- package/dist/Table/TableBody.d.ts +1 -1
- package/dist/Table/TableCell.d.ts +3 -3
- package/dist/Table/TableCell.d.ts.map +1 -1
- package/dist/Table/TableCell.js +1 -0
- package/dist/Table/TableContext.d.ts +1 -1
- package/dist/Table/TableFooter.d.ts +1 -1
- package/dist/Table/TableHeader.d.ts +1 -1
- package/dist/Table/TableHeaderCell.d.ts +3 -3
- package/dist/Table/TableHeaderCell.d.ts.map +1 -1
- package/dist/Table/TableHeaderCell.js +1 -0
- package/dist/Table/TableRow.d.ts +2 -2
- package/dist/Table/TableSelectionToolbar.d.ts +2 -2
- package/dist/Table/columnUtils.d.ts +1 -1
- package/dist/Table/index.d.ts +54 -54
- package/dist/Table/plugins/columnResize/index.d.ts +2 -2
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +11 -2
- package/dist/Table/plugins/columnSettings/index.d.ts +4 -4
- package/dist/Table/plugins/columnSettings/useTableColumnSettings.d.ts +2 -2
- package/dist/Table/plugins/columnSettings/useTableColumnSettingsState.d.ts +1 -1
- package/dist/Table/plugins/filtering/index.d.ts +4 -4
- package/dist/Table/plugins/filtering/useTableFilterState.d.ts +1 -1
- package/dist/Table/plugins/filtering/useTableFiltering.d.ts +2 -2
- package/dist/Table/plugins/groupedRows/index.d.ts +2 -2
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +1 -1
- package/dist/Table/plugins/pagination/index.d.ts +3 -3
- package/dist/Table/plugins/pagination/useTablePagination.d.ts +1 -1
- package/dist/Table/plugins/rowExpansion/index.d.ts +2 -2
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +103 -4
- package/dist/Table/plugins/rowIndex/index.d.ts +2 -2
- package/dist/Table/plugins/rowIndex/useTableRowIndex.d.ts +1 -1
- package/dist/Table/plugins/rowStatus/index.d.ts +2 -2
- package/dist/Table/plugins/rowStatus/useTableRowStatus.d.ts +2 -2
- package/dist/Table/plugins/selection/index.d.ts +4 -4
- package/dist/Table/plugins/selection/useTableSelection.d.ts +1 -1
- package/dist/Table/plugins/selection/useTableSelectionState.d.ts +1 -1
- package/dist/Table/plugins/sortable/index.d.ts +4 -4
- package/dist/Table/plugins/sortable/useTableSortable.d.ts +1 -1
- package/dist/Table/plugins/sortable/useTableSortableState.d.ts +1 -1
- package/dist/Table/plugins/stickyColumns/index.d.ts +2 -2
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts +1 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +233 -6
- package/dist/Table/plugins/tree/index.d.ts +4 -4
- package/dist/Table/plugins/tree/useTableTreeData.d.ts +1 -1
- package/dist/Table/plugins/tree/useTableTreeState.d.ts +1 -1
- 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/Table/tableContextMenu.d.ts +2 -2
- package/dist/Table/types.d.ts +3 -3
- package/dist/Table/useBaseTablePlugins.d.ts +1 -1
- package/dist/Table/useTableCellStyles.d.ts +2 -2
- package/dist/Table/utils.d.ts +2 -2
- package/dist/Text/Text.d.ts +3 -3
- package/dist/Text/index.d.ts +4 -4
- package/dist/TextArea/TextArea.d.ts +10 -8
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +15 -12
- package/dist/TextArea/index.d.ts +2 -2
- package/dist/TextInput/TextInput.d.ts +12 -10
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +35 -21
- package/dist/TextInput/index.d.ts +2 -2
- package/dist/Thumbnail/Thumbnail.d.ts +1 -1
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +45 -11
- package/dist/Thumbnail/index.d.ts +2 -2
- package/dist/TimeInput/TimeInput.d.ts +6 -6
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +12 -4
- package/dist/TimeInput/TouchTimeField.d.ts +1 -1
- package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
- package/dist/TimeInput/TouchTimeField.js +2 -1
- package/dist/TimeInput/index.d.ts +3 -3
- package/dist/Timer/Timer.d.ts +2 -2
- package/dist/Timer/index.d.ts +2 -2
- package/dist/Timestamp/Timestamp.d.ts +3 -3
- package/dist/Timestamp/TimestampHoverCard.d.ts +1 -1
- package/dist/Timestamp/formatInstant.d.ts +2 -2
- package/dist/Timestamp/formatRelativeTime.d.ts +1 -1
- package/dist/Timestamp/index.d.ts +3 -3
- package/dist/Timestamp/tooltipEntries.d.ts +2 -2
- package/dist/Toast/Toast.d.ts +2 -2
- package/dist/Toast/ToastContext.d.ts +1 -1
- package/dist/Toast/ToastViewport.d.ts +2 -2
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +28 -2
- package/dist/Toast/index.d.ts +6 -6
- package/dist/Toast/useToast.d.ts +1 -1
- package/dist/ToggleButton/ToggleButton.d.ts +3 -3
- package/dist/ToggleButton/ToggleButtonGroup.d.ts +1 -1
- package/dist/ToggleButton/index.d.ts +4 -4
- package/dist/Token/Token.d.ts +2 -2
- package/dist/Token/TokenLink.d.ts +1 -1
- package/dist/Token/index.d.ts +2 -2
- package/dist/Tokenizer/Tokenizer.d.ts +77 -10
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +474 -85
- 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/Tokenizer/index.d.ts +2 -2
- package/dist/Tokenizer/useEndLaneReserve.d.ts +3 -2
- package/dist/Tokenizer/useEndLaneReserve.d.ts.map +1 -1
- package/dist/Tokenizer/useEndLaneReserve.js +3 -2
- package/dist/Toolbar/Toolbar.d.ts +4 -4
- package/dist/Toolbar/index.d.ts +2 -2
- package/dist/Tooltip/Tooltip.d.ts +3 -3
- package/dist/Tooltip/index.d.ts +4 -4
- package/dist/Tooltip/useTooltip.d.ts +2 -2
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +9 -3
- package/dist/TopNav/TopNav.d.ts +1 -1
- package/dist/TopNav/TopNavHeading.d.ts +2 -2
- package/dist/TopNav/TopNavItem.d.ts +3 -3
- package/dist/TopNav/TopNavMegaMenu.d.ts +1 -1
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +4 -4
- package/dist/TopNav/TopNavMegaMenuFeaturedCard.d.ts +1 -1
- package/dist/TopNav/TopNavMegaMenuItem.d.ts +2 -2
- package/dist/TopNav/TopNavMenu.d.ts +1 -1
- package/dist/TopNav/index.d.ts +16 -16
- package/dist/TreeList/TreeList.d.ts +11 -26
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +175 -3
- package/dist/TreeList/TreeListItem.d.ts +8 -2
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +3 -1
- package/dist/TreeList/TreeListTypes.d.ts +1 -1
- package/dist/TreeList/index.d.ts +3 -3
- package/dist/Typeahead/BaseTypeahead.d.ts +2 -2
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +16 -4
- package/dist/Typeahead/Typeahead.d.ts +7 -7
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +31 -14
- package/dist/Typeahead/TypeaheadItem.d.ts +2 -2
- package/dist/Typeahead/createStaticSource.d.ts +1 -1
- package/dist/Typeahead/index.d.ts +9 -9
- package/dist/Typeahead/utils.d.ts +3 -3
- package/dist/VStack/VStack.d.ts +2 -2
- package/dist/VStack/index.d.ts +1 -1
- package/dist/VisuallyHidden/VisuallyHidden.d.ts +24 -6
- package/dist/VisuallyHidden/VisuallyHidden.d.ts.map +1 -1
- package/dist/VisuallyHidden/VisuallyHidden.js +24 -5
- package/dist/VisuallyHidden/index.d.ts +2 -2
- package/dist/astryx.css +138 -51
- 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 +54 -52
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -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/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/useAutoMediaMode.d.ts +1 -1
- 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/useInputContainer.d.ts +1 -1
- package/dist/hooks/useInputStatusIcon.d.ts +3 -3
- package/dist/hooks/useMenuPress.d.ts +5 -3
- package/dist/hooks/useMenuPress.d.ts.map +1 -1
- package/dist/hooks/useMenuPress.js +58 -33
- package/dist/hooks/usePressFeedback.d.ts +1 -1
- package/dist/hooks/useScrollableArea.d.ts +1 -1
- package/dist/hooks/useScrollableArea.d.ts.map +1 -1
- package/dist/hooks/useScrollableArea.js +37 -5
- package/dist/i18n/InternationalizationContext.d.ts +2 -2
- package/dist/i18n/InternationalizationProvider.d.ts +1 -1
- 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/i18n/index.d.ts +12 -12
- package/dist/i18n/resolve.d.ts +1 -1
- package/dist/i18n/useLocale.d.ts +1 -1
- package/dist/index.d.ts +111 -111
- 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 +94 -0
- package/dist/motion/animatedLayout.d.ts.map +1 -0
- package/dist/motion/animatedLayout.js +1096 -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/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/Theme.d.ts +2 -2
- package/dist/theme/contrast.d.ts +1 -1
- 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 +120 -22
- 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/domainTokens/index.d.ts +6 -6
- package/dist/theme/generateThemeRules.d.ts +7 -3
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +468 -24
- package/dist/theme/index.d.ts +31 -31
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +1 -1
- package/dist/theme/localTokens.d.ts +1 -1
- package/dist/theme/mergeComponents.d.ts +1 -1
- package/dist/theme/onMediaTokens.d.ts +1 -1
- package/dist/theme/resolveThemeValues.d.ts +7 -7
- 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/index.d.ts +7 -7
- package/dist/theme/syntax/presets.d.ts +1 -1
- package/dist/theme/themeAdaptations.d.ts +30 -6
- package/dist/theme/themeAdaptations.d.ts.map +1 -1
- package/dist/theme/themeAdaptations.js +30 -1
- package/dist/theme/themeRegistry.d.ts +1 -1
- package/dist/theme/tokens.d.ts +1 -1
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +16 -1
- package/dist/theme/tokens.stylex.d.ts +40 -2
- package/dist/theme/tokens.stylex.d.ts.map +1 -1
- package/dist/theme/tokens.stylex.js +47 -2
- package/dist/theme/types.d.ts +1 -1
- package/dist/theme/useTheme.d.ts +6 -4
- package/dist/theme/useTheme.d.ts.map +1 -1
- package/dist/theme/useTheme.js +10 -4
- package/dist/utils/dateParser.d.ts +3 -3
- 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/groupItems.d.ts +1 -1
- 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/index.d.ts +29 -29
- package/dist/utils/plainDate.d.ts +3 -3
- 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 +61 -6
- package/src/AlertDialog/AlertDialog.tsx +1 -1
- package/src/AlertDialog/__tests__/AlertDialog.a11y.chromium.spec.ts +1 -0
- package/src/AppShell/AppShell.spec.md +337 -0
- 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.doc.mjs +2 -1
- 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 +38 -27
- 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 +269 -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 +21 -10
- package/src/BottomSheet/BottomSheetPanel.tsx +166 -57
- package/src/BottomSheet/BottomSheetReplace.test.tsx +1526 -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 +1 -0
- 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 +2031 -0
- package/src/BottomSheet/useSheetGestures.ts +68 -12
- package/src/Breadcrumbs/BreadcrumbItem.spec.md +96 -59
- package/src/Breadcrumbs/BreadcrumbItem.tsx +5 -0
- package/src/Breadcrumbs/Breadcrumbs.spec.md +165 -0
- package/src/Breadcrumbs/Breadcrumbs.test.tsx +22 -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 +218 -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/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 +1 -0
- 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 +1 -0
- 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.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 +191 -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 +64 -5
- package/src/DropdownMenu/DropdownMenu.tsx +47 -21
- 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/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.tsx +1 -1
- 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.test.tsx +78 -0
- package/src/FileInput/FileInput.tsx +11 -9
- package/src/Heading/Heading.spec.md +198 -0
- package/src/HoverCard/HoverCard.test.tsx +93 -3
- package/src/Icon/Icon.doc.mjs +67 -5
- package/src/Icon/Icon.spec.md +40 -29
- 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 +118 -0
- package/src/Item/Item.tsx +5 -3
- 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/__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 +743 -0
- package/src/Layer/useLayer.tsx +592 -53
- 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.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 +90 -33
- package/src/List/ListItem.doc.mjs +3 -3
- 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.tsx +32 -2
- 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.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/__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 +1 -0
- 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 +100 -44
- package/src/NavMenu/NavHeadingMenu.test.tsx +199 -1
- package/src/NavMenu/NavHeadingMenuItem.tsx +54 -6
- 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/Pagination/Pagination.test.tsx +2 -2
- package/src/Popover/Popover.doc.mjs +38 -2
- package/src/Popover/Popover.spec.md +89 -10
- 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.test.tsx +34 -7
- package/src/RadioList/RadioListItem.press.source-build.test.mjs +80 -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/SelectableCard/SelectableCard.doc.mjs +7 -6
- package/src/SelectableCard/SelectableCard.test.tsx +11 -1
- package/src/SelectableCard/SelectableCard.tsx +49 -33
- package/src/Selector/Selector.spec.md +12 -4
- package/src/Selector/Selector.test.tsx +114 -8
- package/src/Selector/Selector.tsx +19 -4
- 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/SideNav/SideNav.spec.md +51 -30
- package/src/SideNav/SideNav.test.tsx +290 -25
- package/src/SideNav/SideNavCollapseButton.spec.md +161 -0
- package/src/SideNav/SideNavHeading.spec.md +219 -0
- package/src/SideNav/SideNavHeading.tsx +41 -0
- package/src/SideNav/SideNavItem.spec.md +246 -0
- package/src/SideNav/SideNavItem.tsx +40 -9
- package/src/SideNav/SideNavSection.spec.md +153 -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.test.tsx +172 -0
- package/src/Slider/Slider.tsx +60 -12
- package/src/Slider/__tests__/Slider.a11y.chromium.spec.ts +1 -0
- package/src/Spinner/Spinner.spec.md +231 -0
- 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.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/TabMenu.spec.md +196 -0
- package/src/TabList/TabMenu.tsx +2 -0
- 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 +6 -0
- package/src/Table/TableHeaderCell.tsx +2 -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__/TableScroll.a11y.chromium.spec.ts +1 -0
- package/src/Table/__tests__/TableStickyDividers.a11y.browser.spec.ts +560 -0
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +23 -8
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +91 -9
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +120 -5
- 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 +291 -12
- package/src/Table/rowDivider.ts +154 -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 +258 -0
- package/src/TextInput/TextInput.test.tsx +83 -10
- package/src/TextInput/TextInput.tsx +46 -22
- 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/ToastViewport.modalHost.test.tsx +630 -5
- package/src/Toast/ToastViewport.tsx +27 -2
- package/src/ToggleButton/ToggleButton.spec.md +256 -0
- package/src/ToggleButton/ToggleButtonGroup.spec.md +194 -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 +312 -71
- package/src/Tokenizer/Tokenizer.ssr.test.tsx +196 -0
- package/src/Tokenizer/Tokenizer.test.tsx +70 -16
- package/src/Tokenizer/Tokenizer.tsx +651 -113
- package/src/Tokenizer/TokenizerBottomSheet.test.tsx +2719 -0
- package/src/Tokenizer/TokenizerBottomSheet.tsx +957 -0
- package/src/Tokenizer/__tests__/TokenizerEndLane.a11y.chromium.spec.ts +505 -0
- package/src/Tokenizer/useEndLaneReserve.ts +3 -2
- package/src/Toolbar/Toolbar.spec.md +101 -48
- package/src/Toolbar/__tests__/Toolbar.a11y.chromium.spec.ts +1 -0
- 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 +646 -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/TopNavHeading.spec.md +204 -0
- 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 +195 -0
- 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 +51 -35
- package/src/TreeList/TreeList.tsx +234 -2
- package/src/TreeList/TreeListItem.tsx +12 -2
- package/src/TreeList/__tests__/TreeList.a11y.chromium.spec.ts +1 -0
- package/src/TreeList/__tests__/TreeListRowNames.a11y.chromium.spec.ts +1 -0
- package/src/Typeahead/BaseTypeahead.tsx +14 -2
- package/src/Typeahead/Typeahead.test.tsx +114 -1
- package/src/Typeahead/Typeahead.tsx +34 -16
- package/src/VisuallyHidden/VisuallyHidden.doc.mjs +1 -1
- package/src/VisuallyHidden/VisuallyHidden.spec.md +170 -0
- package/src/VisuallyHidden/VisuallyHidden.test.tsx +39 -0
- package/src/VisuallyHidden/VisuallyHidden.tsx +38 -5
- 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__/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.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__/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/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/modalAnnounce.ts +439 -0
- 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/useMenuPress.doc.mjs +2 -2
- package/src/hooks/useMenuPress.test.tsx +5 -2
- package/src/hooks/useMenuPress.ts +72 -37
- package/src/hooks/useScrollableArea.test.tsx +159 -0
- package/src/hooks/useScrollableArea.ts +39 -5
- 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 +1507 -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 +139 -0
- package/src/motion/animatedLayout.test.ts +965 -0
- package/src/motion/animatedLayout.ts +1322 -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/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 +229 -19
- package/src/theme/derivedVarRegistry.test.ts +28 -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/themeAdaptations.test.ts +412 -0
- package/src/theme/themeAdaptations.ts +43 -1
- package/src/theme/tokens.stylex.ts +31 -2
- package/src/theme/tokens.test.ts +96 -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/touchPresentation.test.ts +323 -0
- package/src/utils/touchPresentation.ts +153 -0
|
@@ -0,0 +1,957 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file TokenizerBottomSheet.tsx
|
|
7
|
+
* @input Uses BottomSheet, PanelSearchInput, Button, CheckboxIndicator,
|
|
8
|
+
* EmptyState, AlertDialog, Icon, Spinner, Text, useBusyAnnouncement, and
|
|
9
|
+
* the i18n translator
|
|
10
|
+
* @output Exports TokenizerBottomSheet — the touch surface of
|
|
11
|
+
* `Tokenizer experimental.presentation="bottom-sheet"`: one tall modal sheet
|
|
12
|
+
* with a search row on top, stable-order checkbox rows, progressive
|
|
13
|
+
* long-list rendering, an optional create row, and a confirmed Clear all
|
|
14
|
+
* @position Internal presentation surface of Tokenizer. Loaded on demand by
|
|
15
|
+
* Tokenizer.tsx so the inline combobox never carries it
|
|
16
|
+
* (`component:Tokenizer` PR6).
|
|
17
|
+
*
|
|
18
|
+
* Selection itself stays in Tokenizer: this surface receives `onAdd`,
|
|
19
|
+
* `onRemove`, and `onClearAll` so the add/remove announcements, the create
|
|
20
|
+
* sentinel, and the duplicate checks are the inline field's own. What lives
|
|
21
|
+
* here is the sheet session — the query, the fetched results, the row order
|
|
22
|
+
* snapshot taken when the sheet opens, and the rendered-row window.
|
|
23
|
+
*
|
|
24
|
+
* SYNC: When modified, update:
|
|
25
|
+
* - /packages/core/src/Tokenizer/Tokenizer.tsx (the trigger and the lazy host)
|
|
26
|
+
* - /packages/core/src/Tokenizer/Tokenizer.spec.md (FR16–FR24, AR6, PR6)
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
import {
|
|
30
|
+
useEffect,
|
|
31
|
+
useImperativeHandle,
|
|
32
|
+
useMemo,
|
|
33
|
+
useRef,
|
|
34
|
+
useState,
|
|
35
|
+
type ReactNode,
|
|
36
|
+
type RefObject,
|
|
37
|
+
} from 'react';
|
|
38
|
+
import * as stylex from '@stylexjs/stylex';
|
|
39
|
+
import {AlertDialog} from '../AlertDialog/AlertDialog';
|
|
40
|
+
import {BottomSheet} from '../BottomSheet/BottomSheet';
|
|
41
|
+
import {Button} from '../Button/Button';
|
|
42
|
+
import {EmptyState} from '../EmptyState/EmptyState';
|
|
43
|
+
import {PanelSearchInput} from '../Field/PanelSearchInput';
|
|
44
|
+
import {Icon} from '../Icon';
|
|
45
|
+
import {CheckboxIndicator} from '../Indicator/CheckboxIndicator';
|
|
46
|
+
import {Spinner} from '../Spinner';
|
|
47
|
+
import {useBusyAnnouncement} from '../hooks/useBusyAnnouncement';
|
|
48
|
+
import {useIsomorphicLayoutEffect} from '../hooks/useIsomorphicLayoutEffect';
|
|
49
|
+
import {useAnnounce} from '../hooks/useAnnounce';
|
|
50
|
+
import {useAnnounceRenderedText} from '../hooks/useAnnounceRenderedText';
|
|
51
|
+
import {Text} from '../Text/Text';
|
|
52
|
+
import {useTranslator} from '../i18n';
|
|
53
|
+
import {warnOnce} from '../utils/devWarning';
|
|
54
|
+
import type {SearchableItem, SearchSource} from '../Typeahead/types';
|
|
55
|
+
import {colorVars, radiusVars, spacingVars} from '../theme/tokens.stylex';
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Sentinel prefix for the create row's synthetic item. Kept identical to the
|
|
59
|
+
* inline field's so Tokenizer's `handleAdd` recognizes it and turns it into a
|
|
60
|
+
* real item with a `create` change.
|
|
61
|
+
*/
|
|
62
|
+
const CREATABLE_ID_PREFIX = '__xds_create__';
|
|
63
|
+
/** Rows rendered per batch while a long list scrolls (`component:Tokenizer` FR21). */
|
|
64
|
+
export const LIST_RENDER_BATCH_SIZE = 50;
|
|
65
|
+
const EMPTY_RESULTS: never[] = [];
|
|
66
|
+
/** Distance from the list's end at which the next batch renders. */
|
|
67
|
+
const LIST_LOAD_MORE_THRESHOLD_PX = 200;
|
|
68
|
+
|
|
69
|
+
const styles = stylex.create({
|
|
70
|
+
body: {
|
|
71
|
+
display: 'flex',
|
|
72
|
+
flexDirection: 'column',
|
|
73
|
+
height: '100%',
|
|
74
|
+
minHeight: 0,
|
|
75
|
+
paddingInline: spacingVars['--spacing-3'],
|
|
76
|
+
paddingBlockStart: spacingVars['--spacing-8'],
|
|
77
|
+
paddingBlockEnd: spacingVars['--spacing-3'],
|
|
78
|
+
},
|
|
79
|
+
// The sheet has no dedicated close button; it keeps BottomSheet's gesture,
|
|
80
|
+
// scrim, and Escape dismissal paths, and the footer's Done.
|
|
81
|
+
searchRow: {
|
|
82
|
+
paddingBlockEnd: spacingVars['--spacing-2'],
|
|
83
|
+
},
|
|
84
|
+
// PanelSearchInput sizes its field to the 32px option rows of a dropdown
|
|
85
|
+
// panel. The sheet's rows are 44px thumb targets, so the field grows to
|
|
86
|
+
// match them and the query reads as the first row of the list.
|
|
87
|
+
searchField: {
|
|
88
|
+
minHeight: 44,
|
|
89
|
+
paddingBlock: spacingVars['--spacing-2'],
|
|
90
|
+
},
|
|
91
|
+
list: {
|
|
92
|
+
display: 'flex',
|
|
93
|
+
flexDirection: 'column',
|
|
94
|
+
flexGrow: 1,
|
|
95
|
+
overflowY: 'auto',
|
|
96
|
+
minHeight: 0,
|
|
97
|
+
},
|
|
98
|
+
rows: {
|
|
99
|
+
display: 'flex',
|
|
100
|
+
flexDirection: 'column',
|
|
101
|
+
},
|
|
102
|
+
rowItem: {
|
|
103
|
+
display: 'contents',
|
|
104
|
+
},
|
|
105
|
+
row: {
|
|
106
|
+
display: 'flex',
|
|
107
|
+
alignItems: 'center',
|
|
108
|
+
justifyContent: 'space-between',
|
|
109
|
+
gap: spacingVars['--spacing-2'],
|
|
110
|
+
width: '100%',
|
|
111
|
+
minHeight: 44,
|
|
112
|
+
paddingBlock: spacingVars['--spacing-2'],
|
|
113
|
+
paddingInline: spacingVars['--spacing-1'],
|
|
114
|
+
borderWidth: 0,
|
|
115
|
+
borderRadius: radiusVars['--radius-element'],
|
|
116
|
+
backgroundColor: 'transparent',
|
|
117
|
+
color: colorVars['--color-text-primary'],
|
|
118
|
+
fontFamily: 'inherit',
|
|
119
|
+
textAlign: 'start',
|
|
120
|
+
cursor: {
|
|
121
|
+
default: 'pointer',
|
|
122
|
+
':is(:disabled,[aria-disabled="true"])': 'default',
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
// An aria-disabled row gets no system disabled paint in forced colors;
|
|
126
|
+
// GrayText is the platform's disabled affordance there. The default repeats
|
|
127
|
+
// the base value, since StyleX merges per property.
|
|
128
|
+
rowDisabled: {
|
|
129
|
+
color: {
|
|
130
|
+
default: colorVars['--color-text-primary'],
|
|
131
|
+
'@media (forced-colors: active)': 'GrayText',
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
rowLabel: {
|
|
135
|
+
flexGrow: 1,
|
|
136
|
+
minWidth: 0,
|
|
137
|
+
},
|
|
138
|
+
// Same for the indicator's border: GrayText in forced colors, and the
|
|
139
|
+
// default repeats the indicator's disabled border.
|
|
140
|
+
indicatorDisabled: {
|
|
141
|
+
borderColor: {
|
|
142
|
+
default: colorVars['--color-border'],
|
|
143
|
+
'@media (forced-colors: active)': 'GrayText',
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
createRow: {
|
|
147
|
+
display: 'flex',
|
|
148
|
+
alignItems: 'center',
|
|
149
|
+
gap: spacingVars['--spacing-2'],
|
|
150
|
+
width: '100%',
|
|
151
|
+
minHeight: 44,
|
|
152
|
+
paddingBlock: spacingVars['--spacing-2'],
|
|
153
|
+
paddingInline: spacingVars['--spacing-1'],
|
|
154
|
+
},
|
|
155
|
+
createLabel: {
|
|
156
|
+
flexGrow: 1,
|
|
157
|
+
minWidth: 0,
|
|
158
|
+
},
|
|
159
|
+
footer: {
|
|
160
|
+
display: 'flex',
|
|
161
|
+
alignItems: 'center',
|
|
162
|
+
gap: spacingVars['--spacing-2'],
|
|
163
|
+
paddingBlockStart: spacingVars['--spacing-3'],
|
|
164
|
+
marginTop: 'auto',
|
|
165
|
+
},
|
|
166
|
+
footerAction: {
|
|
167
|
+
flexGrow: 1,
|
|
168
|
+
flexBasis: 0,
|
|
169
|
+
},
|
|
170
|
+
emptyHost: {
|
|
171
|
+
display: 'contents',
|
|
172
|
+
},
|
|
173
|
+
empty: {
|
|
174
|
+
flexGrow: 1,
|
|
175
|
+
},
|
|
176
|
+
pending: {
|
|
177
|
+
display: 'flex',
|
|
178
|
+
alignItems: 'center',
|
|
179
|
+
justifyContent: 'center',
|
|
180
|
+
minHeight: 44,
|
|
181
|
+
paddingBlock: spacingVars['--spacing-2'],
|
|
182
|
+
},
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
export interface TokenizerBottomSheetProps<T extends SearchableItem> {
|
|
186
|
+
/** Whether the sheet is open. */
|
|
187
|
+
isOpen: boolean;
|
|
188
|
+
/** Called with `false` when the sheet dismisses or Done is pressed. */
|
|
189
|
+
onOpenChange: (isOpen: boolean) => void;
|
|
190
|
+
/** The trigger, which takes focus back after the sheet closes. */
|
|
191
|
+
finalFocusRef: RefObject<HTMLElement | null>;
|
|
192
|
+
/**
|
|
193
|
+
* The query this presentation starts with. The sheet is mounted only from
|
|
194
|
+
* a press until its exit completes, so the field keeps the query between
|
|
195
|
+
* mounts from what `onChangeQuery` reported: a close the field forces
|
|
196
|
+
* (becoming disabled while open) keeps it, as nothing the person did
|
|
197
|
+
* changed it, while a close the person makes clears and reports it
|
|
198
|
+
* (`component:Tokenizer` FR18).
|
|
199
|
+
*/
|
|
200
|
+
initialQuery: string;
|
|
201
|
+
/** The field label; names the sheet, the search field, and the list. */
|
|
202
|
+
label: string;
|
|
203
|
+
searchSource: SearchSource<T>;
|
|
204
|
+
/** The committed selection. */
|
|
205
|
+
value: T[];
|
|
206
|
+
/** Whether `maxEntries` is reached. */
|
|
207
|
+
isAtMax: boolean;
|
|
208
|
+
hasCreate: boolean;
|
|
209
|
+
maxMenuItems: number;
|
|
210
|
+
minQueryLength: number;
|
|
211
|
+
debounceMs: number;
|
|
212
|
+
/** The no-results message; a string becomes the empty state's title. */
|
|
213
|
+
emptySearchText: ReactNode;
|
|
214
|
+
/**
|
|
215
|
+
* Tokenizer's add path — duplicate checks and the create sentinel — asked
|
|
216
|
+
* to stay silent: the sheet announces the change itself, from inside its
|
|
217
|
+
* dialog, where `useAnnounce` routes it (`spec:AST-086` FR14). Returns
|
|
218
|
+
* whether the item was added.
|
|
219
|
+
*/
|
|
220
|
+
onAdd: (item: T, options: {silent: true}) => boolean;
|
|
221
|
+
/** Tokenizer's remove path, silent for the same reason. */
|
|
222
|
+
onRemove: (item: T, options: {silent: true}) => boolean;
|
|
223
|
+
/** Tokenizer's clear-all path. */
|
|
224
|
+
onClearAll: () => void;
|
|
225
|
+
onChangeQuery?: (query: string) => void;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* The touch surface of Tokenizer's `bottom-sheet` presentation.
|
|
230
|
+
*
|
|
231
|
+
* Rows keep their position while the sheet is open: the items selected when it
|
|
232
|
+
* opened lead, in `value` order, then selected items the results do not carry,
|
|
233
|
+
* then the results. Toggling a row changes its checkbox and nothing else; the
|
|
234
|
+
* next open takes a fresh snapshot and regroups selected-first.
|
|
235
|
+
*/
|
|
236
|
+
/**
|
|
237
|
+
* The sheet: BottomSheet around the content. Split in two so the content —
|
|
238
|
+
* search, rows, footer, and every announcement about them — is rendered
|
|
239
|
+
* inside the sheet's dialog, where `useAnnounce` routes into it while it is
|
|
240
|
+
* open (`spec:AST-086` FR14): a component that renders a modal and announces
|
|
241
|
+
* about its content is inside that modal only when the announcing code is.
|
|
242
|
+
*
|
|
243
|
+
* The outer part also tells the content how a close came about: a close the
|
|
244
|
+
* person made (Done, swipe, scrim, Escape) clears the query so the next open
|
|
245
|
+
* lists the bootstrap set, while a close the field forced (becoming disabled
|
|
246
|
+
* while open) keeps it (`component:Tokenizer` FR18).
|
|
247
|
+
*/
|
|
248
|
+
export function TokenizerBottomSheet<T extends SearchableItem>({
|
|
249
|
+
isOpen,
|
|
250
|
+
onOpenChange,
|
|
251
|
+
finalFocusRef,
|
|
252
|
+
label,
|
|
253
|
+
...content
|
|
254
|
+
}: TokenizerBottomSheetProps<T>) {
|
|
255
|
+
// The content owns the query; a close the person makes clears it through
|
|
256
|
+
// this handle, from the closing event, so a close the field forces by
|
|
257
|
+
// becoming disabled (which never comes through here) keeps it.
|
|
258
|
+
const clearQueryRef = useRef<(() => void) | null>(null);
|
|
259
|
+
const requestClose = () => {
|
|
260
|
+
clearQueryRef.current?.();
|
|
261
|
+
onOpenChange(false);
|
|
262
|
+
};
|
|
263
|
+
return (
|
|
264
|
+
<BottomSheet
|
|
265
|
+
isOpen={isOpen}
|
|
266
|
+
onOpenChange={next => {
|
|
267
|
+
if (next) {
|
|
268
|
+
onOpenChange(true);
|
|
269
|
+
} else {
|
|
270
|
+
requestClose();
|
|
271
|
+
}
|
|
272
|
+
}}
|
|
273
|
+
finalFocusRef={finalFocusRef}
|
|
274
|
+
label={label}
|
|
275
|
+
height="tall"
|
|
276
|
+
padding={0}>
|
|
277
|
+
<TokenizerSheetContent
|
|
278
|
+
{...content}
|
|
279
|
+
isOpen={isOpen}
|
|
280
|
+
label={label}
|
|
281
|
+
clearQueryRef={clearQueryRef}
|
|
282
|
+
onRequestClose={requestClose}
|
|
283
|
+
/>
|
|
284
|
+
</BottomSheet>
|
|
285
|
+
);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
TokenizerBottomSheet.displayName = 'TokenizerBottomSheet';
|
|
289
|
+
|
|
290
|
+
type TokenizerSheetContentProps<T extends SearchableItem> = Omit<
|
|
291
|
+
TokenizerBottomSheetProps<T>,
|
|
292
|
+
'onOpenChange' | 'finalFocusRef'
|
|
293
|
+
> & {
|
|
294
|
+
/** Set by the content: clears and reports its query; called on a user close. */
|
|
295
|
+
clearQueryRef: RefObject<(() => void) | null>;
|
|
296
|
+
/** Close the sheet as the person's own act (Done). */
|
|
297
|
+
onRequestClose: () => void;
|
|
298
|
+
};
|
|
299
|
+
|
|
300
|
+
function TokenizerSheetContent<T extends SearchableItem>({
|
|
301
|
+
isOpen,
|
|
302
|
+
initialQuery,
|
|
303
|
+
clearQueryRef,
|
|
304
|
+
onRequestClose,
|
|
305
|
+
label,
|
|
306
|
+
searchSource,
|
|
307
|
+
value,
|
|
308
|
+
isAtMax,
|
|
309
|
+
hasCreate,
|
|
310
|
+
maxMenuItems,
|
|
311
|
+
minQueryLength,
|
|
312
|
+
debounceMs,
|
|
313
|
+
emptySearchText,
|
|
314
|
+
onAdd,
|
|
315
|
+
onRemove,
|
|
316
|
+
onClearAll,
|
|
317
|
+
onChangeQuery,
|
|
318
|
+
}: TokenizerSheetContentProps<T>) {
|
|
319
|
+
const t = useTranslator();
|
|
320
|
+
const searchRef = useRef<HTMLInputElement>(null);
|
|
321
|
+
const listRef = useRef<HTMLDivElement>(null);
|
|
322
|
+
// Whether a checkbox row holds focus, kept by the list's own focus events,
|
|
323
|
+
// so the hand-off below fires only when it was a row that a settled search
|
|
324
|
+
// removed — not the search field or a footer action.
|
|
325
|
+
const isRowFocusedRef = useRef(false);
|
|
326
|
+
// The Clear all confirmation is in the DOM only from the Clear all press
|
|
327
|
+
// until it closes — mounted open, as the sheet itself is mounted from the
|
|
328
|
+
// trigger's press — so an open sheet with no confirmation pending carries
|
|
329
|
+
// no closed dialog (`architecture:component-style-authoring` INV7). Dialog
|
|
330
|
+
// has an entrance animation and no exit, so a close is its unmount; the
|
|
331
|
+
// sheet then places focus itself, in the Effect below, once the modal is
|
|
332
|
+
// gone and the sheet's content can take focus again: on the search field
|
|
333
|
+
// after a confirmed clear — the clear is spent, and the search field is
|
|
334
|
+
// where the next selection starts (FR24, `spec:AST-085` FR4) — and back on
|
|
335
|
+
// Clear all after a cancel. A confirmed clear is announced there too — a
|
|
336
|
+
// change the person hears about, as an add or a remove is
|
|
337
|
+
// (`component:Tokenizer` AR6) — after the confirmation's dialog has gone,
|
|
338
|
+
// so the sheet is the modal on top and the words are delivered inside it
|
|
339
|
+
// (`spec:AST-086` FR14), not into a covered sheet. Every announcement the
|
|
340
|
+
// sheet makes goes through `useAnnounce`, called inside the sheet's
|
|
341
|
+
// dialog, so FR14 routes the words into it while the sheet is open.
|
|
342
|
+
const [isClearConfirmationOpen, setIsClearConfirmationOpen] = useState(false);
|
|
343
|
+
const clearAllRef = useRef<HTMLButtonElement>(null);
|
|
344
|
+
const afterConfirmationRef = useRef<'search' | 'clear-all' | null>(null);
|
|
345
|
+
const announce = useAnnounce();
|
|
346
|
+
const closeClearConfirmation = (confirmed: boolean) => {
|
|
347
|
+
afterConfirmationRef.current = confirmed ? 'search' : 'clear-all';
|
|
348
|
+
setIsClearConfirmationOpen(false);
|
|
349
|
+
};
|
|
350
|
+
useEffect(() => {
|
|
351
|
+
if (isClearConfirmationOpen || afterConfirmationRef.current == null) {
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
const destination = afterConfirmationRef.current;
|
|
355
|
+
afterConfirmationRef.current = null;
|
|
356
|
+
if (destination === 'search') {
|
|
357
|
+
searchRef.current?.focus();
|
|
358
|
+
announce(t('@astryx.tokenizer.allRemoved'));
|
|
359
|
+
} else {
|
|
360
|
+
clearAllRef.current?.focus();
|
|
361
|
+
}
|
|
362
|
+
}, [announce, isClearConfirmationOpen, t]);
|
|
363
|
+
const selectedIds = useMemo(() => new Set(value.map(v => v.id)), [value]);
|
|
364
|
+
|
|
365
|
+
// ---- sheet session ----
|
|
366
|
+
// Starts from the field's copy, which `onChangeQuery` keeps current, so the
|
|
367
|
+
// query survives the sheet's unmount between presentations (FR18).
|
|
368
|
+
const [query, setQuery] = useState(initialQuery);
|
|
369
|
+
const [sourceResults, setSourceResults] = useState<T[]>([]);
|
|
370
|
+
const trimmedQueryForSearch = query.trim();
|
|
371
|
+
// A query shorter than `minQueryLength` is never searched: no source rows,
|
|
372
|
+
// no busy feedback, no empty state, no outcome announcement, as the inline
|
|
373
|
+
// field shows nothing for such a query (`component:Tokenizer` FR20).
|
|
374
|
+
const isBelowMinQuery =
|
|
375
|
+
trimmedQueryForSearch !== '' &&
|
|
376
|
+
trimmedQueryForSearch.length < minQueryLength;
|
|
377
|
+
const results = isBelowMinQuery ? EMPTY_RESULTS : sourceResults;
|
|
378
|
+
// Whether a query is one the source is asked about: empty (the bootstrap
|
|
379
|
+
// set) or at least `minQueryLength`. Below that nothing is searched, so
|
|
380
|
+
// nothing is pending and no outcome is owed. One rule for every way a query
|
|
381
|
+
// comes to be: the initial one, an open, a change.
|
|
382
|
+
const willSearchFor = (trimmed: string) =>
|
|
383
|
+
trimmed === '' || trimmed.length >= minQueryLength;
|
|
384
|
+
// Pending from open, and from each query change, until that search settles
|
|
385
|
+
// (`component:Tokenizer` FR20). Set where the change happens rather than in
|
|
386
|
+
// the Effect, so the debounce window never shows a stale empty state. The
|
|
387
|
+
// sheet mounts already open (the field mounts it from the press), so its
|
|
388
|
+
// first render is its open: the initial state is derived from the initial
|
|
389
|
+
// query the way an open derives it — a kept query below the threshold
|
|
390
|
+
// (after a close the field forced, FR18) starts settled, not pending for a
|
|
391
|
+
// search that never runs.
|
|
392
|
+
const [isPending, setIsPending] = useState(
|
|
393
|
+
() => !isOpen || willSearchFor(initialQuery.trim()),
|
|
394
|
+
);
|
|
395
|
+
const emptyStateRef = useRef<HTMLDivElement>(null);
|
|
396
|
+
// Each search that runs gets a number; its outcome is announced once, keyed
|
|
397
|
+
// on that number, so a stale effect from an earlier commit cannot claim a
|
|
398
|
+
// newer search's announcement and a rerender cannot repeat one. A first
|
|
399
|
+
// render whose query is not searched owes no announcement for search 0.
|
|
400
|
+
const [searchId, setSearchId] = useState(0);
|
|
401
|
+
const searchIdRef = useRef(0);
|
|
402
|
+
const announcedSearchIdRef = useRef(
|
|
403
|
+
isOpen && !willSearchFor(initialQuery.trim()) ? 0 : -1,
|
|
404
|
+
);
|
|
405
|
+
const startSearch = () => {
|
|
406
|
+
searchIdRef.current += 1;
|
|
407
|
+
setSearchId(searchIdRef.current);
|
|
408
|
+
};
|
|
409
|
+
const [renderedItemCount, setRenderedItemCount] = useState(
|
|
410
|
+
LIST_RENDER_BATCH_SIZE,
|
|
411
|
+
);
|
|
412
|
+
const seqRef = useRef(0);
|
|
413
|
+
const lastLoadScrollHeightRef = useRef<number | null>(null);
|
|
414
|
+
const [selectedItemsAtOpen, setSelectedItemsAtOpen] = useState<T[]>(value);
|
|
415
|
+
|
|
416
|
+
// Snapshot the selection and reset the rendered window in the render that
|
|
417
|
+
// opens the sheet, so the first open frame already shows selected-first
|
|
418
|
+
// order — an effect would paint one frame of the previous session's order.
|
|
419
|
+
const [wasOpen, setWasOpen] = useState(isOpen);
|
|
420
|
+
if (isOpen !== wasOpen) {
|
|
421
|
+
setWasOpen(isOpen);
|
|
422
|
+
if (isOpen) {
|
|
423
|
+
setSelectedItemsAtOpen(value);
|
|
424
|
+
setRenderedItemCount(LIST_RENDER_BATCH_SIZE);
|
|
425
|
+
// An open lists the bootstrap set, or searches a query kept across a
|
|
426
|
+
// close the field forced (FR18), and that load is pending; a kept
|
|
427
|
+
// query below the threshold leaves nothing pending, since no search
|
|
428
|
+
// runs for it.
|
|
429
|
+
const willSearch = willSearchFor(trimmedQueryForSearch);
|
|
430
|
+
setIsPending(willSearch);
|
|
431
|
+
if (willSearch) {
|
|
432
|
+
startSearch();
|
|
433
|
+
} else {
|
|
434
|
+
announcedSearchIdRef.current = searchIdRef.current;
|
|
435
|
+
}
|
|
436
|
+
lastLoadScrollHeightRef.current = null;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
// Done, swipe, scrim, and Escape alike clear the query, so the next open
|
|
441
|
+
// lists the bootstrap set (FR18); a close the field forced (becoming
|
|
442
|
+
// disabled while open) keeps it, since nothing the person did changed it.
|
|
443
|
+
// Cleared and reported from the closing event through this handle, never
|
|
444
|
+
// from render (`architecture:react-component-runtime` INV2).
|
|
445
|
+
useImperativeHandle(
|
|
446
|
+
clearQueryRef,
|
|
447
|
+
() => () => {
|
|
448
|
+
if (query !== '') {
|
|
449
|
+
setQuery('');
|
|
450
|
+
onChangeQuery?.('');
|
|
451
|
+
}
|
|
452
|
+
},
|
|
453
|
+
[query, onChangeQuery],
|
|
454
|
+
);
|
|
455
|
+
|
|
456
|
+
// The source is read through a ref at request time, as the inline field
|
|
457
|
+
// reads it inside its search callbacks: a caller that rebuilds the source
|
|
458
|
+
// object in render (`searchSource={{search, bootstrap}}`) then causes no
|
|
459
|
+
// new request on an unrelated render — a row toggle, a selection change —
|
|
460
|
+
// and the sheet asks the source only on open, on a query change, and on
|
|
461
|
+
// clearing. The ref is updated in a layout effect, before any request this
|
|
462
|
+
// commit makes.
|
|
463
|
+
const searchSourceRef = useRef(searchSource);
|
|
464
|
+
useIsomorphicLayoutEffect(() => {
|
|
465
|
+
searchSourceRef.current = searchSource;
|
|
466
|
+
}, [searchSource]);
|
|
467
|
+
// Synchronizes the row list with the caller's `searchSource`, an external
|
|
468
|
+
// system this component does not own: it asks the source for the bootstrap
|
|
469
|
+
// set or the query's results and copies the answer into state. The
|
|
470
|
+
// bootstrap set is requested at once — on open and when the query clears —
|
|
471
|
+
// as the inline field requests its focus bootstrap; only a typed query
|
|
472
|
+
// waits `debounceMs`. A layout effect, so a source that answers
|
|
473
|
+
// synchronously settles before the browser paints the open commit: the
|
|
474
|
+
// Loading row never reaches the screen and no busy start is announced for
|
|
475
|
+
// it (`component:Tokenizer` FR20). Cleanup clears the debounce timer so a
|
|
476
|
+
// superseded query never fetches, and the sequence guard drops a response
|
|
477
|
+
// that lands after a newer request, so the list never shows stale results
|
|
478
|
+
// (`architecture:react-component-runtime` INV3).
|
|
479
|
+
useIsomorphicLayoutEffect(() => {
|
|
480
|
+
if (!isOpen) {
|
|
481
|
+
return;
|
|
482
|
+
}
|
|
483
|
+
const trimmed = query.trim();
|
|
484
|
+
const seq = ++seqRef.current;
|
|
485
|
+
if (trimmed !== '' && trimmed.length < minQueryLength) {
|
|
486
|
+
// Not searched; the derived `results` are already empty, and taking a
|
|
487
|
+
// sequence number retires a still-running search so its rows cannot
|
|
488
|
+
// land under this query.
|
|
489
|
+
return;
|
|
490
|
+
}
|
|
491
|
+
const settle = (items: T[]) => {
|
|
492
|
+
if (seqRef.current === seq) {
|
|
493
|
+
setSourceResults(items.slice(0, maxMenuItems));
|
|
494
|
+
setIsPending(false);
|
|
495
|
+
}
|
|
496
|
+
};
|
|
497
|
+
const run = () => {
|
|
498
|
+
let answer: T[] | PromiseLike<T[]>;
|
|
499
|
+
const source = searchSourceRef.current;
|
|
500
|
+
try {
|
|
501
|
+
answer = trimmed === '' ? source.bootstrap() : source.search(query);
|
|
502
|
+
} catch {
|
|
503
|
+
answer = [];
|
|
504
|
+
}
|
|
505
|
+
if (Array.isArray(answer)) {
|
|
506
|
+
// An instant source settles in the same tick, before any busy
|
|
507
|
+
// feedback or announcement could start.
|
|
508
|
+
settle(answer);
|
|
509
|
+
return;
|
|
510
|
+
}
|
|
511
|
+
// Anything else is awaited as a thenable — a native Promise, one from
|
|
512
|
+
// another realm, or a library's — as the inline field's `await` does.
|
|
513
|
+
void Promise.resolve(answer).then(settle, () => {
|
|
514
|
+
// A rejecting source settles to no results, as the inline field does:
|
|
515
|
+
// the previous query's rows are not this query's answer.
|
|
516
|
+
settle([]);
|
|
517
|
+
});
|
|
518
|
+
};
|
|
519
|
+
if (trimmed !== '' && debounceMs > 0) {
|
|
520
|
+
const timer = setTimeout(run, debounceMs);
|
|
521
|
+
return () => clearTimeout(timer);
|
|
522
|
+
}
|
|
523
|
+
run();
|
|
524
|
+
}, [isOpen, query, minQueryLength, maxMenuItems, debounceMs]);
|
|
525
|
+
|
|
526
|
+
const visibleItems = useMemo(() => {
|
|
527
|
+
const normalizedQuery = query.trim().toLowerCase();
|
|
528
|
+
const matchesQuery = (item: T) =>
|
|
529
|
+
normalizedQuery === '' ||
|
|
530
|
+
item.label.toLowerCase().includes(normalizedQuery);
|
|
531
|
+
const selectedAtOpenMatches = selectedItemsAtOpen.filter(matchesQuery);
|
|
532
|
+
const selectedAtOpenIds = new Set(
|
|
533
|
+
selectedAtOpenMatches.map(item => item.id),
|
|
534
|
+
);
|
|
535
|
+
const resultIds = new Set(results.map(item => item.id));
|
|
536
|
+
const selectedItemsMissingFromResults = value.filter(
|
|
537
|
+
item =>
|
|
538
|
+
!selectedAtOpenIds.has(item.id) &&
|
|
539
|
+
!resultIds.has(item.id) &&
|
|
540
|
+
matchesQuery(item),
|
|
541
|
+
);
|
|
542
|
+
|
|
543
|
+
// Selection changes update checkbox state without moving an existing row.
|
|
544
|
+
// The next open snapshots the latest value and applies selected-first order.
|
|
545
|
+
return [
|
|
546
|
+
...selectedAtOpenMatches,
|
|
547
|
+
...selectedItemsMissingFromResults,
|
|
548
|
+
...results.filter(item => !selectedAtOpenIds.has(item.id)),
|
|
549
|
+
];
|
|
550
|
+
}, [query, results, selectedItemsAtOpen, value]);
|
|
551
|
+
|
|
552
|
+
const renderedItems = visibleItems.slice(0, renderedItemCount);
|
|
553
|
+
|
|
554
|
+
// A settled search may remove the row that holds focus: it was listed from
|
|
555
|
+
// the previous search and is not in this one. Focus would fall to the page
|
|
556
|
+
// body behind the modal; the search field takes it instead, where the next
|
|
557
|
+
// query starts (FR20, `spec:AST-085` FR4).
|
|
558
|
+
useEffect(() => {
|
|
559
|
+
if (!isOpen || isPending || !isRowFocusedRef.current) {
|
|
560
|
+
return;
|
|
561
|
+
}
|
|
562
|
+
const active = document.activeElement;
|
|
563
|
+
if (active == null || active === document.body) {
|
|
564
|
+
isRowFocusedRef.current = false;
|
|
565
|
+
searchRef.current?.focus();
|
|
566
|
+
}
|
|
567
|
+
}, [isOpen, isPending, renderedItems]);
|
|
568
|
+
|
|
569
|
+
// `action` is declared on `SearchableItem` for the grid-adopting hosts; the
|
|
570
|
+
// sheet rows have not adopted it, so a row renders the item without the
|
|
571
|
+
// control and says so (`spec:AST-058` FR9), as the inline panel does.
|
|
572
|
+
useEffect(() => {
|
|
573
|
+
if (results.some(item => item.action != null)) {
|
|
574
|
+
warnOnce(
|
|
575
|
+
'tokenizer-sheet:item-action',
|
|
576
|
+
'Tokenizer',
|
|
577
|
+
'A result carries `action`, which the bottom-sheet rows do not render ' +
|
|
578
|
+
'yet; the item is shown without it.',
|
|
579
|
+
);
|
|
580
|
+
}
|
|
581
|
+
}, [results]);
|
|
582
|
+
|
|
583
|
+
// The pending Spinner below stays named, as the inline field's does
|
|
584
|
+
// (`family:input-fields` FR7), but is not a live region; the sheet announces
|
|
585
|
+
// each busy start once, through the region inside its own modal dialog
|
|
586
|
+
// (`spec:AST-086` FR8, FR14).
|
|
587
|
+
useBusyAnnouncement(
|
|
588
|
+
isOpen && isPending,
|
|
589
|
+
t('@astryx.typeahead.loading'),
|
|
590
|
+
listRef,
|
|
591
|
+
);
|
|
592
|
+
|
|
593
|
+
const trimmedQuery = query.trim();
|
|
594
|
+
const createItem = useMemo<T | null>(() => {
|
|
595
|
+
// Judged against this query's own results: while the search is pending
|
|
596
|
+
// `results` still hold the previous query's rows, and a create row then
|
|
597
|
+
// could offer a value the source already has.
|
|
598
|
+
if (!hasCreate || trimmedQuery === '' || isAtMax || isPending) {
|
|
599
|
+
return null;
|
|
600
|
+
}
|
|
601
|
+
const lowered = trimmedQuery.toLowerCase();
|
|
602
|
+
if (
|
|
603
|
+
selectedIds.has(trimmedQuery) ||
|
|
604
|
+
value.some(item => item.label.toLowerCase() === lowered) ||
|
|
605
|
+
results.some(item => item.label.toLowerCase() === lowered)
|
|
606
|
+
) {
|
|
607
|
+
return null;
|
|
608
|
+
}
|
|
609
|
+
return {
|
|
610
|
+
id: `${CREATABLE_ID_PREFIX}${trimmedQuery}`,
|
|
611
|
+
label: t('@astryx.tokenizer.create', {value: trimmedQuery}),
|
|
612
|
+
} as unknown as T;
|
|
613
|
+
}, [
|
|
614
|
+
hasCreate,
|
|
615
|
+
trimmedQuery,
|
|
616
|
+
isAtMax,
|
|
617
|
+
isPending,
|
|
618
|
+
selectedIds,
|
|
619
|
+
value,
|
|
620
|
+
results,
|
|
621
|
+
t,
|
|
622
|
+
]);
|
|
623
|
+
|
|
624
|
+
const resetListWindow = () => {
|
|
625
|
+
lastLoadScrollHeightRef.current = null;
|
|
626
|
+
setRenderedItemCount(LIST_RENDER_BATCH_SIZE);
|
|
627
|
+
};
|
|
628
|
+
|
|
629
|
+
const handleQueryChange = (next: string) => {
|
|
630
|
+
resetListWindow();
|
|
631
|
+
const willSearch = willSearchFor(next.trim());
|
|
632
|
+
// A search still unsettled from the previous query is retired
|
|
633
|
+
// unannounced, so "0 results" is never said for a query that was never
|
|
634
|
+
// searched. Only a query that runs gets a search number.
|
|
635
|
+
setIsPending(willSearch);
|
|
636
|
+
if (willSearch) {
|
|
637
|
+
startSearch();
|
|
638
|
+
} else {
|
|
639
|
+
announcedSearchIdRef.current = searchIdRef.current;
|
|
640
|
+
}
|
|
641
|
+
setQuery(next);
|
|
642
|
+
onChangeQuery?.(next);
|
|
643
|
+
};
|
|
644
|
+
|
|
645
|
+
const searchLabel = t('@astryx.tokenizer.search', {label});
|
|
646
|
+
// An empty state only once the search has settled; while pending the busy
|
|
647
|
+
// row above stands in for it.
|
|
648
|
+
const isQueryEmpty = trimmedQuery === '';
|
|
649
|
+
// An empty state is a searched query's answer. An empty query that lists
|
|
650
|
+
// nothing — nothing selected and a source whose bootstrap set is empty,
|
|
651
|
+
// such as a search-only source — shows only the search field, no list, no
|
|
652
|
+
// message, and announces nothing, as the inline field opens no menu and
|
|
653
|
+
// reports nothing for a bootstrap that returned nothing (`component:Tokenizer`
|
|
654
|
+
// FR20): nothing has failed, typing is what finds items.
|
|
655
|
+
const isSettledEmpty =
|
|
656
|
+
!isPending &&
|
|
657
|
+
!isBelowMinQuery &&
|
|
658
|
+
!isQueryEmpty &&
|
|
659
|
+
visibleItems.length === 0 &&
|
|
660
|
+
createItem == null;
|
|
661
|
+
const isSettledBlank =
|
|
662
|
+
!isPending &&
|
|
663
|
+
!isBelowMinQuery &&
|
|
664
|
+
isQueryEmpty &&
|
|
665
|
+
visibleItems.length === 0 &&
|
|
666
|
+
createItem == null;
|
|
667
|
+
const noResultsTitle =
|
|
668
|
+
typeof emptySearchText === 'string'
|
|
669
|
+
? emptySearchText
|
|
670
|
+
: t('@astryx.typeahead.emptySearchResults');
|
|
671
|
+
|
|
672
|
+
// How each search ended, once per settle (`component:Tokenizer` AR6),
|
|
673
|
+
// keyed on the search's number. The result count is an action announcement
|
|
674
|
+
// this owner makes. The empty state's words are rendered content: the
|
|
675
|
+
// default EmptyState announces its own title and description once when it
|
|
676
|
+
// appears (its own contract, `spec:AST-086` FR2, FR11), so the sheet speaks
|
|
677
|
+
// nothing for it; a caller's `emptySearchText` element is the sheet's own
|
|
678
|
+
// rendered content, so the shared own-content module reads and speaks it
|
|
679
|
+
// (`spec:AST-056` FR3, `architecture:react-component-runtime` INV10). Both
|
|
680
|
+
// go through `useAnnounce`, which, called from inside the sheet's dialog,
|
|
681
|
+
// routes into it while the sheet is open (`spec:AST-086` FR14).
|
|
682
|
+
const hasCustomEmptyElement =
|
|
683
|
+
typeof emptySearchText !== 'string' && emptySearchText != null;
|
|
684
|
+
useAnnounceRenderedText(
|
|
685
|
+
emptyStateRef,
|
|
686
|
+
isOpen && isSettledEmpty && hasCustomEmptyElement,
|
|
687
|
+
String(searchId),
|
|
688
|
+
);
|
|
689
|
+
useEffect(() => {
|
|
690
|
+
if (!isOpen || isPending || announcedSearchIdRef.current === searchId) {
|
|
691
|
+
return;
|
|
692
|
+
}
|
|
693
|
+
announcedSearchIdRef.current = searchId;
|
|
694
|
+
if (!isSettledEmpty && !isQueryEmpty) {
|
|
695
|
+
// The rows the sheet lists for this query — the source's results,
|
|
696
|
+
// capped by `maxMenuItems`, selected items the source did not return,
|
|
697
|
+
// such as a created value, and the create row when it is offered — as
|
|
698
|
+
// the inline field announces the entries it shows (its create entry
|
|
699
|
+
// included), not the source's count.
|
|
700
|
+
announce(
|
|
701
|
+
t('@astryx.typeahead.resultCount', {
|
|
702
|
+
count: visibleItems.length + (createItem == null ? 0 : 1),
|
|
703
|
+
}),
|
|
704
|
+
);
|
|
705
|
+
}
|
|
706
|
+
}, [
|
|
707
|
+
announce,
|
|
708
|
+
createItem,
|
|
709
|
+
isOpen,
|
|
710
|
+
isPending,
|
|
711
|
+
isQueryEmpty,
|
|
712
|
+
isSettledEmpty,
|
|
713
|
+
visibleItems.length,
|
|
714
|
+
searchId,
|
|
715
|
+
t,
|
|
716
|
+
]);
|
|
717
|
+
|
|
718
|
+
return (
|
|
719
|
+
<div {...stylex.props(styles.body)}>
|
|
720
|
+
<div {...stylex.props(styles.searchRow)}>
|
|
721
|
+
<PanelSearchInput
|
|
722
|
+
ref={searchRef}
|
|
723
|
+
label={searchLabel}
|
|
724
|
+
clearLabel={t('@astryx.textInput.clearLabel', {label: searchLabel})}
|
|
725
|
+
placeholder={t('@astryx.tokenizer.searchPlaceholder')}
|
|
726
|
+
value={query}
|
|
727
|
+
onValueChange={handleQueryChange}
|
|
728
|
+
fieldXstyle={styles.searchField}
|
|
729
|
+
/>
|
|
730
|
+
</div>
|
|
731
|
+
{/* The sheet's own content area is already a group named by the
|
|
732
|
+
label; naming this list the same would announce it twice. */}
|
|
733
|
+
<div
|
|
734
|
+
ref={listRef}
|
|
735
|
+
{...stylex.props(styles.list)}
|
|
736
|
+
aria-busy={isPending || undefined}
|
|
737
|
+
data-rendered-count={renderedItems.length}
|
|
738
|
+
data-total-count={visibleItems.length}
|
|
739
|
+
onFocusCapture={event => {
|
|
740
|
+
isRowFocusedRef.current =
|
|
741
|
+
event.target instanceof HTMLElement &&
|
|
742
|
+
event.target.getAttribute('role') === 'checkbox';
|
|
743
|
+
}}
|
|
744
|
+
onBlurCapture={event => {
|
|
745
|
+
// A row unmounted while focused fires no blur, so a blur that
|
|
746
|
+
// does arrive is a real move elsewhere.
|
|
747
|
+
if (event.relatedTarget != null) {
|
|
748
|
+
isRowFocusedRef.current = false;
|
|
749
|
+
}
|
|
750
|
+
}}
|
|
751
|
+
onScroll={event => {
|
|
752
|
+
const list = event.currentTarget;
|
|
753
|
+
const distanceFromBottom =
|
|
754
|
+
list.scrollHeight - list.scrollTop - list.clientHeight;
|
|
755
|
+
if (
|
|
756
|
+
distanceFromBottom <= LIST_LOAD_MORE_THRESHOLD_PX &&
|
|
757
|
+
lastLoadScrollHeightRef.current !== list.scrollHeight
|
|
758
|
+
) {
|
|
759
|
+
lastLoadScrollHeightRef.current = list.scrollHeight;
|
|
760
|
+
setRenderedItemCount(current =>
|
|
761
|
+
Math.min(current + LIST_RENDER_BATCH_SIZE, visibleItems.length),
|
|
762
|
+
);
|
|
763
|
+
}
|
|
764
|
+
}}>
|
|
765
|
+
{createItem ? (
|
|
766
|
+
<div {...stylex.props(styles.createRow)}>
|
|
767
|
+
<Text type="body" xstyle={styles.createLabel}>
|
|
768
|
+
{createItem.label}
|
|
769
|
+
</Text>
|
|
770
|
+
<Button
|
|
771
|
+
label={t('@astryx.tokenizer.add')}
|
|
772
|
+
aria-label={t('@astryx.tokenizer.addValue', {
|
|
773
|
+
value: trimmedQuery,
|
|
774
|
+
})}
|
|
775
|
+
variant="secondary"
|
|
776
|
+
size="lg"
|
|
777
|
+
onClick={() => {
|
|
778
|
+
if (onAdd(createItem, {silent: true})) {
|
|
779
|
+
// The created value, as the inline field announces it; the
|
|
780
|
+
// item's label is the row's caption ("Create …").
|
|
781
|
+
announce(
|
|
782
|
+
t('@astryx.tokenizer.tokenAdded', {label: trimmedQuery}),
|
|
783
|
+
);
|
|
784
|
+
}
|
|
785
|
+
// The same path a typed change takes, so the bootstrap
|
|
786
|
+
// reload shows its pending state and reports the change.
|
|
787
|
+
handleQueryChange('');
|
|
788
|
+
// The row this control sits on is gone with the query; the
|
|
789
|
+
// search field is where the next value starts (FR22).
|
|
790
|
+
searchRef.current?.focus();
|
|
791
|
+
}}
|
|
792
|
+
/>
|
|
793
|
+
</div>
|
|
794
|
+
) : null}
|
|
795
|
+
{isPending ? (
|
|
796
|
+
// Named busy feedback while the source works
|
|
797
|
+
// (`family:input-fields` FR7), above any rows still listed from
|
|
798
|
+
// the previous search; the empty states wait for it.
|
|
799
|
+
<div {...stylex.props(styles.pending)}>
|
|
800
|
+
<Spinner
|
|
801
|
+
size="md"
|
|
802
|
+
role="img"
|
|
803
|
+
aria-label={t('@astryx.typeahead.loading')}
|
|
804
|
+
/>
|
|
805
|
+
</div>
|
|
806
|
+
) : null}
|
|
807
|
+
{isSettledEmpty ? (
|
|
808
|
+
<div ref={emptyStateRef} {...stylex.props(styles.emptyHost)}>
|
|
809
|
+
{hasCustomEmptyElement ? (
|
|
810
|
+
<div {...stylex.props(styles.empty)}>{emptySearchText}</div>
|
|
811
|
+
) : (
|
|
812
|
+
<EmptyState
|
|
813
|
+
icon={<Icon icon="search" size="lg" color="secondary" />}
|
|
814
|
+
title={noResultsTitle}
|
|
815
|
+
description={t('@astryx.tokenizer.noResultsDescription')}
|
|
816
|
+
isCompact
|
|
817
|
+
xstyle={styles.empty}
|
|
818
|
+
/>
|
|
819
|
+
)}
|
|
820
|
+
</div>
|
|
821
|
+
) : isSettledBlank ? null : (
|
|
822
|
+
// A list of items: each listitem carries its place in the whole
|
|
823
|
+
// set, not the rendered window, so a person moving through the
|
|
824
|
+
// rows hears "n of total" and learns more exist before the list
|
|
825
|
+
// has scrolled (FR21). The position attributes live on the
|
|
826
|
+
// listitem because `checkbox` does not admit them.
|
|
827
|
+
<div role="list" {...stylex.props(styles.rows)}>
|
|
828
|
+
{renderedItems.map((item, index) => {
|
|
829
|
+
const isSelected = selectedIds.has(item.id);
|
|
830
|
+
const rowDisabled = !isSelected && isAtMax;
|
|
831
|
+
const isLastRendered = index === renderedItems.length - 1;
|
|
832
|
+
return (
|
|
833
|
+
<div
|
|
834
|
+
key={item.id}
|
|
835
|
+
role="listitem"
|
|
836
|
+
aria-setsize={visibleItems.length}
|
|
837
|
+
aria-posinset={index + 1}
|
|
838
|
+
{...stylex.props(styles.rowItem)}>
|
|
839
|
+
<button
|
|
840
|
+
type="button"
|
|
841
|
+
role="checkbox"
|
|
842
|
+
aria-checked={isSelected}
|
|
843
|
+
aria-label={item.label}
|
|
844
|
+
aria-disabled={rowDisabled || undefined}
|
|
845
|
+
onFocus={
|
|
846
|
+
isLastRendered &&
|
|
847
|
+
renderedItems.length < visibleItems.length
|
|
848
|
+
? () => {
|
|
849
|
+
// Focus reaching the last rendered row renders the
|
|
850
|
+
// next batch, so Tab and arrow keys reach every row
|
|
851
|
+
// without a scroll (FR21).
|
|
852
|
+
setRenderedItemCount(current =>
|
|
853
|
+
Math.min(
|
|
854
|
+
current + LIST_RENDER_BATCH_SIZE,
|
|
855
|
+
visibleItems.length,
|
|
856
|
+
),
|
|
857
|
+
);
|
|
858
|
+
}
|
|
859
|
+
: undefined
|
|
860
|
+
}
|
|
861
|
+
onClick={() => {
|
|
862
|
+
if (rowDisabled) {
|
|
863
|
+
return;
|
|
864
|
+
}
|
|
865
|
+
if (isSelected) {
|
|
866
|
+
if (onRemove(item, {silent: true})) {
|
|
867
|
+
announce(
|
|
868
|
+
t('@astryx.tokenizer.tokenRemoved', {
|
|
869
|
+
label: item.label,
|
|
870
|
+
}),
|
|
871
|
+
);
|
|
872
|
+
}
|
|
873
|
+
} else if (onAdd(item, {silent: true})) {
|
|
874
|
+
announce(
|
|
875
|
+
t('@astryx.tokenizer.tokenAdded', {
|
|
876
|
+
label: item.label,
|
|
877
|
+
}),
|
|
878
|
+
);
|
|
879
|
+
}
|
|
880
|
+
}}
|
|
881
|
+
{...stylex.props(
|
|
882
|
+
styles.row,
|
|
883
|
+
rowDisabled && styles.rowDisabled,
|
|
884
|
+
)}>
|
|
885
|
+
<Text
|
|
886
|
+
type="body"
|
|
887
|
+
color={rowDisabled ? 'inherit' : undefined}
|
|
888
|
+
xstyle={styles.rowLabel}>
|
|
889
|
+
{item.label}
|
|
890
|
+
</Text>
|
|
891
|
+
<CheckboxIndicator
|
|
892
|
+
state={isSelected ? 'checked' : 'unchecked'}
|
|
893
|
+
size="md"
|
|
894
|
+
isDisabled={rowDisabled}
|
|
895
|
+
xstyle={
|
|
896
|
+
rowDisabled ? styles.indicatorDisabled : undefined
|
|
897
|
+
}
|
|
898
|
+
/>
|
|
899
|
+
</button>
|
|
900
|
+
</div>
|
|
901
|
+
);
|
|
902
|
+
})}
|
|
903
|
+
</div>
|
|
904
|
+
)}
|
|
905
|
+
</div>
|
|
906
|
+
{isQueryEmpty && (
|
|
907
|
+
<div {...stylex.props(styles.footer)}>
|
|
908
|
+
<Button
|
|
909
|
+
label={t('@astryx.tokenizer.clearAll')}
|
|
910
|
+
variant="secondary"
|
|
911
|
+
size="lg"
|
|
912
|
+
isDisabled={value.length === 0}
|
|
913
|
+
// With a tooltip, Button's disabled mode is `aria-disabled`: the
|
|
914
|
+
// action keeps its focus order and says why it does nothing
|
|
915
|
+
// (`spec:AST-085` FR1), instead of leaving the tab order as a
|
|
916
|
+
// natively disabled button does — a confirmed Clear all returns
|
|
917
|
+
// focus here before the search field takes it (FR24).
|
|
918
|
+
tooltip={
|
|
919
|
+
value.length === 0
|
|
920
|
+
? t('@astryx.tokenizer.nothingToClear')
|
|
921
|
+
: undefined
|
|
922
|
+
}
|
|
923
|
+
ref={clearAllRef}
|
|
924
|
+
onClick={() => setIsClearConfirmationOpen(true)}
|
|
925
|
+
xstyle={styles.footerAction}
|
|
926
|
+
/>
|
|
927
|
+
<Button
|
|
928
|
+
label={t('@astryx.tokenizer.done')}
|
|
929
|
+
variant="primary"
|
|
930
|
+
size="lg"
|
|
931
|
+
onClick={onRequestClose}
|
|
932
|
+
xstyle={styles.footerAction}
|
|
933
|
+
/>
|
|
934
|
+
</div>
|
|
935
|
+
)}
|
|
936
|
+
{isClearConfirmationOpen && (
|
|
937
|
+
<AlertDialog
|
|
938
|
+
isOpen
|
|
939
|
+
onOpenChange={next => {
|
|
940
|
+
if (!next) {
|
|
941
|
+
closeClearConfirmation(false);
|
|
942
|
+
}
|
|
943
|
+
}}
|
|
944
|
+
title={t('@astryx.tokenizer.clearAllTitle')}
|
|
945
|
+
description={t('@astryx.tokenizer.clearAllDescription', {label})}
|
|
946
|
+
actionLabel={t('@astryx.tokenizer.clearSelection')}
|
|
947
|
+
onAction={() => {
|
|
948
|
+
onClearAll();
|
|
949
|
+
closeClearConfirmation(true);
|
|
950
|
+
}}
|
|
951
|
+
/>
|
|
952
|
+
)}
|
|
953
|
+
</div>
|
|
954
|
+
);
|
|
955
|
+
}
|
|
956
|
+
|
|
957
|
+
TokenizerSheetContent.displayName = 'TokenizerSheetContent';
|