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.
Files changed (155) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +10 -4
  3. data/app/pb_kits/playbook/index.js +10 -0
  4. data/app/pb_kits/playbook/kits/pb_circle_icon_button.js +4 -0
  5. data/app/pb_kits/playbook/kits/pb_select.js +4 -0
  6. data/app/pb_kits/playbook/kits/pb_selectable_card.js +4 -0
  7. data/app/pb_kits/playbook/kits/pb_textarea.js +4 -0
  8. data/app/pb_kits/playbook/packs/examples.js +8 -0
  9. data/app/pb_kits/playbook/packs/kits.js +4 -2
  10. data/app/pb_kits/playbook/pb_avatar/_avatar.jsx +1 -1
  11. data/app/pb_kits/playbook/pb_body/_body_mixins.scss +3 -0
  12. data/app/pb_kits/playbook/pb_button/_button.jsx +4 -0
  13. data/app/pb_kits/playbook/pb_card/_card.scss +50 -17
  14. data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.html.erb +10 -0
  15. data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.jsx +30 -0
  16. data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.scss +32 -0
  17. data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.rb +22 -0
  18. data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_dark.html.erb +29 -0
  19. data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_dark.jsx +38 -0
  20. data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_default.html.erb +25 -0
  21. data/app/pb_kits/playbook/pb_circle_icon_button/docs/_circle_icon_button_default.jsx +34 -0
  22. data/app/pb_kits/playbook/pb_circle_icon_button/docs/example.yml +9 -0
  23. data/app/pb_kits/playbook/pb_circle_icon_button/docs/index.js +2 -0
  24. data/app/pb_kits/playbook/pb_dashboard_value/_dashboard_value.html.erb +1 -1
  25. data/app/pb_kits/playbook/pb_dashboard_value/dashboard_value.rb +4 -0
  26. data/app/pb_kits/playbook/pb_date/_date.jsx +51 -17
  27. data/app/pb_kits/playbook/pb_date/docs/_date_default.jsx +10 -2
  28. data/app/pb_kits/playbook/pb_form/_form.scss +11 -0
  29. data/app/pb_kits/playbook/pb_form/_form_form_with.html.erb +3 -0
  30. data/app/pb_kits/playbook/pb_form/_form_simple_form.html.erb +3 -0
  31. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +14 -0
  32. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form.html.erb +36 -0
  33. data/app/pb_kits/playbook/pb_form/docs/example.yml +5 -0
  34. data/app/pb_kits/playbook/pb_form/form.rb +28 -0
  35. data/app/pb_kits/playbook/pb_form/form/form_with_form.rb +38 -0
  36. data/app/pb_kits/playbook/pb_form/form/simple_form_form.rb +45 -0
  37. data/app/pb_kits/playbook/pb_form/form_builder.rb +23 -0
  38. data/app/pb_kits/playbook/pb_form/form_builder/action_area.rb +40 -0
  39. data/app/pb_kits/playbook/pb_form/form_builder/form_with_form_builder.rb +11 -0
  40. data/app/pb_kits/playbook/pb_form/form_builder/simple_form_builder.rb +25 -0
  41. data/app/pb_kits/playbook/pb_form/form_builder/text_input_builder.rb +22 -0
  42. data/app/pb_kits/playbook/pb_icon_circle/_icon_circle.jsx +19 -14
  43. data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_color.jsx +19 -0
  44. data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_default.jsx +5 -4
  45. data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_size.jsx +16 -0
  46. data/app/pb_kits/playbook/pb_icon_circle/docs/example.yml +2 -1
  47. data/app/pb_kits/playbook/pb_icon_circle/docs/index.js +2 -0
  48. data/app/pb_kits/playbook/pb_kit/dateTime.js +4 -0
  49. data/app/pb_kits/playbook/pb_layout/_layout.jsx +50 -48
  50. data/app/pb_kits/playbook/pb_layout/_layout.scss +8 -12
  51. data/app/pb_kits/playbook/pb_layout/_layout_mixin.scss +6 -0
  52. data/app/pb_kits/playbook/pb_layout/docs/_layout_colors.html.erb +24 -0
  53. data/app/pb_kits/playbook/pb_layout/docs/_layout_default.jsx +15 -0
  54. data/app/pb_kits/playbook/pb_layout/docs/_layout_sizes.html.erb +32 -0
  55. data/app/pb_kits/playbook/pb_layout/docs/_layout_sizes_dark.html.erb +32 -0
  56. data/app/pb_kits/playbook/pb_layout/docs/_layout_transparent.html.erb +8 -0
  57. data/app/pb_kits/playbook/pb_layout/docs/example.yml +5 -11
  58. data/app/pb_kits/playbook/pb_layout/docs/index.js +1 -1
  59. data/app/pb_kits/playbook/pb_layout/layout.rb +5 -7
  60. data/app/pb_kits/playbook/pb_message/_message.jsx +68 -11
  61. data/app/pb_kits/playbook/pb_message/docs/_message_default.jsx +59 -2
  62. data/app/pb_kits/playbook/pb_section_separator/_section_separator.jsx +23 -16
  63. data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +15 -6
  64. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_line.jsx +10 -0
  65. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text.jsx +10 -0
  66. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text_background.html.erb +1 -0
  67. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text_background.jsx +12 -0
  68. data/app/pb_kits/playbook/pb_section_separator/docs/example.yml +4 -2
  69. data/app/pb_kits/playbook/pb_section_separator/docs/index.js +3 -1
  70. data/app/pb_kits/playbook/pb_section_separator/section_separator.rb +4 -1
  71. data/app/pb_kits/playbook/pb_select/_select.html.erb +33 -0
  72. data/app/pb_kits/playbook/pb_select/_select.jsx +110 -0
  73. data/app/pb_kits/playbook/pb_select/_select.scss +50 -0
  74. data/app/pb_kits/playbook/pb_select/docs/_select_blank.html.erb +19 -0
  75. data/app/pb_kits/playbook/pb_select/docs/_select_blank.jsx +30 -0
  76. data/app/pb_kits/playbook/pb_select/docs/_select_custom_select.html.erb +8 -0
  77. data/app/pb_kits/playbook/pb_select/docs/_select_custom_select.jsx +19 -0
  78. data/app/pb_kits/playbook/pb_select/docs/_select_dark.html.erb +24 -0
  79. data/app/pb_kits/playbook/pb_select/docs/_select_dark.jsx +31 -0
  80. data/app/pb_kits/playbook/pb_select/docs/_select_default.html.erb +23 -0
  81. data/app/pb_kits/playbook/pb_select/docs/_select_default.jsx +30 -0
  82. data/app/pb_kits/playbook/pb_select/docs/_select_disabled.html.erb +19 -0
  83. data/app/pb_kits/playbook/pb_select/docs/_select_disabled.jsx +30 -0
  84. data/app/pb_kits/playbook/pb_select/docs/_select_disabled_options.html.erb +33 -0
  85. data/app/pb_kits/playbook/pb_select/docs/_select_disabled_options.jsx +44 -0
  86. data/app/pb_kits/playbook/pb_select/docs/_select_required.html.erb +17 -0
  87. data/app/pb_kits/playbook/pb_select/docs/_select_required.jsx +28 -0
  88. data/app/pb_kits/playbook/pb_select/docs/_select_value_text_same.html.erb +18 -0
  89. data/app/pb_kits/playbook/pb_select/docs/_select_value_text_same.jsx +29 -0
  90. data/app/pb_kits/playbook/pb_select/docs/example.yml +22 -0
  91. data/app/pb_kits/playbook/pb_select/docs/index.js +8 -0
  92. data/app/pb_kits/playbook/pb_select/docs/nitro_theme.gemspec +41 -0
  93. data/app/pb_kits/playbook/pb_select/select.rb +60 -0
  94. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.html.erb +25 -0
  95. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.jsx +97 -0
  96. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.scss +87 -0
  97. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_block.html.erb +25 -0
  98. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_block.jsx +48 -0
  99. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_dark.html.erb +45 -0
  100. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_dark.jsx +68 -0
  101. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_default.html.erb +39 -0
  102. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_default.jsx +67 -0
  103. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_single_select.html.erb +30 -0
  104. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_single_select.jsx +54 -0
  105. data/app/pb_kits/playbook/pb_selectable_card/docs/example.yml +13 -0
  106. data/app/pb_kits/playbook/pb_selectable_card/docs/index.js +4 -0
  107. data/app/pb_kits/playbook/pb_selectable_card/selectable_card.rb +51 -0
  108. data/app/pb_kits/playbook/pb_stat_value/_stat_value.html.erb +1 -1
  109. data/app/pb_kits/playbook/pb_stat_value/stat_value.rb +5 -0
  110. data/app/pb_kits/playbook/pb_text_input/_text_input.html.erb +13 -9
  111. data/app/pb_kits/playbook/pb_text_input/_text_input.jsx +12 -6
  112. data/app/pb_kits/playbook/pb_text_input/_text_input.scss +44 -44
  113. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_default.jsx +68 -12
  114. data/app/pb_kits/playbook/pb_textarea/_textarea.html.erb +20 -0
  115. data/app/pb_kits/playbook/pb_textarea/_textarea.jsx +54 -0
  116. data/app/pb_kits/playbook/pb_textarea/_textarea.scss +31 -0
  117. data/app/pb_kits/playbook/pb_textarea/_textarea_mixin.scss +51 -0
  118. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_custom.html.erb +3 -0
  119. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_custom.jsx +16 -0
  120. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_dark.html.erb +9 -0
  121. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_dark.jsx +21 -0
  122. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_default.html.erb +9 -0
  123. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_default.jsx +21 -0
  124. data/app/pb_kits/playbook/pb_textarea/docs/example.yml +15 -0
  125. data/app/pb_kits/playbook/pb_textarea/docs/index.js +3 -0
  126. data/app/pb_kits/playbook/pb_textarea/textarea.rb +30 -0
  127. data/app/pb_kits/playbook/pb_title/_title_mixin.scss +3 -1
  128. data/app/pb_kits/playbook/pb_user/_user.html.erb +3 -1
  129. data/app/pb_kits/playbook/pb_user/_user.jsx +76 -16
  130. data/app/pb_kits/playbook/pb_user/docs/_user_default.jsx +42 -1
  131. data/app/pb_kits/playbook/pb_user/docs/_user_size.jsx +31 -0
  132. data/app/pb_kits/playbook/pb_user/docs/_user_text_only.jsx +24 -0
  133. data/app/pb_kits/playbook/pb_user/docs/_user_vertical_size.jsx +37 -0
  134. data/app/pb_kits/playbook/pb_user/docs/_user_with_territory.html.erb +40 -0
  135. data/app/pb_kits/playbook/pb_user/docs/_user_with_territory.jsx +57 -0
  136. data/app/pb_kits/playbook/pb_user/docs/example.yml +8 -0
  137. data/app/pb_kits/playbook/pb_user/docs/index.js +5 -0
  138. data/app/pb_kits/playbook/pb_user/user.rb +12 -1
  139. data/app/pb_kits/playbook/props.rb +11 -3
  140. data/app/pb_kits/playbook/tokens/_colors.scss +16 -0
  141. data/app/pb_kits/playbook/tokens/_transition.scss +1 -0
  142. data/lib/playbook/version.rb +1 -1
  143. metadata +117 -15
  144. data/app/pb_kits/playbook/pb_layout/docs/_layout_lg.html.erb +0 -4
  145. data/app/pb_kits/playbook/pb_layout/docs/_layout_lg_dark.html.erb +0 -4
  146. data/app/pb_kits/playbook/pb_layout/docs/_layout_md.html.erb +0 -4
  147. data/app/pb_kits/playbook/pb_layout/docs/_layout_md_dark.html.erb +0 -4
  148. data/app/pb_kits/playbook/pb_layout/docs/_layout_sm.html.erb +0 -4
  149. data/app/pb_kits/playbook/pb_layout/docs/_layout_sm_dark.html.erb +0 -4
  150. data/app/pb_kits/playbook/pb_layout/docs/_layout_xl.html.erb +0 -4
  151. data/app/pb_kits/playbook/pb_layout/docs/_layout_xl_dark.html.erb +0 -4
  152. data/app/pb_kits/playbook/pb_layout/docs/_layout_xs.html.erb +0 -4
  153. data/app/pb_kits/playbook/pb_layout/docs/_layout_xs.jsx +0 -15
  154. data/app/pb_kits/playbook/pb_layout/docs/_layout_xs_dark.html.erb +0 -4
  155. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_default.jsx +0 -10
@@ -6,7 +6,7 @@
6
6
  <%= pb_rails "title", props: {
7
7
  classname: "pb_stat_value_kit",
8
8
  size: 1,
9
- text: object.value } %>
9
+ text: object.formatted_value } %>
10
10
  &nbsp;
11
11
  <%= pb_rails "title", props: {
12
12
  classname: "pb_stat_value_kit",
@@ -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: "pb_text_input_kit") do %>
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
- <%= tag(:input,
9
- id: object.id,
10
- data: object.data,
11
- class: object.classname,
12
- name: object.name,
13
- placeholder: object.placeholder,
14
- type: object.type,
15
- value: object.value) %>
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 "prop-types"
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
- type: "text"
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="pb_text_input_kit">
44
+ <div className={css}>
40
45
  <Caption text={label} />
41
- <div className="text_input_wrapper">
42
- <input className={css}
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
- &::-ms-input-placeholder {
55
- color: $text_lt_lighter;
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 {TextInput} from "../../"
3
-
4
- function TextInputDefault() {
5
- return (
6
- <div>
7
- <TextInput label="First Name" placeholder="Enter first name" value="Timothy Wenhold" />
8
- <TextInput label="Last Name" placeholder="Enter last name" />
9
- <TextInput label="Phone Number" type="phone" placeholder="Enter phone number" />
10
- <TextInput label="Email Address" type="email" placeholder="Enter email address" />
11
- <TextInput label="Zip Code" type="number" placeholder="Enter zip code" />
12
- </div>
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
+ }