playbook_ui 2.9.9 → 3.0.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 +10 -4
- data/app/pb_kits/playbook/index.js +10 -0
- data/app/pb_kits/playbook/kits/pb_circle_icon_button.js +4 -0
- data/app/pb_kits/playbook/kits/pb_select.js +4 -0
- data/app/pb_kits/playbook/kits/pb_selectable_card.js +4 -0
- data/app/pb_kits/playbook/kits/pb_textarea.js +4 -0
- data/app/pb_kits/playbook/packs/examples.js +8 -0
- data/app/pb_kits/playbook/packs/kits.js +4 -2
- data/app/pb_kits/playbook/pb_avatar/_avatar.jsx +1 -1
- data/app/pb_kits/playbook/pb_body/_body_mixins.scss +3 -0
- data/app/pb_kits/playbook/pb_button/_button.jsx +4 -0
- data/app/pb_kits/playbook/pb_card/_card.scss +50 -17
- data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.html.erb +10 -0
- data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.jsx +30 -0
- data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.scss +32 -0
- data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.rb +22 -0
- data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_dark.html.erb +29 -0
- data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_dark.jsx +38 -0
- data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_default.html.erb +25 -0
- data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_default.jsx +34 -0
- data/app/pb_kits/playbook/pb_circle_icon_button/docs/example.yml +9 -0
- data/app/pb_kits/playbook/pb_circle_icon_button/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_dashboard_value/_dashboard_value.html.erb +1 -1
- data/app/pb_kits/playbook/pb_dashboard_value/dashboard_value.rb +4 -0
- data/app/pb_kits/playbook/pb_date/_date.jsx +51 -17
- data/app/pb_kits/playbook/pb_date/docs/_date_default.jsx +10 -2
- data/app/pb_kits/playbook/pb_form/_form.scss +11 -0
- data/app/pb_kits/playbook/pb_form/_form_form_with.html.erb +3 -0
- data/app/pb_kits/playbook/pb_form/_form_simple_form.html.erb +3 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +14 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_simple_form.html.erb +36 -0
- data/app/pb_kits/playbook/pb_form/docs/example.yml +5 -0
- data/app/pb_kits/playbook/pb_form/form.rb +28 -0
- data/app/pb_kits/playbook/pb_form/form/form_with_form.rb +38 -0
- data/app/pb_kits/playbook/pb_form/form/simple_form_form.rb +45 -0
- data/app/pb_kits/playbook/pb_form/form_builder.rb +23 -0
- data/app/pb_kits/playbook/pb_form/form_builder/action_area.rb +40 -0
- data/app/pb_kits/playbook/pb_form/form_builder/form_with_form_builder.rb +11 -0
- data/app/pb_kits/playbook/pb_form/form_builder/simple_form_builder.rb +25 -0
- data/app/pb_kits/playbook/pb_form/form_builder/text_input_builder.rb +22 -0
- data/app/pb_kits/playbook/pb_icon_circle/_icon_circle.jsx +19 -14
- data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_color.jsx +19 -0
- data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_default.jsx +5 -4
- data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_size.jsx +16 -0
- data/app/pb_kits/playbook/pb_icon_circle/docs/example.yml +2 -1
- data/app/pb_kits/playbook/pb_icon_circle/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_kit/dateTime.js +4 -0
- data/app/pb_kits/playbook/pb_layout/_layout.jsx +50 -48
- data/app/pb_kits/playbook/pb_layout/_layout.scss +8 -12
- data/app/pb_kits/playbook/pb_layout/_layout_mixin.scss +6 -0
- data/app/pb_kits/playbook/pb_layout/docs/_layout_colors.html.erb +24 -0
- data/app/pb_kits/playbook/pb_layout/docs/_layout_default.jsx +15 -0
- data/app/pb_kits/playbook/pb_layout/docs/_layout_sizes.html.erb +32 -0
- data/app/pb_kits/playbook/pb_layout/docs/_layout_sizes_dark.html.erb +32 -0
- data/app/pb_kits/playbook/pb_layout/docs/_layout_transparent.html.erb +8 -0
- data/app/pb_kits/playbook/pb_layout/docs/example.yml +5 -11
- data/app/pb_kits/playbook/pb_layout/docs/index.js +1 -1
- data/app/pb_kits/playbook/pb_layout/layout.rb +5 -7
- data/app/pb_kits/playbook/pb_message/_message.jsx +68 -11
- data/app/pb_kits/playbook/pb_message/docs/_message_default.jsx +59 -2
- data/app/pb_kits/playbook/pb_section_separator/_section_separator.jsx +23 -16
- data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +15 -6
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_line.jsx +10 -0
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text.jsx +10 -0
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text_background.html.erb +1 -0
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text_background.jsx +12 -0
- data/app/pb_kits/playbook/pb_section_separator/docs/example.yml +4 -2
- data/app/pb_kits/playbook/pb_section_separator/docs/index.js +3 -1
- data/app/pb_kits/playbook/pb_section_separator/section_separator.rb +4 -1
- data/app/pb_kits/playbook/pb_select/_select.html.erb +33 -0
- data/app/pb_kits/playbook/pb_select/_select.jsx +110 -0
- data/app/pb_kits/playbook/pb_select/_select.scss +50 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_blank.html.erb +19 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_blank.jsx +30 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_custom_select.html.erb +8 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_custom_select.jsx +19 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_dark.html.erb +24 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_dark.jsx +31 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_default.html.erb +23 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_default.jsx +30 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_disabled.html.erb +19 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_disabled.jsx +30 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_disabled_options.html.erb +33 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_disabled_options.jsx +44 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_required.html.erb +17 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_required.jsx +28 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_value_text_same.html.erb +18 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_value_text_same.jsx +29 -0
- data/app/pb_kits/playbook/pb_select/docs/example.yml +22 -0
- data/app/pb_kits/playbook/pb_select/docs/index.js +8 -0
- data/app/pb_kits/playbook/pb_select/docs/nitro_theme.gemspec +41 -0
- data/app/pb_kits/playbook/pb_select/select.rb +60 -0
- data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.html.erb +25 -0
- data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.jsx +97 -0
- data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.scss +87 -0
- data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_block.html.erb +25 -0
- data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_block.jsx +48 -0
- data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_dark.html.erb +45 -0
- data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_dark.jsx +68 -0
- data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_default.html.erb +39 -0
- data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_default.jsx +67 -0
- data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_single_select.html.erb +30 -0
- data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_single_select.jsx +54 -0
- data/app/pb_kits/playbook/pb_selectable_card/docs/example.yml +13 -0
- data/app/pb_kits/playbook/pb_selectable_card/docs/index.js +4 -0
- data/app/pb_kits/playbook/pb_selectable_card/selectable_card.rb +51 -0
- data/app/pb_kits/playbook/pb_stat_value/_stat_value.html.erb +1 -1
- data/app/pb_kits/playbook/pb_stat_value/stat_value.rb +5 -0
- data/app/pb_kits/playbook/pb_text_input/_text_input.html.erb +13 -9
- data/app/pb_kits/playbook/pb_text_input/_text_input.jsx +12 -6
- data/app/pb_kits/playbook/pb_text_input/_text_input.scss +44 -44
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_default.jsx +68 -12
- data/app/pb_kits/playbook/pb_textarea/_textarea.html.erb +20 -0
- data/app/pb_kits/playbook/pb_textarea/_textarea.jsx +54 -0
- data/app/pb_kits/playbook/pb_textarea/_textarea.scss +31 -0
- data/app/pb_kits/playbook/pb_textarea/_textarea_mixin.scss +51 -0
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_custom.html.erb +3 -0
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_custom.jsx +16 -0
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_dark.html.erb +9 -0
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_dark.jsx +21 -0
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_default.html.erb +9 -0
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_default.jsx +21 -0
- data/app/pb_kits/playbook/pb_textarea/docs/example.yml +15 -0
- data/app/pb_kits/playbook/pb_textarea/docs/index.js +3 -0
- data/app/pb_kits/playbook/pb_textarea/textarea.rb +30 -0
- data/app/pb_kits/playbook/pb_title/_title_mixin.scss +3 -1
- data/app/pb_kits/playbook/pb_user/_user.html.erb +3 -1
- data/app/pb_kits/playbook/pb_user/_user.jsx +76 -16
- data/app/pb_kits/playbook/pb_user/docs/_user_default.jsx +42 -1
- data/app/pb_kits/playbook/pb_user/docs/_user_size.jsx +31 -0
- data/app/pb_kits/playbook/pb_user/docs/_user_text_only.jsx +24 -0
- data/app/pb_kits/playbook/pb_user/docs/_user_vertical_size.jsx +37 -0
- data/app/pb_kits/playbook/pb_user/docs/_user_with_territory.html.erb +40 -0
- data/app/pb_kits/playbook/pb_user/docs/_user_with_territory.jsx +57 -0
- data/app/pb_kits/playbook/pb_user/docs/example.yml +8 -0
- data/app/pb_kits/playbook/pb_user/docs/index.js +5 -0
- data/app/pb_kits/playbook/pb_user/user.rb +12 -1
- data/app/pb_kits/playbook/props.rb +11 -3
- data/app/pb_kits/playbook/tokens/_colors.scss +16 -0
- data/app/pb_kits/playbook/tokens/_transition.scss +1 -0
- data/lib/playbook/version.rb +1 -1
- metadata +117 -15
- data/app/pb_kits/playbook/pb_layout/docs/_layout_lg.html.erb +0 -4
- data/app/pb_kits/playbook/pb_layout/docs/_layout_lg_dark.html.erb +0 -4
- data/app/pb_kits/playbook/pb_layout/docs/_layout_md.html.erb +0 -4
- data/app/pb_kits/playbook/pb_layout/docs/_layout_md_dark.html.erb +0 -4
- data/app/pb_kits/playbook/pb_layout/docs/_layout_sm.html.erb +0 -4
- data/app/pb_kits/playbook/pb_layout/docs/_layout_sm_dark.html.erb +0 -4
- data/app/pb_kits/playbook/pb_layout/docs/_layout_xl.html.erb +0 -4
- data/app/pb_kits/playbook/pb_layout/docs/_layout_xl_dark.html.erb +0 -4
- data/app/pb_kits/playbook/pb_layout/docs/_layout_xs.html.erb +0 -4
- data/app/pb_kits/playbook/pb_layout/docs/_layout_xs.jsx +0 -15
- data/app/pb_kits/playbook/pb_layout/docs/_layout_xs_dark.html.erb +0 -4
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_default.jsx +0 -10
@@ -4,12 +4,17 @@ module Playbook
|
|
4
4
|
module PbStatValue
|
5
5
|
class StatValue
|
6
6
|
include Playbook::Props
|
7
|
+
include ActionView::Helpers::NumberHelper
|
7
8
|
|
8
9
|
partial "pb_stat_value/stat_value"
|
9
10
|
|
10
11
|
prop :unit
|
11
12
|
prop :value, type: Playbook::Props::Number
|
12
13
|
|
14
|
+
def formatted_value
|
15
|
+
number_with_delimiter(value, delimiter: ",")
|
16
|
+
end
|
17
|
+
|
13
18
|
def classname
|
14
19
|
generate_classname("pb_stat_value_kit")
|
15
20
|
end
|
@@ -1,17 +1,21 @@
|
|
1
1
|
<%= content_tag(:div,
|
2
|
-
class:
|
2
|
+
class: object.classname) do %>
|
3
3
|
<% if object.label.present? %>
|
4
4
|
<%= pb_rails("caption", props: {text: object.label}) %>
|
5
5
|
<% end %>
|
6
6
|
<%= content_tag(:div,
|
7
7
|
class: "text_input_wrapper") do %>
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
<% if object.children.present? %>
|
9
|
+
<% instance_exec &object.children %>
|
10
|
+
<% else %>
|
11
|
+
<%= tag(:input,
|
12
|
+
id: object.id,
|
13
|
+
class: object.classname,
|
14
|
+
data: object.data,
|
15
|
+
name: object.name,
|
16
|
+
placeholder: object.placeholder,
|
17
|
+
type: object.type,
|
18
|
+
value: object.value) %>
|
19
|
+
<% end %>
|
16
20
|
<% end %>
|
17
21
|
<% end %>
|
@@ -1,12 +1,15 @@
|
|
1
|
+
/* @flow */
|
2
|
+
|
1
3
|
import React from 'react'
|
2
|
-
import PropTypes from
|
4
|
+
import PropTypes from 'prop-types'
|
3
5
|
import classnames from 'classnames'
|
4
|
-
import {Caption} from
|
6
|
+
import {Caption} from '../'
|
5
7
|
|
6
8
|
const propTypes = {
|
7
9
|
className: PropTypes.string,
|
8
10
|
name: PropTypes.string,
|
9
11
|
label: PropTypes.string,
|
12
|
+
onChange: PropTypes.func,
|
10
13
|
placeholder: PropTypes.string,
|
11
14
|
type: PropTypes.string,
|
12
15
|
value: PropTypes.oneOfType([
|
@@ -16,7 +19,8 @@ const propTypes = {
|
|
16
19
|
}
|
17
20
|
|
18
21
|
const defaultProps = {
|
19
|
-
|
22
|
+
onChange: () => {},
|
23
|
+
type: 'text'
|
20
24
|
}
|
21
25
|
|
22
26
|
class TextInput extends React.Component {
|
@@ -25,6 +29,7 @@ class TextInput extends React.Component {
|
|
25
29
|
className,
|
26
30
|
name,
|
27
31
|
label,
|
32
|
+
onChange = () => {},
|
28
33
|
placeholder,
|
29
34
|
type,
|
30
35
|
value
|
@@ -36,11 +41,12 @@ class TextInput extends React.Component {
|
|
36
41
|
])
|
37
42
|
|
38
43
|
return (
|
39
|
-
<div className=
|
44
|
+
<div className={css}>
|
40
45
|
<Caption text={label} />
|
41
|
-
<div className=
|
42
|
-
<input className=
|
46
|
+
<div className='text_input_wrapper'>
|
47
|
+
<input className='text_input'
|
43
48
|
name={name}
|
49
|
+
onChange={onChange}
|
44
50
|
placeholder={placeholder}
|
45
51
|
type={type}
|
46
52
|
value={value}
|
@@ -8,51 +8,51 @@
|
|
8
8
|
|
9
9
|
.text_input_wrapper {
|
10
10
|
margin-bottom: 1rem;
|
11
|
-
}
|
12
|
-
|
13
|
-
.pb_text_input_kit {
|
14
|
-
border: 1px solid $border-light;
|
15
|
-
border-radius: $border-rad-light;
|
16
|
-
display: block;
|
17
|
-
width: 100%;
|
18
|
-
color: $text_lt_default;
|
19
|
-
background: $white;
|
20
|
-
padding: $space_xs $space_sm;
|
21
|
-
transition: 0.2s all;
|
22
|
-
outline: none;
|
23
|
-
font-size: $font_small;
|
24
|
-
margin: .1rem 0 0;
|
25
|
-
|
26
|
-
&:focus {
|
27
|
-
border-color: $primary-action;
|
28
|
-
}
|
29
|
-
|
30
|
-
&::-webkit-input-placeholder {
|
31
|
-
color: $text_lt_lighter;
|
32
|
-
opacity: 1;
|
33
|
-
}
|
34
|
-
|
35
|
-
&:-ms-input-placeholder {
|
36
|
-
color: $text_lt_lighter;
|
37
|
-
opacity: 1;
|
38
|
-
}
|
39
|
-
|
40
|
-
&::-ms-input-placeholder {
|
41
|
-
color: $text_lt_lighter;
|
42
|
-
opacity: 1;
|
43
|
-
}
|
44
|
-
|
45
|
-
&::placeholder {
|
46
|
-
color: $text_lt_lighter;
|
47
|
-
opacity: 1;
|
48
|
-
}
|
49
|
-
|
50
|
-
&:-ms-input-placeholder {
|
51
|
-
color: $text_lt_lighter;
|
52
|
-
}
|
53
11
|
|
54
|
-
|
55
|
-
|
12
|
+
> input:first-child {
|
13
|
+
border: 1px solid $border-light;
|
14
|
+
border-radius: $border-rad-light;
|
15
|
+
display: block;
|
16
|
+
width: 100%;
|
17
|
+
color: $text_lt_default;
|
18
|
+
background: $white;
|
19
|
+
padding: $space_xs $space_sm;
|
20
|
+
transition: 0.2s all;
|
21
|
+
outline: none;
|
22
|
+
font-size: $font_small;
|
23
|
+
margin: 0.1rem 0 0;
|
24
|
+
|
25
|
+
&:focus {
|
26
|
+
border-color: $primary-action;
|
27
|
+
}
|
28
|
+
|
29
|
+
&::-webkit-input-placeholder {
|
30
|
+
color: $text_lt_lighter;
|
31
|
+
opacity: 1;
|
32
|
+
}
|
33
|
+
|
34
|
+
&:-ms-input-placeholder {
|
35
|
+
color: $text_lt_lighter;
|
36
|
+
opacity: 1;
|
37
|
+
}
|
38
|
+
|
39
|
+
&::-ms-input-placeholder {
|
40
|
+
color: $text_lt_lighter;
|
41
|
+
opacity: 1;
|
42
|
+
}
|
43
|
+
|
44
|
+
&::placeholder {
|
45
|
+
color: $text_lt_lighter;
|
46
|
+
opacity: 1;
|
47
|
+
}
|
48
|
+
|
49
|
+
&:-ms-input-placeholder {
|
50
|
+
color: $text_lt_lighter;
|
51
|
+
}
|
52
|
+
|
53
|
+
&::-ms-input-placeholder {
|
54
|
+
color: $text_lt_lighter;
|
55
|
+
}
|
56
56
|
}
|
57
57
|
}
|
58
58
|
}
|
@@ -1,16 +1,72 @@
|
|
1
1
|
import React from "react"
|
2
|
-
import {
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
)
|
2
|
+
import {
|
3
|
+
Caption,
|
4
|
+
TextInput,
|
5
|
+
Title,
|
6
|
+
} from "../../"
|
7
|
+
|
8
|
+
class TextInputDefault extends React.Component {
|
9
|
+
state = {
|
10
|
+
firstName: ""
|
11
|
+
}
|
12
|
+
|
13
|
+
render() {
|
14
|
+
const handleOnChange = ({target}) => this.setState({firstName: target.value})
|
15
|
+
|
16
|
+
const {
|
17
|
+
firstName,
|
18
|
+
} = this.state
|
19
|
+
|
20
|
+
return (
|
21
|
+
<div>
|
22
|
+
<TextInput
|
23
|
+
label="First Name"
|
24
|
+
placeholder="Enter first name"
|
25
|
+
value="Timothy Wenhold"
|
26
|
+
/>
|
27
|
+
<TextInput
|
28
|
+
label="Last Name"
|
29
|
+
placeholder="Enter last name"
|
30
|
+
/>
|
31
|
+
<TextInput
|
32
|
+
label="Phone Number"
|
33
|
+
placeholder="Enter phone number"
|
34
|
+
type="phone"
|
35
|
+
/>
|
36
|
+
<TextInput
|
37
|
+
label="Email Address"
|
38
|
+
placeholder="Enter email address"
|
39
|
+
type="email"
|
40
|
+
/>
|
41
|
+
<TextInput
|
42
|
+
label="Zip Code"
|
43
|
+
placeholder="Enter zip code"
|
44
|
+
type="number"
|
45
|
+
/>
|
46
|
+
|
47
|
+
<br/>
|
48
|
+
<br/>
|
49
|
+
|
50
|
+
<Title>{`Event Handler Props`}</Title>
|
51
|
+
|
52
|
+
<br/>
|
53
|
+
<Caption>{`onChange`}</Caption>
|
54
|
+
|
55
|
+
<br/>
|
56
|
+
|
57
|
+
<TextInput
|
58
|
+
label="First Name"
|
59
|
+
onChange={handleOnChange}
|
60
|
+
placeholder="Enter first name"
|
61
|
+
value={firstName}
|
62
|
+
/>
|
63
|
+
|
64
|
+
<If condition={firstName !== ""}>
|
65
|
+
{`First name is: ${firstName}`}
|
66
|
+
</If>
|
67
|
+
</div>
|
68
|
+
)
|
69
|
+
}
|
14
70
|
}
|
15
71
|
|
16
72
|
export default TextInputDefault
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<%= content_tag(:div,
|
2
|
+
id: object.id,
|
3
|
+
data: object.data,
|
4
|
+
class: object.classname) do %>
|
5
|
+
<% if object.label.present? %>
|
6
|
+
<%= pb_rails("caption", props: {text: object.label, dark: object.dark, classname: "pb_textarea_kit_label"}) %>
|
7
|
+
<% end %>
|
8
|
+
<% if object.children %>
|
9
|
+
<%= capture(&object.children) %>
|
10
|
+
<% else %>
|
11
|
+
<%= text_area(
|
12
|
+
:object,
|
13
|
+
:method,
|
14
|
+
:class => "#{object.classname}",
|
15
|
+
:name => object.name,
|
16
|
+
:placeholder => object.placeholder,
|
17
|
+
:rows => object.rows,
|
18
|
+
:value => object.value )%>
|
19
|
+
<% end %>
|
20
|
+
<% end %>
|
@@ -0,0 +1,54 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import classnames from 'classnames'
|
3
|
+
import { Caption } from "../"
|
4
|
+
|
5
|
+
type TextareaProps = {
|
6
|
+
className?: String,
|
7
|
+
children?: Array<React.ReactChild>,
|
8
|
+
data?: String,
|
9
|
+
id?: String,
|
10
|
+
object?: String,
|
11
|
+
method?: String,
|
12
|
+
label?: String,
|
13
|
+
placeholder?: String,
|
14
|
+
value?: String,
|
15
|
+
name?: String,
|
16
|
+
rows?: Number,
|
17
|
+
dark?: Boolean,
|
18
|
+
}
|
19
|
+
|
20
|
+
const textareaCSS =({
|
21
|
+
dark=false,
|
22
|
+
}: TextareaProps) => {
|
23
|
+
const themeStyle = dark === true ? '_dark' : ''
|
24
|
+
return 'pb_textarea_kit' + themeStyle
|
25
|
+
}
|
26
|
+
|
27
|
+
const Textarea = ( props: TextareaProps) => {
|
28
|
+
|
29
|
+
const {
|
30
|
+
className,
|
31
|
+
children,
|
32
|
+
label,
|
33
|
+
placeholder,
|
34
|
+
value,
|
35
|
+
dark=false,
|
36
|
+
rows=4,
|
37
|
+
name,
|
38
|
+
} = props
|
39
|
+
|
40
|
+
const textarea_input = `${textareaCSS(props)}`
|
41
|
+
|
42
|
+
return (
|
43
|
+
<div className={classnames(textareaCSS(props), className)}>
|
44
|
+
<Caption text={label} dark={dark}/>
|
45
|
+
<If condition={children}>
|
46
|
+
{children}
|
47
|
+
<Else/>
|
48
|
+
<textarea className={textarea_input} name={name} placeholder={placeholder} rows={rows} value={value} />
|
49
|
+
</If>
|
50
|
+
</div>
|
51
|
+
)
|
52
|
+
}
|
53
|
+
|
54
|
+
export default Textarea
|
@@ -0,0 +1,31 @@
|
|
1
|
+
@import "../pb_body/body_mixins";
|
2
|
+
@import "./textarea_mixin";
|
3
|
+
|
4
|
+
[class^=pb_textarea_kit] {
|
5
|
+
margin-bottom: $space_sm;
|
6
|
+
.pb_textarea_kit_label {
|
7
|
+
margin-bottom: $space_xs;
|
8
|
+
display: block;
|
9
|
+
}
|
10
|
+
textarea::placeholder {
|
11
|
+
@include pb_body_light;
|
12
|
+
}
|
13
|
+
> textarea {
|
14
|
+
@include pb_textarea_light;
|
15
|
+
}
|
16
|
+
textarea:focus {
|
17
|
+
@include pb_textarea_focus_light;
|
18
|
+
}
|
19
|
+
|
20
|
+
&[class*=_dark] {
|
21
|
+
textarea::placeholder {
|
22
|
+
@include pb_body_light_dark;
|
23
|
+
}
|
24
|
+
> textarea {
|
25
|
+
@include pb_textarea_dark;
|
26
|
+
}
|
27
|
+
textarea:focus {
|
28
|
+
@include pb_textarea_focus_dark;
|
29
|
+
}
|
30
|
+
}
|
31
|
+
}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
@import "../tokens/colors";
|
2
|
+
@import "../tokens/border_radius";
|
3
|
+
@import "../tokens/spacing";
|
4
|
+
@import "../tokens/animation-curves";
|
5
|
+
@import "../pb_title/title_mixin";
|
6
|
+
|
7
|
+
@mixin pb_textarea($border_color, $background_color, $text_color) {
|
8
|
+
@include pb_title_4;
|
9
|
+
border: 1px solid $border_color;
|
10
|
+
border-radius: $border_rad_heavier;
|
11
|
+
display: block;
|
12
|
+
width: 100%;
|
13
|
+
color: $text_color;
|
14
|
+
background-color: $background_color;
|
15
|
+
padding: ($space_xs + 4) $space_sm;
|
16
|
+
transition: $easeIn;
|
17
|
+
outline: none;
|
18
|
+
overflow: auto;
|
19
|
+
overflow-wrap: break-word;
|
20
|
+
resize: none;
|
21
|
+
transition-property: border-color, box-shadow, color, background-color;
|
22
|
+
transition-duration: .24s;
|
23
|
+
transition-timing-function: $bezier;
|
24
|
+
&:disabled, &:disabled:hover, &:disabled:focus, &:disabled:active {
|
25
|
+
background-color: shade($background_color, 5%);
|
26
|
+
box-shadow: none;
|
27
|
+
opacity: 0.5;
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
@mixin pb_textarea_focus($focus_color: $focus_input_light) {
|
32
|
+
background-color: $focus_color;
|
33
|
+
}
|
34
|
+
|
35
|
+
// Textarea ======================
|
36
|
+
@mixin pb_textarea_light {
|
37
|
+
@include pb_textarea($border_light, $white, $text_lt_default);
|
38
|
+
}
|
39
|
+
|
40
|
+
@mixin pb_textarea_dark {
|
41
|
+
@include pb_textarea($border_dark, $bg_dark, $text_dk_default);
|
42
|
+
}
|
43
|
+
|
44
|
+
// Hovers ======================
|
45
|
+
@mixin pb_textarea_focus_light {
|
46
|
+
@include pb_textarea_focus($focus_input_light);
|
47
|
+
}
|
48
|
+
|
49
|
+
@mixin pb_textarea_focus_dark {
|
50
|
+
@include pb_textarea_focus($focus_input_dark);
|
51
|
+
}
|