playbook_ui 8.3.0 → 9.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_avatar/_avatar.scss +0 -3
  3. data/app/pb_kits/playbook/pb_form/docs/_description.md +2 -6
  4. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -1
  5. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +1 -4
  6. data/app/pb_kits/playbook/pb_form/docs/example.yml +2 -4
  7. data/app/pb_kits/playbook/pb_form/form.rb +14 -20
  8. data/app/pb_kits/playbook/pb_highlight/_highlight.jsx +1 -1
  9. data/app/pb_kits/playbook/pb_highlight/highlight.html.erb +3 -1
  10. data/app/pb_kits/playbook/pb_icon_stat_value/_icon_stat_value.jsx +3 -0
  11. data/app/pb_kits/playbook/pb_icon_stat_value/icon_stat_value.html.erb +1 -0
  12. data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.jsx +1 -1
  13. data/app/pb_kits/playbook/pb_progress_pills/docs/_description.md +3 -1
  14. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.html.erb +1 -1
  15. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.jsx +1 -0
  16. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_status.html.erb +1 -1
  17. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_status.jsx +1 -0
  18. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.html.erb +1 -1
  19. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.rb +5 -0
  20. data/app/pb_kits/playbook/pb_stat_value/_stat_value.jsx +2 -0
  21. data/app/pb_kits/playbook/pb_stat_value/stat_value.html.erb +2 -0
  22. data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +4 -0
  23. data/lib/playbook.rb +4 -1
  24. data/lib/playbook/forms.rb +3 -0
  25. data/lib/playbook/forms/builder.rb +31 -0
  26. data/{app/pb_kits/playbook/pb_form/form_builder → lib/playbook/forms/builder}/action_area.rb +2 -2
  27. data/lib/playbook/forms/builder/checkbox_field.rb +32 -0
  28. data/lib/playbook/forms/builder/collection_select_field.rb +19 -0
  29. data/lib/playbook/forms/builder/date_picker_field.rb +37 -0
  30. data/{app/pb_kits/playbook/pb_form/form_builder → lib/playbook/forms/builder}/form_field_builder.rb +2 -2
  31. data/lib/playbook/forms/builder/select_field.rb +19 -0
  32. data/lib/playbook/forms/builder/typeahead_field.rb +12 -0
  33. data/lib/playbook/pb_forms_helper.rb +41 -0
  34. data/lib/playbook/pb_kit_helper.rb +2 -0
  35. data/lib/playbook/props/base.rb +1 -1
  36. data/lib/playbook/version.rb +1 -1
  37. metadata +54 -65
  38. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form.html.erb +0 -60
  39. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form_validate.html.erb +0 -61
  40. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form_validate.md +0 -1
  41. data/app/pb_kits/playbook/pb_form/form_builder.rb +0 -31
  42. data/app/pb_kits/playbook/pb_form/form_builder/checkbox_field.rb +0 -34
  43. data/app/pb_kits/playbook/pb_form/form_builder/collection_select_field.rb +0 -21
  44. data/app/pb_kits/playbook/pb_form/form_builder/date_picker_field.rb +0 -39
  45. data/app/pb_kits/playbook/pb_form/form_builder/select_field.rb +0 -21
  46. data/app/pb_kits/playbook/pb_form/form_builder/typeahead_field.rb +0 -14
  47. data/app/pb_kits/playbook/pb_form/form_with.html.erb +0 -11
  48. data/app/pb_kits/playbook/pb_form/form_with.rb +0 -41
  49. data/app/pb_kits/playbook/pb_form/simple_form.html.erb +0 -11
  50. data/app/pb_kits/playbook/pb_form/simple_form.rb +0 -67
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 20c10bc88818a098a88244dae5b86297a03b9d22b0be15a262f21829f12c0236
4
- data.tar.gz: 62d4b2bebdd82c69816de65c0cf4822a0f9107c23de69d3a4d5fa6c2534e762a
3
+ metadata.gz: aef1741f04bc8e69735bca02d3a02371f3b505fa00e89886e0765ef9966cabb4
4
+ data.tar.gz: 7ba329497b8405ca204af5e7d41e18ec51e14d3691b33741f36767d385a0506e
5
5
  SHA512:
6
- metadata.gz: '079f98c19577878aa9f7e0dd7cfbb893f4eb51ff5a560da77947dea78210fb925d645b29319e6acf5904ea9c4ba34f11a1fd4cb8a625c702f870cd1dbe10fc36'
7
- data.tar.gz: e5f99fe04321876316262a71f408dfb2e752bee6f311febac948e4c95673f41e90aa21ee4079e482edbdc8f81ff303fd20bef751143918ca3f7246f11d4a452a
6
+ metadata.gz: 29359809591a9728d7be433e38691ca397c133c1b1ed9bbe85e75b95775fcd6d90f4c25c65eccd288f4197af1c5a7ed2016821d61967a1b737b9d467ac22baad
7
+ data.tar.gz: 85d37c87b12da09850947cc291b02e8a7edb081a4f165d8824d47a2cb0bc26a6a02eb30e486f0899b3b259753a67fe32d25486fdabee9fcdb9724bbc192b6f47
@@ -48,7 +48,6 @@ $avatar-sizes: (
48
48
  line-height: $size;
49
49
  text-transform: uppercase;
50
50
  position: relative;
51
- z-index: 0;
52
51
  }
53
52
 
54
53
  img {
@@ -57,7 +56,6 @@ $avatar-sizes: (
57
56
  position: absolute;
58
57
  top: 0;
59
58
  left: 0;
60
- z-index: 1;
61
59
  border-radius: $border-rad-mega;
62
60
  object-fit: cover;
63
61
  display: block;
@@ -69,7 +67,6 @@ $avatar-sizes: (
69
67
  top: 0;
70
68
  bottom: auto;
71
69
  left: auto;
72
- z-index: 500;
73
70
 
74
71
  &.size_xs {
75
72
  right: -4px;
@@ -1,10 +1,6 @@
1
- The `form` kit provides consumers with a convenient, consistently styled `<form>` wrapper.
1
+ The `form` kit provides consumers with a convenient, consistently styled `<form>` wrapper.
2
2
 
3
3
  ### Form Helpers
4
4
 
5
- There are currently two form helper options for Rails: [`form_with`](https://apidock.com/rails/ActionView/Helpers/FormHelper/form_with) and [`simple_form`](https://github.com/heartcombo/simple_form).
6
-
7
- **Note:** It is suggested to use `form_with` for newer or more progressive Rails applications and `simple_form` for older legacy forms where simple_form is already implemented and a complete overhaul might not make sense.
8
-
9
- This kit does make use of other kits such as text_input, select and typeahead to name a few. Doing so provides UI consistency within forms and makes adding a form to your page easier.
5
+ This kit uses rails `form_with` with our custom builder to render forms using other kits such as text_input, select, and typeahead to name a few. Doing so provides UI consistency within forms and makes adding a form to your page easier.
10
6
 
@@ -13,7 +13,7 @@
13
13
  ]
14
14
  %>
15
15
 
16
- <%= pb_rails("form", props: { form_system_options: { scope: :example, url: "", method: :get } }) do |form| %>
16
+ <%= pb_form_with(scope: :example, url: "", method: :get) do |form| %>
17
17
  <%= form.typeahead :example_user, props: { data: { typeahead_example1: true, user: {} }, placeholder: "Search for a user" } %>
18
18
  <%= form.text_field :example_text_field, props: { label: true } %>
19
19
  <%= form.telephone_field :example_phone_field, props: { label: true } %>
@@ -13,10 +13,7 @@
13
13
  ]
14
14
  %>
15
15
 
16
- <%= pb_rails("form/form_with", props: {
17
- scope: :example, method: :get, url: "",
18
- validate: true
19
- }) do |form| %>
16
+ <%= pb_form_with(scope: :example, method: :get, url: "", validate: true) do |form| %>
20
17
  <%= form.text_field :example_text_field, props: { label: true, required: true } %>
21
18
  <%= form.telephone_field :example_phone_field, props: { label: true, required: true, validation: { pattern: "[0-9]{3}-[0-9]{3}-[0-9]{4}", message: "Please enter a valid phone number (example: 888-888-8888)." } } %>
22
19
  <%= form.email_field :example_email_field, props: { label: true, required: true } %>
@@ -1,7 +1,5 @@
1
1
  examples:
2
2
 
3
3
  rails:
4
- - form_form_with: Default (Form With)
5
- - form_form_with_validate: Default (Form With) + Validation
6
- - form_simple_form: Default (Simple Form)
7
- - form_simple_form_validate: Default (Simple Form) + Validation
4
+ - form_form_with: Default
5
+ - form_form_with_validate: Default + Validation
@@ -3,33 +3,27 @@
3
3
  module Playbook
4
4
  module PbForm
5
5
  class Form < ::Playbook::KitBase
6
- prop :form_system, type: Playbook::Props::Enum,
7
- values: %w[form_with simple_form],
8
- default: "form_with"
9
- prop :form_system_options, type: Playbook::Props::Base
6
+ prop :form_system, deprecated: "Playbook only supports form_with and this prop is ignored",
7
+ type: Playbook::Props::Base
8
+ prop :form_system_options, deprecated: "Use options instead",
9
+ type: Playbook::Props::Base
10
+ prop :options, type: Playbook::Props::Base
10
11
  prop :validate, type: Playbook::Props::Boolean, default: false
11
12
 
12
- def form_system_options
13
- form_options = prop(:form_system_options)
14
- if form_options.is_a?(::Array)
15
- model, options = *form_options
16
- (options || {}).merge(model: model)
17
- else
18
- form_options
19
- end
20
- end
21
-
22
13
  def render_in(view_context, &block)
23
- form_kit.render_in(view_context, &block)
14
+ view_context.pb_form_with(form_options, &block)
24
15
  end
25
16
 
26
17
  private
27
18
 
28
- def form_kit
29
- @form_system ||= begin
30
- ::Playbook::KitResolver.resolve("form/#{form_system}")
31
- .new(options: form_system_options, validate: validate, children: children)
32
- end
19
+ def form_options
20
+ {
21
+ id: id,
22
+ aria: aria,
23
+ class: classname,
24
+ data: data,
25
+ validate: validate,
26
+ }.merge(prop(:options) || prop(:form_system_options) || { })
33
27
  end
34
28
  end
35
29
  end
@@ -28,7 +28,7 @@ const Highlight = (props: HighlightProps) => {
28
28
  autoEscape
29
29
  data={data}
30
30
  highlightClassName={classnames(globalProps(props), className)}
31
- highlightTag="span"
31
+ highlightTag="mark"
32
32
  id={id}
33
33
  searchWords={highlightedText}
34
34
  textToHighlight={text || children}
@@ -2,5 +2,7 @@
2
2
  id: object.id,
3
3
  data: object.data,
4
4
  class: object.classname) do %>
5
- <%= content.presence || object.text %>
5
+ <mark>
6
+ <%= content.presence || object.text %>
7
+ </mark>
6
8
  <% end %>
@@ -52,6 +52,7 @@ const IconStatValue = (props: IconStatValueProps) => {
52
52
  return (
53
53
  <Title
54
54
  size={1}
55
+ tag="span"
55
56
  text={`${value}`}
56
57
  />
57
58
  )
@@ -59,6 +60,7 @@ const IconStatValue = (props: IconStatValueProps) => {
59
60
  return (
60
61
  <Title
61
62
  size={2}
63
+ tag="span"
62
64
  text={`${value}`}
63
65
  />
64
66
  )
@@ -66,6 +68,7 @@ const IconStatValue = (props: IconStatValueProps) => {
66
68
  return (
67
69
  <Title
68
70
  size={3}
71
+ tag="span"
69
72
  text={`${value}`}
70
73
  />
71
74
  )
@@ -12,6 +12,7 @@
12
12
  <div>
13
13
  <%= pb_rails("flex", props: { vertical: "bottom" }) do %>
14
14
  <%= pb_rails "title", props: {
15
+ tag: "span",
15
16
  text: object.value_string,
16
17
  size: object.title_size } %>
17
18
  &nbsp;
@@ -46,7 +46,7 @@ const ProgressPill = ({ active, dark, step }: ProgressPillProps) => (
46
46
  const ProgressPills = (props: ProgressPillsProps) => {
47
47
  const {
48
48
  active = 0,
49
- aria = {},
49
+ aria = { hidden: true },
50
50
  className,
51
51
  data = {},
52
52
  id,
@@ -1 +1,3 @@
1
- Progress pills indicate a specific point in time of a series of sequential steps. They are used to track progress of something over time.
1
+ Progress pills indicate a specific point in time of a series of sequential steps. They are used to track progress of something over time.
2
+
3
+ Note: be sure to make use of the aria attribute as shown in the example if you want this kit to be web accessible.
@@ -1 +1 @@
1
- <%= pb_rails("progress_pills", props: { steps: 3, active: 2 }) %>
1
+ <%= pb_rails("progress_pills", props: { aria: { label: "2 out of 3 steps complete" }, steps: 3, active: 2 }) %>
@@ -7,6 +7,7 @@ const ProgressPillsDefault = (props) => {
7
7
  <div>
8
8
  <ProgressPills
9
9
  active={2}
10
+ aria={{ label: '2 out of 3 steps complete' }}
10
11
  steps={3}
11
12
  {...props}
12
13
  />
@@ -1 +1 @@
1
- <%= pb_rails("progress_pills", props: { steps: 3, active: 2, title:"Status:", value:"Orientation" }) %>
1
+ <%= pb_rails("progress_pills", props: { aria: { label: "2 out of 3 steps complete" }, steps: 3, active: 2, title:"Status:", value:"Orientation" }) %>
@@ -7,6 +7,7 @@ const ProgressPillsStatus = (props) => {
7
7
  <div>
8
8
  <ProgressPills
9
9
  active={2}
10
+ aria={{ label: '2 out of 3 steps complete' }}
10
11
  steps={3}
11
12
  title="Status:"
12
13
  value="Orientation"
@@ -1,5 +1,5 @@
1
1
  <%= content_tag(:div,
2
- aria: object.aria,
2
+ aria: object.aria_attributes,
3
3
  id: object.id,
4
4
  data: object.data,
5
5
  class: object.classname) do %>
@@ -26,6 +26,11 @@ module Playbook
26
26
  step <= active ? "_active" : "_inactive"
27
27
  end
28
28
 
29
+ def aria_attributes
30
+ return aria if aria.present?
31
+ { hidden: true }
32
+ end
33
+
29
34
  def dark_pill
30
35
  dark ? " dark" : nil
31
36
  end
@@ -25,6 +25,7 @@ const StatValue = (props: StatValueProps) => {
25
25
  return (
26
26
  <Title
27
27
  size={1}
28
+ tag="span"
28
29
  text={`${value}`}
29
30
  />
30
31
  )
@@ -36,6 +37,7 @@ const StatValue = (props: StatValueProps) => {
36
37
  return (
37
38
  <Title
38
39
  size={3}
40
+ tag="span"
39
41
  text={unit}
40
42
  />
41
43
  )
@@ -6,10 +6,12 @@
6
6
  <%= pb_rails "title", props: {
7
7
  classname: "pb_stat_value_kit",
8
8
  size: 1,
9
+ tag: "span",
9
10
  text: object.formatted_value } %>
10
11
  &nbsp;
11
12
  <%= pb_rails "title", props: {
12
13
  classname: "pb_stat_value_kit",
14
+ tag: "span",
13
15
  size: 3,
14
16
  text: object.unit } %>
15
17
  </div>
@@ -9,6 +9,7 @@
9
9
  }
10
10
  .pb_typeahead_wrapper {
11
11
  position: relative;
12
+
12
13
  .text_input_value_container{
13
14
  cursor: text;
14
15
  }
@@ -28,6 +29,9 @@
28
29
  }
29
30
  [class^=pb_text_input_kit] {
30
31
  .text_input_wrapper {
32
+ .text_input {
33
+ max-height: none;
34
+ }
31
35
  & > input:first-child {
32
36
  padding-right: $space_xl;
33
37
  }
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