@scottish-government/designsystem-react 0.12.1 → 1.0.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/.storybook/main.ts +6 -6
- package/.storybook/sgdsArgTypes.ts +107 -43
- package/CHANGELOG.md +49 -0
- package/LICENSE.txt +21 -0
- package/README.md +3 -0
- package/dist/common/AbstractNotificationBanner/AbstractNotificationBanner.d.ts +3 -2
- package/dist/common/AbstractNotificationBanner/AbstractNotificationBanner.jsx +8 -7
- package/dist/common/AbstractNotificationBanner/types.d.ts +13 -0
- package/dist/common/AbstractNotificationBanner/types.js +2 -0
- package/dist/common/ActionLink/ActionLink.d.ts +2 -1
- package/dist/common/ActionLink/types.d.ts +7 -0
- package/dist/common/ActionLink/types.js +2 -0
- package/dist/common/ConditionalWrapper/ConditionalWrapper.d.ts +2 -1
- package/dist/common/ConditionalWrapper/ConditionalWrapper.jsx +4 -2
- package/dist/common/ConditionalWrapper/types.d.ts +4 -0
- package/dist/common/ConditionalWrapper/types.js +2 -0
- package/dist/common/FileIcon/FileIcon.d.ts +2 -1
- package/dist/common/FileIcon/types.d.ts +6 -0
- package/dist/common/FileIcon/types.js +2 -0
- package/dist/common/HintText/HintText.d.ts +2 -1
- package/dist/common/HintText/HintText.jsx +3 -3
- package/dist/common/HintText/types.d.ts +4 -0
- package/dist/common/HintText/types.js +2 -0
- package/dist/common/Icon/Icon.d.ts +2 -1
- package/dist/common/Icon/Icon.jsx +3 -2
- package/dist/common/Icon/types.d.ts +8 -0
- package/dist/common/Icon/types.js +2 -0
- package/dist/common/ScreenReaderText/ScreenReaderText.d.ts +1 -1
- package/dist/common/WrapperTag/WrapperTag.d.ts +385 -1
- package/dist/common/WrapperTag/WrapperTag.jsx +5 -2
- package/dist/common/WrapperTag/types.d.ts +3 -0
- package/dist/common/WrapperTag/types.js +2 -0
- package/dist/components/Accordion/Accordion.d.ts +3 -2
- package/dist/components/Accordion/Accordion.jsx +12 -11
- package/dist/components/Accordion/types.d.ts +11 -0
- package/dist/components/Accordion/types.js +2 -0
- package/dist/components/AspectBox/AspectBox.d.ts +2 -1
- package/dist/components/AspectBox/AspectBox.jsx +3 -9
- package/dist/components/AspectBox/types.d.ts +3 -0
- package/dist/components/AspectBox/types.js +2 -0
- package/dist/components/BackToTop/BackToTop.d.ts +2 -1
- package/dist/components/BackToTop/BackToTop.jsx +4 -3
- package/dist/components/BackToTop/types.d.ts +3 -0
- package/dist/components/BackToTop/types.js +2 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +3 -2
- package/dist/components/Breadcrumbs/Breadcrumbs.jsx +6 -2
- package/dist/components/Breadcrumbs/types.d.ts +5 -0
- package/dist/components/Breadcrumbs/types.js +2 -0
- package/dist/components/Button/Button.d.ts +2 -1
- package/dist/components/Button/Button.jsx +4 -3
- package/dist/components/Button/ButtonGroup.d.ts +2 -1
- package/dist/components/Button/ButtonGroup.jsx +9 -4
- package/dist/components/Button/types.d.ts +20 -0
- package/dist/components/Button/types.js +2 -0
- package/dist/components/Card/Card.d.ts +34 -0
- package/dist/components/Card/Card.jsx +118 -0
- package/dist/components/Card/index.d.ts +1 -0
- package/dist/components/Card/index.js +8 -0
- package/dist/components/Card/types.d.ts +26 -0
- package/dist/components/Card/types.js +2 -0
- package/dist/components/CategoryItem/CategoryItem.d.ts +2 -1
- package/dist/components/CategoryItem/CategoryItem.jsx +8 -5
- package/dist/components/CategoryItem/types.d.ts +9 -0
- package/dist/components/CategoryItem/types.js +2 -0
- package/dist/components/CategoryList/CategoryList.d.ts +2 -1
- package/dist/components/CategoryList/CategoryList.jsx +3 -2
- package/dist/components/CategoryList/types.d.ts +5 -0
- package/dist/components/CategoryList/types.js +2 -0
- package/dist/components/Checkbox/Checkbox.d.ts +2 -1
- package/dist/components/Checkbox/Checkbox.jsx +4 -3
- package/dist/components/Checkbox/CheckboxGroup.d.ts +2 -1
- package/dist/components/Checkbox/CheckboxGroup.jsx +5 -4
- package/dist/components/Checkbox/types.d.ts +7 -0
- package/dist/components/Checkbox/types.js +2 -0
- package/dist/components/ConfirmationMessage/ConfirmationMessage.d.ts +2 -1
- package/dist/components/ConfirmationMessage/ConfirmationMessage.jsx +3 -2
- package/dist/components/ConfirmationMessage/types.d.ts +6 -0
- package/dist/components/ConfirmationMessage/types.js +2 -0
- package/dist/components/ContentsNav/ContentsNav.d.ts +3 -2
- package/dist/components/ContentsNav/ContentsNav.jsx +7 -5
- package/dist/components/ContentsNav/types.d.ts +9 -0
- package/dist/components/ContentsNav/types.js +2 -0
- package/dist/components/CookieBanner/CookieBanner.d.ts +3 -2
- package/dist/components/CookieBanner/CookieBanner.jsx +13 -3
- package/dist/components/DatePicker/DatePicker.d.ts +2 -1
- package/dist/components/DatePicker/DatePicker.jsx +7 -7
- package/dist/components/DatePicker/types.d.ts +18 -0
- package/dist/components/DatePicker/types.js +2 -0
- package/dist/components/Details/Details.d.ts +2 -1
- package/dist/components/Details/Details.jsx +6 -2
- package/dist/components/Details/types.d.ts +4 -0
- package/dist/components/Details/types.js +2 -0
- package/dist/components/ErrorMessage/ErrorMessage.d.ts +2 -1
- package/dist/components/ErrorMessage/ErrorMessage.jsx +6 -2
- package/dist/components/ErrorMessage/types.d.ts +3 -0
- package/dist/components/ErrorMessage/types.js +2 -0
- package/dist/components/ErrorSummary/ErrorSummary.d.ts +3 -2
- package/dist/components/ErrorSummary/ErrorSummary.jsx +6 -2
- package/dist/components/ErrorSummary/types.d.ts +8 -0
- package/dist/components/ErrorSummary/types.js +2 -0
- package/dist/components/FeatureHeader/FeatureHeader.d.ts +7 -5
- package/dist/components/FeatureHeader/FeatureHeader.jsx +87 -50
- package/dist/components/FeatureHeader/types.d.ts +12 -0
- package/dist/components/FeatureHeader/types.js +2 -0
- package/dist/components/FileDownload/FileDownload.d.ts +2 -1
- package/dist/components/FileDownload/FileDownload.jsx +4 -3
- package/dist/components/FileDownload/types.d.ts +10 -0
- package/dist/components/FileDownload/types.js +2 -0
- package/dist/components/HideThisPage/HideThisPage.d.ts +2 -1
- package/dist/components/HideThisPage/HideThisPage.jsx +5 -4
- package/dist/components/HideThisPage/types.d.ts +3 -0
- package/dist/components/HideThisPage/types.js +2 -0
- package/dist/components/InsetText/InsetText.d.ts +1 -1
- package/dist/components/InsetText/InsetText.jsx +6 -2
- package/dist/components/NotificationBanner/NotificationBanner.d.ts +3 -2
- package/dist/components/NotificationBanner/NotificationBanner.jsx +5 -4
- package/dist/components/NotificationPanel/NotificationPanel.d.ts +2 -1
- package/dist/components/NotificationPanel/NotificationPanel.jsx +3 -2
- package/dist/components/NotificationPanel/types.d.ts +6 -0
- package/dist/components/NotificationPanel/types.js +2 -0
- package/dist/components/NotificationTag/NotificationTag.d.ts +6 -0
- package/dist/components/NotificationTag/NotificationTag.jsx +20 -0
- package/dist/components/NotificationTag/index.d.ts +1 -0
- package/dist/components/NotificationTag/index.js +8 -0
- package/dist/components/NotificationTag/types.d.ts +5 -0
- package/dist/components/NotificationTag/types.js +2 -0
- package/dist/components/PageHeader/PageHeader.d.ts +2 -1
- package/dist/components/PageHeader/PageHeader.jsx +6 -2
- package/dist/components/PageHeader/types.d.ts +5 -0
- package/dist/components/PageHeader/types.js +2 -0
- package/dist/components/PageMetadata/PageMetadata.d.ts +3 -2
- package/dist/components/PageMetadata/PageMetadata.jsx +8 -4
- package/dist/components/PageMetadata/types.d.ts +6 -0
- package/dist/components/PageMetadata/types.js +2 -0
- package/dist/components/Pagination/Pagination.d.ts +3 -2
- package/dist/components/Pagination/Pagination.jsx +7 -5
- package/dist/components/Pagination/types.d.ts +18 -0
- package/dist/components/Pagination/types.js +2 -0
- package/dist/components/PhaseBanner/PhaseBanner.d.ts +2 -1
- package/dist/components/PhaseBanner/PhaseBanner.jsx +3 -2
- package/dist/components/PhaseBanner/types.d.ts +3 -0
- package/dist/components/PhaseBanner/types.js +2 -0
- package/dist/components/Question/Question.d.ts +2 -1
- package/dist/components/Question/Question.jsx +4 -3
- package/dist/components/Question/types.d.ts +9 -0
- package/dist/components/Question/types.js +2 -0
- package/dist/components/RadioButton/RadioButton.d.ts +2 -1
- package/dist/components/RadioButton/RadioButton.jsx +4 -3
- package/dist/components/RadioButton/RadioGroup.d.ts +2 -1
- package/dist/components/RadioButton/RadioGroup.jsx +3 -2
- package/dist/components/RadioButton/types.d.ts +10 -0
- package/dist/components/RadioButton/types.js +2 -0
- package/dist/components/SearchFacets/SearchFacets.d.ts +4 -3
- package/dist/components/SearchFacets/SearchFacets.jsx +3 -2
- package/dist/components/SearchFacets/types.d.ts +12 -0
- package/dist/components/SearchFacets/types.js +2 -0
- package/dist/components/SearchFilters/SearchFilters.d.ts +5 -4
- package/dist/components/SearchFilters/types.d.ts +12 -0
- package/dist/components/SearchFilters/types.js +2 -0
- package/dist/components/SearchResult/SearchResult.d.ts +8 -11
- package/dist/components/SearchResult/SearchResult.jsx +6 -7
- package/dist/components/SearchResult/types.d.ts +11 -0
- package/dist/components/SearchResult/types.js +2 -0
- package/dist/components/SearchSort/SearchSort.d.ts +2 -1
- package/dist/components/SearchSort/SearchSort.jsx +3 -2
- package/dist/components/SearchSort/types.d.ts +7 -0
- package/dist/components/SearchSort/types.js +2 -0
- package/dist/components/Select/Select.d.ts +2 -1
- package/dist/components/Select/Select.jsx +4 -3
- package/dist/components/Select/types.d.ts +6 -0
- package/dist/components/Select/types.js +2 -0
- package/dist/components/SequentialNavigation/SequentialNavigation.d.ts +4 -3
- package/dist/components/SequentialNavigation/SequentialNavigation.jsx +10 -6
- package/dist/components/SequentialNavigation/types.d.ts +10 -0
- package/dist/components/SequentialNavigation/types.js +2 -0
- package/dist/components/SideNavigation/SideNavigation.d.ts +4 -3
- package/dist/components/SideNavigation/SideNavigation.jsx +10 -7
- package/dist/components/SideNavigation/types.d.ts +13 -0
- package/dist/components/SideNavigation/types.js +2 -0
- package/dist/components/SiteFooter/SiteFooter.d.ts +6 -5
- package/dist/components/SiteFooter/SiteFooter.jsx +4 -3
- package/dist/components/SiteFooter/types.d.ts +16 -0
- package/dist/components/SiteFooter/types.js +2 -0
- package/dist/components/SiteHeader/SiteHeader.d.ts +6 -5
- package/dist/components/SiteHeader/SiteHeader.jsx +1 -1
- package/dist/components/SiteHeader/types.d.ts +20 -0
- package/dist/components/SiteHeader/types.js +2 -0
- package/dist/components/SiteNavigation/SiteNavigation.d.ts +3 -2
- package/dist/components/SiteNavigation/SiteNavigation.jsx +12 -4
- package/dist/components/SiteNavigation/types.d.ts +9 -0
- package/dist/components/SiteNavigation/types.js +2 -0
- package/dist/components/SiteSearch/SiteSearch.d.ts +2 -1
- package/dist/components/SiteSearch/SiteSearch.jsx +12 -11
- package/dist/components/SiteSearch/types.d.ts +17 -0
- package/dist/components/SiteSearch/types.js +2 -0
- package/dist/components/SkipLinks/SkipLinks.d.ts +3 -2
- package/dist/components/SkipLinks/SkipLinks.jsx +4 -4
- package/dist/components/SkipLinks/types.d.ts +8 -0
- package/dist/components/SkipLinks/types.js +2 -0
- package/dist/components/SummaryCard/SummaryCard.d.ts +4 -2
- package/dist/components/SummaryCard/SummaryCard.jsx +5 -4
- package/dist/components/SummaryCard/types.d.ts +5 -0
- package/dist/components/SummaryCard/types.js +2 -0
- package/dist/components/SummaryList/SummaryList.d.ts +6 -4
- package/dist/components/SummaryList/SummaryList.jsx +5 -4
- package/dist/components/SummaryList/types.d.ts +6 -0
- package/dist/components/SummaryList/types.js +2 -0
- package/dist/components/Table/Table.d.ts +2 -1
- package/dist/components/Table/Table.jsx +5 -4
- package/dist/components/Table/types.d.ts +6 -0
- package/dist/components/Table/types.js +2 -0
- package/dist/components/Tabs/Tabs.d.ts +3 -2
- package/dist/components/Tabs/Tabs.jsx +6 -5
- package/dist/components/Tabs/types.d.ts +16 -0
- package/dist/components/Tabs/types.js +2 -0
- package/dist/components/Tag/Tag.d.ts +2 -1
- package/dist/components/Tag/Tag.jsx +7 -3
- package/dist/components/Tag/types.d.ts +4 -0
- package/dist/components/Tag/types.js +2 -0
- package/dist/components/TaskList/TaskList.d.ts +4 -3
- package/dist/components/TaskList/TaskList.jsx +11 -8
- package/dist/components/TaskList/types.d.ts +17 -0
- package/dist/components/TaskList/types.js +2 -0
- package/dist/components/TextInput/TextInput.d.ts +2 -1
- package/dist/components/TextInput/TextInput.jsx +10 -9
- package/dist/components/TextInput/types.d.ts +11 -0
- package/dist/components/TextInput/types.js +2 -0
- package/dist/components/Textarea/Textarea.d.ts +2 -1
- package/dist/components/Textarea/Textarea.jsx +6 -5
- package/dist/components/WarningText/WarningText.d.ts +1 -1
- package/dist/components/WarningText/WarningText.jsx +6 -2
- package/dist/hooks/useTracking/useTracking.js +0 -1
- package/eslint.config.mjs +32 -0
- package/package.json +12 -5
- package/src/common/AbstractNotificationBanner/AbstractNotificationBanner.tsx +13 -10
- package/src/common/AbstractNotificationBanner/types.ts +15 -0
- package/src/common/ActionLink/ActionLink.tsx +3 -1
- package/src/common/ActionLink/types.ts +8 -0
- package/src/common/ConditionalWrapper/ConditionalWrapper.tsx +10 -2
- package/src/common/ConditionalWrapper/types.ts +4 -0
- package/src/common/FileIcon/FileIcon.tsx +2 -1
- package/src/common/FileIcon/types.ts +7 -0
- package/src/common/HintText/HintText.test.tsx +3 -15
- package/src/common/HintText/HintText.tsx +4 -4
- package/src/common/HintText/types.ts +4 -0
- package/src/common/Icon/Icon.tsx +5 -3
- package/src/common/Icon/types.ts +9 -0
- package/src/common/ScreenReaderText/ScreenReaderText.tsx +1 -1
- package/src/common/WrapperTag/WrapperTag.tsx +5 -3
- package/src/common/WrapperTag/types.ts +3 -0
- package/src/components/Accordion/Accordion.Item.stories.tsx +1 -5
- package/src/components/Accordion/Accordion.stories.tsx +5 -5
- package/src/components/Accordion/Accordion.test.tsx +11 -0
- package/src/components/Accordion/Accordion.tsx +15 -13
- package/src/components/Accordion/types.ts +13 -0
- package/src/components/AspectBox/AspectBox.stories.tsx +1 -2
- package/src/components/AspectBox/AspectBox.tsx +8 -14
- package/src/components/AspectBox/types.ts +3 -0
- package/src/components/BackToTop/BackToTop.test.tsx +21 -1
- package/src/components/BackToTop/BackToTop.tsx +6 -4
- package/src/components/BackToTop/types.ts +3 -0
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +7 -4
- package/src/components/Breadcrumbs/types.ts +6 -0
- package/src/components/Button/Button.tsx +6 -4
- package/src/components/Button/ButtonGroup.stories.tsx +22 -0
- package/src/components/Button/ButtonGroup.test.tsx +21 -0
- package/src/components/Button/ButtonGroup.tsx +9 -4
- package/src/components/Button/types.ts +22 -0
- package/src/components/Card/Card.stories.tsx +446 -0
- package/src/components/Card/Card.test.tsx +282 -0
- package/src/components/Card/Card.tsx +208 -0
- package/src/components/Card/index.ts +1 -0
- package/src/components/Card/types.ts +30 -0
- package/src/components/CategoryItem/CategoryItem.tsx +10 -6
- package/src/components/CategoryItem/types.ts +10 -0
- package/src/components/CategoryList/CategoryList.tsx +7 -4
- package/src/components/CategoryList/types.ts +5 -0
- package/src/components/Checkbox/Checkbox.stories.tsx +3 -3
- package/src/components/Checkbox/Checkbox.test.tsx +30 -0
- package/src/components/Checkbox/Checkbox.tsx +8 -7
- package/src/components/Checkbox/CheckboxGroup.test.tsx +10 -0
- package/src/components/Checkbox/CheckboxGroup.tsx +7 -6
- package/src/components/Checkbox/types.ts +9 -0
- package/src/components/ConfirmationMessage/ConfirmationMessage.tsx +5 -3
- package/src/components/ConfirmationMessage/types.ts +7 -0
- package/src/components/ContentsNav/ContentsNav.stories.tsx +5 -1
- package/src/components/ContentsNav/ContentsNav.tsx +11 -7
- package/src/components/ContentsNav/types.ts +11 -0
- package/src/components/CookieBanner/CookieBanner.Buttons.stories.tsx +3 -3
- package/src/components/CookieBanner/CookieBanner.stories.tsx +6 -6
- package/src/components/CookieBanner/CookieBanner.test.tsx +24 -1
- package/src/components/CookieBanner/CookieBanner.tsx +16 -5
- package/src/components/DatePicker/DatePicker.test.tsx +52 -19
- package/src/components/DatePicker/DatePicker.tsx +8 -8
- package/src/components/DatePicker/types.ts +19 -0
- package/src/components/Details/Details.stories.tsx +1 -1
- package/src/components/Details/Details.tsx +6 -3
- package/src/components/Details/types.ts +4 -0
- package/src/components/ErrorMessage/ErrorMessage.tsx +6 -3
- package/src/components/ErrorMessage/types.ts +3 -0
- package/src/components/ErrorSummary/ErrorSummary.test.tsx +1 -1
- package/src/components/ErrorSummary/ErrorSummary.tsx +6 -4
- package/src/components/ErrorSummary/types.ts +11 -0
- package/src/components/FeatureHeader/FeatureHeader.stories.tsx +186 -23
- package/src/components/FeatureHeader/FeatureHeader.test.tsx +298 -0
- package/src/components/FeatureHeader/FeatureHeader.tsx +83 -58
- package/src/components/FeatureHeader/types.ts +13 -0
- package/src/components/FileDownload/FileDownload.test.tsx +1 -5
- package/src/components/FileDownload/FileDownload.tsx +6 -4
- package/src/components/FileDownload/types.ts +11 -0
- package/src/components/HideThisPage/HideThisPage.test.tsx +12 -1
- package/src/components/HideThisPage/HideThisPage.tsx +7 -5
- package/src/components/HideThisPage/types.ts +3 -0
- package/src/components/InsetText/InsetText.tsx +5 -3
- package/src/components/NotificationBanner/NotificationBanner.stories.tsx +2 -2
- package/src/components/NotificationBanner/NotificationBanner.test.tsx +10 -0
- package/src/components/NotificationBanner/NotificationBanner.tsx +8 -6
- package/src/components/NotificationPanel/NotificationPanel.tsx +5 -3
- package/src/components/NotificationPanel/types.ts +7 -0
- package/src/components/NotificationTag/NotificationTag.stories.tsx +68 -0
- package/src/components/NotificationTag/NotificationTag.test.tsx +70 -0
- package/src/components/NotificationTag/NotificationTag.tsx +32 -0
- package/src/components/NotificationTag/index.ts +1 -0
- package/src/components/NotificationTag/types.ts +5 -0
- package/src/components/PageHeader/PageHeader.tsx +6 -3
- package/src/components/PageHeader/types.ts +5 -0
- package/src/components/PageMetadata/PageMetadata.stories.tsx +1 -1
- package/src/components/PageMetadata/PageMetadata.tsx +10 -7
- package/src/components/PageMetadata/types.ts +7 -0
- package/src/components/Pagination/Pagination.test.tsx +20 -0
- package/src/components/Pagination/Pagination.tsx +12 -8
- package/src/components/Pagination/types.ts +20 -0
- package/src/components/PhaseBanner/PhaseBanner.stories.tsx +1 -4
- package/src/components/PhaseBanner/PhaseBanner.tsx +5 -3
- package/src/components/PhaseBanner/types.ts +3 -0
- package/src/components/Question/Question.tsx +6 -4
- package/src/components/Question/types.ts +9 -0
- package/src/components/RadioButton/RadioButton.test.tsx +30 -0
- package/src/components/RadioButton/RadioButton.tsx +8 -7
- package/src/components/RadioButton/RadioGroup.tsx +5 -3
- package/src/components/RadioButton/types.ts +12 -0
- package/src/components/SearchFacets/SearchFacets.Group.stories.tsx +2 -3
- package/src/components/SearchFacets/SearchFacets.stories.tsx +2 -2
- package/src/components/SearchFacets/SearchFacets.tsx +10 -8
- package/src/components/SearchFacets/types.ts +14 -0
- package/src/components/SearchFilters/SearchFilters.Panel.stories.tsx +18 -7
- package/src/components/SearchFilters/SearchFilters.stories.tsx +1 -1
- package/src/components/SearchFilters/SearchFilters.tsx +4 -3
- package/src/components/SearchFilters/types.ts +14 -0
- package/src/components/SearchResult/SearchResult.stories.tsx +23 -23
- package/src/components/SearchResult/SearchResult.test.tsx +5 -4
- package/src/components/SearchResult/SearchResult.tsx +15 -15
- package/src/components/SearchResult/types.ts +13 -0
- package/src/components/SearchSort/SearchSort.stories.tsx +2 -1
- package/src/components/SearchSort/SearchSort.tsx +5 -3
- package/src/components/SearchSort/types.ts +7 -0
- package/src/components/Select/Select.test.tsx +42 -0
- package/src/components/Select/Select.tsx +8 -6
- package/src/components/Select/types.ts +7 -0
- package/src/components/SequentialNavigation/SequentialNavigation.tsx +13 -10
- package/src/components/SequentialNavigation/types.ts +12 -0
- package/src/components/SideNavigation/SideNavigation.test.tsx +24 -0
- package/src/components/SideNavigation/SideNavigation.tsx +14 -10
- package/src/components/SideNavigation/types.ts +16 -0
- package/src/components/SiteFooter/SiteFooter.tsx +10 -8
- package/src/components/SiteFooter/types.ts +20 -0
- package/src/components/SiteHeader/SiteHeader.stories.tsx +4 -3
- package/src/components/SiteHeader/SiteHeader.test.tsx +29 -16
- package/src/components/SiteHeader/SiteHeader.tsx +10 -9
- package/src/components/SiteHeader/types.ts +22 -0
- package/src/components/SiteNavigation/SiteNavigation.test.tsx +16 -1
- package/src/components/SiteNavigation/SiteNavigation.tsx +13 -6
- package/src/components/SiteNavigation/types.ts +11 -0
- package/src/components/SiteSearch/SiteSearch.stories.tsx +4 -2
- package/src/components/SiteSearch/SiteSearch.test.tsx +22 -0
- package/src/components/SiteSearch/SiteSearch.tsx +15 -13
- package/src/components/SiteSearch/types.ts +19 -0
- package/src/components/SkipLinks/SkipLinks.stories.tsx +3 -3
- package/src/components/SkipLinks/SkipLinks.tsx +7 -7
- package/src/components/SkipLinks/types.ts +9 -0
- package/src/components/SummaryCard/SummaryCard.test.tsx +0 -11
- package/src/components/SummaryCard/SummaryCard.tsx +9 -6
- package/src/components/SummaryCard/types.ts +6 -0
- package/src/components/SummaryList/SummaryList.Item.stories.tsx +5 -5
- package/src/components/SummaryList/SummaryList.stories.tsx +1 -1
- package/src/components/SummaryList/SummaryList.test.tsx +1 -6
- package/src/components/SummaryList/SummaryList.tsx +11 -9
- package/src/components/SummaryList/types.ts +7 -0
- package/src/components/Table/Table.test.tsx +36 -0
- package/src/components/Table/Table.tsx +7 -5
- package/src/components/Table/types.ts +6 -0
- package/src/components/Tabs/Tabs.Item.stories.tsx +7 -7
- package/src/components/Tabs/Tabs.stories.tsx +3 -3
- package/src/components/Tabs/Tabs.test.tsx +14 -0
- package/src/components/Tabs/Tabs.tsx +12 -9
- package/src/components/Tabs/types.ts +19 -0
- package/src/components/Tag/Tag.tsx +7 -4
- package/src/components/Tag/types.ts +5 -0
- package/src/components/TaskList/TaskList.Group.stories.tsx +0 -5
- package/src/components/TaskList/TaskList.stories.tsx +0 -1
- package/src/components/TaskList/TaskList.tsx +17 -13
- package/src/components/TaskList/types.ts +20 -0
- package/src/components/TextInput/TextInput.test.tsx +53 -1
- package/src/components/TextInput/TextInput.tsx +17 -12
- package/src/components/TextInput/types.ts +12 -0
- package/src/components/Textarea/Textarea.test.tsx +53 -1
- package/src/components/Textarea/Textarea.tsx +10 -8
- package/src/components/WarningText/WarningText.tsx +5 -3
- package/src/hooks/useTracking/useTracking.test.tsx +5 -7
- package/src/hooks/useTracking/useTracking.ts +0 -1
- package/src/images/icons/arrow_upward.tsx +10 -10
- package/src/images/icons/calendar_today.tsx +10 -10
- package/src/images/icons/cancel.tsx +8 -8
- package/src/images/icons/check_circle.tsx +10 -10
- package/src/images/icons/chevron_left.tsx +10 -10
- package/src/images/icons/chevron_right.tsx +10 -10
- package/src/images/icons/close.tsx +10 -10
- package/src/images/icons/description.tsx +10 -10
- package/src/images/icons/double_chevron_left.tsx +8 -8
- package/src/images/icons/double_chevron_right.tsx +8 -8
- package/src/images/icons/error.tsx +10 -10
- package/src/images/icons/expand_less.tsx +10 -10
- package/src/images/icons/expand_more.tsx +10 -10
- package/src/images/icons/list.tsx +13 -13
- package/src/images/icons/menu.tsx +10 -10
- package/src/images/icons/priority_high.tsx +11 -11
- package/src/images/icons/search.tsx +10 -10
- package/src/shared-types.ts +40 -0
- package/static/images/illustration.svg +502 -0
- package/tsconfig.json +0 -3
- package/vite.config.ts +6 -1
- package/@types/common/AbstractNotificationBanner.d.ts +0 -17
- package/@types/common/ActionLink.d.ts +0 -8
- package/@types/common/ConditionalWrapper.d.ts +0 -6
- package/@types/common/FileIcon.d.ts +0 -7
- package/@types/common/HintText.d.ts +0 -6
- package/@types/common/Icon.d.ts +0 -9
- package/@types/common/ScreenReaderText.d.ts +0 -4
- package/@types/common/WrapperTag.d.ts +0 -5
- package/@types/components/Accordion.d.ts +0 -15
- package/@types/components/AspectBox.d.ts +0 -5
- package/@types/components/BackToTop.d.ts +0 -5
- package/@types/components/Breadcrumbs.d.ts +0 -11
- package/@types/components/Button.d.ts +0 -17
- package/@types/components/ButtonGroup.d.ts +0 -5
- package/@types/components/CategoryItem.d.ts +0 -10
- package/@types/components/CategoryList.d.ts +0 -7
- package/@types/components/Checkbox.d.ts +0 -11
- package/@types/components/ConfirmationMessage.d.ts +0 -7
- package/@types/components/ContentsNav.d.ts +0 -13
- package/@types/components/DatePicker.d.ts +0 -20
- package/@types/components/Details.d.ts +0 -6
- package/@types/components/ErrorMessage.d.ts +0 -5
- package/@types/components/ErrorSummary.d.ts +0 -12
- package/@types/components/FileDownload.d.ts +0 -11
- package/@types/components/HideThisPage.d.ts +0 -5
- package/@types/components/InsetText.d.ts +0 -5
- package/@types/components/Metadata.d.ts +0 -11
- package/@types/components/NotificationPanel.d.ts +0 -7
- package/@types/components/PageHeader.d.ts +0 -7
- package/@types/components/Pagination.d.ts +0 -22
- package/@types/components/PhaseBanner.d.ts +0 -5
- package/@types/components/Question.d.ts +0 -11
- package/@types/components/RadioButton.d.ts +0 -14
- package/@types/components/SearchFacets.d.ts +0 -18
- package/@types/components/SearchFilters.d.ts +0 -14
- package/@types/components/SearchResult.d.ts +0 -30
- package/@types/components/SearchSort.d.ts +0 -9
- package/@types/components/Select.d.ts +0 -7
- package/@types/components/SequentialNavigation.d.ts +0 -14
- package/@types/components/SideNavigation.d.ts +0 -18
- package/@types/components/SiteFooter.d.ts +0 -25
- package/@types/components/SiteHeader.d.ts +0 -20
- package/@types/components/SiteNavigation.d.ts +0 -13
- package/@types/components/SiteSearch.d.ts +0 -14
- package/@types/components/SkipLinks.d.ts +0 -13
- package/@types/components/SummaryCard.d.ts +0 -6
- package/@types/components/SummaryList.d.ts +0 -14
- package/@types/components/Table.d.ts +0 -8
- package/@types/components/Tabs.d.ts +0 -21
- package/@types/components/Tag.d.ts +0 -5
- package/@types/components/TaskList.d.ts +0 -22
- package/@types/components/TextInput.d.ts +0 -12
- package/@types/components/Textarea.d.ts +0 -4
- package/@types/components/WarningText.d.ts +0 -5
- package/@types/global.d.ts +0 -1
- package/@types/sgds.d.ts +0 -49
- package/dist/index.d.ts +0 -4
- package/dist/index.js +0 -40
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -2,59 +2,222 @@ import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
|
2
2
|
import argTypes from '../../../.storybook/sgdsArgTypes';
|
|
3
3
|
|
|
4
4
|
import FeatureHeader from './FeatureHeader';
|
|
5
|
+
import Button from '../Button';
|
|
6
|
+
// @ts-expect-error no types
|
|
7
|
+
import photograph from '../../../static/images/highland-cow.jpg';
|
|
8
|
+
// @ts-expect-error no types
|
|
9
|
+
import illustration from '../../../static/images/illustration.svg';
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
type foo = typeof FeatureHeader;
|
|
5
14
|
|
|
6
|
-
//@ts-ignore
|
|
7
|
-
import coo from '../../../static/images/highland-cow.jpg';
|
|
8
15
|
|
|
9
16
|
const meta = {
|
|
10
|
-
title: 'Components/
|
|
17
|
+
title: 'Components/FeatureHeader',
|
|
11
18
|
component: FeatureHeader,
|
|
12
19
|
argTypes: {
|
|
13
|
-
|
|
20
|
+
backgroundColor: argTypes.select({options: ['none', 'secondary', 'tertiary', 'brand']}),
|
|
21
|
+
children: argTypes.children(),
|
|
22
|
+
hasCoverImage: argTypes.boolean(),
|
|
23
|
+
hasNoImagePadding: argTypes.boolean(),
|
|
24
|
+
id: argTypes.id({ type: { name: 'string', required: false } }),
|
|
25
|
+
isFullWidth: argTypes.boolean(),
|
|
26
|
+
isWideText: argTypes.boolean(),
|
|
27
|
+
isTopAlignImage: argTypes.boolean(),
|
|
28
|
+
tagName: argTypes.select({ options: ['div', 'header'] })
|
|
14
29
|
},
|
|
30
|
+
args: {
|
|
31
|
+
backgroundColor: 'secondary'
|
|
32
|
+
}
|
|
33
|
+
} satisfies Meta<foo & { image: string }>;
|
|
34
|
+
|
|
35
|
+
export default meta;
|
|
36
|
+
type Story = StoryObj<typeof meta>;
|
|
37
|
+
|
|
38
|
+
export const Default: Story = {
|
|
15
39
|
args: {
|
|
16
40
|
children: <>
|
|
17
|
-
<FeatureHeader.
|
|
18
|
-
<
|
|
19
|
-
<p>The
|
|
20
|
-
</FeatureHeader.
|
|
21
|
-
<FeatureHeader.
|
|
41
|
+
<FeatureHeader.Primary title="Design and build accessible digital services for Scotland">
|
|
42
|
+
<p>The Scottish Government Design System provides static web assets for websites and web applications for the Scottish Government and other Scottish public sector bodies.</p>
|
|
43
|
+
<p>The Design System is open source and free to use.</p>
|
|
44
|
+
</FeatureHeader.Primary>
|
|
45
|
+
<FeatureHeader.Secondary>
|
|
22
46
|
<img
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
src={coo}
|
|
47
|
+
alt=""
|
|
48
|
+
src={illustration}
|
|
26
49
|
/>
|
|
27
|
-
</FeatureHeader.
|
|
50
|
+
</FeatureHeader.Secondary>
|
|
28
51
|
</>
|
|
29
52
|
}
|
|
30
|
-
}
|
|
53
|
+
};
|
|
31
54
|
|
|
32
|
-
export default meta;
|
|
33
|
-
type Story = StoryObj<typeof meta>;
|
|
34
55
|
|
|
35
|
-
export const
|
|
56
|
+
export const WithoutContent: Story = {
|
|
57
|
+
name: 'Without content',
|
|
58
|
+
args: {
|
|
59
|
+
children: <>
|
|
60
|
+
<FeatureHeader.Primary title="Design and build accessible digital services for Scotland">
|
|
61
|
+
</FeatureHeader.Primary>
|
|
62
|
+
<FeatureHeader.Secondary>
|
|
63
|
+
<img
|
|
64
|
+
alt=""
|
|
65
|
+
src={illustration}
|
|
66
|
+
/>
|
|
67
|
+
</FeatureHeader.Secondary>
|
|
68
|
+
</>
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export const WithCallToAction: Story = {
|
|
73
|
+
name: 'Call to action',
|
|
74
|
+
args: {
|
|
75
|
+
children: <>
|
|
76
|
+
<FeatureHeader.Primary title="Design and build accessible digital services for Scotland">
|
|
77
|
+
<p>The Scottish Government Design System provides static web assets for websites and web applications for the Scottish Government and other Scottish public sector bodies.</p>
|
|
78
|
+
<p>The Design System is open source and free to use.</p>
|
|
79
|
+
<Button href="#foo" icon="ChevronRight">Get started</Button>
|
|
80
|
+
</FeatureHeader.Primary>
|
|
81
|
+
<FeatureHeader.Secondary>
|
|
82
|
+
<img
|
|
83
|
+
alt=""
|
|
84
|
+
src={illustration}
|
|
85
|
+
/>
|
|
86
|
+
</FeatureHeader.Secondary>
|
|
87
|
+
</>
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
export const WithCoverImage: Story = {
|
|
92
|
+
name: 'Cover image',
|
|
93
|
+
args: {
|
|
94
|
+
children: <>
|
|
95
|
+
<FeatureHeader.Primary title="Design and build accessible digital services for Scotland">
|
|
96
|
+
<p>The Scottish Government Design System provides static web assets for websites and web applications for the Scottish Government and other Scottish public sector bodies.</p>
|
|
97
|
+
<p>The Design System is open source and free to use.</p>
|
|
98
|
+
</FeatureHeader.Primary>
|
|
99
|
+
<FeatureHeader.Secondary>
|
|
100
|
+
<img
|
|
101
|
+
alt=""
|
|
102
|
+
src={illustration}
|
|
103
|
+
/>
|
|
104
|
+
</FeatureHeader.Secondary>
|
|
105
|
+
</>,
|
|
106
|
+
hasCoverImage: true
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
export const WithCoverImagePhotograph: Story = {
|
|
111
|
+
name: 'Cover image (photograph)',
|
|
36
112
|
args: {
|
|
37
|
-
|
|
113
|
+
children: <>
|
|
114
|
+
<FeatureHeader.Primary title="Design and build accessible digital services for Scotland">
|
|
115
|
+
<p>The Scottish Government Design System provides static web assets for websites and web applications for the Scottish Government and other Scottish public sector bodies.</p>
|
|
116
|
+
<p>The Design System is open source and free to use.</p>
|
|
117
|
+
</FeatureHeader.Primary>
|
|
118
|
+
<FeatureHeader.Secondary>
|
|
119
|
+
<img
|
|
120
|
+
alt=""
|
|
121
|
+
src={photograph}
|
|
122
|
+
/>
|
|
123
|
+
</FeatureHeader.Secondary>
|
|
124
|
+
</>,
|
|
125
|
+
hasCoverImage: true
|
|
38
126
|
}
|
|
39
127
|
};
|
|
40
128
|
|
|
41
129
|
export const FullWidth: Story = {
|
|
130
|
+
name: 'Full width',
|
|
42
131
|
args: {
|
|
43
|
-
|
|
132
|
+
children: <>
|
|
133
|
+
<FeatureHeader.Primary title="Design and build accessible digital services for Scotland">
|
|
134
|
+
<p>The Scottish Government Design System provides static web assets for websites and web applications for the Scottish Government and other Scottish public sector bodies.</p>
|
|
135
|
+
<p>The Design System is open source and free to use.</p>
|
|
136
|
+
</FeatureHeader.Primary>
|
|
137
|
+
<FeatureHeader.Secondary>
|
|
138
|
+
<img
|
|
139
|
+
alt=""
|
|
140
|
+
src={illustration}
|
|
141
|
+
/>
|
|
142
|
+
</FeatureHeader.Secondary>
|
|
143
|
+
</>,
|
|
44
144
|
isFullWidth: true
|
|
45
145
|
}
|
|
46
146
|
};
|
|
47
147
|
|
|
48
|
-
export const
|
|
148
|
+
export const FullWidthImagePaddingRemoved: Story = {
|
|
149
|
+
name: 'Full width with image padding removed',
|
|
49
150
|
args: {
|
|
50
|
-
|
|
51
|
-
|
|
151
|
+
children: <>
|
|
152
|
+
<FeatureHeader.Primary title="Design and build accessible digital services for Scotland">
|
|
153
|
+
<p>The Scottish Government Design System provides static web assets for websites and web applications for the Scottish Government and other Scottish public sector bodies.</p>
|
|
154
|
+
<p>The Design System is open source and free to use.</p>
|
|
155
|
+
</FeatureHeader.Primary>
|
|
156
|
+
<FeatureHeader.Secondary>
|
|
157
|
+
<img
|
|
158
|
+
alt=""
|
|
159
|
+
src={illustration}
|
|
160
|
+
/>
|
|
161
|
+
</FeatureHeader.Secondary>
|
|
162
|
+
</>,
|
|
163
|
+
hasNoImagePadding: true,
|
|
164
|
+
isFullWidth: true
|
|
52
165
|
}
|
|
53
166
|
};
|
|
54
167
|
|
|
55
168
|
export const WideText: Story = {
|
|
169
|
+
name: 'Wide text',
|
|
56
170
|
args: {
|
|
57
|
-
|
|
171
|
+
children: <>
|
|
172
|
+
<FeatureHeader.Primary title="Design and build accessible digital services for Scotland">
|
|
173
|
+
<p>The Scottish Government Design System provides static web assets for websites and web applications for the Scottish Government and other Scottish public sector bodies.</p>
|
|
174
|
+
<p>The Design System is open source and free to use.</p>
|
|
175
|
+
</FeatureHeader.Primary>
|
|
176
|
+
<FeatureHeader.Secondary>
|
|
177
|
+
<img
|
|
178
|
+
alt=""
|
|
179
|
+
src={illustration}
|
|
180
|
+
/>
|
|
181
|
+
</FeatureHeader.Secondary>
|
|
182
|
+
</>,
|
|
58
183
|
isWideText: true
|
|
59
184
|
}
|
|
60
185
|
};
|
|
186
|
+
|
|
187
|
+
export const TopAlign: Story = {
|
|
188
|
+
name: 'Top aligned image',
|
|
189
|
+
args: {
|
|
190
|
+
children: <>
|
|
191
|
+
<FeatureHeader.Primary title="Design and build accessible digital services for Scotland">
|
|
192
|
+
<p>The Scottish Government Design System provides static web assets for websites and web applications for the Scottish Government and other Scottish public sector bodies.</p>
|
|
193
|
+
<p>The Design System is open source and free to use.</p>
|
|
194
|
+
</FeatureHeader.Primary>
|
|
195
|
+
<FeatureHeader.Secondary>
|
|
196
|
+
<img
|
|
197
|
+
alt=""
|
|
198
|
+
src={illustration}
|
|
199
|
+
/>
|
|
200
|
+
</FeatureHeader.Secondary>
|
|
201
|
+
</>,
|
|
202
|
+
isTopAlignImage: true
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
export const TopAlignPhotograph: Story = {
|
|
207
|
+
name: 'Top aligned image (photograph)',
|
|
208
|
+
args: {
|
|
209
|
+
children: <>
|
|
210
|
+
<FeatureHeader.Primary title="Design and build accessible digital services for Scotland">
|
|
211
|
+
<p>The Scottish Government Design System provides static web assets for websites and web applications for the Scottish Government and other Scottish public sector bodies.</p>
|
|
212
|
+
<p>The Design System is open source and free to use.</p>
|
|
213
|
+
</FeatureHeader.Primary>
|
|
214
|
+
<FeatureHeader.Secondary>
|
|
215
|
+
<img
|
|
216
|
+
alt=""
|
|
217
|
+
src={photograph}
|
|
218
|
+
/>
|
|
219
|
+
</FeatureHeader.Secondary>
|
|
220
|
+
</>,
|
|
221
|
+
isTopAlignImage: true
|
|
222
|
+
}
|
|
223
|
+
};
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
import { test, expect, describe } from 'vitest';
|
|
2
|
+
import { render, screen, within } from '@testing-library/react';
|
|
3
|
+
import FeatureHeader from './FeatureHeader';
|
|
4
|
+
|
|
5
|
+
const TITLE_TEXT = 'Design and build accessible digital services for Scotland';
|
|
6
|
+
|
|
7
|
+
describe('feature header', () => {
|
|
8
|
+
test('feature header renders correctly', () => {
|
|
9
|
+
render(
|
|
10
|
+
<FeatureHeader data-testid="feature-header">
|
|
11
|
+
<FeatureHeader.Primary
|
|
12
|
+
data-testid="feature-header-primary"
|
|
13
|
+
title={TITLE_TEXT}
|
|
14
|
+
>
|
|
15
|
+
</FeatureHeader.Primary>
|
|
16
|
+
<FeatureHeader.Secondary data-testid="feature-header-secondary">
|
|
17
|
+
<img src="foo" data-testid="feature-header-image" />
|
|
18
|
+
</FeatureHeader.Secondary>
|
|
19
|
+
</FeatureHeader>
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
const featureHeaderElement = screen.getByTestId('feature-header');
|
|
23
|
+
const featureHeaderPrimaryElement = screen.getByTestId('feature-header-primary');
|
|
24
|
+
const featureHeaderSecondaryElement = screen.getByTestId('feature-header-secondary');
|
|
25
|
+
const featureHeaderTitleElement = within(featureHeaderPrimaryElement).getByRole('heading');
|
|
26
|
+
const featureHeaderImageElement = screen.getByTestId('feature-header-image');
|
|
27
|
+
|
|
28
|
+
expect(featureHeaderElement).toHaveClass('ds_feature-header');
|
|
29
|
+
expect(featureHeaderElement.tagName).toEqual('DIV');
|
|
30
|
+
|
|
31
|
+
expect(featureHeaderPrimaryElement).toHaveClass('ds_feature-header__primary');
|
|
32
|
+
expect(featureHeaderPrimaryElement.tagName).toEqual('DIV');
|
|
33
|
+
expect(featureHeaderPrimaryElement.parentElement).toEqual(featureHeaderElement);
|
|
34
|
+
|
|
35
|
+
expect(featureHeaderSecondaryElement).toHaveClass('ds_feature-header__secondary');
|
|
36
|
+
expect(featureHeaderSecondaryElement.tagName).toEqual('DIV');
|
|
37
|
+
expect(featureHeaderSecondaryElement.parentElement).toEqual(featureHeaderElement);
|
|
38
|
+
expect(featureHeaderSecondaryElement.previousElementSibling).toEqual(featureHeaderPrimaryElement);
|
|
39
|
+
|
|
40
|
+
expect(featureHeaderTitleElement).toHaveClass('ds_feature-header__title');
|
|
41
|
+
expect(featureHeaderTitleElement.tagName).toEqual('H1');
|
|
42
|
+
expect(featureHeaderTitleElement.textContent).toEqual(TITLE_TEXT);
|
|
43
|
+
|
|
44
|
+
expect(featureHeaderImageElement).toHaveClass('ds_feature-header__image');
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test('image CSS class added to svg element correctly', () => {
|
|
48
|
+
render(
|
|
49
|
+
<FeatureHeader data-testid="feature-header">
|
|
50
|
+
<FeatureHeader.Primary
|
|
51
|
+
data-testid="feature-header-primary"
|
|
52
|
+
title={TITLE_TEXT}
|
|
53
|
+
>
|
|
54
|
+
</FeatureHeader.Primary>
|
|
55
|
+
<FeatureHeader.Secondary data-testid="feature-header-secondary">
|
|
56
|
+
<svg version="1.1"
|
|
57
|
+
data-testid="feature-header-image"
|
|
58
|
+
width="300"
|
|
59
|
+
height="200"
|
|
60
|
+
xmlns="http://www.w3.org/2000/svg">
|
|
61
|
+
</svg>
|
|
62
|
+
</FeatureHeader.Secondary>
|
|
63
|
+
</FeatureHeader>
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
const featureHeaderImageElement = screen.getByTestId('feature-header-image');
|
|
67
|
+
|
|
68
|
+
expect(featureHeaderImageElement).toHaveClass('ds_feature-header__image');
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
test('image CSS class added to picture element correctly', () => {
|
|
72
|
+
render(
|
|
73
|
+
<FeatureHeader data-testid="feature-header">
|
|
74
|
+
<FeatureHeader.Primary
|
|
75
|
+
data-testid="feature-header-primary"
|
|
76
|
+
title={TITLE_TEXT}
|
|
77
|
+
>
|
|
78
|
+
</FeatureHeader.Primary>
|
|
79
|
+
<FeatureHeader.Secondary data-testid="feature-header-secondary">
|
|
80
|
+
<picture data-testid="feature-header-image">
|
|
81
|
+
</picture>
|
|
82
|
+
</FeatureHeader.Secondary>
|
|
83
|
+
</FeatureHeader>
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
const featureHeaderImageElement = screen.getByTestId('feature-header-image');
|
|
87
|
+
|
|
88
|
+
expect(featureHeaderImageElement).toHaveClass('ds_feature-header__image');
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
test('image CSS class NOT added to other elements in Secondary', () => {
|
|
92
|
+
render(
|
|
93
|
+
<FeatureHeader data-testid="feature-header">
|
|
94
|
+
<FeatureHeader.Primary
|
|
95
|
+
data-testid="feature-header-primary"
|
|
96
|
+
title={TITLE_TEXT}
|
|
97
|
+
>
|
|
98
|
+
</FeatureHeader.Primary>
|
|
99
|
+
<FeatureHeader.Secondary data-testid="feature-header-secondary">
|
|
100
|
+
<p data-testid="feature-header-non-image">
|
|
101
|
+
</p>
|
|
102
|
+
</FeatureHeader.Secondary>
|
|
103
|
+
</FeatureHeader>
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
const featureHeaderNonImageElement = screen.getByTestId('feature-header-non-image');
|
|
107
|
+
|
|
108
|
+
expect(featureHeaderNonImageElement).not.toHaveClass('ds_feature-header__image');
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
test('ds_wrapper class included when full width', () => {
|
|
112
|
+
render(
|
|
113
|
+
<FeatureHeader
|
|
114
|
+
data-testid="feature-header"
|
|
115
|
+
isFullWidth
|
|
116
|
+
>
|
|
117
|
+
<FeatureHeader.Primary
|
|
118
|
+
data-testid="feature-header-primary"
|
|
119
|
+
title={TITLE_TEXT}
|
|
120
|
+
>
|
|
121
|
+
</FeatureHeader.Primary>
|
|
122
|
+
<FeatureHeader.Secondary data-testid="feature-header-secondary">
|
|
123
|
+
<img src="foo" data-testid="feature-header-image" />
|
|
124
|
+
</FeatureHeader.Secondary>
|
|
125
|
+
</FeatureHeader>
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
const featureHeaderElement = screen.getByTestId('feature-header');
|
|
129
|
+
const featureHeaderPrimaryElement = screen.getByTestId('feature-header-primary');
|
|
130
|
+
const featureHeaderSecondaryElement = screen.getByTestId('feature-header-secondary');
|
|
131
|
+
|
|
132
|
+
const featureHeaderWrapperElement = featureHeaderElement.querySelector('.ds_wrapper');
|
|
133
|
+
|
|
134
|
+
expect(featureHeaderWrapperElement).toBeInTheDocument();
|
|
135
|
+
expect(featureHeaderWrapperElement?.parentElement).toEqual(featureHeaderElement);
|
|
136
|
+
expect(featureHeaderPrimaryElement.parentElement).toEqual(featureHeaderWrapperElement);
|
|
137
|
+
expect(featureHeaderSecondaryElement.parentElement).toEqual(featureHeaderWrapperElement);
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
test('feature header has correct CSS class for secondary background', () => {
|
|
141
|
+
render(
|
|
142
|
+
<FeatureHeader
|
|
143
|
+
data-testid="feature-header"
|
|
144
|
+
backgroundColor="secondary"
|
|
145
|
+
/>
|
|
146
|
+
);
|
|
147
|
+
|
|
148
|
+
const featureHeaderElement = screen.getByTestId('feature-header');
|
|
149
|
+
|
|
150
|
+
expect(featureHeaderElement).toHaveClass('ds_feature-header--background-secondary');
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
test('feature header has correct CSS class for tertiary background', () => {
|
|
154
|
+
render(
|
|
155
|
+
<FeatureHeader
|
|
156
|
+
data-testid="feature-header"
|
|
157
|
+
backgroundColor="tertiary"
|
|
158
|
+
/>
|
|
159
|
+
);
|
|
160
|
+
|
|
161
|
+
const featureHeaderElement = screen.getByTestId('feature-header');
|
|
162
|
+
|
|
163
|
+
expect(featureHeaderElement).toHaveClass('ds_feature-header--background-tertiary');
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
test('feature header has correct CSS class for brand background', () => {
|
|
167
|
+
render(
|
|
168
|
+
<FeatureHeader
|
|
169
|
+
data-testid="feature-header"
|
|
170
|
+
backgroundColor="brand"
|
|
171
|
+
/>
|
|
172
|
+
);
|
|
173
|
+
|
|
174
|
+
const featureHeaderElement = screen.getByTestId('feature-header');
|
|
175
|
+
|
|
176
|
+
expect(featureHeaderElement).toHaveClass('ds_feature-header--background');
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
test('feature header does nothing with unrecognised background colours', () => {
|
|
180
|
+
render(
|
|
181
|
+
<FeatureHeader
|
|
182
|
+
data-testid="feature-header"
|
|
183
|
+
// @ts-expect-error deliberately invalid value
|
|
184
|
+
backgroundColor="foo"
|
|
185
|
+
/>
|
|
186
|
+
);
|
|
187
|
+
|
|
188
|
+
const featureHeaderElement = screen.getByTestId('feature-header');
|
|
189
|
+
const cleanedClass = featureHeaderElement.getAttribute('class')?.trim().replace(/\s+/g, ' ');
|
|
190
|
+
|
|
191
|
+
expect(cleanedClass).toEqual('ds_feature-header');
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
test('feature header as HEADER element', () => {
|
|
195
|
+
render(
|
|
196
|
+
<FeatureHeader
|
|
197
|
+
data-testid="feature-header"
|
|
198
|
+
tagName="header"
|
|
199
|
+
/>
|
|
200
|
+
);
|
|
201
|
+
|
|
202
|
+
const featureHeaderElement = screen.getByTestId('feature-header');
|
|
203
|
+
|
|
204
|
+
expect(featureHeaderElement.tagName).toEqual('HEADER');
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
test('feature header with wide text', () => {
|
|
208
|
+
render(
|
|
209
|
+
<FeatureHeader
|
|
210
|
+
data-testid="feature-header"
|
|
211
|
+
isWideText
|
|
212
|
+
/>
|
|
213
|
+
);
|
|
214
|
+
|
|
215
|
+
const featureHeaderElement = screen.getByTestId('feature-header');
|
|
216
|
+
|
|
217
|
+
expect(featureHeaderElement).toHaveClass('ds_feature-header--wide');
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
test('feature header with top aligned image', () => {
|
|
221
|
+
render(
|
|
222
|
+
<FeatureHeader
|
|
223
|
+
data-testid="feature-header"
|
|
224
|
+
isTopAlignImage
|
|
225
|
+
/>
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
const featureHeaderElement = screen.getByTestId('feature-header');
|
|
229
|
+
|
|
230
|
+
expect(featureHeaderElement).toHaveClass('ds_feature-header--top');
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
test('feature header with cover image', () => {
|
|
234
|
+
render(
|
|
235
|
+
<FeatureHeader
|
|
236
|
+
data-testid="feature-header"
|
|
237
|
+
hasCoverImage
|
|
238
|
+
>
|
|
239
|
+
<FeatureHeader.Primary
|
|
240
|
+
data-testid="feature-header-primary"
|
|
241
|
+
title={TITLE_TEXT}
|
|
242
|
+
>
|
|
243
|
+
</FeatureHeader.Primary>
|
|
244
|
+
<FeatureHeader.Secondary data-testid="feature-header-secondary">
|
|
245
|
+
<img src="foo" data-testid="feature-header-image" />
|
|
246
|
+
</FeatureHeader.Secondary>
|
|
247
|
+
</FeatureHeader>
|
|
248
|
+
);
|
|
249
|
+
|
|
250
|
+
const featureHeaderSecondaryElement = screen.getByTestId('feature-header-secondary');
|
|
251
|
+
|
|
252
|
+
expect(featureHeaderSecondaryElement).toHaveClass('ds_feature-header__secondary--cover');
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
test('feature header with no image padding', () => {
|
|
256
|
+
render(
|
|
257
|
+
<FeatureHeader
|
|
258
|
+
data-testid="feature-header"
|
|
259
|
+
hasNoImagePadding
|
|
260
|
+
>
|
|
261
|
+
<FeatureHeader.Primary
|
|
262
|
+
data-testid="feature-header-primary"
|
|
263
|
+
title={TITLE_TEXT}
|
|
264
|
+
>
|
|
265
|
+
</FeatureHeader.Primary>
|
|
266
|
+
<FeatureHeader.Secondary data-testid="feature-header-secondary">
|
|
267
|
+
<img src="foo" data-testid="feature-header-image" />
|
|
268
|
+
</FeatureHeader.Secondary>
|
|
269
|
+
</FeatureHeader>
|
|
270
|
+
);
|
|
271
|
+
|
|
272
|
+
const featureHeaderSecondaryElement = screen.getByTestId('feature-header-secondary');
|
|
273
|
+
|
|
274
|
+
expect(featureHeaderSecondaryElement).toHaveClass('ds_feature-header__secondary--no-padding');
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
test('passing additional props', () => {
|
|
278
|
+
render(
|
|
279
|
+
<FeatureHeader data-testid="feature-header"
|
|
280
|
+
data-test="foo"
|
|
281
|
+
/>
|
|
282
|
+
);
|
|
283
|
+
|
|
284
|
+
const featureHeaderElement = screen.getByTestId('feature-header');
|
|
285
|
+
expect(featureHeaderElement?.dataset.test).toEqual('foo');
|
|
286
|
+
});
|
|
287
|
+
|
|
288
|
+
test('passing additional CSS classes', () => {
|
|
289
|
+
render(
|
|
290
|
+
<FeatureHeader data-testid="feature-header"
|
|
291
|
+
className="foo"
|
|
292
|
+
/>
|
|
293
|
+
);
|
|
294
|
+
|
|
295
|
+
const featureHeaderElement = screen.getByTestId('feature-header');
|
|
296
|
+
expect(featureHeaderElement).toHaveClass('foo');
|
|
297
|
+
});
|
|
298
|
+
});
|