playbook_ui 11.4.0.pre.alpha.rubytheme2 → 11.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_date/_date.tsx +1 -1
  3. data/app/pb_kits/playbook/pb_date_time/{_date_time.tsx → _date_time.jsx} +5 -2
  4. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_align.jsx +1 -1
  5. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_default.jsx +1 -1
  6. data/app/pb_kits/playbook/pb_date_time/docs/_date_time_size.jsx +1 -1
  7. data/app/pb_kits/playbook/pb_dialog/_dialog.jsx +14 -32
  8. data/app/pb_kits/playbook/pb_dialog/_dialog.scss +0 -5
  9. data/app/pb_kits/playbook/pb_dialog/child_kits/_dialog_body.jsx +2 -2
  10. data/app/pb_kits/playbook/pb_dialog/child_kits/_dialog_footer.jsx +4 -22
  11. data/app/pb_kits/playbook/pb_dialog/child_kits/_dialog_header.jsx +3 -3
  12. data/app/pb_kits/playbook/pb_dialog/dialog.test.jsx +17 -79
  13. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_stacked_alert.jsx +93 -55
  14. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_status.jsx +42 -79
  15. data/app/pb_kits/playbook/pb_hashtag/_hashtag.tsx +1 -10
  16. data/app/pb_kits/playbook/pb_hashtag/docs/example.yml +0 -2
  17. data/app/pb_kits/playbook/pb_hashtag/docs/index.js +0 -1
  18. data/app/pb_kits/playbook/pb_hashtag/hashtag.html.erb +1 -1
  19. data/app/pb_kits/playbook/pb_hashtag/hashtag.rb +0 -6
  20. data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.jsx +0 -3
  21. data/app/pb_kits/playbook/pb_home_address_street/city_emphasis.html.erb +1 -2
  22. data/app/pb_kits/playbook/pb_home_address_street/city_emphasis.rb +0 -2
  23. data/app/pb_kits/playbook/pb_home_address_street/docs/example.yml +0 -3
  24. data/app/pb_kits/playbook/pb_home_address_street/docs/index.js +0 -1
  25. data/app/pb_kits/playbook/pb_home_address_street/home_address_street.rb +0 -4
  26. data/app/pb_kits/playbook/pb_home_address_street/street_emphasis.html.erb +1 -2
  27. data/app/pb_kits/playbook/pb_home_address_street/street_emphasis.rb +1 -4
  28. data/app/pb_kits/playbook/pb_time/_time.tsx +2 -2
  29. data/app/pb_kits/playbook/tokens/_colors.scss +74 -74
  30. data/app/pb_kits/playbook/tokens/_typography.scss +8 -8
  31. data/lib/playbook/version.rb +2 -2
  32. metadata +6 -14
  33. data/app/pb_kits/playbook/pb_date_time/dateTime.test.js +0 -110
  34. data/app/pb_kits/playbook/pb_hashtag/docs/_hashtag_link.html.erb +0 -5
  35. data/app/pb_kits/playbook/pb_hashtag/docs/_hashtag_link.jsx +0 -26
  36. data/app/pb_kits/playbook/pb_hashtag/docs/_hashtag_link.md +0 -1
  37. data/app/pb_kits/playbook/pb_hashtag/hashtag.test.js +0 -54
  38. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_link.html.erb +0 -12
  39. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_link.jsx +0 -23
  40. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_link.md +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4588ffa583d51e7d40fc8b940c73f9f4c7974b6b41a48f54710731d0384ac8b5
4
- data.tar.gz: c7e3117147c0781ea722b0bdf21ec6aab13913c541b3f321bcb34f536ef97f9c
3
+ metadata.gz: 638051af443b06b03b9de8a9092d21f8ce06f3806e60bd43cec8463ce428a69a
4
+ data.tar.gz: c43d207810694a318a13280bb917b8a295cb44310e05433a262639bee6b8778e
5
5
  SHA512:
6
- metadata.gz: a83acea1e3f805eb475bec6c969a56e601685bb070b7c573c45754cab2e479d4d1af981c6f5b583ffc92c5aeef64d79bf3f6d8cde071122464195d2981d9c144
7
- data.tar.gz: 0c7d567043af8af75fbf70757e72f49322c3ac1b05cb3a4505bb03679c505261f2a46df2504e593119ae5609b3831827774dfb2bac9c09e43ef4659bf8d86d66
6
+ metadata.gz: 80aad4d2179d46bc3332b631a1f4e4e90640d61b3cbd3bfa1894cd8e5710f20ecea86f8d71cada0811e9ac434a99c70cd31a7622c33df2434d82370b5f0a9157
7
+ data.tar.gz: 8a8562a4d3efced667089ca24567758a341255de55f885d1068c7722b301886d427f07943a03ae391d47a1b1d5b4ce279d7bb80a42d7e53042ed9b22ab71d4dc
@@ -12,7 +12,7 @@ import Title from "../pb_title/_title";
12
12
 
13
13
  type PbDateProps = {
14
14
  alignment?: "left" | "center" | "right";
15
- aria?: { [key: string]: string };
15
+ aria: { [key: string]: string };
16
16
  className?: string;
17
17
  data?: { [key: string]: string };
18
18
  id?: string;
@@ -1,3 +1,5 @@
1
+ /* @flow */
2
+
1
3
  import React from 'react'
2
4
  import classnames from 'classnames'
3
5
 
@@ -10,9 +12,9 @@ import FormattedDate from '../pb_date/_date'
10
12
 
11
13
  type DateTimeProps = {
12
14
  align?: "left" | "center" | "right",
13
- aria?: { [key: string]: string; },
15
+ aria?: object,
14
16
  className?: string,
15
- data?: { [key: string]: string; },
17
+ data?: object,
16
18
  datetime: string,
17
19
  id?: string,
18
20
  size?: "sm" | "md",
@@ -57,6 +59,7 @@ const DateTime = (props: DateTimeProps) => {
57
59
  <FormattedDate
58
60
  showDayOfWeek={showDayOfWeek}
59
61
  size={size}
62
+ timeZone={timeZone}
60
63
  value={datetime}
61
64
  />
62
65
  <Time
@@ -1,5 +1,5 @@
1
1
  import React from 'react'
2
- import DateTime from '../_date_time'
2
+ import DateTime from '../_date_time.jsx'
3
3
 
4
4
  const DateTimeAlign = (props) => (
5
5
  <div>
@@ -1,5 +1,5 @@
1
1
  import React from 'react'
2
- import DateTime from '../_date_time'
2
+ import DateTime from '../_date_time.jsx'
3
3
 
4
4
  const DateTimeDefault = (props) => (
5
5
  <div>
@@ -1,5 +1,5 @@
1
1
  import React from 'react'
2
- import DateTime from '../_date_time'
2
+ import DateTime from '../_date_time.jsx'
3
3
 
4
4
  const DateTimeDefault = (props) => (
5
5
  <div>
@@ -37,7 +37,7 @@ type DialogProps = {
37
37
  opened: boolean,
38
38
  portalClassName?: string,
39
39
  shouldCloseOnOverlayClick: boolean,
40
- size?: "sm" | "md" | "lg" | "status_size" | "content",
40
+ size?: "sm" | "md" | "lg" | "content",
41
41
  status?: "info" | "caution" | "delete" | "error" | "success",
42
42
  text?: string,
43
43
  title?: string,
@@ -53,7 +53,7 @@ const Dialog = (props: DialogProps) => {
53
53
  className,
54
54
  data = {},
55
55
  id,
56
- size = "md",
56
+ size = 'md',
57
57
  children,
58
58
  loading = false,
59
59
  opened,
@@ -107,35 +107,25 @@ const Dialog = (props: DialogProps) => {
107
107
  }
108
108
 
109
109
  const sweetAlertStatus = {
110
- default: {
111
- icon: "exclamation-circle",
112
- variant: "default",
113
- size: "lg"
114
- },
115
110
  info: {
116
- icon: "info-circle",
111
+ icon: "exclamation-circle",
117
112
  variant: "default",
118
- size: "lg"
119
113
  },
120
114
  caution: {
121
- icon: "exclamation-triangle",
115
+ icon: "triangle-warning",
122
116
  variant: "yellow",
123
- size: "lg"
124
117
  },
125
118
  delete: {
126
- icon: "trash-alt",
119
+ icon: "trash",
127
120
  variant: "red",
128
- size: "lg"
129
121
  },
130
122
  error: {
131
123
  icon: "times-circle",
132
124
  variant: "red",
133
- size: "lg"
134
125
  },
135
126
  success: {
136
127
  icon: "check-circle",
137
128
  variant: "green",
138
- size: "lg"
139
129
  },
140
130
  }
141
131
 
@@ -160,35 +150,27 @@ const Dialog = (props: DialogProps) => {
160
150
  shouldCloseOnOverlayClick={shouldCloseOnOverlayClick}
161
151
  status={status}
162
152
  >
163
- <If condition={title && !status}>
153
+ <If condition={title}>
164
154
  <Dialog.Header>{title}</Dialog.Header>
165
155
  </If>
166
156
  <If condition={!status && text}>
167
- <Dialog.Body>
168
- {text}
169
- </Dialog.Body>
157
+ <Dialog.Body>{text}</Dialog.Body>
170
158
  </If>
171
159
  <If condition={status}>
172
- <Dialog.Body
173
- padding="md"
174
- >
175
- <Flex
176
- align="center"
177
- orientation="column"
160
+ <Dialog.Body>
161
+ <Flex align='center'
162
+ orientation='column'
178
163
  >
179
164
  <IconCircle
180
165
  icon={sweetAlertStatus[status].icon}
181
- size={sweetAlertStatus[status].size}
182
166
  variant={sweetAlertStatus[status].variant}
183
167
  />
184
- <Title
185
- marginTop="sm"
168
+ <Title marginY='sm'
186
169
  size={3}
187
170
  >
188
171
  {title}
189
172
  </Title>
190
- <Body
191
- marginTop="xs"
173
+ <Body marginY='xs'
192
174
  text={text}
193
175
  />
194
176
  </Flex>
@@ -202,9 +184,9 @@ const Dialog = (props: DialogProps) => {
202
184
  >
203
185
  {confirmButton}
204
186
  </Button>
205
- <Button id="cancel-button"
187
+ <Button id='cancel-button'
206
188
  onClick={onCancel}
207
- variant="link"
189
+ variant='link'
208
190
  >
209
191
  {cancelButton}
210
192
  </Button>
@@ -59,7 +59,6 @@
59
59
  // Local Variables
60
60
  $gutter: $space_lg;
61
61
  $small: 300px;
62
- $status_size: 375px;
63
62
  $medium: 500px;
64
63
  $large: 800px;
65
64
  $animation-duration: 0.2s;
@@ -79,10 +78,6 @@
79
78
  outline: none;
80
79
  animation-timing-function: $easeInOutQuint;
81
80
 
82
- &[class*="_status_size"] {
83
- width: $status_size;
84
- }
85
-
86
81
  &[class*="_sm"] {
87
82
  width: $small;
88
83
  }
@@ -7,8 +7,8 @@ import { globalProps } from '../../utilities/globalProps'
7
7
 
8
8
  // Body component
9
9
  const DialogBody = (props: DialogBodyProps) => {
10
- const { children, padding = "sm", className } = props
11
- const bodyCSS = buildCss("dialog_body")
10
+ const { children, padding = 'sm', className } = props
11
+ const bodyCSS = buildCss('dialog_body')
12
12
  const bodySpacing = globalProps(props, { padding })
13
13
 
14
14
  return (
@@ -9,35 +9,17 @@ import { globalProps } from '../../utilities/globalProps'
9
9
  import Flex from '../../pb_flex/_flex'
10
10
  import SectionSeparator from '../../pb_section_separator/_section_separator'
11
11
 
12
-
13
- type DialogFooterProps = {
14
- aria?: object,
15
- children: array<React.ReactNode> | React.ReactNode | string,
16
- className?: string,
17
- closeable: boolean,
18
- data?: object,
19
- id?: string,
20
- padding?: string,
21
- paddingBottom?: string,
22
- paddingX?: string,
23
- separator: boolean,
24
- spacing?: string,
25
- }
26
-
27
12
  // Footer component
28
13
  const DialogFooter = (props: DialogFooterProps) => {
29
14
  const {
30
15
  children,
31
- padding = "sm",
32
- paddingBottom = "sm",
33
- paddingX = "sm",
16
+ padding = 'sm',
34
17
  className,
35
- spacing = "between",
18
+ spacing = 'between',
36
19
  separator = false,
37
20
  } = props
38
-
39
- const footerCSS = buildCss("dialog_footer")
40
- const footerSpacing = globalProps(props, { padding, paddingBottom, paddingX })
21
+ const footerCSS = buildCss('dialog_footer')
22
+ const footerSpacing = globalProps(props, { padding })
41
23
 
42
24
  return (
43
25
  <>
@@ -30,8 +30,8 @@ const DialogHeader = (props: DialogHeaderProps) => {
30
30
  children,
31
31
  className,
32
32
  data = {},
33
- padding = "sm",
34
- spacing = "between",
33
+ padding = 'sm',
34
+ spacing = 'between',
35
35
  closeable = true,
36
36
  separator = true,
37
37
  } = props
@@ -39,7 +39,7 @@ const DialogHeader = (props: DialogHeaderProps) => {
39
39
  const ariaProps = buildAriaProps(aria)
40
40
  const dataProps = buildDataProps(data)
41
41
  const api = useContext(DialogContext)
42
- const headerCSS = buildCss("dialog_header")
42
+ const headerCSS = buildCss('dialog_header')
43
43
  const headerSpacing = globalProps(props, { padding })
44
44
 
45
45
  /* eslint-disable react/jsx-handler-names */
@@ -1,85 +1,23 @@
1
- import React, {useState} from 'react'
2
- import { render, cleanup, waitFor, fireEvent } from "../utilities/test-utils";
3
- import { Dialog, Button } from '../'
1
+ import React from 'react'
2
+ import { render, screen } from '../utilities/test-utils'
3
+ import { Dialog } from '../'
4
4
 
5
- const text="Hello Body Text, Nice to meet ya."
6
- const title="Header Title is the Title Prop"
7
- const size="sm"
8
- const confirmButton="Okay"
9
- const cancelButton="Cancel Button"
5
+ /* eslint-disable jsx-control-statements/jsx-jcs-no-undef */
10
6
 
11
- function DialogTest() {
12
- const [isOpen, setIsOpen] = useState(false)
13
- const close = () => setIsOpen(false)
14
- const open = () => setIsOpen(true)
15
- const [isLoading, setIsLoading] = useState(false)
16
- return (
17
- <>
18
- <Button onClick={open}>{'Open Dialog'}</Button>
19
- <Dialog
20
- cancelButton={cancelButton}
21
- className="wrapper"
22
- confirmButton={confirmButton}
23
- loading={isLoading}
24
- onCancel={close}
25
- onClose={close}
26
- onConfirm={() => setIsLoading(!isLoading)}
27
- opened={isOpen}
28
- portalClassName="portal"
29
- size={size}
30
- text={text}
31
- title={title}
32
- />
33
- </>
34
- );
35
- }
7
+ /* See these resources for more testing info:
8
+ - https://github.com/testing-library/jest-dom#usage for useage and examples
9
+ - https://jestjs.io/docs/en/using-matchers
10
+ */
36
11
 
37
- test('renders the component when clicked', async () => {
12
+ test('Kit renders Dialog', () => {
13
+ const testId = 'test1'
38
14
 
39
- const { queryByText } = render(<DialogTest />);
15
+ render(
16
+ <Dialog
17
+ data={{ testid: testId }}
18
+ />
19
+ )
40
20
 
41
- fireEvent.click(queryByText('Open Dialog'));
42
-
43
- await waitFor(() => expect(queryByText("Header Title is the Title Prop")).toBeInTheDocument());
44
-
45
- cleanup()
21
+ const kit = screen.getByTestId(testId)
22
+ expect(kit).toBeInTheDocument()
46
23
  })
47
-
48
- test("renders the title and body text", async () => {
49
-
50
- const { queryByText } = render(<DialogTest />);
51
-
52
- fireEvent.click(queryByText('Open Dialog'));
53
-
54
- await waitFor(() => expect(queryByText("Header Title is the Title Prop")).toHaveTextContent(title));
55
-
56
- await waitFor(() => expect(queryByText("Hello Body Text, Nice to meet ya.")).toHaveTextContent(text));
57
-
58
- cleanup()
59
- });
60
-
61
- test("renders the title and body text", async () => {
62
-
63
- const { queryByText } = render(<DialogTest />);
64
-
65
- fireEvent.click(queryByText('Open Dialog'));
66
-
67
- await waitFor(() => expect(queryByText("Header Title is the Title Prop")).toHaveTextContent(title));
68
-
69
- await waitFor(() => expect(queryByText("Hello Body Text, Nice to meet ya.")).toHaveTextContent(text));
70
-
71
- cleanup()
72
- });
73
-
74
- test("renders the buttons", async () => {
75
-
76
- const { queryByText } = render(<DialogTest />);
77
-
78
- fireEvent.click(queryByText('Open Dialog'));
79
-
80
- await waitFor(() => expect(queryByText("Okay")).toHaveTextContent(confirmButton));
81
-
82
- await waitFor(() => expect(queryByText("Cancel Button")).toHaveTextContent(cancelButton));
83
-
84
- cleanup()
85
- });
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable react/jsx-handler-names */
2
+
2
3
  import React, { useState } from "react"
3
- import { Button, Dialog, Flex} from "../.."
4
+ import { Button, Dialog, Flex, FlexItem, SectionSeparator } from "../.."
4
5
 
5
6
  const useDialog = (visible = false) => {
6
7
  const [opened, setOpened] = useState(visible)
@@ -9,40 +10,46 @@ const useDialog = (visible = false) => {
9
10
  }
10
11
 
11
12
  const DialogStackedAlert = () => {
12
- const [defaultAlertOpened, toggleDefaultAlert] = useDialog()
13
- const [cautionAlertOpened, toggleCautionAlert] = useDialog()
14
- const [deleteAlertOpened, toggleDeleteAlert] = useDialog()
13
+ const [singleButtonOpen, toggleSingleButtonOpen] = useDialog()
14
+ const [stackedButtonOpen, toggleStackedButtonOpen] = useDialog()
15
+ const [singleLinkButtonOpen, toggleSingleLinkButtonOpen] = useDialog()
16
+ const [twoLinkButtonOpen, toggleTwoLinkButtonOpen] = useDialog()
17
+
15
18
 
16
19
  const dialogs = [
17
20
  {
18
- size: "sm",
19
- status: "default",
21
+ status: "info",
20
22
  text: "Text explaining why there is an alert",
21
23
  title: "Are you sure?",
22
- toggle: toggleDefaultAlert,
23
- visible: defaultAlertOpened,
24
- buttonOneText:"Yes, Action",
25
- buttonTwoText: "No, Cancel"
24
+ toggle: toggleSingleButtonOpen,
25
+ visible: singleButtonOpen,
26
+ confirmedButton:"Ok, Thanks",
27
+ },
28
+ {
29
+ status: "error",
30
+ text: "Text explaining the error",
31
+ title: "Error Message",
32
+ confirmedButton:"Yes, Action",
33
+ cancelledButton: "Ok, Cancel",
34
+ toggle: toggleStackedButtonOpen,
35
+ visible: stackedButtonOpen,
26
36
  },
27
37
  {
28
- size: "sm",
29
38
  status: "caution",
30
39
  text: "This is the action you will be taking",
31
40
  title: "Are you sure?",
32
- toggle: toggleCautionAlert,
33
- visible: cautionAlertOpened,
34
- buttonOneText:"Yes, Action",
35
- buttonTwoText: "No, Cancel"
41
+ toggle: toggleSingleLinkButtonOpen,
42
+ visible: singleLinkButtonOpen,
43
+ linkConfirmedButton:"Ok, Thanks!"
36
44
  },
37
45
  {
38
- size: "sm",
39
- status: "delete",
40
- text: "You are about to delete ...",
41
- title: "Delete",
42
- toggle: toggleDeleteAlert,
43
- visible: deleteAlertOpened,
44
- buttonOneText:"Yes, Delete",
45
- buttonTwoText: "No, Cancel"
46
+ status: "success",
47
+ text: "Text explaining what is successful",
48
+ title: "Success",
49
+ toggle: toggleTwoLinkButtonOpen,
50
+ visible: twoLinkButtonOpen,
51
+ linkConfirmedButton:"Ok",
52
+ linkCancelledButton: "Cancel"
46
53
  }
47
54
  ]
48
55
 
@@ -51,21 +58,27 @@ const DialogStackedAlert = () => {
51
58
  <Flex>
52
59
  <Button
53
60
  marginRight="md"
54
- onClick={toggleDefaultAlert}
61
+ onClick={toggleSingleButtonOpen}
62
+ >
63
+ {"1 Button Information Status"}
64
+ </Button>
65
+ <Button
66
+ marginRight="md"
67
+ onClick={toggleStackedButtonOpen}
55
68
  >
56
- {"Default Status"}
69
+ {"2 Button Error Status"}
57
70
  </Button>
58
71
  <Button
59
72
  marginRight="md"
60
- onClick={toggleCautionAlert}
73
+ onClick={toggleSingleLinkButtonOpen}
61
74
  >
62
- {"Caution Status"}
75
+ {"1 Link Button Caution"}
63
76
  </Button>
64
77
  <Button
65
78
  marginRight="md"
66
- onClick={toggleDeleteAlert}
79
+ onClick={toggleTwoLinkButtonOpen}
67
80
  >
68
- {"Delete Status"}
81
+ {"2 Link Button Success"}
69
82
  </Button>
70
83
  </Flex>
71
84
  <Flex>
@@ -75,36 +88,61 @@ const DialogStackedAlert = () => {
75
88
  key={dialog.status}
76
89
  onClose={dialog.toggle}
77
90
  opened={dialog.visible}
78
- size={dialog.size}
91
+ size="sm"
79
92
  status={dialog.status}
80
93
  text={dialog.text}
81
94
  title={dialog.title}
82
95
  >
83
- <Dialog.Footer
84
- padding="sm"
85
- paddingBottom = "none"
86
- paddingX="md"
87
- >
88
- <Button
89
- fullWidth
90
- onClick={dialog.toggle}
91
- >
92
- {dialog.buttonOneText}
93
- </Button>
94
- </Dialog.Footer>
95
- <Dialog.Footer
96
- padding="sm"
97
- paddingBottom = "md"
98
- paddingX="md"
99
- >
100
- <Button
101
- fullWidth
102
- onClick={dialog.toggle}
103
- variant="secondary"
104
- >
105
- {dialog.buttonTwoText}
106
- </Button>
107
- </Dialog.Footer>
96
+ <If condition={dialog.cancelledButton || dialog.confirmedButton}>
97
+ <Dialog.Footer>
98
+ <Button
99
+ fullWidth
100
+ onClick={dialog.toggle}
101
+ >
102
+ {dialog.confirmedButton}
103
+ </Button>
104
+ </Dialog.Footer>
105
+ <If condition={dialog.cancelledButton}>
106
+ <Dialog.Footer paddingTop="none">
107
+ <Button
108
+ fullWidth
109
+ onClick={dialog.toggle}
110
+ variant="secondary"
111
+ >
112
+ {dialog.cancelledButton}
113
+ </Button>
114
+ </Dialog.Footer>
115
+ </If>
116
+ </If>
117
+ <If condition={dialog.linkCancelledButton || dialog.linkConfirmedButton} >
118
+ <SectionSeparator />
119
+ <Flex
120
+ inline="flex-container"
121
+ vertical="stretch"
122
+ >
123
+ <FlexItem flex={1} >
124
+ <Button
125
+ fullWidth
126
+ onClick={dialog.toggle}
127
+ variant="link"
128
+ >
129
+ {dialog.linkConfirmedButton}
130
+ </Button>
131
+ </FlexItem>
132
+ <If condition={dialog.linkCancelledButton}>
133
+ <SectionSeparator orientation="vertical"/>
134
+ <FlexItem flex={1}>
135
+ <Button
136
+ fullWidth
137
+ onClick={dialog.toggle}
138
+ variant="link"
139
+ >
140
+ {dialog.linkCancelledButton}
141
+ </Button>
142
+ </FlexItem>
143
+ </If>
144
+ </Flex>
145
+ </If>
108
146
  </Dialog>
109
147
  ))}
110
148
  </Flex>