@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
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
2
2
|
import argTypes from '../../../.storybook/sgdsArgTypes';
|
|
3
|
-
|
|
4
3
|
import SearchResult from './SearchResult';
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
import Metadata from '../PageMetadata';
|
|
5
|
+
// @ts-expect-error no types
|
|
7
6
|
import coo from '../../../static/images/highland-cow.jpg';
|
|
8
7
|
|
|
9
8
|
const meta = {
|
|
@@ -13,7 +12,8 @@ const meta = {
|
|
|
13
12
|
children: argTypes.children()
|
|
14
13
|
},
|
|
15
14
|
args: {
|
|
16
|
-
title: '
|
|
15
|
+
title: 'Greenhouse gas statistics 1990-2022',
|
|
16
|
+
href: '#foo'
|
|
17
17
|
}
|
|
18
18
|
} satisfies Meta<typeof SearchResult>;
|
|
19
19
|
|
|
@@ -22,7 +22,7 @@ type Story = StoryObj<typeof meta>;
|
|
|
22
22
|
|
|
23
23
|
export const Default: Story = {
|
|
24
24
|
render: (args) => (
|
|
25
|
-
<SearchResult
|
|
25
|
+
<SearchResult {...args}>
|
|
26
26
|
<SearchResult.Content>
|
|
27
27
|
Official statistics showing emissions of greenhouse gases in Scotland over the period 1990 to 2022.
|
|
28
28
|
</SearchResult.Content>
|
|
@@ -30,27 +30,27 @@ export const Default: Story = {
|
|
|
30
30
|
)
|
|
31
31
|
};
|
|
32
32
|
|
|
33
|
-
export const
|
|
33
|
+
export const WithMetadata: Story = {
|
|
34
34
|
render: (args) => (
|
|
35
|
-
<SearchResult
|
|
35
|
+
<SearchResult {...args}>
|
|
36
36
|
<SearchResult.Content>
|
|
37
37
|
Official statistics showing emissions of greenhouse gases in Scotland over the period 1990 to 2022.
|
|
38
38
|
</SearchResult.Content>
|
|
39
|
-
<SearchResult.
|
|
40
|
-
<
|
|
39
|
+
<SearchResult.Metadata>
|
|
40
|
+
<Metadata.Item name="Publication type">
|
|
41
41
|
Statistics
|
|
42
|
-
</
|
|
43
|
-
<
|
|
42
|
+
</Metadata.Item>
|
|
43
|
+
<Metadata.Item name="Date">
|
|
44
44
|
18 June 2024
|
|
45
|
-
</
|
|
46
|
-
</SearchResult.
|
|
45
|
+
</Metadata.Item>
|
|
46
|
+
</SearchResult.Metadata>
|
|
47
47
|
</SearchResult>
|
|
48
48
|
)
|
|
49
49
|
};
|
|
50
50
|
|
|
51
51
|
export const Context: Story = {
|
|
52
52
|
render: (args) => (
|
|
53
|
-
<SearchResult
|
|
53
|
+
<SearchResult {...args}>
|
|
54
54
|
<SearchResult.Content>
|
|
55
55
|
Official statistics showing emissions of greenhouse gases in Scotland over the period 1990 to 2022.
|
|
56
56
|
</SearchResult.Content>
|
|
@@ -64,7 +64,7 @@ export const Context: Story = {
|
|
|
64
64
|
|
|
65
65
|
export const Media: Story = {
|
|
66
66
|
render: (args) => (
|
|
67
|
-
<SearchResult
|
|
67
|
+
<SearchResult {...args}>
|
|
68
68
|
<SearchResult.Content>
|
|
69
69
|
<SearchResult.Media>
|
|
70
70
|
<img src={coo} alt="" />
|
|
@@ -77,7 +77,7 @@ export const Media: Story = {
|
|
|
77
77
|
|
|
78
78
|
export const Promoted: Story = {
|
|
79
79
|
render: (args) => (
|
|
80
|
-
<SearchResult isPromoted
|
|
80
|
+
<SearchResult isPromoted {...args}>
|
|
81
81
|
<SearchResult.Content>
|
|
82
82
|
Official statistics showing emissions of greenhouse gases in Scotland over the period 1990 to 2022.
|
|
83
83
|
</SearchResult.Content>
|
|
@@ -87,21 +87,21 @@ export const Promoted: Story = {
|
|
|
87
87
|
|
|
88
88
|
export const KitchenSink: Story = {
|
|
89
89
|
render: (args) => (
|
|
90
|
-
<SearchResult isPromoted
|
|
90
|
+
<SearchResult isPromoted {...args}>
|
|
91
91
|
<SearchResult.Content>
|
|
92
92
|
<SearchResult.Media>
|
|
93
93
|
<img src={coo} alt="" />
|
|
94
94
|
</SearchResult.Media>
|
|
95
95
|
Official statistics showing emissions of greenhouse gases in Scotland over the period 1990 to 2022.
|
|
96
96
|
</SearchResult.Content>
|
|
97
|
-
<SearchResult.
|
|
98
|
-
<
|
|
97
|
+
<SearchResult.Metadata>
|
|
98
|
+
<Metadata.Item name="Publication type">
|
|
99
99
|
Statistics
|
|
100
|
-
</
|
|
101
|
-
<
|
|
100
|
+
</Metadata.Item>
|
|
101
|
+
<Metadata.Item name="Date">
|
|
102
102
|
18 June 2024
|
|
103
|
-
</
|
|
104
|
-
</SearchResult.
|
|
103
|
+
</Metadata.Item>
|
|
104
|
+
</SearchResult.Metadata>
|
|
105
105
|
<SearchResult.Context title="Part of">
|
|
106
106
|
<SearchResult.ContextItem><a href="#">Environment statistics</a></SearchResult.ContextItem>
|
|
107
107
|
<SearchResult.ContextItem><a href="#">Energy statistics</a></SearchResult.ContextItem>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { test, expect } from 'vitest';
|
|
2
2
|
import { render, screen, within } from '@testing-library/react';
|
|
3
3
|
import SearchResult from './SearchResult';
|
|
4
|
+
import Metadata from '../PageMetadata';
|
|
4
5
|
|
|
5
6
|
const RESULT_TITLE = 'My title';
|
|
6
7
|
const RESULT_HREF = '#foo';
|
|
@@ -15,11 +16,11 @@ test('search result renders correctly', () => {
|
|
|
15
16
|
<SearchResult.Content>
|
|
16
17
|
{RESULT_CONTENT}
|
|
17
18
|
</SearchResult.Content>
|
|
18
|
-
<SearchResult.
|
|
19
|
-
<
|
|
19
|
+
<SearchResult.Metadata>
|
|
20
|
+
<Metadata.Item name={META_KEY}>
|
|
20
21
|
{META_VALUE}
|
|
21
|
-
</
|
|
22
|
-
</SearchResult.
|
|
22
|
+
</Metadata.Item>
|
|
23
|
+
</SearchResult.Metadata>
|
|
23
24
|
<SearchResult.Context>
|
|
24
25
|
<SearchResult.ContextItem>{CONTEXT_VALUE}</SearchResult.ContextItem>
|
|
25
26
|
</SearchResult.Context>
|
|
@@ -2,18 +2,20 @@ import { Children, createContext, useContext } from 'react';
|
|
|
2
2
|
import ConditionalWrapper from '../../common/ConditionalWrapper';
|
|
3
3
|
import AspectBox from '../AspectBox';
|
|
4
4
|
import Metadata from '../PageMetadata';
|
|
5
|
+
import { SearchResultContextProps, SearchResultProps } from './types';
|
|
6
|
+
import clsx from 'clsx';
|
|
5
7
|
|
|
6
8
|
const SearchResultLinkHrefContext = createContext('');
|
|
7
9
|
|
|
8
10
|
const SearchResultContent = ({
|
|
9
11
|
children
|
|
10
|
-
}:
|
|
11
|
-
const otherChildren:
|
|
12
|
+
}: React.AllHTMLAttributes<HTMLElement>) => {
|
|
13
|
+
const otherChildren: React.ReactNode[] = [];
|
|
12
14
|
let imageChild: React.ReactNode = null;
|
|
13
15
|
|
|
14
16
|
// assign to slots
|
|
15
17
|
Children.forEach(children, (child: React.ReactNode) => {
|
|
16
|
-
const thisChild = child as React.
|
|
18
|
+
const thisChild = child as React.JSX.Element;
|
|
17
19
|
if (thisChild && thisChild.type === SearchResultMedia) {
|
|
18
20
|
imageChild = thisChild;
|
|
19
21
|
} else {
|
|
@@ -37,7 +39,7 @@ const SearchResultContent = ({
|
|
|
37
39
|
const SearchResultContext = ({
|
|
38
40
|
children,
|
|
39
41
|
title = 'Part of'
|
|
40
|
-
}:
|
|
42
|
+
}: SearchResultContextProps) => {
|
|
41
43
|
return (
|
|
42
44
|
<dl className="ds_search-result__context">
|
|
43
45
|
<dt className="ds_search-result__context-key">{title}:</dt>
|
|
@@ -48,7 +50,7 @@ const SearchResultContext = ({
|
|
|
48
50
|
|
|
49
51
|
const SearchResultContextItem = ({
|
|
50
52
|
children
|
|
51
|
-
}:
|
|
53
|
+
}: React.AllHTMLAttributes<HTMLElement>) => {
|
|
52
54
|
return (
|
|
53
55
|
<dd className="ds_search-result__context-value">
|
|
54
56
|
{children}
|
|
@@ -58,7 +60,7 @@ const SearchResultContextItem = ({
|
|
|
58
60
|
|
|
59
61
|
const SearchResultMedia = ({
|
|
60
62
|
children
|
|
61
|
-
}:
|
|
63
|
+
}: React.AllHTMLAttributes<HTMLElement>) => {
|
|
62
64
|
return (
|
|
63
65
|
<div className="ds_search-result__media-wrapper">
|
|
64
66
|
<a className="ds_search-result__media-link" href={useContext(SearchResultLinkHrefContext)} tabIndex={-1} aria-hidden="true">
|
|
@@ -72,7 +74,7 @@ const SearchResultMedia = ({
|
|
|
72
74
|
|
|
73
75
|
const SearchResultMeta = ({
|
|
74
76
|
children
|
|
75
|
-
}:
|
|
77
|
+
}: React.AllHTMLAttributes<HTMLElement>) => {
|
|
76
78
|
return (
|
|
77
79
|
<Metadata className="ds_search-result__metadata" isInline>
|
|
78
80
|
{children}
|
|
@@ -88,14 +90,14 @@ const SearchResult = ({
|
|
|
88
90
|
promotedTitle = 'Recommended',
|
|
89
91
|
title,
|
|
90
92
|
...props
|
|
91
|
-
}:
|
|
93
|
+
}: SearchResultProps) => {
|
|
92
94
|
const LINK_CLASS = 'ds_search-result__link';
|
|
93
95
|
|
|
94
96
|
return (
|
|
95
|
-
<div className={[
|
|
97
|
+
<div className={clsx([
|
|
96
98
|
'ds_search-result',
|
|
97
|
-
isPromoted
|
|
98
|
-
]
|
|
99
|
+
isPromoted && 'ds_search-result--promoted'
|
|
100
|
+
])}
|
|
99
101
|
{...props}
|
|
100
102
|
>
|
|
101
103
|
<ConditionalWrapper
|
|
@@ -124,14 +126,12 @@ SearchResult.Content = SearchResultContent;
|
|
|
124
126
|
SearchResult.Context = SearchResultContext;
|
|
125
127
|
SearchResult.ContextItem = SearchResultContextItem;
|
|
126
128
|
SearchResult.Media = SearchResultMedia;
|
|
127
|
-
SearchResult.
|
|
128
|
-
SearchResult.MetaItem = Metadata.Item;
|
|
129
|
+
SearchResult.Metadata = SearchResultMeta;
|
|
129
130
|
|
|
130
131
|
SearchResultContent.displayName = 'SearchResult.Content';
|
|
131
132
|
SearchResultContext.displayName = 'SearchResult.Context';
|
|
132
133
|
SearchResultContextItem.displayName = 'SearchResult.ContextItem';
|
|
133
134
|
SearchResultMedia.displayName = 'SearchResult.Media';
|
|
134
|
-
SearchResultMeta.displayName = 'SearchResult.
|
|
135
|
-
SearchResult.MetaItem.displayName = 'SearchResult.MetaItem';
|
|
135
|
+
SearchResultMeta.displayName = 'SearchResult.Metadata';
|
|
136
136
|
|
|
137
137
|
export default SearchResult;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { LinkComponent } from "../../shared-types";
|
|
2
|
+
|
|
3
|
+
export interface SearchResultContextProps extends React.AllHTMLAttributes<HTMLDListElement> {
|
|
4
|
+
title: string;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export interface SearchResultProps extends React.AllHTMLAttributes<HTMLElement> {
|
|
8
|
+
href: string;
|
|
9
|
+
isPromoted?: boolean;
|
|
10
|
+
linkComponent?: LinkComponent;
|
|
11
|
+
promotedTitle?: string;
|
|
12
|
+
title: string;
|
|
13
|
+
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { AllHTMLAttributes } from "react";
|
|
2
2
|
import Button from "../Button";
|
|
3
3
|
import Select from "../Select";
|
|
4
|
+
import { SearchSortProps } from "./types";
|
|
5
|
+
import clsx from 'clsx';
|
|
4
6
|
|
|
5
7
|
const Option = ({
|
|
6
8
|
children,
|
|
@@ -20,13 +22,13 @@ const SearchSort = ({
|
|
|
20
22
|
label = 'Sort by',
|
|
21
23
|
onApply,
|
|
22
24
|
...props
|
|
23
|
-
}:
|
|
25
|
+
}: SearchSortProps) => {
|
|
24
26
|
return (
|
|
25
27
|
<div
|
|
26
|
-
className={[
|
|
28
|
+
className={clsx([
|
|
27
29
|
'ds_sort-options',
|
|
28
30
|
className
|
|
29
|
-
]
|
|
31
|
+
])}
|
|
30
32
|
{...props}
|
|
31
33
|
>
|
|
32
34
|
<Select id={id} label={label}>
|
|
@@ -134,6 +134,48 @@ test('select with change function', () => {
|
|
|
134
134
|
expect(ONCHANGE_FUNCTION).toHaveBeenCalled();
|
|
135
135
|
});
|
|
136
136
|
|
|
137
|
+
test('select with onBlur that is not a function', () => {
|
|
138
|
+
render(
|
|
139
|
+
<Select
|
|
140
|
+
id={SELECT_ID}
|
|
141
|
+
label={LABEL_TEXT}
|
|
142
|
+
// @ts-expect-error onBlur is not a function
|
|
143
|
+
onBlur='foo'
|
|
144
|
+
>
|
|
145
|
+
{OPTIONS}
|
|
146
|
+
</Select>
|
|
147
|
+
);
|
|
148
|
+
|
|
149
|
+
const select = screen.getByRole('combobox');
|
|
150
|
+
|
|
151
|
+
fireEvent.blur(select);
|
|
152
|
+
|
|
153
|
+
// todo: assertion
|
|
154
|
+
// success indicated by no errors thrown
|
|
155
|
+
// error would be thrown on an untestable thread
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
test('select with onChange that is not a function', () => {
|
|
159
|
+
render(
|
|
160
|
+
<Select
|
|
161
|
+
id={SELECT_ID}
|
|
162
|
+
label={LABEL_TEXT}
|
|
163
|
+
// @ts-expect-error onChange is not a function
|
|
164
|
+
onChange='foo'
|
|
165
|
+
>
|
|
166
|
+
{OPTIONS}
|
|
167
|
+
</Select>
|
|
168
|
+
);
|
|
169
|
+
|
|
170
|
+
const select = screen.getByRole('combobox');
|
|
171
|
+
|
|
172
|
+
fireEvent.change(select, {target: {value: 'button'}});
|
|
173
|
+
|
|
174
|
+
// todo: assertion
|
|
175
|
+
// success indicated by no errors thrown
|
|
176
|
+
// error would be thrown on an untestable thread
|
|
177
|
+
});
|
|
178
|
+
|
|
137
179
|
test('select with placeholder option', () => {
|
|
138
180
|
const PLACEHOLDER_TEXT = 'foo';
|
|
139
181
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import ErrorMessage from '../ErrorMessage';
|
|
2
2
|
import HintText from '../../common/HintText';
|
|
3
|
+
import { SelectProps } from './types';
|
|
4
|
+
import clsx from 'clsx';
|
|
3
5
|
|
|
4
6
|
const Select = function ({
|
|
5
7
|
children,
|
|
@@ -16,7 +18,7 @@ const Select = function ({
|
|
|
16
18
|
placeholder,
|
|
17
19
|
width,
|
|
18
20
|
...props
|
|
19
|
-
}:
|
|
21
|
+
}: SelectProps) {
|
|
20
22
|
const errorMessageId = `error-message-${id}`;
|
|
21
23
|
const hintTextId = `hint-text-${id}`;
|
|
22
24
|
const describedbys: string[] = [];
|
|
@@ -24,13 +26,13 @@ const Select = function ({
|
|
|
24
26
|
if (hintText) { describedbys.push(hintTextId) };
|
|
25
27
|
if (errorMessage) { describedbys.push(errorMessageId) };
|
|
26
28
|
|
|
27
|
-
function handleBlur(event: React.FocusEvent) {
|
|
29
|
+
function handleBlur(event: React.FocusEvent<HTMLSelectElement>) {
|
|
28
30
|
if (typeof onBlur === 'function') {
|
|
29
31
|
onBlur(event);
|
|
30
32
|
}
|
|
31
33
|
}
|
|
32
34
|
|
|
33
|
-
function handleChange(event: React.ChangeEvent) {
|
|
35
|
+
function handleChange(event: React.ChangeEvent<HTMLSelectElement>) {
|
|
34
36
|
if (typeof onChange === 'function') {
|
|
35
37
|
onChange(event);
|
|
36
38
|
}
|
|
@@ -39,15 +41,15 @@ const Select = function ({
|
|
|
39
41
|
return (
|
|
40
42
|
<>
|
|
41
43
|
<label className="ds_label" htmlFor={id}>{label}</label>
|
|
42
|
-
{hintText && <HintText id={hintTextId}
|
|
44
|
+
{hintText && <HintText id={hintTextId}>{hintText}</HintText>}
|
|
43
45
|
{errorMessage && <ErrorMessage id={errorMessageId}>{errorMessage}</ErrorMessage>}
|
|
44
46
|
<div
|
|
45
|
-
className={[
|
|
47
|
+
className={clsx([
|
|
46
48
|
"ds_select-wrapper",
|
|
47
49
|
hasError && 'ds_input--error',
|
|
48
50
|
width && `ds_input--${width}`,
|
|
49
51
|
className
|
|
50
|
-
]
|
|
52
|
+
])}
|
|
51
53
|
{...props}
|
|
52
54
|
>
|
|
53
55
|
<select
|
|
@@ -1,19 +1,22 @@
|
|
|
1
|
+
import { SequentialNavigationLinkProps, SequentialNavigationProps } from "./types";
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
|
|
1
4
|
const SeqNavLink = ({
|
|
2
5
|
children,
|
|
3
6
|
href,
|
|
4
7
|
isPrev,
|
|
5
8
|
linkComponent,
|
|
6
9
|
textLabel
|
|
7
|
-
}:
|
|
8
|
-
const LINK_CLASSES = [
|
|
10
|
+
}:SequentialNavigationLinkProps) => {
|
|
11
|
+
const LINK_CLASSES = clsx([
|
|
9
12
|
'ds_sequential-nav__button',
|
|
10
13
|
isPrev ? 'ds_sequential-nav__button--left' : 'ds_sequential-nav__button--right'
|
|
11
|
-
]
|
|
14
|
+
]);
|
|
12
15
|
|
|
13
|
-
const ITEM_CLASSES = [
|
|
16
|
+
const ITEM_CLASSES = clsx([
|
|
14
17
|
'ds_sequential-nav__item',
|
|
15
18
|
isPrev ? 'ds_sequential-nav__item--prev' : 'ds_sequential-nav__item--next'
|
|
16
|
-
]
|
|
19
|
+
]);
|
|
17
20
|
|
|
18
21
|
function processChildren(children: React.ReactNode) {
|
|
19
22
|
const linkInner = <span className="ds_sequential-nav__text" data-label={textLabel}>{children}</span>
|
|
@@ -39,7 +42,7 @@ const NextLink = ({
|
|
|
39
42
|
href,
|
|
40
43
|
linkComponent,
|
|
41
44
|
textLabel = 'Next'
|
|
42
|
-
}:
|
|
45
|
+
}: SequentialNavigationLinkProps) => {
|
|
43
46
|
return <SeqNavLink href={href} linkComponent={linkComponent} textLabel={textLabel}>{children}</SeqNavLink>
|
|
44
47
|
};
|
|
45
48
|
|
|
@@ -48,7 +51,7 @@ const PreviousLink = ({
|
|
|
48
51
|
href,
|
|
49
52
|
linkComponent,
|
|
50
53
|
textLabel = 'Previous'
|
|
51
|
-
}:
|
|
54
|
+
}: SequentialNavigationLinkProps) => {
|
|
52
55
|
return <SeqNavLink href={href} linkComponent={linkComponent} textLabel={textLabel} isPrev>{children}</SeqNavLink>
|
|
53
56
|
};
|
|
54
57
|
|
|
@@ -57,13 +60,13 @@ const SequentialNavigation = ({
|
|
|
57
60
|
children,
|
|
58
61
|
className,
|
|
59
62
|
...props
|
|
60
|
-
}:
|
|
63
|
+
}: SequentialNavigationProps) => {
|
|
61
64
|
return (
|
|
62
65
|
<nav
|
|
63
|
-
className={[
|
|
66
|
+
className={clsx([
|
|
64
67
|
'ds_sequential-nav',
|
|
65
68
|
className
|
|
66
|
-
]
|
|
69
|
+
])}
|
|
67
70
|
aria-label={ariaLabel}
|
|
68
71
|
{...props}
|
|
69
72
|
>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { LinkComponent } from "../../shared-types";
|
|
2
|
+
|
|
3
|
+
export interface SequentialNavigationLinkProps extends React.AllHTMLAttributes<HTMLDivElement> {
|
|
4
|
+
href: string;
|
|
5
|
+
isPrev?: boolean;
|
|
6
|
+
linkComponent?: LinkComponent;
|
|
7
|
+
textLabel?: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface SequentialNavigationProps extends React.AllHTMLAttributes<HTMLElement> {
|
|
11
|
+
ariaLabel?: React.AriaAttributes['aria-label'];
|
|
12
|
+
}
|
|
@@ -109,6 +109,30 @@ test('side nav link with custom element', () => {
|
|
|
109
109
|
expect(link?.textContent).toEqual(LINK_TEXT);
|
|
110
110
|
});
|
|
111
111
|
|
|
112
|
+
test('instantiating/initialising DS component script', () => {
|
|
113
|
+
render(
|
|
114
|
+
<SideNavigation>
|
|
115
|
+
<SideNavigation.List>
|
|
116
|
+
<SideNavigation.Item href="#dates" title="Dates"/>
|
|
117
|
+
</SideNavigation.List>
|
|
118
|
+
</SideNavigation>
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
const sideNavigation = screen.getByRole('navigation');
|
|
122
|
+
expect(sideNavigation).toHaveClass('js-initialised');
|
|
123
|
+
expect(sideNavigation).toHaveClass('js-instantiated');
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
test('instantiating/initialising DS component script: no children', () => {
|
|
127
|
+
render(
|
|
128
|
+
<SideNavigation />
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
const sideNavigation = screen.getByRole('navigation');
|
|
132
|
+
expect(sideNavigation).not.toHaveClass('js-initialised');
|
|
133
|
+
expect(sideNavigation).not.toHaveClass('js-instantiated');
|
|
134
|
+
});
|
|
135
|
+
|
|
112
136
|
test('passing additional props', () => {
|
|
113
137
|
render(
|
|
114
138
|
<SideNavigation data-test="foo" />
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { useEffect, useRef } from 'react';
|
|
2
|
-
// @ts-ignore
|
|
3
2
|
import DSSideNavigation from '@scottish-government/design-system/src/components/side-navigation/side-navigation';
|
|
3
|
+
import { SideNavigationItemProps, SideNavigationListProps, SideNavigationProps } from './types';
|
|
4
|
+
import clsx from 'clsx';
|
|
4
5
|
|
|
5
6
|
const SideNavigationList = function ({
|
|
6
7
|
children,
|
|
7
8
|
isRoot
|
|
8
|
-
}:
|
|
9
|
+
}: SideNavigationListProps) {
|
|
9
10
|
return (
|
|
10
11
|
<ul className="ds_side-navigation__list"
|
|
11
12
|
id={isRoot ? 'side-navigation-root' : undefined }
|
|
@@ -21,15 +22,15 @@ const SideNavigationItem = function ({
|
|
|
21
22
|
isCurrent = false,
|
|
22
23
|
linkComponent,
|
|
23
24
|
title
|
|
24
|
-
}:
|
|
25
|
+
}: SideNavigationItemProps) {
|
|
25
26
|
const LINK_CLASS = 'ds_side-navigation__link';
|
|
26
27
|
|
|
27
28
|
return (
|
|
28
29
|
<li
|
|
29
|
-
className={[
|
|
30
|
+
className={clsx([
|
|
30
31
|
'ds_side-navigation__item',
|
|
31
32
|
children && 'ds_side-navigation__item--has-children'
|
|
32
|
-
]
|
|
33
|
+
])}
|
|
33
34
|
>
|
|
34
35
|
{isCurrent ?
|
|
35
36
|
<span className={LINK_CLASS + ' ds_current'}>{title}</span> :
|
|
@@ -47,22 +48,25 @@ const SideNavigation = function ({
|
|
|
47
48
|
children,
|
|
48
49
|
className,
|
|
49
50
|
...props
|
|
50
|
-
}:
|
|
51
|
+
}: SideNavigationProps) {
|
|
51
52
|
const ref = useRef(null);
|
|
52
53
|
|
|
53
54
|
useEffect(() => {
|
|
54
|
-
|
|
55
|
-
|
|
55
|
+
/* istanbul ignore else */
|
|
56
|
+
if (ref.current) {
|
|
57
|
+
if (children) {
|
|
58
|
+
new DSSideNavigation(ref.current).init();
|
|
59
|
+
}
|
|
56
60
|
}
|
|
57
61
|
}, [ref]);
|
|
58
62
|
|
|
59
63
|
return (
|
|
60
64
|
<nav
|
|
61
65
|
aria-label={ariaLabel}
|
|
62
|
-
className={[
|
|
66
|
+
className={clsx([
|
|
63
67
|
'ds_side-navigation',
|
|
64
68
|
className
|
|
65
|
-
]
|
|
69
|
+
])}
|
|
66
70
|
data-module="ds-side-navigation"
|
|
67
71
|
ref={ref}
|
|
68
72
|
{...props}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { LinkComponent } from "../../shared-types";
|
|
2
|
+
|
|
3
|
+
export interface SideNavigationListProps extends React.AllHTMLAttributes<HTMLUListElement> {
|
|
4
|
+
isRoot?: boolean;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export interface SideNavigationItemProps extends React.AllHTMLAttributes<HTMLLIElement> {
|
|
8
|
+
isCurrent?: boolean;
|
|
9
|
+
href: string;
|
|
10
|
+
linkComponent?: LinkComponent;
|
|
11
|
+
title: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface SideNavigationProps extends React.AllHTMLAttributes<HTMLElement> {
|
|
15
|
+
ariaLabel?: string;
|
|
16
|
+
}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import React, { Children } from 'react';
|
|
2
2
|
import ConditionalWrapper from '../../common/ConditionalWrapper';
|
|
3
|
+
import { SiteFooterLicenseProps, SiteFooterLinkProps, SiteFooterOrgProps, SiteFooterProps } from './types';
|
|
4
|
+
import clsx from 'clsx';
|
|
3
5
|
|
|
4
6
|
const License = ({
|
|
5
7
|
children,
|
|
6
8
|
...props
|
|
7
|
-
}:
|
|
9
|
+
}: SiteFooterLicenseProps) => {
|
|
8
10
|
return (
|
|
9
11
|
<div className="ds_site-footer__copyright" {...props}>
|
|
10
12
|
{children}
|
|
@@ -15,7 +17,7 @@ const License = ({
|
|
|
15
17
|
const Links = ({
|
|
16
18
|
children,
|
|
17
19
|
...props
|
|
18
|
-
}:
|
|
20
|
+
}: React.AllHTMLAttributes<HTMLUListElement>) => {
|
|
19
21
|
return (
|
|
20
22
|
<ul className="ds_site-footer__site-items" {...props}>
|
|
21
23
|
{children}
|
|
@@ -28,7 +30,7 @@ const Link = ({
|
|
|
28
30
|
href,
|
|
29
31
|
linkComponent,
|
|
30
32
|
...props
|
|
31
|
-
}:
|
|
33
|
+
}: SiteFooterLinkProps) => {
|
|
32
34
|
function processChildren(children: React.ReactNode) {
|
|
33
35
|
if (linkComponent) {
|
|
34
36
|
return linkComponent({ href, children });
|
|
@@ -49,9 +51,9 @@ const Org = ({
|
|
|
49
51
|
title,
|
|
50
52
|
children,
|
|
51
53
|
...props
|
|
52
|
-
}:
|
|
54
|
+
}: SiteFooterOrgProps) => {
|
|
53
55
|
children = Children.map(children, child => {
|
|
54
|
-
|
|
56
|
+
const thisChild = child as React.ReactElement<HTMLElement>;
|
|
55
57
|
if (thisChild && ['img', 'svg', 'picture'].includes(thisChild.type as string)) {
|
|
56
58
|
return React.cloneElement(thisChild, { className: 'ds_site-footer__org-logo' });
|
|
57
59
|
} else {
|
|
@@ -75,13 +77,13 @@ const SiteFooter = ({
|
|
|
75
77
|
children,
|
|
76
78
|
className,
|
|
77
79
|
...props
|
|
78
|
-
}:
|
|
80
|
+
}: SiteFooterProps) => {
|
|
79
81
|
return (
|
|
80
82
|
<footer
|
|
81
|
-
className={[
|
|
83
|
+
className={clsx([
|
|
82
84
|
"ds_site-footer",
|
|
83
85
|
className
|
|
84
|
-
]
|
|
86
|
+
])}
|
|
85
87
|
{...props}
|
|
86
88
|
>
|
|
87
89
|
<div className="ds_wrapper">
|