@scottish-government/designsystem-react 0.7.0 → 0.8.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.
Files changed (203) hide show
  1. package/@types/common/AbstractNotificationBanner.d.ts +2 -2
  2. package/@types/common/ActionLink.d.ts +8 -0
  3. package/@types/common/FileIcon.d.ts +1 -1
  4. package/@types/common/Icon.d.ts +1 -1
  5. package/@types/components/Breadcrumbs.d.ts +2 -5
  6. package/@types/components/Checkbox.d.ts +0 -2
  7. package/@types/components/ConfirmationMessage.d.ts +1 -1
  8. package/@types/components/ContentsNav.d.ts +4 -6
  9. package/@types/components/DatePicker.d.ts +1 -1
  10. package/@types/components/ErrorSummary.d.ts +3 -4
  11. package/@types/components/NotificationPanel.d.ts +1 -1
  12. package/@types/components/Pagination.d.ts +5 -4
  13. package/@types/components/PhaseBanner.d.ts +0 -1
  14. package/@types/components/Question.d.ts +1 -1
  15. package/@types/components/RadioButton.d.ts +0 -1
  16. package/@types/components/Select.d.ts +0 -7
  17. package/@types/components/SequentialNavigation.d.ts +4 -4
  18. package/@types/components/SideNavigation.d.ts +4 -5
  19. package/@types/components/SiteFooter.d.ts +25 -0
  20. package/@types/components/SiteHeader.d.ts +10 -3
  21. package/@types/components/SiteNavigation.d.ts +2 -3
  22. package/@types/components/SkipLinks.d.ts +3 -4
  23. package/@types/components/SummaryCard.d.ts +0 -2
  24. package/@types/components/SummaryList.d.ts +0 -13
  25. package/@types/components/Tabs.d.ts +0 -1
  26. package/@types/components/Tag.d.ts +1 -3
  27. package/@types/components/TaskList.d.ts +1 -0
  28. package/@types/sgds.d.ts +13 -2
  29. package/CHANGELOG.md +63 -1
  30. package/dist/common/AbstractNotificationBanner.jsx +8 -6
  31. package/dist/common/ActionLink.jsx +19 -0
  32. package/dist/common/FileIcon.jsx +2 -7
  33. package/dist/common/Icon.jsx +3 -9
  34. package/dist/components/Accordion/Accordion.jsx +2 -2
  35. package/dist/components/Breadcrumbs/Breadcrumbs.jsx +20 -15
  36. package/dist/components/Checkbox/Checkbox.jsx +2 -30
  37. package/dist/components/{aspect-box/aspect-box.jsx → Checkbox/CheckboxGroup.jsx} +19 -29
  38. package/dist/components/ContentsNav/ContentsNav.jsx +27 -16
  39. package/dist/components/CookieBanner/CookieBanner.jsx +1 -0
  40. package/dist/components/DatePicker/DatePicker.jsx +5 -5
  41. package/dist/components/ErrorSummary/ErrorSummary.jsx +28 -18
  42. package/dist/components/NotificationBanner/NotificationBanner.jsx +2 -2
  43. package/dist/components/Pagination/Pagination.jsx +42 -22
  44. package/dist/components/PhaseBanner/PhaseBanner.jsx +3 -3
  45. package/dist/components/Question/Question.jsx +3 -3
  46. package/dist/components/RadioButton/RadioButton.jsx +3 -17
  47. package/dist/{common/icon.jsx → components/RadioButton/RadioGroup.jsx} +22 -18
  48. package/dist/components/Select/Select.jsx +4 -7
  49. package/dist/components/SequentialNavigation/SequentialNavigation.jsx +31 -18
  50. package/dist/components/SideNavigation/SideNavigation.jsx +17 -16
  51. package/dist/components/SiteFooter/SiteFooter.jsx +104 -0
  52. package/dist/components/SiteHeader/SiteHeader.jsx +113 -32
  53. package/dist/components/SiteNavigation/SiteNavigation.jsx +20 -7
  54. package/dist/components/SkipLinks/SkipLinks.jsx +10 -10
  55. package/dist/components/SummaryCard/SummaryCard.jsx +25 -14
  56. package/dist/components/SummaryList/SummaryList.jsx +65 -47
  57. package/dist/components/Tabs/Tabs.jsx +6 -6
  58. package/dist/components/Tag/Tag.jsx +2 -2
  59. package/dist/components/TaskList/TaskList.jsx +14 -3
  60. package/dist/components/TextInput/TextInput.jsx +3 -3
  61. package/dist/components/Textarea/Textarea.jsx +3 -3
  62. package/dist/tsconfig.tsbuildinfo +1 -1
  63. package/package.json +1 -1
  64. package/src/common/AbstractNotificationBanner.test.tsx +1 -1
  65. package/src/common/AbstractNotificationBanner.tsx +14 -13
  66. package/src/common/ActionLink.test.tsx +80 -0
  67. package/src/common/ActionLink.tsx +27 -0
  68. package/src/common/ConditionalWrapper.tsx +1 -1
  69. package/src/common/FileIcon.tsx +7 -11
  70. package/src/common/HintText.tsx +2 -2
  71. package/src/common/Icon.tsx +13 -17
  72. package/src/common/ScreenReaderText.tsx +2 -2
  73. package/src/common/WrapperTag.tsx +2 -2
  74. package/src/components/Accordion/Accordion.test.tsx +1 -1
  75. package/src/components/Accordion/Accordion.tsx +6 -7
  76. package/src/components/AspectBox/AspectBox.tsx +2 -2
  77. package/src/components/BackToTop/BackToTop.tsx +2 -2
  78. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +79 -47
  79. package/src/components/Breadcrumbs/Breadcrumbs.tsx +31 -31
  80. package/src/components/Button/Button.tsx +2 -2
  81. package/src/components/Checkbox/Checkbox.test.tsx +1 -96
  82. package/src/components/Checkbox/Checkbox.tsx +3 -55
  83. package/src/components/Checkbox/CheckboxGroup.test.tsx +37 -0
  84. package/src/components/Checkbox/CheckboxGroup.tsx +46 -0
  85. package/src/components/ConfirmationMessage/ConfirmationMessage.tsx +2 -2
  86. package/src/components/ContentsNav/ContentsNav.test.tsx +40 -51
  87. package/src/components/ContentsNav/ContentsNav.tsx +32 -25
  88. package/src/components/CookieBanner/CookieBanner.tsx +3 -3
  89. package/src/components/DatePicker/DatePicker.test.tsx +1 -1
  90. package/src/components/DatePicker/DatePicker.tsx +7 -7
  91. package/src/components/Details/Details.tsx +2 -2
  92. package/src/components/ErrorMessage/ErrorMessage.tsx +2 -2
  93. package/src/components/ErrorSummary/ErrorSummary.test.tsx +40 -34
  94. package/src/components/ErrorSummary/ErrorSummary.tsx +40 -32
  95. package/src/components/FileDownload/FileDownload.tsx +2 -2
  96. package/src/components/HideThisPage/HideThisPage.tsx +2 -2
  97. package/src/components/InsetText/InsetText.tsx +2 -2
  98. package/src/components/NotificationBanner/NotificationBanner.tsx +6 -7
  99. package/src/components/NotificationPanel/NotificationPanel.tsx +2 -2
  100. package/src/components/PageHeader/PageHeader.tsx +2 -2
  101. package/src/components/PageMetadata/PageMetadata.tsx +4 -5
  102. package/src/components/Pagination/Pagination.test.tsx +26 -7
  103. package/src/components/Pagination/Pagination.tsx +70 -36
  104. package/src/components/PhaseBanner/PhaseBanner.tsx +4 -5
  105. package/src/components/Question/Question.test.tsx +1 -1
  106. package/src/components/Question/Question.tsx +5 -5
  107. package/src/components/RadioButton/RadioButton.test.tsx +7 -126
  108. package/src/components/RadioButton/RadioButton.tsx +4 -41
  109. package/src/components/RadioButton/RadioGroup.test.tsx +65 -0
  110. package/src/components/RadioButton/RadioGroup.tsx +38 -0
  111. package/src/components/Select/Select.test.tsx +39 -37
  112. package/src/components/Select/Select.tsx +7 -22
  113. package/src/components/SequentialNavigation/SequentialNavigation.test.tsx +32 -21
  114. package/src/components/SequentialNavigation/SequentialNavigation.tsx +52 -30
  115. package/src/components/SideNavigation/SideNavigation.test.tsx +39 -85
  116. package/src/components/SideNavigation/SideNavigation.tsx +27 -29
  117. package/src/components/SiteFooter/SiteFooter.test.tsx +153 -0
  118. package/src/components/SiteFooter/SiteFooter.tsx +107 -0
  119. package/src/components/SiteHeader/SiteHeader.test.tsx +87 -79
  120. package/src/components/SiteHeader/SiteHeader.tsx +103 -40
  121. package/src/components/SiteNavigation/SiteNavigation.test.tsx +42 -23
  122. package/src/components/SiteNavigation/SiteNavigation.tsx +28 -16
  123. package/src/components/SiteSearch/SiteSearch.tsx +2 -2
  124. package/src/components/SkipLinks/SkipLinks.test.tsx +22 -10
  125. package/src/components/SkipLinks/SkipLinks.tsx +16 -15
  126. package/src/components/SummaryCard/SummaryCard.test.tsx +31 -35
  127. package/src/components/SummaryCard/SummaryCard.tsx +39 -28
  128. package/src/components/SummaryList/SummaryList.test.tsx +49 -148
  129. package/src/components/SummaryList/SummaryList.tsx +54 -92
  130. package/src/components/Table/Table.tsx +2 -2
  131. package/src/components/Tabs/Tabs.tsx +14 -15
  132. package/src/components/Tag/Tag.test.tsx +4 -4
  133. package/src/components/Tag/Tag.tsx +4 -4
  134. package/src/components/TaskList/TaskList.test.tsx +26 -0
  135. package/src/components/TaskList/TaskList.tsx +21 -11
  136. package/src/components/TextInput/TextInput.test.tsx +1 -1
  137. package/src/components/TextInput/TextInput.tsx +5 -5
  138. package/src/components/Textarea/Textarea.test.tsx +1 -1
  139. package/src/components/Textarea/Textarea.tsx +5 -5
  140. package/src/components/WarningText/WarningText.tsx +2 -2
  141. package/dist/common/abstract-notification-banner.jsx +0 -63
  142. package/dist/common/conditional-wrapper.jsx +0 -8
  143. package/dist/common/file-icon.jsx +0 -51
  144. package/dist/common/hint-text.jsx +0 -9
  145. package/dist/common/screen-reader-text.jsx +0 -9
  146. package/dist/common/wrapper-tag.jsx +0 -11
  147. package/dist/components/accordion/accordion.jsx +0 -102
  148. package/dist/components/back-to-top/back-to-top.jsx +0 -27
  149. package/dist/components/breadcrumbs/breadcrumbs.jsx +0 -28
  150. package/dist/components/button/button.jsx +0 -30
  151. package/dist/components/checkbox/checkbox.jsx +0 -62
  152. package/dist/components/confirmation-message/confirmation-message.jsx +0 -24
  153. package/dist/components/contents-nav/contents-nav.jsx +0 -33
  154. package/dist/components/cookie-banner/cookie-banner.jsx +0 -21
  155. package/dist/components/date-picker/date-picker.jsx +0 -54
  156. package/dist/components/details/details.jsx +0 -17
  157. package/dist/components/error-message/error-message.jsx +0 -12
  158. package/dist/components/error-summary/error-summary.jsx +0 -27
  159. package/dist/components/file-download/file-download.jsx +0 -50
  160. package/dist/components/hide-this-page/hide-this-page.jsx +0 -71
  161. package/dist/components/inset-text/inset-text.jsx +0 -14
  162. package/dist/components/notification-banner/notification-banner.jsx +0 -26
  163. package/dist/components/notification-panel/notification-panel.jsx +0 -21
  164. package/dist/components/page-header/page-header.jsx +0 -15
  165. package/dist/components/page-metadata/page-metadata.jsx +0 -26
  166. package/dist/components/pagination/pagination.jsx +0 -97
  167. package/dist/components/phase-banner/phase-banner.jsx +0 -23
  168. package/dist/components/question/question.jsx +0 -22
  169. package/dist/components/radio-button/radio-button.jsx +0 -43
  170. package/dist/components/select/select.jsx +0 -52
  171. package/dist/components/sequential-navigation/sequential-navigation.jsx +0 -31
  172. package/dist/components/side-navigation/side-navigation.jsx +0 -52
  173. package/dist/components/site-header/site-header.jsx +0 -68
  174. package/dist/components/site-navigation/site-navigation.jsx +0 -22
  175. package/dist/components/site-search/site-search.jsx +0 -55
  176. package/dist/components/skip-links/skip-links.jsx +0 -21
  177. package/dist/components/summary-card/summary-card.jsx +0 -67
  178. package/dist/components/summary-list/summary-list.jsx +0 -75
  179. package/dist/components/table/table.jsx +0 -24
  180. package/dist/components/tabs/tabs.jsx +0 -99
  181. package/dist/components/tag/tag.jsx +0 -13
  182. package/dist/components/task-list/task-list.jsx +0 -95
  183. package/dist/components/text-input/text-input.jsx +0 -58
  184. package/dist/components/textarea/textarea.jsx +0 -54
  185. package/dist/components/warning-text/warning-text.jsx +0 -16
  186. package/dist/icons/ArrowUpward.jsx +0 -41
  187. package/dist/icons/CalendarToday.jsx +0 -41
  188. package/dist/icons/Cancel.jsx +0 -40
  189. package/dist/icons/CheckCircle.jsx +0 -41
  190. package/dist/icons/ChevronLeft.jsx +0 -41
  191. package/dist/icons/ChevronRight.jsx +0 -41
  192. package/dist/icons/Close.jsx +0 -41
  193. package/dist/icons/Description.jsx +0 -41
  194. package/dist/icons/DoubleChevronLeft.jsx +0 -40
  195. package/dist/icons/DoubleChevronRight.jsx +0 -40
  196. package/dist/icons/Error.jsx +0 -41
  197. package/dist/icons/ExpandLess.jsx +0 -41
  198. package/dist/icons/ExpandMore.jsx +0 -41
  199. package/dist/icons/List.jsx +0 -44
  200. package/dist/icons/Menu.jsx +0 -41
  201. package/dist/icons/PriorityHigh.jsx +0 -42
  202. package/dist/icons/Search.jsx +0 -41
  203. package/dist/icons/index.js +0 -40
@@ -4,21 +4,32 @@ import HintText from '../../common/HintText';
4
4
  import ScreenReaderText from '../../common/ScreenReaderText';
5
5
  import Tag from '../Tag/Tag';
6
6
 
7
- const TaskItem: React.FC<SGDS.Component.TaskList.Item> = ({
7
+ const TaskItem = ({
8
8
  children,
9
9
  className,
10
10
  href,
11
11
  id,
12
12
  isComplete = false,
13
+ linkComponent,
13
14
  statusText,
14
15
  tagColour = 'grey',
15
16
  title,
16
17
  ...props
17
- }) => {
18
+ }: SGDS.Component.TaskList.Item) => {
18
19
  if (isComplete) {
19
20
  tagColour = 'green';
20
21
  }
21
22
 
23
+ const LINK_CLASS = 'ds_task-list__task-link';
24
+
25
+ function getLinkElement(children: React.ReactNode) {
26
+ if (linkComponent) {
27
+ return linkComponent({ className: LINK_CLASS, href, children });
28
+ } else if (href) {
29
+ return <a href={href} className={LINK_CLASS}>{children}</a>;
30
+ }
31
+ }
32
+
22
33
  return (
23
34
  <li
24
35
  className={[
@@ -32,7 +43,7 @@ const TaskItem: React.FC<SGDS.Component.TaskList.Item> = ({
32
43
  <h3 className="ds_task-list__task-heading">
33
44
  <ConditionalWrapper
34
45
  condition={typeof href !== 'undefined'}
35
- wrapper={(children: React.JSX.Element) => <a className="ds_task-list__task-link" href={href}>{children}</a>}
46
+ wrapper={(children: React.JSX.Element) => getLinkElement(children)}
36
47
  >
37
48
  {title}
38
49
  {statusText && <ScreenReaderText>({statusText})</ScreenReaderText>}
@@ -45,8 +56,9 @@ const TaskItem: React.FC<SGDS.Component.TaskList.Item> = ({
45
56
  <Tag
46
57
  aria-hidden="true"
47
58
  colour={tagColour}
48
- title={statusText}
49
- />
59
+ >
60
+ {statusText}
61
+ </Tag>
50
62
  }
51
63
  </li>
52
64
  );
@@ -58,13 +70,13 @@ const TaskItem: React.FC<SGDS.Component.TaskList.Item> = ({
58
70
  * @param {string} props.title - The title of the task group
59
71
  * @returns {JSX.Element} - The element
60
72
  */
61
- const TaskGroup: React.FC<SGDS.Component.TaskList.Group> = ({
73
+ const TaskGroup = ({
62
74
  children,
63
75
  className,
64
76
  intro,
65
77
  title,
66
78
  ...props
67
- }) => {
79
+ }: SGDS.Component.TaskList.Group) => {
68
80
  return (
69
81
  <li
70
82
  className={[
@@ -82,15 +94,13 @@ const TaskGroup: React.FC<SGDS.Component.TaskList.Group> = ({
82
94
  );
83
95
  };
84
96
 
85
- const TaskList: React.FC<SGDS.Component.TaskList>
86
- & { Group: React.FC<SGDS.Component.TaskList.Group> }
87
- & { Item: React.FC<SGDS.Component.TaskList.Item> } = ({
97
+ const TaskList = ({
88
98
  children,
89
99
  className,
90
100
  headingId = 'task-list',
91
101
  title,
92
102
  ...props
93
- }) => {
103
+ }: SGDS.Component.TaskList) => {
94
104
  let taskCount = 0;
95
105
  let incompleteTaskIds: string[] = [];
96
106
  let completedTasksCount = 0;
@@ -284,8 +284,8 @@ test('text input with error message', () => {
284
284
  <TextInput
285
285
  id={INPUT_ID}
286
286
  label={LABEL_TEXT}
287
- error
288
287
  errorMessage={ERROR_MESSAGE_TEXT}
288
+ hasError
289
289
  />
290
290
  );
291
291
 
@@ -6,7 +6,7 @@ import ConditionalWrapper from '../../common/ConditionalWrapper';
6
6
  import ErrorMessage from '../ErrorMessage/ErrorMessage';
7
7
  import HintText from '../../common/HintText';
8
8
 
9
- const TextInput: React.FC<SGDS.Component.TextInput> = ({
9
+ const TextInput = ({
10
10
  buttonIcon,
11
11
  buttonText,
12
12
  children,
@@ -15,9 +15,9 @@ const TextInput: React.FC<SGDS.Component.TextInput> = ({
15
15
  width,
16
16
  currency,
17
17
  currencySymbol,
18
- error,
19
18
  errorMessage,
20
19
  hasButton = false,
20
+ hasError,
21
21
  hintText,
22
22
  id,
23
23
  label,
@@ -29,7 +29,7 @@ const TextInput: React.FC<SGDS.Component.TextInput> = ({
29
29
  type = 'text',
30
30
  value,
31
31
  ...props
32
- }) => {
32
+ }: SGDS.Component.TextInput) => {
33
33
  const errorMessageId = `error-message-${id}`;
34
34
  const hintTextId = `hint-text-${id}`;
35
35
  const ref = useRef(null);
@@ -71,11 +71,11 @@ const TextInput: React.FC<SGDS.Component.TextInput> = ({
71
71
  >
72
72
  <input
73
73
  aria-describedby={describedbys.join(' ')}
74
- aria-invalid={error}
74
+ aria-invalid={hasError}
75
75
  className={[
76
76
  'ds_input',
77
77
  className,
78
- error ? 'ds_input--error' : '',
78
+ hasError ? 'ds_input--error' : '',
79
79
  width ? `ds_input--${width}` : '',
80
80
  ].join(' ')}
81
81
  defaultValue={value}
@@ -188,8 +188,8 @@ test('textarea with error message', () => {
188
188
  <Textarea
189
189
  id={TEXTAREA_ID}
190
190
  label={LABEL_TEXT}
191
- error
192
191
  errorMessage={ERROR_MESSAGE_TEXT}
192
+ hasError
193
193
  />
194
194
  );
195
195
 
@@ -5,11 +5,11 @@ import ConditionalWrapper from '../../common/ConditionalWrapper';
5
5
  import ErrorMessage from '../ErrorMessage/ErrorMessage';
6
6
  import HintText from '../../common/HintText';
7
7
 
8
- const Textarea: React.FC<SGDS.Component.Textarea> = ({
8
+ const Textarea = ({
9
9
  className,
10
10
  countThreshold,
11
- error,
12
11
  errorMessage,
12
+ hasError,
13
13
  hintText,
14
14
  id,
15
15
  label,
@@ -21,7 +21,7 @@ const Textarea: React.FC<SGDS.Component.Textarea> = ({
21
21
  rows = 4,
22
22
  value,
23
23
  ...props
24
- }) => {
24
+ }: SGDS.Component.Textarea) => {
25
25
  const errorMessageId = `error-message-${id}`;
26
26
  const hintTextId = `hint-text-${id}`;
27
27
  const ref = useRef(null);
@@ -59,10 +59,10 @@ const Textarea: React.FC<SGDS.Component.Textarea> = ({
59
59
 
60
60
  <textarea
61
61
  aria-describedby={describedbys.join(' ')}
62
- aria-invalid={error}
62
+ aria-invalid={hasError}
63
63
  className={[
64
64
  'ds_input',
65
- error && 'ds_input--error',
65
+ hasError && 'ds_input--error',
66
66
  className
67
67
  ].join(' ')}
68
68
  defaultValue={value}
@@ -1,8 +1,8 @@
1
- const WarningText: React.FC<SGDS.Component.WarningText> = ({
1
+ const WarningText = ({
2
2
  children,
3
3
  className,
4
4
  ...props
5
- }) => {
5
+ }: SGDS.Component.WarningText) => {
6
6
  return (
7
7
  <div
8
8
  className={[
@@ -1,63 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const react_1 = require("react");
7
- const icon_1 = __importDefault(require("./icon"));
8
- const screen_reader_text_1 = __importDefault(require("./screen-reader-text"));
9
- const Buttons = ({ children }) => {
10
- return (<>{children}</>);
11
- };
12
- const AbstractNotificationBanner = ({ children, className, close, icon, iconColour, iconInverse, title = 'Information', ...props }) => {
13
- let content = [];
14
- let buttons;
15
- react_1.Children.forEach(children, (child) => {
16
- if ((0, react_1.isValidElement)(child) && child.type === Buttons) {
17
- buttons = child;
18
- }
19
- else {
20
- content.push(child);
21
- }
22
- });
23
- return (<div className={[
24
- 'ds_notification',
25
- className
26
- ].join(' ')} data-module="ds-notification" {...props}>
27
- <div className="ds_wrapper">
28
- <div className={[
29
- 'ds_notification__content',
30
- close && 'ds_notification__content--has-close'
31
- ].join(' ')}>
32
- <h2 className="visually-hidden">{title}</h2>
33
-
34
- {icon &&
35
- <span className={[
36
- 'ds_notification__icon',
37
- iconInverse && 'ds_notification__icon--inverse',
38
- iconColour && 'ds_notification__icon--colour'
39
- ].join(' ')} aria-hidden="true">
40
- <icon_1.default icon={icon}/>
41
- </span>}
42
-
43
- <div className="ds_notification__text">
44
- {content}
45
- </div>
46
-
47
- {close &&
48
- <button type="button" className="ds_notification__close js-close-notification">
49
- <screen_reader_text_1.default>Close this notification</screen_reader_text_1.default>
50
- <icon_1.default fill icon="Close" aria-hidden="true"/>
51
- </button>}
52
-
53
- {buttons &&
54
- <div className="ds_button-group">
55
- {buttons}
56
- </div>}
57
- </div>
58
- </div>
59
- </div>);
60
- };
61
- AbstractNotificationBanner.displayName = 'AbstractNotificationBanner';
62
- AbstractNotificationBanner.Buttons = Buttons;
63
- exports.default = AbstractNotificationBanner;
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- /**
4
- * Wraps all children in a specified HTML tag if a condition is met.
5
- */
6
- const ConditionalWrapper = ({ condition, wrapper, children }) => condition ? wrapper(children) : children;
7
- ConditionalWrapper.displayName = 'ConditionalWrapper';
8
- exports.default = ConditionalWrapper;
@@ -1,51 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- const react_1 = __importDefault(require("react"));
40
- const FileIcons = __importStar(require("../images/documents"));
41
- const FileIcon = ({ ariaLabel = '', className, icon }) => {
42
- const Component = react_1.default.createElement(FileIcons[icon], {
43
- className: className,
44
- 'aria-label': ariaLabel
45
- });
46
- return (<>
47
- {Component}
48
- </>);
49
- };
50
- FileIcon.displayName = 'FileIcon';
51
- exports.default = FileIcon;
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const HintText = ({ children, id, text, ...props }) => {
4
- return (<p className="ds_hint-text" dangerouslySetInnerHTML={text ? { __html: text } : undefined} id={id} {...props}>
5
- {!text ? children : null}
6
- </p>);
7
- };
8
- HintText.displayName = 'HintText';
9
- exports.default = HintText;
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const ScreenReaderText = ({ children, ...props }) => {
4
- return (<span className="visually-hidden" {...props}>
5
- {children}
6
- </span>);
7
- };
8
- ScreenReaderText.displayName = 'ScreenReaderText';
9
- exports.default = ScreenReaderText;
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- /**
4
- * Wraps all children in a specified HTML tag.
5
- */
6
- const WrapperTag = ({ children, tagName = 'div', ...props }) => {
7
- const TagName = tagName;
8
- return <TagName {...props}>{children}</TagName>;
9
- };
10
- WrapperTag.displayName = 'WrapperTag';
11
- exports.default = WrapperTag;
@@ -1,102 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- const react_1 = __importStar(require("react"));
40
- const wrapper_tag_1 = __importDefault(require("../../common/wrapper-tag"));
41
- // @ts-ignore
42
- const accordion_1 = __importDefault(require("@scottish-government/design-system/src/components/accordion/accordion"));
43
- let accordionItemCounter = 0;
44
- const AccordionItem = ({ children, className, headerLevel = 'h3', id: rawId, open = false, title, ...props }) => {
45
- accordionItemCounter = accordionItemCounter + 1;
46
- const processedId = rawId || `accordion-item-${accordionItemCounter}`;
47
- return (<div className={[
48
- 'ds_accordion-item',
49
- className
50
- ].join(' ')} id={processedId} {...props}>
51
- <input aria-labelledby={`panel-${processedId}-heading`} className={[
52
- 'ds_accordion-item__control',
53
- 'visually-hidden'
54
- ].join(' ')} defaultChecked={open} id={`${processedId}-control`} type="checkbox"/>
55
- <div className="ds_accordion-item__header">
56
- <wrapper_tag_1.default id={`panel-${processedId}-heading`} className="ds_accordion-item__title" tagName={headerLevel}>
57
- {title}
58
- </wrapper_tag_1.default>
59
- <span className='ds_accordion-item__indicator'/>
60
- <label className="ds_accordion-item__label" htmlFor={`${processedId}-control`}>
61
- <span className="visually-hidden">Show this section</span>
62
- </label>
63
- </div>
64
- <div className="ds_accordion-item__body">
65
- {children}
66
- </div>
67
- </div>);
68
- };
69
- const Accordion = ({ children, className, headerLevel = 'h3', hideOpenAll, ...props }) => {
70
- const ref = (0, react_1.useRef)(null);
71
- (0, react_1.useEffect)(() => {
72
- if (ref.current) {
73
- new accordion_1.default(ref.current).init();
74
- }
75
- }, [ref]);
76
- if (!children) {
77
- hideOpenAll = true;
78
- }
79
- function processChild(child) {
80
- return react_1.default.cloneElement(child, { headerLevel: headerLevel });
81
- }
82
- return (<div className={[
83
- 'ds_accordion',
84
- className
85
- ].join(' ')} ref={ref} {...props}>
86
- {!hideOpenAll && (<button className={[
87
- 'ds_accordion__open-all',
88
- 'ds_link',
89
- 'js-open-all'
90
- ].join(' ')} type='button'>
91
- Open all
92
- {' '}
93
- <span className="visually-hidden">sections</span>
94
- </button>)}
95
-
96
- {react_1.Children.map(children, child => processChild(child))}
97
- </div>);
98
- };
99
- Accordion.displayName = 'Accordion';
100
- AccordionItem.displayName = 'AccordionItem';
101
- Accordion.Item = AccordionItem;
102
- exports.default = Accordion;
@@ -1,27 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const react_1 = require("react");
7
- // @ts-ignore
8
- const back_to_top_1 = __importDefault(require("@scottish-government/design-system/src/components/back-to-top/back-to-top"));
9
- const icon_1 = __importDefault(require("../../common/icon"));
10
- const BackToTop = ({ className, href = '#page-top', ...props }) => {
11
- const ref = (0, react_1.useRef)(null);
12
- (0, react_1.useEffect)(() => {
13
- if (ref.current) {
14
- new back_to_top_1.default(ref.current).init();
15
- }
16
- }, [ref]);
17
- return (<div className={[
18
- 'ds_back-to-top',
19
- className
20
- ].join(' ')} ref={ref} {...props}>
21
- <a href={href} className="ds_back-to-top__button">Back to top
22
- <icon_1.default className="ds_back-to-top__icon" icon="ArrowUpward"/>
23
- </a>
24
- </div>);
25
- };
26
- BackToTop.displayName = 'BackToTop';
27
- exports.default = BackToTop;
@@ -1,28 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const Breadcrumb = ({ hidden, href, title }) => {
4
- return (<li className={[
5
- 'ds_breadcrumbs__item',
6
- hidden && 'visually-hidden'
7
- ].join(' ')}>
8
-
9
- {href ? (<a className="ds_breadcrumbs__link" href={href}>
10
- {title}
11
- </a>) : (title)}
12
- </li>);
13
- };
14
- /**
15
- * @param {boolean} hideLastItem
16
- * @param {Array} items
17
- * @param {Object} props - Properties for the element
18
- * @returns {JSX.Element} - The element
19
- */
20
- const Breadcrumbs = ({ hideLastItem, items, ...props }) => {
21
- return (<nav aria-label="Breadcrumb" {...props}>
22
- <ol className="ds_breadcrumbs">
23
- {items && items.map((item, index) => (<Breadcrumb title={item.title} href={item.href} hidden={(hideLastItem) && index + 1 === items.length} key={'breadcrumb' + index}/>))}
24
- </ol>
25
- </nav>);
26
- };
27
- Breadcrumbs.displayName = 'Breadcrumbs';
28
- exports.default = Breadcrumbs;
@@ -1,30 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const icon_1 = __importDefault(require("../../common/icon"));
7
- const screen_reader_text_1 = __importDefault(require("../../common/screen-reader-text"));
8
- const wrapper_tag_1 = __importDefault(require("../../common/wrapper-tag"));
9
- const Button = ({ buttonStyle, children, className, icon, iconLeft, iconOnly = false, href, small, styleAsLink, type = 'button', width, ...props }) => {
10
- // determine which HTML tag to use
11
- let tagName = 'button';
12
- if (href) {
13
- tagName = 'a';
14
- }
15
- return (<wrapper_tag_1.default tagName={tagName} className={[
16
- !styleAsLink ? 'ds_button' : 'ds_link',
17
- width && `ds_button--${width}`,
18
- buttonStyle && `ds_button--${buttonStyle}`,
19
- small && 'ds_button--small',
20
- (icon && !iconOnly) ? 'ds_button--has-icon' : undefined,
21
- iconLeft && 'ds_button--has-icon--left',
22
- className
23
- ].join(' ')} href={href} {...(tagName === 'button' ? { type: type } : {})} {...props}>
24
- {iconOnly ? <screen_reader_text_1.default>{children}</screen_reader_text_1.default> : children}
25
-
26
- {icon && <icon_1.default icon={icon}/>}
27
- </wrapper_tag_1.default>);
28
- };
29
- Button.displayName = 'Button';
30
- exports.default = Button;
@@ -1,62 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.CheckboxGroup = exports.Checkbox = void 0;
7
- const react_1 = require("react");
8
- // @ts-ignore
9
- const checkboxes_1 = __importDefault(require("@scottish-government/design-system/src/forms/checkbox/checkboxes"));
10
- const hint_text_1 = __importDefault(require("../../common/hint-text"));
11
- const Checkbox = ({ checked, hintText, id, exclusive, label, name, onBlur, onChange, small }) => {
12
- const hintTextId = `hint-text-${id}`;
13
- const behaviour = exclusive && 'exclusive';
14
- function handleBlur(event) {
15
- if (typeof onBlur === 'function') {
16
- onBlur(event);
17
- }
18
- }
19
- function handleChange(event) {
20
- if (typeof onChange === 'function') {
21
- onChange(event);
22
- }
23
- }
24
- return (<>
25
- {exclusive && <p className="ds_checkbox-separator">or</p>}
26
- <div className={[
27
- 'ds_checkbox',
28
- small && 'ds_checkbox--small'
29
- ].join(' ')}>
30
-
31
- <input aria-describedby={hintText ? hintTextId : undefined} className="ds_checkbox__input" data-behaviour={behaviour} defaultChecked={!!checked} id={id} name={name || id} onBlur={handleBlur} onChange={handleChange} type="checkbox"/>
32
- <label className="ds_checkbox__label" htmlFor={id}>{label}</label>
33
- {hintText && <hint_text_1.default id={hintTextId} text={hintText}/>}
34
- </div>
35
- </>);
36
- };
37
- exports.Checkbox = Checkbox;
38
- /**
39
- * @param {Object} props - Properties for the element
40
- * @param {Array} items - Checkboxes
41
- * @param {boolean} small - Use the small display style for all checkboxes
42
- * @returns {JSX.Element} - The element
43
- */
44
- const CheckboxGroup = ({ className, items, small, ...props }) => {
45
- const ref = (0, react_1.useRef)(null);
46
- (0, react_1.useEffect)(() => {
47
- if (ref.current) {
48
- new checkboxes_1.default(ref.current).init();
49
- }
50
- }, [ref]);
51
- return (<div className={[
52
- 'ds_checkboxes',
53
- 'ds_field-group',
54
- className
55
- ].join(' ')} data-module="ds-checkboxes" ref={ref} {...props}>
56
- {items && items.map((item, index) => (<exports.Checkbox exclusive={item.exclusive} checked={item.checked} hintText={item.hintText} id={item.id} key={'checkbox' + index} label={item.label} onBlur={item.onBlur} onChange={item.onChange} small={small || item.small}/>))}
57
- </div>);
58
- };
59
- exports.CheckboxGroup = CheckboxGroup;
60
- exports.Checkbox.displayName = 'Checkbox';
61
- exports.CheckboxGroup.displayName = 'CheckboxGroup';
62
- exports.default = exports.CheckboxGroup;
@@ -1,24 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const icon_1 = __importDefault(require("../../common/icon"));
7
- const wrapper_tag_1 = __importDefault(require("../../common/wrapper-tag"));
8
- const ConfirmationMessage = ({ ariaLive = 'polite', children, className, headerLevel = 'h3', title, ...props }) => {
9
- return (<div aria-live={ariaLive} className={[
10
- 'ds_confirmation-message',
11
- className
12
- ].join(' ')} {...props}>
13
- <icon_1.default className="ds_confirmation-message__icon" icon="CheckCircle" iconSize="24"/>
14
-
15
- <wrapper_tag_1.default className="ds_confirmation-message__title" tagName={headerLevel}>
16
- {title}
17
- </wrapper_tag_1.default>
18
- {children && <div className="ds_confirmation-message__body">
19
- {children}
20
- </div>}
21
- </div>);
22
- };
23
- ConfirmationMessage.displayName = 'ConfirmationMessage';
24
- exports.default = ConfirmationMessage;