@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SideNav.d.ts","sourceRoot":"","sources":["../../src/SideNav/SideNav.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"SideNav.d.ts","sourceRoot":"","sources":["../../src/SideNav/SideNav.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAA2C,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAC/E,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAGnD,OAAO,EAGL,KAAK,wBAAwB,EAC7B,KAAK,+BAA+B,EACrC,MAAM,0BAA0B,CAAC;AAKlC,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,2BAA2B,CAAC;AA4O/D,MAAM,WAAW,YAAa,SAAQ,SAAS,CAAC,WAAW,CAAC;IAC1D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAE7B;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAEvD;;OAEG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IACpB;;OAEG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,eAAe,CAAC;IAEtC;;;;;;;;;;;;;OAaG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,wBAAwB,CAAC;CAClD;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,OAAO,CAAC,EACtB,MAAM,EACN,UAAU,EACV,QAAQ,EACR,MAAM,EACN,WAAW,EACX,WAAmB,EACnB,SAAiB,EACjB,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,EACH,SAAS,EACT,GAAG,KAAK,EACT,EAAE,YAAY,+BA0Qd;yBAzRe,OAAO"}
|
package/dist/SideNav/SideNav.js
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* - /apps/storybook/stories/SideNav.stories.tsx
|
|
21
21
|
* - /packages/cli/assets/templates/blocks/components/SideNav/ (showcase blocks)
|
|
22
22
|
*/
|
|
23
|
-
import { useCallback, useImperativeHandle, useRef
|
|
23
|
+
import { useCallback, useImperativeHandle, useRef } from 'react';
|
|
24
24
|
import * as stylex from '@stylexjs/stylex';
|
|
25
25
|
import "../theme/tokens.stylex.js";
|
|
26
26
|
import { spacingVars } from "../theme/tokens.stylex.js";
|
|
@@ -33,6 +33,7 @@ import { useResizable } from "../Resizable/useResizable.js";
|
|
|
33
33
|
import { ResizeHandle } from "../Resizable/ResizeHandle.js";
|
|
34
34
|
import { themeProps } from "../utils/themeProps.js";
|
|
35
35
|
import { SizeProvider } from "../SizeContext/SizeContext.js";
|
|
36
|
+
import { useDevWarning } from "../hooks/useDevWarning.js";
|
|
36
37
|
import { useTranslator } from "../i18n/index.js";
|
|
37
38
|
import { useMergedRefs } from "../hooks/useMergedRefs.js";
|
|
38
39
|
// =============================================================================
|
|
@@ -43,6 +44,43 @@ import { useMergedRefs } from "../hooks/useMergedRefs.js";
|
|
|
43
44
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
44
45
|
const COLLAPSE_THRESHOLD = 160;
|
|
45
46
|
|
|
47
|
+
// =============================================================================
|
|
48
|
+
// Collapse config
|
|
49
|
+
// =============================================================================
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* `collapsible` and `resizable` can each carry collapse state, so they are
|
|
53
|
+
* normalized here into one config with one owner — two independently
|
|
54
|
+
* initialized copies of the same boolean is what rendered an expanded nav at
|
|
55
|
+
* width 0 in #4790. `resizable` is the superset, so its keys win.
|
|
56
|
+
*/
|
|
57
|
+
function resolveCollapseConfig(collapsible, resizable) {
|
|
58
|
+
const fromCollapsible = typeof collapsible === 'object' ? collapsible : {};
|
|
59
|
+
const fromResizable = typeof resizable === 'object' ? resizable : {};
|
|
60
|
+
const resizableCarriesCollapse = fromResizable.defaultIsCollapsed !== undefined || fromResizable.isCollapsed !== undefined || fromResizable.onCollapseChange !== undefined;
|
|
61
|
+
return {
|
|
62
|
+
isCollapsible: !!collapsible || resizableCarriesCollapse,
|
|
63
|
+
defaultIsCollapsed: (resizableCarriesCollapse ? fromResizable.defaultIsCollapsed : fromCollapsible.defaultIsCollapsed) ?? false,
|
|
64
|
+
isCollapsed: resizableCarriesCollapse ? fromResizable.isCollapsed : fromCollapsible.isCollapsed,
|
|
65
|
+
onCollapsedChange: resizableCarriesCollapse ? fromResizable.onCollapseChange : fromCollapsible.onCollapsedChange,
|
|
66
|
+
conflict: describeCollapseConflict(fromCollapsible, fromResizable)
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Names the keys that address the same collapse state on both props, and
|
|
72
|
+
* which one won. Silent for the common non-overlapping combinations —
|
|
73
|
+
* `collapsible: true` alongside a resize config is not a conflict.
|
|
74
|
+
*/
|
|
75
|
+
function describeCollapseConflict(collapsible, resizable) {
|
|
76
|
+
const collapsibleKeys = [collapsible.defaultIsCollapsed !== undefined && 'defaultIsCollapsed', collapsible.isCollapsed !== undefined && 'isCollapsed', collapsible.onCollapsedChange !== undefined && 'onCollapsedChange'].filter(key => key !== false);
|
|
77
|
+
const resizableKeys = [resizable.defaultIsCollapsed !== undefined && 'defaultIsCollapsed', resizable.isCollapsed !== undefined && 'isCollapsed', resizable.onCollapseChange !== undefined && 'onCollapseChange'].filter(key => key !== false);
|
|
78
|
+
if (collapsibleKeys.length === 0 || resizableKeys.length === 0) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
return `${collapsibleKeys.map(key => `collapsible.${key}`).join(', ')} and ` + `${resizableKeys.map(key => `resizable.${key}`).join(', ')} address the ` + `same collapse state. resizable wins; the collapsible ` + `${collapsibleKeys.length === 1 ? 'value is' : 'values are'} ignored.`;
|
|
82
|
+
}
|
|
83
|
+
|
|
46
84
|
// =============================================================================
|
|
47
85
|
// Styles
|
|
48
86
|
// =============================================================================
|
|
@@ -128,35 +166,27 @@ export function SideNav({
|
|
|
128
166
|
const t = useTranslator();
|
|
129
167
|
// Parse collapsible prop
|
|
130
168
|
const collapsibleConfig = typeof collapsible === 'object' ? collapsible : {};
|
|
131
|
-
const isCollapsible = !!collapsible;
|
|
132
169
|
const hasCollapseButton = collapsibleConfig.hasButton ?? true;
|
|
133
|
-
const defaultIsCollapsed = collapsibleConfig.defaultIsCollapsed ?? false;
|
|
134
|
-
const controlledCollapsed = collapsibleConfig.isCollapsed;
|
|
135
|
-
const onCollapsedChange = collapsibleConfig.onCollapsedChange;
|
|
136
170
|
|
|
137
171
|
// Resizable config
|
|
138
172
|
const resizableConfig = typeof resizable === 'object' ? resizable : {};
|
|
139
173
|
const isResizable = !!resizable;
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
174
|
+
const collapseConfig = resolveCollapseConfig(collapsible, resizable);
|
|
175
|
+
const {
|
|
176
|
+
isCollapsible,
|
|
177
|
+
onCollapsedChange
|
|
178
|
+
} = collapseConfig;
|
|
179
|
+
useDevWarning('SideNav', collapseConfig.conflict ?? '', collapseConfig.conflict != null);
|
|
145
180
|
const navRef = useRef(null);
|
|
146
181
|
const mergedNavRef = useMergedRefs(ref, navRef);
|
|
147
182
|
const collapseStateRef = useRef({
|
|
148
|
-
isCollapsed:
|
|
183
|
+
isCollapsed: false,
|
|
149
184
|
toggle: () => {},
|
|
150
185
|
isCollapsible
|
|
151
186
|
});
|
|
152
|
-
const setCollapsedState = useCallback(value => {
|
|
153
|
-
if (!isControlled) {
|
|
154
|
-
setUncontrolledCollapsed(value);
|
|
155
|
-
}
|
|
156
|
-
onCollapsedChange?.(value);
|
|
157
|
-
}, [isControlled, onCollapsedChange]);
|
|
158
187
|
|
|
159
|
-
//
|
|
188
|
+
// useResizable is the sole collapse owner in every SideNav mode. Keeping that
|
|
189
|
+
// owner mounted when resize is toggled preserves the current collapse state.
|
|
160
190
|
const resizableHook = useResizable({
|
|
161
191
|
defaultSize: resizableConfig.defaultWidth ?? 260,
|
|
162
192
|
minSizePx: resizableConfig.minWidth ?? 180,
|
|
@@ -164,9 +194,12 @@ export function SideNav({
|
|
|
164
194
|
collapsible: isCollapsible,
|
|
165
195
|
collapsedSize: COLLAPSE_THRESHOLD,
|
|
166
196
|
autoSaveId: resizableConfig.autoSaveId,
|
|
197
|
+
defaultIsCollapsed: collapseConfig.defaultIsCollapsed,
|
|
198
|
+
isCollapsed: collapseConfig.isCollapsed,
|
|
167
199
|
onSizeChange: resizableConfig.onWidthChange,
|
|
168
|
-
onCollapseChange:
|
|
200
|
+
onCollapseChange: onCollapsedChange
|
|
169
201
|
});
|
|
202
|
+
const collapsed = resizableHook.isCollapsed;
|
|
170
203
|
const toggle = useCallback(() => {
|
|
171
204
|
const next = !collapsed;
|
|
172
205
|
|
|
@@ -176,15 +209,12 @@ export function SideNav({
|
|
|
176
209
|
...collapseStateRef.current,
|
|
177
210
|
isCollapsed: next
|
|
178
211
|
};
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
} else {
|
|
184
|
-
resizableHook.expand();
|
|
185
|
-
}
|
|
212
|
+
if (next) {
|
|
213
|
+
resizableHook.collapse();
|
|
214
|
+
} else {
|
|
215
|
+
resizableHook.expand();
|
|
186
216
|
}
|
|
187
|
-
}, [collapsed,
|
|
217
|
+
}, [collapsed, resizableHook]);
|
|
188
218
|
const showResizeHandle = isResizable && !collapsed;
|
|
189
219
|
collapseStateRef.current = {
|
|
190
220
|
isCollapsed: collapsed,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SideNavHeading.d.ts","sourceRoot":"","sources":["../../src/SideNav/SideNavHeading.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAkB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SideNavHeading.d.ts","sourceRoot":"","sources":["../../src/SideNav/SideNavHeading.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAkB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAqBtD,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAGrD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA0N5C,MAAM,WAAW,mBAAoB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACpE,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;OAIG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAQD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,cAAc,CAAC,EAC7B,EAAE,EACF,IAAI,EACJ,OAAO,EACP,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,IAAI,EACJ,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,EACH,GAAG,KAAK,EACT,EAAE,mBAAmB,sCAyfrB;yBA1gBe,cAAc"}
|
|
@@ -31,6 +31,7 @@ import { Icon } from "../Icon/index.js";
|
|
|
31
31
|
import { Tooltip } from "../Tooltip/index.js";
|
|
32
32
|
import { navItemStyles } from "../NavItem/navItemStyles.stylex.js";
|
|
33
33
|
import { focusOutlineProps } from "../utils/focusOutline.stylex.js";
|
|
34
|
+
import { interactionOverlayStyles } from "../utils/interactionOverlay.stylex.js";
|
|
34
35
|
import { useSideNavCollapse } from "./SideNavCollapseContext.js";
|
|
35
36
|
import { useLinkComponent } from "../Link/useLinkComponent.js";
|
|
36
37
|
import { mergeProps } from "../utils/index.js";
|
|
@@ -50,7 +51,7 @@ const styles = {
|
|
|
50
51
|
kGNEyG: "x6s0dn4",
|
|
51
52
|
kOIVth: "x1txdalj",
|
|
52
53
|
kAzted: "xkoleio",
|
|
53
|
-
kZCmMZ: "x12gdq22
|
|
54
|
+
kZCmMZ: "x12gdq22 xmnmr5y",
|
|
54
55
|
kwRFfy: "x1djylfy",
|
|
55
56
|
k8WAf4: "xt970qd",
|
|
56
57
|
kB7OPa: "x9f619",
|
|
@@ -137,7 +138,7 @@ const styles = {
|
|
|
137
138
|
kMwMTN: "x1heor9g",
|
|
138
139
|
k9WMMc: "x1yc453h",
|
|
139
140
|
kAzted: "xkoleio",
|
|
140
|
-
kZCmMZ: "x12gdq22
|
|
141
|
+
kZCmMZ: "x12gdq22 xmnmr5y",
|
|
141
142
|
kwRFfy: "x1djylfy",
|
|
142
143
|
k8WAf4: "xt970qd",
|
|
143
144
|
keoZOQ: "xcsaf9d",
|
|
@@ -291,7 +292,7 @@ export function SideNavHeading({
|
|
|
291
292
|
href: headingHref,
|
|
292
293
|
"aria-label": heading,
|
|
293
294
|
"data-testid": testId,
|
|
294
|
-
...mergeProps(themeProps('side-nav-heading'), focusOutlineProps.focusVisible(navItemStyles.item, styles.rootCollapsed, xstyle), className, style),
|
|
295
|
+
...mergeProps(themeProps('side-nav-heading'), focusOutlineProps.focusVisible(navItemStyles.item, interactionOverlayStyles.backgroundColor, styles.rootCollapsed, xstyle), className, style),
|
|
295
296
|
children: collapsedIcon
|
|
296
297
|
});
|
|
297
298
|
} else if (menu) {
|
|
@@ -303,7 +304,7 @@ export function SideNavHeading({
|
|
|
303
304
|
"data-testid": testId,
|
|
304
305
|
...popover.triggerProps,
|
|
305
306
|
...triggerProps,
|
|
306
|
-
...mergeProps(themeProps('side-nav-heading'), focusOutlineProps.focusVisible(navItemStyles.item, styles.rootCollapsed, styles.menuTrigger, xstyle), className, style),
|
|
307
|
+
...mergeProps(themeProps('side-nav-heading'), focusOutlineProps.focusVisible(navItemStyles.item, interactionOverlayStyles.backgroundColor, styles.rootCollapsed, styles.menuTrigger, xstyle), className, style),
|
|
307
308
|
children: collapsedIcon
|
|
308
309
|
}), popover.render(/*#__PURE__*/_jsxs("div", {
|
|
309
310
|
ref: menuRef,
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @output Exports SideNavItem component and SideNavItemProps
|
|
5
5
|
* @position Core implementation; used inside SideNav children
|
|
6
6
|
*
|
|
7
|
-
* Navigation item with icon, selected state, and nesting.
|
|
7
|
+
* Navigation item with icon, selected state, row-level actions, and nesting.
|
|
8
8
|
*
|
|
9
9
|
* Collapsed items with children open their submenu flyout through
|
|
10
10
|
* `useMenuHover`, the shared hover-intent hook (same one `SideNavHeading` and
|
|
@@ -63,9 +63,24 @@ export interface SideNavItemProps extends BaseProps<HTMLElement> {
|
|
|
63
63
|
*/
|
|
64
64
|
onClick?: (e: React.MouseEvent) => void;
|
|
65
65
|
/**
|
|
66
|
-
*
|
|
66
|
+
* Passive right-side content only (badges, counts). Interactive
|
|
67
|
+
* controls (icon buttons, menus) go in `actions`. `endContent`
|
|
68
|
+
* renders inside the primary link or button.
|
|
67
69
|
*/
|
|
68
70
|
endContent?: ReactNode;
|
|
71
|
+
/**
|
|
72
|
+
* Row-level secondary controls (icon buttons, menus) rendered as siblings
|
|
73
|
+
* of the primary element at the trailing edge of the row — after the
|
|
74
|
+
* expand/collapse toggle, and before any nested children in DOM and focus
|
|
75
|
+
* order. Content is passthrough: each control owns its accessible name,
|
|
76
|
+
* keyboard behavior, and disabled state. Hidden while the SideNav rail is
|
|
77
|
+
* collapsed.
|
|
78
|
+
*
|
|
79
|
+
* Controls inherit the row's control size through `SizeContext`, so an
|
|
80
|
+
* unsized icon button comes out the same box as the built-in
|
|
81
|
+
* expand/collapse toggle. An explicit `size` still wins.
|
|
82
|
+
*/
|
|
83
|
+
actions?: ReactNode;
|
|
69
84
|
/**
|
|
70
85
|
* Sub-items for nesting.
|
|
71
86
|
*/
|
|
@@ -95,7 +110,10 @@ export interface SideNavItemProps extends BaseProps<HTMLElement> {
|
|
|
95
110
|
/**
|
|
96
111
|
* Navigation item for SideNav.
|
|
97
112
|
*
|
|
98
|
-
* Supports icons, selected state, nesting, and end content like badges or
|
|
113
|
+
* Supports icons, selected state, nesting, and end content like badges or
|
|
114
|
+
* counts. Interactive row-level controls (menus, icon buttons) go in
|
|
115
|
+
* `actions`, which renders them as siblings of the primary element — never
|
|
116
|
+
* nested inside it — before any nested children in DOM and focus order.
|
|
99
117
|
*
|
|
100
118
|
* @example
|
|
101
119
|
* ```
|
|
@@ -110,9 +128,16 @@ export interface SideNavItemProps extends BaseProps<HTMLElement> {
|
|
|
110
128
|
* <SideNavItem label="General" href="/settings/general" />
|
|
111
129
|
* <SideNavItem label="Security" href="/settings/security" />
|
|
112
130
|
* </SideNavItem>
|
|
131
|
+
* <SideNavItem
|
|
132
|
+
* label="Projects"
|
|
133
|
+
* href="/projects"
|
|
134
|
+
* collapsible
|
|
135
|
+
* actions={<MoreMenu label="Project actions" items={items} />}>
|
|
136
|
+
* <SideNavItem label="Alpha" href="/projects/alpha" />
|
|
137
|
+
* </SideNavItem>
|
|
113
138
|
* ```
|
|
114
139
|
*/
|
|
115
|
-
export declare function SideNavItem({ as, label, icon, selectedIcon, isSelected, isDisabled, href, onClick, endContent, children, collapsible: itemCollapsible, size, 'data-testid': testId, ref, xstyle, ...rest }: SideNavItemProps): import("react").JSX.Element | null;
|
|
140
|
+
export declare function SideNavItem({ as, label, icon, selectedIcon, isSelected, isDisabled, href, onClick, endContent, actions, children, collapsible: itemCollapsible, size, 'data-testid': testId, ref, xstyle, ...rest }: SideNavItemProps): import("react").JSX.Element | null;
|
|
116
141
|
export declare namespace SideNavItem {
|
|
117
142
|
var displayName: string;
|
|
118
143
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SideNavItem.d.ts","sourceRoot":"","sources":["../../src/SideNav/SideNavItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAYf,OAAO,EAAuB,KAAK,QAAQ,EAAC,MAAM,SAAS,CAAC;AAE5D,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAIrD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAgB,KAAK,WAAW,EAAC,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"SideNavItem.d.ts","sourceRoot":"","sources":["../../src/SideNav/SideNavItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAYf,OAAO,EAAuB,KAAK,QAAQ,EAAC,MAAM,SAAS,CAAC;AAE5D,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAIrD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAgB,KAAK,WAAW,EAAC,MAAM,iCAAiC,CAAC;AA2PhF,MAAM,WAAW,gBAAiB,SAAQ,SAAS,CAAC,WAAW,CAAC;IAC9D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7B;;;;OAIG;IACH,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC5B;;OAEG;IACH,YAAY,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IACpC;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IACxC;;;;OAIG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EACR,OAAO,GACP;QACE,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;KACpD,CAAC;IACN;;;OAGG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,WAAW,CAAC,EAC1B,EAAE,EACF,KAAK,EACL,IAAI,EACJ,YAAY,EACZ,UAAkB,EAClB,UAAkB,EAClB,IAAI,EACJ,OAAO,EACP,UAAU,EACV,OAAO,EACP,QAAQ,EACR,WAAW,EAAE,eAAe,EAC5B,IAAW,EACX,aAAa,EAAE,MAAM,EACrB,GAAG,EACH,MAAM,EACN,GAAG,IAAI,EACR,EAAE,gBAAgB,sCAuXlB;yBAzYe,WAAW"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* @output Exports SideNavItem component and SideNavItemProps
|
|
9
9
|
* @position Core implementation; used inside SideNav children
|
|
10
10
|
*
|
|
11
|
-
* Navigation item with icon, selected state, and nesting.
|
|
11
|
+
* Navigation item with icon, selected state, row-level actions, and nesting.
|
|
12
12
|
*
|
|
13
13
|
* Collapsed items with children open their submenu flyout through
|
|
14
14
|
* `useMenuHover`, the shared hover-intent hook (same one `SideNavHeading` and
|
|
@@ -33,7 +33,9 @@ import { useMenuHover } from "../hooks/useMenuHover.js";
|
|
|
33
33
|
import { mergeProps } from "../utils/index.js";
|
|
34
34
|
import { Tooltip } from "../Tooltip/index.js";
|
|
35
35
|
import { navItemStyles } from "../NavItem/navItemStyles.stylex.js";
|
|
36
|
+
import { SizeProvider } from "../SizeContext/SizeContext.js";
|
|
36
37
|
import { focusOutlineProps } from "../utils/focusOutline.stylex.js";
|
|
38
|
+
import { interactionOverlayStyles } from "../utils/interactionOverlay.stylex.js";
|
|
37
39
|
import { useSideNavCollapse, SideNavCollapseContext } from "./SideNavCollapseContext.js";
|
|
38
40
|
import { useSideNavRenderMode } from "./SideNavRenderContext.js";
|
|
39
41
|
import { useAppShellMobile } from "../AppShell/AppShellMobileContext.js";
|
|
@@ -83,6 +85,8 @@ const styles = {
|
|
|
83
85
|
$$css: true
|
|
84
86
|
},
|
|
85
87
|
expandToggle: {
|
|
88
|
+
kzqmXN: "x1fvqzum",
|
|
89
|
+
kZKoxP: "x6k0iem",
|
|
86
90
|
k1xSpc: "x3nfvp2",
|
|
87
91
|
kGNEyG: "x6s0dn4",
|
|
88
92
|
kjj79g: "xl56j7k",
|
|
@@ -95,8 +99,6 @@ const styles = {
|
|
|
95
99
|
kMwMTN: "x1heor9g",
|
|
96
100
|
kkrTdU: "x1ypdohk x16khyan",
|
|
97
101
|
kaIpWk: "xh6dtrn",
|
|
98
|
-
kRL5z6: "xoevpu5",
|
|
99
|
-
kSReZ0: "xyxi2l3",
|
|
100
102
|
$$css: true
|
|
101
103
|
},
|
|
102
104
|
splitAction: {
|
|
@@ -128,6 +130,16 @@ const styles = {
|
|
|
128
130
|
}
|
|
129
131
|
};
|
|
130
132
|
|
|
133
|
+
/**
|
|
134
|
+
* Cascaded to the `actions` slot through `SizeContext` so a consumer's row
|
|
135
|
+
* controls come out the same height as the built-in expand/collapse toggle,
|
|
136
|
+
* the way `SideNav` already cascades one size to its footer icons. An
|
|
137
|
+
* explicit `size` on a supplied control still wins.
|
|
138
|
+
*
|
|
139
|
+
* SYNC: `styles.expandToggle` carries the matching box.
|
|
140
|
+
*/
|
|
141
|
+
const ROW_CONTROL_SIZE = 'sm';
|
|
142
|
+
|
|
131
143
|
// Non-collapsed state for popover children — ensures nested items render expanded
|
|
132
144
|
const EXPANDED_COLLAPSE_STATE = {
|
|
133
145
|
isCollapsed: false,
|
|
@@ -183,7 +195,10 @@ function NavItemElement({
|
|
|
183
195
|
/**
|
|
184
196
|
* Navigation item for SideNav.
|
|
185
197
|
*
|
|
186
|
-
* Supports icons, selected state, nesting, and end content like badges or
|
|
198
|
+
* Supports icons, selected state, nesting, and end content like badges or
|
|
199
|
+
* counts. Interactive row-level controls (menus, icon buttons) go in
|
|
200
|
+
* `actions`, which renders them as siblings of the primary element — never
|
|
201
|
+
* nested inside it — before any nested children in DOM and focus order.
|
|
187
202
|
*
|
|
188
203
|
* @example
|
|
189
204
|
* ```
|
|
@@ -198,6 +213,13 @@ function NavItemElement({
|
|
|
198
213
|
* <SideNavItem label="General" href="/settings/general" />
|
|
199
214
|
* <SideNavItem label="Security" href="/settings/security" />
|
|
200
215
|
* </SideNavItem>
|
|
216
|
+
* <SideNavItem
|
|
217
|
+
* label="Projects"
|
|
218
|
+
* href="/projects"
|
|
219
|
+
* collapsible
|
|
220
|
+
* actions={<MoreMenu label="Project actions" items={items} />}>
|
|
221
|
+
* <SideNavItem label="Alpha" href="/projects/alpha" />
|
|
222
|
+
* </SideNavItem>
|
|
201
223
|
* ```
|
|
202
224
|
*/
|
|
203
225
|
export function SideNavItem({
|
|
@@ -210,6 +232,7 @@ export function SideNavItem({
|
|
|
210
232
|
href,
|
|
211
233
|
onClick,
|
|
212
234
|
endContent,
|
|
235
|
+
actions,
|
|
213
236
|
children,
|
|
214
237
|
collapsible: itemCollapsible,
|
|
215
238
|
size = 'md',
|
|
@@ -263,6 +286,7 @@ export function SideNavItem({
|
|
|
263
286
|
// clicking the chevron expands/collapses children.
|
|
264
287
|
const hasPrimaryAction = !!href || !!onClick;
|
|
265
288
|
const hasIndependentToggle = isItemCollapsible && hasPrimaryAction && !isCollapsed;
|
|
289
|
+
const hasActions = !!actions;
|
|
266
290
|
const handleClick = e => {
|
|
267
291
|
if (isDisabled) {
|
|
268
292
|
e.preventDefault();
|
|
@@ -327,7 +351,7 @@ export function SideNavItem({
|
|
|
327
351
|
size,
|
|
328
352
|
selected: isSelected ? 'selected' : null,
|
|
329
353
|
disabled: isDisabled ? 'disabled' : null
|
|
330
|
-
}), focusOutlineProps.focusVisible(navItemStyles.item, navItemStyles[size], styles.itemCollapsed, size === 'sm' && styles.itemCollapsedSm, size === 'lg' && styles.itemCollapsedLg, isSelected && navItemStyles.selected, isDisabled && navItemStyles.disabled));
|
|
354
|
+
}), focusOutlineProps.focusVisible(navItemStyles.item, interactionOverlayStyles.backgroundColor, navItemStyles[size], styles.itemCollapsed, size === 'sm' && styles.itemCollapsedSm, size === 'lg' && styles.itemCollapsedLg, isSelected && navItemStyles.selected, isDisabled && navItemStyles.disabled));
|
|
331
355
|
|
|
332
356
|
// Items with children: popover trigger + popover
|
|
333
357
|
if (hasChildren) {
|
|
@@ -422,24 +446,44 @@ export function SideNavItem({
|
|
|
422
446
|
selected: isSelected ? 'selected' : null,
|
|
423
447
|
disabled: isDisabled ? 'disabled' : null
|
|
424
448
|
});
|
|
425
|
-
const itemStyleArgs = [navItemStyles.item, navItemStyles[size], isSelected && navItemStyles.selected, isDisabled && navItemStyles.disabled];
|
|
449
|
+
const itemStyleArgs = [navItemStyles.item, interactionOverlayStyles.backgroundColor, navItemStyles[size], isSelected && navItemStyles.selected, isDisabled && navItemStyles.disabled];
|
|
426
450
|
|
|
427
|
-
//
|
|
428
|
-
// - `rowProps`
|
|
429
|
-
//
|
|
430
|
-
// - `focusableRowProps`
|
|
431
|
-
//
|
|
451
|
+
// Three shapes of the same row appearance:
|
|
452
|
+
// - `rowProps` — split-action path (toggle, no actions): presentational
|
|
453
|
+
// <div>; the ring belongs on each child tab stop.
|
|
454
|
+
// - `focusableRowProps` — ordinary row: the row element is the control.
|
|
455
|
+
// - `actionsRowProps` — same pill, but the ring is drawn for the primary
|
|
456
|
+
// only. The wrapper is not a tab stop, so `:focus-visible` on it would
|
|
457
|
+
// never match, and matching any descendant instead would light the whole
|
|
458
|
+
// row around the chevron's or an action's own ring.
|
|
432
459
|
const rowProps = mergeProps(itemThemeProps, stylex.props(...itemStyleArgs));
|
|
433
460
|
const focusableRowProps = mergeProps(itemThemeProps, focusOutlineProps.focusVisible(...itemStyleArgs));
|
|
461
|
+
const actionsRowProps = mergeProps(itemThemeProps, focusOutlineProps.focusWithinFirstChild(...itemStyleArgs));
|
|
434
462
|
|
|
435
|
-
//
|
|
436
|
-
//
|
|
437
|
-
//
|
|
463
|
+
// Row-wrapper path: primary element + row controls as siblings.
|
|
464
|
+
//
|
|
465
|
+
// Used when the row carries more than one control: an independent
|
|
466
|
+
// expand/collapse toggle (collapsible + href/onClick), consumer-supplied
|
|
467
|
+
// actions, or both. A <div> is the styled flex row; the primary link or
|
|
468
|
+
// button, the chevron toggle, and the actions slot render as siblings so
|
|
469
|
+
// no interactive element nests inside another, and every row-level
|
|
470
|
+
// control precedes the nested children group in DOM and focus order.
|
|
471
|
+
const hasRowWrapper = hasIndependentToggle || hasActions;
|
|
438
472
|
let itemElement;
|
|
439
|
-
if (
|
|
473
|
+
if (hasRowWrapper) {
|
|
474
|
+
// aria-expanded/-controls stay on the primary element only when the
|
|
475
|
+
// whole row is the collapse toggle (no independent chevron button).
|
|
476
|
+
const rowPrimaryAriaProps = hasIndependentToggle ? {
|
|
477
|
+
'aria-current': isSelected ? 'page' : undefined
|
|
478
|
+
} : {
|
|
479
|
+
'aria-current': isSelected ? 'page' : undefined,
|
|
480
|
+
'aria-disabled': isDisabled || undefined,
|
|
481
|
+
'aria-expanded': isItemCollapsible ? !isItemCollapsed : undefined,
|
|
482
|
+
'aria-controls': isItemCollapsible ? `${id}-children` : undefined
|
|
483
|
+
};
|
|
440
484
|
itemElement = /*#__PURE__*/_jsxs("div", {
|
|
441
485
|
"data-testid": testId,
|
|
442
|
-
...rowProps,
|
|
486
|
+
...(hasActions ? actionsRowProps : rowProps),
|
|
443
487
|
children: [/*#__PURE__*/_jsx(NavItemElement, {
|
|
444
488
|
ref: ref,
|
|
445
489
|
href: href,
|
|
@@ -447,10 +491,13 @@ export function SideNavItem({
|
|
|
447
491
|
isDisabled: isDisabled,
|
|
448
492
|
onClick: handleClick,
|
|
449
493
|
...rest,
|
|
450
|
-
|
|
451
|
-
...
|
|
494
|
+
...rowPrimaryAriaProps,
|
|
495
|
+
...(hasActions ?
|
|
496
|
+
// The wrapper rings for this element; suppressing here is what
|
|
497
|
+
// keeps the UA's own ring from painting inside that one.
|
|
498
|
+
focusOutlineProps.suppressed(styles.splitAction) : focusOutlineProps.focusVisible(styles.splitAction)),
|
|
452
499
|
children: itemContent
|
|
453
|
-
}), /*#__PURE__*/_jsx("button", {
|
|
500
|
+
}), hasIndependentToggle && /*#__PURE__*/_jsx("button", {
|
|
454
501
|
type: "button",
|
|
455
502
|
onClick: handleToggleClick,
|
|
456
503
|
"aria-label": isItemCollapsed ? t('@astryx.sideNavItem.expand', {
|
|
@@ -460,13 +507,21 @@ export function SideNavItem({
|
|
|
460
507
|
}),
|
|
461
508
|
"aria-expanded": !isItemCollapsed,
|
|
462
509
|
"aria-controls": `${id}-children`,
|
|
463
|
-
...focusOutlineProps.focusVisible(styles.expandToggle),
|
|
510
|
+
...focusOutlineProps.focusVisible(styles.expandToggle, interactionOverlayStyles.backgroundColor),
|
|
464
511
|
children: /*#__PURE__*/_jsx(Icon, {
|
|
465
512
|
icon: "chevronDown",
|
|
466
513
|
size: "lg",
|
|
467
514
|
color: "inherit",
|
|
468
515
|
xstyle: [styles.expandChevron, !isItemCollapsed && styles.expandChevronExpanded]
|
|
469
516
|
})
|
|
517
|
+
}), hasActions && /*#__PURE__*/_jsx("span", {
|
|
518
|
+
...{
|
|
519
|
+
className: "x2lah0s x78zum5 x6s0dn4 xzye2dw x67bb7w"
|
|
520
|
+
},
|
|
521
|
+
children: /*#__PURE__*/_jsx(SizeProvider, {
|
|
522
|
+
value: ROW_CONTROL_SIZE,
|
|
523
|
+
children: actions
|
|
524
|
+
})
|
|
470
525
|
})]
|
|
471
526
|
});
|
|
472
527
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Slider.d.ts","sourceRoot":"","sources":["../../src/Slider/Slider.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Slider.d.ts","sourceRoot":"","sources":["../../src/Slider/Slider.tsx"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAQhD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAQ9C,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAC3C,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,CACX;IACC,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,8FAA8F;IAC9F,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oDAAoD;IACpD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oDAAoD;IACpD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uCAAuC;IACvC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gCAAgC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC,uEAAuE;IACvE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,6DAA6D;IAC7D,YAAY,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAC3C,8DAA8D;IAC9D,KAAK,CAAC,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,iEAAiE;IACjE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,8CAA8C;IAC9C,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IAC7C,iEAAiE;IACjE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IAChD,8CAA8C;IAC9C,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;AAoS/D;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CAAC,EAAC,GAAG,EAAE,GAAG,KAAK,EAAC,EAAE,WAAW,+BAgqBlD;yBAhqBe,MAAM"}
|
package/dist/Slider/Slider.js
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* - /apps/storybook/stories/Slider.stories.tsx
|
|
16
16
|
* - /packages/cli/assets/templates/blocks/components/Slider/ (showcase blocks)
|
|
17
17
|
*/
|
|
18
|
-
import { useId, useMemo, useRef, useState, useCallback } from 'react';
|
|
18
|
+
import { useEffect, useId, useMemo, useRef, useState, useCallback } from 'react';
|
|
19
19
|
import * as stylex from '@stylexjs/stylex';
|
|
20
20
|
import "../theme/tokens.stylex.js";
|
|
21
21
|
import { colorVars, spacingVars, radiusVars, durationVars, easeVars, typographyVars, typeScaleVars } from "../theme/tokens.stylex.js";
|
|
@@ -25,6 +25,7 @@ import { useTooltip } from "../Tooltip/index.js";
|
|
|
25
25
|
import { VisuallyHidden } from "../VisuallyHidden/index.js";
|
|
26
26
|
import { mergeProps, rtlStyles } from "../utils/index.js";
|
|
27
27
|
import { focusOutlineStyles } from "../utils/focusOutline.stylex.js";
|
|
28
|
+
import { getInteractionModality, trackInteractionModality } from "../utils/interactionModality.js";
|
|
28
29
|
import { isRtlElement } from "../hooks/isRtlElement.js";
|
|
29
30
|
import { themeProps } from "../utils/themeProps.js";
|
|
30
31
|
import { useMergedRefs } from "../hooks/useMergedRefs.js";
|
|
@@ -249,6 +250,24 @@ export function Slider({
|
|
|
249
250
|
const draggingThumbRef = useRef(null);
|
|
250
251
|
const [draggingThumb, setDraggingThumb] = useState(null);
|
|
251
252
|
|
|
253
|
+
// A thumb is a div[role="slider"], and `handlePointerDown` focuses it from
|
|
254
|
+
// script after preventDefault — which Chromium treats as focus-visible, so
|
|
255
|
+
// dragging with a mouse drew the keyboard ring (measured: `:focus-visible`
|
|
256
|
+
// true on pointerdown). Gate the ring on how the user last interacted; the
|
|
257
|
+
// CSS condition stays `:focus-visible`, this only narrows it.
|
|
258
|
+
const [keyboardFocusThumb, setKeyboardFocusThumb] = useState(null);
|
|
259
|
+
useEffect(() => {
|
|
260
|
+
trackInteractionModality();
|
|
261
|
+
}, []);
|
|
262
|
+
const handleThumbFocus = useCallback((thumbIndex, _e) => {
|
|
263
|
+
// A disabled thumb draws no ring even when it stays focusable for its
|
|
264
|
+
// reason tooltip, so there is nothing to track for one.
|
|
265
|
+
setKeyboardFocusThumb(!isDisabled && getInteractionModality() === 'keyboard' ? thumbIndex : null);
|
|
266
|
+
}, [isDisabled]);
|
|
267
|
+
const handleThumbBlur = useCallback(_e => {
|
|
268
|
+
setKeyboardFocusThumb(null);
|
|
269
|
+
}, []);
|
|
270
|
+
|
|
252
271
|
// Disabled-reason tooltip. This is a *separate* useTooltip instance from the
|
|
253
272
|
// per-thumb value bubble (the `<Tooltip>` component below): it anchors to the
|
|
254
273
|
// track container and fires on hover/focus of the whole control. Disabled
|
|
@@ -387,6 +406,10 @@ export function Slider({
|
|
|
387
406
|
const thumbs = track.querySelectorAll('[role="slider"]');
|
|
388
407
|
thumbs[thumbIndex]?.focus();
|
|
389
408
|
}
|
|
409
|
+
// Also clear it explicitly: focusing an already-focused thumb fires no
|
|
410
|
+
// focus event, so a thumb the user had tabbed to would keep its ring
|
|
411
|
+
// through the drag.
|
|
412
|
+
setKeyboardFocusThumb(null);
|
|
390
413
|
if (typeof e.currentTarget.setPointerCapture === 'function') {
|
|
391
414
|
e.currentTarget.setPointerCapture(e.pointerId);
|
|
392
415
|
}
|
|
@@ -411,6 +434,13 @@ export function Slider({
|
|
|
411
434
|
if (isDisabled) {
|
|
412
435
|
return;
|
|
413
436
|
}
|
|
437
|
+
// Unlike a text field, a thumb has no caret to show where input is
|
|
438
|
+
// going, so a keypress after a mouse drag must bring the ring back.
|
|
439
|
+
// Ask the utility rather than assuming: a modifier chord (⌘R, ⌃C) is
|
|
440
|
+
// not navigation and must not re-ring a thumb the mouse is holding.
|
|
441
|
+
if (getInteractionModality() === 'keyboard') {
|
|
442
|
+
setKeyboardFocusThumb(thumbIndex);
|
|
443
|
+
}
|
|
414
444
|
const currentVal = values[thumbIndex];
|
|
415
445
|
let newVal;
|
|
416
446
|
switch (e.key) {
|
|
@@ -517,10 +547,12 @@ export function Slider({
|
|
|
517
547
|
"aria-labelledby": !isRange ? labelID : undefined,
|
|
518
548
|
"aria-describedby": ariaDescribedBy,
|
|
519
549
|
onKeyDown: e => handleKeyDown(thumbIndex, e),
|
|
550
|
+
onFocus: e => handleThumbFocus(thumbIndex, e),
|
|
551
|
+
onBlur: handleThumbBlur,
|
|
520
552
|
...mergeProps(themeProps('slider-thumb', {
|
|
521
553
|
orientation,
|
|
522
554
|
disabled: isDisabled ? 'disabled' : null
|
|
523
|
-
}), stylex.props(styles.thumb, isHorizontal ? styles.thumbHorizontal : rtlStyles.centerInline('50%'), !isDisabled && styles.thumbHover, !isDisabled && focusOutlineStyles.focusVisible, isDisabled && styles.thumbDisabled), undefined, positionStyle)
|
|
555
|
+
}), stylex.props(styles.thumb, isHorizontal ? styles.thumbHorizontal : rtlStyles.centerInline('50%'), !isDisabled && styles.thumbHover, !isDisabled && keyboardFocusThumb === thumbIndex && focusOutlineStyles.focusVisible, isDisabled && styles.thumbDisabled), undefined, positionStyle)
|
|
524
556
|
}, thumbIndex);
|
|
525
557
|
if (useValueTooltip) {
|
|
526
558
|
return /*#__PURE__*/_jsx(Tooltip, {
|
|
@@ -37,7 +37,9 @@ export interface SpinnerProps extends BaseProps<HTMLSpanElement> {
|
|
|
37
37
|
/** Ref forwarded to the root element */
|
|
38
38
|
ref?: React.Ref<HTMLSpanElement>;
|
|
39
39
|
/**
|
|
40
|
-
* Spinner size.
|
|
40
|
+
* Spinner size. The diameter is the ring itself; the rendered box adds the
|
|
41
|
+
* stroke width on each side (xl draws a 28px ring in a 36px box). A theme can
|
|
42
|
+
* redefine what each named size resolves to — see `--spinner-diameter`.
|
|
41
43
|
* - 'sm': 10px diameter
|
|
42
44
|
* - 'md': 14px diameter
|
|
43
45
|
* - 'lg': 18px diameter
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Spinner.d.ts","sourceRoot":"","sources":["../../src/Spinner/Spinner.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAQ,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAG5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Spinner.d.ts","sourceRoot":"","sources":["../../src/Spinner/Spinner.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAQ,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAG5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAyB5C,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;;CAKV,CAAC;AA4TF,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,KAAK,CAAC;AAE7C,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAExE,MAAM,WAAW,YAAa,SAAQ,SAAS,CAAC,eAAe,CAAC;IAC9D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACjC;;;;;;;;;OASG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,CAAC,EACtB,IAAW,EACX,KAAiB,EACjB,KAAK,EACL,MAAM,EACN,SAAS,EACT,KAAK,EACL,YAAY,EAAE,SAAS,EACvB,aAAa,EAAE,MAAM,EACrB,GAAG,EACH,GAAG,SAAS,EACb,EAAE,YAAY,+BAuHd;yBAlIe,OAAO"}
|