@astryxdesign/core 0.5.0 → 0.5.1-canary.046f6ea
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +222 -0
- package/dist/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +45 -20
- package/dist/AspectRatio/AspectRatio.d.ts +6 -6
- package/dist/Avatar/Avatar.d.ts +25 -1
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +43 -9
- package/dist/Avatar/index.d.ts +2 -2
- package/dist/Avatar/index.d.ts.map +1 -1
- package/dist/Avatar/index.js +1 -1
- package/dist/AvatarGroup/AvatarGroup.d.ts +9 -2
- package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroup.js +5 -2
- package/dist/AvatarGroup/AvatarGroupContext.d.ts +2 -1
- package/dist/AvatarGroup/AvatarGroupContext.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.js +11 -7
- package/dist/Badge/Badge.d.ts.map +1 -1
- package/dist/Badge/Badge.js +26 -2
- package/dist/Banner/Banner.d.ts +10 -1
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +11 -2
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +8 -7
- package/dist/Calendar/Calendar.d.ts +4 -2
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +15 -21
- package/dist/Calendar/hooks/useCalendarDays.js +4 -6
- package/dist/Calendar/hooks/useCalendarNavigation.js +4 -6
- package/dist/Calendar/styles.d.ts +5 -20
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +15 -17
- package/dist/Card/Card.d.ts +12 -12
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +17 -9
- package/dist/Card/index.d.ts +35 -1
- package/dist/Card/index.d.ts.map +1 -1
- package/dist/Card/index.js +21 -1
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +108 -7
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +7 -1
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +15 -4
- package/dist/CodeBlock/highlightRanges.js +1 -1
- package/dist/CodeBlock/highlightStyles.js +13 -13
- package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteItem.js +2 -7
- package/dist/ComplexSelector/ComplexSelector.d.ts +10 -2
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +14 -7
- package/dist/DateInput/DateInput.d.ts +43 -0
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +22 -5
- package/dist/DateInput/MonthScroller.d.ts.map +1 -1
- package/dist/DateInput/MonthScroller.js +5 -3
- package/dist/DateInput/MonthYearWheels.d.ts.map +1 -1
- package/dist/DateInput/MonthYearWheels.js +6 -4
- package/dist/DateInput/NativeDateField.d.ts +10 -0
- package/dist/DateInput/NativeDateField.d.ts.map +1 -0
- package/dist/DateInput/NativeDateField.js +494 -0
- package/dist/DateInput/TouchDateField.d.ts.map +1 -1
- package/dist/DateInput/TouchDateField.js +52 -25
- package/dist/DateInput/Wheel.d.ts.map +1 -1
- package/dist/DateInput/Wheel.js +1 -0
- package/dist/DateInput/index.d.ts +1 -1
- package/dist/DateInput/index.d.ts.map +1 -1
- package/dist/DateInput/nativeDateSegments.d.ts +22 -0
- package/dist/DateInput/nativeDateSegments.d.ts.map +1 -0
- package/dist/DateInput/nativeDateSegments.js +111 -0
- package/dist/DateRangeInput/DateRangeInput.d.ts +4 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +3 -5
- package/dist/DateTimeInput/DateTimeInput.d.ts +23 -24
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +35 -10
- package/dist/DateTimeInput/TouchDateTimeField.d.ts +6 -0
- package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -0
- package/dist/DateTimeInput/TouchDateTimeField.js +1021 -0
- package/dist/Dialog/Dialog.d.ts +16 -2
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +28 -7
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +4 -13
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +9 -1
- package/dist/Field/InputClearButton.d.ts +9 -3
- package/dist/Field/InputClearButton.d.ts.map +1 -1
- package/dist/Field/InputClearButton.js +14 -3
- package/dist/Heading/Heading.d.ts.map +1 -1
- package/dist/Heading/Heading.js +0 -1
- package/dist/HoverCard/HoverCard.d.ts.map +1 -1
- package/dist/HoverCard/HoverCard.js +104 -3
- package/dist/HoverCard/useHoverCard.d.ts +14 -2
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +7 -1
- package/dist/Icon/Icon.d.ts +4 -2
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/defaultIcons.d.ts +3 -2
- package/dist/Icon/defaultIcons.d.ts.map +1 -1
- package/dist/Icon/defaultIcons.js +7 -0
- package/dist/Icon/globalIconRegistry.d.ts +13 -0
- package/dist/Icon/globalIconRegistry.d.ts.map +1 -1
- package/dist/Icon/globalIconRegistry.js +34 -6
- package/dist/Icon/index.d.ts +1 -1
- package/dist/Icon/index.d.ts.map +1 -1
- package/dist/Icon/useIcon.d.ts +5 -2
- package/dist/Icon/useIcon.d.ts.map +1 -1
- package/dist/Icon/useIcon.js +3 -0
- package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -1
- package/dist/Indicator/CheckboxIndicator.js +6 -2
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +2 -2
- package/dist/Kbd/Kbd.d.ts.map +1 -1
- package/dist/Kbd/Kbd.js +2 -26
- package/dist/Layer/gestureCounter.d.ts +8 -0
- package/dist/Layer/gestureCounter.d.ts.map +1 -0
- package/dist/Layer/gestureCounter.js +53 -0
- package/dist/Layer/useLayer.d.ts +23 -13
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +146 -24
- package/dist/List/List.d.ts +1 -1
- package/dist/List/List.d.ts.map +1 -1
- package/dist/List/List.js +15 -4
- package/dist/Markdown/Markdown.d.ts +1 -1
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +20 -7
- package/dist/Markdown/parser.d.ts.map +1 -1
- package/dist/Markdown/parser.js +5 -3
- package/dist/MetadataList/MetadataListItem.d.ts +1 -1
- package/dist/MetadataList/MetadataListItem.d.ts.map +1 -1
- package/dist/MetadataList/MetadataListItem.js +4 -1
- package/dist/MultiSelector/MultiSelector.d.ts +18 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +58 -11
- package/dist/MultiSelector/hooks.d.ts +7 -1
- package/dist/MultiSelector/hooks.d.ts.map +1 -1
- package/dist/MultiSelector/hooks.js +3 -2
- package/dist/NavIcon/NavIcon.d.ts.map +1 -1
- package/dist/NavIcon/NavIcon.js +5 -1
- package/dist/NavItem/navItemStyles.stylex.d.ts +0 -8
- package/dist/NavItem/navItemStyles.stylex.d.ts.map +1 -1
- package/dist/NavItem/navItemStyles.stylex.js +0 -2
- package/dist/NavMenu/NavHeadingMenu.d.ts +1 -1
- package/dist/NavMenu/NavHeadingMenu.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenu.js +7 -4
- package/dist/NumberInput/NumberInput.d.ts +6 -1
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +95 -126
- package/dist/NumberInput/numberInputCommit.d.ts +34 -0
- package/dist/NumberInput/numberInputCommit.d.ts.map +1 -0
- package/dist/NumberInput/numberInputCommit.js +71 -0
- package/dist/NumberInput/numberParser.d.ts +64 -0
- package/dist/NumberInput/numberParser.d.ts.map +1 -0
- package/dist/NumberInput/numberParser.js +350 -0
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +2 -3
- package/dist/OverflowList/OverflowList.d.ts +41 -1
- package/dist/OverflowList/OverflowList.d.ts.map +1 -1
- package/dist/OverflowList/OverflowList.js +43 -2
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +8 -14
- package/dist/Popover/usePopover.d.ts +15 -41
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +26 -7
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchValueEditor.js +91 -18
- package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
- package/dist/PowerSearch/formatFilterValue.js +4 -2
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +18 -5
- package/dist/Resizable/useResizable.d.ts +19 -1
- package/dist/Resizable/useResizable.d.ts.map +1 -1
- package/dist/Resizable/useResizable.js +104 -38
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +9 -0
- package/dist/Selector/Selector.d.ts +18 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +92 -21
- package/dist/Selector/hooks.d.ts +7 -1
- package/dist/Selector/hooks.d.ts.map +1 -1
- package/dist/Selector/hooks.js +3 -2
- package/dist/SideNav/SideNav.d.ts +6 -1
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +57 -27
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +5 -4
- package/dist/SideNav/SideNavItem.d.ts +29 -4
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +75 -20
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +34 -2
- package/dist/Spinner/Spinner.d.ts +3 -1
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +199 -20
- package/dist/StatusDot/StatusDot.d.ts.map +1 -1
- package/dist/StatusDot/StatusDot.js +6 -1
- package/dist/Stepper/Step.d.ts.map +1 -1
- package/dist/Stepper/Step.js +7 -6
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +5 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +6 -1
- package/dist/Table/Table.d.ts.map +1 -1
- package/dist/Table/Table.js +3 -6
- package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
- package/dist/Table/plugins/filtering/useTableFiltering.js +73 -4
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +26 -0
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +34 -3
- package/dist/Table/plugins/selection/useTableSelection.d.ts.map +1 -1
- package/dist/Table/plugins/selection/useTableSelection.js +25 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +3 -4
- package/dist/Text/Text.d.ts.map +1 -1
- package/dist/Text/Text.js +0 -1
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +13 -8
- package/dist/Timestamp/Timestamp.d.ts +1 -1
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +10 -18
- package/dist/Timestamp/formatInstant.d.ts.map +1 -1
- package/dist/Timestamp/formatInstant.js +10 -5
- package/dist/Toast/Toast.d.ts +17 -2
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +77 -11
- package/dist/Toast/ToastViewport.d.ts +1 -0
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +76 -21
- package/dist/Toast/index.d.ts +1 -1
- package/dist/Toast/index.d.ts.map +1 -1
- package/dist/Toast/types.d.ts +38 -0
- package/dist/Toast/types.d.ts.map +1 -1
- package/dist/Toast/useToastGesture.d.ts +26 -0
- package/dist/Toast/useToastGesture.d.ts.map +1 -0
- package/dist/Toast/useToastGesture.js +223 -0
- package/dist/Token/Token.d.ts +1 -1
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +23 -12
- package/dist/Token/TokenLink.d.ts +1 -1
- package/dist/Token/TokenLink.d.ts.map +1 -1
- package/dist/Token/TokenLink.js +5 -2
- package/dist/Tokenizer/Tokenizer.d.ts +12 -1
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +31 -21
- package/dist/TopNav/TopNavHeading.js +2 -2
- package/dist/TopNav/TopNavItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavItem.js +3 -3
- package/dist/TopNav/TopNavMegaMenu.d.ts +1 -1
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +30 -9
- package/dist/TopNav/TopNavMegaMenuItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenuItem.js +3 -3
- package/dist/TopNav/TopNavMenu.d.ts +1 -1
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +21 -6
- package/dist/TreeList/TreeList.d.ts +1 -1
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +7 -2
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +2 -2
- package/dist/Typeahead/BaseTypeahead.d.ts +33 -0
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +51 -8
- package/dist/Typeahead/Typeahead.d.ts +8 -1
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +2 -0
- package/dist/Typeahead/TypeaheadItem.d.ts +1 -1
- package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
- package/dist/Typeahead/TypeaheadItem.js +7 -2
- package/dist/astryx.css +87 -22
- package/dist/hooks/useHotkeys.d.ts.map +1 -1
- package/dist/hooks/useHotkeys.js +3 -25
- package/dist/hooks/useOverflow.d.ts.map +1 -1
- package/dist/hooks/useOverflow.js +14 -4
- package/dist/i18n/InternationalizationContext.d.ts +2 -0
- package/dist/i18n/InternationalizationContext.d.ts.map +1 -1
- package/dist/i18n/InternationalizationContext.js +3 -1
- package/dist/i18n/InternationalizationProvider.d.ts.map +1 -1
- package/dist/i18n/InternationalizationProvider.js +3 -1
- package/dist/i18n/resolve.d.ts +1 -1
- package/dist/i18n/resolve.d.ts.map +1 -1
- package/dist/i18n/resolve.js +37 -38
- package/dist/i18n/useTranslator.d.ts.map +1 -1
- package/dist/i18n/useTranslator.js +2 -3
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/theme/Theme.d.ts.map +1 -1
- package/dist/theme/Theme.js +46 -10
- package/dist/theme/defineTheme.d.ts +9 -3
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/defineTheme.js +5 -0
- package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +24 -4
- package/dist/theme/generateThemeRules.d.ts +21 -0
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +26 -0
- package/dist/theme/syntax/tokens.d.ts +1 -1
- package/dist/theme/syntax/tokens.d.ts.map +1 -1
- package/dist/theme/syntax/tokens.js +5 -2
- package/dist/theme/useTheme.d.ts.map +1 -1
- package/dist/theme/useTheme.js +6 -7
- package/dist/utils/dateParser.d.ts +5 -8
- package/dist/utils/dateParser.d.ts.map +1 -1
- package/dist/utils/dateParser.js +10 -11
- package/dist/utils/focusOutline.stylex.d.ts +25 -0
- package/dist/utils/focusOutline.stylex.d.ts.map +1 -1
- package/dist/utils/focusOutline.stylex.js +15 -0
- package/dist/utils/interactionOverlay.stylex.d.ts +26 -0
- package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -0
- package/dist/utils/interactionOverlay.stylex.js +42 -0
- package/dist/utils/isApplePlatform.d.ts +18 -0
- package/dist/utils/isApplePlatform.d.ts.map +1 -0
- package/dist/utils/isApplePlatform.js +37 -0
- package/dist/utils/plainDate.d.ts +11 -0
- package/dist/utils/plainDate.d.ts.map +1 -1
- package/dist/utils/plainDate.js +20 -4
- package/locales/af-ZA.json +7 -7
- package/locales/ar-SA.json +7 -7
- package/locales/ca-ES.json +6 -6
- package/locales/cs-CZ.json +7 -7
- package/locales/da-DK.json +7 -7
- package/locales/de-DE.json +7 -7
- package/locales/el-GR.json +7 -7
- package/locales/en.json +178 -6
- package/locales/es-ES.json +6 -6
- package/locales/fi-FI.json +7 -7
- package/locales/fr-FR.json +7 -7
- package/locales/he-IL.json +7 -7
- package/locales/hu-HU.json +7 -7
- package/locales/it-IT.json +7 -7
- package/locales/ja-JP.json +7 -7
- package/locales/ko-KR.json +7 -7
- package/locales/nl-NL.json +7 -7
- package/locales/no-NO.json +7 -7
- package/locales/pl-PL.json +7 -7
- package/locales/pseudo.json +130 -1
- package/locales/pt-BR.json +7 -7
- package/locales/pt-PT.json +7 -7
- package/locales/ro-RO.json +7 -7
- package/locales/ru-RU.json +7 -7
- package/locales/sr-SP.json +7 -7
- package/locales/sv-SE.json +7 -7
- package/locales/tr-TR.json +7 -7
- package/locales/uk-UA.json +7 -7
- package/locales/vi-VN.json +7 -7
- package/locales/zh-CN.json +7 -7
- package/locales/zh-TW.json +7 -7
- package/package.json +4 -5
- package/src/AlertDialog/AlertDialog.doc.mjs +114 -30
- package/src/AlertDialog/AlertDialog.test.tsx +211 -2
- package/src/AlertDialog/AlertDialog.tsx +62 -20
- package/src/AspectRatio/AspectRatio.doc.mjs +3 -3
- package/src/AspectRatio/AspectRatio.tsx +6 -6
- package/src/Avatar/Avatar.doc.mjs +12 -2
- package/src/Avatar/Avatar.test.tsx +80 -0
- package/src/Avatar/Avatar.tsx +64 -14
- package/src/Avatar/index.ts +2 -2
- package/src/AvatarGroup/AvatarGroup.doc.mjs +8 -2
- package/src/AvatarGroup/AvatarGroup.test.tsx +24 -0
- package/src/AvatarGroup/AvatarGroup.tsx +12 -4
- package/src/AvatarGroup/AvatarGroupContext.ts +5 -3
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +12 -12
- package/src/Badge/Badge.doc.mjs +3 -2
- package/src/Badge/Badge.test.tsx +32 -3
- package/src/Badge/Badge.tsx +42 -1
- package/src/Banner/Banner.doc.mjs +9 -0
- package/src/Banner/Banner.test.tsx +76 -11
- package/src/Banner/Banner.tsx +21 -2
- package/src/Button/Button.doc.mjs +2 -1
- package/src/Button/Button.test.tsx +19 -4
- package/src/Button/Button.tsx +9 -29
- package/src/ButtonGroup/ButtonGroup.doc.mjs +2 -2
- package/src/ButtonGroup/ButtonGroup.test.tsx +13 -0
- package/src/Calendar/Calendar.doc.mjs +4 -4
- package/src/Calendar/Calendar.test.tsx +112 -0
- package/src/Calendar/Calendar.tsx +18 -16
- package/src/Calendar/hooks/useCalendarDays.ts +4 -4
- package/src/Calendar/hooks/useCalendarNavigation.ts +4 -4
- package/src/Calendar/styles.ts +48 -42
- package/src/Card/Card.doc.mjs +10 -7
- package/src/Card/Card.test.tsx +113 -19
- package/src/Card/Card.tsx +67 -89
- package/src/Card/index.ts +36 -1
- package/src/Carousel/Carousel.doc.mjs +3 -0
- package/src/Carousel/Carousel.test.tsx +360 -0
- package/src/Carousel/Carousel.tsx +116 -15
- package/src/CheckboxInput/CheckboxInput.doc.mjs +3 -1
- package/src/CheckboxInput/CheckboxInput.test.tsx +15 -0
- package/src/CheckboxInput/CheckboxInput.tsx +5 -0
- package/src/CheckboxList/CheckboxList.doc.mjs +1 -1
- package/src/CodeBlock/CodeBlock.doc.mjs +10 -4
- package/src/CodeBlock/CodeBlock.test.tsx +37 -0
- package/src/CodeBlock/CodeBlock.tsx +20 -4
- package/src/CodeBlock/highlightRanges.ts +1 -1
- package/src/CodeBlock/highlightStyles.ts +13 -13
- package/src/CommandPalette/CommandPaletteItem.tsx +2 -12
- package/src/ComplexSelector/ComplexSelector.doc.mjs +9 -2
- package/src/ComplexSelector/ComplexSelector.test.tsx +183 -0
- package/src/ComplexSelector/ComplexSelector.tsx +22 -12
- package/src/DateInput/DateInput.doc.mjs +17 -1
- package/src/DateInput/DateInput.test.tsx +9 -4
- package/src/DateInput/DateInput.tsx +54 -3
- package/src/DateInput/DateInputTouch.test.tsx +146 -32
- package/src/DateInput/MonthScroller.tsx +5 -1
- package/src/DateInput/MonthYearWheels.tsx +7 -4
- package/src/DateInput/NativeDateField.test.tsx +635 -0
- package/src/DateInput/NativeDateField.tsx +641 -0
- package/src/DateInput/TouchDateField.tsx +83 -33
- package/src/DateInput/Wheel.tsx +1 -0
- package/src/DateInput/index.ts +1 -0
- package/src/DateInput/nativeDateSegments.ts +127 -0
- package/src/DateRangeInput/DateRangeInput.doc.mjs +3 -3
- package/src/DateRangeInput/DateRangeInput.test.tsx +46 -0
- package/src/DateRangeInput/DateRangeInput.tsx +8 -13
- package/src/DateTimeInput/DateTimeInput.doc.mjs +39 -22
- package/src/DateTimeInput/DateTimeInput.test.tsx +76 -0
- package/src/DateTimeInput/DateTimeInput.tsx +54 -20
- package/src/DateTimeInput/DateTimeInputTouch.test.tsx +980 -0
- package/src/DateTimeInput/TouchDateTimeField.tsx +1437 -0
- package/src/Dialog/Dialog.test.tsx +185 -18
- package/src/Dialog/Dialog.tsx +35 -11
- package/src/DropdownMenu/DropdownMenu.test.tsx +44 -10
- package/src/DropdownMenu/DropdownMenu.tsx +4 -13
- package/src/Field/Field.doc.mjs +1 -1
- package/src/Field/FieldLabel.test.tsx +29 -0
- package/src/Field/FieldLabel.tsx +7 -0
- package/src/Field/InputClearButton.test.tsx +15 -1
- package/src/Field/InputClearButton.tsx +28 -4
- package/src/FieldStatus/FieldStatus.doc.mjs +1 -1
- package/src/FileInput/FileInput.doc.mjs +1 -1
- package/src/Heading/Heading.tsx +0 -1
- package/src/HoverCard/HoverCard.doc.mjs +8 -2
- package/src/HoverCard/HoverCard.test.tsx +154 -4
- package/src/HoverCard/HoverCard.tsx +137 -3
- package/src/HoverCard/useHoverCard.tsx +23 -3
- package/src/Icon/Icon.test.tsx +55 -1
- package/src/Icon/Icon.tsx +5 -3
- package/src/Icon/defaultIcons.tsx +11 -2
- package/src/Icon/globalIconRegistry.test.tsx +16 -3
- package/src/Icon/globalIconRegistry.tsx +37 -6
- package/src/Icon/index.ts +1 -0
- package/src/Icon/useIcon.ts +9 -2
- package/src/Indicator/CheckboxIndicator.tsx +14 -8
- package/src/Indicator/Indicator.doc.mjs +3 -1
- package/src/InputGroup/InputGroup.doc.mjs +1 -1
- package/src/Item/Item.tsx +2 -7
- package/src/Kbd/Kbd.test.tsx +0 -17
- package/src/Kbd/Kbd.tsx +2 -26
- package/src/Layer/gestureCounter.ts +57 -0
- package/src/Layer/useLayer.test.tsx +368 -16
- package/src/Layer/useLayer.tsx +208 -35
- package/src/Layout/__tests__/edgeCompensation.test.tsx +1 -1
- package/src/List/List.test.tsx +38 -0
- package/src/List/List.tsx +8 -1
- package/src/Markdown/Markdown.test.tsx +37 -0
- package/src/Markdown/Markdown.tsx +16 -5
- package/src/Markdown/parser.test.ts +33 -0
- package/src/Markdown/parser.ts +9 -3
- package/src/MetadataList/MetadataList.test.tsx +75 -2
- package/src/MetadataList/MetadataListItem.tsx +5 -2
- package/src/MultiSelector/MultiSelector.doc.mjs +23 -2
- package/src/MultiSelector/MultiSelector.test.tsx +205 -0
- package/src/MultiSelector/MultiSelector.tsx +103 -16
- package/src/MultiSelector/hooks.ts +9 -2
- package/src/NavIcon/NavIcon.doc.mjs +8 -2
- package/src/NavIcon/NavIcon.test.tsx +9 -0
- package/src/NavIcon/NavIcon.tsx +5 -1
- package/src/NavItem/navItemStyles.stylex.ts +0 -8
- package/src/NavMenu/NavHeadingMenu.test.tsx +30 -0
- package/src/NavMenu/NavHeadingMenu.tsx +7 -4
- package/src/NumberInput/NumberInput.doc.mjs +27 -8
- package/src/NumberInput/NumberInput.test.tsx +563 -8
- package/src/NumberInput/NumberInput.tsx +77 -131
- package/src/NumberInput/numberInputCommit.test.ts +72 -0
- package/src/NumberInput/numberInputCommit.ts +103 -0
- package/src/NumberInput/numberParser.docblock.test.ts +234 -0
- package/src/NumberInput/numberParser.test.ts +222 -0
- package/src/NumberInput/numberParser.ts +403 -0
- package/src/Outline/Outline.tsx +2 -4
- package/src/OverflowList/OverflowList.doc.mjs +102 -21
- package/src/OverflowList/OverflowList.test.tsx +550 -4
- package/src/OverflowList/OverflowList.tsx +100 -2
- package/src/Pagination/Pagination.test.tsx +3 -2
- package/src/Popover/Popover.doc.mjs +2 -2
- package/src/Popover/Popover.test.tsx +38 -0
- package/src/Popover/Popover.tsx +28 -66
- package/src/Popover/usePopover.tsx +44 -5
- package/src/PowerSearch/PowerSearch.doc.mjs +1 -1
- package/src/PowerSearch/PowerSearchEditPopover.test.tsx +87 -0
- package/src/PowerSearch/PowerSearchValueEditor.test.tsx +64 -0
- package/src/PowerSearch/PowerSearchValueEditor.tsx +109 -10
- package/src/PowerSearch/formatFilterValue.test.ts +16 -1
- package/src/PowerSearch/formatFilterValue.ts +2 -0
- package/src/ProgressBar/ProgressBar.doc.mjs +42 -6
- package/src/ProgressBar/ProgressBar.test.tsx +24 -0
- package/src/ProgressBar/ProgressBar.tsx +28 -8
- package/src/RadioList/RadioList.doc.mjs +1 -1
- package/src/Resizable/Resizable.doc.mjs +2 -2
- package/src/Resizable/useResizable.doc.mjs +21 -2
- package/src/Resizable/useResizable.test.ts +421 -0
- package/src/Resizable/useResizable.ts +133 -48
- package/src/SelectableCard/SelectableCard.doc.mjs +3 -0
- package/src/SelectableCard/SelectableCard.tsx +16 -0
- package/src/Selector/Selector.doc.mjs +15 -1
- package/src/Selector/Selector.source-build.test.mjs +65 -0
- package/src/Selector/Selector.test.tsx +301 -0
- package/src/Selector/Selector.tsx +145 -32
- package/src/Selector/hooks.ts +17 -2
- package/src/SideNav/SideNav.doc.mjs +2 -2
- package/src/SideNav/SideNav.test.tsx +1069 -6
- package/src/SideNav/SideNav.tsx +109 -38
- package/src/SideNav/SideNavHeading.tsx +5 -2
- package/src/SideNav/SideNavItem.doc.mjs +24 -3
- package/src/SideNav/SideNavItem.tsx +134 -44
- package/src/Slider/Slider.doc.mjs +2 -2
- package/src/Slider/Slider.test.tsx +106 -1
- package/src/Slider/Slider.tsx +52 -1
- package/src/Spinner/Spinner.doc.mjs +17 -5
- package/src/Spinner/Spinner.test.tsx +164 -0
- package/src/Spinner/Spinner.tsx +252 -22
- package/src/StatusDot/StatusDot.doc.mjs +8 -2
- package/src/StatusDot/StatusDot.test.tsx +9 -0
- package/src/StatusDot/StatusDot.tsx +7 -1
- package/src/Stepper/Step.doc.mjs +1 -1
- package/src/Stepper/Step.tsx +7 -14
- package/src/Switch/Switch.doc.mjs +3 -1
- package/src/Switch/Switch.test.tsx +10 -0
- package/src/Switch/Switch.tsx +3 -0
- package/src/Table/BaseTable.tsx +6 -1
- package/src/Table/Table.doc.mjs +5 -3
- package/src/Table/Table.tsx +3 -8
- package/src/Table/TableBody.doc.mjs +2 -2
- package/src/Table/TableFooter.doc.mjs +1 -1
- package/src/Table/TableHeader.doc.mjs +1 -1
- package/src/Table/plugins/filtering/useTableFiltering.test.tsx +44 -6
- package/src/Table/plugins/filtering/useTableFiltering.tsx +100 -4
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +50 -4
- package/src/Table/plugins/selection/useTableSelection.test.tsx +62 -0
- package/src/Table/plugins/selection/useTableSelection.tsx +25 -2
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +1 -2
- package/src/Table/useTableGroupedRows.doc.mjs +3 -3
- package/src/Table/useTablePagination.doc.mjs +1 -1
- package/src/Table/useTableSelection.doc.mjs +1 -1
- package/src/Text/Text.test.tsx +44 -0
- package/src/Text/Text.tsx +0 -1
- package/src/TextArea/TextArea.doc.mjs +13 -3
- package/src/TextArea/TextArea.test.tsx +11 -0
- package/src/TextArea/TextArea.tsx +34 -22
- package/src/TextInput/TextInput.doc.mjs +1 -1
- package/src/TimeInput/TimeInput.doc.mjs +1 -1
- package/src/Timestamp/Timestamp.test.tsx +89 -0
- package/src/Timestamp/Timestamp.tsx +8 -8
- package/src/Timestamp/formatInstant.ts +5 -0
- package/src/Toast/Toast.doc.mjs +213 -44
- package/src/Toast/Toast.tsx +118 -23
- package/src/Toast/ToastViewport.test.tsx +1434 -8
- package/src/Toast/ToastViewport.tsx +85 -14
- package/src/Toast/index.ts +2 -0
- package/src/Toast/types.ts +43 -5
- package/src/Toast/useToastGesture.ts +361 -0
- package/src/Token/Token.test.tsx +95 -0
- package/src/Token/Token.tsx +19 -17
- package/src/Token/TokenLink.tsx +12 -3
- package/src/Tokenizer/Tokenizer.doc.mjs +17 -4
- package/src/Tokenizer/Tokenizer.test.tsx +161 -0
- package/src/Tokenizer/Tokenizer.tsx +49 -24
- package/src/TopNav/TopNavHeading.tsx +2 -2
- package/src/TopNav/TopNavItem.tsx +3 -7
- package/src/TopNav/TopNavMegaMenu.test.tsx +104 -0
- package/src/TopNav/TopNavMegaMenu.tsx +47 -4
- package/src/TopNav/TopNavMegaMenuItem.tsx +10 -9
- package/src/TopNav/TopNavMenu.test.tsx +133 -1
- package/src/TopNav/TopNavMenu.tsx +38 -5
- package/src/TreeList/TreeList.test.tsx +49 -0
- package/src/TreeList/TreeList.tsx +7 -2
- package/src/TreeList/TreeListItem.tsx +2 -7
- package/src/Typeahead/BaseTypeahead.doc.mjs +13 -0
- package/src/Typeahead/BaseTypeahead.tsx +96 -6
- package/src/Typeahead/Typeahead.doc.mjs +7 -1
- package/src/Typeahead/Typeahead.test.tsx +154 -0
- package/src/Typeahead/Typeahead.tsx +9 -0
- package/src/Typeahead/TypeaheadItem.test.tsx +43 -0
- package/src/Typeahead/TypeaheadItem.tsx +8 -1
- package/src/hooks/useAnnounce.doc.mjs +96 -0
- package/src/hooks/useDevWarning.doc.mjs +96 -0
- package/src/hooks/useHotkeys.test.ts +0 -18
- package/src/hooks/useHotkeys.ts +3 -25
- package/src/hooks/useIndicatorFocusRing.doc.mjs +104 -0
- package/src/hooks/useInputStatusIcon.doc.mjs +142 -0
- package/src/hooks/useInteractiveRole.doc.mjs +119 -0
- package/src/hooks/useLongPress.doc.mjs +123 -0
- package/src/hooks/useOverflow.doc.mjs +58 -17
- package/src/hooks/useOverflow.ts +16 -4
- package/src/hooks/useTypeahead.doc.mjs +153 -0
- package/src/i18n/InternationalizationContext.ts +3 -0
- package/src/i18n/InternationalizationProvider.tsx +8 -1
- package/src/i18n/__tests__/resolve.test.ts +23 -1
- package/src/i18n/resolve.ts +46 -49
- package/src/i18n/useTranslator.ts +2 -7
- package/src/index.ts +2 -0
- package/src/raw-import.d.ts +14 -0
- package/src/theme/Theme.test.tsx +104 -2
- package/src/theme/Theme.tsx +49 -14
- package/src/theme/defineTheme.test.ts +23 -0
- package/src/theme/defineTheme.ts +12 -3
- package/src/theme/derivedVarRegistry.test.ts +87 -3
- package/src/theme/derivedVarRegistry.ts +23 -4
- package/src/theme/generateThemeRules.test.ts +99 -1
- package/src/theme/generateThemeRules.ts +28 -0
- package/src/theme/syntax/tokens.ts +5 -2
- package/src/theme/useTheme.test.tsx +10 -0
- package/src/theme/useTheme.ts +16 -10
- package/src/utils/dateParser.test.ts +34 -2
- package/src/utils/dateParser.ts +11 -14
- package/src/utils/focusOutline.stylex.ts +50 -0
- package/src/utils/interactionOverlay.stylex.ts +74 -0
- package/src/utils/isApplePlatform.test.ts +61 -0
- package/src/utils/isApplePlatform.ts +37 -0
- package/src/utils/plainDate.test.ts +46 -0
- package/src/utils/plainDate.ts +18 -3
package/src/Token/Token.test.tsx
CHANGED
|
@@ -521,3 +521,98 @@ describe('Token focus outline', () => {
|
|
|
521
521
|
expect(container.tagName).toBe('SPAN');
|
|
522
522
|
});
|
|
523
523
|
});
|
|
524
|
+
|
|
525
|
+
describe('Token pass-through props', () => {
|
|
526
|
+
it('forwards pass-through props to the token element', () => {
|
|
527
|
+
render(
|
|
528
|
+
<Token
|
|
529
|
+
label="Design"
|
|
530
|
+
aria-label="Design tag"
|
|
531
|
+
id="design-token"
|
|
532
|
+
data-source="filters"
|
|
533
|
+
data-testid="token"
|
|
534
|
+
/>,
|
|
535
|
+
);
|
|
536
|
+
const token = screen.getByTestId('token');
|
|
537
|
+
expect(token).toHaveAttribute('aria-label', 'Design tag');
|
|
538
|
+
expect(token).toHaveAttribute('id', 'design-token');
|
|
539
|
+
expect(token).toHaveAttribute('data-source', 'filters');
|
|
540
|
+
});
|
|
541
|
+
|
|
542
|
+
it('forwards pass-through props on the clickable and link variants', () => {
|
|
543
|
+
const {rerender} = render(
|
|
544
|
+
<Token
|
|
545
|
+
label="Design"
|
|
546
|
+
onClick={() => {}}
|
|
547
|
+
id="clickable"
|
|
548
|
+
data-testid="token"
|
|
549
|
+
/>,
|
|
550
|
+
);
|
|
551
|
+
expect(screen.getByTestId('token')).toHaveAttribute('id', 'clickable');
|
|
552
|
+
|
|
553
|
+
rerender(
|
|
554
|
+
<Token label="Design" href="/tags" id="link" data-testid="token" />,
|
|
555
|
+
);
|
|
556
|
+
expect(screen.getByTestId('token')).toHaveAttribute('id', 'link');
|
|
557
|
+
});
|
|
558
|
+
|
|
559
|
+
it('keeps its own label when the label is visually hidden', () => {
|
|
560
|
+
render(
|
|
561
|
+
<Token
|
|
562
|
+
label="Design"
|
|
563
|
+
isLabelHidden
|
|
564
|
+
aria-label="Caller label"
|
|
565
|
+
data-source="filters"
|
|
566
|
+
data-testid="token"
|
|
567
|
+
/>,
|
|
568
|
+
);
|
|
569
|
+
const token = screen.getByTestId('token');
|
|
570
|
+
expect({
|
|
571
|
+
ariaLabel: token.getAttribute('aria-label'),
|
|
572
|
+
dataSource: token.getAttribute('data-source'),
|
|
573
|
+
}).toEqual({ariaLabel: 'Design', dataSource: 'filters'});
|
|
574
|
+
});
|
|
575
|
+
});
|
|
576
|
+
|
|
577
|
+
describe('Token — owned handlers on the link+remove container', () => {
|
|
578
|
+
it("composes a caller's onMouseUp with the container's link delegation", () => {
|
|
579
|
+
const openSpy = vi.spyOn(window, 'open').mockImplementation(() => null);
|
|
580
|
+
const handleMouseUp = vi.fn();
|
|
581
|
+
render(
|
|
582
|
+
<Token
|
|
583
|
+
label="Tag"
|
|
584
|
+
href="/test"
|
|
585
|
+
onRemove={() => {}}
|
|
586
|
+
onMouseUp={handleMouseUp}
|
|
587
|
+
icon={<span data-testid="icon">★</span>}
|
|
588
|
+
/>,
|
|
589
|
+
);
|
|
590
|
+
|
|
591
|
+
fireEvent.mouseUp(screen.getByTestId('icon'), {button: 1});
|
|
592
|
+
|
|
593
|
+
expect(handleMouseUp).toHaveBeenCalledOnce();
|
|
594
|
+
expect(openSpy).toHaveBeenCalledWith('/test', '_blank', 'noopener');
|
|
595
|
+
openSpy.mockRestore();
|
|
596
|
+
});
|
|
597
|
+
|
|
598
|
+
it("does not fire the container's delegation when disabled, but still forwards the caller's onMouseUp", () => {
|
|
599
|
+
const openSpy = vi.spyOn(window, 'open').mockImplementation(() => null);
|
|
600
|
+
const handleMouseUp = vi.fn();
|
|
601
|
+
render(
|
|
602
|
+
<Token
|
|
603
|
+
label="Tag"
|
|
604
|
+
href="/test"
|
|
605
|
+
onRemove={() => {}}
|
|
606
|
+
onMouseUp={handleMouseUp}
|
|
607
|
+
isDisabled
|
|
608
|
+
icon={<span data-testid="icon">★</span>}
|
|
609
|
+
/>,
|
|
610
|
+
);
|
|
611
|
+
|
|
612
|
+
fireEvent.mouseUp(screen.getByTestId('icon'), {button: 1});
|
|
613
|
+
|
|
614
|
+
expect(handleMouseUp).toHaveBeenCalledOnce();
|
|
615
|
+
expect(openSpy).not.toHaveBeenCalled();
|
|
616
|
+
openSpy.mockRestore();
|
|
617
|
+
});
|
|
618
|
+
});
|
package/src/Token/Token.tsx
CHANGED
|
@@ -37,6 +37,7 @@ import {TokenLink} from './TokenLink';
|
|
|
37
37
|
import type {BaseProps} from '../BaseProps';
|
|
38
38
|
import {themeProps} from '../utils/themeProps';
|
|
39
39
|
import {focusOutlineProps} from '../utils/focusOutline.stylex';
|
|
40
|
+
import {interactionOverlayStyles} from '../utils/interactionOverlay.stylex';
|
|
40
41
|
import {useTranslator} from '../i18n';
|
|
41
42
|
import type {TokenColorMap} from './index';
|
|
42
43
|
|
|
@@ -143,13 +144,6 @@ const styles = stylex.create({
|
|
|
143
144
|
transitionProperty: 'background-image',
|
|
144
145
|
transitionDuration: durationVars['--duration-fast'],
|
|
145
146
|
transitionTimingFunction: easeVars['--ease-standard'],
|
|
146
|
-
backgroundImage: {
|
|
147
|
-
default: null,
|
|
148
|
-
':hover:where(:not(:disabled,[aria-disabled="true"]))': {
|
|
149
|
-
'@media (hover: hover)': `linear-gradient(${colorVars['--color-overlay-hover']}, ${colorVars['--color-overlay-hover']})`,
|
|
150
|
-
},
|
|
151
|
-
':active': `linear-gradient(${colorVars['--color-overlay-pressed']}, ${colorVars['--color-overlay-pressed']})`,
|
|
152
|
-
},
|
|
153
147
|
},
|
|
154
148
|
disabled: {
|
|
155
149
|
cursor: 'default',
|
|
@@ -307,6 +301,7 @@ export function Token({
|
|
|
307
301
|
style,
|
|
308
302
|
'data-testid': testId,
|
|
309
303
|
ref,
|
|
304
|
+
...rest
|
|
310
305
|
}: TokenProps) {
|
|
311
306
|
const t = useTranslator();
|
|
312
307
|
const LinkComponent = useLinkComponent();
|
|
@@ -344,8 +339,8 @@ export function Token({
|
|
|
344
339
|
|
|
345
340
|
const sharedProps = {
|
|
346
341
|
'data-testid': testId,
|
|
347
|
-
'aria-label':
|
|
348
|
-
'aria-description': description,
|
|
342
|
+
...(isLabelHidden ? {'aria-label': label} : {}),
|
|
343
|
+
...(description != null ? {'aria-description': description} : {}),
|
|
349
344
|
};
|
|
350
345
|
|
|
351
346
|
if (role === 'link') {
|
|
@@ -354,8 +349,6 @@ export function Token({
|
|
|
354
349
|
<LinkComponent
|
|
355
350
|
ref={ref as React.Ref<HTMLAnchorElement>}
|
|
356
351
|
href={href as string}
|
|
357
|
-
aria-disabled={isDisabled || undefined}
|
|
358
|
-
{...sharedProps}
|
|
359
352
|
{...mergeProps(
|
|
360
353
|
themeProps('token', {color, size}),
|
|
361
354
|
focusOutlineProps.focusVisible(
|
|
@@ -363,12 +356,16 @@ export function Token({
|
|
|
363
356
|
sizeStyles[size],
|
|
364
357
|
colorStyles[color],
|
|
365
358
|
styles.interactive,
|
|
359
|
+
interactionOverlayStyles.backgroundImage,
|
|
366
360
|
isDisabled && styles.disabled,
|
|
367
361
|
xstyle,
|
|
368
362
|
),
|
|
369
363
|
className,
|
|
370
364
|
style,
|
|
371
|
-
)}
|
|
365
|
+
)}
|
|
366
|
+
{...rest}
|
|
367
|
+
{...(isDisabled ? {'aria-disabled': true} : {})}
|
|
368
|
+
{...sharedProps}>
|
|
372
369
|
{content}
|
|
373
370
|
</LinkComponent>
|
|
374
371
|
);
|
|
@@ -400,7 +397,6 @@ export function Token({
|
|
|
400
397
|
{label}
|
|
401
398
|
</span>
|
|
402
399
|
}
|
|
403
|
-
{...sharedProps}
|
|
404
400
|
{...mergeProps(
|
|
405
401
|
themeProps('token', {color, size}),
|
|
406
402
|
focusOutlineProps.focusWithin(
|
|
@@ -408,12 +404,15 @@ export function Token({
|
|
|
408
404
|
sizeStyles[size],
|
|
409
405
|
colorStyles[color],
|
|
410
406
|
styles.interactive,
|
|
407
|
+
interactionOverlayStyles.backgroundImage,
|
|
411
408
|
isDisabled && styles.disabled,
|
|
412
409
|
xstyle,
|
|
413
410
|
),
|
|
414
411
|
className,
|
|
415
412
|
style,
|
|
416
413
|
)}
|
|
414
|
+
{...rest}
|
|
415
|
+
{...sharedProps}
|
|
417
416
|
/>
|
|
418
417
|
);
|
|
419
418
|
}
|
|
@@ -431,7 +430,6 @@ export function Token({
|
|
|
431
430
|
<span
|
|
432
431
|
ref={ref}
|
|
433
432
|
onClick={isDisabled ? undefined : handleContainerClick}
|
|
434
|
-
{...sharedProps}
|
|
435
433
|
{...mergeProps(
|
|
436
434
|
themeProps('token', {color, size}),
|
|
437
435
|
focusOutlineProps.focusWithin(
|
|
@@ -439,12 +437,15 @@ export function Token({
|
|
|
439
437
|
sizeStyles[size],
|
|
440
438
|
colorStyles[color],
|
|
441
439
|
styles.interactive,
|
|
440
|
+
interactionOverlayStyles.backgroundImage,
|
|
442
441
|
isDisabled && styles.disabled,
|
|
443
442
|
xstyle,
|
|
444
443
|
),
|
|
445
444
|
className,
|
|
446
445
|
style,
|
|
447
|
-
)}
|
|
446
|
+
)}
|
|
447
|
+
{...rest}
|
|
448
|
+
{...sharedProps}>
|
|
448
449
|
{icon}
|
|
449
450
|
<button
|
|
450
451
|
type="button"
|
|
@@ -468,7 +469,6 @@ export function Token({
|
|
|
468
469
|
return (
|
|
469
470
|
<span
|
|
470
471
|
ref={ref}
|
|
471
|
-
{...sharedProps}
|
|
472
472
|
{...mergeProps(
|
|
473
473
|
themeProps('token', {color, size}),
|
|
474
474
|
stylex.props(
|
|
@@ -480,7 +480,9 @@ export function Token({
|
|
|
480
480
|
),
|
|
481
481
|
className,
|
|
482
482
|
style,
|
|
483
|
-
)}
|
|
483
|
+
)}
|
|
484
|
+
{...rest}
|
|
485
|
+
{...sharedProps}>
|
|
484
486
|
{content}
|
|
485
487
|
</span>
|
|
486
488
|
);
|
package/src/Token/TokenLink.tsx
CHANGED
|
@@ -29,6 +29,7 @@ import type {ReactNode, CSSProperties, Ref, HTMLAttributes} from 'react';
|
|
|
29
29
|
import {useRef} from 'react';
|
|
30
30
|
import {useClickableContainer} from '../hooks/useClickableContainer';
|
|
31
31
|
import type {LinkComponentType} from '../Link/types';
|
|
32
|
+
import {composeEventHandlers} from '../utils';
|
|
32
33
|
|
|
33
34
|
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
34
35
|
export interface TokenLinkProps extends HTMLAttributes<HTMLElement> {
|
|
@@ -72,6 +73,8 @@ export function TokenLink({
|
|
|
72
73
|
icon,
|
|
73
74
|
endContent,
|
|
74
75
|
removeButton,
|
|
76
|
+
onClick: onClickProp,
|
|
77
|
+
onMouseUp: onMouseUpProp,
|
|
75
78
|
...containerProps
|
|
76
79
|
}: TokenLinkProps) {
|
|
77
80
|
const containerRef = useRef<HTMLElement | null>(null);
|
|
@@ -87,9 +90,15 @@ export function TokenLink({
|
|
|
87
90
|
return (
|
|
88
91
|
<span
|
|
89
92
|
ref={useMergedRefs(ref, containerRef)}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
+
{...containerProps}
|
|
94
|
+
onClick={
|
|
95
|
+
isDisabled ? onClickProp : composeEventHandlers(onClickProp, onClick)
|
|
96
|
+
}
|
|
97
|
+
onMouseUp={
|
|
98
|
+
isDisabled
|
|
99
|
+
? onMouseUpProp
|
|
100
|
+
: composeEventHandlers(onMouseUpProp, onMouseUp)
|
|
101
|
+
}>
|
|
93
102
|
{icon}
|
|
94
103
|
<LinkComponent
|
|
95
104
|
ref={linkRef as Ref<HTMLAnchorElement>}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
export const docs = {
|
|
6
6
|
name: 'Tokenizer',
|
|
7
7
|
displayName: 'Tokenizer',
|
|
8
|
-
category: '
|
|
8
|
+
category: 'Form Controls',
|
|
9
9
|
keywords: ["tokenizer","multiselect","multi-select","chips","tags","combobox","autocomplete","taginput","chipinput"],
|
|
10
10
|
props: [
|
|
11
11
|
{
|
|
@@ -132,7 +132,7 @@ export const docs = {
|
|
|
132
132
|
{
|
|
133
133
|
name: 'maxMenuItems',
|
|
134
134
|
type: 'number',
|
|
135
|
-
description: 'Maximum number of
|
|
135
|
+
description: 'Maximum number of search results to display. The hasCreate entry is offered on top of them, so a menu can show one more than this.',
|
|
136
136
|
default: '10',
|
|
137
137
|
},
|
|
138
138
|
{
|
|
@@ -140,6 +140,12 @@ export const docs = {
|
|
|
140
140
|
type: 'number',
|
|
141
141
|
description: 'Fixed dropdown width in pixels. The menu never shrinks below its anchor width.',
|
|
142
142
|
},
|
|
143
|
+
{
|
|
144
|
+
name: 'minQueryLength',
|
|
145
|
+
type: 'number',
|
|
146
|
+
description: 'Minimum query length before the search source is queried. Below it no search runs, and the menu stays closed — unless hasCreate is set, in which case the "Create ..." entry is still offered, being derived from the typed text rather than fetched for it.',
|
|
147
|
+
default: '1',
|
|
148
|
+
},
|
|
143
149
|
{
|
|
144
150
|
name: 'emptySearchResultsText',
|
|
145
151
|
type: 'string',
|
|
@@ -386,7 +392,7 @@ export const docsZh = {
|
|
|
386
392
|
{
|
|
387
393
|
name: 'maxMenuItems',
|
|
388
394
|
type: 'number',
|
|
389
|
-
description: '
|
|
395
|
+
description: '下拉列表显示的最大搜索结果数。“创建 ...”条目会在此之外额外提供,因此菜单可能比该数量多显示一项。',
|
|
390
396
|
default: '10',
|
|
391
397
|
},
|
|
392
398
|
{
|
|
@@ -394,6 +400,12 @@ export const docsZh = {
|
|
|
394
400
|
type: 'number',
|
|
395
401
|
description: '下拉菜单的固定像素宽度。菜单不会小于其锚点宽度。',
|
|
396
402
|
},
|
|
403
|
+
{
|
|
404
|
+
name: 'minQueryLength',
|
|
405
|
+
type: 'number',
|
|
406
|
+
description: '查询搜索源前的最小查询长度。低于该长度不会发起搜索,菜单保持关闭;但设置 hasCreate 时仍会提供“创建 ...”条目——该条目由输入的文本推导而来,并非通过搜索获取。',
|
|
407
|
+
default: '1',
|
|
408
|
+
},
|
|
397
409
|
{
|
|
398
410
|
name: 'emptySearchResultsText',
|
|
399
411
|
type: 'string',
|
|
@@ -515,8 +527,9 @@ export const docsDense = {
|
|
|
515
527
|
isOptional: 'Shows optional indicator on label.',
|
|
516
528
|
labelTooltip: 'Tooltip on label.',
|
|
517
529
|
hasEntriesOnFocus: 'Show bootstrap results on focus before typing.',
|
|
518
|
-
maxMenuItems: 'Max
|
|
530
|
+
maxMenuItems: 'Max search results shown; the hasCreate entry sits on top of them.',
|
|
519
531
|
menuWidth: 'Fixed dropdown width in pixels.',
|
|
532
|
+
minQueryLength: 'Min query length before searching. Menu stays closed below it, except the hasCreate entry.',
|
|
520
533
|
emptySearchResultsText: 'Text when search returns no results.',
|
|
521
534
|
hasAutoFocus: 'Auto-focus input on mount.',
|
|
522
535
|
size: 'Input+token size.',
|
|
@@ -94,6 +94,37 @@ const userSource: SearchSource = {
|
|
|
94
94
|
bootstrap: () => users.slice(0, 3),
|
|
95
95
|
};
|
|
96
96
|
|
|
97
|
+
describe('Tokenizer minQueryLength', () => {
|
|
98
|
+
it('forwards the threshold to the typeahead engine', async () => {
|
|
99
|
+
const search = vi.fn((query: string) =>
|
|
100
|
+
users.filter(u => u.label.toLowerCase().includes(query.toLowerCase())),
|
|
101
|
+
);
|
|
102
|
+
render(
|
|
103
|
+
<Tokenizer
|
|
104
|
+
label="People"
|
|
105
|
+
searchSource={{search, bootstrap: () => []}}
|
|
106
|
+
value={[]}
|
|
107
|
+
onChange={() => {}}
|
|
108
|
+
minQueryLength={3}
|
|
109
|
+
debounceMs={0}
|
|
110
|
+
/>,
|
|
111
|
+
);
|
|
112
|
+
const input = screen.getByRole('combobox');
|
|
113
|
+
|
|
114
|
+
fireEvent.change(input, {target: {value: 'Al'}});
|
|
115
|
+
await act(async () => {
|
|
116
|
+
await Promise.resolve();
|
|
117
|
+
});
|
|
118
|
+
expect(search).not.toHaveBeenCalled();
|
|
119
|
+
expect(input).toHaveAttribute('aria-expanded', 'false');
|
|
120
|
+
|
|
121
|
+
fireEvent.change(input, {target: {value: 'Ali'}});
|
|
122
|
+
await waitFor(() => {
|
|
123
|
+
expect(input).toHaveAttribute('aria-expanded', 'true');
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
|
|
97
128
|
describe('Tokenizer', () => {
|
|
98
129
|
it('forwards ref to the root field element', () => {
|
|
99
130
|
let root: HTMLDivElement | null = null;
|
|
@@ -606,6 +637,136 @@ describe('Tokenizer', () => {
|
|
|
606
637
|
bootstrap: () => [],
|
|
607
638
|
};
|
|
608
639
|
|
|
640
|
+
it('still offers Create below minQueryLength, and does not search', async () => {
|
|
641
|
+
// The threshold exists to avoid a fetch too broad to be worth making.
|
|
642
|
+
// Creating costs no fetch, so a field that can create `QA` should not
|
|
643
|
+
// stop being able to just because a search for `QA` would match too
|
|
644
|
+
// much. Reported on #5385.
|
|
645
|
+
const search = vi.fn(() => []);
|
|
646
|
+
const onChange = vi.fn();
|
|
647
|
+
render(
|
|
648
|
+
<Tokenizer
|
|
649
|
+
label="Tags"
|
|
650
|
+
searchSource={{search, bootstrap: () => []}}
|
|
651
|
+
value={[]}
|
|
652
|
+
onChange={onChange}
|
|
653
|
+
hasCreate
|
|
654
|
+
minQueryLength={3}
|
|
655
|
+
debounceMs={0}
|
|
656
|
+
/>,
|
|
657
|
+
);
|
|
658
|
+
|
|
659
|
+
const input = screen.getByRole('combobox');
|
|
660
|
+
await act(async () => {
|
|
661
|
+
fireEvent.change(input, {target: {value: 'QA'}});
|
|
662
|
+
});
|
|
663
|
+
await act(async () => {
|
|
664
|
+
await new Promise(r => setTimeout(r, 50));
|
|
665
|
+
});
|
|
666
|
+
|
|
667
|
+
// Offered...
|
|
668
|
+
expect(screen.queryByText('Create "QA"')).toBeInTheDocument();
|
|
669
|
+
// ...without the source ever being asked.
|
|
670
|
+
expect(search).not.toHaveBeenCalled();
|
|
671
|
+
// ...and it commits.
|
|
672
|
+
fireEvent.click(screen.getByText('Create "QA"'));
|
|
673
|
+
expect(onChange).toHaveBeenCalledWith(
|
|
674
|
+
[expect.objectContaining({id: 'QA', label: 'QA'})],
|
|
675
|
+
expect.objectContaining({type: 'create'}),
|
|
676
|
+
);
|
|
677
|
+
});
|
|
678
|
+
|
|
679
|
+
it('offers no menu below the threshold without hasCreate', async () => {
|
|
680
|
+
// The negative control for the case above: with nothing to derive from
|
|
681
|
+
// the text, a below-threshold query still opens nothing, and never
|
|
682
|
+
// reports "no results" for a query that was not searched.
|
|
683
|
+
const search = vi.fn(() => []);
|
|
684
|
+
render(
|
|
685
|
+
<Tokenizer
|
|
686
|
+
label="Tags"
|
|
687
|
+
searchSource={{search, bootstrap: () => []}}
|
|
688
|
+
value={[]}
|
|
689
|
+
onChange={() => {}}
|
|
690
|
+
minQueryLength={3}
|
|
691
|
+
debounceMs={0}
|
|
692
|
+
/>,
|
|
693
|
+
);
|
|
694
|
+
|
|
695
|
+
const input = screen.getByRole('combobox');
|
|
696
|
+
await act(async () => {
|
|
697
|
+
fireEvent.change(input, {target: {value: 'QA'}});
|
|
698
|
+
});
|
|
699
|
+
await act(async () => {
|
|
700
|
+
await new Promise(r => setTimeout(r, 50));
|
|
701
|
+
});
|
|
702
|
+
|
|
703
|
+
expect(search).not.toHaveBeenCalled();
|
|
704
|
+
expect(input).toHaveAttribute('aria-expanded', 'false');
|
|
705
|
+
expect(screen.queryByText('No results found')).not.toBeInTheDocument();
|
|
706
|
+
});
|
|
707
|
+
|
|
708
|
+
it('does not offer Create below the threshold for a token already held', async () => {
|
|
709
|
+
render(
|
|
710
|
+
<Tokenizer
|
|
711
|
+
label="Tags"
|
|
712
|
+
searchSource={{search: () => [], bootstrap: () => []}}
|
|
713
|
+
value={[{id: 'QA', label: 'QA'}]}
|
|
714
|
+
onChange={() => {}}
|
|
715
|
+
hasCreate
|
|
716
|
+
minQueryLength={3}
|
|
717
|
+
debounceMs={0}
|
|
718
|
+
/>,
|
|
719
|
+
);
|
|
720
|
+
|
|
721
|
+
const input = screen.getByRole('combobox');
|
|
722
|
+
await act(async () => {
|
|
723
|
+
fireEvent.change(input, {target: {value: 'QA'}});
|
|
724
|
+
});
|
|
725
|
+
await act(async () => {
|
|
726
|
+
await new Promise(r => setTimeout(r, 50));
|
|
727
|
+
});
|
|
728
|
+
|
|
729
|
+
expect(screen.queryByText('Create "QA"')).not.toBeInTheDocument();
|
|
730
|
+
});
|
|
731
|
+
|
|
732
|
+
it('offers Create on top of a full menu, not in place of a result', async () => {
|
|
733
|
+
// The Create entry is appended after the results are cut to
|
|
734
|
+
// `maxMenuItems`, so a full menu shows one more option rather than
|
|
735
|
+
// dropping its last result to make room. Deliberate: creating is a
|
|
736
|
+
// different capability from searching, and the cap exists to bound how
|
|
737
|
+
// many *results* a menu shows.
|
|
738
|
+
const many = Array.from({length: 20}, (_, i) => ({
|
|
739
|
+
id: `qa-${i}`,
|
|
740
|
+
label: `QA ${i}`,
|
|
741
|
+
}));
|
|
742
|
+
render(
|
|
743
|
+
<Tokenizer
|
|
744
|
+
label="Tags"
|
|
745
|
+
searchSource={{search: () => many, bootstrap: () => []}}
|
|
746
|
+
value={[]}
|
|
747
|
+
onChange={() => {}}
|
|
748
|
+
hasCreate
|
|
749
|
+
maxMenuItems={3}
|
|
750
|
+
debounceMs={0}
|
|
751
|
+
/>,
|
|
752
|
+
);
|
|
753
|
+
|
|
754
|
+
const input = screen.getByRole('combobox');
|
|
755
|
+
await act(async () => {
|
|
756
|
+
fireEvent.change(input, {target: {value: 'QA'}});
|
|
757
|
+
});
|
|
758
|
+
await act(async () => {
|
|
759
|
+
await new Promise(r => setTimeout(r, 50));
|
|
760
|
+
});
|
|
761
|
+
|
|
762
|
+
// Queried off the document rather than by role: the popover renders
|
|
763
|
+
// into a layer that jsdom keeps out of the accessibility tree, which is
|
|
764
|
+
// why the tests around this one reach for text too.
|
|
765
|
+
const options = document.querySelectorAll('[role="option"]');
|
|
766
|
+
expect(options).toHaveLength(4);
|
|
767
|
+
expect(options[3]).toHaveTextContent('Create "QA"');
|
|
768
|
+
});
|
|
769
|
+
|
|
609
770
|
it('shows a "Create" option when typing with hasCreate', async () => {
|
|
610
771
|
render(
|
|
611
772
|
<Tokenizer
|
|
@@ -158,6 +158,17 @@ export interface TokenizerProps<T extends SearchableItem> extends Omit<
|
|
|
158
158
|
maxMenuItems?: number;
|
|
159
159
|
/** Fixed dropdown width in pixels. Never shrinks below the input width. */
|
|
160
160
|
menuWidth?: number;
|
|
161
|
+
/**
|
|
162
|
+
* Minimum query length before the search source is queried. Below it no
|
|
163
|
+
* search runs and the menu stays closed — useful for remote sources where
|
|
164
|
+
* one or two characters match too much to be worth fetching.
|
|
165
|
+
*
|
|
166
|
+
* With `hasCreate`, the "Create" entry rides on the search results, so it
|
|
167
|
+
* also waits for the threshold.
|
|
168
|
+
*
|
|
169
|
+
* @default 1
|
|
170
|
+
*/
|
|
171
|
+
minQueryLength?: number;
|
|
161
172
|
/** Text shown when no results found. @default 'No results found' */
|
|
162
173
|
emptySearchResultsText?: string;
|
|
163
174
|
/** Whether the input is disabled. @default false */
|
|
@@ -396,6 +407,7 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
396
407
|
hasEntriesOnFocus,
|
|
397
408
|
maxMenuItems,
|
|
398
409
|
menuWidth,
|
|
410
|
+
minQueryLength,
|
|
399
411
|
emptySearchResultsText,
|
|
400
412
|
isDisabled = false,
|
|
401
413
|
htmlName,
|
|
@@ -536,36 +548,47 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
536
548
|
() => ({
|
|
537
549
|
search: async (query: string) => {
|
|
538
550
|
const results = await searchSource.search(query);
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
// Append a "Create: X" synthetic item when hasCreate is true,
|
|
542
|
-
// the user has typed something, and it doesn't exactly match an
|
|
543
|
-
// existing result.
|
|
544
|
-
if (hasCreate && query.trim()) {
|
|
545
|
-
const trimmed = query.trim();
|
|
546
|
-
const alreadyExists =
|
|
547
|
-
selectedIds.has(trimmed) ||
|
|
548
|
-
filtered.some(
|
|
549
|
-
item => item.label.toLowerCase() === trimmed.toLowerCase(),
|
|
550
|
-
);
|
|
551
|
-
if (!alreadyExists) {
|
|
552
|
-
const creatableItem = {
|
|
553
|
-
id: `${CREATABLE_ID_PREFIX}${trimmed}`,
|
|
554
|
-
label: `Create "${trimmed}"`,
|
|
555
|
-
auxiliaryData: {__createdValue: trimmed},
|
|
556
|
-
} as unknown as T;
|
|
557
|
-
filtered.push(creatableItem);
|
|
558
|
-
}
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
return filtered;
|
|
551
|
+
return results.filter(item => !selectedIds.has(item.id));
|
|
562
552
|
},
|
|
563
553
|
bootstrap: async () => {
|
|
564
554
|
const results = await searchSource.bootstrap();
|
|
565
555
|
return results.filter(item => !selectedIds.has(item.id));
|
|
566
556
|
},
|
|
567
557
|
}),
|
|
568
|
-
[searchSource, selectedIds
|
|
558
|
+
[searchSource, selectedIds],
|
|
559
|
+
);
|
|
560
|
+
|
|
561
|
+
/**
|
|
562
|
+
* The "Create X" entry. It is derived from the typed text, not fetched for
|
|
563
|
+
* it, so it is offered through `__queryEntries` rather than appended to the
|
|
564
|
+
* search results — which is what keeps it available when the query is too
|
|
565
|
+
* short to search. `minQueryLength` is there to avoid a fetch too broad to
|
|
566
|
+
* be worth making; creating `QA` costs no fetch, and a field that can
|
|
567
|
+
* create it should not stop being able to.
|
|
568
|
+
*/
|
|
569
|
+
const createEntries = useCallback(
|
|
570
|
+
(query: string, results: T[]): T[] => {
|
|
571
|
+
const trimmed = query.trim();
|
|
572
|
+
if (!hasCreate || trimmed === '') {
|
|
573
|
+
return [];
|
|
574
|
+
}
|
|
575
|
+
const alreadyExists =
|
|
576
|
+
selectedIds.has(trimmed) ||
|
|
577
|
+
results.some(
|
|
578
|
+
item => item.label.toLowerCase() === trimmed.toLowerCase(),
|
|
579
|
+
);
|
|
580
|
+
if (alreadyExists) {
|
|
581
|
+
return [];
|
|
582
|
+
}
|
|
583
|
+
return [
|
|
584
|
+
{
|
|
585
|
+
id: `${CREATABLE_ID_PREFIX}${trimmed}`,
|
|
586
|
+
label: `Create "${trimmed}"`,
|
|
587
|
+
auxiliaryData: {__createdValue: trimmed},
|
|
588
|
+
} as unknown as T,
|
|
589
|
+
];
|
|
590
|
+
},
|
|
591
|
+
[hasCreate, selectedIds],
|
|
569
592
|
);
|
|
570
593
|
|
|
571
594
|
const emptySource: SearchSource<T> = useMemo(
|
|
@@ -782,6 +805,7 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
782
805
|
hasEntriesOnFocus={isAtMax ? false : hasEntriesOnFocus}
|
|
783
806
|
maxMenuItems={maxMenuItems}
|
|
784
807
|
menuWidth={menuWidth}
|
|
808
|
+
minQueryLength={minQueryLength}
|
|
785
809
|
emptySearchResultsText={emptySearchResultsText}
|
|
786
810
|
isDisabled={isDisabled}
|
|
787
811
|
isFocusableDisabled={showsDisabledMessage}
|
|
@@ -789,6 +813,7 @@ export function Tokenizer<T extends SearchableItem>({
|
|
|
789
813
|
inputId={inputId}
|
|
790
814
|
ariaDescribedBy={ariaDescribedBy}
|
|
791
815
|
onChangeQuery={onChangeQuery}
|
|
816
|
+
__queryEntries={createEntries}
|
|
792
817
|
debounceMs={debounceMs}
|
|
793
818
|
onKeyDown={handleKeyDown}
|
|
794
819
|
anchorRef={wrapperRef}
|
|
@@ -54,7 +54,7 @@ const styles = stylex.create({
|
|
|
54
54
|
minHeight: spacingVars['--spacing-8'],
|
|
55
55
|
paddingInlineStart: {
|
|
56
56
|
default: spacingVars['--spacing-2'],
|
|
57
|
-
':has(.astryx-
|
|
57
|
+
':has(.astryx-nav-icon)': 0,
|
|
58
58
|
},
|
|
59
59
|
paddingInlineEnd: spacingVars['--spacing-2'],
|
|
60
60
|
paddingBlock: 0,
|
|
@@ -190,7 +190,7 @@ const styles = stylex.create({
|
|
|
190
190
|
minHeight: spacingVars['--spacing-8'],
|
|
191
191
|
paddingInlineStart: {
|
|
192
192
|
default: spacingVars['--spacing-2'],
|
|
193
|
-
':has(.astryx-
|
|
193
|
+
':has(.astryx-nav-icon)': 0,
|
|
194
194
|
},
|
|
195
195
|
paddingInlineEnd: spacingVars['--spacing-2'],
|
|
196
196
|
paddingBlock: 0,
|
|
@@ -36,6 +36,7 @@ import {mergeProps} from '../utils';
|
|
|
36
36
|
import {useAppShellMobile} from '../AppShell/AppShellMobileContext';
|
|
37
37
|
import {themeProps} from '../utils/themeProps';
|
|
38
38
|
import {focusOutlineProps} from '../utils/focusOutline.stylex';
|
|
39
|
+
import {interactionOverlayStyles} from '../utils/interactionOverlay.stylex';
|
|
39
40
|
|
|
40
41
|
/**
|
|
41
42
|
* NavItem styles with hover/selected states
|
|
@@ -60,13 +61,6 @@ const styles = stylex.create({
|
|
|
60
61
|
transitionProperty: 'background-color, color',
|
|
61
62
|
transitionDuration: durationVars['--duration-fast'],
|
|
62
63
|
transitionTimingFunction: easeVars['--ease-standard'],
|
|
63
|
-
backgroundColor: {
|
|
64
|
-
default: 'transparent',
|
|
65
|
-
':hover:where(:not(:disabled,[aria-disabled="true"]))': {
|
|
66
|
-
'@media (hover: hover)': colorVars['--color-overlay-hover'],
|
|
67
|
-
},
|
|
68
|
-
':active': colorVars['--color-overlay-pressed'],
|
|
69
|
-
},
|
|
70
64
|
},
|
|
71
65
|
selected: {
|
|
72
66
|
color: colorVars['--color-text-primary'],
|
|
@@ -234,6 +228,7 @@ export function TopNavItem({
|
|
|
234
228
|
}),
|
|
235
229
|
focusOutlineProps.focusVisible(
|
|
236
230
|
navItemStyles.item,
|
|
231
|
+
interactionOverlayStyles.backgroundColor,
|
|
237
232
|
navItemStyles[size],
|
|
238
233
|
isSelected && navItemStyles.selected,
|
|
239
234
|
isDisabled && navItemStyles.disabled,
|
|
@@ -270,6 +265,7 @@ export function TopNavItem({
|
|
|
270
265
|
}),
|
|
271
266
|
focusOutlineProps.focusVisible(
|
|
272
267
|
styles.base,
|
|
268
|
+
interactionOverlayStyles.backgroundColor,
|
|
273
269
|
isSelected && styles.selected,
|
|
274
270
|
isDisabled && navItemStyles.disabled,
|
|
275
271
|
isIconOnly && styles.iconOnly,
|