playbook_ui 8.4.0.alpha.dependencies.2 → 9.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -18
  3. data/app/pb_kits/playbook/data/menu.yml +2 -3
  4. data/app/pb_kits/playbook/pb_avatar/_avatar.scss +0 -3
  5. data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +7 -0
  6. data/app/pb_kits/playbook/pb_form/docs/_description.md +2 -6
  7. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -1
  8. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +1 -4
  9. data/app/pb_kits/playbook/pb_form/docs/example.yml +2 -4
  10. data/app/pb_kits/playbook/pb_form/form.rb +14 -20
  11. data/app/pb_kits/playbook/pb_highlight/_highlight.jsx +1 -1
  12. data/app/pb_kits/playbook/pb_highlight/highlight.html.erb +3 -1
  13. data/app/pb_kits/playbook/pb_icon_stat_value/_icon_stat_value.jsx +3 -0
  14. data/app/pb_kits/playbook/pb_icon_stat_value/icon_stat_value.html.erb +1 -0
  15. data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.jsx +1 -1
  16. data/app/pb_kits/playbook/pb_progress_pills/docs/_description.md +3 -1
  17. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.html.erb +1 -1
  18. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.jsx +1 -0
  19. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_status.html.erb +1 -1
  20. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_status.jsx +1 -0
  21. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.html.erb +1 -1
  22. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.rb +5 -0
  23. data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.scss +69 -54
  24. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_preview.jsx +2 -1
  25. data/app/pb_kits/playbook/pb_select/_select.scss +15 -5
  26. data/app/pb_kits/playbook/pb_select/docs/_select_custom_select.jsx +4 -1
  27. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.scss +1 -1
  28. data/app/pb_kits/playbook/pb_selectable_card/docs/_selectable_card_input.jsx +145 -135
  29. data/app/pb_kits/playbook/pb_stat_value/_stat_value.jsx +2 -0
  30. data/app/pb_kits/playbook/pb_stat_value/stat_value.html.erb +2 -0
  31. data/app/pb_kits/playbook/pb_text_input/_text_input.scss +17 -18
  32. data/app/pb_kits/playbook/pb_textarea/_textarea.scss +29 -19
  33. data/app/pb_kits/playbook/pb_textarea/_textarea_mixin.scss +9 -4
  34. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_character_counter.jsx +5 -1
  35. data/app/pb_kits/playbook/pb_textarea/docs/_textarea_custom.jsx +4 -2
  36. data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +20 -14
  37. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async_users.jsx +1 -0
  38. data/app/pb_kits/playbook/tokens/_colors.scss +1 -1
  39. data/lib/playbook.rb +4 -1
  40. data/lib/playbook/forms.rb +3 -0
  41. data/lib/playbook/forms/builder.rb +31 -0
  42. data/{app/pb_kits/playbook/pb_form/form_builder → lib/playbook/forms/builder}/action_area.rb +2 -2
  43. data/lib/playbook/forms/builder/checkbox_field.rb +32 -0
  44. data/lib/playbook/forms/builder/collection_select_field.rb +19 -0
  45. data/lib/playbook/forms/builder/date_picker_field.rb +37 -0
  46. data/{app/pb_kits/playbook/pb_form/form_builder → lib/playbook/forms/builder}/form_field_builder.rb +2 -2
  47. data/lib/playbook/forms/builder/select_field.rb +19 -0
  48. data/lib/playbook/forms/builder/typeahead_field.rb +12 -0
  49. data/lib/playbook/pb_forms_helper.rb +41 -0
  50. data/lib/playbook/pb_kit_helper.rb +2 -0
  51. data/lib/playbook/props/base.rb +1 -1
  52. data/lib/playbook/version.rb +1 -2
  53. metadata +90 -61
  54. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form.html.erb +0 -60
  55. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form_validate.html.erb +0 -61
  56. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form_validate.md +0 -1
  57. data/app/pb_kits/playbook/pb_form/form_builder.rb +0 -31
  58. data/app/pb_kits/playbook/pb_form/form_builder/checkbox_field.rb +0 -34
  59. data/app/pb_kits/playbook/pb_form/form_builder/collection_select_field.rb +0 -21
  60. data/app/pb_kits/playbook/pb_form/form_builder/date_picker_field.rb +0 -39
  61. data/app/pb_kits/playbook/pb_form/form_builder/select_field.rb +0 -21
  62. data/app/pb_kits/playbook/pb_form/form_builder/typeahead_field.rb +0 -14
  63. data/app/pb_kits/playbook/pb_form/form_with.html.erb +0 -11
  64. data/app/pb_kits/playbook/pb_form/form_with.rb +0 -40
  65. data/app/pb_kits/playbook/pb_form/simple_form.html.erb +0 -11
  66. data/app/pb_kits/playbook/pb_form/simple_form.rb +0 -67
@@ -5,28 +5,30 @@
5
5
 
6
6
  [class^=pb_textarea_kit] {
7
7
  margin-bottom: $space_sm;
8
+
8
9
  [class^=pb_caption_kit] {
9
10
  margin-bottom: $space_xs;
10
11
  display: block;
11
12
  }
12
- textarea::placeholder {
13
+ textarea::placeholder,
14
+ .pb_text_area_kit::placeholder {
13
15
  @include pb_body_light;
14
16
  }
15
- > textarea {
17
+ textarea,
18
+ .pb_text_area_kit {
16
19
  @include pb_textarea_light;
17
20
  }
18
- textarea:focus {
21
+ textarea:focus,
22
+ .pb_text_area_kit:focus {
23
+ border-color: $primary;
19
24
  @include pb_textarea_focus_light;
25
+ @include transition_default;
20
26
  }
21
-
22
- &.error {
23
- [class*=pb_body_kit] {
24
- margin-top: $space_xs / 2;
25
- }
26
- > textarea {
27
- border-color: $error;
28
- }
27
+ textarea:hover,
28
+ .pb_text_area_kit:hover {
29
+ background-color: rgba($focus_input_light,$opacity_5);
29
30
  }
31
+
30
32
  &.resize_both > textarea {
31
33
  resize: both;
32
34
  overflow: auto;
@@ -44,16 +46,24 @@
44
46
  textarea::placeholder {
45
47
  @include pb_body_light_dark;
46
48
  }
47
- > textarea {
48
- @include pb_textarea_dark;
49
+ textarea,
50
+ .pb_text_area_kit {
51
+ @include pb_body_dark;
52
+ background-color: rgba($white, $opacity_1);
53
+ border-color: rgba($white, 0.15);
49
54
  }
50
- textarea:focus {
51
- @include pb_textarea_focus_dark;
55
+ textarea:focus, .pb_text_area_kit:focus {
56
+ border-color: $active_dark;
57
+ background-color: rgba($white, 0.025);
52
58
  }
53
- &.error {
54
- > textarea {
55
- border-color: $error_dark;
56
- }
59
+ }
60
+
61
+ &.error {
62
+ [class*=pb_body_kit] {
63
+ margin-top: $space_xs / 2;
64
+ }
65
+ textarea {
66
+ border-color: $error;
57
67
  }
58
68
  }
59
69
 
@@ -22,7 +22,7 @@
22
22
  overflow-wrap: break-word;
23
23
  resize: none;
24
24
  transition-property: box-shadow, color, background-color;
25
- transition-duration: .24s;
25
+ transition-duration: .3s;
26
26
  transition-timing-function: $bezier;
27
27
  &[type=number] {
28
28
  -moz-appearance:textfield;
@@ -40,9 +40,9 @@
40
40
  &:-webkit-autofill,
41
41
  &:-webkit-autofill:hover,
42
42
  &:-internal-autofill-selected {
43
- -webkit-text-fill-color: $text_color;
44
- -webkit-box-shadow: 0 0 0px 1000px transparent inset;
45
- transition: background-color 5000s ease-in-out 0s;
43
+ color: $text_color;
44
+ background-color: rgba($focus_input_light, $opacity_5);
45
+ transition: background-color 0.3s ease-in-out 0s;
46
46
  font-family: $font_family_base;
47
47
  }
48
48
  }
@@ -68,3 +68,8 @@
68
68
  @mixin pb_textarea_focus_dark {
69
69
  @include pb_textarea_focus($focus_input_dark);
70
70
  }
71
+
72
+ // Transitions ======================
73
+ @mixin transition_default{
74
+ transition: background-color 0.3s ease-in-out 0s, border-color 0.3s ease-in-out 0s;
75
+ }
@@ -1,7 +1,7 @@
1
1
  import React, { useState } from 'react'
2
2
  import { Textarea } from '../../'
3
3
 
4
- const TextareaCharacterCounter = () => {
4
+ const TextareaCharacterCounter = (props) => {
5
5
  const [value1, setValue1] = useState('Counting characters!')
6
6
  const [value2, setValue2] = useState('This counter prevents the user from exceeding the maximum number of allowed characters. Just try it!')
7
7
  const [value3, setValue3] = useState('This counter alerts the user that they have exceeded the maximum number of allowed characters.')
@@ -41,6 +41,7 @@ const TextareaCharacterCounter = () => {
41
41
  label="Count Only"
42
42
  onChange={(event) => setCount1(event.target.value.length)}
43
43
  rows={4}
44
+ {...props}
44
45
  />
45
46
 
46
47
  <br />
@@ -52,6 +53,7 @@ const TextareaCharacterCounter = () => {
52
53
  onChange={() => handleMaxCount(event)}
53
54
  rows={4}
54
55
  value={value1}
56
+ {...props}
55
57
  />
56
58
 
57
59
  <br />
@@ -63,6 +65,7 @@ const TextareaCharacterCounter = () => {
63
65
  onChange={() => handleMaxCountWithBlocker(event, 100)}
64
66
  rows={4}
65
67
  value={value2}
68
+ {...props}
66
69
  />
67
70
 
68
71
  <br />
@@ -75,6 +78,7 @@ const TextareaCharacterCounter = () => {
75
78
  onChange={() => handleMaxCountWithError(event, 75)}
76
79
  rows={4}
77
80
  value={value3}
81
+ {...props}
78
82
  />
79
83
  </>
80
84
  )
@@ -4,12 +4,14 @@ import { Textarea } from '../../'
4
4
  const TextareaCustom = (props) => {
5
5
  return (
6
6
  <div>
7
- <Textarea label="Label">
7
+ <Textarea
8
+ label="Label"
9
+ {...props}
10
+ >
8
11
  <textarea
9
12
  className="my_custom_class"
10
13
  name="custom_textarea"
11
14
  rows={4}
12
- {...props}
13
15
  >
14
16
  {'Content goes here.'}
15
17
  </textarea>
@@ -4,9 +4,19 @@
4
4
  @import "../tokens/shadows";
5
5
 
6
6
  [class^=pb_typeahead_kit] {
7
+ .typeahead-kit-select__option {
8
+ cursor: pointer;
9
+ }
7
10
  .pb_typeahead_wrapper {
8
11
  position: relative;
9
12
 
13
+ .text_input_value_container{
14
+ cursor: text;
15
+ }
16
+ .text_input_indicators,
17
+ .pb_list_kit {
18
+ cursor: pointer;
19
+ }
10
20
  .pb_typeahead_loading_indicator {
11
21
  position: absolute;
12
22
  width: min-content;
@@ -17,15 +27,16 @@
17
27
  transition: opacity .15s ease-in-out;
18
28
  }
19
29
  }
20
-
21
30
  [class^=pb_text_input_kit] {
22
31
  .text_input_wrapper {
32
+ .text_input {
33
+ max-height: none;
34
+ }
23
35
  & > input:first-child {
24
36
  padding-right: $space_xl;
25
37
  }
26
38
  }
27
39
  }
28
-
29
40
  .pb_item_kit {
30
41
  padding: ($space_xs + 2) 0;
31
42
 
@@ -35,7 +46,6 @@
35
46
  }
36
47
  }
37
48
  }
38
-
39
49
  [class^=pb_list_kit] {
40
50
  max-height: 18em;
41
51
  overflow-y: auto;
@@ -49,17 +59,14 @@
49
59
  border-radius: $border_rad_heavier;
50
60
  transition: opacity .25s ease-in-out;
51
61
  }
52
-
53
62
  &:focus-within [class^=pb_list_kit] {
54
63
  display: block;
55
64
  opacity: 1;
56
65
  }
57
-
58
66
  &:not(:focus-within) [class^=pb_list_kit] {
59
67
  display: none;
60
68
  opacity: 0;
61
69
  }
62
-
63
70
  [class^=pb_list_kit] {
64
71
  margin-top: -$space-sm;
65
72
  li {
@@ -69,7 +76,6 @@
69
76
  &:focus-within {
70
77
  background-color: $active_light;
71
78
  }
72
-
73
79
  > button {
74
80
  background: none;
75
81
  color: $text_lt_default;
@@ -84,7 +90,6 @@
84
90
  }
85
91
  }
86
92
  }
87
-
88
93
  &[class*=dark] {
89
94
  .pb_typeahead_wrapper .pb_typeahead_loading_indicator {
90
95
  color: $text_dk_light;
@@ -97,7 +102,10 @@
97
102
  color: $white;
98
103
  }
99
104
  .typeahead-kit-select__option:hover {
100
- background-color: tint($focus_input_dark, 5%);
105
+ background-color: $active_dark;
106
+ }
107
+ .typeahead-kit-select__indicator:hover {
108
+ color: $white;
101
109
  }
102
110
  .typeahead-kit-select__input {
103
111
  color: white;
@@ -105,13 +113,12 @@
105
113
  box-shadow: none;
106
114
  }
107
115
  }
108
- .typeahead-kit-select__single-value{
116
+ .typeahead-kit-select__single-value {
109
117
  color: white;
110
118
  }
111
119
  .typeahead-kit-select__option--is-focused {
112
- background-color: tint($focus_input_dark, 5%);
120
+ background-color: $active_dark;
113
121
  }
114
-
115
122
  [class^=pb_list_kit] {
116
123
  background-color: $bg_dark;
117
124
  }
@@ -121,12 +128,11 @@
121
128
  }
122
129
  @media (hover:hover) {
123
130
  &:hover {
124
- background-color: tint($focus_input_dark, 5%);
131
+ background-color: rgba($white,.1);
125
132
  }
126
133
  }
127
134
  }
128
135
  }
129
-
130
136
  &.react-select, &.react-select .dark {
131
137
  .text_input {
132
138
  display: inherit;
@@ -90,6 +90,7 @@ const TypeaheadWithPillsAsyncUsers = (props) => {
90
90
  isMulti
91
91
  label="Github Users"
92
92
  loadOptions={promiseOptions}
93
+ noOptionsMessage={() => 'Type to Search'}
93
94
  onChange={handleOnChange}
94
95
  onMultiValueClick={handleOnMultiValueClick}
95
96
  placeholder="type the name of a Github user"
@@ -114,7 +114,7 @@ $shadow_colors: (
114
114
 
115
115
  /* Text colors ------------------------*/
116
116
  $text_lt_default: $charcoal;
117
- $text_lt_light: #919EAB;
117
+ $text_lt_light: #687887;
118
118
  $text_lt_lighter: $slate;
119
119
  $text_dk_default: $white;
120
120
  $text_dk_light: rgba($white, $opacity_6);
data/lib/playbook.rb CHANGED
@@ -6,8 +6,11 @@ require "webpacker"
6
6
  require "webpacker/react"
7
7
  require "view_component/engine"
8
8
 
9
- require "playbook/props"
10
9
  require "playbook/version"
10
+
11
+ require "playbook/props"
12
+ require "playbook/forms"
13
+ require "playbook/pb_forms_helper"
11
14
  require "playbook/pb_kit_helper"
12
15
  require "playbook/pb_doc_helper"
13
16
  require "playbook/kit_base"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "forms/builder"
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module Forms
5
+ class Builder < ::ActionView::Helpers::FormBuilder
6
+ require_relative "builder/action_area"
7
+ require_relative "builder/checkbox_field"
8
+ require_relative "builder/collection_select_field"
9
+ require_relative "builder/date_picker_field"
10
+ require_relative "builder/form_field_builder"
11
+ require_relative "builder/select_field"
12
+ require_relative "builder/typeahead_field"
13
+
14
+ prepend(FormFieldBuilder.new(:email_field, kit_name: "text_input"))
15
+ prepend(FormFieldBuilder.new(:number_field, kit_name: "text_input"))
16
+ prepend(FormFieldBuilder.new(:search_field, kit_name: "text_input"))
17
+ prepend(FormFieldBuilder.new(:telephone_field, kit_name: "text_input"))
18
+ prepend(FormFieldBuilder.new(:text_field, kit_name: "text_input"))
19
+ prepend(FormFieldBuilder.new(:password_field, kit_name: "text_input"))
20
+ prepend(FormFieldBuilder.new(:url_field, kit_name: "text_input"))
21
+ prepend(FormFieldBuilder.new(:text_area, kit_name: "textarea"))
22
+
23
+ def actions
24
+ context = @template.respond_to?(:view_context) ? @template.view_context : @template
25
+ context.content_tag :ol, class: "pb-form-actions" do
26
+ yield ActionArea.new(@template, submit_default_value)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Playbook
4
- module PbForm
5
- module FormBuilder
4
+ module Forms
5
+ class Builder
6
6
  class ActionArea
7
7
  def initialize(view_context, submit_default_value)
8
8
  self.view_context = view_context
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module Forms
5
+ class Builder
6
+ def check_box(name, props: {}, **options)
7
+ label_text = @template.label(@object_name, name) if props[:label] == true
8
+ options[:required] = true if props[:required]
9
+ props[:margin_bottom] = "sm"
10
+ props[:form_spacing] = true
11
+
12
+ checked_value = options[:checked_value]
13
+ unchecked_value = options[:unchecked_value]
14
+ options.delete(:checked_value)
15
+ options.delete(:unchecked_value)
16
+
17
+ input = super(name, options, checked_value, unchecked_value)
18
+
19
+ if props[:label]
20
+ @template.pb_rails("caption", props: { text: label_text, margin_bottom: "xs" }) +
21
+ @template.pb_rails("checkbox", props: props) do
22
+ input
23
+ end
24
+ else
25
+ @template.pb_rails("checkbox", props: props) do
26
+ input
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module Forms
5
+ class Builder
6
+ def collection_select(name, collection, value_method, text_method, options = {}, html_options = {}, props: {} )
7
+ props[:label] = @template.label(@object_name, name) if props[:label] == true
8
+ options[:skip_default_ids] = false unless options.has_key?(:skip_default_ids)
9
+ options[:prompt] = props[:blank_selection] || ""
10
+ html_options[:required] = "required" if props[:required]
11
+ input = super(name, collection, value_method, text_method, options, html_options)
12
+
13
+ @template.pb_rails("select", props: props) do
14
+ input
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module Forms
5
+ class Builder
6
+ def date_picker(name, props: {})
7
+ prefix = @object_name
8
+ html_attribute_name = "#{prefix}[#{name}]"
9
+ html_id = "#{prefix}_#{name}"
10
+
11
+ props[:label] = @template.label(@object_name, name) if props[:label] == true
12
+ props[:label] = "Date Picker" if props[:label].nil?
13
+
14
+ props[:name] = html_attribute_name
15
+ props[:picker_id] = html_id
16
+
17
+ input = text_field(
18
+ name,
19
+ autocomplete: "off",
20
+ disabled: props[:disable_input],
21
+ data: props[:input_data],
22
+ aria: props[:input_aria],
23
+ props: {
24
+ error: props[:error],
25
+ label: props[:hide_label] ? nil : props[:label],
26
+ placeholder: props[:placeholder],
27
+ required: props[:required],
28
+ }
29
+ )
30
+
31
+ @template.pb_rails("date_picker", props: props) do
32
+ input
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end