@astryxdesign/core 0.7.4 → 0.7.5-canary.0026f37
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/dist/AlertDialog/AlertDialog.d.ts +2 -2
- 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/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/index.d.ts +2 -2
- package/dist/Banner/Banner.d.ts +4 -4
- 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 +10 -6
- package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +12 -1
- package/dist/BottomSheet/BottomSheetPanel.d.ts +3 -3
- package/dist/BottomSheet/BottomSheetSwitcher.d.ts +1 -1
- package/dist/BottomSheet/BottomSheetSwitcherContext.d.ts +2 -2
- package/dist/BottomSheet/index.d.ts +4 -4
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts +4 -4
- 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/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/ChatComposerDrawer.d.ts +1 -1
- package/dist/Chat/ChatComposerInput.d.ts +4 -4
- 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/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/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/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 +2 -2
- package/dist/CodeBlock/highlightRanges.d.ts +1 -1
- package/dist/CodeBlock/index.d.ts +8 -8
- package/dist/Collapsible/Collapsible.d.ts +2 -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/CommandPaletteContext.d.ts +1 -1
- package/dist/CommandPalette/CommandPaletteEmpty.d.ts +1 -1
- 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/CommandPaletteItem.d.ts +1 -1
- package/dist/CommandPalette/CommandPaletteList.d.ts +1 -1
- package/dist/CommandPalette/index.d.ts +16 -16
- package/dist/ComplexSelector/ComplexSelector.d.ts +5 -5
- package/dist/ComplexSelector/index.d.ts +1 -1
- package/dist/ContextMenu/ContextMenu.d.ts +4 -4
- package/dist/ContextMenu/index.d.ts +9 -9
- package/dist/DateInput/DateInput.d.ts +7 -7
- package/dist/DateInput/MonthScroller.d.ts +1 -1
- package/dist/DateInput/NativeDateField.d.ts +1 -1
- package/dist/DateInput/TouchDateField.d.ts +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 +3 -3
- 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/DrawerHeader.d.ts +1 -1
- package/dist/Drawer/index.d.ts +4 -4
- package/dist/DropdownMenu/DropdownMenu.d.ts +5 -5
- 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/DropdownMenuRadioGroup.d.ts +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +2 -2
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts +2 -2
- package/dist/DropdownMenu/MenuBottomSheetActionList.d.ts +1 -1
- package/dist/DropdownMenu/index.d.ts +10 -10
- package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts +2 -2
- package/dist/DropdownMenu/renderDropdownItems.d.ts +1 -1
- package/dist/DropdownMenu/useMenuDrillIn.d.ts +1 -1
- package/dist/EmptyState/EmptyState.d.ts +1 -1
- package/dist/EmptyState/index.d.ts +2 -2
- package/dist/Field/Field.d.ts +5 -5
- package/dist/Field/FieldLabel.d.ts +2 -2
- package/dist/Field/PanelSearchInput.d.ts +1 -1
- 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/FieldStatus/FieldStatus.d.ts +3 -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/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 +3 -3
- package/dist/Icon/IconDefaultSizeContext.d.ts +1 -1
- package/dist/Icon/defaultIcons.d.ts +1 -1
- package/dist/Icon/globalIconRegistry.d.ts +1 -1
- package/dist/Icon/index.d.ts +5 -5
- package/dist/Icon/useIcon.d.ts +1 -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 +2 -2
- package/dist/InputGroup/InputGroupText.d.ts +1 -1
- 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/ItemSwipeLayer.d.ts +2 -2
- package/dist/Item/index.d.ts +2 -2
- package/dist/Kbd/Kbd.d.ts +1 -1
- 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/layerInset.d.ts +1 -1
- package/dist/Layer/layerSlideRules.d.ts +1 -1
- package/dist/Layer/modalOutlet.d.ts +1 -1
- package/dist/Layer/modalOutlet.js +1 -1
- package/dist/Layer/useLayerDismissal.d.ts +1 -1
- package/dist/Layout/Layout.d.ts +2 -2
- package/dist/Layout/LayoutContent.d.ts +2 -2
- package/dist/Layout/LayoutFooter.d.ts +2 -2
- package/dist/Layout/LayoutHeader.d.ts +2 -2
- package/dist/Layout/LayoutPanel.d.ts +3 -3
- package/dist/Layout/index.d.ts +29 -29
- package/dist/Layout/padding.stylex.d.ts +1 -1
- package/dist/Lightbox/Lightbox.d.ts +1 -1
- 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 +4 -4
- 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 +1 -1
- 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/MultiSelector.d.ts +7 -7
- 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/index.d.ts +6 -6
- package/dist/NumberInput/NumberInput.d.ts +5 -5
- 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 +3 -3
- package/dist/Popover/index.d.ts +4 -4
- package/dist/Popover/usePopover.d.ts +2 -2
- package/dist/PowerSearch/PowerSearch.d.ts +5 -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/index.d.ts +2 -2
- package/dist/RadioList/RadioList.d.ts +3 -3
- package/dist/RadioList/RadioListItem.d.ts +2 -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/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 +3 -3
- package/dist/SelectableCard/index.d.ts +2 -2
- package/dist/Selector/Selector.d.ts +8 -8
- 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 +4 -4
- 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/index.d.ts +2 -2
- package/dist/Slider/Slider.d.ts +3 -3
- 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/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 +3 -3
- 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/index.d.ts +2 -2
- package/dist/TabList/Tab.d.ts +2 -2
- package/dist/TabList/TabList.d.ts +3 -3
- package/dist/TabList/TabMenu.d.ts +2 -2
- 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/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/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/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/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/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/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 +14 -11
- package/dist/TextArea/index.d.ts +2 -2
- package/dist/TextInput/TextInput.d.ts +11 -9
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +20 -11
- package/dist/TextInput/index.d.ts +2 -2
- package/dist/Thumbnail/Thumbnail.d.ts +1 -1
- package/dist/Thumbnail/index.d.ts +2 -2
- package/dist/TimeInput/TimeInput.d.ts +6 -6
- package/dist/TimeInput/TouchTimeField.d.ts +1 -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/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 +6 -6
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +44 -40
- 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/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/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 +3 -3
- package/dist/TreeList/TreeListItem.d.ts +1 -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/Typeahead.d.ts +6 -6
- 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 +6 -13
- package/dist/hooks/index.d.ts +52 -52
- package/dist/hooks/useAutoMediaMode.d.ts +1 -1
- package/dist/hooks/useInputContainer.d.ts +1 -1
- package/dist/hooks/useInputStatusIcon.d.ts +3 -3
- package/dist/hooks/useMenuPress.d.ts +1 -1
- package/dist/hooks/usePressFeedback.d.ts +1 -1
- package/dist/hooks/useScrollableArea.d.ts +1 -1
- package/dist/i18n/InternationalizationContext.d.ts +2 -2
- package/dist/i18n/InternationalizationProvider.d.ts +1 -1
- 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/theme/Theme.d.ts +2 -2
- package/dist/theme/contrast.d.ts +1 -1
- package/dist/theme/defineTheme.d.ts +12 -12
- package/dist/theme/domainTokens/index.d.ts +6 -6
- package/dist/theme/generateThemeRules.d.ts +1 -1
- package/dist/theme/index.d.ts +31 -31
- 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/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 +5 -5
- package/dist/theme/themeRegistry.d.ts +1 -1
- package/dist/theme/tokens.d.ts +1 -1
- package/dist/theme/types.d.ts +1 -1
- package/dist/theme/useTheme.d.ts +2 -2
- package/dist/utils/dateParser.d.ts +3 -3
- package/dist/utils/groupItems.d.ts +1 -1
- package/dist/utils/index.d.ts +29 -29
- package/dist/utils/plainDate.d.ts +3 -3
- package/package.json +5 -5
- package/src/Badge/Badge.doc.mjs +2 -1
- package/src/BottomSheet/BottomSheet.tsx +12 -1
- package/src/BottomSheet/__tests__/BottomSheetToastOutlet.a11y.chromium.spec.ts +82 -0
- package/src/Field/inputDisabledFocus.ts +28 -0
- package/src/Icon/Icon.spec.md +40 -29
- package/src/Layer/modalOutlet.ts +1 -1
- package/src/SideNav/SideNav.test.tsx +15 -6
- package/src/SideNav/SideNavHeading.tsx +41 -0
- package/src/Stepper/Step.tsx +7 -0
- package/src/Stepper/Stepper.test.tsx +33 -0
- package/src/TextArea/TextArea.doc.mjs +6 -6
- package/src/TextArea/TextArea.test.tsx +65 -6
- package/src/TextArea/TextArea.tsx +26 -14
- package/src/TextInput/TextInput.doc.mjs +8 -8
- package/src/TextInput/TextInput.test.tsx +72 -6
- package/src/TextInput/TextInput.tsx +32 -14
- package/src/Toast/ToastViewport.modalHost.test.tsx +139 -4
- package/src/Tokenizer/Tokenizer.test.tsx +26 -8
- package/src/Tokenizer/Tokenizer.tsx +65 -72
- package/src/Tokenizer/__tests__/TokenizerEndLane.a11y.chromium.spec.ts +471 -0
- package/src/Tokenizer/useEndLaneReserve.ts +3 -2
- package/src/VisuallyHidden/VisuallyHidden.doc.mjs +1 -1
- package/src/VisuallyHidden/VisuallyHidden.test.tsx +39 -0
- package/src/VisuallyHidden/VisuallyHidden.tsx +38 -5
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
* - /packages/core/src/utils/dateParser.test.ts
|
|
9
9
|
* - /packages/core/src/utils/index.ts
|
|
10
10
|
*/
|
|
11
|
-
import { type PlainDate } from './plainDate';
|
|
12
|
-
import type { Locale } from '../i18n/types';
|
|
13
|
-
export { plainDateFromISO as parseISO, plainDateToISO as dateToISO, } from './plainDate';
|
|
11
|
+
import { type PlainDate } from './plainDate.js';
|
|
12
|
+
import type { Locale } from '../i18n/types.js';
|
|
13
|
+
export { plainDateFromISO as parseISO, plainDateToISO as dateToISO, } from './plainDate.js';
|
|
14
14
|
/**
|
|
15
15
|
* Detects if the locale uses day-first date format (DD/MM/YYYY).
|
|
16
16
|
* US and a few others use month-first (MM/DD/YYYY).
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* @position Shared utility; used by CommandPalette, trigger menu, and
|
|
6
6
|
* any future component that needs to group search results by category.
|
|
7
7
|
*/
|
|
8
|
-
import type { SearchableItem } from '../Typeahead/types';
|
|
8
|
+
import type { SearchableItem } from '../Typeahead/types.js';
|
|
9
9
|
/**
|
|
10
10
|
* A group of items with an optional heading.
|
|
11
11
|
* `heading` is null for ungrouped items.
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -4,33 +4,33 @@
|
|
|
4
4
|
* @output Re-exports all utility functions and shared types
|
|
5
5
|
* @position Package entry point for utils
|
|
6
6
|
*/
|
|
7
|
-
export type { SizeValue } from './types';
|
|
8
|
-
export type { ISODateString, DayOfWeek, PlainDate, DateRange } from './dateTypes';
|
|
9
|
-
export { parseDateInput, dateToISO, parseISO, isLocaleDayFirst, } from './dateParser';
|
|
10
|
-
export { plainDateCreate, plainDateFromISO, plainDateToISO, plainDateToDate, plainDateFromDate, plainDateToday, getDaysInMonth, plainDateDayOfWeek, plainDateAddMonths, plainDateAddDays, plainDateToInstant, plainDateFromInstant, plainDateIsBefore, plainDateIsAfter, plainDateIsEqual, plainDateMax, plainDateMin, plainDateIsInRange, plainDateSetFirstOfMonth, plainDateSetStartOfWeek, plainDateSetEndOfWeekExclusive, plainDateGetWeekNumber, plainDateFormat, formatSharedDate, DATE_FORMAT_WITH_WEEKDAY, DATE_FORMAT_SHORT_WITH_WEEKDAY, DATE_FORMAT_LONG, DATE_FORMAT_MONTH_YEAR, DATE_FORMAT_MONTH_ONLY, DATE_FORMAT_WEEKDAY_ONLY, DATE_FORMAT_SHORT, DATE_FORMAT_SHORT_WITH_YEAR, SHARED_DATE_FORMAT_OPTIONS, } from './plainDate';
|
|
11
|
-
export type { SharedDateFormat } from './plainDate';
|
|
12
|
-
export { parseISOTime, formatISOTime, formatDisplayTime12h, formatDisplayTime24h, parseTimeInput, compareTime, isTimeInRange, clampTime, adjustTime, createISOTimeString, } from './timeParser';
|
|
13
|
-
export type { ISOTimeString, ParsedTime } from './timeParser';
|
|
14
|
-
export { parseStyleKey } from './parseStyleKey';
|
|
15
|
-
export { getKey, type Key, type KeyFallback } from './getKey';
|
|
16
|
-
export { characterCount, firstCharacter, truncateCharacters } from './characters';
|
|
17
|
-
export { mergeProps } from './mergeProps';
|
|
18
|
-
export { mergeRefs } from './mergeRefs';
|
|
19
|
-
export { isFocusDetached } from './focusReturn';
|
|
20
|
-
export { composeEventHandlers } from './composeEventHandlers';
|
|
21
|
-
export { themeProps, themeDataAttributes } from './themeProps';
|
|
22
|
-
export type { ClassValue, ClassProps, ThemeDataAttributes, ThemeProps, } from './themeProps';
|
|
23
|
-
export { groupItems, getItemGroup } from './groupItems';
|
|
24
|
-
export type { ItemGroup, GroupItemsOptions } from './groupItems';
|
|
25
|
-
export { observeResize, unobserveResize } from './sharedResizeObserver';
|
|
26
|
-
export { isRenderable } from './isRenderable';
|
|
27
|
-
export { getInputARIA } from './inputAria';
|
|
28
|
-
export type { InputARIA, InputARIAInputGroup } from './inputAria';
|
|
29
|
-
export { parseHex, parseRgb, parseColor, formatHex, formatColor, toGLFloats, } from './color';
|
|
30
|
-
export type { RGBA } from './color';
|
|
31
|
-
export { devWarn, devError, warnOnce, formatDevMessage } from './devWarning';
|
|
32
|
-
export { rtlStyles } from './rtlStyles';
|
|
33
|
-
export { focusOutlineStyles, focusOutlineProps } from './focusOutline.stylex';
|
|
34
|
-
export { isImeKeyEvent } from './ime';
|
|
35
|
-
export { interactionOverlayStyles } from './interactionOverlay.stylex';
|
|
7
|
+
export type { SizeValue } from './types.js';
|
|
8
|
+
export type { ISODateString, DayOfWeek, PlainDate, DateRange } from './dateTypes.js';
|
|
9
|
+
export { parseDateInput, dateToISO, parseISO, isLocaleDayFirst, } from './dateParser.js';
|
|
10
|
+
export { plainDateCreate, plainDateFromISO, plainDateToISO, plainDateToDate, plainDateFromDate, plainDateToday, getDaysInMonth, plainDateDayOfWeek, plainDateAddMonths, plainDateAddDays, plainDateToInstant, plainDateFromInstant, plainDateIsBefore, plainDateIsAfter, plainDateIsEqual, plainDateMax, plainDateMin, plainDateIsInRange, plainDateSetFirstOfMonth, plainDateSetStartOfWeek, plainDateSetEndOfWeekExclusive, plainDateGetWeekNumber, plainDateFormat, formatSharedDate, DATE_FORMAT_WITH_WEEKDAY, DATE_FORMAT_SHORT_WITH_WEEKDAY, DATE_FORMAT_LONG, DATE_FORMAT_MONTH_YEAR, DATE_FORMAT_MONTH_ONLY, DATE_FORMAT_WEEKDAY_ONLY, DATE_FORMAT_SHORT, DATE_FORMAT_SHORT_WITH_YEAR, SHARED_DATE_FORMAT_OPTIONS, } from './plainDate.js';
|
|
11
|
+
export type { SharedDateFormat } from './plainDate.js';
|
|
12
|
+
export { parseISOTime, formatISOTime, formatDisplayTime12h, formatDisplayTime24h, parseTimeInput, compareTime, isTimeInRange, clampTime, adjustTime, createISOTimeString, } from './timeParser.js';
|
|
13
|
+
export type { ISOTimeString, ParsedTime } from './timeParser.js';
|
|
14
|
+
export { parseStyleKey } from './parseStyleKey.js';
|
|
15
|
+
export { getKey, type Key, type KeyFallback } from './getKey.js';
|
|
16
|
+
export { characterCount, firstCharacter, truncateCharacters } from './characters.js';
|
|
17
|
+
export { mergeProps } from './mergeProps.js';
|
|
18
|
+
export { mergeRefs } from './mergeRefs.js';
|
|
19
|
+
export { isFocusDetached } from './focusReturn.js';
|
|
20
|
+
export { composeEventHandlers } from './composeEventHandlers.js';
|
|
21
|
+
export { themeProps, themeDataAttributes } from './themeProps.js';
|
|
22
|
+
export type { ClassValue, ClassProps, ThemeDataAttributes, ThemeProps, } from './themeProps.js';
|
|
23
|
+
export { groupItems, getItemGroup } from './groupItems.js';
|
|
24
|
+
export type { ItemGroup, GroupItemsOptions } from './groupItems.js';
|
|
25
|
+
export { observeResize, unobserveResize } from './sharedResizeObserver.js';
|
|
26
|
+
export { isRenderable } from './isRenderable.js';
|
|
27
|
+
export { getInputARIA } from './inputAria.js';
|
|
28
|
+
export type { InputARIA, InputARIAInputGroup } from './inputAria.js';
|
|
29
|
+
export { parseHex, parseRgb, parseColor, formatHex, formatColor, toGLFloats, } from './color.js';
|
|
30
|
+
export type { RGBA } from './color.js';
|
|
31
|
+
export { devWarn, devError, warnOnce, formatDevMessage } from './devWarning.js';
|
|
32
|
+
export { rtlStyles } from './rtlStyles.js';
|
|
33
|
+
export { focusOutlineStyles, focusOutlineProps } from './focusOutline.stylex.js';
|
|
34
|
+
export { isImeKeyEvent } from './ime.js';
|
|
35
|
+
export { interactionOverlayStyles } from './interactionOverlay.stylex.js';
|
|
36
36
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* @output Immutable PlainDate records and pure date arithmetic
|
|
5
5
|
* @position Shared utility; replaces scattered Date usage across Calendar hooks
|
|
6
6
|
*/
|
|
7
|
-
import type { ISODateString, PlainDate } from './dateTypes';
|
|
8
|
-
import type { Locale } from '../i18n/types';
|
|
9
|
-
export type { PlainDate } from './dateTypes';
|
|
7
|
+
import type { ISODateString, PlainDate } from './dateTypes.js';
|
|
8
|
+
import type { Locale } from '../i18n/types.js';
|
|
9
|
+
export type { PlainDate } from './dateTypes.js';
|
|
10
10
|
export declare function plainDateCreate(year: number, month: number, day: number): PlainDate;
|
|
11
11
|
export declare function plainDateFromISO(str: ISODateString): PlainDate;
|
|
12
12
|
export declare function plainDateToISO(pd: PlainDate): ISODateString;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@astryxdesign/core",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.5-canary.0026f37",
|
|
4
4
|
"displayName": "Astryx Core",
|
|
5
5
|
"description": "The component library. Accessible, themeable React components with built-in spacing, dark mode, and StyleX styling.",
|
|
6
6
|
"author": "Meta Open Source",
|
|
@@ -792,6 +792,8 @@
|
|
|
792
792
|
"react-dom": ">=19.0.0"
|
|
793
793
|
},
|
|
794
794
|
"devDependencies": {
|
|
795
|
+
"@astryxdesign/a11y-spec": "0.7.5-canary.0026f37",
|
|
796
|
+
"@astryxdesign/cli": "0.7.5-canary.0026f37",
|
|
795
797
|
"@babel/cli": "^7.29.7",
|
|
796
798
|
"@babel/core": "^7.29.7",
|
|
797
799
|
"@babel/preset-react": "^7.29.7",
|
|
@@ -802,16 +804,14 @@
|
|
|
802
804
|
"@testing-library/jest-dom": "^6.6.0",
|
|
803
805
|
"@testing-library/react": "^16.3.2",
|
|
804
806
|
"@types/babel__core": "^7.20.5",
|
|
805
|
-
"tailwindcss": "^4.3.2"
|
|
806
|
-
"@astryxdesign/a11y-spec": "0.0.0",
|
|
807
|
-
"@astryxdesign/cli": "0.7.4"
|
|
807
|
+
"tailwindcss": "^4.3.2"
|
|
808
808
|
},
|
|
809
809
|
"dependencies": {
|
|
810
810
|
"intl-messageformat": "^11.2.9"
|
|
811
811
|
},
|
|
812
812
|
"scripts": {
|
|
813
813
|
"postinstall": "node scripts/postinstall.mjs",
|
|
814
|
-
"build": "node ../../scripts/clean-dist.mjs && pnpm build:i18n && pnpm build:esm && tsc --project tsconfig.build.json && pnpm build:css && node ../../scripts/check-no-dev-jsx.mjs && node ../../scripts/check-fully-specified.mjs",
|
|
814
|
+
"build": "node ../../scripts/clean-dist.mjs && pnpm build:i18n && pnpm build:esm && tsc --project tsconfig.build.json && node ../../scripts/add-declaration-extensions.mjs && pnpm build:css && node ../../scripts/check-no-dev-jsx.mjs && node ../../scripts/check-fully-specified.mjs",
|
|
815
815
|
"build:i18n": "node ../../scripts/generate-i18n-runtime.mjs && node scripts/build-pseudo-locale.mjs",
|
|
816
816
|
"build:esm": "babel src --out-dir dist --extensions .ts,.tsx --out-file-extension .js --ignore \"**/*.test.ts,**/*.test.tsx,**/__tests__/**,**/*.perf.test.*,**/*.doc.mjs,**/*.d.ts,**/*.css,**/*.css.d.ts\" --config-file ./babel.config.json",
|
|
817
817
|
"build:css": "node ../../scripts/build-css.mjs",
|
package/src/Badge/Badge.doc.mjs
CHANGED
|
@@ -18,6 +18,7 @@ export const docs = {
|
|
|
18
18
|
{
|
|
19
19
|
name: 'label',
|
|
20
20
|
type: 'ReactNode',
|
|
21
|
+
required: true,
|
|
21
22
|
description:
|
|
22
23
|
'Badge text content. A badge is one line, so a label wider than the space available is cut with an ellipsis rather than escaping its container; a string or number label is also set as the badge\'s title so the full text stays reachable on hover.',
|
|
23
24
|
},
|
|
@@ -93,7 +94,7 @@ export const docsZh = {
|
|
|
93
94
|
description: '视觉样式变体。语义变体使用实色背景,非语义颜色变体使用浅色背景配彩色文字。',
|
|
94
95
|
default: "'neutral'",
|
|
95
96
|
},
|
|
96
|
-
{name: 'label', type: 'ReactNode', description: '徽章文本内容。'},
|
|
97
|
+
{name: 'label', type: 'ReactNode', required: true, description: '徽章文本内容。'},
|
|
97
98
|
{name: 'icon', type: 'ReactNode', description: '可选的前置图标。'},
|
|
98
99
|
],
|
|
99
100
|
theming: {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file BottomSheet.tsx
|
|
7
|
-
* @input Uses React, StyleX, core hooks, shared layer dismissal, the shared interaction modality, named BottomSheetPanel, BottomSheetSwitcherContext
|
|
7
|
+
* @input Uses React, StyleX, core hooks, shared layer dismissal, the modal outlet registry, the shared interaction modality, named BottomSheetPanel, BottomSheetSwitcherContext
|
|
8
8
|
* @output Exports BottomSheet component and BottomSheetProps
|
|
9
9
|
* @position Public BottomSheet router plus private standalone/switcher hosts
|
|
10
10
|
*
|
|
@@ -27,6 +27,9 @@
|
|
|
27
27
|
* in a switcher, handing one scrim between two dialogs and keeping focus in
|
|
28
28
|
* the active sheet when a retained dialog closes.
|
|
29
29
|
*
|
|
30
|
+
* While a standalone modal sheet is open, its dialog is the outlet that
|
|
31
|
+
* app-global surfaces (toasts) render into (Layer/modalOutlet.ts).
|
|
32
|
+
*
|
|
30
33
|
* SYNC: When modified, update these files to stay in sync:
|
|
31
34
|
* - /packages/core/src/BottomSheet/BottomSheetPanel.tsx
|
|
32
35
|
* - /packages/core/src/BottomSheet/BottomSheetEdgeTint.tsx
|
|
@@ -36,6 +39,7 @@
|
|
|
36
39
|
* - /packages/core/src/BottomSheet/BottomSheetSwitcher.test.tsx
|
|
37
40
|
* - /packages/core/src/Layer/layerDismissalFamilies.test.tsx
|
|
38
41
|
* - /packages/core/src/Layer/layerDismissalInvariants.test.tsx
|
|
42
|
+
* - /packages/core/src/Toast/ToastViewport.modalHost.test.tsx
|
|
39
43
|
* - /apps/storybook/stories/BottomSheet.stories.tsx
|
|
40
44
|
* - /packages/cli/assets/templates/blocks/components/BottomSheet/BottomSheetShowcase.tsx
|
|
41
45
|
*/
|
|
@@ -58,6 +62,7 @@ import {colorVars, durationVars, easeVars} from '../theme/tokens.stylex';
|
|
|
58
62
|
import {useDevWarning, useScrollLock} from '../hooks';
|
|
59
63
|
import {mergeProps} from '../utils';
|
|
60
64
|
import {LayerDepthProvider} from '../Layer/LayerDepthContext';
|
|
65
|
+
import {useModalOutlet} from '../Layer/modalOutlet';
|
|
61
66
|
import {useLayerDismissal} from '../Layer/useLayerDismissal';
|
|
62
67
|
import {focusForLastInput} from '../utils/focusReturn';
|
|
63
68
|
import {useInteractionModalityTracking} from '../utils/interactionModality';
|
|
@@ -373,6 +378,12 @@ function StandaloneBottomSheet({
|
|
|
373
378
|
}
|
|
374
379
|
}, [hasScrim, isOpen]);
|
|
375
380
|
|
|
381
|
+
// Host app-global surfaces (toasts) inside this sheet while it is an open
|
|
382
|
+
// modal, so they stay visible and operable above it. A closing sheet stays
|
|
383
|
+
// modal through its exit animation, but inert and hidden, so it hands them
|
|
384
|
+
// back as soon as it starts closing.
|
|
385
|
+
useModalOutlet(dialogRef, isOpen && hasScrim);
|
|
386
|
+
|
|
376
387
|
useEffect(() => {
|
|
377
388
|
if (!isOpen && isPresented && hasScrim) {
|
|
378
389
|
handleScrimOpacity(0);
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file BottomSheetToastOutlet.a11y.chromium.spec.ts
|
|
5
|
+
* @input The built Core/Toast AppToastOverBottomSheet story; real Chromium hit
|
|
6
|
+
* testing and mouse input
|
|
7
|
+
* @output Browser evidence that a toast fired from an open BottomSheet, on its
|
|
8
|
+
* own or over a Dialog, is hit-testable above the sheet and takes a click
|
|
9
|
+
* @position Chromium proof for BottomSheet's modal outlet
|
|
10
|
+
* (Layer/modalOutlet.ts). jsdom has no top layer and no modal inertness, so
|
|
11
|
+
* Toast/ToastViewport.modalHost.test.tsx can only check where the viewport
|
|
12
|
+
* lives.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import {expect, test} from '@playwright/test';
|
|
16
|
+
import {holdMotionStill} from '@astryxdesign/a11y-spec/chromium';
|
|
17
|
+
import {
|
|
18
|
+
DEFAULT_STORYBOOK_DIR,
|
|
19
|
+
serveStorybook,
|
|
20
|
+
type StaticServer,
|
|
21
|
+
} from '@astryxdesign/a11y-spec/storybook';
|
|
22
|
+
|
|
23
|
+
let storybook: StaticServer;
|
|
24
|
+
test.beforeAll(async () => {
|
|
25
|
+
storybook = await serveStorybook(
|
|
26
|
+
process.env.ASTRYX_STORYBOOK_DIR ?? DEFAULT_STORYBOOK_DIR,
|
|
27
|
+
);
|
|
28
|
+
});
|
|
29
|
+
test.afterAll(async () => {
|
|
30
|
+
await storybook?.close();
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
// Phone width: where an app presents its dialogs as bottom sheets.
|
|
34
|
+
test.use({viewport: {width: 390, height: 844}});
|
|
35
|
+
|
|
36
|
+
const SCENARIOS = [
|
|
37
|
+
{name: 'on its own', opens: ['Open sheet']},
|
|
38
|
+
{name: 'over a Dialog', opens: ['Open dialog', 'Open sheet from the dialog']},
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
for (const {name, opens} of SCENARIOS) {
|
|
42
|
+
test(`a toast action above a sheet opened ${name} takes the click`, async ({
|
|
43
|
+
page,
|
|
44
|
+
}) => {
|
|
45
|
+
await page.goto(
|
|
46
|
+
`${storybook.origin}/iframe.html?id=core-toast--app-toast-over-bottom-sheet&viewMode=story`,
|
|
47
|
+
);
|
|
48
|
+
await holdMotionStill(page);
|
|
49
|
+
for (const label of opens) {
|
|
50
|
+
await page.getByRole('button', {name: label, exact: true}).click();
|
|
51
|
+
}
|
|
52
|
+
const sheet = page.getByRole('dialog', {name: 'Item actions'});
|
|
53
|
+
await expect(sheet).toBeVisible();
|
|
54
|
+
await sheet.getByRole('button', {name: 'Archive'}).click();
|
|
55
|
+
await expect(sheet.getByText('The item is archived.')).toBeVisible();
|
|
56
|
+
|
|
57
|
+
const undo = page.locator('[popover] button', {hasText: 'Undo'});
|
|
58
|
+
await expect(undo).toBeVisible();
|
|
59
|
+
const box = await undo.boundingBox();
|
|
60
|
+
if (box == null) {
|
|
61
|
+
throw new Error('the Undo button has no box');
|
|
62
|
+
}
|
|
63
|
+
const x = box.x + box.width / 2;
|
|
64
|
+
const y = box.y + box.height / 2;
|
|
65
|
+
|
|
66
|
+
// Hit testing skips inert content and follows top-layer order: a toast
|
|
67
|
+
// left outside the sheet's modal, or under it, loses this point to the
|
|
68
|
+
// sheet.
|
|
69
|
+
const hit = await page.evaluate(
|
|
70
|
+
([px, py]) =>
|
|
71
|
+
document.elementFromPoint(px, py)?.closest('button')?.textContent ??
|
|
72
|
+
null,
|
|
73
|
+
[x, y],
|
|
74
|
+
);
|
|
75
|
+
expect(hit).toBe('Undo');
|
|
76
|
+
|
|
77
|
+
await page.mouse.click(x, y);
|
|
78
|
+
await expect(
|
|
79
|
+
sheet.getByText('The item is back in your inbox.'),
|
|
80
|
+
).toBeVisible();
|
|
81
|
+
});
|
|
82
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file inputDisabledFocus.ts
|
|
5
|
+
* @input Uses StyleX and theme tokens
|
|
6
|
+
* @output inputDisabledFocusStyles (internal; not re-exported from Field/index.ts)
|
|
7
|
+
* @position Field wrapper style shared by TextInput and TextArea
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import * as stylex from '@stylexjs/stylex';
|
|
11
|
+
import {colorVars} from '../theme/tokens.stylex';
|
|
12
|
+
|
|
13
|
+
export const inputDisabledFocusStyles = stylex.create({
|
|
14
|
+
// The shared disabled style drops the focus ring; restore it while the field's
|
|
15
|
+
// own control, a direct child, has keyboard focus (`spec:AST-085` FR6), so a
|
|
16
|
+
// focused status button keeps only its own outline.
|
|
17
|
+
ring: {
|
|
18
|
+
borderColor: {
|
|
19
|
+
default: colorVars['--color-border-emphasized'],
|
|
20
|
+
':has(> [aria-disabled="true"]:focus-visible)':
|
|
21
|
+
colorVars['--color-accent'],
|
|
22
|
+
},
|
|
23
|
+
boxShadow: {
|
|
24
|
+
default: 'none',
|
|
25
|
+
':has(> [aria-disabled="true"]:focus-visible)': `inset 0px 0px 0px 2px ${colorVars['--color-accent-muted']}`,
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
});
|
package/src/Icon/Icon.spec.md
CHANGED
|
@@ -27,7 +27,7 @@ architecture:
|
|
|
27
27
|
architecture:public-component-api,
|
|
28
28
|
]
|
|
29
29
|
contributing: []
|
|
30
|
-
system_specs: []
|
|
30
|
+
system_specs: [spec:AST-087]
|
|
31
31
|
---
|
|
32
32
|
|
|
33
33
|
# Icon component contract
|
|
@@ -53,6 +53,7 @@ Consumer migration instructions belong in consumer docs and release notes.
|
|
|
53
53
|
**Owns**
|
|
54
54
|
|
|
55
55
|
- Accepting a semantic icon key or a supplied icon component as the glyph source.
|
|
56
|
+
- Passing the resolved size and a variant the entry can receive to a registry entry.
|
|
56
57
|
- Resolving explicit, component-owned contextual, and standalone size defaults.
|
|
57
58
|
- Applying Icon's size, color, theming target, and accessibility semantics to
|
|
58
59
|
the rendered glyph.
|
|
@@ -71,12 +72,13 @@ Consumer migration instructions belong in consumer docs and release notes.
|
|
|
71
72
|
|
|
72
73
|
## Public concepts
|
|
73
74
|
|
|
74
|
-
| Concept | Closed values or states | Meaning
|
|
75
|
-
| ------------- | --------------------------------------------------------- |
|
|
76
|
-
| Glyph source | semantic key, namespaced extension key, or icon component | Selects the visual symbol.
|
|
77
|
-
| Size | `xsm`, `sm`, `md`, `lg` | Selects the icon box size.
|
|
78
|
-
| Color | documented semantic and palette values | Selects the glyph color or inherits it from context.
|
|
79
|
-
| Accessibility | decorative or meaningfully labelled | Controls whether assistive technology receives the glyph.
|
|
75
|
+
| Concept | Closed values or states | Meaning | Availability by variant/orientation/state | Default | Owner | Stability | Invalid-value behavior |
|
|
76
|
+
| ------------- | --------------------------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------ | ----------------------------------------------- | ---------------- | --------- | --------------------------------------------------------------------------------- |
|
|
77
|
+
| Glyph source | semantic key, namespaced extension key, or icon component | Selects the visual symbol. | Every render | Required | `component:Icon` | Stable | TypeScript rejects unsupported built-in string values. |
|
|
78
|
+
| Size | `xsm`, `sm`, `md`, `lg` | Selects the icon box size. | Every rendered glyph | nearest component-owned default; otherwise `md` | `component:Icon` | Stable | TypeScript rejects unsupported values. |
|
|
79
|
+
| Color | documented semantic and palette values | Selects the glyph color or inherits it from context. | Every rendered glyph | `inherit` | `component:Icon` | Stable | TypeScript rejects unsupported values. |
|
|
80
|
+
| Accessibility | decorative or meaningfully labelled | Controls whether assistive technology receives the glyph. | Every rendered glyph | Decorative | `component:Icon` | Stable | Empty labels use the decorative behavior. |
|
|
81
|
+
| Variant | names in `IconVariantMap`; the active theme lists its own | Requests a theme's alternate artwork for a registry glyph. | Registry glyphs only; never a supplied component | None | `component:Icon` | Stable | TypeScript rejects unknown names; an unlisted variant renders the normal artwork. |
|
|
80
82
|
|
|
81
83
|
A namespaced key that does not resolve currently renders nothing. This is
|
|
82
84
|
existing behavior, not an intentional fallback promise.
|
|
@@ -86,13 +88,15 @@ existing behavior, not an intentional fallback promise.
|
|
|
86
88
|
Requirements identify their basis so observed code is not mistaken for an
|
|
87
89
|
intentional decision.
|
|
88
90
|
|
|
89
|
-
| ID | Candidate invariant
|
|
90
|
-
| --- |
|
|
91
|
-
| FR1 | Icon MUST present at most one glyph from the supplied semantic key, namespaced key, or icon component.
|
|
92
|
-
| FR2 | Every rendered glyph MUST carry the `icon` theming target with its resolved size and selected color reflected as target data.
|
|
93
|
-
| FR3 | Icon MUST apply the resolved size as width and height for every glyph, plus font size where needed for 1em-based icon sources. This sizing contract MUST NOT promise an HTML or SVG element type.
|
|
94
|
-
| FR4 | Supported SVG and styling escape hatches MUST retain their established merge and override behavior.
|
|
95
|
-
| FR5 | An explicit Icon `size` MUST win. Without one, Icon MUST use the nearest default supplied by an owning Astryx component for its documented icon slot; without such a default, Icon MUST use `md`.
|
|
91
|
+
| ID | Candidate invariant | Basis | Draft review state |
|
|
92
|
+
| --- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | ------------------------------------------------------- |
|
|
93
|
+
| FR1 | Icon MUST present at most one glyph from the supplied semantic key, namespaced key, or icon component. | Documented promise and current tests. | Settled intent. |
|
|
94
|
+
| FR2 | Every rendered glyph MUST carry the `icon` theming target with its resolved size and selected color reflected as target data. | Current source, docs, and theming tests. | Settled intent. |
|
|
95
|
+
| FR3 | Icon MUST apply the resolved size as width and height for every glyph, plus font size where needed for 1em-based icon sources. This sizing contract MUST NOT promise an HTML or SVG element type. | Human decision, current source, and tests. | Settled intent. |
|
|
96
|
+
| FR4 | Supported SVG and styling escape hatches MUST retain their established merge and override behavior. | Current source and regression tests. | Current compatibility behavior; verify before changing. |
|
|
97
|
+
| FR5 | An explicit Icon `size` MUST win. Without one, Icon MUST use the nearest default supplied by an owning Astryx component for its documented icon slot; without such a default, Icon MUST use `md`. | Component-size precedence and Button sizing decision. | Settled intent. |
|
|
98
|
+
| FR6 | In registry mode, Icon MUST pass `{size, variant}` to the selected entry, where `size` is the size resolved by ORD1 and `variant` is the requested variant when the active theme lists it and, for a theme-supplied entry, the theme that defined the entry lists it too, otherwise `undefined`. A supplied icon component MUST NOT receive `variant`, Icon MUST NOT forward `variant` to the DOM, and the `icon` target MUST NOT reflect it. | `spec:AST-087` FR1–FR5 and FR9. | Settled intent. |
|
|
99
|
+
| FR7 | The `icon` target MUST guarantee `width` and `height` on its `size:*` selectors as reviewed target-specific additions, so a theme sets each size's dimension. Without theme styles, sizes are 12, 16, 20, and 24px at a 16px root and scale with the root font size. | `spec:AST-087` FR10. | Settled intent. |
|
|
96
100
|
|
|
97
101
|
### Allowed variation
|
|
98
102
|
|
|
@@ -109,15 +113,18 @@ intentional decision.
|
|
|
109
113
|
|
|
110
114
|
### Representative states
|
|
111
115
|
|
|
112
|
-
| State | Required invariant
|
|
113
|
-
| -------------------------------- |
|
|
114
|
-
| Semantic key | One resolved glyph carries the `icon` target.
|
|
115
|
-
| Namespaced extension key | A resolved extension glyph carries the `icon` target.
|
|
116
|
-
| Supplied icon component | The supplied glyph carries the `icon` target.
|
|
117
|
-
| Standalone Icon without `size` | The resolved size is `md`.
|
|
118
|
-
| Owned icon slot without `size` | The nearest documented component default is used.
|
|
119
|
-
| Explicit Icon size in owned slot | The explicit Icon size wins over the contextual default.
|
|
120
|
-
| Unresolved namespaced key | No glyph is currently rendered.
|
|
116
|
+
| State | Required invariant | Allowed variation |
|
|
117
|
+
| -------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------- |
|
|
118
|
+
| Semantic key | One resolved glyph carries the `icon` target. | Theme, registry, or built-in artwork. |
|
|
119
|
+
| Namespaced extension key | A resolved extension glyph carries the `icon` target. | Consumer- or library-owned artwork. |
|
|
120
|
+
| Supplied icon component | The supplied glyph carries the `icon` target. | Component implementation and SVG internals. |
|
|
121
|
+
| Standalone Icon without `size` | The resolved size is `md`. | Glyph source and color. |
|
|
122
|
+
| Owned icon slot without `size` | The nearest documented component default is used. | The owning component's declared size mapping. |
|
|
123
|
+
| Explicit Icon size in owned slot | The explicit Icon size wins over the contextual default. | Any supported Icon size. |
|
|
124
|
+
| Unresolved namespaced key | No glyph is currently rendered. | No fallback behavior is established by intent. |
|
|
125
|
+
| Listed variant | The entry receives the size and the variant when its defining theme also lists it. | The theme's artwork for that request. |
|
|
126
|
+
| Unlisted or omitted variant | The entry receives `variant: undefined`. | The theme's normal artwork. |
|
|
127
|
+
| Variant on a supplied component | The component renders as given without `variant`. | Component implementation. |
|
|
121
128
|
|
|
122
129
|
### Transformation and precedence order
|
|
123
130
|
|
|
@@ -172,6 +179,8 @@ not promise a `span`, `svg`, or other element type.
|
|
|
172
179
|
rules for the `icon` target.
|
|
173
180
|
- `architecture:icon-resolution-and-component-slots` owns semantic-key and
|
|
174
181
|
component-slot resolution before Icon renders the selected source.
|
|
182
|
+
- `spec:AST-087` decides the `variant` request, theme-listed variant names, and
|
|
183
|
+
theme-set size dimensions.
|
|
175
184
|
- `architecture:public-component-api` owns admission and compatibility rules for
|
|
176
185
|
Icon's public props and observable defaults.
|
|
177
186
|
- The owning component or family specifies each contextual Icon-size mapping.
|
|
@@ -181,12 +190,14 @@ not promise a `span`, `svg`, or other element type.
|
|
|
181
190
|
|
|
182
191
|
## Verification map
|
|
183
192
|
|
|
184
|
-
| Contract | Verification | Representative states
|
|
185
|
-
| ------------------- | ------------------------------------------------------------------------------ |
|
|
186
|
-
| FR1, FR3, FR5 | `Icon.test.tsx` sizing suites and `IconButton.test.tsx` contextual-size suites | standalone default; Button sizes; explicit override; both modes
|
|
187
|
-
| FR2, FR4 | `Icon.test.tsx` target/styling suites plus source inspection | Both source modes; size and color variants
|
|
188
|
-
| AR1, AR2, AR3 | `Icon.test.tsx` accessible-name suites | Decorative, labelled, explicit ARIA override
|
|
189
|
-
|
|
|
193
|
+
| Contract | Verification | Representative states | Mutation or failure expectation | Audit section |
|
|
194
|
+
| ------------------- | ------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- |
|
|
195
|
+
| FR1, FR3, FR5 | `Icon.test.tsx` sizing suites and `IconButton.test.tsx` contextual-size suites | standalone default; Button sizes; explicit override; both modes | Breaking source rendering, standalone fallback, contextual mapping, explicit precedence, or cross-mode sizing fails assertions. | `audit:Icon/behavior` |
|
|
196
|
+
| FR2, FR4 | `Icon.test.tsx` target/styling suites plus source inspection | Both source modes; size and color variants | Removing the target or breaking override composition fails existing assertions; `data-color` reflection currently lacks focused assertions. | `audit:Icon/theming` |
|
|
197
|
+
| AR1, AR2, AR3 | `Icon.test.tsx` accessible-name suites | Decorative, labelled, explicit ARIA override | Changing default or labelled semantics fails accessibility assertions. | `audit:Icon/accessibility` |
|
|
198
|
+
| FR6 | `Icon.test.tsx` variant suites (pending) | listed, unlisted, and omitted variant; no active list; inherited entry under a replaced list; supplied component | An unlisted variant, or one the entry's defining theme does not list, reaches an entry, or `variant` reaches a supplied component or the DOM. | `audit:Icon/behavior` |
|
|
199
|
+
| FR7 | Theme styling tests for each size (pending) | each size with and without theme styles | A themed size does not change the glyph dimension, or an unstyled size changes. | `audit:Icon/theming` |
|
|
200
|
+
| Theming anatomy map | `scripts/check-knowledge.mjs` | Canonical consumer anatomy and current target | Missing, extra, prefixed, or stale mappings fail repository validation. | `audit:Icon/theming` |
|
|
190
201
|
|
|
191
202
|
Focused coverage for `data-color` on both glyph source modes is a checkable test
|
|
192
203
|
gap; source inspection is the current evidence for that part of FR2.
|
package/src/Layer/modalOutlet.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file modalOutlet.ts
|
|
7
|
-
* @input The open Dialog `<dialog>` elements
|
|
7
|
+
* @input The open Dialog and scrim BottomSheet `<dialog>` elements
|
|
8
8
|
* @output Exports useModalOutlet (a modal supplies its outlet),
|
|
9
9
|
* getActiveModalOutlet, and subscribeModalOutlets (a global host follows
|
|
10
10
|
* the latest one)
|
|
@@ -668,18 +668,27 @@ describe('SideNavHeading headerEndContent', () => {
|
|
|
668
668
|
expect(screen.getByTestId('end-badge')).toBeInTheDocument();
|
|
669
669
|
});
|
|
670
670
|
|
|
671
|
-
it('renders headerEndContent
|
|
671
|
+
it('renders headerEndContent beside the link, not inside it, in isWholeHeadingLink path', () => {
|
|
672
|
+
const onPress = vi.fn();
|
|
672
673
|
render(
|
|
673
674
|
<SideNavHeading
|
|
674
675
|
heading="My App"
|
|
675
676
|
headingHref="/home"
|
|
676
|
-
headerEndContent={
|
|
677
|
+
headerEndContent={
|
|
678
|
+
<button type="button" onClick={onPress}>
|
|
679
|
+
Create
|
|
680
|
+
</button>
|
|
681
|
+
}
|
|
677
682
|
/>,
|
|
678
683
|
);
|
|
679
|
-
const
|
|
680
|
-
expect(
|
|
681
|
-
//
|
|
682
|
-
|
|
684
|
+
const link = screen.getByRole('link', {name: 'My App'});
|
|
685
|
+
expect(link).toHaveAttribute('href', '/home');
|
|
686
|
+
// A control inside a link is invalid and its press would follow the link.
|
|
687
|
+
const button = screen.getByRole('button', {name: 'Create'});
|
|
688
|
+
expect(button.closest('a')).toBeNull();
|
|
689
|
+
expect(link.parentElement).toBe(button.parentElement?.parentElement);
|
|
690
|
+
fireEvent.click(button);
|
|
691
|
+
expect(onPress).toHaveBeenCalledTimes(1);
|
|
683
692
|
});
|
|
684
693
|
|
|
685
694
|
it('renders headerEndContent in isWholeHeadingTrigger path', () => {
|
|
@@ -189,6 +189,17 @@ const styles = stylex.create({
|
|
|
189
189
|
// today. The 28px min box still wins over Icon's width/height.
|
|
190
190
|
fontSize: 'inherit',
|
|
191
191
|
},
|
|
192
|
+
// The link part of a whole-heading link row that also has end content.
|
|
193
|
+
linkBesideEndContent: {
|
|
194
|
+
display: 'flex',
|
|
195
|
+
alignItems: 'center',
|
|
196
|
+
alignSelf: 'stretch',
|
|
197
|
+
gap: spacingVars['--spacing-2'],
|
|
198
|
+
flexGrow: 1,
|
|
199
|
+
minWidth: 0,
|
|
200
|
+
textDecoration: 'none',
|
|
201
|
+
color: 'inherit',
|
|
202
|
+
},
|
|
192
203
|
headerEndContent: {
|
|
193
204
|
flexShrink: 0,
|
|
194
205
|
display: 'flex',
|
|
@@ -640,6 +651,36 @@ export function SideNavHeading({
|
|
|
640
651
|
</button>
|
|
641
652
|
);
|
|
642
653
|
|
|
654
|
+
// Whole heading is a link (no menu, single headingHref). End content may
|
|
655
|
+
// be a control, which must not sit inside the link (no interactive content
|
|
656
|
+
// in an <a>), so with end content the row is a div holding the link and the
|
|
657
|
+
// end content side by side, as the mixed mode does.
|
|
658
|
+
if (isWholeHeadingLink && headingHref && headerEndContentElement) {
|
|
659
|
+
return (
|
|
660
|
+
<div
|
|
661
|
+
ref={ref}
|
|
662
|
+
data-testid={testId}
|
|
663
|
+
{...mergeProps(
|
|
664
|
+
themeProps('side-nav-heading'),
|
|
665
|
+
stylex.props(styles.root, xstyle),
|
|
666
|
+
className,
|
|
667
|
+
style,
|
|
668
|
+
)}>
|
|
669
|
+
<LinkComponent
|
|
670
|
+
href={headingHref}
|
|
671
|
+
{...focusOutlineProps.focusVisible(
|
|
672
|
+
styles.linkBesideEndContent,
|
|
673
|
+
styles.menuTrigger,
|
|
674
|
+
)}
|
|
675
|
+
{...(props as React.AnchorHTMLAttributes<HTMLAnchorElement>)}>
|
|
676
|
+
{icon && <span {...stylex.props(styles.icon)}>{icon}</span>}
|
|
677
|
+
{renderTextContent()}
|
|
678
|
+
</LinkComponent>
|
|
679
|
+
{headerEndContentElement}
|
|
680
|
+
</div>
|
|
681
|
+
);
|
|
682
|
+
}
|
|
683
|
+
|
|
643
684
|
// Whole heading is a link (no menu, single headingHref)
|
|
644
685
|
if (isWholeHeadingLink && headingHref) {
|
|
645
686
|
return (
|
package/src/Stepper/Step.tsx
CHANGED
|
@@ -1316,6 +1316,10 @@ export function Step({
|
|
|
1316
1316
|
const iconLabelNode = (
|
|
1317
1317
|
<div {...stylex.props(styles.iconLabelRow)}>
|
|
1318
1318
|
{(!isCompact || indicatorPosition !== 'on-track') && indicatorNode}
|
|
1319
|
+
{/* A space between the indicator and the label: the row is a flex
|
|
1320
|
+
container, which drops whitespace-only text, so nothing changes on
|
|
1321
|
+
screen, but a text reading of the button then keeps "1 Account" as two
|
|
1322
|
+
words instead of "1Account". */}{' '}
|
|
1319
1323
|
<span
|
|
1320
1324
|
{...mergeProps(
|
|
1321
1325
|
labelThemeProps,
|
|
@@ -1576,6 +1580,8 @@ export function Step({
|
|
|
1576
1580
|
)}
|
|
1577
1581
|
/>
|
|
1578
1582
|
</div>
|
|
1583
|
+
{/* Whitespace between the indicator column and the label, as in
|
|
1584
|
+
iconLabelNode. */}{' '}
|
|
1579
1585
|
<div {...stylex.props(styles.otBodyV)}>
|
|
1580
1586
|
{labelLineNode}
|
|
1581
1587
|
{otDescriptionNode}
|
|
@@ -1658,6 +1664,7 @@ export function Step({
|
|
|
1658
1664
|
)}
|
|
1659
1665
|
/>
|
|
1660
1666
|
</div>
|
|
1667
|
+
{/* Whitespace between the rail and the label, as in iconLabelNode. */}{' '}
|
|
1661
1668
|
{/* The on-track indicator remains visible as a node on the rail at
|
|
1662
1669
|
compact widths, but the wrapper becomes presentational with its
|
|
1663
1670
|
label. Navigation moves to the named controls in the summary row. */}
|
|
@@ -2016,3 +2016,36 @@ describe('step-label and step-description theme targets', () => {
|
|
|
2016
2016
|
);
|
|
2017
2017
|
});
|
|
2018
2018
|
});
|
|
2019
|
+
|
|
2020
|
+
describe('clickable step text reading', () => {
|
|
2021
|
+
// axe-core's Label in Name rule joins a button's text nodes with nothing
|
|
2022
|
+
// between them, aria-hidden ones included, so a number badge next to a label
|
|
2023
|
+
// reads as one word ("1Account") that the step's name does not contain.
|
|
2024
|
+
// Whitespace between them changes nothing on screen (the rows are flex
|
|
2025
|
+
// containers) and keeps the two words apart.
|
|
2026
|
+
it.each([
|
|
2027
|
+
['vertical', 'separated'],
|
|
2028
|
+
['horizontal', 'separated'],
|
|
2029
|
+
['vertical', 'on-track'],
|
|
2030
|
+
['horizontal', 'on-track'],
|
|
2031
|
+
] as const)(
|
|
2032
|
+
'keeps the number and label apart in a %s %s step',
|
|
2033
|
+
(orientation, indicatorPosition) => {
|
|
2034
|
+
render(
|
|
2035
|
+
<Stepper
|
|
2036
|
+
orientation={orientation}
|
|
2037
|
+
indicatorPosition={indicatorPosition}
|
|
2038
|
+
activeStep={0}
|
|
2039
|
+
label="Steps"
|
|
2040
|
+
onStepClick={() => {}}>
|
|
2041
|
+
<Step step={0} label="Account" indicator="number" />
|
|
2042
|
+
<Step step={1} label="Payment" indicator="number" />
|
|
2043
|
+
</Stepper>,
|
|
2044
|
+
);
|
|
2045
|
+
|
|
2046
|
+
const button = screen.getByRole('button', {name: /Account/});
|
|
2047
|
+
expect(button.textContent).toMatch(/1\s+Account/);
|
|
2048
|
+
expect(button.textContent).not.toMatch(/1Account/);
|
|
2049
|
+
},
|
|
2050
|
+
);
|
|
2051
|
+
});
|