playbook_ui 8.0.0.pre.alpha5 → 8.1.0.pre.alpha1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (159) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +9 -0
  3. data/app/pb_kits/playbook/_playbook.scss +10 -7
  4. data/app/pb_kits/playbook/data/menu.yml +3 -1
  5. data/app/pb_kits/playbook/index.js +3 -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_button/_button.jsx +6 -0
  29. data/app/pb_kits/playbook/pb_button/button.test.js +91 -0
  30. data/app/pb_kits/playbook/pb_button/docs/_button_default.jsx +0 -1
  31. data/app/pb_kits/playbook/pb_button_toolbar/button_toolbar.test.js +46 -0
  32. data/app/pb_kits/playbook/pb_caption/_caption.jsx +3 -2
  33. data/app/pb_kits/playbook/pb_caption/caption.rb +1 -1
  34. data/app/pb_kits/playbook/pb_card/_card.jsx +18 -3
  35. data/app/pb_kits/playbook/pb_card/card.html.erb +1 -1
  36. data/app/pb_kits/playbook/pb_card/card.rb +3 -0
  37. data/app/pb_kits/playbook/pb_card/card_header.rb +7 -7
  38. data/app/pb_kits/playbook/pb_card/docs/_card_tag.html.erb +25 -0
  39. data/app/pb_kits/playbook/pb_card/docs/_card_tag.jsx +59 -0
  40. data/app/pb_kits/playbook/pb_card/docs/example.yml +2 -0
  41. data/app/pb_kits/playbook/pb_card/docs/index.js +1 -0
  42. data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.test.js +17 -0
  43. data/app/pb_kits/playbook/pb_collapsible/_collapsible.jsx +84 -0
  44. data/app/pb_kits/playbook/pb_collapsible/_collapsible.scss +15 -0
  45. data/app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleContent.jsx +40 -0
  46. data/app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleMain.jsx +59 -0
  47. data/app/pb_kits/playbook/pb_collapsible/collapsible.html.erb +7 -0
  48. data/app/pb_kits/playbook/pb_collapsible/collapsible.rb +11 -0
  49. data/app/pb_kits/playbook/pb_collapsible/collapsible.test.js +50 -0
  50. data/app/pb_kits/playbook/pb_collapsible/collapsible_content.html.erb +7 -0
  51. data/app/pb_kits/playbook/pb_collapsible/collapsible_content.rb +17 -0
  52. data/app/pb_kits/playbook/pb_collapsible/collapsible_main.html.erb +16 -0
  53. data/app/pb_kits/playbook/pb_collapsible/collapsible_main.rb +15 -0
  54. data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_default.html.erb +10 -0
  55. data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_default.jsx +19 -0
  56. data/app/pb_kits/playbook/pb_collapsible/docs/example.yml +9 -0
  57. data/app/pb_kits/playbook/pb_collapsible/docs/index.js +1 -0
  58. data/app/pb_kits/playbook/pb_collapsible/index.js +79 -0
  59. data/app/pb_kits/playbook/pb_dashboard/commonSettings.js +2 -2
  60. data/app/pb_kits/playbook/pb_dashboard/pbChartsLightTheme.js +2 -2
  61. data/app/pb_kits/playbook/pb_date_time_stacked/_date_time_stacked.jsx +6 -2
  62. data/app/pb_kits/playbook/pb_date_time_stacked/date_time_stacked.html.erb +1 -1
  63. data/app/pb_kits/playbook/pb_dialog/_close_icon.jsx +23 -0
  64. data/app/pb_kits/playbook/pb_dialog/_dialog.html.erb +10 -0
  65. data/app/pb_kits/playbook/pb_dialog/_dialog.jsx +142 -0
  66. data/app/pb_kits/playbook/pb_dialog/_dialog.scss +133 -0
  67. data/app/pb_kits/playbook/pb_dialog/_dialog_context.jsx +3 -0
  68. data/app/pb_kits/playbook/pb_dialog/child_kits/_dialog_body.jsx +21 -0
  69. data/app/pb_kits/playbook/pb_dialog/child_kits/_dialog_footer.jsx +36 -0
  70. data/app/pb_kits/playbook/pb_dialog/child_kits/_dialog_header.jsx +68 -0
  71. data/app/pb_kits/playbook/pb_dialog/dialog.rb +47 -0
  72. data/app/pb_kits/playbook/pb_dialog/dialog.test.jsx +23 -0
  73. data/app/pb_kits/playbook/pb_dialog/dialog_header.rb +31 -0
  74. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_compound_components.jsx +53 -0
  75. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_compound_components.md +2 -0
  76. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_default.jsx +27 -0
  77. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_scrollable.jsx +27 -0
  78. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_scrollable.md +2 -0
  79. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_separators.jsx +119 -0
  80. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_separators.md +2 -0
  81. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_should_close_on_overlay.jsx +28 -0
  82. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_should_close_on_overlay.md +2 -0
  83. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_sizes.jsx +93 -0
  84. data/app/pb_kits/playbook/pb_dialog/docs/example.yml +10 -0
  85. data/app/pb_kits/playbook/pb_dialog/docs/index.js +6 -0
  86. data/app/pb_kits/playbook/pb_docs/kit_example.rb +1 -1
  87. data/app/pb_kits/playbook/pb_form/_form.scss +5 -1
  88. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +2 -2
  89. data/app/pb_kits/playbook/pb_form/form.rb +11 -2
  90. data/app/pb_kits/playbook/pb_form/form_builder.rb +4 -2
  91. data/app/pb_kits/playbook/pb_form/form_builder/action_area.rb +14 -7
  92. data/app/pb_kits/playbook/pb_form/form_with.html.erb +7 -14
  93. data/app/pb_kits/playbook/pb_form/form_with.rb +13 -6
  94. data/app/pb_kits/playbook/pb_form/simple_form.html.erb +2 -4
  95. data/app/pb_kits/playbook/pb_form/simple_form.rb +4 -0
  96. data/app/pb_kits/playbook/pb_inline/_inline.jsx +83 -0
  97. data/app/pb_kits/playbook/pb_inline/_inline.scss +58 -0
  98. data/app/pb_kits/playbook/pb_inline/docs/_inline_default.jsx +36 -0
  99. data/app/pb_kits/playbook/pb_inline/docs/_inline_input_options.jsx +58 -0
  100. data/app/pb_kits/playbook/pb_inline/docs/_inline_text_options.jsx +99 -0
  101. data/app/pb_kits/playbook/pb_inline/docs/example.yml +5 -0
  102. data/app/pb_kits/playbook/pb_inline/docs/index.js +3 -0
  103. data/app/pb_kits/playbook/pb_inline/inline.test.jsx +21 -0
  104. data/app/pb_kits/playbook/pb_nav/_item.jsx +2 -0
  105. data/app/pb_kits/playbook/pb_nav/_nav.jsx +2 -2
  106. data/app/pb_kits/playbook/pb_nav/item.html.erb +2 -2
  107. data/app/pb_kits/playbook/pb_nav/nav.html.erb +1 -1
  108. data/app/pb_kits/playbook/pb_online_status/_online_status.jsx +2 -0
  109. data/app/pb_kits/playbook/pb_online_status/online_status.html.erb +1 -1
  110. data/app/pb_kits/playbook/pb_progress_simple/_progress_simple.jsx +1 -1
  111. data/app/pb_kits/playbook/pb_progress_simple/_progress_simple.scss +5 -0
  112. data/app/pb_kits/playbook/pb_progress_simple/docs/_progress_simple_variants.html.erb +5 -0
  113. data/app/pb_kits/playbook/pb_progress_simple/docs/_progress_simple_variants.jsx +7 -0
  114. data/app/pb_kits/playbook/pb_progress_simple/docs/_progress_simple_variants.md +1 -1
  115. data/app/pb_kits/playbook/pb_progress_simple/progress_simple.rb +1 -1
  116. data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.jsx +4 -3
  117. data/app/pb_kits/playbook/pb_text_input/_text_input.jsx +3 -0
  118. data/app/pb_kits/playbook/pb_textarea/_textarea.jsx +3 -0
  119. data/app/pb_kits/playbook/pb_time_stacked/_time_stacked.jsx +43 -26
  120. data/app/pb_kits/playbook/pb_time_stacked/_time_stacked.scss +18 -0
  121. data/app/pb_kits/playbook/pb_time_stacked/docs/_time_stacked_default.html.erb +18 -5
  122. data/app/pb_kits/playbook/pb_time_stacked/docs/_time_stacked_default.jsx +10 -5
  123. data/app/pb_kits/playbook/pb_time_stacked/time_stacked.html.erb +7 -3
  124. data/app/pb_kits/playbook/pb_time_stacked/time_stacked.rb +8 -30
  125. data/app/pb_kits/playbook/pb_time_stacked/time_stacked.test.js +33 -0
  126. data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +4 -3
  127. data/app/pb_kits/playbook/pb_typeahead/_typeahead.jsx +6 -1
  128. data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.jsx +25 -2
  129. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_default.jsx +1 -0
  130. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills.jsx +7 -3
  131. data/app/pb_kits/playbook/pb_user_badge/_user_badge.jsx +1 -1
  132. data/app/pb_kits/playbook/plugins/pb_chart.js +1 -1
  133. data/app/pb_kits/playbook/react_rails_kits.js +4 -0
  134. data/app/pb_kits/playbook/tokens/_border_radius.scss +0 -10
  135. data/app/pb_kits/playbook/tokens/_colors.scss +0 -25
  136. data/app/pb_kits/playbook/tokens/_line_height.scss +0 -9
  137. data/app/pb_kits/playbook/tokens/_opacity.scss +0 -9
  138. data/app/pb_kits/playbook/tokens/_positioning.scss +0 -9
  139. data/app/pb_kits/playbook/tokens/_screen_sizes.scss +0 -9
  140. data/app/pb_kits/playbook/tokens/_shadows.scss +0 -9
  141. data/app/pb_kits/playbook/tokens/_spacing.scss +0 -10
  142. data/app/pb_kits/playbook/tokens/_typography.scss +0 -25
  143. data/app/pb_kits/playbook/tokens/exports/_border_radius.scss +10 -0
  144. data/app/pb_kits/playbook/tokens/exports/_colors.scss +26 -0
  145. data/app/pb_kits/playbook/tokens/exports/_line_height.scss +10 -0
  146. data/app/pb_kits/playbook/tokens/exports/_opacity.scss +10 -0
  147. data/app/pb_kits/playbook/tokens/exports/_positioning.scss +10 -0
  148. data/app/pb_kits/playbook/tokens/exports/_screen_sizes.scss +10 -0
  149. data/app/pb_kits/playbook/tokens/exports/_shadows.scss +10 -0
  150. data/app/pb_kits/playbook/tokens/exports/_spacing.scss +10 -0
  151. data/app/pb_kits/playbook/tokens/exports/_typography.scss +24 -0
  152. data/app/pb_kits/playbook/utilities/test-utils.js +6 -0
  153. data/app/pb_kits/playbook/vendor.js +3 -0
  154. data/dist/reset.css +1 -0
  155. data/lib/playbook/props/base.rb +1 -1
  156. data/lib/playbook/version.rb +1 -1
  157. metadata +73 -12
  158. data/app/pb_kits/playbook/pb_form/form.html.erb +0 -7
  159. data/app/pb_kits/playbook/pb_form/form_builder/action_area.html.erb +0 -3
@@ -0,0 +1,36 @@
1
+ import React, { useState } from 'react'
2
+ import { Inline, TextInput, Title } from '../../'
3
+
4
+ const InlineDefault = (props) => {
5
+ const [formValue, setFormValue] = useState('Default Value')
6
+
7
+ const handleInputChange = (event) => {
8
+ setFormValue(event.target.value)
9
+ }
10
+
11
+ return (
12
+ <div>
13
+ <Inline
14
+ {...props}
15
+ displayKit={
16
+ <Title
17
+ {...props}
18
+ kitType="Title"
19
+ size={4}
20
+ tag="h4"
21
+ text={formValue}
22
+ />
23
+ }
24
+ formInput={
25
+ <TextInput
26
+ {...props}
27
+ onChange={handleInputChange}
28
+ value={formValue}
29
+ />
30
+ }
31
+ />
32
+ </div>
33
+ )
34
+ }
35
+
36
+ export default InlineDefault
@@ -0,0 +1,58 @@
1
+ import React, { useState } from 'react'
2
+ import { Body, Inline, Textarea, TextInput } from '../../'
3
+
4
+ const InlineInputOptions = (props) => {
5
+ const [formFields, setFormFields] = useState({
6
+ inputOne: 'Input One',
7
+ inputTwo: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
8
+ })
9
+
10
+ const handleChange = ({ target }) => {
11
+ const { name, value } = target
12
+ setFormFields({ ...formFields, [name]: value })
13
+ }
14
+
15
+ return (
16
+ <div>
17
+ <Inline
18
+ {...props}
19
+ displayKit={
20
+ <Body
21
+ {...props}
22
+ kitType="Body"
23
+ text={formFields.inputOne}
24
+ />
25
+ }
26
+ formInput={
27
+ <TextInput
28
+ {...props}
29
+ name="inputOne"
30
+ onChange={handleChange}
31
+ value={formFields.inputOne}
32
+ />
33
+ }
34
+ />
35
+ <Inline
36
+ {...props}
37
+ displayKit={
38
+ <Body
39
+ {...props}
40
+ kitType="Body"
41
+ text={formFields.inputTwo}
42
+ />
43
+ }
44
+ formInput={
45
+ <Textarea
46
+ {...props}
47
+ name="inputTwo"
48
+ onChange={handleChange}
49
+ resize="auto"
50
+ value={formFields.inputTwo}
51
+ />
52
+ }
53
+ />
54
+ </div>
55
+ )
56
+ }
57
+
58
+ export default InlineInputOptions
@@ -0,0 +1,99 @@
1
+ import React, { useState } from 'react'
2
+ import { Body, Caption, Inline, TextInput, Title } from '../../'
3
+
4
+ const InlineTextOptions = (props) => {
5
+ const [formFields, setFormFields] = useState({
6
+ inputOne: 'Input One',
7
+ inputTwo: 'Input Two',
8
+ inputThree: 'Input Three',
9
+ inputFour: 'Input Four',
10
+ })
11
+
12
+ const handleChange = ({ target }) => {
13
+ const { name, value } = target
14
+ setFormFields({ ...formFields, [name]: value })
15
+ }
16
+
17
+ return (
18
+ <div>
19
+ <Inline
20
+ {...props}
21
+ displayKit={
22
+ <Title
23
+ {...props}
24
+ kitType="Title"
25
+ size={1}
26
+ tag="h1"
27
+ text={formFields.inputOne}
28
+ />
29
+ }
30
+ formInput={
31
+ <TextInput
32
+ {...props}
33
+ name="inputOne"
34
+ onChange={handleChange}
35
+ value={formFields.inputOne}
36
+ />
37
+ }
38
+ />
39
+ <Inline
40
+ {...props}
41
+ displayKit={
42
+ <Title
43
+ {...props}
44
+ kitType="Title 4"
45
+ size={4}
46
+ tag="h4"
47
+ text={formFields.inputTwo}
48
+ />
49
+ }
50
+ formInput={
51
+ <TextInput
52
+ {...props}
53
+ name="inputTwo"
54
+ onChange={handleChange}
55
+ value={formFields.inputTwo}
56
+ />
57
+ }
58
+ />
59
+ <Inline
60
+ {...props}
61
+ displayKit={
62
+ <Body
63
+ {...props}
64
+ kitType="Body"
65
+ text={formFields.inputThree}
66
+ />
67
+ }
68
+ formInput={
69
+ <TextInput
70
+ {...props}
71
+ name="inputThree"
72
+ onChange={handleChange}
73
+ value={formFields.inputThree}
74
+ />
75
+ }
76
+ />
77
+ <Inline
78
+ {...props}
79
+ displayKit={
80
+ <Caption
81
+ {...props}
82
+ kitType="Caption"
83
+ text={formFields.inputFour}
84
+ />
85
+ }
86
+ formInput={
87
+ <TextInput
88
+ {...props}
89
+ name="inputFour"
90
+ onChange={handleChange}
91
+ value={formFields.inputFour}
92
+ />
93
+ }
94
+ />
95
+ </div>
96
+ )
97
+ }
98
+
99
+ export default InlineTextOptions
@@ -0,0 +1,5 @@
1
+ examples:
2
+ react:
3
+ - inline_default: Default
4
+ - inline_text_options: Text Options
5
+ - inline_input_options: Input Options
@@ -0,0 +1,3 @@
1
+ export { default as InlineDefault } from './_inline_default.jsx'
2
+ export { default as InlineTextOptions } from './_inline_text_options.jsx'
3
+ export { default as InlineInputOptions } from './_inline_input_options.jsx'
@@ -0,0 +1,21 @@
1
+ import React from 'react'
2
+ import { render, screen } from '../utilities/test-utils'
3
+ import { Inline } from '../'
4
+
5
+ /* See these resources for more testing info:
6
+ - https://github.com/testing-library/jest-dom#usage for useage and examples
7
+ - https://jestjs.io/docs/en/using-matchers
8
+ */
9
+
10
+ test('generated scaffold test - update me', () => {
11
+ const testId = "test1"
12
+
13
+ render(
14
+ <Inline
15
+ data={{ testid: testId }}
16
+ />
17
+ )
18
+
19
+ const kit = screen.getByTestId(testId)
20
+ expect(kit).toBeInTheDocument()
21
+ })
@@ -75,6 +75,7 @@ const NavItem = (props: NavItemProps) => {
75
75
  key={iconLeft}
76
76
  >
77
77
  <Icon
78
+ aria={{ label: iconLeft }}
78
79
  className="pb_nav_list_item_icon_left"
79
80
  fixedWidth
80
81
  icon={iconLeft}
@@ -90,6 +91,7 @@ const NavItem = (props: NavItemProps) => {
90
91
  key={iconRight}
91
92
  >
92
93
  <Icon
94
+ aria={{ label: iconRight }}
93
95
  className="pb_nav_list_item_icon_right"
94
96
  fixedWidth
95
97
  icon={iconRight}
@@ -48,7 +48,7 @@ const Nav = (props: NavProps) => {
48
48
  )
49
49
 
50
50
  return (
51
- <div
51
+ <nav
52
52
  {...ariaProps}
53
53
  {...dataProps}
54
54
  className={cardCss}
@@ -69,7 +69,7 @@ const Nav = (props: NavProps) => {
69
69
  </div>
70
70
  </If>
71
71
  <ul>{children}</ul>
72
- </div>
72
+ </nav>
73
73
  )
74
74
  }
75
75
 
@@ -9,13 +9,13 @@
9
9
  <%= pb_rails("image", props: { url: object.image_url, classname: "pb_nav_img_wrapper" }) %>
10
10
  <% end %>
11
11
  <% if object.icon_left %>
12
- <%= pb_rails("icon", props: { icon: object.icon_left, classname: "pb_nav_list_item_icon_left", fixed_width: true}) %>
12
+ <%= pb_rails("icon", props: { aria: { label: object.icon_left }, icon: object.icon_left, classname: "pb_nav_list_item_icon_left", fixed_width: true}) %>
13
13
  <% end %>
14
14
  <span class="pb_nav_list_item_text">
15
15
  <%= object.text %><%= content.presence %>
16
16
  </span>
17
17
  <% if object.icon_right %>
18
- <%= pb_rails("icon", props: { icon: object.icon_right, classname: "pb_nav_list_item_icon_right", fixed_width: true}) %>
18
+ <%= pb_rails("icon", props: { aria: { label: object.icon_right }, icon: object.icon_right, classname: "pb_nav_list_item_icon_right", fixed_width: true}) %>
19
19
  <% end %>
20
20
  <% end %>
21
21
  <% end %>
@@ -1,4 +1,4 @@
1
- <%= content_tag(:div,
1
+ <%= content_tag(:nav,
2
2
  aria: object.aria,
3
3
  class: object.classname,
4
4
  data: object.data,
@@ -23,6 +23,8 @@ const OnlineStatus = (props: OnlineStatusProps) => {
23
23
  status = 'offline',
24
24
  } = props
25
25
 
26
+ aria.label = status
27
+
26
28
  const ariaProps = buildAriaProps(aria)
27
29
  const dataProps = buildDataProps(data)
28
30
  const classes = classnames(buildCss('pb_online_status_kit', status), globalProps(props), className)
@@ -1,5 +1,5 @@
1
1
  <%= content_tag(:div,
2
- aria: object.aria,
2
+ aria: object.aria.merge!(label: object.status),
3
3
  class: object.classname,
4
4
  data: object.data,
5
5
  id: object.id) do %>
@@ -14,7 +14,7 @@ type ProgressSimpleProps = {
14
14
  muted: boolean,
15
15
  percent: string,
16
16
  value: number,
17
- variant?: "default" | "positive" | "negative",
17
+ variant?: "default" | "positive" | "negative" | "warning",
18
18
  width: string,
19
19
  }
20
20
 
@@ -33,6 +33,11 @@ $pb_progress_simple_height: 4px;
33
33
  background: $error;
34
34
  }
35
35
  }
36
+ &[class*=_warning] {
37
+ .progress_simple_value {
38
+ background: $warning;
39
+ }
40
+ }
36
41
 
37
42
  [class^=progress_simple_value] {
38
43
  width: 0%;
@@ -7,3 +7,8 @@
7
7
  <br>
8
8
 
9
9
  <%= pb_rails("progress_simple", props: { percent: 10, variant: "negative" }) %>
10
+
11
+ <br>
12
+
13
+ <%= pb_rails("progress_simple", props: { percent: 40, variant: "warning" }) %>
14
+
@@ -19,6 +19,13 @@ const ProgressSimpleVariants = () => {
19
19
  percent={10}
20
20
  variant="negative"
21
21
  />
22
+
23
+ <br />
24
+
25
+ <ProgressSimple
26
+ percent={40}
27
+ variant="warning"
28
+ />
22
29
  </div>
23
30
  )
24
31
  }
@@ -1 +1 @@
1
- Progress Simple can pass colors - primary, green and red. Variants names are `default`, `positive`, and `negative` respectively.
1
+ Progress Simple can pass colors - primary, green, red, and yellow. Variants names are `default`, `positive`, `negative`, and `warning`, respectively.
@@ -18,7 +18,7 @@ module Playbook
18
18
  # could this possibly be [sm, md, lg]?
19
19
  prop :width, default: "100%"
20
20
  prop :variant, type: Playbook::Props::Enum,
21
- values: %w[default positive negative],
21
+ values: %w[default positive negative warning],
22
22
  default: "default"
23
23
 
24
24
  def number_value
@@ -1,6 +1,6 @@
1
1
  /* @flow */
2
2
 
3
- import React, { useEffect, useRef } from 'react'
3
+ import React, { forwardRef, useEffect, useRef } from 'react'
4
4
  import classnames from 'classnames'
5
5
  import useFocus from './useFocus.js'
6
6
  import Trix from 'trix'
@@ -22,7 +22,7 @@ type RichTextEditorProps = {
22
22
  value?: string,
23
23
  }
24
24
 
25
- const RichTextEditor = (props: RichTextEditorProps) => {
25
+ const RichTextEditor = (props: RichTextEditorProps, ref: React.ElementRef<"input">) => {
26
26
  const {
27
27
  aria = {},
28
28
  className,
@@ -120,6 +120,7 @@ const RichTextEditor = (props: RichTextEditorProps) => {
120
120
  <input
121
121
  id={id}
122
122
  name={name}
123
+ ref={ref}
123
124
  type="hidden"
124
125
  value={value}
125
126
  />
@@ -133,4 +134,4 @@ const RichTextEditor = (props: RichTextEditorProps) => {
133
134
  )
134
135
  }
135
136
 
136
- export default RichTextEditor
137
+ export default forwardRef(RichTextEditor)
@@ -19,6 +19,7 @@ type TextInputProps = {
19
19
  id?: string,
20
20
  name: string,
21
21
  label: string,
22
+ onBlur: (String) => void,
22
23
  onChange: (String) => void,
23
24
  placeholder: string,
24
25
  required?: boolean,
@@ -41,6 +42,7 @@ const TextInput = (
41
42
  id,
42
43
  name,
43
44
  label,
45
+ onBlur = () => {},
44
46
  onChange = () => {},
45
47
  placeholder,
46
48
  required,
@@ -79,6 +81,7 @@ const TextInput = (
79
81
  disabled={disabled}
80
82
  id={id}
81
83
  name={name}
84
+ onBlur={onBlur}
82
85
  onChange={onChange}
83
86
  placeholder={placeholder}
84
87
  ref={ref}
@@ -24,6 +24,7 @@ type TextareaProps = {
24
24
  required?: boolean,
25
25
  rows?: number,
26
26
  resize: 'none' | 'both' | 'horizontal' | 'vertical' | 'auto',
27
+ onBlur?: InputCallback<HTMLTextAreaElement>,
27
28
  onChange?: InputCallback<HTMLTextAreaElement>,
28
29
  }
29
30
 
@@ -37,6 +38,7 @@ const Textarea = ({
37
38
  label,
38
39
  maxCharacters,
39
40
  name,
41
+ onBlur = () => {},
40
42
  onChange = () => {},
41
43
  placeholder,
42
44
  required,
@@ -75,6 +77,7 @@ const Textarea = ({
75
77
  className="pb_textarea_kit"
76
78
  disabled={disabled}
77
79
  name={name}
80
+ onBlur={onBlur}
78
81
  onChange={onChange}
79
82
  placeholder={placeholder}
80
83
  ref={ref}