@primer/react-brand 0.75.0-rc.c3abcc84 → 0.75.0
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/docs/index.md +2 -2
- package/esm/Accordion/Accordion.d.ts +2 -2
- package/esm/Accordion/Accordion.d.ts.map +1 -1
- package/esm/Accordion/Accordion.js +2 -2
- package/esm/Accordion/Accordion.js.map +1 -1
- package/esm/Accordion/Accordion.module.js +6 -5
- package/esm/ActionMenu/ActionMenu.d.ts +2 -2
- package/esm/ActionMenu/ActionMenu.js +3 -2
- package/esm/ActionMenu/ActionMenu.js.map +1 -1
- package/esm/ActionMenu/ActionMenu.module.js +7 -6
- package/esm/AnchorNav/AnchorNav.d.ts +4 -4
- package/esm/AnchorNav/AnchorNav.d.ts.map +1 -1
- package/esm/AnchorNav/AnchorNav.js +9 -4
- package/esm/AnchorNav/AnchorNav.js.map +1 -1
- package/esm/AnchorNav/AnchorNav.module.js +5 -4
- package/esm/AnchorNav/useExpandedMenu.js.map +1 -1
- package/esm/Avatar/Avatar.js +1 -1
- package/esm/Avatar/Avatar.js.map +1 -1
- package/esm/Avatar/Avatar.module.js +5 -4
- package/esm/Bento/Bento.d.ts +4 -4
- package/esm/Bento/Bento.js +1 -1
- package/esm/Bento/Bento.js.map +1 -1
- package/esm/Bento/Bento.module.js +7 -6
- package/esm/Box/Box.d.ts +1 -1
- package/esm/Box/Box.d.ts.map +1 -1
- package/esm/Box/Box.js +1 -1
- package/esm/Box/Box.js.map +1 -1
- package/esm/Breadcrumbs/Breadcrumbs.js +1 -1
- package/esm/Breadcrumbs/Breadcrumbs.js.map +1 -1
- package/esm/Breadcrumbs/Breadcrumbs.module.js +7 -6
- package/esm/BreakoutBanner/BreakoutBanner.js +1 -1
- package/esm/BreakoutBanner/BreakoutBanner.js.map +1 -1
- package/esm/BreakoutBanner/BreakoutBanner.module.js +5 -4
- package/esm/Button/Button.js +1 -1
- package/esm/Button/Button.js.map +1 -1
- package/esm/Button/Button.module.js +5 -4
- package/esm/ButtonGroup/ButtonGroup.js +1 -1
- package/esm/ButtonGroup/ButtonGroup.js.map +1 -1
- package/esm/ButtonGroup/ButtonGroup.module.js +3 -2
- package/esm/CTABanner/CTABanner.d.ts +1 -1
- package/esm/CTABanner/CTABanner.js +2 -2
- package/esm/CTABanner/CTABanner.js.map +1 -1
- package/esm/CTABanner/CTABanner.module.js +4 -3
- package/esm/CTAForm/CTAForm.js +1 -1
- package/esm/CTAForm/CTAForm.js.map +1 -1
- package/esm/CTAForm/CTAForm.module.js +4 -3
- package/esm/Card/Card.d.ts +2 -2
- package/esm/Card/Card.d.ts.map +1 -1
- package/esm/Card/Card.js +3 -3
- package/esm/Card/Card.js.map +1 -1
- package/esm/Card/Card.module.js +18 -17
- package/esm/ComparisonTable/ComparisonTable.d.ts +3 -3
- package/esm/ComparisonTable/ComparisonTable.js +1 -1
- package/esm/ComparisonTable/ComparisonTable.js.map +1 -1
- package/esm/ComparisonTable/ComparisonTable.module.js +4 -3
- package/esm/ExpandableArrow/ExpandableArrow.d.ts +2 -1
- package/esm/ExpandableArrow/ExpandableArrow.d.ts.map +1 -1
- package/esm/ExpandableArrow/ExpandableArrow.js +1 -1
- package/esm/ExpandableArrow/ExpandableArrow.js.map +1 -1
- package/esm/ExpandableArrow/ExpandableArrow.module.js +4 -3
- package/esm/EyebrowBanner/EyebrowBanner.js +2 -2
- package/esm/EyebrowBanner/EyebrowBanner.js.map +1 -1
- package/esm/EyebrowBanner/EyebrowBanner.module.js +12 -11
- package/esm/EyebrowText/EyebrowText.js +1 -1
- package/esm/EyebrowText/EyebrowText.js.map +1 -1
- package/esm/EyebrowText/EyebrowText.module.js +4 -3
- package/esm/FAQ/FAQ.d.ts +2 -2
- package/esm/FAQ/FAQ.d.ts.map +1 -1
- package/esm/FAQ/FAQ.js +1 -1
- package/esm/FAQ/FAQ.js.map +1 -1
- package/esm/FAQ/FAQ.module.js +7 -6
- package/esm/FAQ/FAQGroup.d.ts +2 -2
- package/esm/FAQ/FAQGroup.d.ts.map +1 -1
- package/esm/FAQ/FAQGroup.js +7 -3
- package/esm/FAQ/FAQGroup.js.map +1 -1
- package/esm/FAQ/FAQGroup.module.js +8 -7
- package/esm/Footnotes/Footnotes.d.ts +2 -2
- package/esm/Footnotes/Footnotes.d.ts.map +1 -1
- package/esm/Footnotes/Footnotes.js +2 -2
- package/esm/Footnotes/Footnotes.js.map +1 -1
- package/esm/Footnotes/Footnotes.module.js +7 -6
- package/esm/FrostedGlassVFX/FrostedGlassVFX.d.ts +1 -1
- package/esm/FrostedGlassVFX/FrostedGlassVFX.d.ts.map +1 -1
- package/esm/FrostedGlassVFX/FrostedGlassVFX.js +1 -1
- package/esm/FrostedGlassVFX/FrostedGlassVFX.js.map +1 -1
- package/esm/FrostedGlassVFX/FrostedGlassVFX.module.js +4 -3
- package/esm/Grid/Grid.d.ts +2 -2
- package/esm/Grid/Grid.js +2 -2
- package/esm/Grid/Grid.js.map +1 -1
- package/esm/Grid/Grid.module.js +5 -4
- package/esm/Heading/Heading.js +1 -1
- package/esm/Heading/Heading.js.map +1 -1
- package/esm/Heading/Heading.module.js +4 -3
- package/esm/Hero/Hero.js +1 -1
- package/esm/Hero/Hero.js.map +1 -1
- package/esm/Hero/Hero.module.js +4 -3
- package/esm/Hero/HeroContext.js.map +1 -1
- package/esm/Hero/sub-components/HeroButtonGroup.js +1 -1
- package/esm/Hero/sub-components/HeroButtonGroup.js.map +1 -1
- package/esm/Hero/sub-components/HeroDescription.js +1 -1
- package/esm/Hero/sub-components/HeroDescription.js.map +1 -1
- package/esm/Hero/sub-components/HeroEyebrow.js +1 -1
- package/esm/Hero/sub-components/HeroEyebrow.js.map +1 -1
- package/esm/Hero/sub-components/HeroHeading.js +1 -1
- package/esm/Hero/sub-components/HeroHeading.js.map +1 -1
- package/esm/Hero/sub-components/HeroImage.js +1 -1
- package/esm/Hero/sub-components/HeroImage.js.map +1 -1
- package/esm/Hero/sub-components/HeroLabel.js +1 -1
- package/esm/Hero/sub-components/HeroLabel.js.map +1 -1
- package/esm/Hero/sub-components/HeroPrimaryAction.js.map +1 -1
- package/esm/Hero/sub-components/HeroSecondaryAction.js.map +1 -1
- package/esm/Hero/sub-components/HeroVideo.js +2 -2
- package/esm/Hero/sub-components/HeroVideo.js.map +1 -1
- package/esm/IDE/IDE.d.ts +1 -1
- package/esm/IDE/IDE.js +3 -2
- package/esm/IDE/IDE.js.map +1 -1
- package/esm/IDE/IDE.module.js +8 -7
- package/esm/Icon/Icon.d.ts +2 -2
- package/esm/Icon/Icon.d.ts.map +1 -1
- package/esm/Icon/Icon.js +2 -2
- package/esm/Icon/Icon.js.map +1 -1
- package/esm/Icon/Icon.module.js +4 -3
- package/esm/Image/Image.d.ts +1 -1
- package/esm/Image/Image.d.ts.map +1 -1
- package/esm/Image/Image.js +1 -1
- package/esm/Image/Image.js.map +1 -1
- package/esm/Image/Image.module.js +5 -4
- package/esm/InlineCode/InlineCode.js +1 -1
- package/esm/InlineCode/InlineCode.js.map +1 -1
- package/esm/InlineCode/InlineCode.module.js +5 -4
- package/esm/InlineLink/InlineLink.js +2 -2
- package/esm/InlineLink/InlineLink.js.map +1 -1
- package/esm/InlineLink/InlineLink.module.js +3 -2
- package/esm/Label/Label.js +1 -1
- package/esm/Label/Label.js.map +1 -1
- package/esm/Label/Label.module.js +6 -5
- package/esm/Link/Link.d.ts +1 -1
- package/esm/Link/Link.d.ts.map +1 -1
- package/esm/Link/Link.js +2 -2
- package/esm/Link/Link.js.map +1 -1
- package/esm/Link/Link.module.js +4 -3
- package/esm/LogoSuite/LogoSuite.d.ts +1 -1
- package/esm/LogoSuite/LogoSuite.js +4 -3
- package/esm/LogoSuite/LogoSuite.js.map +1 -1
- package/esm/LogoSuite/LogoSuite.module.js +11 -10
- package/esm/MediaPlaylist/MediaPlaylist.d.ts +4 -4
- package/esm/MediaPlaylist/MediaPlaylist.d.ts.map +1 -1
- package/esm/MediaPlaylist/MediaPlaylist.js +1 -1
- package/esm/MediaPlaylist/MediaPlaylist.js.map +1 -1
- package/esm/MediaPlaylist/MediaPlaylist.module.js +25 -24
- package/esm/MediaPlaylist/useMediaPlaylist.js.map +1 -1
- package/esm/MinimalFooter/MinimalFooter.d.ts +3 -3
- package/esm/MinimalFooter/MinimalFooter.d.ts.map +1 -1
- package/esm/MinimalFooter/MinimalFooter.js +4 -3
- package/esm/MinimalFooter/MinimalFooter.js.map +1 -1
- package/esm/MinimalFooter/MinimalFooter.module.js +15 -14
- package/esm/MinimalVideoPlayer/MinimalVideoPlayer.js +2 -2
- package/esm/MinimalVideoPlayer/MinimalVideoPlayer.js.map +1 -1
- package/esm/MinimalVideoPlayer/MinimalVideoPlayer.module.js +6 -5
- package/esm/MinimalVideoPlayer/useMinimalVideoPlayback.js.map +1 -1
- package/esm/NavList/NavList.js +2 -2
- package/esm/NavList/NavList.js.map +1 -1
- package/esm/NavList/NavList.module.js +18 -17
- package/esm/Pagination/Pagination.d.ts +1 -1
- package/esm/Pagination/Pagination.d.ts.map +1 -1
- package/esm/Pagination/Pagination.js +1 -1
- package/esm/Pagination/Pagination.js.map +1 -1
- package/esm/Pagination/Pagination.module.js +11 -10
- package/esm/Pagination/model.js.map +1 -1
- package/esm/Pillar/Pillar.d.ts +2 -2
- package/esm/Pillar/Pillar.d.ts.map +1 -1
- package/esm/Pillar/Pillar.js +1 -1
- package/esm/Pillar/Pillar.js.map +1 -1
- package/esm/Pillar/Pillar.module.js +9 -8
- package/esm/PricingOptions/PricingOptions.d.ts +1 -1
- package/esm/PricingOptions/PricingOptions.js +5 -3
- package/esm/PricingOptions/PricingOptions.js.map +1 -1
- package/esm/PricingOptions/PricingOptions.module.js +13 -12
- package/esm/Prose/Prose.js +1 -1
- package/esm/Prose/Prose.js.map +1 -1
- package/esm/Prose/Prose.module.js +4 -3
- package/esm/Section/Section.js +1 -1
- package/esm/Section/Section.js.map +1 -1
- package/esm/Section/Section.module.js +5 -4
- package/esm/SectionIntro/SectionIntro.js +1 -1
- package/esm/SectionIntro/SectionIntro.js.map +1 -1
- package/esm/SectionIntro/SectionIntro.module.js +4 -3
- package/esm/SectionIntroStacked/SectionIntroStacked.d.ts +3 -3
- package/esm/SectionIntroStacked/SectionIntroStacked.js +1 -1
- package/esm/SectionIntroStacked/SectionIntroStacked.js.map +1 -1
- package/esm/SectionIntroStacked/SectionIntroStacked.module.js +6 -5
- package/esm/Stack/Stack.js +1 -1
- package/esm/Stack/Stack.js.map +1 -1
- package/esm/Stack/Stack.module.js +4 -3
- package/esm/Statistic/Statistic.js +1 -1
- package/esm/Statistic/Statistic.js.map +1 -1
- package/esm/Statistic/Statistic.module.js +6 -5
- package/esm/SubNav/SubNav.d.ts +4 -4
- package/esm/SubNav/SubNav.d.ts.map +1 -1
- package/esm/SubNav/SubNav.js +6 -4
- package/esm/SubNav/SubNav.js.map +1 -1
- package/esm/SubNav/SubNav.module.js +9 -8
- package/esm/SubNav/useContainsFocus.js.map +1 -1
- package/esm/SubdomainNavBar/NavigationVisbilityObserver.js +4 -3
- package/esm/SubdomainNavBar/NavigationVisbilityObserver.js.map +1 -1
- package/esm/SubdomainNavBar/SubdomainNavBar.d.ts +3 -3
- package/esm/SubdomainNavBar/SubdomainNavBar.d.ts.map +1 -1
- package/esm/SubdomainNavBar/SubdomainNavBar.js +6 -2
- package/esm/SubdomainNavBar/SubdomainNavBar.js.map +1 -1
- package/esm/SubdomainNavBar/SubdomainNavBar.module.js +4 -3
- package/esm/SubdomainNavBar/SubdomainNavBarLinkContext.js.map +1 -1
- package/esm/SubdomainNavBar/useSearchKeyboardShortcut.js +2 -2
- package/esm/SubdomainNavBar/useSearchKeyboardShortcut.js.map +1 -1
- package/esm/SubdomainNavBar/useSearchResults.js.map +1 -1
- package/esm/SubdomainNavBar/useVisibilityObserver.js.map +1 -1
- package/esm/Tabs/Tabs.js +3 -2
- package/esm/Tabs/Tabs.js.map +1 -1
- package/esm/Tabs/Tabs.module.js +12 -11
- package/esm/Testimonial/Testimonial.d.ts +1 -1
- package/esm/Testimonial/Testimonial.d.ts.map +1 -1
- package/esm/Testimonial/Testimonial.js +1 -1
- package/esm/Testimonial/Testimonial.js.map +1 -1
- package/esm/Testimonial/Testimonial.module.js +8 -7
- package/esm/Text/Text.d.ts +1 -1
- package/esm/Text/Text.d.ts.map +1 -1
- package/esm/Text/Text.js +1 -1
- package/esm/Text/Text.js.map +1 -1
- package/esm/Text/Text.module.js +4 -3
- package/esm/TextCursorAnimation/TextCursorAnimation.d.ts +1 -1
- package/esm/TextCursorAnimation/TextCursorAnimation.d.ts.map +1 -1
- package/esm/TextCursorAnimation/TextCursorAnimation.js +1 -1
- package/esm/TextCursorAnimation/TextCursorAnimation.js.map +1 -1
- package/esm/TextCursorAnimation/TextCursorAnimation.module.js +10 -9
- package/esm/ThemeProvider/ThemeProvider.d.ts +1 -1
- package/esm/ThemeProvider/ThemeProvider.d.ts.map +1 -1
- package/esm/ThemeProvider/ThemeProvider.js +4 -4
- package/esm/ThemeProvider/ThemeProvider.js.map +1 -1
- package/esm/ThemeProvider/useTheme.js.map +1 -1
- package/esm/Tiles/Tiles.js +2 -2
- package/esm/Tiles/Tiles.js.map +1 -1
- package/esm/Tiles/Tiles.module.js +4 -3
- package/esm/Timeline/Timeline.d.ts +3 -3
- package/esm/Timeline/Timeline.d.ts.map +1 -1
- package/esm/Timeline/Timeline.js +2 -2
- package/esm/Timeline/Timeline.js.map +1 -1
- package/esm/Timeline/Timeline.module.js +5 -4
- package/esm/Token/Token.js +1 -1
- package/esm/Token/Token.js.map +1 -1
- package/esm/Token/Token.module.js +6 -5
- package/esm/Tooltip/Tooltip.js +2 -2
- package/esm/Tooltip/Tooltip.js.map +1 -1
- package/esm/Tooltip/Tooltip.module.js +4 -3
- package/esm/VideoPlayer/VideoPlayer.d.ts +2 -2
- package/esm/VideoPlayer/VideoPlayer.js +2 -2
- package/esm/VideoPlayer/VideoPlayer.js.map +1 -1
- package/esm/VideoPlayer/VideoPlayer.module.js +29 -28
- package/esm/VideoPlayer/components/CCButton/CCButton.d.ts +2 -2
- package/esm/VideoPlayer/components/CCButton/CCButton.d.ts.map +1 -1
- package/esm/VideoPlayer/components/CCButton/CCButton.js +1 -1
- package/esm/VideoPlayer/components/CCButton/CCButton.js.map +1 -1
- package/esm/VideoPlayer/components/Captions/Captions.d.ts +2 -2
- package/esm/VideoPlayer/components/Captions/Captions.d.ts.map +1 -1
- package/esm/VideoPlayer/components/Captions/Captions.js +1 -1
- package/esm/VideoPlayer/components/Captions/Captions.js.map +1 -1
- package/esm/VideoPlayer/components/Captions/Captions.module.js +5 -4
- package/esm/VideoPlayer/components/ControlsBar/ControlsBar.d.ts +2 -2
- package/esm/VideoPlayer/components/ControlsBar/ControlsBar.d.ts.map +1 -1
- package/esm/VideoPlayer/components/ControlsBar/ControlsBar.js +1 -1
- package/esm/VideoPlayer/components/ControlsBar/ControlsBar.js.map +1 -1
- package/esm/VideoPlayer/components/FullScreenButton/FullScreenButton.d.ts +2 -2
- package/esm/VideoPlayer/components/FullScreenButton/FullScreenButton.d.ts.map +1 -1
- package/esm/VideoPlayer/components/FullScreenButton/FullScreenButton.js +2 -1
- package/esm/VideoPlayer/components/FullScreenButton/FullScreenButton.js.map +1 -1
- package/esm/VideoPlayer/components/IconControl/IconControl.d.ts +2 -2
- package/esm/VideoPlayer/components/IconControl/IconControl.d.ts.map +1 -1
- package/esm/VideoPlayer/components/IconControl/IconControl.js +1 -1
- package/esm/VideoPlayer/components/IconControl/IconControl.js.map +1 -1
- package/esm/VideoPlayer/components/MuteButton/MuteButton.d.ts +2 -2
- package/esm/VideoPlayer/components/MuteButton/MuteButton.d.ts.map +1 -1
- package/esm/VideoPlayer/components/MuteButton/MuteButton.js +2 -1
- package/esm/VideoPlayer/components/MuteButton/MuteButton.js.map +1 -1
- package/esm/VideoPlayer/components/PauseIcon/PauseIcon.d.ts +2 -2
- package/esm/VideoPlayer/components/PauseIcon/PauseIcon.d.ts.map +1 -1
- package/esm/VideoPlayer/components/PauseIcon/PauseIcon.js.map +1 -1
- package/esm/VideoPlayer/components/PlayIcon/PlayIcon.d.ts +2 -2
- package/esm/VideoPlayer/components/PlayIcon/PlayIcon.d.ts.map +1 -1
- package/esm/VideoPlayer/components/PlayIcon/PlayIcon.js.map +1 -1
- package/esm/VideoPlayer/components/PlayPauseButton/PlayPauseButton.d.ts +2 -2
- package/esm/VideoPlayer/components/PlayPauseButton/PlayPauseButton.d.ts.map +1 -1
- package/esm/VideoPlayer/components/PlayPauseButton/PlayPauseButton.js.map +1 -1
- package/esm/VideoPlayer/components/Range/Range.d.ts +1 -1
- package/esm/VideoPlayer/components/Range/Range.d.ts.map +1 -1
- package/esm/VideoPlayer/components/Range/Range.js +1 -1
- package/esm/VideoPlayer/components/Range/Range.js.map +1 -1
- package/esm/VideoPlayer/components/SeekControl/SeekControl.d.ts +2 -2
- package/esm/VideoPlayer/components/SeekControl/SeekControl.d.ts.map +1 -1
- package/esm/VideoPlayer/components/SeekControl/SeekControl.js +1 -1
- package/esm/VideoPlayer/components/SeekControl/SeekControl.js.map +1 -1
- package/esm/VideoPlayer/components/VideoTooltip/VideoTooltip.d.ts +2 -2
- package/esm/VideoPlayer/components/VideoTooltip/VideoTooltip.d.ts.map +1 -1
- package/esm/VideoPlayer/components/VideoTooltip/VideoTooltip.js +3 -2
- package/esm/VideoPlayer/components/VideoTooltip/VideoTooltip.js.map +1 -1
- package/esm/VideoPlayer/components/VolumeControl/VolumeControl.d.ts +2 -1
- package/esm/VideoPlayer/components/VolumeControl/VolumeControl.d.ts.map +1 -1
- package/esm/VideoPlayer/components/VolumeControl/VolumeControl.js.map +1 -1
- package/esm/VideoPlayer/components/VolumeControl/VolumeControl.module.js +3 -2
- package/esm/VideoPlayer/hooks/useIsElementFullScreen.js.map +1 -1
- package/esm/VideoPlayer/hooks/useVideo.js.map +1 -1
- package/esm/VideoPlayer/hooks/useVideoResizeObserver.js.map +1 -1
- package/esm/animation/Animate/Animate.d.ts +1 -1
- package/esm/animation/Animate/Animate.d.ts.map +1 -1
- package/esm/animation/Animate/Animate.js +1 -1
- package/esm/animation/Animate/Animate.js.map +1 -1
- package/esm/animation/Animation.module.js +4 -3
- package/esm/animation/AnimationProvider/AnimationProvider.d.ts +1 -1
- package/esm/animation/AnimationProvider/AnimationProvider.d.ts.map +1 -1
- package/esm/animation/AnimationProvider/AnimationProvider.js.map +1 -1
- package/esm/animation/TextRevealAnimation/TextRevealAnimation.js +1 -1
- package/esm/animation/TextRevealAnimation/TextRevealAnimation.js.map +1 -1
- package/esm/animation/TextRevealAnimation/TextRevealAnimation.module.js +5 -4
- package/esm/animation/TextRevealAnimation/useTextRevealAnimationLines.js.map +1 -1
- package/esm/animation/useAnimation.js.map +1 -1
- package/esm/component-helpers/shared.module.js +3 -2
- package/esm/component-helpers.d.ts +2 -2
- package/esm/component-helpers.d.ts.map +1 -1
- package/esm/constants.js.map +1 -1
- package/esm/css/stylesheets.js +1 -1
- package/esm/findElementInChildren.js.map +1 -1
- package/esm/forms/Checkbox/Checkbox.js +2 -2
- package/esm/forms/Checkbox/Checkbox.js.map +1 -1
- package/esm/forms/Checkbox/Checkbox.module.js +4 -3
- package/esm/forms/ControlGroup/ControlGroup.js +3 -2
- package/esm/forms/ControlGroup/ControlGroup.js.map +1 -1
- package/esm/forms/ControlGroup/ControlGroup.module.js +7 -6
- package/esm/forms/FormControl/FormControl.d.ts +5 -5
- package/esm/forms/FormControl/FormControl.d.ts.map +1 -1
- package/esm/forms/FormControl/FormControl.js +4 -3
- package/esm/forms/FormControl/FormControl.js.map +1 -1
- package/esm/forms/FormControl/FormControl.module.js +5 -4
- package/esm/forms/Radio/Radio.js +1 -1
- package/esm/forms/Radio/Radio.js.map +1 -1
- package/esm/forms/Radio/Radio.module.js +4 -3
- package/esm/forms/Select/Select.d.ts +2 -2
- package/esm/forms/Select/Select.js +1 -1
- package/esm/forms/Select/Select.js.map +1 -1
- package/esm/forms/Select/Select.module.js +4 -3
- package/esm/forms/TextInput/TextInput.js +1 -1
- package/esm/forms/TextInput/TextInput.js.map +1 -1
- package/esm/forms/TextInput/TextInput.module.js +5 -4
- package/esm/forms/Textarea/Textarea.js +1 -1
- package/esm/forms/Textarea/Textarea.js.map +1 -1
- package/esm/forms/Textarea/Textarea.module.js +4 -3
- package/esm/hooks/useAnchoredPosition.js +7 -4
- package/esm/hooks/useAnchoredPosition.js.map +1 -1
- package/esm/hooks/useCursorAnimation.js +4 -2
- package/esm/hooks/useCursorAnimation.js.map +1 -1
- package/esm/hooks/useFocusTrap.js.map +1 -1
- package/esm/hooks/useId.js.map +1 -1
- package/esm/hooks/useKeyboardEscape.js.map +1 -1
- package/esm/hooks/useOnClickOutside.js.map +1 -1
- package/esm/hooks/useReducedMotion.js +1 -1
- package/esm/hooks/useReducedMotion.js.map +1 -1
- package/esm/hooks/useRef.js.map +1 -1
- package/esm/hooks/useResizeObserver.js.map +1 -1
- package/esm/hooks/useTabs.js +1 -1
- package/esm/hooks/useTabs.js.map +1 -1
- package/esm/hooks/useWindowSize.js +7 -7
- package/esm/hooks/useWindowSize.js.map +1 -1
- package/esm/list/ListItem/ListItem.js +4 -2
- package/esm/list/ListItem/ListItem.js.map +1 -1
- package/esm/list/ListItem/ListItem.module.js +5 -4
- package/esm/list/OrderedList/OrderedList.d.ts +2 -2
- package/esm/list/OrderedList/OrderedList.d.ts.map +1 -1
- package/esm/list/OrderedList/OrderedList.js +1 -1
- package/esm/list/OrderedList/OrderedList.js.map +1 -1
- package/esm/list/OrderedList/OrderedList.module.js +3 -2
- package/esm/list/UnorderedList/UnorderedList.d.ts +2 -2
- package/esm/list/UnorderedList/UnorderedList.d.ts.map +1 -1
- package/esm/list/UnorderedList/UnorderedList.js +1 -1
- package/esm/list/UnorderedList/UnorderedList.js.map +1 -1
- package/esm/list/list-shared.module.js +3 -2
- package/esm/list/listContext.js.map +1 -1
- package/esm/node_modules/@primer/octicons-react/dist/icons/AlertFillIcon.js +28 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/AlertFillIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/ArrowUpIcon.js +20 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/ArrowUpIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/ArrowUpRightIcon.js +20 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/ArrowUpRightIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/CheckCircleFillIcon.js +28 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/CheckCircleFillIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/CheckIcon.js +20 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/CheckIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/ChevronDownIcon.js +28 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/ChevronDownIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/ChevronLeftIcon.js +28 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/ChevronLeftIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/ChevronRightIcon.js +28 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/ChevronRightIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/ChevronUpIcon.js +28 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/ChevronUpIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/CopilotIcon.js +33 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/CopilotIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/DashIcon.js +20 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/DashIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/LinkExternalIcon.js +20 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/LinkExternalIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/MarkGithubIcon.js +20 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/MarkGithubIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/MuteIcon.js +20 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/MuteIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/PaperAirplaneIcon.js +20 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/PaperAirplaneIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/PauseIcon.js +20 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/PauseIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/PlayIcon.js +20 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/PlayIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/ReplyIcon.js +20 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/ReplyIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/ScreenFullIcon.js +20 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/ScreenFullIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/ScreenNormalIcon.js +20 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/ScreenNormalIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/SearchIcon.js +20 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/SearchIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/TriangleDownIcon.js +20 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/TriangleDownIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/TriangleUpIcon.js +20 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/TriangleUpIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/UnmuteIcon.js +20 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/UnmuteIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/XIcon.js +28 -0
- package/esm/node_modules/@primer/octicons-react/dist/icons/XIcon.js.map +1 -0
- package/esm/node_modules/@primer/octicons-react/dist/renderOcticon-DuMQdmQC.js +132 -0
- package/esm/node_modules/@primer/octicons-react/dist/renderOcticon-DuMQdmQC.js.map +1 -0
- package/esm/node_modules/clsx/dist/clsx.js +1 -1
- package/esm/node_modules/clsx/dist/clsx.js.map +1 -1
- package/esm/river/River/River.js +2 -2
- package/esm/river/River/River.js.map +1 -1
- package/esm/river/RiverAccordion/RiverAccordion.d.ts +4 -4
- package/esm/river/RiverAccordion/RiverAccordion.js +3 -2
- package/esm/river/RiverAccordion/RiverAccordion.js.map +1 -1
- package/esm/river/RiverAccordion/RiverAccordion.module.js +16 -15
- package/esm/river/RiverBreakout/RiverBreakout.d.ts +1 -1
- package/esm/river/RiverBreakout/RiverBreakout.js +1 -1
- package/esm/river/RiverBreakout/RiverBreakout.js.map +1 -1
- package/esm/river/RiverBreakoutTabs/RiverBreakoutTabs.d.ts +5 -5
- package/esm/river/RiverBreakoutTabs/RiverBreakoutTabs.js +2 -2
- package/esm/river/RiverBreakoutTabs/RiverBreakoutTabs.js.map +1 -1
- package/esm/river/RiverBreakoutTabs/RiverBreakoutTabs.module.js +31 -30
- package/esm/river/RiverStoryScroll/RiverStoryScroll.d.ts +1 -1
- package/esm/river/RiverStoryScroll/RiverStoryScroll.d.ts.map +1 -1
- package/esm/river/RiverStoryScroll/RiverStoryScroll.js +5 -3
- package/esm/river/RiverStoryScroll/RiverStoryScroll.js.map +1 -1
- package/esm/river/RiverStoryScroll/RiverStoryScroll.module.js +8 -7
- package/esm/river/RiverStoryScroll/RiverStoryScrollProvider.d.ts +2 -2
- package/esm/river/RiverStoryScroll/RiverStoryScrollProvider.d.ts.map +1 -1
- package/esm/river/RiverStoryScroll/RiverStoryScrollProvider.js.map +1 -1
- package/esm/river/RiverStoryScroll/RiverStoryScrollResponder.d.ts +1 -1
- package/esm/river/RiverStoryScroll/RiverStoryScrollResponder.d.ts.map +1 -1
- package/esm/river/RiverStoryScroll/RiverStoryScrollResponder.js +1 -1
- package/esm/river/RiverStoryScroll/RiverStoryScrollResponder.js.map +1 -1
- package/esm/river/RiverStoryScroll/RiverStoryScrollTracker.d.ts +1 -1
- package/esm/river/RiverStoryScroll/RiverStoryScrollTracker.d.ts.map +1 -1
- package/esm/river/RiverStoryScroll/RiverStoryScrollTracker.js +1 -1
- package/esm/river/RiverStoryScroll/RiverStoryScrollTracker.js.map +1 -1
- package/esm/river/river-shared.module.js +13 -12
- package/esm/utils/getTextContent.js.map +1 -1
- package/esm/utils/isFragmentElement.js.map +1 -1
- package/lib/Accordion/Accordion.d.ts +2 -2
- package/lib/ActionMenu/ActionMenu.d.ts +2 -2
- package/lib/AnchorNav/AnchorNav.d.ts +4 -4
- package/lib/Bento/Bento.d.ts +4 -4
- package/lib/Box/Box.d.ts +1 -1
- package/lib/CTABanner/CTABanner.d.ts +1 -1
- package/lib/Card/Card.d.ts +2 -2
- package/lib/ComparisonTable/ComparisonTable.d.ts +3 -3
- package/lib/ExpandableArrow/ExpandableArrow.d.ts +2 -1
- package/lib/FAQ/FAQ.d.ts +2 -2
- package/lib/FAQ/FAQGroup.d.ts +2 -2
- package/lib/Footnotes/Footnotes.d.ts +2 -2
- package/lib/FrostedGlassVFX/FrostedGlassVFX.d.ts +1 -1
- package/lib/Grid/Grid.d.ts +2 -2
- package/lib/IDE/IDE.d.ts +1 -1
- package/lib/Icon/Icon.d.ts +2 -2
- package/lib/Image/Image.d.ts +1 -1
- package/lib/Link/Link.d.ts +1 -1
- package/lib/LogoSuite/LogoSuite.d.ts +1 -1
- package/lib/MediaPlaylist/MediaPlaylist.d.ts +4 -4
- package/lib/MinimalFooter/MinimalFooter.d.ts +3 -3
- package/lib/Pagination/Pagination.d.ts +1 -1
- package/lib/Pillar/Pillar.d.ts +2 -2
- package/lib/PricingOptions/PricingOptions.d.ts +1 -1
- package/lib/SectionIntroStacked/SectionIntroStacked.d.ts +3 -3
- package/lib/SubNav/SubNav.d.ts +4 -4
- package/lib/SubdomainNavBar/SubdomainNavBar.d.ts +3 -3
- package/lib/Testimonial/Testimonial.d.ts +1 -1
- package/lib/Text/Text.d.ts +1 -1
- package/lib/TextCursorAnimation/TextCursorAnimation.d.ts +1 -1
- package/lib/ThemeProvider/ThemeProvider.d.ts +1 -1
- package/lib/Timeline/Timeline.d.ts +3 -3
- package/lib/VideoPlayer/VideoPlayer.d.ts +2 -2
- package/lib/VideoPlayer/components/CCButton/CCButton.d.ts +2 -2
- package/lib/VideoPlayer/components/Captions/Captions.d.ts +2 -2
- package/lib/VideoPlayer/components/ControlsBar/ControlsBar.d.ts +2 -2
- package/lib/VideoPlayer/components/FullScreenButton/FullScreenButton.d.ts +2 -2
- package/lib/VideoPlayer/components/IconControl/IconControl.d.ts +2 -2
- package/lib/VideoPlayer/components/MuteButton/MuteButton.d.ts +2 -2
- package/lib/VideoPlayer/components/PauseIcon/PauseIcon.d.ts +2 -2
- package/lib/VideoPlayer/components/PlayIcon/PlayIcon.d.ts +2 -2
- package/lib/VideoPlayer/components/PlayPauseButton/PlayPauseButton.d.ts +2 -2
- package/lib/VideoPlayer/components/Range/Range.d.ts +1 -1
- package/lib/VideoPlayer/components/SeekControl/SeekControl.d.ts +2 -2
- package/lib/VideoPlayer/components/VideoTooltip/VideoTooltip.d.ts +2 -2
- package/lib/VideoPlayer/components/VolumeControl/VolumeControl.d.ts +2 -1
- package/lib/animation/Animate/Animate.d.ts +1 -1
- package/lib/animation/AnimationProvider/AnimationProvider.d.ts +1 -1
- package/lib/component-helpers.d.ts +2 -2
- package/lib/css/main.css +148 -838
- package/lib/design-tokens/css/tokens/base/colors/color-scales-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/base/colors/light.css +1 -1
- package/lib/design-tokens/css/tokens/base/size/size.css +1 -1
- package/lib/design-tokens/css/tokens/base/typography/typography.css +1 -1
- package/lib/design-tokens/css/tokens/functional/animation/base.css +1 -1
- package/lib/design-tokens/css/tokens/functional/colors/global-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/colors/global.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/accordion/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/action-menu/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/anchor-nav/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/bento/base.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/blinking-cursor/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/breadcrumbs/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/button/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/card/base.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/card/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/card/colors.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/comparison-table/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/comparison-table/comparison-table.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/control/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/cta-banner/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/eyebrow-banner/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/eyebrow-banner/eyebrow-banner.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/faq/base.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/faq/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/faq/colors.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/faq/faq.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/footer/base.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/footer/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/footer/colors.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/frosted-glass-vfx/base.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/frosted-glass-vfx/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/grid/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/grid/colors.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/grid/grid.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/hero/base.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/icon/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/icon/colors.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/ide/base.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/ide/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/image/base.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/inline-code/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/inline-code/colors.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/inline-link/base.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/inline-link/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/inline-link/colors.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/label/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/label/colors.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/link/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/link/colors.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/logosuite/base.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/logosuite/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/logosuite/colors.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/media-playlist/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/media-playlist/colors.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/nav-list/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/pricing-options/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/pricing-options/colors.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/pricing-options/pricing-options.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/prose/base.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/prose/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/river/base.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/river/river.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/river-story-scroll/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/section/section.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/statistic/base.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/sub-nav/base.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/sub-nav/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/subdomain-nav-bar/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/tabs/base.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/tabs/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/tabs/colors.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/testimonial/base.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/testimonial/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/testimonial/colors.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/text-cursor-animation/base.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/text-cursor-animation/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/text-cursor-animation/colors.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/tiles/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/timeline/base.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/timeline/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/timeline/colors.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/token/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/token/colors.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/tooltip/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/tooltip/colors.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/video-player/base.css +1 -1
- package/lib/design-tokens/css/tokens/functional/components/video-player/colors-with-modes.css +1 -1
- package/lib/design-tokens/css/tokens/functional/size/border.css +1 -1
- package/lib/design-tokens/css/tokens/functional/size/breakpoints.css +1 -1
- package/lib/design-tokens/css/tokens/functional/size/size-coarse.css +1 -1
- package/lib/design-tokens/css/tokens/functional/size/size-fine.css +1 -1
- package/lib/design-tokens/css/tokens/functional/size/size.css +1 -1
- package/lib/design-tokens/css/tokens/functional/size/viewport.css +1 -1
- package/lib/design-tokens/css/tokens/functional/typography/typography-responsive.css +1 -1
- package/lib/design-tokens/css/tokens/functional/typography/typography.css +1 -1
- package/lib/design-tokens/js/module/tokens/base/colors/light.js +1 -1
- package/lib/design-tokens/js/module/tokens/base/size/size.js +1 -1
- package/lib/design-tokens/js/module/tokens/base/typography/typography.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/animation/base.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/colors/global.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/bento/base.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/card/base.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/card/colors.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/comparison-table/comparison-table.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/eyebrow-banner/eyebrow-banner.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/faq/base.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/faq/colors.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/faq/faq.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/footer/base.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/footer/colors.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/frosted-glass-vfx/base.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/grid/colors.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/grid/grid.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/hero/base.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/icon/colors.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/ide/base.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/image/base.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/inline-code/colors.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/inline-link/base.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/inline-link/colors.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/label/colors.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/link/colors.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/logosuite/base.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/logosuite/colors.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/media-playlist/colors.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/pricing-options/colors.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/pricing-options/pricing-options.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/prose/base.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/river/base.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/river/river.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/section/section.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/statistic/base.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/sub-nav/base.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/tabs/base.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/tabs/colors.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/testimonial/base.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/testimonial/colors.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/text-cursor-animation/base.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/text-cursor-animation/colors.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/timeline/base.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/timeline/colors.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/token/colors.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/tooltip/colors.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/components/video-player/base.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/size/border.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/size/breakpoints.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/size/size-coarse.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/size/size-fine.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/size/size.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/size/viewport.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/typography/typography-responsive.js +1 -1
- package/lib/design-tokens/js/module/tokens/functional/typography/typography.js +1 -1
- package/lib/design-tokens/js/tokens/base/colors/light.js +1 -1
- package/lib/design-tokens/js/tokens/base/size/size.js +1 -1
- package/lib/design-tokens/js/tokens/base/typography/typography.js +1 -1
- package/lib/design-tokens/js/tokens/functional/animation/base.js +1 -1
- package/lib/design-tokens/js/tokens/functional/colors/global.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/bento/base.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/card/base.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/card/colors.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/comparison-table/comparison-table.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/eyebrow-banner/eyebrow-banner.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/faq/base.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/faq/colors.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/faq/faq.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/footer/base.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/footer/colors.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/frosted-glass-vfx/base.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/grid/colors.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/grid/grid.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/hero/base.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/icon/colors.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/ide/base.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/image/base.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/inline-code/colors.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/inline-link/base.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/inline-link/colors.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/label/colors.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/link/colors.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/logosuite/base.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/logosuite/colors.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/media-playlist/colors.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/pricing-options/colors.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/pricing-options/pricing-options.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/prose/base.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/river/base.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/river/river.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/section/section.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/statistic/base.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/sub-nav/base.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/tabs/base.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/tabs/colors.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/testimonial/base.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/testimonial/colors.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/text-cursor-animation/base.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/text-cursor-animation/colors.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/timeline/base.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/timeline/colors.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/token/colors.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/tooltip/colors.js +1 -1
- package/lib/design-tokens/js/tokens/functional/components/video-player/base.js +1 -1
- package/lib/design-tokens/js/tokens/functional/size/border.js +1 -1
- package/lib/design-tokens/js/tokens/functional/size/breakpoints.js +1 -1
- package/lib/design-tokens/js/tokens/functional/size/size-coarse.js +1 -1
- package/lib/design-tokens/js/tokens/functional/size/size-fine.js +1 -1
- package/lib/design-tokens/js/tokens/functional/size/size.js +1 -1
- package/lib/design-tokens/js/tokens/functional/size/viewport.js +1 -1
- package/lib/design-tokens/js/tokens/functional/typography/typography-responsive.js +1 -1
- package/lib/design-tokens/js/tokens/functional/typography/typography.js +1 -1
- package/lib/design-tokens/scss/tokens/base/colors/light.scss +1 -1
- package/lib/design-tokens/scss/tokens/base/size/size.scss +1 -1
- package/lib/design-tokens/scss/tokens/base/typography/typography.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/animation/base.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/colors/global.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/bento/base.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/card/base.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/card/colors.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/comparison-table/comparison-table.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/eyebrow-banner/eyebrow-banner.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/faq/base.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/faq/colors.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/faq/faq.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/footer/base.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/footer/colors.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/frosted-glass-vfx/base.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/grid/colors.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/grid/grid.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/hero/base.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/icon/colors.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/ide/base.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/image/base.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/inline-code/colors.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/inline-link/base.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/inline-link/colors.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/label/colors.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/link/colors.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/logosuite/base.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/logosuite/colors.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/media-playlist/colors.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/pricing-options/colors.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/pricing-options/pricing-options.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/prose/base.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/river/base.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/river/river.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/section/section.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/statistic/base.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/sub-nav/base.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/tabs/base.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/tabs/colors.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/testimonial/base.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/testimonial/colors.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/text-cursor-animation/base.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/text-cursor-animation/colors.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/timeline/base.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/timeline/colors.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/token/colors.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/tooltip/colors.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/components/video-player/base.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/size/border.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/size/breakpoints.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/size/size-coarse.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/size/size-fine.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/size/size.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/size/viewport.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/typography/typography-responsive.scss +1 -1
- package/lib/design-tokens/scss/tokens/functional/typography/typography.scss +1 -1
- package/lib/design-tokens/ts/tokens/base/colors/light.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/base/colors/light.js +1 -1
- package/lib/design-tokens/ts/tokens/base/size/size.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/base/size/size.js +1 -1
- package/lib/design-tokens/ts/tokens/base/typography/typography.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/base/typography/typography.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/animation/base.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/animation/base.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/colors/global.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/colors/global.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/bento/base.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/bento/base.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/card/base.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/card/base.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/card/colors.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/card/colors.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/comparison-table/comparison-table.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/comparison-table/comparison-table.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/eyebrow-banner/eyebrow-banner.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/eyebrow-banner/eyebrow-banner.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/faq/base.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/faq/base.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/faq/colors.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/faq/colors.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/faq/faq.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/faq/faq.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/footer/base.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/footer/base.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/footer/colors.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/footer/colors.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/frosted-glass-vfx/base.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/frosted-glass-vfx/base.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/grid/colors.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/grid/colors.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/grid/grid.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/grid/grid.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/hero/base.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/hero/base.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/icon/colors.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/icon/colors.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/ide/base.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/ide/base.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/image/base.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/image/base.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/inline-code/colors.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/inline-code/colors.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/inline-link/base.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/inline-link/base.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/inline-link/colors.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/inline-link/colors.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/label/colors.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/label/colors.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/link/colors.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/link/colors.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/logosuite/base.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/logosuite/base.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/logosuite/colors.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/logosuite/colors.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/media-playlist/colors.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/media-playlist/colors.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/pricing-options/colors.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/pricing-options/colors.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/pricing-options/pricing-options.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/pricing-options/pricing-options.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/prose/base.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/prose/base.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/river/base.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/river/base.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/river/river.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/river/river.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/section/section.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/section/section.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/statistic/base.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/statistic/base.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/sub-nav/base.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/sub-nav/base.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/tabs/base.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/tabs/base.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/tabs/colors.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/tabs/colors.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/testimonial/base.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/testimonial/base.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/testimonial/colors.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/testimonial/colors.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/text-cursor-animation/base.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/text-cursor-animation/base.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/text-cursor-animation/colors.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/text-cursor-animation/colors.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/timeline/base.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/timeline/base.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/timeline/colors.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/timeline/colors.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/token/colors.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/token/colors.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/tooltip/colors.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/tooltip/colors.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/video-player/base.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/components/video-player/base.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/size/border.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/size/border.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/size/breakpoints.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/size/breakpoints.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/size/size-coarse.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/size/size-coarse.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/size/size-fine.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/size/size-fine.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/size/size.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/size/size.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/size/viewport.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/size/viewport.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/typography/typography-responsive.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/typography/typography-responsive.js +1 -1
- package/lib/design-tokens/ts/tokens/functional/typography/typography.d.ts +1 -1
- package/lib/design-tokens/ts/tokens/functional/typography/typography.js +1 -1
- package/lib/forms/FormControl/FormControl.d.ts +5 -5
- package/lib/forms/Select/Select.d.ts +2 -2
- package/lib/index.js +1 -1
- package/lib/list/OrderedList/OrderedList.d.ts +2 -2
- package/lib/list/UnorderedList/UnorderedList.d.ts +2 -2
- package/lib/river/RiverAccordion/RiverAccordion.d.ts +4 -4
- package/lib/river/RiverBreakout/RiverBreakout.d.ts +1 -1
- package/lib/river/RiverBreakoutTabs/RiverBreakoutTabs.d.ts +5 -5
- package/lib/river/RiverStoryScroll/RiverStoryScroll.d.ts +1 -1
- package/lib/river/RiverStoryScroll/RiverStoryScrollProvider.d.ts +2 -2
- package/lib/river/RiverStoryScroll/RiverStoryScrollResponder.d.ts +1 -1
- package/lib/river/RiverStoryScroll/RiverStoryScrollTracker.d.ts +1 -1
- package/llms.txt +2 -2
- package/package.json +24 -23
- package/esm/node_modules/@primer/octicons-react/dist/index.esm.js +0 -434
- package/esm/node_modules/@primer/octicons-react/dist/index.esm.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubdomainNavBar.d.ts","sourceRoot":"","sources":["../../src/SubdomainNavBar/SubdomainNavBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAIZ,iBAAiB,EAKlB,MAAM,OAAO,CAAA;AAUd;;GAEG;AACH,OAAO,qHAAqH,CAAA;AAS5H,MAAM,MAAM,yBAAyB,GAAG;IACtC;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAA;CAC1B,CAAA;AAUD,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG;IACjG;;;OAGG;IACH,QAAQ,CAAC,EACL,KAAK,CAAC,SAAS,GACf,KAAK,CAAC,YAAY,CAAC,wBAAwB,CAAC,GAC5C,KAAK,CAAC,YAAY,CAAC,0BAA0B,CAAC,GAC9C,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA;IACtC;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;OAEG;IACH,gBAAgB,CAAC,EAAE,KAAK,CAAC,YAAY,CAAA;IACrC;;OAEG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC,YAAY,CAAA;IACtC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;IAC9C;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAA;IAC/C;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG;IAChD,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,WAAW,EAAE,MAAM,IAAI,CAAA;CACxB,CAAA;AAihBD,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,GAAG,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,CAAA;AAIjF,iBAAS,IAAI,CAAC,EACZ,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,UAAU,EACV,cAAc,EAAE,WAAW,EAC3B,aAAa,EAAE,UAAU,EACzB,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,iBAAiB,CAAC,wBAAwB,CAAC,
|
|
1
|
+
{"version":3,"file":"SubdomainNavBar.d.ts","sourceRoot":"","sources":["../../src/SubdomainNavBar/SubdomainNavBar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import e from "../node_modules/clsx/dist/clsx.js";
|
|
1
|
+
import { clsx as e } from "../node_modules/clsx/dist/clsx.js";
|
|
2
2
|
import { useId as t } from "../hooks/useId.js";
|
|
3
3
|
import { Text as n } from "../Text/Text.js";
|
|
4
4
|
import { Button as r } from "../Button/Button.js";
|
|
5
5
|
import { useKeyboardEscape as i } from "../hooks/useKeyboardEscape.js";
|
|
6
|
-
import { ArrowUpRightIcon as a
|
|
6
|
+
import { ArrowUpRightIcon as a } from "../node_modules/@primer/octicons-react/dist/icons/ArrowUpRightIcon.js";
|
|
7
|
+
import { ChevronLeftIcon as o } from "../node_modules/@primer/octicons-react/dist/icons/ChevronLeftIcon.js";
|
|
8
|
+
import { LinkExternalIcon as s } from "../node_modules/@primer/octicons-react/dist/icons/LinkExternalIcon.js";
|
|
9
|
+
import { MarkGithubIcon as ee } from "../node_modules/@primer/octicons-react/dist/icons/MarkGithubIcon.js";
|
|
10
|
+
import { SearchIcon as c } from "../node_modules/@primer/octicons-react/dist/icons/SearchIcon.js";
|
|
7
11
|
import { useWindowSize as l } from "../hooks/useWindowSize.js";
|
|
8
12
|
import u from "./SubdomainNavBar.module.js";
|
|
9
13
|
import { SubdomainNavBarLinkContext as d, useSubdomainNavBarLinkContext as f } from "./SubdomainNavBarLinkContext.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubdomainNavBar.js","names":[],"sources":["../../src/SubdomainNavBar/SubdomainNavBar.tsx"],"sourcesContent":["import React, {\n useState,\n useCallback,\n useRef,\n PropsWithChildren,\n forwardRef,\n useMemo,\n useEffect,\n useImperativeHandle,\n} from 'react'\nimport {clsx} from 'clsx'\nimport {ArrowUpRightIcon, ChevronLeftIcon, LinkExternalIcon, MarkGithubIcon, SearchIcon} from '@primer/octicons-react'\n\nimport {Button, FormControl, Text, TextInput} from '..'\nimport {NavigationVisbilityObserver} from './NavigationVisbilityObserver'\nimport {useFocusTrap} from '../hooks/useFocusTrap'\nimport {useKeyboardEscape} from '../hooks/useKeyboardEscape'\nimport {useWindowSize} from '../hooks/useWindowSize'\n\n/**\n * Design tokens\n */\nimport '@primer/brand-primitives/lib/design-tokens/css/tokens/functional/components/subdomain-nav-bar/colors-with-modes.css'\n\n/** * Main Stylesheet (as a CSS Module) */\nimport styles from './SubdomainNavBar.module.css'\nimport {useId} from '../hooks/useId'\nimport {SubdomainNavBarLinkContext, useSubdomainNavBarLinkContext} from './SubdomainNavBarLinkContext'\nimport {useSearchKeyboardShortcut} from './useSearchKeyboardShortcut'\nimport {useSearchResults, type NormalizedSearchResultGroup} from './useSearchResults'\n\nexport type SubdomainNavBarMenuLabels = {\n /**\n * Visible and accessible label for the closed narrow menu control.\n */\n menuLabel: string\n /**\n * Visible and accessible label for the open narrow menu control.\n */\n closeLabel: string\n /**\n * Visible and accessible label for the desktop overflow menu control.\n */\n overflowMenuLabel: string\n}\n\nconst defaultMenuLabels: SubdomainNavBarMenuLabels = {\n menuLabel: 'Menu',\n closeLabel: 'Close',\n overflowMenuLabel: 'More',\n}\n\nconst SubdomainNavBarActionSizeContext = React.createContext<'small' | 'medium'>('small')\n\nexport type SubdomainNavBarProps = Omit<React.HTMLAttributes<HTMLElement>, 'children' | 'title'> & {\n /**\n * Valid child elements are `SubdomainNavBar.Link`, `SubdomainNavBar.PrimaryAction`,\n * `SubdomainNavBar.SecondaryAction` and `SubdomainNavBar.Search`\n */\n children?:\n | React.ReactNode\n | React.ReactElement<SubdomainNavBarLinkProps>\n | React.ReactElement<SubdomainNavBarSearchProps>\n | React.ReactElement<CTAActionProps>\n /**\n * Fixes the navigation bar to the top of the viewport. Defaults to `true`.\n */\n fixed?: boolean\n /**\n * Fill the maximum width of the parent container. Defaults to `false`.\n */\n fullWidth?: boolean\n /**\n * Optional React element rendered after the navigation links.\n */\n leadingComponent?: React.ReactElement\n /**\n * Optional React element rendered after the actions.\n */\n trailingComponent?: React.ReactElement\n /**\n * The title or name of the subdomain. Appears adjacent to the logo and is required for communicating content to assistive technologies.\n */\n title: string\n /**\n * The URL for the site. Typically used to link the titleText prop value to the site root.\n */\n titleHref?: string\n /**\n * Optionally change the URL of the logo\n */\n logoHref?: string\n /**\n * When the menu is opened or closed on narrow viewports, this callback is called with the new open state.\n */\n onNarrowMenuToggle?: (isOpen: boolean) => void\n /**\n * Customizable visible and accessible menu labels.\n */\n menuLabels?: Partial<SubdomainNavBarMenuLabels>\n /**\n * ID of the element that receives focus when the skip-to-content link is activated.\n * Defaults to the first rendered `main` element that is not hidden from assistive technologies.\n */\n skipToContentTargetId?: string\n}\n\nexport type SubdomainNavBarHandle = HTMLElement & {\n openSearch: () => void\n closeSearch: () => void\n}\n\nconst testIds = {\n root: 'SubdomainNavBar',\n get innerContainer() {\n return `${this.root}-inner-container`\n },\n get menuButton() {\n return `${this.root}-menuButton`\n },\n get menuLinks() {\n return `${this.root}-menuLinks`\n },\n get liveRegion() {\n return `${this.root}-search-live-region`\n },\n}\n\nfunction isUsableSkipToContentTarget(element: HTMLElement) {\n if (element.closest('[hidden], [inert], [aria-hidden=\"true\"]')) return false\n\n for (\n let currentElement: HTMLElement | null = element;\n currentElement;\n currentElement = currentElement.parentElement\n ) {\n const computedStyles = window.getComputedStyle(currentElement)\n if (computedStyles.display === 'none' || computedStyles.visibility === 'hidden') return false\n }\n\n return true\n}\n\nconst Root = forwardRef<SubdomainNavBarHandle, SubdomainNavBarProps>(function Root(\n {\n children,\n className,\n fixed = true,\n fullWidth = false,\n logoHref = 'https://github.com',\n style,\n title,\n titleHref = '/',\n leadingComponent,\n trailingComponent,\n onNarrowMenuToggle,\n menuLabels,\n skipToContentTargetId,\n ...rest\n },\n forwardedRef,\n) {\n const [menuHidden, setMenuHidden] = useState(true)\n const [searchVisible, setSearchVisible] = useState(false)\n const [menuViewportOffsetBlockStart, setMenuViewportOffsetBlockStart] = useState(0)\n const {isMedium, isLarge} = useWindowSize()\n const [startOfContentButtonFocused, setStartOfContentButtonFocused] = useState(false)\n const [resolvedSkipToContentTargetId, setResolvedSkipToContentTargetId] = useState<string>()\n const headerRef = useRef<HTMLElement | null>(null)\n const fallbackTargetRef = useRef<HTMLDivElement | null>(null)\n const fallbackTargetID = useId()\n const generatedMainTargetID = `${fallbackTargetID}-main`\n const narrowMenuID = useId()\n const resolvedMenuLabels = {...defaultMenuLabels, ...menuLabels}\n\n const updateMenuViewportOffsetBlockStart = useCallback(() => {\n setMenuViewportOffsetBlockStart(Math.max(0, headerRef.current?.getBoundingClientRect().top ?? 0))\n }, [])\n\n const closeNarrowMenu = useCallback(() => {\n if (menuHidden) return\n\n setMenuHidden(true)\n onNarrowMenuToggle?.(false)\n }, [menuHidden, onNarrowMenuToggle])\n\n const handleMobileMenuClick = () => {\n if (!menuHidden) {\n closeNarrowMenu()\n return\n }\n\n setSearchVisible(false)\n updateMenuViewportOffsetBlockStart()\n setMenuHidden(false)\n onNarrowMenuToggle?.(true)\n }\n const focusTrapRef = useRef<HTMLDivElement | null>(null)\n\n const resolveDefaultSkipToContentTarget = useCallback(() => {\n const mainElement = Array.from(document.querySelectorAll<HTMLElement>('main')).find(isUsableSkipToContentTarget)\n\n if (mainElement) {\n if (!mainElement.id) {\n mainElement.id = document.getElementById('start-of-content') ? generatedMainTargetID : 'start-of-content'\n }\n return mainElement\n }\n\n return fallbackTargetRef.current\n }, [generatedMainTargetID])\n\n const resolveSkipToContentTarget = useCallback(() => {\n if (skipToContentTargetId) {\n const explicitTarget = document.getElementById(skipToContentTargetId)\n if (explicitTarget && isUsableSkipToContentTarget(explicitTarget)) return explicitTarget\n }\n\n return resolveDefaultSkipToContentTarget()\n }, [resolveDefaultSkipToContentTarget, skipToContentTargetId])\n\n const handleSkipToContentFocus = useCallback(() => {\n setStartOfContentButtonFocused(true)\n\n const target = resolveSkipToContentTarget()\n if (target) setResolvedSkipToContentTargetId(target.id)\n }, [resolveSkipToContentTarget])\n\n const handleSkipToContentClick = useCallback(\n (event: React.MouseEvent<HTMLAnchorElement>) => {\n if (\n event.defaultPrevented ||\n event.button !== 0 ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.altKey\n ) {\n return\n }\n\n const explicitTarget = skipToContentTargetId ? document.getElementById(skipToContentTargetId) : null\n const explicitTargetUnavailable =\n skipToContentTargetId && (!explicitTarget || !isUsableSkipToContentTarget(explicitTarget))\n const target = resolveSkipToContentTarget()\n\n if (explicitTargetUnavailable) {\n // eslint-disable-next-line no-console\n console.warn(\n `SubdomainNavBar could not find the skip-to-content target \"${skipToContentTargetId}\". Falling back to the page's main content.`,\n )\n }\n\n if (!target) return\n\n const targetHash = `#${encodeURIComponent(target.id)}`\n event.currentTarget.setAttribute('href', targetHash)\n setResolvedSkipToContentTargetId(target.id)\n\n const addedTabIndex = target.tabIndex < 0 && !target.hasAttribute('tabindex')\n if (addedTabIndex) {\n target.tabIndex = -1\n }\n\n const previousScrollMarginBlockStart = target.style.scrollMarginBlockStart\n if (fixed) {\n const navbarHeight = headerRef.current?.getBoundingClientRect().height ?? 0\n target.style.scrollMarginBlockStart = `${navbarHeight}px`\n }\n\n target.addEventListener(\n 'blur',\n () => {\n if (addedTabIndex) target.removeAttribute('tabindex')\n target.style.scrollMarginBlockStart = previousScrollMarginBlockStart\n },\n {once: true},\n )\n\n target.focus({preventScroll: true})\n },\n [fixed, resolveSkipToContentTarget, skipToContentTargetId],\n )\n\n useEffect(() => {\n const target = resolveSkipToContentTarget()\n if (target) setResolvedSkipToContentTargetId(target.id)\n }, [resolveSkipToContentTarget])\n\n useFocusTrap({containerRef: focusTrapRef, restoreFocusOnCleanUp: true, disabled: menuHidden})\n useKeyboardEscape(closeNarrowMenu)\n\n useEffect(() => {\n if (isLarge) closeNarrowMenu()\n }, [closeNarrowMenu, isLarge])\n\n useEffect(() => {\n if (menuHidden || isLarge) return\n\n updateMenuViewportOffsetBlockStart()\n\n const resizeObserver = new ResizeObserver(updateMenuViewportOffsetBlockStart)\n const header = headerRef.current\n\n if (header) resizeObserver.observe(header)\n resizeObserver.observe(document.documentElement)\n\n return () => resizeObserver.disconnect()\n }, [isLarge, menuHidden, updateMenuViewportOffsetBlockStart])\n\n useEffect(() => {\n if (menuHidden) return\n\n const previousOverflow = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n\n return () => {\n document.body.style.overflow = previousOverflow\n }\n }, [menuHidden])\n\n const setStartOfContentButtonFocusedFalse = useCallback(() => setStartOfContentButtonFocused(false), [])\n\n const hasLinks =\n useMemo(\n () =>\n React.Children.toArray(children).filter(\n child => React.isValidElement(child) && typeof child.type !== 'string' && child.type === Link,\n ),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n ).length > 0\n\n const menuItems = useMemo(\n () =>\n React.Children.toArray(children)\n .map((child, index) => {\n if (React.isValidElement<SubdomainNavBarLinkMeasurementProps>(child) && child.type === Link) {\n return React.cloneElement(child, {\n href: child.props.href,\n children: child.props.children,\n style: {\n '--animation-order': index,\n } as React.CSSProperties,\n })\n }\n return null\n })\n .filter(Boolean),\n [children],\n )\n\n const actionItems = useMemo(\n () =>\n React.Children.toArray(children).filter(\n (child): child is React.ReactElement<CTAActionProps> =>\n React.isValidElement<CTAActionProps>(child) &&\n (child.type === PrimaryAction || child.type === SecondaryAction),\n ),\n [children],\n )\n\n const narrowActionItems = useMemo(\n () =>\n actionItems.map(child =>\n React.cloneElement(child, {\n onClick: event => {\n child.props.onClick?.(event)\n if (!event.defaultPrevented) closeNarrowMenu()\n },\n }),\n ),\n [actionItems, closeNarrowMenu],\n )\n\n const hasActions = actionItems.length > 0\n\n const searchItem = useMemo(\n () =>\n React.Children.toArray(children).find(\n (child): child is React.ReactElement<SubdomainNavBarSearchProps> =>\n React.isValidElement<SubdomainNavBarSearchProps>(child) && child.type === Search,\n ),\n [children],\n )\n const hasSearch = Boolean(searchItem)\n\n const handleSearchOpen = useCallback(() => {\n if (!hasSearch) return\n\n closeNarrowMenu()\n setSearchVisible(true)\n }, [closeNarrowMenu, hasSearch])\n\n const handleSearchClose = useCallback(() => setSearchVisible(false), [])\n\n useImperativeHandle(\n forwardedRef,\n () => {\n if (!headerRef.current) {\n return {\n openSearch: handleSearchOpen,\n closeSearch: handleSearchClose,\n } as SubdomainNavBarHandle\n }\n\n return Object.assign(headerRef.current, {\n openSearch: handleSearchOpen,\n closeSearch: handleSearchClose,\n })\n },\n [handleSearchClose, handleSearchOpen],\n )\n\n useSearchKeyboardShortcut({\n disabled: searchVisible,\n keyboardShortcut: searchItem?.props.keyboardShortcut,\n onTrigger: handleSearchOpen,\n })\n\n const hasLeadingComponent = leadingComponent != null\n const hasTrailingComponent = trailingComponent != null\n const hasNarrowMenuContent = hasLinks || hasActions || hasLeadingComponent || hasTrailingComponent\n const subdomainNavBarStyle = {\n ...style,\n '--SubdomainNavBar-menu-offset-block-start': `${menuViewportOffsetBlockStart}px`,\n } as React.CSSProperties\n\n return (\n <>\n <div\n className={clsx(\n styles['SubdomainNavBar-outer-container'],\n fixed && styles['SubdomainNavBar-outer-container--fixed'],\n )}\n >\n <Button\n as=\"a\"\n href={`#${resolvedSkipToContentTargetId || skipToContentTargetId || fallbackTargetID}`}\n variant=\"primary\"\n size=\"small\"\n className={clsx(styles['SubdomainNavBar-skip-to-content'], !startOfContentButtonFocused && 'visually-hidden')}\n onFocus={handleSkipToContentFocus}\n onBlur={setStartOfContentButtonFocusedFalse}\n onClick={handleSkipToContentClick}\n >\n Skip to content\n </Button>\n <header\n ref={headerRef}\n className={clsx(styles['SubdomainNavBar'], className)}\n data-testid={testIds.root}\n style={subdomainNavBarStyle}\n {...rest}\n >\n <div\n ref={focusTrapRef}\n className={clsx(\n styles['SubdomainNavBar-inner-container'],\n searchVisible && styles['SubdomainNavBar-inner-container--search-open'],\n !fullWidth && styles['SubdomainNavBar-inner-container--centered'],\n )}\n data-testid={testIds.innerContainer}\n >\n <nav aria-label=\"Header logo and title\">\n <ol className={styles['SubdomainNavBar-title-area']}>\n <li>\n <a href={logoHref} aria-label=\"Github Home\" className={styles['SubdomainNavBar-logo-mark']}>\n <span className={styles['SubdomainNavBar-back-arrow']}>\n <ChevronLeftIcon fill=\"currentColor\" size={24} />\n </span>\n <MarkGithubIcon fill=\"currentColor\" size={24} />\n </a>\n </li>\n {title && (\n <>\n <li>\n <a\n href={titleHref}\n aria-label={`${title} home`}\n className={clsx(styles['SubdomainNavBar-title'])}\n >\n <Text size=\"400\" weight=\"medium\">\n <span className={styles['SubdomainNavBar-title-prefix']}>GitHub</span>{' '}\n <span className={styles['SubdomainNavBar-title-label']}>{title}</span>\n </Text>\n </a>\n </li>\n </>\n )}\n </ol>\n </nav>\n {hasLinks && (\n <nav\n id=\"menu-navigation\"\n aria-label={title}\n className={styles['SubdomainNavBar-primary-nav']}\n data-testid={testIds.menuLinks}\n >\n <NavigationVisbilityObserver\n className={clsx(styles['SubdomainNavBar-primary-nav-list--invisible'])}\n overflowMenuLabel={resolvedMenuLabels.overflowMenuLabel}\n >\n {menuItems}\n </NavigationVisbilityObserver>\n </nav>\n )}\n {isLarge && hasLeadingComponent && (\n <div className={styles['SubdomainNavBar-leading-component']}>{leadingComponent}</div>\n )}\n\n <div className={clsx(styles['SubdomainNavBar-secondary-nav'])}>\n {React.Children.toArray(children)\n .map(child => {\n if (React.isValidElement<SubdomainNavBarSearchProps>(child) && child.type === Search) {\n return React.cloneElement(child, {\n active: searchVisible,\n className: clsx(\n child.props.className,\n isLarge &&\n (hasActions || hasTrailingComponent) &&\n styles['SubdomainNavBar-search-trigger--has-trailing-item'],\n ),\n onSearchOpen: handleSearchOpen,\n onSearchClose: handleSearchClose,\n title,\n })\n }\n return null\n })\n .filter(Boolean)}\n\n {hasNarrowMenuContent && (\n <button\n aria-expanded={!menuHidden}\n aria-label={menuHidden ? resolvedMenuLabels.menuLabel : resolvedMenuLabels.closeLabel}\n aria-controls={narrowMenuID}\n className={clsx(\n styles['SubdomainNavBar-menu-button'],\n styles['SubdomainNavBar-mobile-menu-button'],\n !menuHidden && styles['SubdomainNavBar-menu-button--close'],\n )}\n data-testid={testIds.menuButton}\n onClick={handleMobileMenuClick}\n >\n <span className={styles['SubdomainNavBar-menu-button-icon']} aria-hidden=\"true\">\n <span className={styles['SubdomainNavBar-menu-button-bar']}></span>\n <span className={styles['SubdomainNavBar-menu-button-bar']}></span>\n <span className={styles['SubdomainNavBar-menu-button-bar']}></span>\n </span>\n <span className={styles['SubdomainNavBar-menu-button-label']}>\n {menuHidden ? resolvedMenuLabels.menuLabel : resolvedMenuLabels.closeLabel}\n </span>\n </button>\n )}\n\n {isLarge && hasTrailingComponent && (\n <div className={styles['SubdomainNavBar-trailing-component']}>{trailingComponent}</div>\n )}\n {isLarge && hasActions && (\n <div\n className={clsx(\n styles['SubdomainNavBar-button-area'],\n styles['SubdomainNavBar-button-area--visible'],\n hasTrailingComponent && styles['SubdomainNavBar-button-area--has-leading-item'],\n )}\n >\n <div className={styles['SubdomainNavBar-button-area-inner']}>{actionItems}</div>\n </div>\n )}\n\n {!isLarge && (\n <div\n id={narrowMenuID}\n className={clsx(\n styles['SubdomainNavBar-menu-wrapper'],\n menuHidden && styles['SubdomainNavBar-menu-wrapper--close'],\n )}\n >\n {!menuHidden && (\n <div>\n {hasLeadingComponent && (\n <div className={styles['SubdomainNavBar-leading-component']}>{leadingComponent}</div>\n )}\n {hasLinks && (\n <SubdomainNavBarLinkContext.Provider value={{onLinkClick: closeNarrowMenu}}>\n {isMedium ? (\n <ul className={styles['SubdomainNavBar-primary-nav-list--visible']}>{menuItems}</ul>\n ) : (\n <NavigationVisbilityObserver\n className={clsx(styles['SubdomainNavBar-primary-nav-list--visible'])}\n overflowMenuLabel={resolvedMenuLabels.overflowMenuLabel}\n >\n {menuItems}\n </NavigationVisbilityObserver>\n )}\n </SubdomainNavBarLinkContext.Provider>\n )}\n </div>\n )}\n {!menuHidden && (hasActions || hasTrailingComponent) && (\n <div\n className={clsx(\n styles['SubdomainNavBar-menu-wrapper-footer'],\n (hasLinks || hasLeadingComponent) &&\n styles['SubdomainNavBar-menu-wrapper-footer--has-leading-item'],\n )}\n >\n {hasTrailingComponent && (\n <div className={styles['SubdomainNavBar-trailing-component']}>{trailingComponent}</div>\n )}\n {hasActions && (\n <div\n className={clsx(\n styles['SubdomainNavBar-button-area'],\n styles['SubdomainNavBar-button-area--visible'],\n )}\n >\n <div className={styles['SubdomainNavBar-button-area-inner']}>\n <SubdomainNavBarActionSizeContext.Provider value={isMedium ? 'small' : 'medium'}>\n {narrowActionItems}\n </SubdomainNavBarActionSizeContext.Provider>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n {!isLarge && !menuHidden && <div className={styles['SubdomainNavBar-menu-backdrop']} aria-hidden=\"true\" />}\n </header>\n </div>\n <div ref={fallbackTargetRef} id={fallbackTargetID} tabIndex={-1} />\n </>\n )\n})\n\nexport type SubdomainNavBarLinkProps = {\n href: string\n isExternal?: boolean\n} & React.DetailedHTMLProps<React.LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>\n\ntype SubdomainNavBarLinkMeasurementProps = SubdomainNavBarLinkProps\n\nfunction Link({\n href,\n className,\n children,\n isExternal,\n 'aria-current': ariaCurrent,\n 'aria-hidden': ariaHidden,\n tabIndex,\n ...rest\n}: PropsWithChildren<SubdomainNavBarLinkProps>) {\n const {isOverflowed, onLinkClick} = useSubdomainNavBarLinkContext()\n\n return (\n <li\n {...rest}\n // Keep overflowed links measurable in layout; removing them would make overflow calculation state-dependent.\n aria-hidden={isOverflowed ? true : ariaHidden}\n className={clsx(styles['SubdomainNavBar-primary-nav-list-item'], className)}\n tabIndex={isOverflowed ? -1 : tabIndex}\n >\n <a\n href={href}\n aria-current={ariaCurrent}\n className={styles['SubdomainNavBar-link']}\n onClick={onLinkClick}\n tabIndex={isOverflowed ? -1 : undefined}\n >\n <span className={styles['SubdomainNavBar-link-content']}>\n <span className={styles['SubdomainNavBar-link-text']}>{children}</span>\n {isExternal && <LinkExternalIcon size={16} aria-label=\"External link\" />}\n </span>\n </a>\n </li>\n )\n}\n\nexport type SubdomainNavBarSearchResultProps = {\n title: string\n description: string\n url: string\n date: string\n category?: string\n group?: string\n isExternal?: boolean\n}\n\nexport type SubdomainNavBarSearchResultGroupProps = {\n title: string\n results: SubdomainNavBarSearchResultProps[]\n}\n\nexport type SubdomainNavBarSearchResults = SubdomainNavBarSearchResultProps[] | SubdomainNavBarSearchResultGroupProps[]\n\nexport type SubdomainNavBarSearchLabels = {\n /**\n * Accessible label for the search input. Defaults to \"Search\".\n */\n searchLabel: string\n /**\n * Visible and accessible label for the close action. Defaults to \"Close\".\n */\n closeLabel: string\n /**\n * Accessible label for an untitled search result group. Defaults to \"Results\".\n */\n resultsLabel: string\n /**\n * Accessible label for grouped search results without a search term. Defaults to \"Search results\".\n */\n searchResultsLabel: string\n /**\n * Formats the default search placeholder and dialog label using the navigation title.\n */\n formatSearchWithTitle: (title: string) => string\n /**\n * Formats the accessible label for the responsive search trigger.\n */\n formatSearchTrigger: (placeholder: string) => string\n /**\n * Formats the visible heading for ungrouped search results.\n */\n formatResultsHeading: (searchTerm: string) => string\n /**\n * Formats the accessible label for grouped search results.\n */\n formatResultsLabel: (searchTerm: string) => string\n /**\n * Formats the search result count announcement.\n */\n formatSuggestions: (count: number) => string\n}\n\nconst defaultSearchLabels: SubdomainNavBarSearchLabels = {\n searchLabel: 'Search',\n closeLabel: 'Close',\n resultsLabel: 'Results',\n searchResultsLabel: 'Search results',\n formatSearchWithTitle: title => `Search ${title}`,\n formatSearchTrigger: placeholder => `${placeholder} search`,\n formatResultsHeading: searchTerm => `Results for “${searchTerm}”`,\n formatResultsLabel: searchTerm => `Results for ${searchTerm}`,\n formatSuggestions: count => `${count} suggestions.`,\n}\n\nexport type SubdomainNavBarSearchProps = {\n onSubmit: (e: React.FormEvent<HTMLFormElement>) => void\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void\n active?: boolean\n className?: string\n title?: string\n onSearchOpen?: () => void\n onSearchClose?: () => void\n /**\n * Placeholder text shown in the search trigger and the opened search input.\n */\n placeholder?: string\n /**\n * Optional keyboard shortcut hint shown in the search trigger. Pass an empty string to hide it.\n */\n shortcutLabel?: string\n /**\n * Optional global keyboard shortcut that opens the search dialog. Omit or pass `false` to disable it.\n * Supports single keys and modifier combinations, such as `/` or `Command+Option+k`.\n */\n keyboardShortcut?: string | false\n searchResults?: SubdomainNavBarSearchResults\n searchTerm?: string\n /**\n * Customizable visible and accessible search text. Unspecified labels use the English defaults.\n */\n labels?: Partial<SubdomainNavBarSearchLabels>\n}\n\nconst _SearchInternal = forwardRef<HTMLInputElement, SubdomainNavBarSearchProps>(\n (\n {\n active,\n className,\n title,\n searchResults,\n searchTerm,\n onSearchOpen,\n onSearchClose,\n onSubmit,\n onChange,\n placeholder,\n shortcutLabel,\n keyboardShortcut,\n labels,\n },\n forwardedRef,\n ) => {\n const dialogRef = useRef<HTMLDialogElement | null>(null)\n const inputRef = useRef<HTMLInputElement | null>(null)\n const resolvedLabels = {...defaultSearchLabels, ...labels}\n const resolvedPlaceholder =\n placeholder ?? (title ? resolvedLabels.formatSearchWithTitle(title) : resolvedLabels.searchLabel)\n const dialogLabel = title ? resolvedLabels.formatSearchWithTitle(title) : resolvedLabels.searchLabel\n const resolvedShortcutLabel = shortcutLabel ?? (keyboardShortcut || '')\n const {\n activeDescendant,\n handleSearchResultKeyDown,\n hasGroupedSearchResults,\n hasSearchResults,\n normalizedSearchResultGroups,\n resetActiveDescendant,\n searchResultsLength,\n } = useSearchResults({dialogRef, searchResults})\n\n const handleClose = useCallback(() => {\n onSearchClose?.()\n resetActiveDescendant()\n }, [onSearchClose, resetActiveDescendant])\n\n const setInputRef = useCallback(\n (input: HTMLInputElement | null) => {\n inputRef.current = input\n\n if (typeof forwardedRef === 'function') {\n forwardedRef(input)\n return\n }\n\n if (forwardedRef) {\n forwardedRef.current = input\n }\n },\n [forwardedRef],\n )\n\n useEffect(() => {\n const dialog = dialogRef.current\n\n if (!dialog) return\n\n if (active) {\n if (!dialog.open) {\n if (typeof dialog.showModal === 'function') {\n dialog.showModal()\n } else {\n dialog.setAttribute('open', '')\n }\n }\n\n inputRef.current?.focus()\n\n return\n }\n\n if (dialog.open) {\n if (typeof dialog.close === 'function') {\n dialog.close()\n } else {\n dialog.removeAttribute('open')\n }\n }\n }, [active, inputRef])\n\n useEffect(() => {\n const dialog = dialogRef.current\n if (!dialog) return\n\n const handleDialogClick = (event: MouseEvent) => {\n if (event.target !== dialog) return\n\n const dialogRect = dialog.getBoundingClientRect()\n const clickIsInsideDialog =\n event.clientX >= dialogRect.left &&\n event.clientX <= dialogRect.right &&\n event.clientY >= dialogRect.top &&\n event.clientY <= dialogRect.bottom\n\n if (clickIsInsideDialog) return\n\n handleClose()\n }\n\n dialog.addEventListener('click', handleDialogClick)\n return () => dialog.removeEventListener('click', handleDialogClick)\n }, [handleClose])\n\n const handleDialogCancel = useCallback(\n (event: React.SyntheticEvent<HTMLDialogElement>) => {\n event.preventDefault()\n handleClose()\n },\n [handleClose],\n )\n\n const renderSearchResult = ({result, index}: NormalizedSearchResultGroup['results'][number]) => (\n <li key={`${result.title}-${index}`} className={styles['SubdomainNavBar-search-result-item']} role=\"presentation\">\n <div className={styles['SubdomainNavBar-search-result-item-container']}>\n <a\n id={`subdomainnavbar-search-result-${index}`}\n href={result.url}\n role=\"option\"\n aria-selected={index === activeDescendant}\n >\n <span>{result.title}</span>\n {hasGroupedSearchResults && result.isExternal && <ArrowUpRightIcon size={20} aria-hidden=\"true\" />}\n </a>\n </div>\n\n <Text\n as=\"p\"\n size=\"200\"\n id={`subdomainnavbar-search-result-item-desc${index}`}\n className={styles['SubdomainNavBar-search-result-item-desc']}\n >\n {result.description}\n </Text>\n <div className={styles['SubdomainNavBar-search-result-item-meta']}>\n <Text size=\"100\" className={styles['SubdomainNavBar-search-result-item-desc']}>\n {result.date}\n </Text>\n {result.category && (\n <>\n <Text size=\"100\" className={styles['SubdomainNavBar-search-result-item-desc']}>\n {' '}\n •{' '}\n </Text>\n <Text size=\"100\" className={styles['SubdomainNavBar-search-result-item-desc']}>\n {result.category}\n </Text>\n </>\n )}\n </div>\n </li>\n )\n\n return (\n <>\n <div className={clsx(styles['SubdomainNavBar-search-trigger'], className)}>\n <button\n aria-label={resolvedLabels.formatSearchTrigger(resolvedPlaceholder)}\n className={styles['SubdomainNavBar-search-input-button']}\n onClick={onSearchOpen}\n data-testid=\"toggle-search\"\n type=\"button\"\n >\n <span className={styles['SubdomainNavBar-search-input-button-placeholder']}>\n <SearchIcon aria-hidden=\"true\" size={16} />\n <span>{resolvedPlaceholder}</span>\n </span>\n {resolvedShortcutLabel && (\n <span className={styles['SubdomainNavBar-search-input-button-shortcut']}>{resolvedShortcutLabel}</span>\n )}\n </button>\n </div>\n <dialog\n ref={dialogRef}\n aria-label={dialogLabel}\n className={clsx(\n styles['SubdomainNavBar-search-dialog'],\n hasSearchResults && styles['SubdomainNavBar-search-dialog--has-results'],\n )}\n onCancel={handleDialogCancel}\n >\n {active && (\n <>\n <div className={clsx(styles['SubdomainNavBar-search-dialog-control-area'])}>\n <div className={styles['SubdomainNavBar-search-input-area']}>\n <form className={clsx(styles['SubdomainNavBar-search-form'])} onSubmit={onSubmit} role=\"search\">\n <FormControl fullWidth size=\"medium\">\n <FormControl.Label visuallyHidden>{resolvedLabels.searchLabel}</FormControl.Label>\n <TextInput\n ref={setInputRef}\n className={clsx(styles['SubdomainNavBar-search-text-input'])}\n name=\"search\"\n role=\"combobox\"\n // Suppress the browser's native autocomplete/autofill dropdown. When it is\n // open, the browser consumes the first Escape to dismiss it, which would\n // otherwise require an extra keypress before the native dialog can close.\n autoComplete=\"off\"\n aria-autocomplete=\"list\"\n aria-expanded={hasSearchResults}\n aria-controls=\"listbox-search-results\"\n placeholder={resolvedPlaceholder}\n onChange={onChange}\n defaultValue={searchTerm}\n invisible\n leadingVisual={<SearchIcon size={16} />}\n aria-activedescendant={\n activeDescendant === -1 ? undefined : `subdomainnavbar-search-result-${activeDescendant}`\n }\n onKeyDown={handleSearchResultKeyDown}\n />\n </FormControl>\n </form>\n <button\n aria-label={resolvedLabels.closeLabel}\n className={styles['SubdomainNavBar-search-close-button']}\n onClick={handleClose}\n type=\"button\"\n >\n {resolvedLabels.closeLabel}\n </button>\n </div>\n </div>\n\n <div\n id=\"listbox-search-results\"\n className={clsx(\n styles['SubdomainNavBar-search-results-area'],\n hasSearchResults && styles['SubdomainNavBar-search-results-area--visible'],\n )}\n >\n {hasSearchResults && (\n <div className={clsx(styles['SubdomainNavBar-search-results-container'])}>\n {!hasGroupedSearchResults && (\n <Text\n id=\"subdomainnavbar-search-results-heading\"\n className={styles['SubdomainNavBar-search-results-heading']}\n >\n {resolvedLabels.formatResultsHeading(searchTerm ?? '')}\n </Text>\n )}\n <ul\n role=\"listbox\"\n tabIndex={0}\n aria-labelledby={!hasGroupedSearchResults ? 'subdomainnavbar-search-results-heading' : undefined}\n aria-label={\n hasGroupedSearchResults\n ? searchTerm\n ? resolvedLabels.formatResultsLabel(searchTerm)\n : resolvedLabels.searchResultsLabel\n : undefined\n }\n className={clsx(styles['SubdomainNavBar-search-results'])}\n >\n {hasGroupedSearchResults\n ? normalizedSearchResultGroups.map((group, groupIndex) => {\n const groupHeadingId = `subdomainnavbar-search-result-group-${groupIndex}`\n\n return (\n <li\n key={group.title ?? `ungrouped-${groupIndex}`}\n className={styles['SubdomainNavBar-search-result-group']}\n role=\"presentation\"\n >\n {group.title && (\n <Text\n id={groupHeadingId}\n className={styles['SubdomainNavBar-search-result-group-heading']}\n >\n {group.title}\n </Text>\n )}\n <ul\n className={styles['SubdomainNavBar-search-result-group-list']}\n role=\"group\"\n aria-labelledby={group.title ? groupHeadingId : undefined}\n aria-label={group.title ? undefined : resolvedLabels.resultsLabel}\n >\n {group.results.map(renderSearchResult)}\n </ul>\n </li>\n )\n })\n : normalizedSearchResultGroups.flatMap(group => group.results.map(renderSearchResult))}\n </ul>\n </div>\n )}\n <div aria-live=\"polite\" aria-atomic=\"true\" data-testid={testIds.liveRegion} className=\"visually-hidden\">\n {resolvedLabels.formatSuggestions(searchResultsLength)}\n <span> </span>\n </div>\n </div>\n </>\n )}\n </dialog>\n </>\n )\n },\n)\n\nconst Search = _SearchInternal\n\nRoot.displayName = 'SubdomainNavBar'\n\ntype CTAActionProps = {\n href: string\n} & React.HTMLAttributes<HTMLAnchorElement>\n\nfunction PrimaryAction({children, href, ...rest}: PropsWithChildren<CTAActionProps>) {\n const size = React.useContext(SubdomainNavBarActionSizeContext)\n\n return (\n <Button\n as=\"a\"\n href={href}\n className={clsx(styles['SubdomainNavBar-cta-button'])}\n variant=\"primary\"\n size={size}\n {...rest}\n >\n {children}\n </Button>\n )\n}\n\nfunction SecondaryAction({children, href, ...rest}: PropsWithChildren<CTAActionProps>) {\n const size = React.useContext(SubdomainNavBarActionSizeContext)\n\n return (\n <Button\n as=\"a\"\n href={href}\n className={clsx(styles['SubdomainNavBar-cta-button'], styles['SubdomainNavBar-cta-button--secondary'])}\n size={size}\n {...rest}\n >\n {children}\n </Button>\n )\n}\n\nexport const SubdomainNavBar = Object.assign(Root, {\n Link,\n Search,\n PrimaryAction,\n SecondaryAction,\n testIds,\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SubdomainNavBar.js","names":[],"sources":["../../src/SubdomainNavBar/SubdomainNavBar.tsx"],"sourcesContent":["import React, {\n useState,\n useCallback,\n useRef,\n PropsWithChildren,\n forwardRef,\n useMemo,\n useEffect,\n useImperativeHandle,\n} from 'react'\nimport {clsx} from 'clsx'\nimport {ArrowUpRightIcon, ChevronLeftIcon, LinkExternalIcon, MarkGithubIcon, SearchIcon} from '@primer/octicons-react'\n\nimport {Button, FormControl, Text, TextInput} from '..'\nimport {NavigationVisbilityObserver} from './NavigationVisbilityObserver'\nimport {useFocusTrap} from '../hooks/useFocusTrap'\nimport {useKeyboardEscape} from '../hooks/useKeyboardEscape'\nimport {useWindowSize} from '../hooks/useWindowSize'\n\n/**\n * Design tokens\n */\nimport '@primer/brand-primitives/lib/design-tokens/css/tokens/functional/components/subdomain-nav-bar/colors-with-modes.css'\n\n/** * Main Stylesheet (as a CSS Module) */\nimport styles from './SubdomainNavBar.module.css'\nimport {useId} from '../hooks/useId'\nimport {SubdomainNavBarLinkContext, useSubdomainNavBarLinkContext} from './SubdomainNavBarLinkContext'\nimport {useSearchKeyboardShortcut} from './useSearchKeyboardShortcut'\nimport {useSearchResults, type NormalizedSearchResultGroup} from './useSearchResults'\n\nexport type SubdomainNavBarMenuLabels = {\n /**\n * Visible and accessible label for the closed narrow menu control.\n */\n menuLabel: string\n /**\n * Visible and accessible label for the open narrow menu control.\n */\n closeLabel: string\n /**\n * Visible and accessible label for the desktop overflow menu control.\n */\n overflowMenuLabel: string\n}\n\nconst defaultMenuLabels: SubdomainNavBarMenuLabels = {\n menuLabel: 'Menu',\n closeLabel: 'Close',\n overflowMenuLabel: 'More',\n}\n\nconst SubdomainNavBarActionSizeContext = React.createContext<'small' | 'medium'>('small')\n\nexport type SubdomainNavBarProps = Omit<React.HTMLAttributes<HTMLElement>, 'children' | 'title'> & {\n /**\n * Valid child elements are `SubdomainNavBar.Link`, `SubdomainNavBar.PrimaryAction`,\n * `SubdomainNavBar.SecondaryAction` and `SubdomainNavBar.Search`\n */\n children?:\n | React.ReactNode\n | React.ReactElement<SubdomainNavBarLinkProps>\n | React.ReactElement<SubdomainNavBarSearchProps>\n | React.ReactElement<CTAActionProps>\n /**\n * Fixes the navigation bar to the top of the viewport. Defaults to `true`.\n */\n fixed?: boolean\n /**\n * Fill the maximum width of the parent container. Defaults to `false`.\n */\n fullWidth?: boolean\n /**\n * Optional React element rendered after the navigation links.\n */\n leadingComponent?: React.ReactElement\n /**\n * Optional React element rendered after the actions.\n */\n trailingComponent?: React.ReactElement\n /**\n * The title or name of the subdomain. Appears adjacent to the logo and is required for communicating content to assistive technologies.\n */\n title: string\n /**\n * The URL for the site. Typically used to link the titleText prop value to the site root.\n */\n titleHref?: string\n /**\n * Optionally change the URL of the logo\n */\n logoHref?: string\n /**\n * When the menu is opened or closed on narrow viewports, this callback is called with the new open state.\n */\n onNarrowMenuToggle?: (isOpen: boolean) => void\n /**\n * Customizable visible and accessible menu labels.\n */\n menuLabels?: Partial<SubdomainNavBarMenuLabels>\n /**\n * ID of the element that receives focus when the skip-to-content link is activated.\n * Defaults to the first rendered `main` element that is not hidden from assistive technologies.\n */\n skipToContentTargetId?: string\n}\n\nexport type SubdomainNavBarHandle = HTMLElement & {\n openSearch: () => void\n closeSearch: () => void\n}\n\nconst testIds = {\n root: 'SubdomainNavBar',\n get innerContainer() {\n return `${this.root}-inner-container`\n },\n get menuButton() {\n return `${this.root}-menuButton`\n },\n get menuLinks() {\n return `${this.root}-menuLinks`\n },\n get liveRegion() {\n return `${this.root}-search-live-region`\n },\n}\n\nfunction isUsableSkipToContentTarget(element: HTMLElement) {\n if (element.closest('[hidden], [inert], [aria-hidden=\"true\"]')) return false\n\n for (\n let currentElement: HTMLElement | null = element;\n currentElement;\n currentElement = currentElement.parentElement\n ) {\n const computedStyles = window.getComputedStyle(currentElement)\n if (computedStyles.display === 'none' || computedStyles.visibility === 'hidden') return false\n }\n\n return true\n}\n\nconst Root = forwardRef<SubdomainNavBarHandle, SubdomainNavBarProps>(function RootWithRef(\n {\n children,\n className,\n fixed = true,\n fullWidth = false,\n logoHref = 'https://github.com',\n style,\n title,\n titleHref = '/',\n leadingComponent,\n trailingComponent,\n onNarrowMenuToggle,\n menuLabels,\n skipToContentTargetId,\n ...rest\n },\n forwardedRef,\n) {\n const [menuHidden, setMenuHidden] = useState(true)\n const [searchVisible, setSearchVisible] = useState(false)\n const [menuViewportOffsetBlockStart, setMenuViewportOffsetBlockStart] = useState(0)\n const {isMedium, isLarge} = useWindowSize()\n const [startOfContentButtonFocused, setStartOfContentButtonFocused] = useState(false)\n const [resolvedSkipToContentTargetId, setResolvedSkipToContentTargetId] = useState<string>()\n const headerRef = useRef<HTMLElement | null>(null)\n const fallbackTargetRef = useRef<HTMLDivElement | null>(null)\n const fallbackTargetID = useId()\n const generatedMainTargetID = `${fallbackTargetID}-main`\n const narrowMenuID = useId()\n const resolvedMenuLabels = {...defaultMenuLabels, ...menuLabels}\n\n const updateMenuViewportOffsetBlockStart = useCallback(() => {\n setMenuViewportOffsetBlockStart(Math.max(0, headerRef.current?.getBoundingClientRect().top ?? 0))\n }, [])\n\n const closeNarrowMenu = useCallback(() => {\n if (menuHidden) return\n\n setMenuHidden(true)\n onNarrowMenuToggle?.(false)\n }, [menuHidden, onNarrowMenuToggle])\n\n const handleMobileMenuClick = () => {\n if (!menuHidden) {\n closeNarrowMenu()\n return\n }\n\n setSearchVisible(false)\n updateMenuViewportOffsetBlockStart()\n setMenuHidden(false)\n onNarrowMenuToggle?.(true)\n }\n const focusTrapRef = useRef<HTMLDivElement | null>(null)\n\n const resolveDefaultSkipToContentTarget = useCallback(() => {\n const mainElement = Array.from(document.querySelectorAll<HTMLElement>('main')).find(isUsableSkipToContentTarget)\n\n if (mainElement) {\n if (!mainElement.id) {\n mainElement.id = document.getElementById('start-of-content') ? generatedMainTargetID : 'start-of-content'\n }\n return mainElement\n }\n\n return fallbackTargetRef.current\n }, [generatedMainTargetID])\n\n const resolveSkipToContentTarget = useCallback(() => {\n if (skipToContentTargetId) {\n const explicitTarget = document.getElementById(skipToContentTargetId)\n if (explicitTarget && isUsableSkipToContentTarget(explicitTarget)) return explicitTarget\n }\n\n return resolveDefaultSkipToContentTarget()\n }, [resolveDefaultSkipToContentTarget, skipToContentTargetId])\n\n const handleSkipToContentFocus = useCallback(() => {\n setStartOfContentButtonFocused(true)\n\n const target = resolveSkipToContentTarget()\n if (target) setResolvedSkipToContentTargetId(target.id)\n }, [resolveSkipToContentTarget])\n\n const handleSkipToContentClick = useCallback(\n (event: React.MouseEvent<HTMLAnchorElement>) => {\n if (\n event.defaultPrevented ||\n event.button !== 0 ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.altKey\n ) {\n return\n }\n\n const explicitTarget = skipToContentTargetId ? document.getElementById(skipToContentTargetId) : null\n const explicitTargetUnavailable =\n skipToContentTargetId && (!explicitTarget || !isUsableSkipToContentTarget(explicitTarget))\n const target = resolveSkipToContentTarget()\n\n if (explicitTargetUnavailable) {\n // eslint-disable-next-line no-console\n console.warn(\n `SubdomainNavBar could not find the skip-to-content target \"${skipToContentTargetId}\". Falling back to the page's main content.`,\n )\n }\n\n if (!target) return\n\n const targetHash = `#${encodeURIComponent(target.id)}`\n event.currentTarget.setAttribute('href', targetHash)\n setResolvedSkipToContentTargetId(target.id)\n\n const addedTabIndex = target.tabIndex < 0 && !target.hasAttribute('tabindex')\n if (addedTabIndex) {\n target.tabIndex = -1\n }\n\n const previousScrollMarginBlockStart = target.style.scrollMarginBlockStart\n if (fixed) {\n const navbarHeight = headerRef.current?.getBoundingClientRect().height ?? 0\n target.style.scrollMarginBlockStart = `${navbarHeight}px`\n }\n\n target.addEventListener(\n 'blur',\n () => {\n if (addedTabIndex) target.removeAttribute('tabindex')\n target.style.scrollMarginBlockStart = previousScrollMarginBlockStart\n },\n {once: true},\n )\n\n target.focus({preventScroll: true})\n },\n [fixed, resolveSkipToContentTarget, skipToContentTargetId],\n )\n\n useEffect(() => {\n const target = resolveSkipToContentTarget()\n if (target) setResolvedSkipToContentTargetId(target.id)\n }, [resolveSkipToContentTarget])\n\n useFocusTrap({containerRef: focusTrapRef, restoreFocusOnCleanUp: true, disabled: menuHidden})\n useKeyboardEscape(closeNarrowMenu)\n\n useEffect(() => {\n if (isLarge) closeNarrowMenu()\n }, [closeNarrowMenu, isLarge])\n\n useEffect(() => {\n if (menuHidden || isLarge) return\n\n updateMenuViewportOffsetBlockStart()\n\n const resizeObserver = new ResizeObserver(updateMenuViewportOffsetBlockStart)\n const header = headerRef.current\n\n if (header) resizeObserver.observe(header)\n resizeObserver.observe(document.documentElement)\n\n return () => resizeObserver.disconnect()\n }, [isLarge, menuHidden, updateMenuViewportOffsetBlockStart])\n\n useEffect(() => {\n if (menuHidden) return\n\n const previousOverflow = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n\n return () => {\n document.body.style.overflow = previousOverflow\n }\n }, [menuHidden])\n\n const setStartOfContentButtonFocusedFalse = useCallback(() => setStartOfContentButtonFocused(false), [])\n\n const hasLinks =\n useMemo(\n () =>\n React.Children.toArray(children).filter(\n child => React.isValidElement(child) && typeof child.type !== 'string' && child.type === Link,\n ),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n ).length > 0\n\n const menuItems = useMemo(\n () =>\n React.Children.toArray(children)\n .map((child, index) => {\n if (React.isValidElement<SubdomainNavBarLinkMeasurementProps>(child) && child.type === Link) {\n return React.cloneElement(child, {\n href: child.props.href,\n children: child.props.children,\n style: {\n '--animation-order': index,\n } as React.CSSProperties,\n })\n }\n return null\n })\n .filter(Boolean),\n [children],\n )\n\n const actionItems = useMemo(\n () =>\n React.Children.toArray(children).filter(\n (child): child is React.ReactElement<CTAActionProps> =>\n React.isValidElement<CTAActionProps>(child) &&\n (child.type === PrimaryAction || child.type === SecondaryAction),\n ),\n [children],\n )\n\n const narrowActionItems = useMemo(\n () =>\n actionItems.map(child =>\n React.cloneElement(child, {\n onClick: event => {\n child.props.onClick?.(event)\n if (!event.defaultPrevented) closeNarrowMenu()\n },\n }),\n ),\n [actionItems, closeNarrowMenu],\n )\n\n const hasActions = actionItems.length > 0\n\n const searchItem = useMemo(\n () =>\n React.Children.toArray(children).find(\n (child): child is React.ReactElement<SubdomainNavBarSearchProps> =>\n React.isValidElement<SubdomainNavBarSearchProps>(child) && child.type === Search,\n ),\n [children],\n )\n const hasSearch = Boolean(searchItem)\n\n const handleSearchOpen = useCallback(() => {\n if (!hasSearch) return\n\n closeNarrowMenu()\n setSearchVisible(true)\n }, [closeNarrowMenu, hasSearch])\n\n const handleSearchClose = useCallback(() => setSearchVisible(false), [])\n\n useImperativeHandle(\n forwardedRef,\n () => {\n if (!headerRef.current) {\n return {\n openSearch: handleSearchOpen,\n closeSearch: handleSearchClose,\n } as SubdomainNavBarHandle\n }\n\n return Object.assign(headerRef.current, {\n openSearch: handleSearchOpen,\n closeSearch: handleSearchClose,\n })\n },\n [handleSearchClose, handleSearchOpen],\n )\n\n useSearchKeyboardShortcut({\n disabled: searchVisible,\n keyboardShortcut: searchItem?.props.keyboardShortcut,\n onTrigger: handleSearchOpen,\n })\n\n const hasLeadingComponent = leadingComponent != null\n const hasTrailingComponent = trailingComponent != null\n const hasNarrowMenuContent = hasLinks || hasActions || hasLeadingComponent || hasTrailingComponent\n const subdomainNavBarStyle = {\n ...style,\n '--SubdomainNavBar-menu-offset-block-start': `${menuViewportOffsetBlockStart}px`,\n } as React.CSSProperties\n\n return (\n <>\n <div\n className={clsx(\n styles['SubdomainNavBar-outer-container'],\n fixed && styles['SubdomainNavBar-outer-container--fixed'],\n )}\n >\n <Button\n as=\"a\"\n href={`#${resolvedSkipToContentTargetId || skipToContentTargetId || fallbackTargetID}`}\n variant=\"primary\"\n size=\"small\"\n className={clsx(styles['SubdomainNavBar-skip-to-content'], !startOfContentButtonFocused && 'visually-hidden')}\n onFocus={handleSkipToContentFocus}\n onBlur={setStartOfContentButtonFocusedFalse}\n onClick={handleSkipToContentClick}\n >\n Skip to content\n </Button>\n <header\n ref={headerRef}\n className={clsx(styles['SubdomainNavBar'], className)}\n data-testid={testIds.root}\n style={subdomainNavBarStyle}\n {...rest}\n >\n <div\n ref={focusTrapRef}\n className={clsx(\n styles['SubdomainNavBar-inner-container'],\n searchVisible && styles['SubdomainNavBar-inner-container--search-open'],\n !fullWidth && styles['SubdomainNavBar-inner-container--centered'],\n )}\n data-testid={testIds.innerContainer}\n >\n <nav aria-label=\"Header logo and title\">\n <ol className={styles['SubdomainNavBar-title-area']}>\n <li>\n <a href={logoHref} aria-label=\"Github Home\" className={styles['SubdomainNavBar-logo-mark']}>\n <span className={styles['SubdomainNavBar-back-arrow']}>\n <ChevronLeftIcon fill=\"currentColor\" size={24} />\n </span>\n <MarkGithubIcon fill=\"currentColor\" size={24} />\n </a>\n </li>\n {title && (\n <>\n <li>\n <a\n href={titleHref}\n aria-label={`${title} home`}\n className={clsx(styles['SubdomainNavBar-title'])}\n >\n <Text size=\"400\" weight=\"medium\">\n <span className={styles['SubdomainNavBar-title-prefix']}>GitHub</span>{' '}\n <span className={styles['SubdomainNavBar-title-label']}>{title}</span>\n </Text>\n </a>\n </li>\n </>\n )}\n </ol>\n </nav>\n {hasLinks && (\n <nav\n id=\"menu-navigation\"\n aria-label={title}\n className={styles['SubdomainNavBar-primary-nav']}\n data-testid={testIds.menuLinks}\n >\n <NavigationVisbilityObserver\n className={clsx(styles['SubdomainNavBar-primary-nav-list--invisible'])}\n overflowMenuLabel={resolvedMenuLabels.overflowMenuLabel}\n >\n {menuItems}\n </NavigationVisbilityObserver>\n </nav>\n )}\n {isLarge && hasLeadingComponent && (\n <div className={styles['SubdomainNavBar-leading-component']}>{leadingComponent}</div>\n )}\n\n <div className={clsx(styles['SubdomainNavBar-secondary-nav'])}>\n {React.Children.toArray(children)\n .map(child => {\n if (React.isValidElement<SubdomainNavBarSearchProps>(child) && child.type === Search) {\n return React.cloneElement(child, {\n active: searchVisible,\n className: clsx(\n child.props.className,\n isLarge &&\n (hasActions || hasTrailingComponent) &&\n styles['SubdomainNavBar-search-trigger--has-trailing-item'],\n ),\n onSearchOpen: handleSearchOpen,\n onSearchClose: handleSearchClose,\n title,\n })\n }\n return null\n })\n .filter(Boolean)}\n\n {hasNarrowMenuContent && (\n <button\n aria-expanded={!menuHidden}\n aria-label={menuHidden ? resolvedMenuLabels.menuLabel : resolvedMenuLabels.closeLabel}\n aria-controls={narrowMenuID}\n className={clsx(\n styles['SubdomainNavBar-menu-button'],\n styles['SubdomainNavBar-mobile-menu-button'],\n !menuHidden && styles['SubdomainNavBar-menu-button--close'],\n )}\n data-testid={testIds.menuButton}\n onClick={handleMobileMenuClick}\n >\n <span className={styles['SubdomainNavBar-menu-button-icon']} aria-hidden=\"true\">\n <span className={styles['SubdomainNavBar-menu-button-bar']}></span>\n <span className={styles['SubdomainNavBar-menu-button-bar']}></span>\n <span className={styles['SubdomainNavBar-menu-button-bar']}></span>\n </span>\n <span className={styles['SubdomainNavBar-menu-button-label']}>\n {menuHidden ? resolvedMenuLabels.menuLabel : resolvedMenuLabels.closeLabel}\n </span>\n </button>\n )}\n\n {isLarge && hasTrailingComponent && (\n <div className={styles['SubdomainNavBar-trailing-component']}>{trailingComponent}</div>\n )}\n {isLarge && hasActions && (\n <div\n className={clsx(\n styles['SubdomainNavBar-button-area'],\n styles['SubdomainNavBar-button-area--visible'],\n hasTrailingComponent && styles['SubdomainNavBar-button-area--has-leading-item'],\n )}\n >\n <div className={styles['SubdomainNavBar-button-area-inner']}>{actionItems}</div>\n </div>\n )}\n\n {!isLarge && (\n <div\n id={narrowMenuID}\n className={clsx(\n styles['SubdomainNavBar-menu-wrapper'],\n menuHidden && styles['SubdomainNavBar-menu-wrapper--close'],\n )}\n >\n {!menuHidden && (\n <div>\n {hasLeadingComponent && (\n <div className={styles['SubdomainNavBar-leading-component']}>{leadingComponent}</div>\n )}\n {hasLinks && (\n <SubdomainNavBarLinkContext.Provider value={{onLinkClick: closeNarrowMenu}}>\n {isMedium ? (\n <ul className={styles['SubdomainNavBar-primary-nav-list--visible']}>{menuItems}</ul>\n ) : (\n <NavigationVisbilityObserver\n className={clsx(styles['SubdomainNavBar-primary-nav-list--visible'])}\n overflowMenuLabel={resolvedMenuLabels.overflowMenuLabel}\n >\n {menuItems}\n </NavigationVisbilityObserver>\n )}\n </SubdomainNavBarLinkContext.Provider>\n )}\n </div>\n )}\n {!menuHidden && (hasActions || hasTrailingComponent) && (\n <div\n className={clsx(\n styles['SubdomainNavBar-menu-wrapper-footer'],\n (hasLinks || hasLeadingComponent) &&\n styles['SubdomainNavBar-menu-wrapper-footer--has-leading-item'],\n )}\n >\n {hasTrailingComponent && (\n <div className={styles['SubdomainNavBar-trailing-component']}>{trailingComponent}</div>\n )}\n {hasActions && (\n <div\n className={clsx(\n styles['SubdomainNavBar-button-area'],\n styles['SubdomainNavBar-button-area--visible'],\n )}\n >\n <div className={styles['SubdomainNavBar-button-area-inner']}>\n <SubdomainNavBarActionSizeContext.Provider value={isMedium ? 'small' : 'medium'}>\n {narrowActionItems}\n </SubdomainNavBarActionSizeContext.Provider>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n {!isLarge && !menuHidden && <div className={styles['SubdomainNavBar-menu-backdrop']} aria-hidden=\"true\" />}\n </header>\n </div>\n <div ref={fallbackTargetRef} id={fallbackTargetID} tabIndex={-1} />\n </>\n )\n})\n\nexport type SubdomainNavBarLinkProps = {\n href: string\n isExternal?: boolean\n} & React.DetailedHTMLProps<React.LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>\n\ntype SubdomainNavBarLinkMeasurementProps = SubdomainNavBarLinkProps\n\nfunction Link({\n href,\n className,\n children,\n isExternal,\n 'aria-current': ariaCurrent,\n 'aria-hidden': ariaHidden,\n tabIndex,\n ...rest\n}: PropsWithChildren<SubdomainNavBarLinkProps>) {\n const {isOverflowed, onLinkClick} = useSubdomainNavBarLinkContext()\n\n return (\n <li\n {...rest}\n // Keep overflowed links measurable in layout; removing them would make overflow calculation state-dependent.\n aria-hidden={isOverflowed ? true : ariaHidden}\n className={clsx(styles['SubdomainNavBar-primary-nav-list-item'], className)}\n tabIndex={isOverflowed ? -1 : tabIndex}\n >\n <a\n href={href}\n aria-current={ariaCurrent}\n className={styles['SubdomainNavBar-link']}\n onClick={onLinkClick}\n tabIndex={isOverflowed ? -1 : undefined}\n >\n <span className={styles['SubdomainNavBar-link-content']}>\n <span className={styles['SubdomainNavBar-link-text']}>{children}</span>\n {isExternal && <LinkExternalIcon size={16} aria-label=\"External link\" />}\n </span>\n </a>\n </li>\n )\n}\n\nexport type SubdomainNavBarSearchResultProps = {\n title: string\n description: string\n url: string\n date: string\n category?: string\n group?: string\n isExternal?: boolean\n}\n\nexport type SubdomainNavBarSearchResultGroupProps = {\n title: string\n results: SubdomainNavBarSearchResultProps[]\n}\n\nexport type SubdomainNavBarSearchResults = SubdomainNavBarSearchResultProps[] | SubdomainNavBarSearchResultGroupProps[]\n\nexport type SubdomainNavBarSearchLabels = {\n /**\n * Accessible label for the search input. Defaults to \"Search\".\n */\n searchLabel: string\n /**\n * Visible and accessible label for the close action. Defaults to \"Close\".\n */\n closeLabel: string\n /**\n * Accessible label for an untitled search result group. Defaults to \"Results\".\n */\n resultsLabel: string\n /**\n * Accessible label for grouped search results without a search term. Defaults to \"Search results\".\n */\n searchResultsLabel: string\n /**\n * Formats the default search placeholder and dialog label using the navigation title.\n */\n formatSearchWithTitle: (title: string) => string\n /**\n * Formats the accessible label for the responsive search trigger.\n */\n formatSearchTrigger: (placeholder: string) => string\n /**\n * Formats the visible heading for ungrouped search results.\n */\n formatResultsHeading: (searchTerm: string) => string\n /**\n * Formats the accessible label for grouped search results.\n */\n formatResultsLabel: (searchTerm: string) => string\n /**\n * Formats the search result count announcement.\n */\n formatSuggestions: (count: number) => string\n}\n\nconst defaultSearchLabels: SubdomainNavBarSearchLabels = {\n searchLabel: 'Search',\n closeLabel: 'Close',\n resultsLabel: 'Results',\n searchResultsLabel: 'Search results',\n formatSearchWithTitle: title => `Search ${title}`,\n formatSearchTrigger: placeholder => `${placeholder} search`,\n formatResultsHeading: searchTerm => `Results for “${searchTerm}”`,\n formatResultsLabel: searchTerm => `Results for ${searchTerm}`,\n formatSuggestions: count => `${count} suggestions.`,\n}\n\nexport type SubdomainNavBarSearchProps = {\n onSubmit: (e: React.FormEvent<HTMLFormElement>) => void\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void\n active?: boolean\n className?: string\n title?: string\n onSearchOpen?: () => void\n onSearchClose?: () => void\n /**\n * Placeholder text shown in the search trigger and the opened search input.\n */\n placeholder?: string\n /**\n * Optional keyboard shortcut hint shown in the search trigger. Pass an empty string to hide it.\n */\n shortcutLabel?: string\n /**\n * Optional global keyboard shortcut that opens the search dialog. Omit or pass `false` to disable it.\n * Supports single keys and modifier combinations, such as `/` or `Command+Option+k`.\n */\n keyboardShortcut?: string | false\n searchResults?: SubdomainNavBarSearchResults\n searchTerm?: string\n /**\n * Customizable visible and accessible search text. Unspecified labels use the English defaults.\n */\n labels?: Partial<SubdomainNavBarSearchLabels>\n}\n\nconst _SearchInternal = forwardRef<HTMLInputElement, SubdomainNavBarSearchProps>(\n (\n {\n active,\n className,\n title,\n searchResults,\n searchTerm,\n onSearchOpen,\n onSearchClose,\n onSubmit,\n onChange,\n placeholder,\n shortcutLabel,\n keyboardShortcut,\n labels,\n },\n forwardedRef,\n ) => {\n const dialogRef = useRef<HTMLDialogElement | null>(null)\n const inputRef = useRef<HTMLInputElement | null>(null)\n const resolvedLabels = {...defaultSearchLabels, ...labels}\n const resolvedPlaceholder =\n placeholder ?? (title ? resolvedLabels.formatSearchWithTitle(title) : resolvedLabels.searchLabel)\n const dialogLabel = title ? resolvedLabels.formatSearchWithTitle(title) : resolvedLabels.searchLabel\n const resolvedShortcutLabel = shortcutLabel ?? (keyboardShortcut || '')\n const {\n activeDescendant,\n handleSearchResultKeyDown,\n hasGroupedSearchResults,\n hasSearchResults,\n normalizedSearchResultGroups,\n resetActiveDescendant,\n searchResultsLength,\n } = useSearchResults({dialogRef, searchResults})\n\n const handleClose = useCallback(() => {\n onSearchClose?.()\n resetActiveDescendant()\n }, [onSearchClose, resetActiveDescendant])\n\n const setInputRef = useCallback(\n (input: HTMLInputElement | null) => {\n inputRef.current = input\n\n if (typeof forwardedRef === 'function') {\n forwardedRef(input)\n return\n }\n\n if (forwardedRef) {\n forwardedRef.current = input\n }\n },\n [forwardedRef],\n )\n\n useEffect(() => {\n const dialog = dialogRef.current\n\n if (!dialog) return\n\n if (active) {\n if (!dialog.open) {\n if (typeof dialog.showModal === 'function') {\n dialog.showModal()\n } else {\n dialog.setAttribute('open', '')\n }\n }\n\n inputRef.current?.focus()\n\n return\n }\n\n if (dialog.open) {\n if (typeof dialog.close === 'function') {\n dialog.close()\n } else {\n dialog.removeAttribute('open')\n }\n }\n }, [active, inputRef])\n\n useEffect(() => {\n const dialog = dialogRef.current\n if (!dialog) return\n\n const handleDialogClick = (event: MouseEvent) => {\n if (event.target !== dialog) return\n\n const dialogRect = dialog.getBoundingClientRect()\n const clickIsInsideDialog =\n event.clientX >= dialogRect.left &&\n event.clientX <= dialogRect.right &&\n event.clientY >= dialogRect.top &&\n event.clientY <= dialogRect.bottom\n\n if (clickIsInsideDialog) return\n\n handleClose()\n }\n\n dialog.addEventListener('click', handleDialogClick)\n return () => dialog.removeEventListener('click', handleDialogClick)\n }, [handleClose])\n\n const handleDialogCancel = useCallback(\n (event: React.SyntheticEvent<HTMLDialogElement>) => {\n event.preventDefault()\n handleClose()\n },\n [handleClose],\n )\n\n const renderSearchResult = ({result, index}: NormalizedSearchResultGroup['results'][number]) => (\n <li key={`${result.title}-${index}`} className={styles['SubdomainNavBar-search-result-item']} role=\"presentation\">\n <div className={styles['SubdomainNavBar-search-result-item-container']}>\n <a\n id={`subdomainnavbar-search-result-${index}`}\n href={result.url}\n role=\"option\"\n aria-selected={index === activeDescendant}\n >\n <span>{result.title}</span>\n {hasGroupedSearchResults && result.isExternal && <ArrowUpRightIcon size={20} aria-hidden=\"true\" />}\n </a>\n </div>\n\n <Text\n as=\"p\"\n size=\"200\"\n id={`subdomainnavbar-search-result-item-desc${index}`}\n className={styles['SubdomainNavBar-search-result-item-desc']}\n >\n {result.description}\n </Text>\n <div className={styles['SubdomainNavBar-search-result-item-meta']}>\n <Text size=\"100\" className={styles['SubdomainNavBar-search-result-item-desc']}>\n {result.date}\n </Text>\n {result.category && (\n <>\n <Text size=\"100\" className={styles['SubdomainNavBar-search-result-item-desc']}>\n {' '}\n •{' '}\n </Text>\n <Text size=\"100\" className={styles['SubdomainNavBar-search-result-item-desc']}>\n {result.category}\n </Text>\n </>\n )}\n </div>\n </li>\n )\n\n return (\n <>\n <div className={clsx(styles['SubdomainNavBar-search-trigger'], className)}>\n <button\n aria-label={resolvedLabels.formatSearchTrigger(resolvedPlaceholder)}\n className={styles['SubdomainNavBar-search-input-button']}\n onClick={onSearchOpen}\n data-testid=\"toggle-search\"\n type=\"button\"\n >\n <span className={styles['SubdomainNavBar-search-input-button-placeholder']}>\n <SearchIcon aria-hidden=\"true\" size={16} />\n <span>{resolvedPlaceholder}</span>\n </span>\n {resolvedShortcutLabel && (\n <span className={styles['SubdomainNavBar-search-input-button-shortcut']}>{resolvedShortcutLabel}</span>\n )}\n </button>\n </div>\n <dialog\n ref={dialogRef}\n aria-label={dialogLabel}\n className={clsx(\n styles['SubdomainNavBar-search-dialog'],\n hasSearchResults && styles['SubdomainNavBar-search-dialog--has-results'],\n )}\n onCancel={handleDialogCancel}\n >\n {active && (\n <>\n <div className={clsx(styles['SubdomainNavBar-search-dialog-control-area'])}>\n <div className={styles['SubdomainNavBar-search-input-area']}>\n <form className={clsx(styles['SubdomainNavBar-search-form'])} onSubmit={onSubmit} role=\"search\">\n <FormControl fullWidth size=\"medium\">\n <FormControl.Label visuallyHidden>{resolvedLabels.searchLabel}</FormControl.Label>\n <TextInput\n ref={setInputRef}\n className={clsx(styles['SubdomainNavBar-search-text-input'])}\n name=\"search\"\n role=\"combobox\"\n // Suppress the browser's native autocomplete/autofill dropdown. When it is\n // open, the browser consumes the first Escape to dismiss it, which would\n // otherwise require an extra keypress before the native dialog can close.\n autoComplete=\"off\"\n aria-autocomplete=\"list\"\n aria-expanded={hasSearchResults}\n aria-controls=\"listbox-search-results\"\n placeholder={resolvedPlaceholder}\n onChange={onChange}\n defaultValue={searchTerm}\n invisible\n leadingVisual={<SearchIcon size={16} />}\n aria-activedescendant={\n activeDescendant === -1 ? undefined : `subdomainnavbar-search-result-${activeDescendant}`\n }\n onKeyDown={handleSearchResultKeyDown}\n />\n </FormControl>\n </form>\n <button\n aria-label={resolvedLabels.closeLabel}\n className={styles['SubdomainNavBar-search-close-button']}\n onClick={handleClose}\n type=\"button\"\n >\n {resolvedLabels.closeLabel}\n </button>\n </div>\n </div>\n\n <div\n id=\"listbox-search-results\"\n className={clsx(\n styles['SubdomainNavBar-search-results-area'],\n hasSearchResults && styles['SubdomainNavBar-search-results-area--visible'],\n )}\n >\n {hasSearchResults && (\n <div className={clsx(styles['SubdomainNavBar-search-results-container'])}>\n {!hasGroupedSearchResults && (\n <Text\n id=\"subdomainnavbar-search-results-heading\"\n className={styles['SubdomainNavBar-search-results-heading']}\n >\n {resolvedLabels.formatResultsHeading(searchTerm ?? '')}\n </Text>\n )}\n <ul\n role=\"listbox\"\n tabIndex={0}\n aria-labelledby={!hasGroupedSearchResults ? 'subdomainnavbar-search-results-heading' : undefined}\n aria-label={\n hasGroupedSearchResults\n ? searchTerm\n ? resolvedLabels.formatResultsLabel(searchTerm)\n : resolvedLabels.searchResultsLabel\n : undefined\n }\n className={clsx(styles['SubdomainNavBar-search-results'])}\n >\n {hasGroupedSearchResults\n ? normalizedSearchResultGroups.map((group, groupIndex) => {\n const groupHeadingId = `subdomainnavbar-search-result-group-${groupIndex}`\n\n return (\n <li\n key={group.title ?? `ungrouped-${groupIndex}`}\n className={styles['SubdomainNavBar-search-result-group']}\n role=\"presentation\"\n >\n {group.title && (\n <Text\n id={groupHeadingId}\n className={styles['SubdomainNavBar-search-result-group-heading']}\n >\n {group.title}\n </Text>\n )}\n <ul\n className={styles['SubdomainNavBar-search-result-group-list']}\n role=\"group\"\n aria-labelledby={group.title ? groupHeadingId : undefined}\n aria-label={group.title ? undefined : resolvedLabels.resultsLabel}\n >\n {group.results.map(renderSearchResult)}\n </ul>\n </li>\n )\n })\n : normalizedSearchResultGroups.flatMap(group => group.results.map(renderSearchResult))}\n </ul>\n </div>\n )}\n <div aria-live=\"polite\" aria-atomic=\"true\" data-testid={testIds.liveRegion} className=\"visually-hidden\">\n {resolvedLabels.formatSuggestions(searchResultsLength)}\n <span> </span>\n </div>\n </div>\n </>\n )}\n </dialog>\n </>\n )\n },\n)\n\nconst Search = _SearchInternal\n\nRoot.displayName = 'SubdomainNavBar'\n\ntype CTAActionProps = {\n href: string\n} & React.HTMLAttributes<HTMLAnchorElement>\n\nfunction PrimaryAction({children, href, ...rest}: PropsWithChildren<CTAActionProps>) {\n const size = React.useContext(SubdomainNavBarActionSizeContext)\n\n return (\n <Button\n as=\"a\"\n href={href}\n className={clsx(styles['SubdomainNavBar-cta-button'])}\n variant=\"primary\"\n size={size}\n {...rest}\n >\n {children}\n </Button>\n )\n}\n\nfunction SecondaryAction({children, href, ...rest}: PropsWithChildren<CTAActionProps>) {\n const size = React.useContext(SubdomainNavBarActionSizeContext)\n\n return (\n <Button\n as=\"a\"\n href={href}\n className={clsx(styles['SubdomainNavBar-cta-button'], styles['SubdomainNavBar-cta-button--secondary'])}\n size={size}\n {...rest}\n >\n {children}\n </Button>\n )\n}\n\nexport const SubdomainNavBar = Object.assign(Root, {\n Link,\n Search,\n PrimaryAction,\n SecondaryAction,\n testIds,\n})\n"],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import './SubdomainNavBar.module-WIrpYyjV.css'
|
|
2
|
-
|
|
1
|
+
import './SubdomainNavBar.module-WIrpYyjV.css';//#region src/SubdomainNavBar/SubdomainNavBar.module.css
|
|
2
|
+
var e = "Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___fdyTJ", t = {
|
|
3
|
+
SubdomainNavBar: e,
|
|
3
4
|
"SubdomainNavBar-outer-container": "Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-outer-container___IgUR_",
|
|
4
5
|
"SubdomainNavBar-outer-container--fixed": "Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-outer-container--fixed___MRCMj",
|
|
5
6
|
"SubdomainNavBar-inner-container": "Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container___AG_fq",
|
|
@@ -81,6 +82,6 @@ import './SubdomainNavBar.module-WIrpYyjV.css';var e = {
|
|
|
81
82
|
"SubdomainNavBar-skip-to-content": "Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-skip-to-content___bG_Zk"
|
|
82
83
|
};
|
|
83
84
|
//#endregion
|
|
84
|
-
export { e as default };
|
|
85
|
+
export { e as SubdomainNavBar, t as default };
|
|
85
86
|
|
|
86
87
|
//# sourceMappingURL=SubdomainNavBar.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubdomainNavBarLinkContext.js","names":[],"sources":["../../src/SubdomainNavBar/SubdomainNavBarLinkContext.ts"],"sourcesContent":["import React, {useContext} from 'react'\n\ntype SubdomainNavBarLinkContextValue = {\n isOverflowed?: boolean\n onLinkClick?: React.MouseEventHandler<HTMLAnchorElement>\n}\n\nexport const SubdomainNavBarLinkContext = React.createContext<SubdomainNavBarLinkContextValue>({})\n\nexport function useSubdomainNavBarLinkContext() {\n return useContext(SubdomainNavBarLinkContext)\n}\n"],"mappings":";;AAOA,IAAa,IAA6B,EAAM,cAA+C,
|
|
1
|
+
{"version":3,"file":"SubdomainNavBarLinkContext.js","names":[],"sources":["../../src/SubdomainNavBar/SubdomainNavBarLinkContext.ts"],"sourcesContent":["import React, {useContext} from 'react'\n\ntype SubdomainNavBarLinkContextValue = {\n isOverflowed?: boolean\n onLinkClick?: React.MouseEventHandler<HTMLAnchorElement>\n}\n\nexport const SubdomainNavBarLinkContext = React.createContext<SubdomainNavBarLinkContextValue>({})\n\nexport function useSubdomainNavBarLinkContext() {\n return useContext(SubdomainNavBarLinkContext)\n}\n"],"mappings":";;AAOA,IAAa,IAA6B,EAAM,cAA+C,CAAC,CAAC;AAEjG,SAAgB,IAAgC;CAC9C,OAAO,EAAW,CAA0B;AAC9C"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useEffect as e, useMemo as t } from "react";
|
|
2
2
|
//#region src/SubdomainNavBar/useSearchKeyboardShortcut.ts
|
|
3
|
-
var n = new Set([
|
|
3
|
+
var n = /* @__PURE__ */ new Set([
|
|
4
4
|
"alt",
|
|
5
5
|
"option",
|
|
6
6
|
"ctrl",
|
|
@@ -30,7 +30,7 @@ function i(e) {
|
|
|
30
30
|
}
|
|
31
31
|
function a(e, t) {
|
|
32
32
|
let n = t.key.toLowerCase(), r = e.key.toLowerCase(), i = e.code.toLowerCase();
|
|
33
|
-
return e.altKey !== t.altKey || e.ctrlKey !== t.ctrlKey || e.metaKey !== t.metaKey ? !1 : /^[^a-z0-9]$/.test(n) && r === n ? t.shiftKey
|
|
33
|
+
return e.altKey !== t.altKey || e.ctrlKey !== t.ctrlKey || e.metaKey !== t.metaKey ? !1 : /^[^a-z0-9]$/.test(n) && r === n ? !t.shiftKey || e.shiftKey : e.shiftKey === t.shiftKey ? /^[a-z]$/.test(n) ? r === n || i === `key${n}` : /^[0-9]$/.test(n) ? r === n || i === `digit${n}` : r === n : !1;
|
|
34
34
|
}
|
|
35
35
|
function o({ disabled: n, keyboardShortcut: o = !1, onTrigger: s }) {
|
|
36
36
|
let c = t(() => i(o), [o]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSearchKeyboardShortcut.js","names":[],"sources":["../../src/SubdomainNavBar/useSearchKeyboardShortcut.ts"],"sourcesContent":["import {useEffect, useMemo} from 'react'\n\ntype SearchKeyboardShortcut = {\n key: string\n altKey: boolean\n ctrlKey: boolean\n metaKey: boolean\n shiftKey: boolean\n}\n\ntype UseSearchKeyboardShortcutOptions = {\n disabled: boolean\n keyboardShortcut?: string | false\n onTrigger: () => void\n}\n\nconst searchKeyboardShortcutModifiers = new Set(['alt', 'option', 'ctrl', 'control', 'meta', 'cmd', 'command', 'shift'])\n\nfunction isEditableKeyboardTarget(target: EventTarget | Element | null): boolean {\n if (!(target instanceof Element)) return false\n\n const editableElement = target.closest(\n 'input, textarea, select, [role=\"textbox\"], [role=\"combobox\"], [role=\"searchbox\"], [contenteditable]',\n )\n\n if (!editableElement) return false\n\n if (editableElement instanceof HTMLElement && editableElement.isContentEditable) return true\n\n return editableElement.matches('input, textarea, select, [role=\"textbox\"], [role=\"combobox\"], [role=\"searchbox\"]')\n}\n\nfunction parseSearchKeyboardShortcut(keyboardShortcut: string | false): SearchKeyboardShortcut | false {\n if (!keyboardShortcut) return false\n\n const shortcutParts = keyboardShortcut\n .split('+')\n .map(part => part.trim())\n .filter(Boolean)\n const key = shortcutParts.pop()\n if (!key) return false\n\n const modifiers = shortcutParts.map(part => part.toLowerCase())\n\n if (!modifiers.every(modifier => searchKeyboardShortcutModifiers.has(modifier))) return false\n\n return {\n key,\n altKey: modifiers.includes('alt') || modifiers.includes('option'),\n ctrlKey: modifiers.includes('ctrl') || modifiers.includes('control'),\n metaKey: modifiers.includes('meta') || modifiers.includes('cmd') || modifiers.includes('command'),\n shiftKey: modifiers.includes('shift'),\n }\n}\n\nfunction keyboardEventMatchesShortcut(event: KeyboardEvent, shortcut: SearchKeyboardShortcut): boolean {\n const shortcutKey = shortcut.key.toLowerCase()\n const eventKey = event.key.toLowerCase()\n const eventCode = event.code.toLowerCase()\n\n if (event.altKey !== shortcut.altKey || event.ctrlKey !== shortcut.ctrlKey || event.metaKey !== shortcut.metaKey) {\n return false\n }\n\n if (/^[^a-z0-9]$/.test(shortcutKey) && eventKey === shortcutKey) {\n return shortcut.shiftKey ? event.shiftKey : true\n }\n\n if (event.shiftKey !== shortcut.shiftKey) {\n return false\n }\n\n if (/^[a-z]$/.test(shortcutKey)) {\n return eventKey === shortcutKey || eventCode === `key${shortcutKey}`\n }\n\n if (/^[0-9]$/.test(shortcutKey)) {\n return eventKey === shortcutKey || eventCode === `digit${shortcutKey}`\n }\n\n return eventKey === shortcutKey\n}\n\nexport function useSearchKeyboardShortcut({\n disabled,\n keyboardShortcut = false,\n onTrigger,\n}: UseSearchKeyboardShortcutOptions) {\n const shortcut = useMemo(() => parseSearchKeyboardShortcut(keyboardShortcut), [keyboardShortcut])\n\n useEffect(() => {\n if (!shortcut) return\n\n const handleDocumentKeyDown = (event: KeyboardEvent) => {\n if (disabled || event.defaultPrevented || event.isComposing || !keyboardEventMatchesShortcut(event, shortcut)) {\n return\n }\n\n if (isEditableKeyboardTarget(event.target) || isEditableKeyboardTarget(document.activeElement)) {\n return\n }\n\n event.preventDefault()\n onTrigger()\n }\n\n document.addEventListener('keydown', handleDocumentKeyDown)\n return () => document.removeEventListener('keydown', handleDocumentKeyDown)\n }, [disabled, onTrigger, shortcut])\n}\n"],"mappings":";;AAgBA,IAAM,
|
|
1
|
+
{"version":3,"file":"useSearchKeyboardShortcut.js","names":[],"sources":["../../src/SubdomainNavBar/useSearchKeyboardShortcut.ts"],"sourcesContent":["import {useEffect, useMemo} from 'react'\n\ntype SearchKeyboardShortcut = {\n key: string\n altKey: boolean\n ctrlKey: boolean\n metaKey: boolean\n shiftKey: boolean\n}\n\ntype UseSearchKeyboardShortcutOptions = {\n disabled: boolean\n keyboardShortcut?: string | false\n onTrigger: () => void\n}\n\nconst searchKeyboardShortcutModifiers = new Set(['alt', 'option', 'ctrl', 'control', 'meta', 'cmd', 'command', 'shift'])\n\nfunction isEditableKeyboardTarget(target: EventTarget | Element | null): boolean {\n if (!(target instanceof Element)) return false\n\n const editableElement = target.closest(\n 'input, textarea, select, [role=\"textbox\"], [role=\"combobox\"], [role=\"searchbox\"], [contenteditable]',\n )\n\n if (!editableElement) return false\n\n if (editableElement instanceof HTMLElement && editableElement.isContentEditable) return true\n\n return editableElement.matches('input, textarea, select, [role=\"textbox\"], [role=\"combobox\"], [role=\"searchbox\"]')\n}\n\nfunction parseSearchKeyboardShortcut(keyboardShortcut: string | false): SearchKeyboardShortcut | false {\n if (!keyboardShortcut) return false\n\n const shortcutParts = keyboardShortcut\n .split('+')\n .map(part => part.trim())\n .filter(Boolean)\n const key = shortcutParts.pop()\n if (!key) return false\n\n const modifiers = shortcutParts.map(part => part.toLowerCase())\n\n if (!modifiers.every(modifier => searchKeyboardShortcutModifiers.has(modifier))) return false\n\n return {\n key,\n altKey: modifiers.includes('alt') || modifiers.includes('option'),\n ctrlKey: modifiers.includes('ctrl') || modifiers.includes('control'),\n metaKey: modifiers.includes('meta') || modifiers.includes('cmd') || modifiers.includes('command'),\n shiftKey: modifiers.includes('shift'),\n }\n}\n\nfunction keyboardEventMatchesShortcut(event: KeyboardEvent, shortcut: SearchKeyboardShortcut): boolean {\n const shortcutKey = shortcut.key.toLowerCase()\n const eventKey = event.key.toLowerCase()\n const eventCode = event.code.toLowerCase()\n\n if (event.altKey !== shortcut.altKey || event.ctrlKey !== shortcut.ctrlKey || event.metaKey !== shortcut.metaKey) {\n return false\n }\n\n if (/^[^a-z0-9]$/.test(shortcutKey) && eventKey === shortcutKey) {\n return shortcut.shiftKey ? event.shiftKey : true\n }\n\n if (event.shiftKey !== shortcut.shiftKey) {\n return false\n }\n\n if (/^[a-z]$/.test(shortcutKey)) {\n return eventKey === shortcutKey || eventCode === `key${shortcutKey}`\n }\n\n if (/^[0-9]$/.test(shortcutKey)) {\n return eventKey === shortcutKey || eventCode === `digit${shortcutKey}`\n }\n\n return eventKey === shortcutKey\n}\n\nexport function useSearchKeyboardShortcut({\n disabled,\n keyboardShortcut = false,\n onTrigger,\n}: UseSearchKeyboardShortcutOptions) {\n const shortcut = useMemo(() => parseSearchKeyboardShortcut(keyboardShortcut), [keyboardShortcut])\n\n useEffect(() => {\n if (!shortcut) return\n\n const handleDocumentKeyDown = (event: KeyboardEvent) => {\n if (disabled || event.defaultPrevented || event.isComposing || !keyboardEventMatchesShortcut(event, shortcut)) {\n return\n }\n\n if (isEditableKeyboardTarget(event.target) || isEditableKeyboardTarget(document.activeElement)) {\n return\n }\n\n event.preventDefault()\n onTrigger()\n }\n\n document.addEventListener('keydown', handleDocumentKeyDown)\n return () => document.removeEventListener('keydown', handleDocumentKeyDown)\n }, [disabled, onTrigger, shortcut])\n}\n"],"mappings":";;AAgBA,IAAM,oBAAkC,IAAI,IAAI;CAAC;CAAO;CAAU;CAAQ;CAAW;CAAQ;CAAO;CAAW;AAAO,CAAC;AAEvH,SAAS,EAAyB,GAA+C;CAC/E,IAAI,EAAE,aAAkB,UAAU,OAAO;CAEzC,IAAM,IAAkB,EAAO,QAC7B,2GACF;CAMA,OAJK,IAED,aAA2B,eAAe,EAAgB,oBAA0B,KAEjF,EAAgB,QAAQ,wFAAkF,IAJpF;AAK/B;AAEA,SAAS,EAA4B,GAAkE;CACrG,IAAI,CAAC,GAAkB,OAAO;CAE9B,IAAM,IAAgB,EACnB,MAAM,GAAG,CAAC,CACV,KAAI,MAAQ,EAAK,KAAK,CAAC,CAAC,CACxB,OAAO,OAAO,GACX,IAAM,EAAc,IAAI;CAC9B,IAAI,CAAC,GAAK,OAAO;CAEjB,IAAM,IAAY,EAAc,KAAI,MAAQ,EAAK,YAAY,CAAC;CAI9D,OAFK,EAAU,OAAM,MAAY,EAAgC,IAAI,CAAQ,CAAC,IAEvE;EACL;EACA,QAAQ,EAAU,SAAS,KAAK,KAAK,EAAU,SAAS,QAAQ;EAChE,SAAS,EAAU,SAAS,MAAM,KAAK,EAAU,SAAS,SAAS;EACnE,SAAS,EAAU,SAAS,MAAM,KAAK,EAAU,SAAS,KAAK,KAAK,EAAU,SAAS,SAAS;EAChG,UAAU,EAAU,SAAS,OAAO;CACtC,IARwF;AAS1F;AAEA,SAAS,EAA6B,GAAsB,GAA2C;CACrG,IAAM,IAAc,EAAS,IAAI,YAAY,GACvC,IAAW,EAAM,IAAI,YAAY,GACjC,IAAY,EAAM,KAAK,YAAY;CAsBzC,OApBI,EAAM,WAAW,EAAS,UAAU,EAAM,YAAY,EAAS,WAAW,EAAM,YAAY,EAAS,UAChG,KAGL,cAAc,KAAK,CAAW,KAAK,MAAa,IAC3C,GAAS,YAAW,EAAM,WAG/B,EAAM,aAAa,EAAS,WAI5B,UAAU,KAAK,CAAW,IACrB,MAAa,KAAe,MAAc,MAAM,MAGrD,UAAU,KAAK,CAAW,IACrB,MAAa,KAAe,MAAc,QAAQ,MAGpD,MAAa,IAXX;AAYX;AAEA,SAAgB,EAA0B,EACxC,aACA,sBAAmB,IACnB,gBACmC;CACnC,IAAM,IAAW,QAAc,EAA4B,CAAgB,GAAG,CAAC,CAAgB,CAAC;CAEhG,QAAgB;EACd,IAAI,CAAC,GAAU;EAEf,IAAM,KAAyB,MAAyB;GAClD,KAAY,EAAM,oBAAoB,EAAM,eAAe,CAAC,EAA6B,GAAO,CAAQ,KAIxG,EAAyB,EAAM,MAAM,KAAK,EAAyB,SAAS,aAAa,MAI7F,EAAM,eAAe,GACrB,EAAU;EACZ;EAGA,OADA,SAAS,iBAAiB,WAAW,CAAqB,SAC7C,SAAS,oBAAoB,WAAW,CAAqB;CAC5E,GAAG;EAAC;EAAU;EAAW;CAAQ,CAAC;AACpC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSearchResults.js","names":[],"sources":["../../src/SubdomainNavBar/useSearchResults.ts"],"sourcesContent":["import {useCallback, useMemo, useState, type KeyboardEvent, type RefObject} from 'react'\n\nimport type {\n SubdomainNavBarSearchResultGroupProps,\n SubdomainNavBarSearchResultProps,\n SubdomainNavBarSearchResults,\n} from './SubdomainNavBar'\n\nexport type NormalizedSearchResultGroup = {\n title?: string\n results: Array<{\n result: SubdomainNavBarSearchResultProps\n index: number\n }>\n}\n\ntype UseSearchResultsOptions = {\n dialogRef: RefObject<HTMLDialogElement | null>\n searchResults?: SubdomainNavBarSearchResults\n}\n\nfunction isSearchResultGroup(\n item: SubdomainNavBarSearchResultProps | SubdomainNavBarSearchResultGroupProps,\n): item is SubdomainNavBarSearchResultGroupProps {\n return 'results' in item\n}\n\nfunction normalizeSearchResults(searchResults: SubdomainNavBarSearchResults = []): NormalizedSearchResultGroup[] {\n const groups: NormalizedSearchResultGroup[] = []\n let resultIndex = 0\n\n for (const item of searchResults) {\n if (isSearchResultGroup(item)) {\n if (item.results.length === 0) continue\n\n groups.push({\n title: item.title,\n results: item.results.map(result => ({\n result,\n index: resultIndex++,\n })),\n })\n\n continue\n }\n\n const groupTitle = item.group\n let group = groups.find(existingGroup => existingGroup.title === groupTitle)\n\n if (!group) {\n group = {\n title: groupTitle,\n results: [],\n }\n groups.push(group)\n }\n\n group.results.push({\n result: item,\n index: resultIndex++,\n })\n }\n\n return groups\n}\n\nexport function useSearchResults({dialogRef, searchResults}: UseSearchResultsOptions) {\n const normalizedSearchResultGroups = useMemo(() => normalizeSearchResults(searchResults), [searchResults])\n const hasGroupedSearchResults = normalizedSearchResultGroups.some(group => group.title)\n const searchResultsLength = normalizedSearchResultGroups.reduce((count, group) => count + group.results.length, 0)\n const hasSearchResults = searchResultsLength > 0\n const [activeDescendant, setActiveDescendant] = useState(-1)\n\n const resetActiveDescendant = useCallback(() => setActiveDescendant(-1), [])\n\n const handleSearchResultKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n const supportedKeys = ['ArrowDown', 'ArrowUp', 'Enter']\n const dialog = dialogRef.current\n let nextActiveDescendant = activeDescendant\n\n if (!supportedKeys.includes(event.key) || (event.key === 'Enter' && activeDescendant === -1) || !dialog) {\n return\n }\n\n event.preventDefault()\n\n if (event.key === 'ArrowDown') {\n nextActiveDescendant = activeDescendant < searchResultsLength - 1 ? activeDescendant + 1 : -1\n setActiveDescendant(nextActiveDescendant)\n } else if (event.key === 'ArrowUp') {\n nextActiveDescendant = activeDescendant === -1 ? searchResultsLength - 1 : activeDescendant - 1\n setActiveDescendant(nextActiveDescendant)\n }\n\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n dialog\n .querySelector(`#subdomainnavbar-search-result-${nextActiveDescendant}`)\n ?.scrollIntoView({block: 'nearest'})\n }\n\n if (event.key === 'Enter') {\n const link = dialog.querySelector<HTMLAnchorElement>(`#subdomainnavbar-search-result-${activeDescendant}`)\n link?.click()\n }\n },\n [activeDescendant, dialogRef, searchResultsLength],\n )\n\n return {\n activeDescendant,\n handleSearchResultKeyDown,\n hasGroupedSearchResults,\n hasSearchResults,\n normalizedSearchResultGroups,\n resetActiveDescendant,\n searchResultsLength,\n }\n}\n"],"mappings":";;AAqBA,SAAS,EACP,GAC+C;
|
|
1
|
+
{"version":3,"file":"useSearchResults.js","names":[],"sources":["../../src/SubdomainNavBar/useSearchResults.ts"],"sourcesContent":["import {useCallback, useMemo, useState, type KeyboardEvent, type RefObject} from 'react'\n\nimport type {\n SubdomainNavBarSearchResultGroupProps,\n SubdomainNavBarSearchResultProps,\n SubdomainNavBarSearchResults,\n} from './SubdomainNavBar'\n\nexport type NormalizedSearchResultGroup = {\n title?: string\n results: Array<{\n result: SubdomainNavBarSearchResultProps\n index: number\n }>\n}\n\ntype UseSearchResultsOptions = {\n dialogRef: RefObject<HTMLDialogElement | null>\n searchResults?: SubdomainNavBarSearchResults\n}\n\nfunction isSearchResultGroup(\n item: SubdomainNavBarSearchResultProps | SubdomainNavBarSearchResultGroupProps,\n): item is SubdomainNavBarSearchResultGroupProps {\n return 'results' in item\n}\n\nfunction normalizeSearchResults(searchResults: SubdomainNavBarSearchResults = []): NormalizedSearchResultGroup[] {\n const groups: NormalizedSearchResultGroup[] = []\n let resultIndex = 0\n\n for (const item of searchResults) {\n if (isSearchResultGroup(item)) {\n if (item.results.length === 0) continue\n\n groups.push({\n title: item.title,\n results: item.results.map(result => ({\n result,\n index: resultIndex++,\n })),\n })\n\n continue\n }\n\n const groupTitle = item.group\n let group = groups.find(existingGroup => existingGroup.title === groupTitle)\n\n if (!group) {\n group = {\n title: groupTitle,\n results: [],\n }\n groups.push(group)\n }\n\n group.results.push({\n result: item,\n index: resultIndex++,\n })\n }\n\n return groups\n}\n\nexport function useSearchResults({dialogRef, searchResults}: UseSearchResultsOptions) {\n const normalizedSearchResultGroups = useMemo(() => normalizeSearchResults(searchResults), [searchResults])\n const hasGroupedSearchResults = normalizedSearchResultGroups.some(group => group.title)\n const searchResultsLength = normalizedSearchResultGroups.reduce((count, group) => count + group.results.length, 0)\n const hasSearchResults = searchResultsLength > 0\n const [activeDescendant, setActiveDescendant] = useState(-1)\n\n const resetActiveDescendant = useCallback(() => setActiveDescendant(-1), [])\n\n const handleSearchResultKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n const supportedKeys = ['ArrowDown', 'ArrowUp', 'Enter']\n const dialog = dialogRef.current\n let nextActiveDescendant = activeDescendant\n\n if (!supportedKeys.includes(event.key) || (event.key === 'Enter' && activeDescendant === -1) || !dialog) {\n return\n }\n\n event.preventDefault()\n\n if (event.key === 'ArrowDown') {\n nextActiveDescendant = activeDescendant < searchResultsLength - 1 ? activeDescendant + 1 : -1\n setActiveDescendant(nextActiveDescendant)\n } else if (event.key === 'ArrowUp') {\n nextActiveDescendant = activeDescendant === -1 ? searchResultsLength - 1 : activeDescendant - 1\n setActiveDescendant(nextActiveDescendant)\n }\n\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n dialog\n .querySelector(`#subdomainnavbar-search-result-${nextActiveDescendant}`)\n ?.scrollIntoView({block: 'nearest'})\n }\n\n if (event.key === 'Enter') {\n const link = dialog.querySelector<HTMLAnchorElement>(`#subdomainnavbar-search-result-${activeDescendant}`)\n link?.click()\n }\n },\n [activeDescendant, dialogRef, searchResultsLength],\n )\n\n return {\n activeDescendant,\n handleSearchResultKeyDown,\n hasGroupedSearchResults,\n hasSearchResults,\n normalizedSearchResultGroups,\n resetActiveDescendant,\n searchResultsLength,\n }\n}\n"],"mappings":";;AAqBA,SAAS,EACP,GAC+C;CAC/C,OAAO,aAAa;AACtB;AAEA,SAAS,EAAuB,IAA8C,CAAC,GAAkC;CAC/G,IAAM,IAAwC,CAAC,GAC3C,IAAc;CAElB,KAAK,IAAM,KAAQ,GAAe;EAChC,IAAI,EAAoB,CAAI,GAAG;GAC7B,IAAI,EAAK,QAAQ,WAAW,GAAG;GAE/B,EAAO,KAAK;IACV,OAAO,EAAK;IACZ,SAAS,EAAK,QAAQ,KAAI,OAAW;KACnC;KACA,OAAO;IACT,EAAE;GACJ,CAAC;GAED;EACF;EAEA,IAAM,IAAa,EAAK,OACpB,IAAQ,EAAO,MAAK,MAAiB,EAAc,UAAU,CAAU;EAU3E,AARK,MACH,IAAQ;GACN,OAAO;GACP,SAAS,CAAC;EACZ,GACA,EAAO,KAAK,CAAK,IAGnB,EAAM,QAAQ,KAAK;GACjB,QAAQ;GACR,OAAO;EACT,CAAC;CACH;CAEA,OAAO;AACT;AAEA,SAAgB,EAAiB,EAAC,cAAW,oBAAyC;CACpF,IAAM,IAA+B,QAAc,EAAuB,CAAa,GAAG,CAAC,CAAa,CAAC,GACnG,IAA0B,EAA6B,MAAK,MAAS,EAAM,KAAK,GAChF,IAAsB,EAA6B,QAAQ,GAAO,MAAU,IAAQ,EAAM,QAAQ,QAAQ,CAAC,GAC3G,IAAmB,IAAsB,GACzC,CAAC,GAAkB,KAAuB,EAAS,EAAE,GAErD,IAAwB,QAAkB,EAAoB,EAAE,GAAG,CAAC,CAAC;CAoC3E,OAAO;EACL;EACA,2BApCgC,GAC/B,MAA2C;GAC1C,IAAM,IAAgB;IAAC;IAAa;IAAW;GAAO,GAChD,IAAS,EAAU,SACrB,IAAuB;GAEvB,CAAC,EAAc,SAAS,EAAM,GAAG,KAAM,EAAM,QAAQ,WAAW,MAAqB,MAAO,CAAC,MAIjG,EAAM,eAAe,GAEjB,EAAM,QAAQ,eAChB,IAAuB,IAAmB,IAAsB,IAAI,IAAmB,IAAI,IAC3F,EAAoB,CAAoB,KAC/B,EAAM,QAAQ,cACvB,IAAuB,MAAqB,KAAK,IAAsB,IAAI,IAAmB,GAC9F,EAAoB,CAAoB,KAGtC,EAAM,QAAQ,eAAe,EAAM,QAAQ,cAC7C,EACG,cAAc,kCAAkC,GAAsB,CAAC,EACtE,eAAe,EAAC,OAAO,UAAS,CAAC,GAGnC,EAAM,QAAQ,WAEhB,EADoB,cAAiC,kCAAkC,GACvF,CAAA,EAAM,MAAM;EAEhB,GACA;GAAC;GAAkB;GAAW;EAAmB,CAKjD;EACA;EACA;EACA;EACA;EACA;CACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useVisibilityObserver.js","names":[],"sources":["../../src/SubdomainNavBar/useVisibilityObserver.ts"],"sourcesContent":["import {RefObject, useCallback, useEffect, useState} from 'react'\n\nimport useIsomorphicLayoutEffect from '../hooks/useIsomorphicLayoutEffect'\n\nexport type VisibilityMap = {\n [key: string]: boolean\n}\n\nfunction visibilityMapsAreEqual(current: VisibilityMap, next: VisibilityMap) {\n const currentKeys = Object.keys(current)\n const nextKeys = Object.keys(next)\n\n return currentKeys.length === nextKeys.length && nextKeys.every(key => current[key] === next[key])\n}\n\nexport function useVisibilityObserver(\n navigationRef: RefObject<HTMLUListElement | null>,\n overflowRef: RefObject<HTMLElement | null>,\n measurementKey: string,\n disabled = false,\n) {\n const [visibilityMap, setVisibilityMap] = useState<VisibilityMap>({})\n\n const updateVisibilityMap = useCallback(() => {\n const navigation = navigationRef.current\n\n if (disabled || !navigation) {\n setVisibilityMap(prev => (Object.keys(prev).length === 0 ? prev : {}))\n return\n }\n\n const navItems = Array.from(navigation.children).filter(\n (item): item is HTMLElement => item instanceof HTMLElement && item !== overflowRef.current,\n )\n\n if (navItems.length === 0) {\n setVisibilityMap(prev => (Object.keys(prev).length === 0 ? prev : {}))\n return\n }\n\n const navigationStyles = window.getComputedStyle(navigation)\n const inlinePadding =\n (Number.parseFloat(navigationStyles.paddingInlineStart) || 0) +\n (Number.parseFloat(navigationStyles.paddingInlineEnd) || 0)\n const availableWidth = Math.max(0, navigation.clientWidth - inlinePadding)\n const navItemsWidth = navItems.reduce((width, item) => width + item.offsetWidth, 0)\n\n if (navItemsWidth <= availableWidth) {\n const nextVisibilityMap = navItems.reduce<VisibilityMap>((nextMap, _item, index) => {\n nextMap[index] = true\n return nextMap\n }, {})\n\n setVisibilityMap(prev => (visibilityMapsAreEqual(prev, nextVisibilityMap) ? prev : nextVisibilityMap))\n return\n }\n\n const availableWidthWithOverflow = Math.max(0, availableWidth - (overflowRef.current?.offsetWidth ?? 0))\n let visibleItemsWidth = 0\n let hasOverflowedItem = false\n\n const nextVisibilityMap = navItems.reduce<VisibilityMap>((nextMap, item, index) => {\n if (hasOverflowedItem) {\n nextMap[index] = false\n return nextMap\n }\n\n const nextVisibleItemsWidth = visibleItemsWidth + item.offsetWidth\n const isVisible = nextVisibleItemsWidth <= availableWidthWithOverflow\n\n if (isVisible) {\n visibleItemsWidth = nextVisibleItemsWidth\n } else {\n hasOverflowedItem = true\n }\n\n nextMap[index] = isVisible\n return nextMap\n }, {})\n\n setVisibilityMap(prev => (visibilityMapsAreEqual(prev, nextVisibilityMap) ? prev : nextVisibilityMap))\n }, [disabled, navigationRef, overflowRef])\n\n useIsomorphicLayoutEffect(() => {\n updateVisibilityMap()\n }, [measurementKey, updateVisibilityMap])\n\n useEffect(() => {\n const navigation = navigationRef.current\n if (disabled || !navigation) return\n\n let animationFrameId: number | undefined\n let cancelled = false\n\n const scheduleVisibilityUpdate = () => {\n if (animationFrameId !== undefined) {\n cancelAnimationFrame(animationFrameId)\n }\n\n animationFrameId = requestAnimationFrame(updateVisibilityMap)\n }\n\n const resizeObserver =\n typeof ResizeObserver !== 'undefined' ? new ResizeObserver(scheduleVisibilityUpdate) : undefined\n\n resizeObserver?.observe(navigation)\n\n for (const item of Array.from(navigation.children)) {\n if (item instanceof HTMLElement && item !== overflowRef.current) {\n resizeObserver?.observe(item)\n }\n }\n\n if (overflowRef.current) {\n resizeObserver?.observe(overflowRef.current)\n }\n\n if (!resizeObserver) {\n // eslint-disable-next-line github/prefer-observers -- This is the fallback path when ResizeObserver is unavailable.\n window.addEventListener('resize', scheduleVisibilityUpdate)\n }\n\n scheduleVisibilityUpdate()\n\n const fonts = (document as unknown as {fonts?: FontFaceSet}).fonts\n if (fonts) {\n void (async () => {\n await fonts.ready\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Cleanup can run before font loading resolves.\n if (!cancelled) {\n scheduleVisibilityUpdate()\n }\n })()\n }\n\n return () => {\n cancelled = true\n if (animationFrameId !== undefined) {\n cancelAnimationFrame(animationFrameId)\n }\n resizeObserver?.disconnect()\n if (!resizeObserver) {\n window.removeEventListener('resize', scheduleVisibilityUpdate)\n }\n }\n }, [disabled, measurementKey, navigationRef, overflowRef, updateVisibilityMap])\n\n useEffect(() => {\n if (disabled) {\n setVisibilityMap(prev => (Object.keys(prev).length === 0 ? prev : {}))\n }\n }, [disabled])\n\n return [visibilityMap]\n}\n"],"mappings":";;;AAQA,SAAS,EAAuB,GAAwB,GAAqB;CAC3E,IAAM,IAAc,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"useVisibilityObserver.js","names":[],"sources":["../../src/SubdomainNavBar/useVisibilityObserver.ts"],"sourcesContent":["import {RefObject, useCallback, useEffect, useState} from 'react'\n\nimport useIsomorphicLayoutEffect from '../hooks/useIsomorphicLayoutEffect'\n\nexport type VisibilityMap = {\n [key: string]: boolean\n}\n\nfunction visibilityMapsAreEqual(current: VisibilityMap, next: VisibilityMap) {\n const currentKeys = Object.keys(current)\n const nextKeys = Object.keys(next)\n\n return currentKeys.length === nextKeys.length && nextKeys.every(key => current[key] === next[key])\n}\n\nexport function useVisibilityObserver(\n navigationRef: RefObject<HTMLUListElement | null>,\n overflowRef: RefObject<HTMLElement | null>,\n measurementKey: string,\n disabled = false,\n) {\n const [visibilityMap, setVisibilityMap] = useState<VisibilityMap>({})\n\n const updateVisibilityMap = useCallback(() => {\n const navigation = navigationRef.current\n\n if (disabled || !navigation) {\n setVisibilityMap(prev => (Object.keys(prev).length === 0 ? prev : {}))\n return\n }\n\n const navItems = Array.from(navigation.children).filter(\n (item): item is HTMLElement => item instanceof HTMLElement && item !== overflowRef.current,\n )\n\n if (navItems.length === 0) {\n setVisibilityMap(prev => (Object.keys(prev).length === 0 ? prev : {}))\n return\n }\n\n const navigationStyles = window.getComputedStyle(navigation)\n const inlinePadding =\n (Number.parseFloat(navigationStyles.paddingInlineStart) || 0) +\n (Number.parseFloat(navigationStyles.paddingInlineEnd) || 0)\n const availableWidth = Math.max(0, navigation.clientWidth - inlinePadding)\n const navItemsWidth = navItems.reduce((width, item) => width + item.offsetWidth, 0)\n\n if (navItemsWidth <= availableWidth) {\n const nextVisibilityMap = navItems.reduce<VisibilityMap>((nextMap, _item, index) => {\n nextMap[index] = true\n return nextMap\n }, {})\n\n setVisibilityMap(prev => (visibilityMapsAreEqual(prev, nextVisibilityMap) ? prev : nextVisibilityMap))\n return\n }\n\n const availableWidthWithOverflow = Math.max(0, availableWidth - (overflowRef.current?.offsetWidth ?? 0))\n let visibleItemsWidth = 0\n let hasOverflowedItem = false\n\n const nextVisibilityMap = navItems.reduce<VisibilityMap>((nextMap, item, index) => {\n if (hasOverflowedItem) {\n nextMap[index] = false\n return nextMap\n }\n\n const nextVisibleItemsWidth = visibleItemsWidth + item.offsetWidth\n const isVisible = nextVisibleItemsWidth <= availableWidthWithOverflow\n\n if (isVisible) {\n visibleItemsWidth = nextVisibleItemsWidth\n } else {\n hasOverflowedItem = true\n }\n\n nextMap[index] = isVisible\n return nextMap\n }, {})\n\n setVisibilityMap(prev => (visibilityMapsAreEqual(prev, nextVisibilityMap) ? prev : nextVisibilityMap))\n }, [disabled, navigationRef, overflowRef])\n\n useIsomorphicLayoutEffect(() => {\n updateVisibilityMap()\n }, [measurementKey, updateVisibilityMap])\n\n useEffect(() => {\n const navigation = navigationRef.current\n if (disabled || !navigation) return\n\n let animationFrameId: number | undefined\n let cancelled = false\n\n const scheduleVisibilityUpdate = () => {\n if (animationFrameId !== undefined) {\n cancelAnimationFrame(animationFrameId)\n }\n\n animationFrameId = requestAnimationFrame(updateVisibilityMap)\n }\n\n const resizeObserver =\n typeof ResizeObserver !== 'undefined' ? new ResizeObserver(scheduleVisibilityUpdate) : undefined\n\n resizeObserver?.observe(navigation)\n\n for (const item of Array.from(navigation.children)) {\n if (item instanceof HTMLElement && item !== overflowRef.current) {\n resizeObserver?.observe(item)\n }\n }\n\n if (overflowRef.current) {\n resizeObserver?.observe(overflowRef.current)\n }\n\n if (!resizeObserver) {\n // eslint-disable-next-line github/prefer-observers -- This is the fallback path when ResizeObserver is unavailable.\n window.addEventListener('resize', scheduleVisibilityUpdate)\n }\n\n scheduleVisibilityUpdate()\n\n const fonts = (document as unknown as {fonts?: FontFaceSet}).fonts\n if (fonts) {\n void (async () => {\n await fonts.ready\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Cleanup can run before font loading resolves.\n if (!cancelled) {\n scheduleVisibilityUpdate()\n }\n })()\n }\n\n return () => {\n cancelled = true\n if (animationFrameId !== undefined) {\n cancelAnimationFrame(animationFrameId)\n }\n resizeObserver?.disconnect()\n if (!resizeObserver) {\n window.removeEventListener('resize', scheduleVisibilityUpdate)\n }\n }\n }, [disabled, measurementKey, navigationRef, overflowRef, updateVisibilityMap])\n\n useEffect(() => {\n if (disabled) {\n setVisibilityMap(prev => (Object.keys(prev).length === 0 ? prev : {}))\n }\n }, [disabled])\n\n return [visibilityMap]\n}\n"],"mappings":"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"}
|
package/esm/Tabs/Tabs.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import e from "../node_modules/clsx/dist/clsx.js";
|
|
1
|
+
import { clsx as e } from "../node_modules/clsx/dist/clsx.js";
|
|
2
2
|
import { AnimationProvider as t } from "../animation/AnimationProvider/AnimationProvider.js";
|
|
3
3
|
import { Animate as n } from "../animation/Animate/Animate.js";
|
|
4
4
|
import { useProvidedRefOrCreate as r } from "../hooks/useRef.js";
|
|
5
5
|
import { Stack as i } from "../Stack/Stack.js";
|
|
6
6
|
import { Text as a } from "../Text/Text.js";
|
|
7
|
-
import { ChevronLeftIcon as o
|
|
7
|
+
import { ChevronLeftIcon as o } from "../node_modules/@primer/octicons-react/dist/icons/ChevronLeftIcon.js";
|
|
8
|
+
import { ChevronRightIcon as s } from "../node_modules/@primer/octicons-react/dist/icons/ChevronRightIcon.js";
|
|
8
9
|
import { useTabs as c } from "../hooks/useTabs.js";
|
|
9
10
|
import '../packages/design-tokens/lib/design-tokens/css/tokens/functional/components/tabs/colors-with-modes-DCEDN6wM.css';import '../packages/design-tokens/lib/design-tokens/css/tokens/functional/components/tabs/base-T7ABwZVf.css';/* empty css */
|
|
10
11
|
/* empty css */
|
package/esm/Tabs/Tabs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.js","names":[],"sources":["../../src/Tabs/Tabs.tsx"],"sourcesContent":["import React, {\n memo,\n ReactNode,\n forwardRef,\n Children,\n isValidElement,\n cloneElement,\n useRef,\n useEffect,\n HTMLAttributes,\n useCallback,\n} from 'react'\nimport {clsx} from 'clsx'\nimport {ChevronLeftIcon, ChevronRightIcon} from '@primer/octicons-react'\nimport {useTabs} from '../hooks/useTabs'\nimport {useProvidedRefOrCreate} from '../hooks/useRef'\nimport {BaseProps} from '../component-helpers'\nimport {Animate, AnimationProvider, AnimationVariants} from '../animation'\nimport {Text} from '../Text'\nimport {Stack} from '../Stack'\n\n/**\n * Design tokens\n */\nimport '@primer/brand-primitives/lib/design-tokens/css/tokens/functional/components/tabs/base.css'\nimport '@primer/brand-primitives/lib/design-tokens/css/tokens/functional/components/tabs/colors-with-modes.css'\n\n/** * Main Stylesheet (as a CSS Module) */\nimport styles from './Tabs.module.css'\n\nconst testIds = {\n root: 'Tabs',\n get tab() {\n return `${this.root}-tab`\n },\n get panel() {\n return `${this.root}-panel`\n },\n get indicators() {\n return `${this.root}-indicators`\n },\n}\n\n/**\n * Accessible label for the entire tabs component, used by screen readers to describe the tab group.\n * Note: Only use one of `aria-label` or `aria-labelled` by. Not both or neither.\n */\ntype LabelOrLabelledBy =\n | {'aria-label': string; 'aria-labelledby'?: never}\n | {'aria-labelledby': string; 'aria-label'?: never}\n\nexport type TabsProps = {\n /**\n * Visual style variant of the tabs. Affects the appearance and styling theme.\n */\n variant?: 'default' | 'accent' | 'underline'\n /**\n * Horizontal alignment of the tab navigation. Defaults to 'start'.\n */\n align?: 'start' | 'center'\n /**\n * Named children to be rendered as tab items and panels.\n */\n children: ReactNode\n /**\n * Sets the default active tab. \"0\" (first tab) by default.\n */\n defaultActiveTab?: string\n /**\n * Callback function triggered when the active tab changes. Receives the new active tab identifier.\n */\n onChange?: (activeTab: string) => void\n\n /**\n * Additional CSS class names to apply to the tabs container for custom styling.\n */\n className?: string\n /**\n * @param internalAccessibleLabels - Customizable labels for screen readers to improve accessibility. These are applied internally using the aria-label attribute.\n * @param internalAccessibleLabels.controlsNext - Label for the \"next tab\" control button, used by screen readers. Default is \"Next tab\".\n * @param internalAccessibleLabels.controlsPrev - Label for the \"previous tab\" control button, used by screen readers. Default is \"Previous tab\".\n */\n internalAccessibleLabels?: {\n controlsNext: string\n controlsPrev: string\n }\n} & LabelOrLabelledBy &\n BaseProps<HTMLDivElement> &\n Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'aria-label' | 'aria-labelledby'>\n\nconst defaultInternalAccessibleLabels = {\n controlsNext: 'Next tab',\n controlsPrev: 'Previous tab',\n}\n\nconst _TabsRoot = forwardRef<HTMLDivElement, TabsProps>(\n (\n {\n align = 'center',\n children,\n defaultActiveTab,\n onChange,\n variant = 'default',\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n internalAccessibleLabels = defaultInternalAccessibleLabels,\n ...props\n },\n ref,\n ) => {\n const {activeTab, activateTab, getTabListProps, getTabProps, getTabPanelProps} = useTabs({\n defaultTab: defaultActiveTab,\n onTabActivate: onChange,\n })\n const tabsContainerRef = useRef<HTMLDivElement>(null)\n const tabsWrapperRef = useRef<HTMLDivElement>(null)\n const sliderRef = useRef<HTMLDivElement>(null)\n\n const childrenArray = Children.toArray(children)\n\n type TabsItemElement = React.ReactElement<TabsItemProps> & {ref?: React.Ref<HTMLButtonElement>}\n\n const tabs = childrenArray\n .filter((child): child is TabsItemElement => isValidElement<TabsItemProps>(child) && child.type === TabsItem)\n .map((tab, index) => {\n const tabId = String(index)\n const originalRef = tab.ref\n const tabProps = getTabProps<HTMLButtonElement>(tabId, originalRef)\n\n return cloneElement(tab, {\n ...tabProps,\n id: tab.props.id ?? tabProps.id,\n 'aria-controls': tab.props['aria-controls'] ?? tabProps['aria-controls'],\n value: tabId,\n key: tabProps.id,\n isActive: activeTab === tabId,\n variant,\n })\n })\n\n const panels = childrenArray\n .filter(\n (child): child is React.ReactElement<TabsPanelProps> =>\n isValidElement<TabsPanelProps>(child) && child.type === TabsPanel,\n )\n .map((child, index) => {\n const panelId = String(index)\n const tabPanelProps = getTabPanelProps(panelId)\n\n return cloneElement(child, {\n ...tabPanelProps,\n id: child.props.id ?? tabPanelProps.id,\n key: String(index),\n })\n })\n\n useEffect(() => {\n /* istanbul ignore next */\n if (!tabsContainerRef.current || !sliderRef.current) return\n\n const activeTabButton = tabsContainerRef.current.querySelector(`[aria-selected=\"true\"]`) as HTMLButtonElement\n\n if (!activeTab) return\n\n const updateSliderPosition = () => {\n const sliderElement = sliderRef.current\n const tabsContainer = tabsContainerRef.current\n /* istanbul ignore next */\n if (!sliderElement || !tabsContainer) return\n\n const containerPaddingRem = window\n .getComputedStyle(tabsContainer)\n .getPropertyValue('--brand-Tabs-container-padding')\n\n const containerPadding = parseFloat(containerPaddingRem) * 16 // base size\n\n const offsetX = activeTabButton.offsetLeft - containerPadding\n const width = activeTabButton.offsetWidth\n\n sliderElement.style.setProperty('--brand-Tabs-slider-x', `${offsetX}px`)\n sliderElement.style.setProperty('--brand-Tabs-slider-width', `${width}px`)\n }\n\n updateSliderPosition()\n\n const resizeObserver = new ResizeObserver(updateSliderPosition)\n resizeObserver.observe(tabsContainerRef.current)\n\n // On narrow viewports this will scroll the active tab into the center.\n // Important because we show a gradient in dark mode.\n const tabsContainer = tabsContainerRef.current\n const containerWidth = tabsContainer.clientWidth\n const containerPaddingRem = window\n .getComputedStyle(tabsContainer)\n .getPropertyValue('--brand-Tabs-container-padding')\n const containerPadding = parseFloat(containerPaddingRem) * 16\n const tabLeft = activeTabButton.offsetLeft - containerPadding\n const tabWidth = activeTabButton.offsetWidth\n const tabCenter = tabLeft + tabWidth / 2\n\n const targetScrollLeft = tabCenter - containerWidth / 2\n\n const maxScrollLeft = tabsContainer.scrollWidth - containerWidth // defines boudnary\n const finalScrollLeft = Math.max(0, Math.min(targetScrollLeft, maxScrollLeft))\n\n tabsContainer.scrollTo({\n left: finalScrollLeft,\n behavior: 'smooth',\n })\n\n return () => {\n resizeObserver.disconnect()\n }\n }, [activeTab])\n\n // Tracks the overflow state for mobile gradient visibility\n // Should only appear when enough items trigger an overflow\n // Related to gradient functionality\n useEffect(() => {\n const tabsContainer = tabsContainerRef.current\n const wrapperElement = tabsWrapperRef.current\n /* istanbul ignore next */\n if (!tabsContainer || !wrapperElement) return\n\n // This relies heavily on layout and measurement and, as such, isn't practical to test\n /* istanbul ignore next */\n const updateScrollState = () => {\n const {scrollLeft, scrollWidth, clientWidth} = tabsContainer\n const hasOverflow = scrollWidth > clientWidth\n\n const canScrollRight = hasOverflow && scrollLeft < scrollWidth - clientWidth - 1\n\n // Set CSS variables on the wrapper element for the gradient\n wrapperElement.style.setProperty('--scroll-offset', `${scrollLeft}px`)\n wrapperElement.style.setProperty('--has-overflow', hasOverflow ? '1' : '0')\n wrapperElement.style.setProperty('--can-scroll-right', canScrollRight ? '1' : '0')\n }\n\n updateScrollState()\n const resizeObserver = new ResizeObserver(updateScrollState)\n resizeObserver.observe(tabsContainer)\n\n // eslint-disable-next-line github/prefer-observers\n tabsContainer.addEventListener('scroll', updateScrollState)\n\n return () => {\n tabsContainer.removeEventListener('scroll', updateScrollState)\n resizeObserver.disconnect()\n }\n }, [tabs])\n\n /**\n * The LabelOrLabelledBy type guarantees that, if ariaLabel isn't a string,\n * then ariaLabelledBy is guaranteed to be a string, and vice versa.\n */\n const accessibleLabel = typeof ariaLabel === 'string' ? {label: ariaLabel} : {labelledBy: ariaLabelledBy}\n const tabListProps = getTabListProps(accessibleLabel)\n\n const handleNextTabControl = useCallback(() => {\n if (activeTab && activeTab !== String(tabs.length - 1)) {\n activateTab(String(Number(activeTab) + 1))\n }\n }, [activeTab, activateTab, tabs])\n\n const handlePrevTabControl = useCallback(() => {\n if (activeTab && activeTab !== '0') {\n activateTab(String(Number(activeTab) - 1))\n }\n }, [activeTab, activateTab])\n\n const hasMoreThanTwoTabs = tabs.length >= 3\n const isLastTabActive = String(tabs.length - 1) === activeTab\n\n return (\n <div\n className={clsx(\n styles['Tabs-container'],\n styles[`Tabs-container--align-${align}`],\n isLastTabActive && styles['Tabs-container--lastTabIsActive'],\n className,\n )}\n ref={ref}\n data-testid={testIds.root}\n {...props}\n >\n {/* Narrow only indicators and controls */}\n {tabs.length >= 3 && (\n <div className={styles.Tabs__controls} data-testid={testIds.indicators}>\n <Stack direction=\"horizontal\" padding=\"none\" justifyContent=\"space-between\">\n <button\n onClick={handlePrevTabControl}\n className={styles.Tabs__control}\n aria-label={internalAccessibleLabels.controlsPrev}\n >\n <Text size=\"100\">\n <ChevronLeftIcon size={16} className={styles['Tabs__control-icon']} />\n </Text>\n </button>\n <Stack direction=\"horizontal\" gap={4} padding=\"none\" justifyContent=\"space-between\" alignItems=\"center\">\n {tabs.map((_, index) => {\n return (\n <div\n key={index}\n className={clsx(\n styles.Tabs__indicator,\n activeTab && Number(activeTab) === index && styles['Tabs__indicator--active'],\n )}\n />\n )\n })}\n </Stack>\n <button\n onClick={handleNextTabControl}\n className={styles.Tabs__control}\n aria-label={internalAccessibleLabels.controlsNext}\n >\n <Text size=\"100\">\n <ChevronRightIcon size={16} className={styles['Tabs__control-icon']} />\n </Text>\n </button>\n </Stack>\n </div>\n )}\n\n <div\n ref={tabsWrapperRef}\n className={clsx(\n styles['Tablist__wrapper'],\n styles[`Tablist__wrapper--${variant}`],\n isLastTabActive && styles['Tablist__wrapper--lastTabIsActive'],\n )}\n >\n <div\n ref={tabsContainerRef}\n {...tabListProps}\n className={clsx(\n styles.Tabs,\n styles[`Tabs--${variant}`],\n hasMoreThanTwoTabs && styles['Tabs--hasMoreThanTwoTabs'],\n )}\n >\n <div ref={sliderRef} className={styles.Tabs__slider} aria-hidden />\n {tabs}\n </div>\n </div>\n\n {panels.length > 0 && <div className={styles['Tabs__panelContainer']}>{panels}</div>}\n </div>\n )\n },\n)\n\nexport type TabsItemProps = {\n children: ReactNode\n className?: string\n isActive?: boolean\n variant?: 'default' | 'accent' | 'underline'\n /**\n * ⚠️ WARNING: Setting a custom id will override the automatically generated ARIA attributes\n * (aria-controls, aria-labelledby). You will need to manually implement proper accessibility\n * relationships between tabs and panels.\n * @see https://primer.style/brand/components/Tabs/#custom-panels\n */\n id?: string\n} & Omit<React.ComponentPropsWithoutRef<'button'>, 'id'>\n\nconst TabsItem = forwardRef<HTMLButtonElement, TabsItemProps>(\n ({children, className, isActive, variant, ...props}, ref) => {\n const tabRef = useProvidedRefOrCreate(ref)\n\n return (\n <button\n ref={tabRef}\n className={clsx(\n styles.Tabs__item,\n isActive && styles['Tabs__item--active'],\n variant && styles[`Tabs__item--${variant}`],\n className,\n )}\n data-testid={testIds.tab}\n {...props}\n >\n {children}\n </button>\n )\n },\n)\n\nexport type TabsPanelProps = {\n children: ReactNode\n className?: string\n animation?: (typeof AnimationVariants)[number] | false\n hidden?: boolean\n /**\n * ⚠️ WARNING: Setting a custom id will override the automatically generated ARIA attributes\n * (aria-controls, aria-labelledby). You will need to manually implement proper accessibility\n * relationships between tabs and panels.\n * @see https://primer.style/brand/components/Tabs/#custom-panels\n */\n id?: string\n} & Omit<React.HTMLAttributes<HTMLDivElement>, 'id'>\n\nconst TabsPanel = memo(function TabsPanel({\n children,\n animation = false,\n className,\n\n hidden,\n ...rest\n}: TabsPanelProps) {\n const conditionalRender = animation ? (\n <AnimationProvider autoStaggerChildren={false}>\n <Animate animate={animation}>{children}</Animate>\n </AnimationProvider>\n ) : (\n children\n )\n\n return (\n <div className={clsx(styles['Tabs__panel'], className)} data-testid={testIds.panel} hidden={hidden} {...rest}>\n {conditionalRender}\n </div>\n )\n})\n\n/**\n * Use Tabs to display a list of tabs with associated content panels.\n * @see https://primer.style/brand/components/Tabs\n */\nexport const Tabs = Object.assign(_TabsRoot, {\n Item: TabsItem,\n Panel: TabsPanel,\n testIds,\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tabs.js","names":[],"sources":["../../src/Tabs/Tabs.tsx"],"sourcesContent":["import React, {\n memo,\n ReactNode,\n forwardRef,\n Children,\n isValidElement,\n cloneElement,\n useRef,\n useEffect,\n HTMLAttributes,\n useCallback,\n} from 'react'\nimport {clsx} from 'clsx'\nimport {ChevronLeftIcon, ChevronRightIcon} from '@primer/octicons-react'\nimport {useTabs} from '../hooks/useTabs'\nimport {useProvidedRefOrCreate} from '../hooks/useRef'\nimport {BaseProps} from '../component-helpers'\nimport {Animate, AnimationProvider, AnimationVariants} from '../animation'\nimport {Text} from '../Text'\nimport {Stack} from '../Stack'\n\n/**\n * Design tokens\n */\nimport '@primer/brand-primitives/lib/design-tokens/css/tokens/functional/components/tabs/base.css'\nimport '@primer/brand-primitives/lib/design-tokens/css/tokens/functional/components/tabs/colors-with-modes.css'\n\n/** * Main Stylesheet (as a CSS Module) */\nimport styles from './Tabs.module.css'\n\nconst testIds = {\n root: 'Tabs',\n get tab() {\n return `${this.root}-tab`\n },\n get panel() {\n return `${this.root}-panel`\n },\n get indicators() {\n return `${this.root}-indicators`\n },\n}\n\n/**\n * Accessible label for the entire tabs component, used by screen readers to describe the tab group.\n * Note: Only use one of `aria-label` or `aria-labelled` by. Not both or neither.\n */\ntype LabelOrLabelledBy =\n | {'aria-label': string; 'aria-labelledby'?: never}\n | {'aria-labelledby': string; 'aria-label'?: never}\n\nexport type TabsProps = {\n /**\n * Visual style variant of the tabs. Affects the appearance and styling theme.\n */\n variant?: 'default' | 'accent' | 'underline'\n /**\n * Horizontal alignment of the tab navigation. Defaults to 'start'.\n */\n align?: 'start' | 'center'\n /**\n * Named children to be rendered as tab items and panels.\n */\n children: ReactNode\n /**\n * Sets the default active tab. \"0\" (first tab) by default.\n */\n defaultActiveTab?: string\n /**\n * Callback function triggered when the active tab changes. Receives the new active tab identifier.\n */\n onChange?: (activeTab: string) => void\n\n /**\n * Additional CSS class names to apply to the tabs container for custom styling.\n */\n className?: string\n /**\n * @param internalAccessibleLabels - Customizable labels for screen readers to improve accessibility. These are applied internally using the aria-label attribute.\n * @param internalAccessibleLabels.controlsNext - Label for the \"next tab\" control button, used by screen readers. Default is \"Next tab\".\n * @param internalAccessibleLabels.controlsPrev - Label for the \"previous tab\" control button, used by screen readers. Default is \"Previous tab\".\n */\n internalAccessibleLabels?: {\n controlsNext: string\n controlsPrev: string\n }\n} & LabelOrLabelledBy &\n BaseProps<HTMLDivElement> &\n Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'aria-label' | 'aria-labelledby'>\n\nconst defaultInternalAccessibleLabels = {\n controlsNext: 'Next tab',\n controlsPrev: 'Previous tab',\n}\n\nconst _TabsRoot = forwardRef<HTMLDivElement, TabsProps>(\n (\n {\n align = 'center',\n children,\n defaultActiveTab,\n onChange,\n variant = 'default',\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n internalAccessibleLabels = defaultInternalAccessibleLabels,\n ...props\n },\n ref,\n ) => {\n const {activeTab, activateTab, getTabListProps, getTabProps, getTabPanelProps} = useTabs({\n defaultTab: defaultActiveTab,\n onTabActivate: onChange,\n })\n const tabsContainerRef = useRef<HTMLDivElement>(null)\n const tabsWrapperRef = useRef<HTMLDivElement>(null)\n const sliderRef = useRef<HTMLDivElement>(null)\n\n const childrenArray = Children.toArray(children)\n\n type TabsItemElement = React.ReactElement<TabsItemProps> & {ref?: React.Ref<HTMLButtonElement>}\n\n const tabs = childrenArray\n .filter((child): child is TabsItemElement => isValidElement<TabsItemProps>(child) && child.type === TabsItem)\n .map((tab, index) => {\n const tabId = String(index)\n const originalRef = tab.ref\n const tabProps = getTabProps<HTMLButtonElement>(tabId, originalRef)\n\n return cloneElement(tab, {\n ...tabProps,\n id: tab.props.id ?? tabProps.id,\n 'aria-controls': tab.props['aria-controls'] ?? tabProps['aria-controls'],\n value: tabId,\n key: tabProps.id,\n isActive: activeTab === tabId,\n variant,\n })\n })\n\n const panels = childrenArray\n .filter(\n (child): child is React.ReactElement<TabsPanelProps> =>\n isValidElement<TabsPanelProps>(child) && child.type === TabsPanel,\n )\n .map((child, index) => {\n const panelId = String(index)\n const tabPanelProps = getTabPanelProps(panelId)\n\n return cloneElement(child, {\n ...tabPanelProps,\n id: child.props.id ?? tabPanelProps.id,\n key: String(index),\n })\n })\n\n useEffect(() => {\n /* istanbul ignore next */\n if (!tabsContainerRef.current || !sliderRef.current) return\n\n const activeTabButton = tabsContainerRef.current.querySelector(`[aria-selected=\"true\"]`) as HTMLButtonElement\n\n if (!activeTab) return\n\n const updateSliderPosition = () => {\n const sliderElement = sliderRef.current\n const tabsContainer = tabsContainerRef.current\n /* istanbul ignore next */\n if (!sliderElement || !tabsContainer) return\n\n const containerPaddingRem = window\n .getComputedStyle(tabsContainer)\n .getPropertyValue('--brand-Tabs-container-padding')\n\n const containerPadding = parseFloat(containerPaddingRem) * 16 // base size\n\n const offsetX = activeTabButton.offsetLeft - containerPadding\n const width = activeTabButton.offsetWidth\n\n sliderElement.style.setProperty('--brand-Tabs-slider-x', `${offsetX}px`)\n sliderElement.style.setProperty('--brand-Tabs-slider-width', `${width}px`)\n }\n\n updateSliderPosition()\n\n const resizeObserver = new ResizeObserver(updateSliderPosition)\n resizeObserver.observe(tabsContainerRef.current)\n\n // On narrow viewports this will scroll the active tab into the center.\n // Important because we show a gradient in dark mode.\n const tabsContainer = tabsContainerRef.current\n const containerWidth = tabsContainer.clientWidth\n const containerPaddingRem = window\n .getComputedStyle(tabsContainer)\n .getPropertyValue('--brand-Tabs-container-padding')\n const containerPadding = parseFloat(containerPaddingRem) * 16\n const tabLeft = activeTabButton.offsetLeft - containerPadding\n const tabWidth = activeTabButton.offsetWidth\n const tabCenter = tabLeft + tabWidth / 2\n\n const targetScrollLeft = tabCenter - containerWidth / 2\n\n const maxScrollLeft = tabsContainer.scrollWidth - containerWidth // defines boudnary\n const finalScrollLeft = Math.max(0, Math.min(targetScrollLeft, maxScrollLeft))\n\n tabsContainer.scrollTo({\n left: finalScrollLeft,\n behavior: 'smooth',\n })\n\n return () => {\n resizeObserver.disconnect()\n }\n }, [activeTab])\n\n // Tracks the overflow state for mobile gradient visibility\n // Should only appear when enough items trigger an overflow\n // Related to gradient functionality\n useEffect(() => {\n const tabsContainer = tabsContainerRef.current\n const wrapperElement = tabsWrapperRef.current\n /* istanbul ignore next */\n if (!tabsContainer || !wrapperElement) return\n\n // This relies heavily on layout and measurement and, as such, isn't practical to test\n /* istanbul ignore next */\n const updateScrollState = () => {\n const {scrollLeft, scrollWidth, clientWidth} = tabsContainer\n const hasOverflow = scrollWidth > clientWidth\n\n const canScrollRight = hasOverflow && scrollLeft < scrollWidth - clientWidth - 1\n\n // Set CSS variables on the wrapper element for the gradient\n wrapperElement.style.setProperty('--scroll-offset', `${scrollLeft}px`)\n wrapperElement.style.setProperty('--has-overflow', hasOverflow ? '1' : '0')\n wrapperElement.style.setProperty('--can-scroll-right', canScrollRight ? '1' : '0')\n }\n\n updateScrollState()\n const resizeObserver = new ResizeObserver(updateScrollState)\n resizeObserver.observe(tabsContainer)\n\n // eslint-disable-next-line github/prefer-observers\n tabsContainer.addEventListener('scroll', updateScrollState)\n\n return () => {\n tabsContainer.removeEventListener('scroll', updateScrollState)\n resizeObserver.disconnect()\n }\n }, [tabs])\n\n /**\n * The LabelOrLabelledBy type guarantees that, if ariaLabel isn't a string,\n * then ariaLabelledBy is guaranteed to be a string, and vice versa.\n */\n const accessibleLabel = typeof ariaLabel === 'string' ? {label: ariaLabel} : {labelledBy: ariaLabelledBy}\n const tabListProps = getTabListProps(accessibleLabel)\n\n const handleNextTabControl = useCallback(() => {\n if (activeTab && activeTab !== String(tabs.length - 1)) {\n activateTab(String(Number(activeTab) + 1))\n }\n }, [activeTab, activateTab, tabs])\n\n const handlePrevTabControl = useCallback(() => {\n if (activeTab && activeTab !== '0') {\n activateTab(String(Number(activeTab) - 1))\n }\n }, [activeTab, activateTab])\n\n const hasMoreThanTwoTabs = tabs.length >= 3\n const isLastTabActive = String(tabs.length - 1) === activeTab\n\n return (\n <div\n className={clsx(\n styles['Tabs-container'],\n styles[`Tabs-container--align-${align}`],\n isLastTabActive && styles['Tabs-container--lastTabIsActive'],\n className,\n )}\n ref={ref}\n data-testid={testIds.root}\n {...props}\n >\n {/* Narrow only indicators and controls */}\n {tabs.length >= 3 && (\n <div className={styles.Tabs__controls} data-testid={testIds.indicators}>\n <Stack direction=\"horizontal\" padding=\"none\" justifyContent=\"space-between\">\n <button\n onClick={handlePrevTabControl}\n className={styles.Tabs__control}\n aria-label={internalAccessibleLabels.controlsPrev}\n >\n <Text size=\"100\">\n <ChevronLeftIcon size={16} className={styles['Tabs__control-icon']} />\n </Text>\n </button>\n <Stack direction=\"horizontal\" gap={4} padding=\"none\" justifyContent=\"space-between\" alignItems=\"center\">\n {tabs.map((_, index) => {\n return (\n <div\n key={index}\n className={clsx(\n styles.Tabs__indicator,\n activeTab && Number(activeTab) === index && styles['Tabs__indicator--active'],\n )}\n />\n )\n })}\n </Stack>\n <button\n onClick={handleNextTabControl}\n className={styles.Tabs__control}\n aria-label={internalAccessibleLabels.controlsNext}\n >\n <Text size=\"100\">\n <ChevronRightIcon size={16} className={styles['Tabs__control-icon']} />\n </Text>\n </button>\n </Stack>\n </div>\n )}\n\n <div\n ref={tabsWrapperRef}\n className={clsx(\n styles['Tablist__wrapper'],\n styles[`Tablist__wrapper--${variant}`],\n isLastTabActive && styles['Tablist__wrapper--lastTabIsActive'],\n )}\n >\n <div\n ref={tabsContainerRef}\n {...tabListProps}\n className={clsx(\n styles.Tabs,\n styles[`Tabs--${variant}`],\n hasMoreThanTwoTabs && styles['Tabs--hasMoreThanTwoTabs'],\n )}\n >\n <div ref={sliderRef} className={styles.Tabs__slider} aria-hidden />\n {tabs}\n </div>\n </div>\n\n {panels.length > 0 && <div className={styles['Tabs__panelContainer']}>{panels}</div>}\n </div>\n )\n },\n)\n\nexport type TabsItemProps = {\n children: ReactNode\n className?: string\n isActive?: boolean\n variant?: 'default' | 'accent' | 'underline'\n /**\n * ⚠️ WARNING: Setting a custom id will override the automatically generated ARIA attributes\n * (aria-controls, aria-labelledby). You will need to manually implement proper accessibility\n * relationships between tabs and panels.\n * @see https://primer.style/brand/components/Tabs/#custom-panels\n */\n id?: string\n} & Omit<React.ComponentPropsWithoutRef<'button'>, 'id'>\n\nconst TabsItem = forwardRef<HTMLButtonElement, TabsItemProps>(\n ({children, className, isActive, variant, ...props}, ref) => {\n const tabRef = useProvidedRefOrCreate(ref)\n\n return (\n <button\n ref={tabRef}\n className={clsx(\n styles.Tabs__item,\n isActive && styles['Tabs__item--active'],\n variant && styles[`Tabs__item--${variant}`],\n className,\n )}\n data-testid={testIds.tab}\n {...props}\n >\n {children}\n </button>\n )\n },\n)\n\nexport type TabsPanelProps = {\n children: ReactNode\n className?: string\n animation?: (typeof AnimationVariants)[number] | false\n hidden?: boolean\n /**\n * ⚠️ WARNING: Setting a custom id will override the automatically generated ARIA attributes\n * (aria-controls, aria-labelledby). You will need to manually implement proper accessibility\n * relationships between tabs and panels.\n * @see https://primer.style/brand/components/Tabs/#custom-panels\n */\n id?: string\n} & Omit<React.HTMLAttributes<HTMLDivElement>, 'id'>\n\nconst TabsPanel = memo(function TabsPanelComponent({\n children,\n animation = false,\n className,\n\n hidden,\n ...rest\n}: TabsPanelProps) {\n const conditionalRender = animation ? (\n <AnimationProvider autoStaggerChildren={false}>\n <Animate animate={animation}>{children}</Animate>\n </AnimationProvider>\n ) : (\n children\n )\n\n return (\n <div className={clsx(styles['Tabs__panel'], className)} data-testid={testIds.panel} hidden={hidden} {...rest}>\n {conditionalRender}\n </div>\n )\n})\n\n/**\n * Use Tabs to display a list of tabs with associated content panels.\n * @see https://primer.style/brand/components/Tabs\n */\nexport const Tabs = Object.assign(_TabsRoot, {\n Item: TabsItem,\n Panel: TabsPanel,\n testIds,\n})\n"],"mappings":"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"}
|