@thecb/components 3.7.0-beta.1 → 4.0.2

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 (72) hide show
  1. package/.storybook/main.js +1 -1
  2. package/.storybook/page.js +2 -0
  3. package/.tool-versions +1 -0
  4. package/dist/index.cjs.js +361 -355
  5. package/package.json +2 -2
  6. package/src/components/atoms/alert/Alert.js +53 -35
  7. package/src/components/atoms/breadcrumb/Breadcrumb.js +4 -1
  8. package/src/components/atoms/button-with-action/ButtonWithAction.js +2 -2
  9. package/src/components/atoms/checkbox/Checkbox.js +1 -0
  10. package/src/components/atoms/checkbox-list/CheckboxList.js +3 -1
  11. package/src/components/atoms/display-card/DisplayCard.js +4 -2
  12. package/src/components/atoms/dropdown/Dropdown.js +4 -4
  13. package/src/components/atoms/dropdown/Dropdown.stories.js +10 -33
  14. package/src/components/atoms/form-layouts/FormInput.js +8 -5
  15. package/src/components/atoms/form-layouts/FormLayouts.stories.js +5 -5
  16. package/src/components/atoms/hamburger-button/HamburgerButton.js +4 -3
  17. package/src/components/atoms/icons/AccountsIconSmall.js +6 -13
  18. package/src/components/atoms/icons/ChevronIcon.js +4 -4
  19. package/src/components/atoms/icons/icons.stories.js +1 -1
  20. package/src/components/atoms/layouts/Box.styled.js +1 -0
  21. package/src/components/atoms/layouts/Cluster.styled.js +5 -1
  22. package/src/components/atoms/layouts/Sidebar.styled.js +7 -1
  23. package/src/components/atoms/radio-button/RadioButton.js +1 -0
  24. package/src/components/atoms/radio-button/RadioButton.stories.js +26 -61
  25. package/src/components/atoms/toggle-switch/ToggleSwitch.js +1 -0
  26. package/src/components/atoms/toggle-switch/ToggleSwitch.stories.js +10 -51
  27. package/src/components/molecules/editable-list/EditableList.js +11 -8
  28. package/src/components/molecules/nav-menu/NavMenuDesktop.js +2 -1
  29. package/src/components/molecules/nav-menu/NavMenuMobile.js +7 -1
  30. package/src/components/molecules/obligation/Obligation.js +9 -7
  31. package/src/components/molecules/obligation/modules/PaymentDetailsActions.js +23 -23
  32. package/src/components/molecules/pagination/Pagination.js +31 -7
  33. package/src/components/molecules/radio-section/RadioSection.js +7 -3
  34. package/src/deprecated/components/radio-button/radio-button.js +5 -1
  35. package/src/deprecated/icons/IconInvalid.js +7 -31
  36. package/src/deprecated/icons/IconNeutral.js +5 -4
  37. package/src/deprecated/icons/IconValid.js +8 -33
  38. package/src/util/general.js +10 -1
  39. package/src/components/molecules/content/Content.js +0 -20
  40. package/src/components/molecules/content/Content.theme.js +0 -60
  41. package/src/components/molecules/content/blocks/accordion-block/AccordionBlock.js +0 -108
  42. package/src/components/molecules/content/blocks/accordion-block/index.js +0 -3
  43. package/src/components/molecules/content/blocks/article-block/ArticleBlock.js +0 -58
  44. package/src/components/molecules/content/blocks/article-block/index.js +0 -3
  45. package/src/components/molecules/content/blocks/attached-file-block/AttachedFileBlock.js +0 -60
  46. package/src/components/molecules/content/blocks/attached-file-block/index.js +0 -3
  47. package/src/components/molecules/content/blocks/featured-content-block/FeaturedContentBlock.js +0 -0
  48. package/src/components/molecules/content/blocks/featured-content-block/index.js +0 -0
  49. package/src/components/molecules/content/blocks/hero-block/HeroBlock.js +0 -54
  50. package/src/components/molecules/content/blocks/hero-block/index.js +0 -3
  51. package/src/components/molecules/content/blocks/highlight-block/HighlightBlock.js +0 -42
  52. package/src/components/molecules/content/blocks/highlight-block/index.js +0 -3
  53. package/src/components/molecules/content/blocks/index.js +0 -33
  54. package/src/components/molecules/content/blocks/info-block/InfoBlock.js +0 -15
  55. package/src/components/molecules/content/blocks/info-block/index.js +0 -3
  56. package/src/components/molecules/content/blocks/location-block/LocationBlock.js +0 -228
  57. package/src/components/molecules/content/blocks/location-block/index.js +0 -3
  58. package/src/components/molecules/content/blocks/related-links-block/RelatedLinksBlock.js +0 -35
  59. package/src/components/molecules/content/blocks/related-links-block/index.js +0 -3
  60. package/src/components/molecules/content/blocks/screendoor-block/ScreendoorBlock.js +0 -57
  61. package/src/components/molecules/content/blocks/screendoor-block/ScreendoorForm.styled.js +0 -314
  62. package/src/components/molecules/content/blocks/screendoor-block/index.js +0 -3
  63. package/src/components/molecules/content/blocks/tagline-block/TaglineBlock.js +0 -45
  64. package/src/components/molecules/content/blocks/tagline-block/index.js +0 -3
  65. package/src/components/molecules/content/blocks/task-block/TaskBlock.js +0 -40
  66. package/src/components/molecules/content/blocks/task-block/index.js +0 -3
  67. package/src/components/molecules/content/blocks/text-block/TextBlock.js +0 -40
  68. package/src/components/molecules/content/blocks/text-block/index.js +0 -3
  69. package/src/components/molecules/content/header/Header.js +0 -283
  70. package/src/components/molecules/content/header/Header.theme.js +0 -11
  71. package/src/components/molecules/content/header/index.js +0 -3
  72. package/src/components/molecules/content/index.js +0 -3
@@ -1,69 +1,34 @@
1
1
  import React, { useState } from "react";
2
- import { withKnobs, text, radios } from "@storybook/addon-knobs";
2
+ import { boolean } from "@storybook/addon-knobs";
3
3
  import RadioButton from "./RadioButton";
4
- import { Box, Cover, Center } from "../layouts";
5
- import { ThemeProvider } from "styled-components";
6
-
7
- const fakeTheme = {
8
- RadioButton: {
9
- activeColor: "#15749D",
10
- inactiveColor: "#959CA8"
11
- }
12
- };
13
-
14
- export default {
15
- title: "Radio Button",
16
- component: RadioButton,
17
- decorators: [
18
- withKnobs,
19
- storyFn => (
20
- <ThemeProvider
21
- theme={{
22
- name: text("Theme Name", "default"),
23
- values: fakeTheme
24
- }}
25
- >
26
- <Cover>
27
- <div />
28
- <Center>{storyFn()}</Center>
29
- <div />
30
- </Cover>
31
- </ThemeProvider>
32
- )
33
- ]
34
- };
4
+ import { Box } from "../layouts";
5
+ import page from "../../../../.storybook/page";
35
6
 
36
7
  export const radioButtonsDefault = () => {
37
- const buttons = 3;
38
-
39
8
  const [selected, setSelected] = useState(null);
40
9
  const [focused, setFocused] = useState(null);
41
10
 
42
- return [...Array(buttons).keys()].map(i => {
43
- const name = `radio-button-${i}`;
44
- return (
45
- <Box
46
- key={name}
47
- onFocus={() => setFocused(name)}
48
- onBlur={() => setFocused(null)}
49
- extraStyles="outline: none;"
50
- tabIndex="0"
51
- >
52
- <RadioButton
53
- name={name}
54
- radioOn={selected === name}
55
- radioFocused={focused === name}
56
- toggleRadio={() => setSelected(name)}
57
- disabled={
58
- radios(
59
- "Disable Radio Buttons",
60
- { Enabled: "enabled", Disabled: "disabled" },
61
- "enabled",
62
- "RADIO-GROUP-1"
63
- ) === "disabled"
64
- }
65
- />
66
- </Box>
67
- );
68
- });
11
+ return (
12
+ <Box
13
+ onFocus={() => setFocused(name)}
14
+ onBlur={() => setFocused(null)}
15
+ extraStyles="outline: none;"
16
+ tabIndex="0"
17
+ >
18
+ <RadioButton
19
+ name="demo"
20
+ radioOn={selected === name}
21
+ radioFocused={focused === name}
22
+ toggleRadio={() => setSelected(name)}
23
+ disabled={boolean("disabled", false, "props")}
24
+ />
25
+ </Box>
26
+ );
69
27
  };
28
+
29
+ const story = page({
30
+ title: "Components|Atoms/RadioButton",
31
+ Component: RadioButton
32
+ });
33
+
34
+ export default story;
@@ -171,6 +171,7 @@ const ToggleSwitch = ({
171
171
  dataQa={dataQa}
172
172
  >
173
173
  <HiddenToggleSwitchBox
174
+ aria-label={name}
174
175
  checked={isOn}
175
176
  onChange={disabled ? noop : onToggle}
176
177
  disabled={disabled}
@@ -1,60 +1,12 @@
1
1
  import React, { useState, Fragment } from "react";
2
- import { withKnobs, text, radios } from "@storybook/addon-knobs";
2
+ import { boolean } from "@storybook/addon-knobs";
3
3
  import ToggleSwitch from "./ToggleSwitch";
4
- import { Cover, Center, Stack } from "../layouts";
5
- import { ThemeProvider } from "styled-components";
6
-
7
- const fakeTheme = {
8
- ToggleSwitch: {
9
- onBackground: "#15749D",
10
- disabledBackground: "#D5D8DC",
11
- white: "white",
12
- offBackground: "#959EA7",
13
- rightLabelStyles: `display: flex;
14
- justify-content: flex-start;
15
- align-items: center;
16
- flex-direction: row;`,
17
- leftLabelStyles: `display: flex;
18
- justify-content: flex-start;
19
- align-items: center;
20
- flex-direction: row-reverse;`
21
- }
22
- };
23
-
24
- export default {
25
- title: "Toggle Switch",
26
- component: ToggleSwitch,
27
- decorators: [
28
- withKnobs,
29
- storyFn => (
30
- <ThemeProvider
31
- theme={{
32
- name: text("Theme Name", "default"),
33
- values: fakeTheme
34
- }}
35
- >
36
- <Cover>
37
- <div />
38
- <Center>
39
- <Stack>{storyFn()}</Stack>
40
- </Center>
41
- <div />
42
- </Cover>
43
- </ThemeProvider>
44
- )
45
- ]
46
- };
4
+ import page from "../../../../.storybook/page";
47
5
 
48
6
  export const toggleSwitchDefault = () => {
49
7
  const [isOn, onToggle] = useState(false);
50
8
 
51
- const disabled =
52
- radios(
53
- "Disable Toggle Switch",
54
- { Enabled: "enabled", Disabled: "disabled" },
55
- "enabled",
56
- "RADIO-GROUP-1"
57
- ) === "disabled";
9
+ const disabled = boolean("disabled", false, "props");
58
10
 
59
11
  return (
60
12
  <Fragment>
@@ -68,3 +20,10 @@ export const toggleSwitchDefault = () => {
68
20
  </Fragment>
69
21
  );
70
22
  };
23
+
24
+ const story = page({
25
+ title: "Components|Atoms/ToggleSwitch",
26
+ Component: ToggleSwitch
27
+ });
28
+
29
+ export default story;
@@ -55,24 +55,25 @@ const EditableList = ({
55
55
  extraStyles={`box-shadow: 0px 2px 14px 0px rgb(246, 246, 249),
56
56
  0px 3px 8px 0px rgb(202, 206, 216);`}
57
57
  >
58
- {items.map(props => {
58
+ {items.map(item => {
59
59
  const [modalOpen, toggleModal] = useState(false);
60
60
  return (
61
61
  <EditableListItem
62
62
  listItemSize={
63
- !!props.id && props.id === autoPayMethod ? "big" : listItemSize
63
+ !!item.id && item.id === autoPayMethod ? "big" : listItemSize
64
64
  }
65
- key={props.id}
65
+ key={item.id || item}
66
66
  >
67
67
  <Text variant="p" color={CHARADE_GREY}>
68
- {renderItem(props)}
68
+ {renderItem(item)}
69
69
  </Text>
70
70
  <EditableListItemControls>
71
- {props.isPrimary && (
71
+ {item.isPrimary && (
72
72
  <Text
73
73
  variant="p"
74
74
  color={STORM_GREY}
75
75
  extraStyles={`font-style: italic;`}
76
+ key={`Default ${itemName}`}
76
77
  >
77
78
  Default {itemName}
78
79
  </Text>
@@ -83,10 +84,11 @@ const EditableList = ({
83
84
  border="2px solid transparent"
84
85
  extraStyles={`:not(:first-child) { border-left: 2px solid ${BOSTON_BLUE};}`}
85
86
  dataQa={qaPrefix + " Remove"}
87
+ key={`Remove ${item.id}`}
86
88
  >
87
89
  {useModal ? (
88
90
  <Modal
89
- item={{ ...props }}
91
+ item={{ ...item }}
90
92
  {...modalProps}
91
93
  modalOpen={modalOpen}
92
94
  toggleModal={toggleModal}
@@ -95,7 +97,7 @@ const EditableList = ({
95
97
  <ButtonWithAction
96
98
  variant="smallGhost"
97
99
  text="Remove"
98
- action={() => removeItem(props.id)}
100
+ action={() => removeItem(item.id)}
99
101
  extraStyles={`min-width: 0;`}
100
102
  />
101
103
  )}
@@ -107,11 +109,12 @@ const EditableList = ({
107
109
  border="2px solid transparent"
108
110
  extraStyles={`:not(:first-child) { border-left: 2px solid ${BOSTON_BLUE};}`}
109
111
  dataQa={qaPrefix + " Edit"}
112
+ key={`Edit ${item.id}`}
110
113
  >
111
114
  <ButtonWithAction
112
115
  variant="smallGhost"
113
116
  text="Edit"
114
- action={() => editItem(props.id)}
117
+ action={() => editItem(item.id)}
115
118
  extraStyles={`min-width: 0;`}
116
119
  />
117
120
  </Box>
@@ -4,6 +4,7 @@ import { fallbackValues } from "./NavMenu.theme.js";
4
4
  import { themeComponent } from "../../../util/themeUtils";
5
5
 
6
6
  const NavMenuDesktop = ({
7
+ id,
7
8
  top = "125%",
8
9
  left = "-100%",
9
10
  menuContent = [],
@@ -17,7 +18,7 @@ const NavMenuDesktop = ({
17
18
  const menuCarat = `&:after { bottom: 100%; right: 10px; border: solid transparent; content: " "; height: 0; width: 0; position: absolute; pointer-events: none; border-color: ${themeValues.backgroundColor}00; border-bottom-color: ${themeValues.backgroundColor}; border-width: 10px; margin-left: -10px; }`;
18
19
 
19
20
  return (
20
- <Imposter breakout top={top} left={left} visible={visible}>
21
+ <Imposter id={id} breakout top={top} left={left} visible={visible}>
21
22
  <Box
22
23
  minWidth="240px"
23
24
  padding="1rem 0.5rem"
@@ -42,9 +42,15 @@ const ImposterMenu = styled(menu)`
42
42
  top: 72px;
43
43
  `;
44
44
 
45
- const NavMenuMobile = ({ menuContent = [], visible = false, themeValues }) => {
45
+ const NavMenuMobile = ({
46
+ id,
47
+ menuContent = [],
48
+ visible = false,
49
+ themeValues
50
+ }) => {
46
51
  return (
47
52
  <ImposterMenu
53
+ id={id}
48
54
  initialPose="invisible"
49
55
  pose={visible ? "visible" : "invisible"}
50
56
  >
@@ -39,13 +39,15 @@ const Obligation = ({
39
39
  >
40
40
  <Box padding="0">
41
41
  <Cluster justify="flex-start" align="center">
42
- <IconModule
43
- icon={config.icon}
44
- iconDefault={config.iconDefault}
45
- configIconMap={config.iconMap}
46
- iconValue={config.iconValue}
47
- customAttributes={customAttributes}
48
- />
42
+ {!isMobile && (
43
+ <IconModule
44
+ icon={config.icon}
45
+ iconDefault={config.iconDefault}
46
+ configIconMap={config.iconMap}
47
+ iconValue={config.iconValue}
48
+ customAttributes={customAttributes}
49
+ />
50
+ )}
49
51
  <TitleModule
50
52
  title={obligation.description}
51
53
  subtitle={obligation.subDescription}
@@ -54,29 +54,17 @@ const PaymentDetailsActions = ({
54
54
  borderWidthOverride="0 0 1px 0"
55
55
  >
56
56
  <Cluster justify="space-between" align="center" nowrap>
57
- <Box padding="0" width="100%">
58
- <AmountModule
59
- totalAmountDue={obligations.reduce(
60
- (acc, curr) => acc + curr.amountDue,
61
- 0
62
- )}
63
- autoPayEnabled={autoPayEnabled}
64
- isMobile={isMobile}
65
- deactivatePaymentSchedule={deactivatePaymentSchedule}
66
- navigateToSettings={navigateToSettings}
67
- autoPaySchedule={autoPaySchedule}
68
- />
69
- </Box>
70
- <Box padding="0" width="100%">
71
- <ButtonWithAction
72
- isLoading={isLoading}
73
- action={() => handleClick(obligations)}
74
- text="Pay Now"
75
- variant={isMobile ? "smallSecondary" : "secondary"}
76
- dataQa="Pay Now"
77
- extraStyles={isMobile && `flex-grow: 1; width: 100%;`}
78
- />
79
- </Box>
57
+ <AmountModule
58
+ totalAmountDue={obligations.reduce(
59
+ (acc, curr) => acc + curr.amountDue,
60
+ 0
61
+ )}
62
+ autoPayEnabled={autoPayEnabled}
63
+ isMobile={isMobile}
64
+ deactivatePaymentSchedule={deactivatePaymentSchedule}
65
+ navigateToSettings={navigateToSettings}
66
+ autoPaySchedule={autoPaySchedule}
67
+ />
80
68
  </Cluster>
81
69
  </Box>
82
70
  )}
@@ -146,6 +134,18 @@ const PaymentDetailsActions = ({
146
134
  </Box>
147
135
  )}
148
136
  </Cluster>
137
+ {isMobile && (
138
+ <Box padding="8px 0 0" width="100%">
139
+ <ButtonWithAction
140
+ isLoading={isLoading}
141
+ action={() => handleClick(obligations)}
142
+ text="Pay Now"
143
+ variant={isMobile ? "smallSecondary" : "secondary"}
144
+ dataQa="Pay Now"
145
+ extraStyles={isMobile && `flex-grow: 1; width: 100%;`}
146
+ />
147
+ </Box>
148
+ )}
149
149
  </Box>
150
150
  </Box>
151
151
  );
@@ -9,7 +9,7 @@ import { noop } from "../../../util/general";
9
9
  const PAGING_SPACE = 2; // how many pages we want to have before/after delimiter
10
10
  const PAGING_INIT_SPACE = 3; // first delimiter should appear after 3 pages
11
11
 
12
- const PrevNextButton = ({ action, type }) => (
12
+ const PrevNextButton = ({ action, type, arrowColor, numberColor }) => (
13
13
  <Box padding="0 10px 0" minHeight="40px" extraStyles="max-height: 40px;">
14
14
  <ButtonWithAction
15
15
  action={action}
@@ -21,10 +21,12 @@ const PrevNextButton = ({ action, type }) => (
21
21
  max-height: 40px;
22
22
  padding: 6px;
23
23
  border-radius: 3px;
24
+ background-color: ${numberColor ?? MATISSE_BLUE};
25
+ border-color: ${numberColor ?? MATISSE_BLUE}
24
26
  `}
25
27
  >
26
28
  <Box padding="0" extraStyles={type === "prev" && "transform: scaleX(-1)"}>
27
- <ChevronIcon variant="darkMode" />
29
+ <ChevronIcon variant="darkMode" iconFill={arrowColor} />
28
30
  </Box>
29
31
  </ButtonWithAction>
30
32
  </Box>
@@ -63,15 +65,24 @@ const Pagination = ({
63
65
  pageNext,
64
66
  setCurrentPage,
65
67
  currentPage,
66
- pageCount
68
+ pageCount,
69
+ numberColor,
70
+ arrowColor
67
71
  }) => (
68
72
  <Cluster justify="center" childGap="10px">
69
- {currentPage > 1 && <PrevNextButton type="prev" action={pagePrevious} />}
73
+ {currentPage > 1 && (
74
+ <PrevNextButton
75
+ type="prev"
76
+ action={pagePrevious}
77
+ arrowColor={arrowColor}
78
+ numberColor={numberColor}
79
+ />
80
+ )}
70
81
  {getPagesPanel(currentPage, pageCount).map((item, index) =>
71
82
  item.isButton ? (
72
83
  <Box
73
84
  padding="0"
74
- border={item.active && `1px solid ${MATISSE_BLUE}`}
85
+ border={item.active && `1px solid ${numberColor ?? MATISSE_BLUE}`}
75
86
  borderRadius={item.active && "3px"}
76
87
  extraStyles="max-height: 40px;"
77
88
  >
@@ -94,6 +105,9 @@ const Pagination = ({
94
105
  text-decoration: none;
95
106
  }
96
107
  }
108
+ > * > span {
109
+ color: ${numberColor ?? MATISSE_BLUE}
110
+ }
97
111
  }
98
112
  &:hover { ${
99
113
  item.active
@@ -109,7 +123,12 @@ const Pagination = ({
109
123
  ) : (
110
124
  <Box padding="0 10px">
111
125
  <Cluster justify="flex-end">
112
- <Text key={index} variant="pXL" weight="900" color={MATISSE_BLUE}>
126
+ <Text
127
+ key={index}
128
+ variant="pXL"
129
+ weight="900"
130
+ color={numberColor ?? MATISSE_BLUE}
131
+ >
113
132
  {"..."}
114
133
  </Text>
115
134
  </Cluster>
@@ -117,7 +136,12 @@ const Pagination = ({
117
136
  )
118
137
  )}
119
138
  {currentPage < pageCount && (
120
- <PrevNextButton type="next" action={pageNext} />
139
+ <PrevNextButton
140
+ type="next"
141
+ action={pageNext}
142
+ arrowColor={arrowColor}
143
+ numberColor={numberColor}
144
+ />
121
145
  )}
122
146
  </Cluster>
123
147
  );
@@ -122,12 +122,12 @@ const RadioSection = ({
122
122
  : themeValues.headingBackgroundColor
123
123
  }
124
124
  onClick={
125
- isMobile && supportsTouch
125
+ (isMobile && supportsTouch) || section.disabled
126
126
  ? noop
127
127
  : () => toggleOpenSection(section.id)
128
128
  }
129
129
  onTouchEnd={
130
- isMobile && supportsTouch
130
+ (isMobile && supportsTouch) || !section.disabled
131
131
  ? () => toggleOpenSection(section.id)
132
132
  : noop
133
133
  }
@@ -155,7 +155,11 @@ const RadioSection = ({
155
155
  name={section.id}
156
156
  radioOn={openSection === section.id}
157
157
  radioFocused={focused === section.id}
158
- toggleRadio={() => toggleOpenSection(section.id)}
158
+ toggleRadio={
159
+ section.disabled
160
+ ? noop
161
+ : () => toggleOpenSection(section.id)
162
+ }
159
163
  tabIndex="-1"
160
164
  />
161
165
  </Box>
@@ -36,7 +36,11 @@ const RadioButtonCenter = styled.div`
36
36
  RadioButtonCenter.defaultProps = defaultTheme;
37
37
 
38
38
  const RadioButton = ({ isSelected, name }) => (
39
- <RadioButtonBorder isSelected={isSelected} name={name}>
39
+ <RadioButtonBorder
40
+ isSelected={isSelected}
41
+ name={name}
42
+ aria-checked={isSelected}
43
+ >
40
44
  {isSelected && <RadioButtonCenter />}
41
45
  </RadioButtonBorder>
42
46
  );
@@ -16,47 +16,23 @@ export const IconInvalid = ({
16
16
  xmlns="http://www.w3.org/2000/svg"
17
17
  xmlnsXlink="http://www.w3.org/1999/xlink"
18
18
  style={{ margin }}
19
+ aria-label="Invalid"
19
20
  >
20
- <g
21
- id="icon-invalid-Authentication"
22
- stroke="none"
23
- strokeWidth="1"
24
- fill="none"
25
- fillRule="evenodd"
26
- >
27
- <g
28
- id="icon-invalid-00.1.0.1---HSS---Register---Already-Exists-Error"
29
- transform="translate(-538.000000, -1064.000000)"
30
- fillRule="nonzero"
31
- >
32
- <g
33
- id="icon-invalid-Password-Requirements"
34
- transform="translate(457.000000, 938.000000)"
35
- >
36
- <g
37
- id="icon-invalid-Group-2"
38
- transform="translate(81.000000, 20.000000)"
39
- >
40
- <g
41
- id="icon-invalid-PasswordVerification-Error"
42
- transform="translate(0.000000, 106.000000)"
43
- >
21
+ <g stroke="none" strokeWidth="1" fill="none" fillRule="evenodd">
22
+ <g transform="translate(-538.000000, -1064.000000)" fillRule="nonzero">
23
+ <g transform="translate(457.000000, 938.000000)">
24
+ <g transform="translate(81.000000, 20.000000)">
25
+ <g transform="translate(0.000000, 106.000000)">
44
26
  <circle
45
- id="icon-invalid-Oval"
46
27
  stroke={bgFill}
47
28
  fill={bgFill}
48
29
  cx="9"
49
30
  cy="9"
50
31
  r="8.5"
51
32
  ></circle>
52
- <g
53
- id="icon-invalid-Icon/Close"
54
- transform="translate(2.000000, 2.000000)"
55
- fill={iconFill}
56
- >
33
+ <g transform="translate(2.000000, 2.000000)" fill={iconFill}>
57
34
  <path
58
35
  d="M7.58333333,7.58333333 L7.58333333,11.6666667 L6.41666667,11.6666667 L6.41666667,7.58333333 L2.33333333,7.58333333 L2.33333333,6.41666667 L6.41666667,6.41666667 L6.41666667,2.33333333 L7.58333333,2.33333333 L7.58333333,6.41666667 L11.6666667,6.41666667 L11.6666667,7.58333333 L7.58333333,7.58333333 Z"
59
- id="icon-invalid-x"
60
36
  transform="translate(7.000000, 7.000000) rotate(45.000000) translate(-7.000000, -7.000000) "
61
37
  ></path>
62
38
  </g>
@@ -15,11 +15,12 @@ export const IconNeutral = ({
15
15
  xmlns="http://www.w3.org/2000/svg"
16
16
  xmlnsXlink="http://www.w3.org/1999/xlink"
17
17
  style={{ margin }}
18
+ aria-label="Neutral"
18
19
  >
19
- <g id="icon-neutral-group" fill={fill} fillRule="nonzero" stroke={fill}>
20
- <g id="icon-neutral-Group-2">
21
- <g id="icon-neutral-PasswordVerification-Empty">
22
- <circle id="icon-neutral-Oval" cx="9" cy="9" r="8.5"></circle>
20
+ <g fill={fill} fillRule="nonzero" stroke={fill}>
21
+ <g>
22
+ <g>
23
+ <circle cx="9" cy="9" r="8.5"></circle>
23
24
  </g>
24
25
  </g>
25
26
  </g>
@@ -16,32 +16,14 @@ export const IconValid = ({
16
16
  xmlns="http://www.w3.org/2000/svg"
17
17
  xmlnsXlink="http://www.w3.org/1999/xlink"
18
18
  style={{ margin }}
19
+ aria-label="Valid"
19
20
  >
20
- <g
21
- id="icon-valid-Authentication"
22
- stroke="none"
23
- strokeWidth="1"
24
- fill="none"
25
- fillRule="evenodd"
26
- >
27
- <g
28
- id="icon-valid-00.1.0.1---HSS---Register---Already-Exists-Error"
29
- transform="translate(-538.000000, -996.000000)"
30
- >
31
- <g
32
- id="icon-valid-Password-Requirements"
33
- transform="translate(457.000000, 938.000000)"
34
- >
35
- <g
36
- id="icon-valid-Group-2"
37
- transform="translate(81.000000, 20.000000)"
38
- >
39
- <g
40
- id="icon-valid-PasswordVerification-Sucess"
41
- transform="translate(0.000000, 38.000000)"
42
- >
21
+ <g stroke="none" strokeWidth="1" fill="none" fillRule="evenodd">
22
+ <g transform="translate(-538.000000, -996.000000)">
23
+ <g transform="translate(457.000000, 938.000000)">
24
+ <g transform="translate(81.000000, 20.000000)">
25
+ <g transform="translate(0.000000, 38.000000)">
43
26
  <circle
44
- id="icon-valid-Oval"
45
27
  stroke={bgFill}
46
28
  fill={bgFill}
47
29
  fillRule="nonzero"
@@ -49,16 +31,9 @@ export const IconValid = ({
49
31
  cy="9"
50
32
  r="8.5"
51
33
  ></circle>
52
- <g
53
- id="icon-valid-baseline-check-24px"
54
- transform="translate(2.000000, 2.000000)"
55
- >
34
+ <g transform="translate(2.000000, 2.000000)">
35
+ <polygon points="0 0 14 0 14 14 0 14"></polygon>
56
36
  <polygon
57
- id="icon-valid-Path"
58
- points="0 0 14 0 14 14 0 14"
59
- ></polygon>
60
- <polygon
61
- id="icon-valid-Path-2"
62
37
  fill={iconFill}
63
38
  points="5.25 9.4325 2.8175 7 1.98916667 7.8225 5.25 11.0833333 12.25 4.08333333 11.4275 3.26083333"
64
39
  ></polygon>
@@ -1,3 +1,4 @@
1
+ import React, { Fragment } from "react";
1
2
  import numeral from "numeral";
2
3
 
3
4
  export const noop = () => {};
@@ -9,9 +10,17 @@ export const displayCurrency = cents =>
9
10
 
10
11
  export const convertCentsToMoneyInt = n => (n / 100).toFixed(0);
11
12
 
13
+ const createUniqueId = () =>
14
+ "_" +
15
+ Math.random()
16
+ .toString(36)
17
+ .substr(2, 9);
18
+
12
19
  export const safeChildren = (children, replacement = []) => {
13
20
  if (children && children instanceof Array) {
14
- return children.map(child => (!child ? replacement : child));
21
+ return children.map(child =>
22
+ !child ? <Fragment key={createUniqueId()}>{replacement}</Fragment> : child
23
+ );
15
24
  }
16
25
  return !children ? replacement : children;
17
26
  };