@scottish-government/designsystem-react 0.12.0 → 0.13.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 +84 -43
- package/CHANGELOG.md +27 -1
- package/dist/common/AbstractNotificationBanner/AbstractNotificationBanner.d.ts +9 -0
- package/dist/common/AbstractNotificationBanner/AbstractNotificationBanner.jsx +62 -0
- package/dist/common/AbstractNotificationBanner/index.d.ts +1 -0
- package/dist/common/AbstractNotificationBanner/index.js +8 -0
- package/dist/common/ActionLink/ActionLink.d.ts +5 -0
- package/dist/common/ActionLink/ActionLink.jsx +19 -0
- package/dist/common/ActionLink/index.d.ts +1 -0
- package/dist/common/ActionLink/index.js +8 -0
- package/dist/common/ConditionalWrapper/ConditionalWrapper.d.ts +8 -0
- package/dist/common/ConditionalWrapper/ConditionalWrapper.jsx +8 -0
- package/dist/common/ConditionalWrapper/index.d.ts +1 -0
- package/dist/common/ConditionalWrapper/index.js +8 -0
- package/dist/common/FileIcon/FileIcon.d.ts +6 -0
- package/dist/common/FileIcon/FileIcon.jsx +46 -0
- package/dist/common/FileIcon/index.d.ts +1 -0
- package/dist/common/FileIcon/index.js +8 -0
- package/dist/common/HintText/HintText.d.ts +5 -0
- package/dist/common/HintText/HintText.jsx +9 -0
- package/dist/common/HintText/index.d.ts +1 -0
- package/dist/common/HintText/index.js +8 -0
- package/dist/common/Icon/Icon.d.ts +6 -0
- package/dist/common/Icon/Icon.jsx +51 -0
- package/dist/common/Icon/index.d.ts +1 -0
- package/dist/common/Icon/index.js +8 -0
- package/dist/common/ScreenReaderText/ScreenReaderText.d.ts +5 -0
- package/dist/common/ScreenReaderText/ScreenReaderText.jsx +9 -0
- package/dist/common/ScreenReaderText/index.d.ts +1 -0
- package/dist/common/ScreenReaderText/index.js +8 -0
- package/dist/common/WrapperTag/WrapperTag.d.ts +8 -0
- package/dist/common/WrapperTag/WrapperTag.jsx +11 -0
- package/dist/common/WrapperTag/index.d.ts +1 -0
- package/dist/common/WrapperTag/index.js +8 -0
- package/dist/common/index.d.ts +8 -0
- package/dist/common/index.js +22 -0
- package/dist/components/Accordion/index.d.ts +1 -0
- package/dist/components/Accordion/index.js +8 -0
- package/dist/components/AspectBox/index.d.ts +1 -0
- package/dist/components/AspectBox/index.js +8 -0
- package/dist/components/BackToTop/index.d.ts +1 -0
- package/dist/components/BackToTop/index.js +8 -0
- package/dist/components/Breadcrumbs/index.d.ts +1 -0
- package/dist/components/Breadcrumbs/index.js +8 -0
- package/dist/components/Button/ButtonGroup.d.ts +5 -0
- package/dist/components/Button/ButtonGroup.jsx +13 -0
- package/dist/components/Button/index.d.ts +2 -0
- package/dist/components/Button/index.js +10 -0
- package/dist/components/CategoryItem/index.d.ts +1 -0
- package/dist/components/CategoryItem/index.js +8 -0
- package/dist/components/CategoryList/index.d.ts +1 -0
- package/dist/components/CategoryList/index.js +8 -0
- package/dist/components/Checkbox/index.d.ts +2 -0
- package/dist/components/Checkbox/index.js +10 -0
- package/dist/components/ConfirmationMessage/index.d.ts +1 -0
- package/dist/components/ConfirmationMessage/index.js +8 -0
- package/dist/components/ContentsNav/index.d.ts +1 -0
- package/dist/components/ContentsNav/index.js +8 -0
- package/dist/components/CookieBanner/index.d.ts +1 -0
- package/dist/components/CookieBanner/index.js +8 -0
- package/dist/components/DatePicker/DatePicker.jsx +2 -2
- package/dist/components/DatePicker/index.d.ts +1 -0
- package/dist/components/DatePicker/index.js +8 -0
- package/dist/components/Details/index.d.ts +1 -0
- package/dist/components/Details/index.js +8 -0
- package/dist/components/ErrorMessage/index.d.ts +1 -0
- package/dist/components/ErrorMessage/index.js +8 -0
- package/dist/components/ErrorSummary/index.d.ts +1 -0
- package/dist/components/ErrorSummary/index.js +8 -0
- package/dist/components/FeatureHeader/FeatureHeader.d.ts +13 -0
- package/dist/components/FeatureHeader/FeatureHeader.jsx +70 -0
- package/dist/components/FeatureHeader/index.d.ts +1 -0
- package/dist/components/FeatureHeader/index.js +8 -0
- package/dist/components/FileDownload/index.d.ts +1 -0
- package/dist/components/FileDownload/index.js +8 -0
- package/dist/components/HideThisPage/index.d.ts +1 -0
- package/dist/components/HideThisPage/index.js +8 -0
- package/dist/components/InsetText/index.d.ts +1 -0
- package/dist/components/InsetText/index.js +8 -0
- package/dist/components/NotificationBanner/index.d.ts +1 -0
- package/dist/components/NotificationBanner/index.js +8 -0
- package/dist/components/NotificationPanel/index.d.ts +1 -0
- package/dist/components/NotificationPanel/index.js +8 -0
- package/dist/components/PageHeader/index.d.ts +1 -0
- package/dist/components/PageHeader/index.js +8 -0
- package/dist/components/PageMetadata/index.d.ts +1 -0
- package/dist/components/PageMetadata/index.js +8 -0
- package/dist/components/Pagination/index.d.ts +1 -0
- package/dist/components/Pagination/index.js +8 -0
- package/dist/components/PhaseBanner/index.d.ts +1 -0
- package/dist/components/PhaseBanner/index.js +8 -0
- package/dist/components/Question/Question.jsx +1 -1
- package/dist/components/Question/index.d.ts +1 -0
- package/dist/components/Question/index.js +8 -0
- package/dist/components/RadioButton/index.d.ts +2 -0
- package/dist/components/RadioButton/index.js +10 -0
- package/dist/components/SearchFacets/index.d.ts +1 -0
- package/dist/components/SearchFacets/index.js +8 -0
- package/dist/components/SearchFilters/SearchFilters.jsx +6 -6
- package/dist/components/SearchFilters/index.d.ts +1 -0
- package/dist/components/SearchFilters/index.js +8 -0
- package/dist/components/SearchResult/SearchResult.jsx +2 -2
- package/dist/components/SearchResult/index.d.ts +1 -0
- package/dist/components/SearchResult/index.js +8 -0
- package/dist/components/SearchSort/SearchSort.jsx +2 -2
- package/dist/components/SearchSort/index.d.ts +1 -0
- package/dist/components/SearchSort/index.js +8 -0
- package/dist/components/Select/Select.jsx +1 -1
- package/dist/components/Select/index.d.ts +1 -0
- package/dist/components/Select/index.js +8 -0
- package/dist/components/SequentialNavigation/index.d.ts +1 -0
- package/dist/components/SequentialNavigation/index.js +8 -0
- package/dist/components/SideNavigation/index.d.ts +1 -0
- package/dist/components/SideNavigation/index.js +8 -0
- package/dist/components/SiteFooter/index.d.ts +1 -0
- package/dist/components/SiteFooter/index.js +8 -0
- package/dist/components/SiteHeader/SiteHeader.jsx +1 -1
- package/dist/components/SiteHeader/index.d.ts +1 -0
- package/dist/components/SiteHeader/index.js +8 -0
- package/dist/components/SiteNavigation/index.d.ts +1 -0
- package/dist/components/SiteNavigation/index.js +8 -0
- package/dist/components/SiteSearch/SiteSearch.jsx +1 -1
- package/dist/components/SiteSearch/index.d.ts +1 -0
- package/dist/components/SiteSearch/index.js +8 -0
- package/dist/components/SkipLinks/index.d.ts +1 -0
- package/dist/components/SkipLinks/index.js +8 -0
- package/dist/components/SummaryCard/index.d.ts +1 -0
- package/dist/components/SummaryCard/index.js +8 -0
- package/dist/components/SummaryList/index.d.ts +1 -0
- package/dist/components/SummaryList/index.js +8 -0
- package/dist/components/Table/index.d.ts +1 -0
- package/dist/components/Table/index.js +8 -0
- package/dist/components/Tabs/index.d.ts +1 -0
- package/dist/components/Tabs/index.js +8 -0
- package/dist/components/Tag/index.d.ts +1 -0
- package/dist/components/Tag/index.js +8 -0
- package/dist/components/TaskList/TaskList.jsx +1 -1
- package/dist/components/TaskList/index.d.ts +1 -0
- package/dist/components/TaskList/index.js +8 -0
- package/dist/components/TextInput/TextInput.jsx +2 -2
- package/dist/components/TextInput/index.d.ts +1 -0
- package/dist/components/TextInput/index.js +8 -0
- package/dist/components/Textarea/Textarea.jsx +1 -1
- package/dist/components/Textarea/index.d.ts +1 -0
- package/dist/components/Textarea/index.js +8 -0
- package/dist/components/WarningText/index.d.ts +1 -0
- package/dist/components/WarningText/index.js +8 -0
- package/dist/components/index.d.ts +46 -0
- package/dist/components/index.js +101 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.js +8 -0
- package/dist/hooks/useTracking/index.d.ts +1 -0
- package/dist/hooks/useTracking/index.js +8 -0
- package/dist/hooks/useTracking/useTracking.d.ts +1 -0
- package/dist/hooks/useTracking/useTracking.js +21 -0
- package/dist/images/index.d.ts +2 -0
- package/dist/images/index.js +38 -0
- package/eslint.config.mjs +32 -0
- package/package.json +29 -22
- package/src/common/{AbstractNotificationBanner.test.tsx → AbstractNotificationBanner/AbstractNotificationBanner.test.tsx} +1 -1
- package/src/common/{AbstractNotificationBanner.tsx → AbstractNotificationBanner/AbstractNotificationBanner.tsx} +7 -6
- package/src/common/AbstractNotificationBanner/index.ts +1 -0
- package/src/common/AbstractNotificationBanner/types.ts +15 -0
- package/src/common/{ActionLink.tsx → ActionLink/ActionLink.tsx} +3 -1
- package/src/common/ActionLink/index.ts +1 -0
- package/src/common/ActionLink/types.ts +8 -0
- package/src/common/ConditionalWrapper/ConditionalWrapper.tsx +17 -0
- package/src/common/ConditionalWrapper/index.ts +1 -0
- package/src/common/ConditionalWrapper/types.ts +4 -0
- package/src/common/{FileIcon.tsx → FileIcon/FileIcon.tsx} +3 -2
- package/src/common/FileIcon/index.ts +1 -0
- package/src/common/FileIcon/types.ts +7 -0
- package/src/common/{HintText.test.tsx → HintText/HintText.test.tsx} +3 -15
- package/src/common/{HintText.tsx → HintText/HintText.tsx} +4 -4
- package/src/common/HintText/index.ts +1 -0
- package/src/common/HintText/types.ts +4 -0
- package/src/common/{Icon.tsx → Icon/Icon.tsx} +3 -2
- package/src/common/Icon/index.ts +1 -0
- package/src/common/Icon/types.ts +9 -0
- package/src/common/{ScreenReaderText.tsx → ScreenReaderText/ScreenReaderText.tsx} +1 -1
- package/src/common/ScreenReaderText/index.ts +1 -0
- package/src/common/{WrapperTag.tsx → WrapperTag/WrapperTag.tsx} +5 -3
- package/src/common/WrapperTag/index.ts +1 -0
- package/src/common/WrapperTag/types.ts +3 -0
- package/src/common/index.ts +8 -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.tsx +5 -4
- package/src/components/Accordion/index.ts +1 -0
- package/src/components/Accordion/types.ts +13 -0
- package/src/components/AspectBox/AspectBox.stories.tsx +1 -2
- package/src/components/AspectBox/AspectBox.tsx +5 -4
- package/src/components/AspectBox/index.ts +1 -0
- package/src/components/AspectBox/types.ts +3 -0
- package/src/components/BackToTop/BackToTop.tsx +3 -2
- package/src/components/BackToTop/index.ts +1 -0
- package/src/components/BackToTop/types.ts +3 -0
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +4 -2
- package/src/components/Breadcrumbs/index.ts +1 -0
- package/src/components/Breadcrumbs/types.ts +6 -0
- package/src/components/Button/Button.tsx +2 -1
- package/src/components/{ButtonGroup → Button}/ButtonGroup.stories.tsx +1 -1
- package/src/components/{ButtonGroup → Button}/ButtonGroup.tsx +3 -1
- package/src/components/Button/index.ts +2 -0
- package/src/components/Button/types.ts +21 -0
- package/src/components/CategoryItem/CategoryItem.tsx +7 -4
- package/src/components/CategoryItem/index.ts +1 -0
- package/src/components/CategoryItem/types.ts +10 -0
- package/src/components/CategoryList/CategoryList.stories.tsx +1 -1
- package/src/components/CategoryList/CategoryList.test.tsx +1 -1
- package/src/components/CategoryList/CategoryList.tsx +4 -2
- package/src/components/CategoryList/index.ts +1 -0
- package/src/components/CategoryList/types.ts +5 -0
- package/src/components/Checkbox/Checkbox.stories.tsx +3 -3
- package/src/components/Checkbox/Checkbox.tsx +5 -4
- package/src/components/Checkbox/CheckboxGroup.tsx +3 -3
- package/src/components/Checkbox/index.ts +2 -0
- package/src/components/Checkbox/types.ts +9 -0
- package/src/components/ConfirmationMessage/ConfirmationMessage.tsx +2 -1
- package/src/components/ConfirmationMessage/index.ts +1 -0
- package/src/components/ConfirmationMessage/types.ts +7 -0
- package/src/components/ContentsNav/ContentsNav.stories.tsx +5 -1
- package/src/components/ContentsNav/ContentsNav.tsx +3 -2
- package/src/components/ContentsNav/index.ts +1 -0
- package/src/components/ContentsNav/types.ts +11 -0
- package/src/components/CookieBanner/CookieBanner.Buttons.stories.tsx +4 -4
- package/src/components/CookieBanner/CookieBanner.stories.tsx +7 -7
- package/src/components/CookieBanner/CookieBanner.test.tsx +6 -0
- package/src/components/CookieBanner/CookieBanner.tsx +13 -3
- package/src/components/CookieBanner/index.ts +1 -0
- package/src/components/DatePicker/DatePicker.test.tsx +0 -5
- package/src/components/DatePicker/DatePicker.tsx +5 -4
- package/src/components/DatePicker/index.ts +1 -0
- package/src/components/DatePicker/types.ts +20 -0
- package/src/components/Details/Details.stories.tsx +1 -1
- package/src/components/Details/Details.tsx +3 -1
- package/src/components/Details/index.ts +1 -0
- package/src/components/Details/types.ts +4 -0
- package/src/components/ErrorMessage/ErrorMessage.tsx +3 -1
- package/src/components/ErrorMessage/index.ts +1 -0
- package/src/components/ErrorMessage/types.ts +3 -0
- package/src/components/ErrorSummary/ErrorSummary.test.tsx +1 -1
- package/src/components/ErrorSummary/ErrorSummary.tsx +3 -2
- package/src/components/ErrorSummary/index.ts +1 -0
- package/src/components/ErrorSummary/types.ts +11 -0
- package/src/components/FileDownload/FileDownload.tsx +2 -1
- package/src/components/FileDownload/index.ts +1 -0
- package/src/components/FileDownload/types.ts +11 -0
- package/src/components/HideThisPage/HideThisPage.tsx +3 -2
- package/src/components/HideThisPage/index.ts +1 -0
- package/src/components/HideThisPage/types.ts +3 -0
- package/src/components/InsetText/InsetText.tsx +1 -1
- package/src/components/InsetText/index.ts +1 -0
- package/src/components/NotificationBanner/NotificationBanner.stories.tsx +2 -2
- package/src/components/NotificationBanner/NotificationBanner.tsx +5 -4
- package/src/components/NotificationBanner/index.ts +1 -0
- package/src/components/NotificationPanel/NotificationPanel.tsx +2 -1
- package/src/components/NotificationPanel/index.ts +1 -0
- package/src/components/NotificationPanel/types.ts +7 -0
- package/src/components/PageHeader/PageHeader.stories.tsx +1 -1
- package/src/components/PageHeader/PageHeader.tsx +3 -1
- package/src/components/PageHeader/index.ts +1 -0
- package/src/components/PageHeader/types.ts +5 -0
- package/src/components/PageMetadata/PageMetadata.stories.tsx +1 -1
- package/src/components/PageMetadata/PageMetadata.tsx +5 -3
- package/src/components/PageMetadata/index.ts +1 -0
- package/src/components/PageMetadata/types.ts +7 -0
- package/src/components/Pagination/Pagination.tsx +5 -3
- package/src/components/Pagination/index.ts +1 -0
- package/src/components/Pagination/types.ts +20 -0
- package/src/components/PhaseBanner/PhaseBanner.stories.tsx +1 -4
- package/src/components/PhaseBanner/PhaseBanner.tsx +2 -1
- package/src/components/PhaseBanner/index.ts +1 -0
- package/src/components/PhaseBanner/types.ts +3 -0
- package/src/components/Question/Question.stories.tsx +2 -3
- package/src/components/Question/Question.tsx +5 -4
- package/src/components/Question/index.ts +1 -0
- package/src/components/Question/types.ts +9 -0
- package/src/components/RadioButton/RadioButton.tsx +5 -4
- package/src/components/RadioButton/RadioGroup.stories.tsx +1 -2
- package/src/components/RadioButton/RadioGroup.test.tsx +1 -2
- package/src/components/RadioButton/RadioGroup.tsx +2 -1
- package/src/components/RadioButton/index.ts +2 -0
- 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 +1 -1
- package/src/components/SearchFacets/SearchFacets.tsx +7 -6
- package/src/components/SearchFacets/index.ts +1 -0
- package/src/components/SearchFacets/types.ts +14 -0
- package/src/components/SearchFilters/SearchFilters.Panel.stories.tsx +20 -9
- package/src/components/SearchFilters/SearchFilters.stories.tsx +3 -3
- package/src/components/SearchFilters/SearchFilters.test.tsx +1 -1
- package/src/components/SearchFilters/SearchFilters.tsx +8 -7
- package/src/components/SearchFilters/index.ts +1 -0
- package/src/components/SearchFilters/types.ts +14 -0
- package/src/components/SearchResult/SearchResult.stories.tsx +9 -10
- package/src/components/SearchResult/SearchResult.tsx +11 -10
- package/src/components/SearchResult/index.ts +1 -0
- package/src/components/SearchResult/types.ts +13 -0
- package/src/components/SearchSort/SearchSort.stories.tsx +2 -1
- package/src/components/SearchSort/SearchSort.tsx +4 -3
- package/src/components/SearchSort/index.ts +1 -0
- package/src/components/SearchSort/types.ts +7 -0
- package/src/components/Select/Select.tsx +6 -5
- package/src/components/Select/index.ts +1 -0
- package/src/components/Select/types.ts +7 -0
- package/src/components/SequentialNavigation/SequentialNavigation.tsx +6 -4
- package/src/components/SequentialNavigation/index.ts +1 -0
- package/src/components/SequentialNavigation/types.ts +12 -0
- package/src/components/SideNavigation/SideNavigation.tsx +5 -4
- package/src/components/SideNavigation/index.ts +1 -0
- package/src/components/SideNavigation/types.ts +16 -0
- package/src/components/SiteFooter/SiteFooter.tsx +7 -6
- package/src/components/SiteFooter/index.ts +1 -0
- package/src/components/SiteFooter/types.ts +20 -0
- package/src/components/SiteHeader/SiteHeader.stories.tsx +7 -6
- package/src/components/SiteHeader/SiteHeader.test.tsx +3 -3
- package/src/components/SiteHeader/SiteHeader.tsx +11 -10
- package/src/components/SiteHeader/index.ts +1 -0
- package/src/components/SiteHeader/types.ts +22 -0
- package/src/components/SiteNavigation/SiteNavigation.tsx +4 -2
- package/src/components/SiteNavigation/index.ts +1 -0
- package/src/components/SiteNavigation/types.ts +11 -0
- package/src/components/SiteSearch/SiteSearch.stories.tsx +4 -2
- package/src/components/SiteSearch/SiteSearch.tsx +7 -6
- package/src/components/SiteSearch/index.ts +1 -0
- package/src/components/SiteSearch/types.ts +13 -0
- package/src/components/SkipLinks/SkipLinks.stories.tsx +3 -3
- package/src/components/SkipLinks/SkipLinks.tsx +4 -4
- package/src/components/SkipLinks/index.ts +1 -0
- package/src/components/SkipLinks/types.ts +9 -0
- package/src/components/SummaryCard/SummaryCard.stories.tsx +1 -1
- package/src/components/SummaryCard/SummaryCard.test.tsx +2 -13
- package/src/components/SummaryCard/SummaryCard.tsx +6 -4
- package/src/components/SummaryCard/index.ts +1 -0
- 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 +8 -6
- package/src/components/SummaryList/index.ts +1 -0
- package/src/components/SummaryList/types.ts +7 -0
- package/src/components/Table/Table.tsx +3 -2
- package/src/components/Table/index.ts +1 -0
- 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.tsx +7 -5
- package/src/components/Tabs/index.ts +1 -0
- package/src/components/Tabs/types.ts +19 -0
- package/src/components/Tag/Tag.tsx +3 -1
- package/src/components/Tag/index.ts +1 -0
- 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 +13 -10
- package/src/components/TaskList/index.ts +1 -0
- package/src/components/TaskList/types.ts +20 -0
- package/src/components/TextInput/TextInput.tsx +8 -8
- package/src/components/TextInput/index.ts +1 -0
- package/src/components/TextInput/types.ts +12 -0
- package/src/components/Textarea/Textarea.tsx +7 -6
- package/src/components/Textarea/index.ts +1 -0
- package/src/components/WarningText/WarningText.tsx +1 -1
- package/src/components/WarningText/index.ts +1 -0
- package/src/components/index.ts +46 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useTracking/index.ts +1 -0
- package/src/hooks/{useTracking.test.tsx → useTracking/useTracking.test.tsx} +5 -7
- package/src/hooks/{useTracking.ts → useTracking/useTracking.ts} +1 -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/images/index.ts +2 -0
- package/src/index.ts +4 -0
- package/src/shared-types.ts +40 -0
- package/vite.config.ts +4 -2
- 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/tsconfig.tsbuildinfo +0 -1
- package/src/common/ConditionalWrapper.tsx +0 -9
- /package/src/common/{ActionLink.test.tsx → ActionLink/ActionLink.test.tsx} +0 -0
- /package/src/common/{ConditionalWrapper.test.tsx → ConditionalWrapper/ConditionalWrapper.test.tsx} +0 -0
- /package/src/common/{FileIcon.test.tsx → FileIcon/FileIcon.test.tsx} +0 -0
- /package/src/common/{Icon.test.tsx → Icon/Icon.test.tsx} +0 -0
- /package/src/common/{ScreenReaderText.test.tsx → ScreenReaderText/ScreenReaderText.test.tsx} +0 -0
- /package/src/common/{WrapperTag.test.tsx → WrapperTag/WrapperTag.test.tsx} +0 -0
- /package/src/components/{ButtonGroup → Button}/ButtonGroup.test.tsx +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { test, expect } from 'vitest';
|
|
2
2
|
import { render, screen, within } from '@testing-library/react';
|
|
3
3
|
import SiteHeader from './SiteHeader';
|
|
4
|
-
import SiteNavigation from '../SiteNavigation
|
|
5
|
-
import SiteSearch from '../SiteSearch
|
|
6
|
-
import PhaseBanner from '../PhaseBanner
|
|
4
|
+
import SiteNavigation from '../SiteNavigation';
|
|
5
|
+
import SiteSearch from '../SiteSearch';
|
|
6
|
+
import PhaseBanner from '../PhaseBanner';
|
|
7
7
|
|
|
8
8
|
test('site header renders correctly (maximal, testing markup structure)', () => {
|
|
9
9
|
render(
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import React, { Children, useEffect, useRef } from 'react';
|
|
2
2
|
import Icon from '../../common/Icon';
|
|
3
|
-
import SiteNavigation from '../SiteNavigation
|
|
4
|
-
|
|
5
|
-
// @ts-ignore
|
|
3
|
+
import SiteNavigation from '../SiteNavigation';
|
|
4
|
+
// @ts-expect-error no types from core SGDS
|
|
6
5
|
import DSMobileMenu from '@scottish-government/design-system/src/components/site-navigation/site-navigation';
|
|
6
|
+
import { SiteHeaderBrandProps, SiteHeaderProps } from './types';
|
|
7
|
+
import { SiteNavigationProps } from '../SiteNavigation/types';
|
|
7
8
|
|
|
8
9
|
const Brand = ({
|
|
9
10
|
children,
|
|
10
11
|
homeUrl = '/',
|
|
11
12
|
linkComponent,
|
|
12
13
|
siteTitle
|
|
13
|
-
}:
|
|
14
|
+
}: SiteHeaderBrandProps) => {
|
|
14
15
|
function processChildren(children: React.ReactNode) {
|
|
15
16
|
const image = React.cloneElement(children as React.ReactElement<HTMLImageElement>, { className: 'ds_site-branding__logo-image' });
|
|
16
17
|
|
|
@@ -36,26 +37,26 @@ const Brand = ({
|
|
|
36
37
|
|
|
37
38
|
const Navigation = ({
|
|
38
39
|
children
|
|
39
|
-
}:
|
|
40
|
+
}: React.AllHTMLAttributes<HTMLElement>) => {
|
|
40
41
|
return children;
|
|
41
42
|
}
|
|
42
43
|
|
|
43
44
|
const Phase = ({
|
|
44
45
|
children
|
|
45
|
-
}:
|
|
46
|
+
}: React.AllHTMLAttributes<HTMLElement>) => {
|
|
46
47
|
return children;
|
|
47
48
|
}
|
|
48
49
|
|
|
49
50
|
const Search = ({
|
|
50
51
|
children
|
|
51
|
-
}:
|
|
52
|
+
}: React.AllHTMLAttributes<HTMLElement>) => {
|
|
52
53
|
return children;
|
|
53
54
|
}
|
|
54
55
|
|
|
55
56
|
const SiteHeader = ({
|
|
56
57
|
children,
|
|
57
58
|
...props
|
|
58
|
-
}:
|
|
59
|
+
}: SiteHeaderProps) => {
|
|
59
60
|
const mobileMenuRef = useRef(null);
|
|
60
61
|
|
|
61
62
|
let branding: React.ReactNode;
|
|
@@ -66,14 +67,14 @@ const SiteHeader = ({
|
|
|
66
67
|
|
|
67
68
|
// assign to slots
|
|
68
69
|
Children.forEach(children, (child: React.ReactNode) => {
|
|
69
|
-
const thisChild = child as React.
|
|
70
|
+
const thisChild = child as React.JSX.Element;
|
|
70
71
|
if (thisChild && thisChild.type === Brand) {
|
|
71
72
|
branding = thisChild;
|
|
72
73
|
} else if (thisChild && thisChild.type === Navigation) {
|
|
73
74
|
navigation = thisChild;
|
|
74
75
|
|
|
75
76
|
if (thisChild.props.children.type === SiteNavigation) {
|
|
76
|
-
mobileNavigation = React.cloneElement(thisChild.props.children as React.ReactElement<
|
|
77
|
+
mobileNavigation = React.cloneElement(thisChild.props.children as React.ReactElement<SiteNavigationProps>, { className: 'ds_site-navigation--mobile', id: 'mobile-navigation', ref: mobileMenuRef});
|
|
77
78
|
}
|
|
78
79
|
} else if (thisChild && thisChild.type === Phase) {
|
|
79
80
|
phase = thisChild;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './SiteHeader';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { LinkComponent } from "../../shared-types";
|
|
2
|
+
import { PhaseBannerProps } from "../PhaseBanner/types";
|
|
3
|
+
import { SiteNavigationItemProps } from "../SiteNavigation/types";
|
|
4
|
+
import { SiteSearchProps } from "../SiteSearch/types";
|
|
5
|
+
|
|
6
|
+
export interface SiteHeaderBrandProps extends React.AllHTMLAttributes<HTMLElement> {
|
|
7
|
+
homeUrl: string;
|
|
8
|
+
linkComponent?: LinkComponent;
|
|
9
|
+
siteTitle?: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface SiteHeaderProps extends React.AllHTMLAttributes<HTMLHeadingElement> {
|
|
13
|
+
logo?: {
|
|
14
|
+
alt?: string;
|
|
15
|
+
href?: string;
|
|
16
|
+
src?: string;
|
|
17
|
+
};
|
|
18
|
+
navigationItems?: SiteNavigationItemProps[];
|
|
19
|
+
phaseBanner?: PhaseBannerProps;
|
|
20
|
+
siteSearch?: SiteSearchProps;
|
|
21
|
+
siteTitle?: string;
|
|
22
|
+
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { SiteNavigationItemProps, SiteNavigationProps } from "./types";
|
|
2
|
+
|
|
1
3
|
const Item = ({
|
|
2
4
|
children,
|
|
3
5
|
isCurrent = false,
|
|
4
6
|
href,
|
|
5
7
|
linkComponent
|
|
6
|
-
}:
|
|
8
|
+
}: SiteNavigationItemProps) => {
|
|
7
9
|
const classNames = ['ds_site-navigation__link'];
|
|
8
10
|
let ariaCurrent: React.AriaAttributes["aria-current"];
|
|
9
11
|
|
|
@@ -33,7 +35,7 @@ const SiteNavigation = ({
|
|
|
33
35
|
children,
|
|
34
36
|
className,
|
|
35
37
|
...props
|
|
36
|
-
}:
|
|
38
|
+
}: SiteNavigationProps) => {
|
|
37
39
|
return (
|
|
38
40
|
<nav
|
|
39
41
|
className={[
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './SiteNavigation';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { LinkComponent } from '../../shared-types';
|
|
2
|
+
|
|
3
|
+
export interface SiteNavigationItemProps extends React.AllHTMLAttributes<HTMLLIElement> {
|
|
4
|
+
isCurrent?: boolean;
|
|
5
|
+
href: string;
|
|
6
|
+
linkComponent?: LinkComponent;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface SiteNavigationProps extends React.AllHTMLAttributes<HTMLElement> {
|
|
10
|
+
ref?: React.RefObject<null>;
|
|
11
|
+
}
|
|
@@ -11,8 +11,10 @@ type AutocompleteResponseObject = {
|
|
|
11
11
|
category: string
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
type SuggestionObject = { response: string };
|
|
15
|
+
|
|
16
|
+
const suggestionMappingFunction = function (suggestionObj: SuggestionObject) {
|
|
17
|
+
const responseObj = JSON.parse(suggestionObj.response).map((item: string) => ({
|
|
16
18
|
key: '',
|
|
17
19
|
displayText: item,
|
|
18
20
|
weight: '',
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { useEffect, useRef } from 'react';
|
|
2
|
-
// @ts-
|
|
2
|
+
// @ts-expect-error no types from core SGDS
|
|
3
3
|
import DSAutocomplete from '@scottish-government/design-system/src/components/autocomplete/autocomplete';
|
|
4
|
-
import Button from '../Button
|
|
4
|
+
import Button from '../Button';
|
|
5
|
+
import { SiteSearchProps, SuggestionMappingFunctionProps } from './types';
|
|
5
6
|
|
|
6
7
|
const SiteSearch = function ({
|
|
7
8
|
action = '/search',
|
|
@@ -14,14 +15,14 @@ const SiteSearch = function ({
|
|
|
14
15
|
name = 'q',
|
|
15
16
|
placeholder = 'Search',
|
|
16
17
|
...props
|
|
17
|
-
}:
|
|
18
|
+
}: SiteSearchProps) {
|
|
18
19
|
const ref = useRef(null);
|
|
19
20
|
const hasAutocomplete = !!autocompleteEndpoint;
|
|
20
|
-
|
|
21
|
+
const autocompleteId = hasAutocomplete ? id + '-autocomplete' : '';
|
|
21
22
|
|
|
22
23
|
type AutoCompleteOptions = {
|
|
23
24
|
minLength?: number,
|
|
24
|
-
suggestionMappingFunction?:
|
|
25
|
+
suggestionMappingFunction?: SuggestionMappingFunctionProps,
|
|
25
26
|
throttleDelay?: number
|
|
26
27
|
}
|
|
27
28
|
|
|
@@ -48,7 +49,7 @@ const SiteSearch = function ({
|
|
|
48
49
|
return (
|
|
49
50
|
<div
|
|
50
51
|
className={[
|
|
51
|
-
'ds_site-search',
|
|
52
|
+
'ds_site-search',
|
|
52
53
|
className,
|
|
53
54
|
hasAutocomplete ? 'ds_autocomplete' : undefined
|
|
54
55
|
].join(' ')}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './SiteSearch';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type FormMethods = 'GET' | 'POST';
|
|
2
|
+
export type SuggestionMappingFunctionProps = (suggestionObj: {response: string}) => [];
|
|
3
|
+
|
|
4
|
+
export interface SiteSearchProps extends React.AllHTMLAttributes<HTMLInputElement> {
|
|
5
|
+
action?: string;
|
|
6
|
+
autocompleteEndpoint?: string;
|
|
7
|
+
autocompleteSuggestionMappingFunction?: SuggestionMappingFunctionProps;
|
|
8
|
+
id: string;
|
|
9
|
+
method?: FormMethods;
|
|
10
|
+
minLength?: number;
|
|
11
|
+
name?: string;
|
|
12
|
+
placeholder?: string;
|
|
13
|
+
}
|
|
@@ -8,16 +8,16 @@ const meta = {
|
|
|
8
8
|
component: SkipLinks,
|
|
9
9
|
argTypes: {
|
|
10
10
|
mainContentId: {
|
|
11
|
-
description: 'The id attribute of the
|
|
11
|
+
description: 'The id attribute of the \'main content\' element to link to',
|
|
12
12
|
type: 'string'
|
|
13
13
|
},
|
|
14
14
|
mainLinkText: {
|
|
15
|
-
description: 'The text to use for the
|
|
15
|
+
description: 'The text to use for the \'main content\' link',
|
|
16
16
|
type: 'string'
|
|
17
17
|
},
|
|
18
18
|
isStatic: {
|
|
19
19
|
control: 'boolean',
|
|
20
|
-
description: 'Use the
|
|
20
|
+
description: 'Use the \'static\' display variant'
|
|
21
21
|
},
|
|
22
22
|
children: argTypes.children()
|
|
23
23
|
},
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import React, { useEffect } from 'react';
|
|
2
|
-
|
|
3
|
-
// @ts-ignore
|
|
2
|
+
// @ts-expect-error no types from core SGDS
|
|
4
3
|
import dsSkipLinks from '@scottish-government/design-system/src/components/skip-links/skip-links';
|
|
4
|
+
import { SkipLinksLinkProps, SkipLinksProps } from './types';
|
|
5
5
|
|
|
6
6
|
const Link = ({
|
|
7
7
|
children,
|
|
8
8
|
fragmentId
|
|
9
|
-
}:
|
|
9
|
+
}: SkipLinksLinkProps) => {
|
|
10
10
|
return (
|
|
11
11
|
<li
|
|
12
12
|
className="ds_skip-links__item"
|
|
@@ -22,7 +22,7 @@ const SkipLinks = ({
|
|
|
22
22
|
mainLinkText = 'Skip to main content',
|
|
23
23
|
isStatic,
|
|
24
24
|
...props
|
|
25
|
-
}:
|
|
25
|
+
}: SkipLinksProps) => {
|
|
26
26
|
|
|
27
27
|
useEffect(() => {
|
|
28
28
|
dsSkipLinks.init();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './SkipLinks';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface SkipLinksLinkProps extends React.AllHTMLAttributes<HTMLLIElement> {
|
|
2
|
+
fragmentId: string;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export interface SkipLinksProps extends React.AllHTMLAttributes<HTMLDivElement> {
|
|
6
|
+
mainContentId?: string;
|
|
7
|
+
mainLinkText?: string;
|
|
8
|
+
isStatic?: boolean;
|
|
9
|
+
}
|
|
@@ -2,7 +2,7 @@ import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
|
2
2
|
import argTypes from '../../../.storybook/sgdsArgTypes';
|
|
3
3
|
|
|
4
4
|
import SummaryCard from './SummaryCard';
|
|
5
|
-
import SummaryList from '../SummaryList
|
|
5
|
+
import SummaryList from '../SummaryList';
|
|
6
6
|
|
|
7
7
|
const meta = {
|
|
8
8
|
title: 'Components/SummaryCard',
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { test, expect, vi } from 'vitest';
|
|
2
|
-
import { render, screen, within
|
|
2
|
+
import { render, screen, within } from '@testing-library/react';
|
|
3
3
|
import SummaryCard from './SummaryCard';
|
|
4
|
-
import SummaryList from '../SummaryList
|
|
4
|
+
import SummaryList from '../SummaryList';
|
|
5
5
|
|
|
6
6
|
const ONCLICK_FUNCTION = vi.fn();
|
|
7
7
|
|
|
@@ -16,17 +16,6 @@ const ACTIONS = [
|
|
|
16
16
|
}
|
|
17
17
|
];
|
|
18
18
|
|
|
19
|
-
const ITEMS = [
|
|
20
|
-
{
|
|
21
|
-
title: 'Phone number',
|
|
22
|
-
value: '0123 456 7890'
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
title: 'Address',
|
|
26
|
-
value: `Victoria Quay\nEdinburgh\nEH6 6QQ`
|
|
27
|
-
}
|
|
28
|
-
];
|
|
29
|
-
|
|
30
19
|
const TITLE_TEXT = 'Joe Bloggs';
|
|
31
20
|
|
|
32
21
|
test('summary card renders correctly', () => {
|
|
@@ -3,6 +3,8 @@ import React, { Children, useId } from 'react';
|
|
|
3
3
|
import ActionLink from '../../common/ActionLink';
|
|
4
4
|
import ConditionalWrapper from '../../common/ConditionalWrapper';
|
|
5
5
|
import WrapperTag from "../../common/WrapperTag";
|
|
6
|
+
import { SummaryCardProps } from './types';
|
|
7
|
+
import { ActionLinkProps } from '../../common/ActionLink/types';
|
|
6
8
|
|
|
7
9
|
const SummaryCard = ({
|
|
8
10
|
children,
|
|
@@ -10,14 +12,14 @@ const SummaryCard = ({
|
|
|
10
12
|
headingLevel = 'h3',
|
|
11
13
|
title,
|
|
12
14
|
...props
|
|
13
|
-
}:
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
}: SummaryCardProps) => {
|
|
16
|
+
const actions: React.ReactElement[] = [];
|
|
17
|
+
const remainingChildren: React.ReactElement[] = [];
|
|
16
18
|
|
|
17
19
|
const describedById = useId();
|
|
18
20
|
|
|
19
21
|
Children.forEach(children, (child: React.ReactNode) => {
|
|
20
|
-
const thisChild = child as React.ReactElement<
|
|
22
|
+
const thisChild = child as React.ReactElement<ActionLinkProps>;
|
|
21
23
|
if (thisChild && thisChild.type === ActionLink) {
|
|
22
24
|
actions.push(React.cloneElement(thisChild, { describedby: describedById }));
|
|
23
25
|
} else {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './SummaryCard';
|
|
@@ -14,7 +14,7 @@ const meta = {
|
|
|
14
14
|
)
|
|
15
15
|
],
|
|
16
16
|
argTypes: {
|
|
17
|
-
|
|
17
|
+
title: {
|
|
18
18
|
description: 'Title of the summary list item.',
|
|
19
19
|
type: {
|
|
20
20
|
name: 'string',
|
|
@@ -26,16 +26,16 @@ const meta = {
|
|
|
26
26
|
args: {
|
|
27
27
|
title: 'Contact details',
|
|
28
28
|
children: [
|
|
29
|
-
<SummaryList.Value name="Email">
|
|
29
|
+
<SummaryList.Value name="Email" key="1">
|
|
30
30
|
email@gov.scot
|
|
31
31
|
</SummaryList.Value>,
|
|
32
|
-
<SummaryList.Value name="Telephone">
|
|
32
|
+
<SummaryList.Value name="Telephone" key="2">
|
|
33
33
|
0123 456 7890
|
|
34
34
|
</SummaryList.Value>,
|
|
35
|
-
<SummaryList.Action href="foo">
|
|
35
|
+
<SummaryList.Action href="foo" key="3">
|
|
36
36
|
Change
|
|
37
37
|
</SummaryList.Action>,
|
|
38
|
-
<SummaryList.Action onclick={function w(){}}>
|
|
38
|
+
<SummaryList.Action onclick={function w(){}} key="4">
|
|
39
39
|
Delete
|
|
40
40
|
</SummaryList.Action>
|
|
41
41
|
]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { test, expect, vi } from 'vitest';
|
|
2
|
-
import { within, render, screen
|
|
2
|
+
import { within, render, screen } from '@testing-library/react';
|
|
3
3
|
import SummaryList from './SummaryList';
|
|
4
4
|
|
|
5
5
|
const ONCLICK_FUNCTION = vi.fn();
|
|
@@ -7,11 +7,6 @@ const TITLE = 'Name';
|
|
|
7
7
|
const VALUE_1 = 'Jane Smith';
|
|
8
8
|
const VALUE_2 = 'Tony Brown';
|
|
9
9
|
|
|
10
|
-
const ACTION_HREF = "#foo"
|
|
11
|
-
const ACTION_ONCLICK = ONCLICK_FUNCTION;
|
|
12
|
-
const ACTION_TEXT = 'Name';
|
|
13
|
-
const DESCRIBEDBY_ID = 'q1-name';
|
|
14
|
-
|
|
15
10
|
test('summary list renders correctly', () => {
|
|
16
11
|
render(
|
|
17
12
|
<SummaryList data-testid="summarylist">
|
|
@@ -2,18 +2,20 @@ import React, { Children, useId } from 'react';
|
|
|
2
2
|
|
|
3
3
|
import ActionLink from '../../common/ActionLink';
|
|
4
4
|
import ConditionalWrapper from '../../common/ConditionalWrapper';
|
|
5
|
+
import { SummaryListItemProps, SummaryListProps } from './types';
|
|
6
|
+
import { ActionLinkProps } from '@/src/common/ActionLink/types';
|
|
5
7
|
|
|
6
8
|
const Item = ({
|
|
7
9
|
children,
|
|
8
10
|
title
|
|
9
|
-
}:
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
}: SummaryListItemProps) => {
|
|
12
|
+
const values: React.ReactElement[] = [];
|
|
13
|
+
const actions: React.ReactElement[] = [];
|
|
12
14
|
|
|
13
15
|
const describedById = useId();
|
|
14
16
|
|
|
15
17
|
Children.forEach(children, (child: React.ReactNode) => {
|
|
16
|
-
const thisChild = child as React.ReactElement<
|
|
18
|
+
const thisChild = child as React.ReactElement<ActionLinkProps>;
|
|
17
19
|
if (thisChild && thisChild.type === Value) {
|
|
18
20
|
values.push(thisChild);
|
|
19
21
|
} else if (thisChild && thisChild.type === ActionLink) {
|
|
@@ -64,7 +66,7 @@ const Item = ({
|
|
|
64
66
|
|
|
65
67
|
const Value = ({
|
|
66
68
|
children
|
|
67
|
-
}:
|
|
69
|
+
}: React.AllHTMLAttributes<HTMLElement>) => {
|
|
68
70
|
return (
|
|
69
71
|
<q className="ds_summary-list__answer">{children}</q>
|
|
70
72
|
);
|
|
@@ -75,7 +77,7 @@ const SummaryList = ({
|
|
|
75
77
|
className,
|
|
76
78
|
isBorderless,
|
|
77
79
|
...props
|
|
78
|
-
}:
|
|
80
|
+
}: SummaryListProps) => {
|
|
79
81
|
return (
|
|
80
82
|
<ol
|
|
81
83
|
className={[
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './SummaryList';
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { useEffect, useRef } from 'react';
|
|
2
|
-
// @ts-
|
|
2
|
+
// @ts-expect-error no types from core SGDS
|
|
3
3
|
import DSTable from '@scottish-government/design-system/src/components/table/table';
|
|
4
|
+
import { TableProps } from './types';
|
|
4
5
|
|
|
5
6
|
const Table = ({
|
|
6
7
|
children,
|
|
7
8
|
className,
|
|
8
9
|
smallscreen,
|
|
9
10
|
...props
|
|
10
|
-
}:
|
|
11
|
+
}: TableProps) => {
|
|
11
12
|
const ref = useRef(null);
|
|
12
13
|
|
|
13
14
|
useEffect(() => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './Table';
|
|
@@ -17,15 +17,15 @@ const meta = {
|
|
|
17
17
|
children: argTypes.children()
|
|
18
18
|
},
|
|
19
19
|
args: {
|
|
20
|
-
baseId: 'my-tabs',
|
|
21
20
|
children: [
|
|
22
|
-
<h3>Search for training courses and funding</h3>,
|
|
23
|
-
<p>A wide range of training courses for your employees are available.</p>,
|
|
24
|
-
<p>Opportunities include distance learning, short courses and vocational training.</p>,
|
|
25
|
-
<p><a href="#">Visit My World of Work to search for training courses</a>.</p>,
|
|
26
|
-
<p>You can also <a href="#">search for training courses, and funding towards training</a>.</p>
|
|
21
|
+
<h3 key="1">Search for training courses and funding</h3>,
|
|
22
|
+
<p key="2">A wide range of training courses for your employees are available.</p>,
|
|
23
|
+
<p key="3">Opportunities include distance learning, short courses and vocational training.</p>,
|
|
24
|
+
<p key="4"><a href="#">Visit My World of Work to search for training courses</a>.</p>,
|
|
25
|
+
<p key="5">You can also <a href="#">search for training courses, and funding towards training</a>.</p>
|
|
27
26
|
],
|
|
28
|
-
tabLabel: 'Courses and funding'
|
|
27
|
+
tabLabel: 'Courses and funding',
|
|
28
|
+
id: 'my-tab'
|
|
29
29
|
}
|
|
30
30
|
} satisfies Meta<typeof Tabs.Item>;
|
|
31
31
|
|
|
@@ -35,14 +35,14 @@ const meta = {
|
|
|
35
35
|
args: {
|
|
36
36
|
baseId: 'my-tabs',
|
|
37
37
|
children: [
|
|
38
|
-
<Tabs.Item key="foo" tabLabel="Courses and funding">
|
|
38
|
+
<Tabs.Item id="foo" key="foo" tabLabel="Courses and funding">
|
|
39
39
|
<h3>Search for training courses and funding</h3>
|
|
40
40
|
<p>A wide range of training courses for your employees are available.</p>
|
|
41
41
|
<p>Opportunities include distance learning, short courses and vocational training.</p>
|
|
42
42
|
<p><a href="#">Visit My World of Work to search for training courses</a>.</p>
|
|
43
43
|
<p>You can also <a href="#">search for training courses, and funding towards training</a>.</p>
|
|
44
44
|
</Tabs.Item>,
|
|
45
|
-
<Tabs.Item key="bar" tabLabel="Choosing apprenticeships">
|
|
45
|
+
<Tabs.Item id="bar" key="bar" tabLabel="Choosing apprenticeships">
|
|
46
46
|
<h3>Choosing an apprenticeship for your business</h3>
|
|
47
47
|
<p>Apprenticeships can help you address skills gaps in your business. The government provides help with the cost of training an apprentice.</p>
|
|
48
48
|
<p>There are 3 different types of apprenticeship:</p>
|
|
@@ -53,7 +53,7 @@ const meta = {
|
|
|
53
53
|
</ul>
|
|
54
54
|
<p>You can find more information on the <a href="#">apprenticeships.scot</a> website.</p>
|
|
55
55
|
</Tabs.Item>,
|
|
56
|
-
<Tabs.Item key="baz" tabLabel="Extra skills support">
|
|
56
|
+
<Tabs.Item id="baz" key="baz" tabLabel="Extra skills support">
|
|
57
57
|
<h3>Extra skills support</h3>
|
|
58
58
|
<p>The <a href="#">Skills for Growth</a> service can offer skills advice to businesses with fewer than 250 employees.</p>
|
|
59
59
|
<p>Businesses of any size can get skills advice by completing a <a href="#">skills support request form</a>.</p>
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import React, { Children, useEffect, useRef, useId } from 'react';
|
|
2
2
|
import WrapperTag from '../../common/WrapperTag';
|
|
3
|
-
// @ts-
|
|
3
|
+
// @ts-expect-error no types from core SGDS
|
|
4
4
|
import DSTabs from '@scottish-government/design-system/src/components/tabs/tabs';
|
|
5
|
+
import { TabListItemProps, TabsItemProps, TabsProps } from './types';
|
|
5
6
|
|
|
6
7
|
const TabItem = ({
|
|
7
8
|
isBorderless,
|
|
@@ -10,7 +11,7 @@ const TabItem = ({
|
|
|
10
11
|
id,
|
|
11
12
|
tabLabel,
|
|
12
13
|
...props
|
|
13
|
-
}:
|
|
14
|
+
}: TabsItemProps) => {
|
|
14
15
|
return (
|
|
15
16
|
<div
|
|
16
17
|
className={[
|
|
@@ -18,6 +19,7 @@ const TabItem = ({
|
|
|
18
19
|
!isBorderless && 'ds_tabs__content--bordered',
|
|
19
20
|
className
|
|
20
21
|
].join(' ')}
|
|
22
|
+
data-label={tabLabel}
|
|
21
23
|
id={id}
|
|
22
24
|
{...props}
|
|
23
25
|
>
|
|
@@ -29,7 +31,7 @@ const TabItem = ({
|
|
|
29
31
|
const TabListItem = ({
|
|
30
32
|
children,
|
|
31
33
|
href
|
|
32
|
-
}:
|
|
34
|
+
}: TabListItemProps) => {
|
|
33
35
|
return (
|
|
34
36
|
<li className="ds_tabs__tab">
|
|
35
37
|
<a className="ds_tabs__tab-link" href={href}>{children}</a>
|
|
@@ -46,7 +48,7 @@ const Tabs = ({
|
|
|
46
48
|
isManual = false,
|
|
47
49
|
title = 'Contents',
|
|
48
50
|
...props
|
|
49
|
-
}:
|
|
51
|
+
}: TabsProps) => {
|
|
50
52
|
const ref = useRef(null);
|
|
51
53
|
|
|
52
54
|
const headingId = `${baseId}-heading`;
|
|
@@ -58,7 +60,7 @@ const Tabs = ({
|
|
|
58
60
|
}, [ref]);
|
|
59
61
|
|
|
60
62
|
const processedItems = Children.map(children, child => {
|
|
61
|
-
const thisChild = child as React.ReactElement<
|
|
63
|
+
const thisChild = child as React.ReactElement<TabsItemProps>;
|
|
62
64
|
|
|
63
65
|
if (thisChild && thisChild.type === TabItem) {
|
|
64
66
|
return React.cloneElement(thisChild, {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './Tabs';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { HeadingLevel } from '../../shared-types';
|
|
2
|
+
|
|
3
|
+
export interface TabsItemProps extends React.AllHTMLAttributes<HTMLElement> {
|
|
4
|
+
isBorderless?: boolean;
|
|
5
|
+
id: string;
|
|
6
|
+
tabLabel: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface TabListItemProps extends React.AllHTMLAttributes<HTMLLIElement> {
|
|
10
|
+
href: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface TabsProps extends React.AllHTMLAttributes<HTMLElement> {
|
|
14
|
+
baseId: string;
|
|
15
|
+
isBorderless?: boolean;
|
|
16
|
+
headingLevel?: HeadingLevel;
|
|
17
|
+
isManual?: boolean;
|
|
18
|
+
title: string;
|
|
19
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './Tag';
|