playbook_ui 3.4.0 → 3.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +1 -0
  3. data/app/pb_kits/playbook/index.js +1 -0
  4. data/app/pb_kits/playbook/packs/examples.js +3 -0
  5. data/app/pb_kits/playbook/pb_body/_body_mixins.scss +6 -0
  6. data/app/pb_kits/playbook/pb_checkbox/_checkbox.html.erb +1 -1
  7. data/app/pb_kits/playbook/pb_checkbox/_checkbox.jsx +11 -3
  8. data/app/pb_kits/playbook/pb_checkbox/_checkbox.scss +12 -0
  9. data/app/pb_kits/playbook/pb_checkbox/checkbox.rb +10 -1
  10. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_dark_error.html.erb +7 -0
  11. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_dark_error.jsx +18 -0
  12. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_error.html.erb +6 -0
  13. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_error.jsx +17 -0
  14. data/app/pb_kits/playbook/pb_checkbox/docs/example.yml +4 -0
  15. data/app/pb_kits/playbook/pb_checkbox/docs/index.js +2 -0
  16. data/app/pb_kits/playbook/pb_enhanced_element/element_observer.js +67 -0
  17. data/app/pb_kits/playbook/pb_enhanced_element/index.js +62 -0
  18. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -1
  19. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form.html.erb +1 -1
  20. data/app/pb_kits/playbook/pb_form/form_builder/simple_form_builder.rb +1 -1
  21. data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.html.erb +1 -1
  22. data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.jsx +3 -1
  23. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_dark.html.erb +1 -0
  24. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_dark.jsx +1 -0
  25. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_default.html.erb +1 -0
  26. data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_default.jsx +1 -0
  27. data/app/pb_kits/playbook/pb_home_address_street/home_address_street.rb +1 -0
  28. data/app/pb_kits/playbook/pb_list/_item.html.erb +5 -3
  29. data/app/pb_kits/playbook/pb_list/_list.html.erb +7 -3
  30. data/app/pb_kits/playbook/pb_list/item.rb +2 -0
  31. data/app/pb_kits/playbook/pb_list/list.rb +2 -0
  32. data/app/pb_kits/playbook/pb_radio/_radio.html.erb +1 -1
  33. data/app/pb_kits/playbook/pb_radio/_radio.jsx +7 -2
  34. data/app/pb_kits/playbook/pb_radio/_radio.scss +15 -5
  35. data/app/pb_kits/playbook/pb_radio/docs/_radio_dark_error.html.erb +7 -0
  36. data/app/pb_kits/playbook/pb_radio/docs/_radio_dark_error.jsx +17 -0
  37. data/app/pb_kits/playbook/pb_radio/docs/_radio_error.html.erb +6 -0
  38. data/app/pb_kits/playbook/pb_radio/docs/_radio_error.jsx +16 -0
  39. data/app/pb_kits/playbook/pb_radio/docs/example.yml +4 -3
  40. data/app/pb_kits/playbook/pb_radio/docs/index.js +2 -0
  41. data/app/pb_kits/playbook/pb_radio/radio.rb +16 -8
  42. data/app/pb_kits/playbook/pb_select/_select.html.erb +2 -0
  43. data/app/pb_kits/playbook/pb_select/_select.jsx +27 -16
  44. data/app/pb_kits/playbook/pb_select/_select.scss +22 -1
  45. data/app/pb_kits/playbook/pb_select/docs/_select_dark_error.html.erb +25 -0
  46. data/app/pb_kits/playbook/pb_select/docs/_select_dark_error.jsx +37 -0
  47. data/app/pb_kits/playbook/pb_select/docs/_select_error.html.erb +24 -0
  48. data/app/pb_kits/playbook/pb_select/docs/_select_error.jsx +35 -0
  49. data/app/pb_kits/playbook/pb_select/docs/example.yml +4 -0
  50. data/app/pb_kits/playbook/pb_select/docs/index.js +2 -0
  51. data/app/pb_kits/playbook/pb_select/select.rb +14 -11
  52. data/app/pb_kits/playbook/pb_text_input/_text_input.html.erb +7 -1
  53. data/app/pb_kits/playbook/pb_text_input/_text_input.jsx +22 -9
  54. data/app/pb_kits/playbook/pb_text_input/_text_input.scss +19 -0
  55. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_dark_error.html.erb +14 -0
  56. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_dark_error.jsx +18 -0
  57. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_error.html.erb +2 -0
  58. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_error.jsx +17 -0
  59. data/app/pb_kits/playbook/pb_text_input/docs/example.yml +4 -0
  60. data/app/pb_kits/playbook/pb_text_input/docs/index.js +2 -0
  61. data/app/pb_kits/playbook/pb_text_input/text_input.rb +12 -3
  62. data/app/pb_kits/playbook/pb_textarea/_textarea.html.erb +6 -0
  63. data/app/pb_kits/playbook/pb_textarea/_textarea.jsx +15 -5
  64. data/app/pb_kits/playbook/pb_textarea/_textarea.scss +14 -0
  65. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_dark_error.html.erb +6 -0
  66. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_dark_error.jsx +20 -0
  67. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_error.html.erb +1 -0
  68. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_error.jsx +19 -0
  69. data/app/pb_kits/playbook/pb_textarea/docs/example.yml +4 -0
  70. data/app/pb_kits/playbook/pb_textarea/docs/index.js +2 -0
  71. data/app/pb_kits/playbook/pb_textarea/textarea.rb +13 -6
  72. data/app/pb_kits/playbook/pb_typeahead/_typeahead.html.erb +16 -0
  73. data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +52 -0
  74. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_default.html.erb +51 -0
  75. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +3 -0
  76. data/app/pb_kits/playbook/pb_typeahead/index.js +158 -0
  77. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +28 -0
  78. data/app/pb_kits/playbook/tokens/_colors.scss +2 -0
  79. data/lib/playbook/version.rb +1 -1
  80. metadata +30 -2
@@ -9,6 +9,7 @@ const HomeAddressStreetDark = () => {
9
9
  city="West Chester"
10
10
  dark
11
11
  homeId={8250263}
12
+ homeUrl="https://powerhrg.com/"
12
13
  state="PA"
13
14
  territory="PHL"
14
15
  zipcode="19382"
@@ -3,6 +3,7 @@
3
3
  address_cont: "Apt M18",
4
4
  city: "West Chester",
5
5
  home_id: 8250263,
6
+ home_url: "https://powerhrg.com/",
6
7
  house_style: "Colonial",
7
8
  state: "PA",
8
9
  zipcode: "19382",
@@ -8,6 +8,7 @@ const HomeAddressStreetDefault = () => {
8
8
  addressCont="Apt M18"
9
9
  city="West Chester"
10
10
  homeId={8250263}
11
+ homeUrl="https://powerhrg.com/"
11
12
  houseStyle="Colonial"
12
13
  state="PA"
13
14
  territory="PHL"
@@ -11,6 +11,7 @@ module Playbook
11
11
  prop :address_cont
12
12
  prop :city
13
13
  prop :home_id, type: Playbook::Props::Number
14
+ prop :home_url
14
15
  prop :house_style
15
16
  prop :state
16
17
  prop :zipcode
@@ -1,6 +1,8 @@
1
1
  <%= content_tag(:li,
2
- id: object.id,
3
- data: object.data,
4
- class: object.classname) do %>
2
+ id: object.id,
3
+ data: object.data,
4
+ class: object.classname,
5
+ tabindex: object.tabindex
6
+ ) do %>
5
7
  <%= capture(&object.children) %>
6
8
  <% end %>
@@ -1,8 +1,12 @@
1
1
  <%= content_tag(:div, class: object.list_classname) do %>
2
2
  <%= content_tag(:"#{object.ordered_class}",
3
- id: object.id,
4
- data: object.data,
5
- class: object.classname) do %>
3
+ id: object.id,
4
+ data: object.data,
5
+ class: object.classname,
6
+ role: object.role,
7
+ aria: object.aria,
8
+ tabindex: object.tabindex
9
+ ) do %>
6
10
  <%= capture(&object.children) %>
7
11
  <% end %>
8
12
  <% end %>
@@ -5,6 +5,8 @@ module Playbook
5
5
  class Item
6
6
  include Playbook::Props
7
7
 
8
+ prop :tabindex
9
+
8
10
  partial "pb_list/item"
9
11
 
10
12
  def classname
@@ -19,6 +19,8 @@ module Playbook
19
19
  default: false
20
20
  prop :xpadding, type: Playbook::Props::Boolean,
21
21
  default: false
22
+ prop :role
23
+ prop :tabindex
22
24
 
23
25
  def list_classname
24
26
  [
@@ -12,5 +12,5 @@
12
12
  <% end %>
13
13
 
14
14
  <span class="pb_radio_button"></span>
15
- <%= pb_rails("body", props: { text: object.text, dark: object.dark}) %>
15
+ <%= pb_rails("body", props: { status: object.body_status, text: object.text, dark: object.dark}) %>
16
16
  <% end %>
@@ -7,6 +7,7 @@ import Body from '../pb_body/_body.jsx'
7
7
  type RadioProps = {
8
8
  className?: String,
9
9
  data?: String,
10
+ error?: Boolean,
10
11
  id?: String,
11
12
  label: String,
12
13
  name: String,
@@ -22,9 +23,10 @@ const Radio = (props: RadioProps) => {
22
23
  const {
23
24
  checked = false,
24
25
  children,
25
- className,
26
+ className = '',
26
27
  dark = false,
27
28
  data,
29
+ error = false,
28
30
  id,
29
31
  label,
30
32
  name,
@@ -33,9 +35,11 @@ const Radio = (props: RadioProps) => {
33
35
  onChange = () => {},
34
36
  } = props
35
37
 
38
+ const errorClass = error ? 'error' : ''
39
+
36
40
  return (
37
41
  <label
38
- className={'pb_radio_kit' + (dark === true ? '_dark ' : ' ') + className}
42
+ className={'pb_radio_kit' + (dark === true ? '_dark ' : ' ') + errorClass + ' ' + className}
39
43
  htmlFor={id}
40
44
  >
41
45
  <If condition={children}>
@@ -54,6 +58,7 @@ const Radio = (props: RadioProps) => {
54
58
  <span className="pb_radio_button" />
55
59
  <Body
56
60
  dark={dark}
61
+ status={error ? 'negative' : null}
57
62
  text={label}
58
63
  />
59
64
  </label>
@@ -29,12 +29,22 @@
29
29
  }
30
30
  }
31
31
  &[class*=_dark] {
32
- input:checked ~ .pb_radio_button {
33
- border: 6px solid $primary;
34
- }
32
+ input:checked ~ .pb_radio_button {
33
+ border: 6px solid $primary;
34
+ }
35
35
 
36
- &:hover .pb_radio_button {
37
- border-color: $primary_action;
36
+ &:hover .pb_radio_button {
37
+ border-color: $primary_action;
38
+ }
39
+ &.error {
40
+ > .pb_radio_button {
41
+ border-color: $error_dark;
38
42
  }
39
43
  }
44
+ }
45
+ &.error {
46
+ > .pb_radio_button {
47
+ border-color: $error;
48
+ }
49
+ }
40
50
  }
@@ -0,0 +1,7 @@
1
+ <%= pb_rails("radio", props: {
2
+ dark: true,
3
+ error: true,
4
+ text: "Power",
5
+ name: "group 1",
6
+ value: "Power"
7
+ }) %>
@@ -0,0 +1,17 @@
1
+ import React from 'react'
2
+ import { Radio } from '../..'
3
+
4
+ const RadioDarkError = () => {
5
+ return (
6
+ <div>
7
+ <Radio
8
+ dark
9
+ error
10
+ label="Power"
11
+ name="Group2"
12
+ value="Power"
13
+ />
14
+ </div>
15
+ )
16
+ }
17
+ export default RadioDarkError
@@ -0,0 +1,6 @@
1
+ <%= pb_rails("radio", props: {
2
+ error: true,
3
+ text: "Power",
4
+ name: "group 1",
5
+ value: "Power"
6
+ }) %>
@@ -0,0 +1,16 @@
1
+ import React from 'react'
2
+ import { Radio } from '../..'
3
+
4
+ const RadioError = () => {
5
+ return (
6
+ <div>
7
+ <Radio
8
+ error
9
+ label="Power"
10
+ name="Group2"
11
+ value="Power"
12
+ />
13
+ </div>
14
+ )
15
+ }
16
+ export default RadioError
@@ -4,11 +4,12 @@ examples:
4
4
  - radio_default: Default
5
5
  - radio_dark: Dark
6
6
  - radio_custom: Custom
7
-
8
-
9
-
7
+ - radio_error: With Error
8
+ - radio_dark_error: With Error
10
9
 
11
10
  react:
12
11
  - radio_default: Default
13
12
  - radio_dark: Dark
14
13
  - radio_custom: Custom
14
+ - radio_error: With Error
15
+ - radio_dark_error: Dark With Error
@@ -1,3 +1,5 @@
1
1
  export { default as RadioDefault } from './_radio_default.jsx'
2
2
  export { default as RadioDark } from './_radio_dark.jsx'
3
3
  export { default as RadioCustom } from './_radio_custom.jsx'
4
+ export { default as RadioError } from './_radio_error.jsx'
5
+ export { default as RadioDarkError } from './_radio_dark_error.jsx'
@@ -14,16 +14,18 @@ module Playbook
14
14
  prop :checked, type: Playbook::Props::Boolean,
15
15
  default: false
16
16
  prop :dark, type: Playbook::Props::Boolean,
17
- default: false
17
+ default: false
18
+ prop :error, type: Playbook::Props::Boolean,
19
+ default: false
18
20
  prop :name, type: Playbook::Props::String,
19
- default: "radio_name"
21
+ default: "radio_name"
20
22
  prop :text, type: Playbook::Props::String,
21
- default: "Radio Text"
23
+ default: "Radio Text"
22
24
  prop :value, type: Playbook::Props::String,
23
- default: "radio_text"
25
+ default: "radio_text"
24
26
  prop :object
25
27
  def classname
26
- generate_classname("pb_radio_kit", dark_class)
28
+ generate_classname("pb_radio_kit", dark_class) + error_class
27
29
  end
28
30
 
29
31
  def input
@@ -31,13 +33,19 @@ module Playbook
31
33
  end
32
34
 
33
35
  def selected
34
- if checked == true
35
- "checked"
36
- end
36
+ "checked" if checked == true
37
+ end
38
+
39
+ def body_status
40
+ error ? "negative" : nil
37
41
  end
38
42
 
39
43
  private
40
44
 
45
+ def error_class
46
+ error ? " error" : ""
47
+ end
48
+
41
49
  def dark_class
42
50
  dark ? "dark" : nil
43
51
  end
@@ -11,6 +11,7 @@
11
11
  <label class="pb_select_kit_wrapper" for="<%= object.name %>">
12
12
  <% if object.children %>
13
13
  <%= capture(&object.children) %>
14
+ <%= pb_rails("body", props: { dark: object.dark, status: "negative", text: object.error }) %>
14
15
  <% else %>
15
16
  <%= select_tag(
16
17
  object.name,
@@ -27,6 +28,7 @@
27
28
  include_blank: object.include_blank,
28
29
  )
29
30
  %>
31
+ <%= pb_rails("body", props: { dark: object.dark, status: "negative", text: object.error }) %>
30
32
  <% end %>
31
33
  <%= pb_rails("icon", props: { icon: "angle-down", fixed_width: true, classname: "pb_select_kit_caret"}) %>
32
34
  </label>
@@ -3,6 +3,7 @@
3
3
  import React from 'react'
4
4
 
5
5
  import {
6
+ Body,
6
7
  Caption,
7
8
  Icon,
8
9
  } from '../'
@@ -14,22 +15,23 @@ import {
14
15
  } from '../utilities/props'
15
16
 
16
17
  type SelectProps = {
17
- className?: String,
18
18
  aria?: object,
19
+ blankSelection?: String,
20
+ children?: Array<React.ReactChild>,
21
+ className?: String,
22
+ dark?: Boolean,
19
23
  data?: object,
24
+ disabled?: Boolean,
25
+ error?: String,
20
26
  onChange: PropTypes.func,
21
- children?: Array<React.ReactChild>,
22
27
  options: Array<Object>,
23
28
  id?: String,
29
+ includeBlank?: String,
24
30
  label?: String,
25
- value?: String,
31
+ multiple?: Boolean,
26
32
  name?: String,
27
- dark?: Boolean,
28
- includeBlank?: String,
29
- blankSelection?: String,
30
33
  required?: Boolean,
31
- disabled?: Boolean,
32
- multiple?: Boolean,
34
+ value?: String,
33
35
  }
34
36
 
35
37
  const optionsArray = ({ options = [] }: SelectProps) => {
@@ -49,24 +51,26 @@ const optionsArray = ({ options = [] }: SelectProps) => {
49
51
 
50
52
  const Select = (props: SelectProps) => {
51
53
  const {
54
+ aria = {},
55
+ blankSelection,
52
56
  children,
53
- label,
54
57
  dark = false,
55
- name,
56
- options,
57
- blankSelection,
58
- required = false,
58
+ data = {},
59
59
  disabled = false,
60
+ error,
61
+ label,
60
62
  multiple = false,
63
+ name,
61
64
  onChange = () => {},
62
- aria = {},
63
- data = {},
65
+ options,
66
+ required = false,
64
67
  } = props
65
68
 
69
+ const errorClass = error ? ' error' : ''
66
70
  const css = buildCss({
67
71
  'pb_select': true,
68
72
  'dark': dark === true,
69
- })
73
+ }) + errorClass
70
74
  const ariaProps = buildAriaProps(aria)
71
75
  const dataProps = buildDataProps(data)
72
76
  const optionsList = optionsArray({ options })
@@ -109,6 +113,13 @@ const Select = (props: SelectProps) => {
109
113
  {optionsList}
110
114
  </select>
111
115
  </If>
116
+ <If condition={error}>
117
+ <Body
118
+ dark={dark}
119
+ status="negative"
120
+ text={error}
121
+ />
122
+ </If>
112
123
  <Icon
113
124
  className="pb_select_kit_caret"
114
125
  fixedWidth
@@ -17,7 +17,7 @@
17
17
  opacity: 0.5;
18
18
  }
19
19
  color: transparent !important;
20
- text-shadow: 0 0 0 $text_lt_default !important;
20
+ text-shadow: 0 0 0 $text_lt_default;
21
21
  }
22
22
  option {
23
23
  color: $text_lt_default;
@@ -48,9 +48,30 @@
48
48
  &:hover, &:active, &:focus {
49
49
  background-color: tint($focus_input_dark, 5%);
50
50
  }
51
+ text-shadow: 0 0 0 $text_dk_default;
51
52
  }
52
53
  .pb_select_kit_caret {
53
54
  color: $white;
54
55
  }
56
+ &.error {
57
+ .pb_select_kit_wrapper {
58
+ > select:first-child {
59
+ border-color: $error_dark;
60
+ }
61
+ }
62
+ }
63
+ }
64
+ &.error {
65
+ .pb_select_kit_wrapper {
66
+ [class*=pb_body_kit] {
67
+ margin-top: $space_xs / 2;
68
+ }
69
+ > select:first-child {
70
+ border-color: $error;
71
+ }
72
+ .pb_select_kit_caret {
73
+ top: 35%;
74
+ }
75
+ }
55
76
  }
56
77
  }
@@ -0,0 +1,25 @@
1
+ <%= pb_rails("select", props: {
2
+ dark: true,
3
+ error: "Please make a valid selection",
4
+ label: "Favorite Food",
5
+ name: "food",
6
+ options: [
7
+ {
8
+ value: "1",
9
+ value_text: "Burgers",
10
+ },
11
+ {
12
+ value: "2",
13
+ selected: true,
14
+ value_text: "Pizza",
15
+ },
16
+ {
17
+ value: "3",
18
+ value_text: "Tacos",
19
+ },
20
+ {
21
+ value: "4",
22
+ value_text: "BBQ",
23
+ },
24
+ ]
25
+ }) %>