playbook_ui 8.2.0.pre.alpha2 → 8.2.1.pre.alpha2

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 (93) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -18
  3. data/app/pb_kits/playbook/_playbook.scss +1 -0
  4. data/app/pb_kits/playbook/data/menu.yml +2 -1
  5. data/app/pb_kits/playbook/index.js +1 -0
  6. data/app/pb_kits/playbook/pb_avatar/_avatar.jsx +14 -2
  7. data/app/pb_kits/playbook/pb_avatar/avatar.html.erb +1 -1
  8. data/app/pb_kits/playbook/pb_avatar/avatar.rb +5 -2
  9. data/app/pb_kits/playbook/pb_avatar/avatar.test.js +5 -2
  10. data/app/pb_kits/playbook/pb_avatar/docs/_avatar_default.html.erb +5 -0
  11. data/app/pb_kits/playbook/pb_avatar/docs/_avatar_default.jsx +5 -0
  12. data/app/pb_kits/playbook/pb_avatar/docs/_avatar_status.html.erb +4 -0
  13. data/app/pb_kits/playbook/pb_avatar/docs/_avatar_status.jsx +4 -0
  14. data/app/pb_kits/playbook/pb_avatar_action_button/_avatar_action_button.jsx +6 -0
  15. data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.html.erb +2 -1
  16. data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.rb +2 -0
  17. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_actions.html.erb +4 -0
  18. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_actions.jsx +4 -0
  19. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_default.html.erb +2 -0
  20. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_default.jsx +2 -0
  21. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_on_click.jsx +2 -0
  22. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_onclick.html.erb +2 -0
  23. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_placement.html.erb +8 -0
  24. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_placement.jsx +8 -0
  25. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_tooltip.html.erb +2 -0
  26. data/app/pb_kits/playbook/pb_avatar_action_button/pb_avatar_action_button.test.js +31 -0
  27. data/app/pb_kits/playbook/pb_badge/_badge.jsx +26 -1
  28. data/app/pb_kits/playbook/pb_caption/_caption.jsx +3 -2
  29. data/app/pb_kits/playbook/pb_caption/caption.rb +1 -1
  30. data/app/pb_kits/playbook/pb_card/_card.jsx +18 -3
  31. data/app/pb_kits/playbook/pb_card/card.html.erb +1 -1
  32. data/app/pb_kits/playbook/pb_card/card.rb +3 -0
  33. data/app/pb_kits/playbook/pb_card/docs/_card_tag.html.erb +25 -0
  34. data/app/pb_kits/playbook/pb_card/docs/_card_tag.jsx +59 -0
  35. data/app/pb_kits/playbook/pb_card/docs/example.yml +2 -0
  36. data/app/pb_kits/playbook/pb_card/docs/index.js +1 -0
  37. data/app/pb_kits/playbook/pb_checkbox/_checkbox.jsx +31 -9
  38. data/app/pb_kits/playbook/pb_checkbox/_checkbox.scss +28 -19
  39. data/app/pb_kits/playbook/pb_checkbox/checkbox.html.erb +11 -3
  40. data/app/pb_kits/playbook/pb_checkbox/checkbox.rb +6 -1
  41. data/app/pb_kits/playbook/pb_checkbox/checkbox.test.js +94 -0
  42. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_custom.jsx +0 -1
  43. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_indeterminate.html.erb +7 -0
  44. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_indeterminate.jsx +16 -0
  45. data/app/pb_kits/playbook/pb_checkbox/docs/example.yml +2 -0
  46. data/app/pb_kits/playbook/pb_checkbox/docs/index.js +1 -0
  47. data/app/pb_kits/playbook/pb_date_picker/_date_picker.jsx +6 -1
  48. data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.js +3 -0
  49. data/app/pb_kits/playbook/pb_dialog/_close_icon.jsx +23 -0
  50. data/app/pb_kits/playbook/pb_dialog/_dialog.html.erb +10 -0
  51. data/app/pb_kits/playbook/pb_dialog/_dialog.jsx +142 -0
  52. data/app/pb_kits/playbook/pb_dialog/_dialog.scss +133 -0
  53. data/app/pb_kits/playbook/pb_dialog/_dialog_context.jsx +3 -0
  54. data/app/pb_kits/playbook/pb_dialog/child_kits/_dialog_body.jsx +21 -0
  55. data/app/pb_kits/playbook/pb_dialog/child_kits/_dialog_footer.jsx +36 -0
  56. data/app/pb_kits/playbook/pb_dialog/child_kits/_dialog_header.jsx +68 -0
  57. data/app/pb_kits/playbook/pb_dialog/dialog.rb +47 -0
  58. data/app/pb_kits/playbook/pb_dialog/dialog.test.jsx +23 -0
  59. data/app/pb_kits/playbook/pb_dialog/dialog_header.rb +31 -0
  60. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_compound_components.jsx +53 -0
  61. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_compound_components.md +2 -0
  62. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_default.jsx +27 -0
  63. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_scrollable.jsx +27 -0
  64. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_scrollable.md +2 -0
  65. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_separators.jsx +119 -0
  66. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_separators.md +2 -0
  67. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_should_close_on_overlay.jsx +28 -0
  68. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_should_close_on_overlay.md +2 -0
  69. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_sizes.jsx +93 -0
  70. data/app/pb_kits/playbook/pb_dialog/docs/example.yml +10 -0
  71. data/app/pb_kits/playbook/pb_dialog/docs/index.js +6 -0
  72. data/app/pb_kits/playbook/pb_flex/_flex.jsx +6 -3
  73. data/app/pb_kits/playbook/pb_form/form_builder.rb +4 -2
  74. data/app/pb_kits/playbook/pb_form/form_builder/action_area.rb +14 -7
  75. data/app/pb_kits/playbook/pb_form/simple_form.html.erb +2 -4
  76. data/app/pb_kits/playbook/pb_form/simple_form.rb +4 -0
  77. data/app/pb_kits/playbook/pb_online_status/_online_status.jsx +2 -0
  78. data/app/pb_kits/playbook/pb_online_status/online_status.html.erb +1 -1
  79. data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.jsx +4 -3
  80. data/app/pb_kits/playbook/pb_text_input/_text_input.jsx +3 -0
  81. data/app/pb_kits/playbook/pb_textarea/_textarea.jsx +3 -0
  82. data/app/pb_kits/playbook/pb_typeahead/_typeahead.jsx +9 -1
  83. data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +9 -0
  84. data/app/pb_kits/playbook/pb_typeahead/components/Input.jsx +43 -0
  85. data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.jsx +21 -11
  86. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_default.jsx +1 -0
  87. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills.jsx +8 -3
  88. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +4 -4
  89. data/app/pb_kits/playbook/pb_user_badge/_user_badge.jsx +1 -1
  90. data/app/pb_kits/playbook/react_rails_kits.js +4 -0
  91. data/lib/playbook/version.rb +2 -1
  92. metadata +55 -27
  93. data/app/pb_kits/playbook/pb_form/form_builder/action_area.html.erb +0 -3
@@ -12,24 +12,31 @@ $transition: $transition_cubic;
12
12
  font-size: $text_lt_default;
13
13
  user-select: none;
14
14
  }
15
- .pb_checkbox_checkmark {
16
- position: relative;
17
- height: 22px;
18
- width: 22px;
15
+
16
+ .pb_checkbox_checkmark,
17
+ .pb_checkbox_indeterminate {
18
+ align-items: center;
19
19
  border: solid $border_light 2px;
20
20
  border-radius: $border_rad_light;
21
+ height: 22px;
22
+ position: relative;
21
23
  transition: background $transition_default ease, border-color $transition_default ease;
22
- .check_icon {
23
- opacity: 0;
24
- position: relative;
25
- top: -2px;
26
- left: 1px;
27
- height: 16px;
28
- width:16px;
24
+ width: 22px;
25
+ .check_icon,
26
+ .indeterminate_icon {
29
27
  color: $white;
30
-
28
+ height: 16px;
29
+ left: 1px;
30
+ position: relative;
31
+ display: flex;
32
+ opacity: 0;
33
+ width: 16px;
34
+ &.hidden {
35
+ display: none;
36
+ }
31
37
  }
32
38
  }
39
+
33
40
  @media (hover:hover) {
34
41
  &:hover input ~ .pb_checkbox_checkmark {
35
42
  border-color: $primary_action;
@@ -37,29 +44,31 @@ $transition: $transition_cubic;
37
44
  }
38
45
 
39
46
  input {
40
- position: relative;
41
- opacity: 0;
42
47
  cursor: pointer;
48
+ display: flex;
43
49
  height: 0;
50
+ opacity: 0;
51
+ position: relative;
44
52
  width: 0;
45
53
  left: $offscreen;
46
54
  &:focus ~ .pb_checkbox_checkmark {
47
55
  border-color: $primary_action;
48
56
  }
49
- &:checked ~ .pb_checkbox_checkmark {
57
+ &:checked ~ .pb_checkbox_checkmark,
58
+ & ~ .pb_checkbox_indeterminate {
50
59
  background-color: $primary_action;
51
60
  border-color: $primary_action;
52
61
  }
53
- &:checked ~ .pb_checkbox_checkmark {
62
+ &:checked ~ .pb_checkbox_checkmark,
63
+ & ~ .pb_checkbox_indeterminate {
54
64
  display: inline-block;
55
- .check_icon{
65
+ .check_icon,
66
+ .indeterminate_icon {
56
67
  opacity: $opacity_10;
57
68
  }
58
69
  }
59
70
  }
60
71
 
61
-
62
-
63
72
  &[class*=_dark] {
64
73
  input:checked ~ .pb_checkbox_checkmark {
65
74
  background-color: $primary_action;
@@ -3,9 +3,17 @@
3
3
  data: object.data,
4
4
  class: object.classname) do %>
5
5
  <%= content.presence || object.input %>
6
- <span class="pb_checkbox_checkmark">
7
- <%= pb_rails("icon", props: { icon: "check", id: "check_icon", classname: "check_icon", fixed_width: true}) %>
8
- </span>
6
+ <% if object.indeterminate %>
7
+ <span class="pb_checkbox_indeterminate">
8
+ <%= pb_rails("icon", props: { icon: "minus", classname: "indeterminate_icon", fixed_width: true}) %>
9
+ <%= pb_rails("icon", props: { icon: "check", classname: "check_icon hidden", fixed_width: true}) %>
10
+ </span>
11
+ <% else %>
12
+ <span class="pb_checkbox_checkmark">
13
+ <%= pb_rails("icon", props: { icon: "check", classname: "check_icon", fixed_width: true}) %>
14
+ <%= pb_rails("icon", props: { icon: "minus", classname: "indeterminate_icon hidden", fixed_width: true}) %>
15
+ </span>
16
+ <% end %>
9
17
  <span class="pb_checkbox_label">
10
18
  <%= pb_rails("body", props: { status: object.checkbox_label_status, text: object.text, dark: object.dark, margin_right: object.form_spacing ? "xs" : "" }) %>
11
19
  </span>
@@ -5,6 +5,7 @@ module Playbook
5
5
  class Checkbox < Playbook::KitBase
6
6
  prop :error, type: Playbook::Props::Boolean, default: false
7
7
  prop :checked, type: Playbook::Props::Boolean, default: false
8
+ prop :indeterminate, type: Playbook::Props::Boolean, default: false
8
9
  prop :text
9
10
  prop :value
10
11
  prop :name
@@ -21,7 +22,7 @@ module Playbook
21
22
  end
22
23
 
23
24
  def classname
24
- generate_classname("pb_checkbox_kit", checked_class) + error_class
25
+ generate_classname("pb_checkbox_kit", checked_class) + indeterminate_class + error_class
25
26
  end
26
27
 
27
28
  def input
@@ -41,6 +42,10 @@ module Playbook
41
42
  def checked_class
42
43
  checked ? "on" : "off"
43
44
  end
45
+
46
+ def indeterminate_class
47
+ indeterminate ? " indeterminate" : ""
48
+ end
44
49
  end
45
50
  end
46
51
  end
@@ -0,0 +1,94 @@
1
+ import React from 'react'
2
+ import { render, screen } from '../utilities/test-utils'
3
+
4
+ import Checkbox from './_checkbox'
5
+
6
+ const testId = 'checkbox1',
7
+ kitClass = 'pb_checkbox_kit'
8
+
9
+ test('returns namespaced class name', () => {
10
+ render(
11
+ <Checkbox
12
+ data={{ testid: testId }}
13
+ name="checkbox-name"
14
+ text="Checkbox"
15
+ value="check-box value"
16
+ />
17
+ )
18
+
19
+ const kit = screen.getByTestId(testId)
20
+ expect(kit).toHaveClass(kitClass)
21
+ })
22
+
23
+ test('returns dark class name', () => {
24
+ render(
25
+ <Checkbox
26
+ dark
27
+ data={{ testid: testId }}
28
+ name="checkbox-name"
29
+ text="Checkbox"
30
+ value="check-box value"
31
+ />
32
+ )
33
+
34
+ const kit = screen.getByTestId(testId)
35
+ expect(kit).toHaveClass(`${kitClass} dark`)
36
+ })
37
+
38
+ test('returns indeterminate class name', () => {
39
+ render(
40
+ <Checkbox
41
+ data={{ testid: testId }}
42
+ indeterminate
43
+ name="checkbox-name"
44
+ text="Checkbox"
45
+ value="check-box value"
46
+ />
47
+ )
48
+
49
+ const kit = screen.getByTestId(testId)
50
+ expect(kit).toHaveClass(`${kitClass}_indeterminate`)
51
+ })
52
+
53
+ test('has name attribute', () => {
54
+ render(
55
+ <Checkbox
56
+ data={{ testid: testId }}
57
+ name="checkbox-name"
58
+ text="Checkbox"
59
+ value="check-box value"
60
+ />
61
+ )
62
+
63
+ const kit = screen.getByTestId(testId)
64
+ expect(kit.getElementsByTagName('input')[0]).toHaveAttribute('name', 'checkbox-name')
65
+ })
66
+
67
+ test('has value attribute', () => {
68
+ render(
69
+ <Checkbox
70
+ data={{ testid: testId }}
71
+ name="checkbox-name"
72
+ text="Checkbox"
73
+ value="checkbox value"
74
+ />
75
+ )
76
+
77
+ const kit = screen.getByTestId(testId)
78
+ expect(kit.getElementsByTagName('input')[0]).toHaveAttribute('value', 'checkbox value')
79
+ })
80
+
81
+ test('has checked attribute', () => {
82
+ render(
83
+ <Checkbox
84
+ checked
85
+ data={{ testid: testId }}
86
+ name="checkbox-name"
87
+ text="Checkbox"
88
+ value="check-box value"
89
+ />
90
+ )
91
+
92
+ const kit = screen.getByTestId(testId)
93
+ expect(kit.getElementsByTagName('input')[0]).toHaveAttribute('checked')
94
+ })
@@ -24,7 +24,6 @@ const CheckboxCustom = (props) => {
24
24
  onChange={handleOnChange}
25
25
  type="checkbox"
26
26
  value="custom-value"
27
- {...props}
28
27
  />
29
28
  </Checkbox>
30
29
  </div>
@@ -0,0 +1,7 @@
1
+ <%= pb_rails("checkbox" , props: {
2
+ text: "Select ",
3
+ value: "checkbox-value",
4
+ name: "main",
5
+ indeterminate: true,
6
+ id: "test-indeterminate-js"
7
+ }) %>
@@ -0,0 +1,16 @@
1
+ import React from 'react'
2
+ import { Checkbox } from '../..'
3
+
4
+ const CheckboxIndeterminate = (props) => {
5
+ return (
6
+ <Checkbox
7
+ indeterminate
8
+ name="checkbox-name"
9
+ text="Indeterminate State"
10
+ value="check-box value"
11
+ {...props}
12
+ />
13
+ )
14
+ }
15
+
16
+ export default CheckboxIndeterminate
@@ -5,9 +5,11 @@ examples:
5
5
  - checkbox_custom: Custom Checkbox
6
6
  - checkbox_error: Default w/ Error
7
7
  - checkbox_options: Checkbox w/ Options
8
+ - checkbox_indeterminate: Indeterminate Checkbox
8
9
 
9
10
  react:
10
11
  - checkbox_default: Default
11
12
  - checkbox_checked: Load as checked
12
13
  - checkbox_custom: Custom Checkbox
13
14
  - checkbox_error: Default w/ Error
15
+ - checkbox_indeterminate: Indeterminate Checkbox
@@ -2,3 +2,4 @@ export { default as CheckboxDefault } from './_checkbox_default.jsx'
2
2
  export { default as CheckboxCustom } from './_checkbox_custom.jsx'
3
3
  export { default as CheckboxError } from './_checkbox_error.jsx'
4
4
  export { default as CheckboxChecked } from './_checkbox_checked.jsx'
5
+ export { default as CheckboxIndeterminate } from './_checkbox_indeterminate.jsx'
@@ -25,6 +25,8 @@ type DatePickerProps = {
25
25
  id?: String,
26
26
  inputAria?: object,
27
27
  inputData?: object,
28
+ inputOnChange?: (String) => void,
29
+ inputValue?: any,
28
30
  label?: String,
29
31
  maxDate: String,
30
32
  minDate: String,
@@ -55,6 +57,8 @@ const DatePicker = (props: DatePickerProps) => {
55
57
  id,
56
58
  inputAria,
57
59
  inputData,
60
+ inputOnChange,
61
+ inputValue,
58
62
  label = 'Date Picker',
59
63
  maxDate,
60
64
  minDate,
@@ -114,7 +118,6 @@ const DatePicker = (props: DatePickerProps) => {
114
118
  className={classes}
115
119
  id={id}
116
120
  >
117
- {className}
118
121
  <div className="input_wrapper">
119
122
  <TextInput
120
123
  aria={inputAria}
@@ -126,7 +129,9 @@ const DatePicker = (props: DatePickerProps) => {
126
129
  id={pickerId}
127
130
  label={hideLabel ? null : label}
128
131
  name={name}
132
+ onChange={inputOnChange}
129
133
  placeholder={placeholder}
134
+ value={inputValue}
130
135
  />
131
136
  <If condition={!hideIcon}>
132
137
  <div
@@ -166,6 +166,9 @@ const datePickerHelper = (config) => {
166
166
  picker.input.style.caretColor = 'transparent'
167
167
  picker.input.style.cursor = 'pointer'
168
168
  }
169
+
170
+ // Fix event bubbling bug on wrapper
171
+ picker.querySelector('.flatpickr-wrapper').addEventListener('click', (e) => e.stopPropogation())
169
172
  }
170
173
 
171
174
  export default datePickerHelper
@@ -0,0 +1,23 @@
1
+ /* @flow */
2
+
3
+ import React from 'react'
4
+ import { Icon } from '../'
5
+
6
+ type CloseIconProps = {
7
+ onClose: () => mixed,
8
+ }
9
+
10
+ export const CloseIcon = (props: CloseIconProps) => {
11
+ const { onClose } = props
12
+ return (
13
+ <div
14
+ className="pb_dialog_close_icon"
15
+ onClick={onClose}
16
+ >
17
+ <Icon
18
+ fixedWidth
19
+ icon="times"
20
+ />
21
+ </div>
22
+ )
23
+ }
@@ -0,0 +1,10 @@
1
+ <%= content_tag(:div,
2
+ id: object.id,
3
+ data: object.data,
4
+ class: object.classname,
5
+ aria: object.aria,
6
+ dark: object.dark) do %>
7
+ <% if object.children %>
8
+ <%= pb_rails("dialog/dialog_header", props: { children: object.children }) %>
9
+ <% end %>
10
+ <% end %>
@@ -0,0 +1,142 @@
1
+ /* @flow */
2
+
3
+ import React, { useState } from 'react'
4
+ import classnames from 'classnames'
5
+ import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
6
+ import { globalProps } from '../utilities/globalProps.js'
7
+ import Modal from 'react-modal'
8
+ import { Button } from '../'
9
+ import DialogHeader from './child_kits/_dialog_header'
10
+ import DialogFooter from './child_kits/_dialog_footer'
11
+ import DialogBody from './child_kits/_dialog_body'
12
+ import { DialogContext } from './_dialog_context'
13
+
14
+ type DialogProps = {
15
+ aria?: object,
16
+ cancelButton?: string,
17
+ children: array<React.ReactNode> | React.ReactNode | string,
18
+ className?: string,
19
+ closeable: boolean,
20
+ confirmButton?: string,
21
+ data?: object,
22
+ id?: string,
23
+ onCancel?: () => void,
24
+ onChange?: () => void,
25
+ onClose?: () => void,
26
+ onConfirm?: () => void,
27
+ opened: boolean,
28
+ shouldCloseOnOverlayClick: boolean,
29
+ size?: "sm" | "md" | "lg" | "content",
30
+ text?: string,
31
+ title?: string,
32
+ trigger?: string
33
+ }
34
+
35
+ const Dialog = (props: DialogProps) => {
36
+ const {
37
+ aria = {},
38
+ cancelButton,
39
+ confirmButton,
40
+ className,
41
+ data = {},
42
+ id,
43
+ size = 'md',
44
+ children,
45
+ opened,
46
+ onCancel = () => {},
47
+ onConfirm = () => {},
48
+ onClose = () => {},
49
+ shouldCloseOnOverlayClick = true,
50
+ text,
51
+ title,
52
+ trigger,
53
+ } = props
54
+ const ariaProps = buildAriaProps(aria)
55
+ const dataProps = buildDataProps(data)
56
+
57
+ const dialogClassNames = {
58
+ base: classnames('pb_dialog', buildCss('pb_dialog', size)),
59
+ afterOpen: 'pb_dialog_after_open',
60
+ beforeClose: 'pb_dialog_before_close',
61
+ }
62
+
63
+ const overlayClassNames = {
64
+ base: 'pb_dialog_overlay',
65
+ afterOpen: 'pb_dialog_overlay_after_open',
66
+ beforeClose: 'pb_dialog_overlay_before_close',
67
+ }
68
+
69
+ const classes = classnames(
70
+ buildCss('pb_dialog_wrapper'),
71
+ globalProps(props),
72
+ className
73
+ )
74
+
75
+ const api = {
76
+ onClose: trigger ? function(){
77
+ setTriggerOpened(false)
78
+ } : onClose,
79
+ }
80
+
81
+ const [triggerOpened, setTriggerOpened] = useState(false),
82
+ modalIsOpened = trigger ? triggerOpened : opened
83
+
84
+ if (trigger) {
85
+ const modalTrigger = document.querySelector(trigger)
86
+ modalTrigger.addEventListener('click', () => {
87
+ setTriggerOpened(true)
88
+ document.querySelector('#cancel-button').addEventListener('click', () => {
89
+ setTriggerOpened(false)
90
+ })
91
+ }, { once: true })
92
+ }
93
+
94
+ return (
95
+ <DialogContext.Provider value={api}>
96
+ <div
97
+ {...ariaProps}
98
+ {...dataProps}
99
+ className={classes}
100
+ id={id}
101
+ >
102
+ <Modal
103
+ ariaHideApp={false}
104
+ className={dialogClassNames}
105
+ closeTimeoutMS={200}
106
+ contentLabel="Minimal Modal Example"
107
+ isOpen={modalIsOpened}
108
+ onRequestClose={onClose}
109
+ overlayClassName={overlayClassNames}
110
+ shouldCloseOnOverlayClick={shouldCloseOnOverlayClick}
111
+ >
112
+ <If condition={title}>
113
+ <Dialog.Header>{title}</Dialog.Header>
114
+ </If>
115
+ <If condition={text}>
116
+ <Dialog.Body>{text}</Dialog.Body>
117
+ </If>
118
+
119
+ <If condition={cancelButton && confirmButton}>
120
+ <Dialog.Footer>
121
+ <Button onClick={onConfirm}>{confirmButton}</Button>
122
+ <Button
123
+ id="cancel-button"
124
+ onClick={onCancel}
125
+ variant="link"
126
+ >
127
+ {cancelButton}
128
+ </Button>
129
+ </Dialog.Footer>
130
+ </If>
131
+
132
+ {children}
133
+ </Modal>
134
+ </div>
135
+ </DialogContext.Provider>
136
+ )
137
+ }
138
+ Dialog.Header = DialogHeader
139
+ Dialog.Body = DialogBody
140
+ Dialog.Footer = DialogFooter
141
+
142
+ export default Dialog