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.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/_playbook.scss +1 -0
- data/app/pb_kits/playbook/index.js +1 -0
- data/app/pb_kits/playbook/packs/examples.js +3 -0
- data/app/pb_kits/playbook/pb_body/_body_mixins.scss +6 -0
- data/app/pb_kits/playbook/pb_checkbox/_checkbox.html.erb +1 -1
- data/app/pb_kits/playbook/pb_checkbox/_checkbox.jsx +11 -3
- data/app/pb_kits/playbook/pb_checkbox/_checkbox.scss +12 -0
- data/app/pb_kits/playbook/pb_checkbox/checkbox.rb +10 -1
- data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_dark_error.html.erb +7 -0
- data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_dark_error.jsx +18 -0
- data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_error.html.erb +6 -0
- data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_error.jsx +17 -0
- data/app/pb_kits/playbook/pb_checkbox/docs/example.yml +4 -0
- data/app/pb_kits/playbook/pb_checkbox/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_enhanced_element/element_observer.js +67 -0
- data/app/pb_kits/playbook/pb_enhanced_element/index.js +62 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -1
- data/app/pb_kits/playbook/pb_form/docs/_form_simple_form.html.erb +1 -1
- data/app/pb_kits/playbook/pb_form/form_builder/simple_form_builder.rb +1 -1
- data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.html.erb +1 -1
- data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.jsx +3 -1
- data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_dark.html.erb +1 -0
- data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_dark.jsx +1 -0
- data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_default.html.erb +1 -0
- data/app/pb_kits/playbook/pb_home_address_street/docs/_home_address_street_default.jsx +1 -0
- data/app/pb_kits/playbook/pb_home_address_street/home_address_street.rb +1 -0
- data/app/pb_kits/playbook/pb_list/_item.html.erb +5 -3
- data/app/pb_kits/playbook/pb_list/_list.html.erb +7 -3
- data/app/pb_kits/playbook/pb_list/item.rb +2 -0
- data/app/pb_kits/playbook/pb_list/list.rb +2 -0
- data/app/pb_kits/playbook/pb_radio/_radio.html.erb +1 -1
- data/app/pb_kits/playbook/pb_radio/_radio.jsx +7 -2
- data/app/pb_kits/playbook/pb_radio/_radio.scss +15 -5
- data/app/pb_kits/playbook/pb_radio/docs/_radio_dark_error.html.erb +7 -0
- data/app/pb_kits/playbook/pb_radio/docs/_radio_dark_error.jsx +17 -0
- data/app/pb_kits/playbook/pb_radio/docs/_radio_error.html.erb +6 -0
- data/app/pb_kits/playbook/pb_radio/docs/_radio_error.jsx +16 -0
- data/app/pb_kits/playbook/pb_radio/docs/example.yml +4 -3
- data/app/pb_kits/playbook/pb_radio/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_radio/radio.rb +16 -8
- data/app/pb_kits/playbook/pb_select/_select.html.erb +2 -0
- data/app/pb_kits/playbook/pb_select/_select.jsx +27 -16
- data/app/pb_kits/playbook/pb_select/_select.scss +22 -1
- data/app/pb_kits/playbook/pb_select/docs/_select_dark_error.html.erb +25 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_dark_error.jsx +37 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_error.html.erb +24 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_error.jsx +35 -0
- data/app/pb_kits/playbook/pb_select/docs/example.yml +4 -0
- data/app/pb_kits/playbook/pb_select/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_select/select.rb +14 -11
- data/app/pb_kits/playbook/pb_text_input/_text_input.html.erb +7 -1
- data/app/pb_kits/playbook/pb_text_input/_text_input.jsx +22 -9
- data/app/pb_kits/playbook/pb_text_input/_text_input.scss +19 -0
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_dark_error.html.erb +14 -0
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_dark_error.jsx +18 -0
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_error.html.erb +2 -0
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_error.jsx +17 -0
- data/app/pb_kits/playbook/pb_text_input/docs/example.yml +4 -0
- data/app/pb_kits/playbook/pb_text_input/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_text_input/text_input.rb +12 -3
- data/app/pb_kits/playbook/pb_textarea/_textarea.html.erb +6 -0
- data/app/pb_kits/playbook/pb_textarea/_textarea.jsx +15 -5
- data/app/pb_kits/playbook/pb_textarea/_textarea.scss +14 -0
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_dark_error.html.erb +6 -0
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_dark_error.jsx +20 -0
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_error.html.erb +1 -0
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_error.jsx +19 -0
- data/app/pb_kits/playbook/pb_textarea/docs/example.yml +4 -0
- data/app/pb_kits/playbook/pb_textarea/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_textarea/textarea.rb +13 -6
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.html.erb +16 -0
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +52 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_default.html.erb +51 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +3 -0
- data/app/pb_kits/playbook/pb_typeahead/index.js +158 -0
- data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +28 -0
- data/app/pb_kits/playbook/tokens/_colors.scss +2 -0
- data/lib/playbook/version.rb +1 -1
- metadata +30 -2
@@ -1,8 +1,12 @@
|
|
1
1
|
<%= content_tag(:div, class: object.list_classname) do %>
|
2
2
|
<%= content_tag(:"#{object.ordered_class}",
|
3
|
-
|
4
|
-
|
5
|
-
|
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 %>
|
@@ -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
|
-
|
33
|
-
|
34
|
-
|
32
|
+
input:checked ~ .pb_radio_button {
|
33
|
+
border: 6px solid $primary;
|
34
|
+
}
|
35
35
|
|
36
|
-
|
37
|
-
|
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
|
}
|
@@ -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
|
-
|
17
|
+
default: false
|
18
|
+
prop :error, type: Playbook::Props::Boolean,
|
19
|
+
default: false
|
18
20
|
prop :name, type: Playbook::Props::String,
|
19
|
-
|
21
|
+
default: "radio_name"
|
20
22
|
prop :text, type: Playbook::Props::String,
|
21
|
-
|
23
|
+
default: "Radio Text"
|
22
24
|
prop :value, type: Playbook::Props::String,
|
23
|
-
|
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
|
-
|
36
|
-
|
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
|
-
|
31
|
+
multiple?: Boolean,
|
26
32
|
name?: String,
|
27
|
-
dark?: Boolean,
|
28
|
-
includeBlank?: String,
|
29
|
-
blankSelection?: String,
|
30
33
|
required?: Boolean,
|
31
|
-
|
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
|
-
|
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
|
-
|
63
|
-
|
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
|
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
|
+
}) %>
|