playbook_ui 8.3.0 → 9.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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