playbook_ui 11.4.0.pre.alpha.rubytheme2 → 11.4.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 (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>