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.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/pb_avatar/_avatar.scss +0 -3
- data/app/pb_kits/playbook/pb_form/docs/_description.md +2 -6
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -1
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +1 -4
- data/app/pb_kits/playbook/pb_form/docs/example.yml +2 -4
- data/app/pb_kits/playbook/pb_form/form.rb +14 -20
- data/app/pb_kits/playbook/pb_highlight/_highlight.jsx +1 -1
- data/app/pb_kits/playbook/pb_highlight/highlight.html.erb +3 -1
- data/app/pb_kits/playbook/pb_icon_stat_value/_icon_stat_value.jsx +3 -0
- data/app/pb_kits/playbook/pb_icon_stat_value/icon_stat_value.html.erb +1 -0
- data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.jsx +1 -1
- data/app/pb_kits/playbook/pb_progress_pills/docs/_description.md +3 -1
- data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.html.erb +1 -1
- data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.jsx +1 -0
- data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_status.html.erb +1 -1
- data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_status.jsx +1 -0
- data/app/pb_kits/playbook/pb_progress_pills/progress_pills.html.erb +1 -1
- data/app/pb_kits/playbook/pb_progress_pills/progress_pills.rb +5 -0
- data/app/pb_kits/playbook/pb_stat_value/_stat_value.jsx +2 -0
- data/app/pb_kits/playbook/pb_stat_value/stat_value.html.erb +2 -0
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +4 -0
- data/lib/playbook.rb +4 -1
- data/lib/playbook/forms.rb +3 -0
- data/lib/playbook/forms/builder.rb +31 -0
- data/{app/pb_kits/playbook/pb_form/form_builder → lib/playbook/forms/builder}/action_area.rb +2 -2
- data/lib/playbook/forms/builder/checkbox_field.rb +32 -0
- data/lib/playbook/forms/builder/collection_select_field.rb +19 -0
- data/lib/playbook/forms/builder/date_picker_field.rb +37 -0
- data/{app/pb_kits/playbook/pb_form/form_builder → lib/playbook/forms/builder}/form_field_builder.rb +2 -2
- data/lib/playbook/forms/builder/select_field.rb +19 -0
- data/lib/playbook/forms/builder/typeahead_field.rb +12 -0
- data/lib/playbook/pb_forms_helper.rb +41 -0
- data/lib/playbook/pb_kit_helper.rb +2 -0
- data/lib/playbook/props/base.rb +1 -1
- data/lib/playbook/version.rb +1 -1
- metadata +54 -65
- data/app/pb_kits/playbook/pb_form/docs/_form_simple_form.html.erb +0 -60
- data/app/pb_kits/playbook/pb_form/docs/_form_simple_form_validate.html.erb +0 -61
- data/app/pb_kits/playbook/pb_form/docs/_form_simple_form_validate.md +0 -1
- data/app/pb_kits/playbook/pb_form/form_builder.rb +0 -31
- data/app/pb_kits/playbook/pb_form/form_builder/checkbox_field.rb +0 -34
- data/app/pb_kits/playbook/pb_form/form_builder/collection_select_field.rb +0 -21
- data/app/pb_kits/playbook/pb_form/form_builder/date_picker_field.rb +0 -39
- data/app/pb_kits/playbook/pb_form/form_builder/select_field.rb +0 -21
- data/app/pb_kits/playbook/pb_form/form_builder/typeahead_field.rb +0 -14
- data/app/pb_kits/playbook/pb_form/form_with.html.erb +0 -11
- data/app/pb_kits/playbook/pb_form/form_with.rb +0 -41
- data/app/pb_kits/playbook/pb_form/simple_form.html.erb +0 -11
- 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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aef1741f04bc8e69735bca02d3a02371f3b505fa00e89886e0765ef9966cabb4
|
4
|
+
data.tar.gz: 7ba329497b8405ca204af5e7d41e18ec51e14d3691b33741f36767d385a0506e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
-
<%=
|
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
|
-
<%=
|
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
|
5
|
-
- form_form_with_validate: Default
|
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,
|
7
|
-
|
8
|
-
|
9
|
-
|
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
|
-
|
14
|
+
view_context.pb_form_with(form_options, &block)
|
24
15
|
end
|
25
16
|
|
26
17
|
private
|
27
18
|
|
28
|
-
def
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
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="
|
31
|
+
highlightTag="mark"
|
32
32
|
id={id}
|
33
33
|
searchWords={highlightedText}
|
34
34
|
textToHighlight={text || children}
|
@@ -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
|
)
|
@@ -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 }) %>
|
@@ -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" }) %>
|
@@ -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
|
|
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,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
|
@@ -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
|