playbook_ui 7.16.0.pre.alpha2 → 8.0.0.pre.alpha1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/playbook/application_controller.rb +0 -1
- data/app/helpers/playbook/pb_doc_helper.rb +30 -26
- data/app/pb_kits/playbook/pb_date_picker/sass_partials/_flatpickr_styles.scss +0 -3
- data/app/pb_kits/playbook/pb_date_picker/sass_partials/_header_styles.scss +1 -0
- data/app/pb_kits/playbook/pb_date_picker/sass_partials/_overrides.scss +2 -2
- data/app/pb_kits/playbook/pb_filter/filter.html.erb +86 -0
- data/app/pb_kits/playbook/pb_filter/filter.rb +9 -5
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +2 -2
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +1 -1
- data/app/pb_kits/playbook/pb_form/docs/_form_simple_form.html.erb +1 -2
- data/app/pb_kits/playbook/pb_form/form.html.erb +7 -0
- data/app/pb_kits/playbook/pb_form/form.rb +12 -14
- data/app/pb_kits/playbook/pb_form/form_builder.rb +1 -1
- data/app/pb_kits/playbook/pb_form/form_builder/action_area.html.erb +3 -0
- data/app/pb_kits/playbook/pb_form/form_builder/action_area.rb +5 -21
- data/app/pb_kits/playbook/pb_form/form_with.html.erb +18 -0
- data/app/pb_kits/playbook/pb_form/form_with.rb +34 -0
- data/app/pb_kits/playbook/pb_form/{_form_simple_form.html.erb → simple_form.html.erb} +3 -3
- data/app/pb_kits/playbook/pb_form/simple_form.rb +63 -0
- data/app/pb_kits/playbook/pb_layout/{_item.html.erb → item.html.erb} +1 -1
- data/app/pb_kits/playbook/pb_layout/item.rb +1 -5
- data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +1 -0
- data/lib/playbook.rb +1 -0
- data/lib/playbook/classnames.rb +34 -0
- data/lib/playbook/engine.rb +4 -10
- data/lib/playbook/kit_base.rb +13 -1
- data/lib/playbook/kit_resolver.rb +23 -0
- data/lib/playbook/pb_kit_helper.rb +3 -24
- data/lib/playbook/props.rb +3 -118
- data/lib/playbook/spacing.rb +76 -0
- data/lib/playbook/version.rb +1 -1
- data/lib/playbook/z_index.rb +31 -0
- metadata +16 -18
- data/app/pb_kits/playbook/config/_kit_example.html.erb +0 -23
- data/app/pb_kits/playbook/config/_kit_samples_list.html.erb +0 -3
- data/app/pb_kits/playbook/config/_kit_ui.html.erb +0 -43
- data/app/pb_kits/playbook/config/_pb_kit_api.html.erb +0 -16
- data/app/pb_kits/playbook/pb_filter/_filter.html.erb +0 -6
- data/app/pb_kits/playbook/pb_filter/templates/_core.html.erb +0 -67
- data/app/pb_kits/playbook/pb_filter/templates/_default.html.erb +0 -23
- data/app/pb_kits/playbook/pb_form/_form_form_with.html.erb +0 -13
- data/app/pb_kits/playbook/pb_form/form/form_with_form.rb +0 -39
- data/app/pb_kits/playbook/pb_form/form/simple_form_form.rb +0 -46
- data/app/pb_kits/playbook/pb_form/form_builder/form_with_form_builder.rb +0 -11
- data/app/pb_kits/playbook/pb_form/form_builder/simple_form_builder.rb +0 -25
- data/app/pb_kits/playbook/pb_kit/base.rb +0 -99
@@ -1,8 +1,8 @@
|
|
1
|
-
<%= simple_form_for
|
2
|
-
<% instance_exec form, &
|
1
|
+
<%= simple_form_for model, options do |form| %>
|
2
|
+
<% instance_exec form, &children %>
|
3
3
|
<% end %>
|
4
4
|
|
5
|
-
<% if
|
5
|
+
<% if validate %>
|
6
6
|
<% content_for :pb_js do %>
|
7
7
|
<%= javascript_tag do %>
|
8
8
|
window.addEventListener('DOMContentLoaded', function() {
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
if defined?(SimpleForm)
|
4
|
+
module Playbook
|
5
|
+
module PbForm
|
6
|
+
class SimpleForm < Playbook::KitBase
|
7
|
+
class FormBuilder < ::SimpleForm::FormBuilder
|
8
|
+
include ::Playbook::PbForm::FormBuilder
|
9
|
+
|
10
|
+
def input(attribute_name, options = {}, &block)
|
11
|
+
super(
|
12
|
+
attribute_name,
|
13
|
+
options.deep_merge(label: false, input_html: {
|
14
|
+
props: {
|
15
|
+
label: true,
|
16
|
+
},
|
17
|
+
}),
|
18
|
+
&block
|
19
|
+
)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
prop :options, type: Playbook::Props::Hash, default: {}
|
24
|
+
prop :validate, type: Playbook::Props::Boolean, default: false
|
25
|
+
|
26
|
+
def options
|
27
|
+
{
|
28
|
+
builder: Playbook::PbForm::SimpleForm::FormBuilder,
|
29
|
+
html: html_options,
|
30
|
+
data: data,
|
31
|
+
url: "",
|
32
|
+
}.merge(prop(:options))
|
33
|
+
end
|
34
|
+
|
35
|
+
def model
|
36
|
+
prop(:options).fetch(:model, nil)
|
37
|
+
end
|
38
|
+
|
39
|
+
def data
|
40
|
+
prop(:data).merge("pb-form-validation" => validate)
|
41
|
+
end
|
42
|
+
|
43
|
+
def classname
|
44
|
+
[generate_classname("pb-form"), html[:class]].join(" ")
|
45
|
+
end
|
46
|
+
|
47
|
+
def html
|
48
|
+
prop(:options).fetch(:html, {})
|
49
|
+
end
|
50
|
+
|
51
|
+
def render_in(view_context, &_block)
|
52
|
+
super(view_context, &nil)
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def html_options
|
58
|
+
html.merge(class: classname)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
data/lib/playbook.rb
CHANGED
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Playbook
|
4
|
+
module Classnames
|
5
|
+
def self.included(base)
|
6
|
+
base.prop :classname
|
7
|
+
base.prop :dark, type: Playbook::Props::Boolean, default: false
|
8
|
+
end
|
9
|
+
|
10
|
+
def generate_classname(*name_parts, separator: "_")
|
11
|
+
[
|
12
|
+
name_parts.compact.join(separator),
|
13
|
+
prop(:classname),
|
14
|
+
spacing_props,
|
15
|
+
dark_props,
|
16
|
+
max_width_props,
|
17
|
+
z_index_props,
|
18
|
+
].compact.join(" ")
|
19
|
+
end
|
20
|
+
|
21
|
+
def generate_classname_without_spacing(*name_parts, separator: "_")
|
22
|
+
[
|
23
|
+
name_parts.compact.join(separator),
|
24
|
+
prop(:classname),
|
25
|
+
].compact.join(" ")
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def dark_props
|
31
|
+
dark ? "dark" : nil
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/playbook/engine.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "sassc-rails"
|
3
4
|
require "slim-rails"
|
4
5
|
|
@@ -13,18 +14,11 @@ module Playbook
|
|
13
14
|
config.view_component.render_monkey_patch_enabled = false
|
14
15
|
|
15
16
|
config.assets.paths ||= []
|
16
|
-
config.assets.paths <<
|
17
|
-
config.assets.paths <<
|
17
|
+
config.assets.paths << Playbook::Engine.root.join("fonts")
|
18
|
+
config.assets.paths << Playbook::Engine.root.join("app/pb_kits/playbook/pb_*")
|
18
19
|
|
19
20
|
config.sass.load_paths ||= []
|
20
|
-
config.sass.load_paths <<
|
21
|
-
|
22
|
-
initializer "playbook_ui.add_view_paths", after: :add_view_paths do |_app|
|
23
|
-
ActiveSupport.on_load(:action_controller) do
|
24
|
-
append_view_path "#{Gem.loaded_specs['playbook_ui'].full_gem_path}/app/pb_kits/playbook"
|
25
|
-
append_view_path "#{Gem.loaded_specs['playbook_ui'].full_gem_path}/app/pb_kits/playbook/config"
|
26
|
-
end
|
27
|
-
end
|
21
|
+
config.sass.load_paths << Playbook::Engine.root.join("app/pb_kits/playbook")
|
28
22
|
|
29
23
|
initializer "webpacker.proxy" do |app|
|
30
24
|
insert_middleware = begin
|
data/lib/playbook/kit_base.rb
CHANGED
@@ -1,9 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "playbook/classnames"
|
4
|
+
require "playbook/spacing"
|
5
|
+
require "playbook/z_index"
|
6
|
+
|
3
7
|
module Playbook
|
4
8
|
class KitBase < ViewComponent::Base
|
5
|
-
include Playbook::Props
|
6
9
|
include Playbook::PbKitHelper
|
10
|
+
include Playbook::Props
|
11
|
+
include Playbook::Classnames
|
12
|
+
include Playbook::Spacing
|
13
|
+
include Playbook::ZIndex
|
14
|
+
|
15
|
+
prop :id
|
16
|
+
prop :data, type: Playbook::Props::Hash, default: {}
|
17
|
+
prop :aria, type: Playbook::Props::Hash, default: {}
|
18
|
+
prop :children, type: Playbook::Props::Proc
|
7
19
|
|
8
20
|
def object
|
9
21
|
self
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Playbook
|
4
|
+
class KitResolver
|
5
|
+
def self.resolve(*args)
|
6
|
+
@resolver ||= new
|
7
|
+
@resolver.resolve(*args)
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@cache = Hash.new do |cache, kit_name|
|
12
|
+
is_subkit = kit_name.match(%r{[/\\]})
|
13
|
+
folder = is_subkit ? kit_name.split("/")[0] : kit_name
|
14
|
+
item = is_subkit ? kit_name.split("/")[-1] : kit_name
|
15
|
+
@cache[kit_name] = "Playbook::Pb#{folder.camelize}::#{item.camelize}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def resolve(kit_name)
|
20
|
+
@cache[kit_name].safe_constantize
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -2,30 +2,9 @@
|
|
2
2
|
|
3
3
|
module Playbook
|
4
4
|
module PbKitHelper
|
5
|
-
def pb_rails(
|
6
|
-
|
7
|
-
|
8
|
-
kit = build_view_model(kit.to_s, props, &block)
|
9
|
-
if kit.is_a?(Playbook::KitBase)
|
10
|
-
render_component kit, &block
|
11
|
-
else
|
12
|
-
render(partial: kit, as: :object)
|
13
|
-
end
|
14
|
-
ensure
|
15
|
-
self.prefix_partial_path_with_controller_namespace = previous
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
def is_subkit?(kit)
|
21
|
-
kit.match(%r{[/\\]})
|
22
|
-
end
|
23
|
-
|
24
|
-
def build_view_model(kit, props, &block)
|
25
|
-
folder = is_subkit?(kit) ? kit.split("/")[0] : kit
|
26
|
-
item = is_subkit?(kit) ? kit.split("/")[-1] : kit
|
27
|
-
class_name = "Playbook::Pb#{folder.camelize}::#{item.camelize}"
|
28
|
-
class_name.safe_constantize.new(props, &block)
|
5
|
+
def pb_rails(kit_name, props: {}, &block)
|
6
|
+
kit = Playbook::KitResolver.resolve(kit_name.to_s)
|
7
|
+
render_component kit.new(props, &block), &block
|
29
8
|
end
|
30
9
|
end
|
31
10
|
end
|
data/lib/playbook/props.rb
CHANGED
@@ -22,6 +22,9 @@ module Playbook
|
|
22
22
|
module Props
|
23
23
|
extend ActiveSupport::Concern
|
24
24
|
|
25
|
+
attr_accessor :values
|
26
|
+
private :values, :values=
|
27
|
+
|
25
28
|
def initialize(prop_values = {}, &block)
|
26
29
|
self.values = { children: block }.merge(Hash(prop_values))
|
27
30
|
self.class.props.each do |key, definition|
|
@@ -33,129 +36,11 @@ module Playbook
|
|
33
36
|
self.class.props[name].value values[name]
|
34
37
|
end
|
35
38
|
|
36
|
-
def spacing_props
|
37
|
-
selected_props = spacing_options.keys.select { |sk| try(sk) }
|
38
|
-
return nil unless selected_props.present?
|
39
|
-
|
40
|
-
selected_props.map do |k|
|
41
|
-
spacing_value = send(k)
|
42
|
-
"#{spacing_options[k]}_#{spacing_value}" if spacing_values.include? spacing_value
|
43
|
-
end.compact.join(" ")
|
44
|
-
end
|
45
|
-
|
46
|
-
def dark_props
|
47
|
-
dark ? "dark" : nil
|
48
|
-
end
|
49
|
-
|
50
|
-
def max_width_props
|
51
|
-
selected_mw_props = max_width_options.keys.select { |sk| try(sk) }
|
52
|
-
return nil unless selected_mw_props.present?
|
53
|
-
|
54
|
-
selected_mw_props.map do |k|
|
55
|
-
width_value = send(k)
|
56
|
-
"max_width_#{width_value}" if max_width_values.include? width_value
|
57
|
-
end.compact.join(" ")
|
58
|
-
end
|
59
|
-
|
60
|
-
def z_index_props
|
61
|
-
selected_index_props = z_index_options.keys.select { |sk| try(sk) }
|
62
|
-
return nil unless selected_index_props.present?
|
63
|
-
|
64
|
-
selected_index_props.map do |k|
|
65
|
-
index_value = send(k)
|
66
|
-
"z_index_#{index_value}" if z_index_values.include? index_value
|
67
|
-
end.compact.join(" ")
|
68
|
-
end
|
69
|
-
|
70
|
-
def generate_classname(*name_parts, separator: "_")
|
71
|
-
[
|
72
|
-
name_parts.compact.join(separator),
|
73
|
-
prop(:classname),
|
74
|
-
spacing_props,
|
75
|
-
dark_props,
|
76
|
-
max_width_props,
|
77
|
-
z_index_props,
|
78
|
-
].compact.join(" ")
|
79
|
-
end
|
80
|
-
|
81
|
-
def generate_classname_without_spacing(*name_parts, separator: "_")
|
82
|
-
[
|
83
|
-
name_parts.compact.join(separator),
|
84
|
-
prop(:classname),
|
85
|
-
].compact.join(" ")
|
86
|
-
end
|
87
|
-
|
88
39
|
attr_accessor :values
|
89
40
|
private :values, :values=
|
90
41
|
|
91
42
|
included do
|
92
43
|
class_attribute :props, default: {}
|
93
|
-
|
94
|
-
prop :id
|
95
|
-
prop :data, type: Playbook::Props::Hash, default: {}
|
96
|
-
prop :classname
|
97
|
-
prop :aria, type: Playbook::Props::Hash, default: {}
|
98
|
-
prop :children, type: Playbook::Props::Proc
|
99
|
-
prop :margin
|
100
|
-
prop :margin_bottom
|
101
|
-
prop :margin_left
|
102
|
-
prop :margin_right
|
103
|
-
prop :margin_top
|
104
|
-
prop :margin_x
|
105
|
-
prop :margin_y
|
106
|
-
prop :max_width
|
107
|
-
prop :padding
|
108
|
-
prop :padding_bottom
|
109
|
-
prop :padding_left
|
110
|
-
prop :padding_right
|
111
|
-
prop :padding_top
|
112
|
-
prop :padding_x
|
113
|
-
prop :padding_y
|
114
|
-
prop :dark, type: Playbook::Props::Boolean, default: false
|
115
|
-
prop :z_index
|
116
|
-
end
|
117
|
-
|
118
|
-
def spacing_options
|
119
|
-
{
|
120
|
-
margin: "m",
|
121
|
-
margin_bottom: "mb",
|
122
|
-
margin_left: "ml",
|
123
|
-
margin_right: "mr",
|
124
|
-
margin_top: "mt",
|
125
|
-
margin_x: "mx",
|
126
|
-
margin_y: "my",
|
127
|
-
padding: "p",
|
128
|
-
padding_bottom: "pb",
|
129
|
-
padding_left: "pl",
|
130
|
-
padding_right: "pr",
|
131
|
-
padding_top: "pt",
|
132
|
-
padding_x: "px",
|
133
|
-
padding_y: "py",
|
134
|
-
}
|
135
|
-
end
|
136
|
-
|
137
|
-
def max_width_options
|
138
|
-
{
|
139
|
-
max_width: "mw",
|
140
|
-
}
|
141
|
-
end
|
142
|
-
|
143
|
-
def max_width_values
|
144
|
-
%w[sm md lg xl]
|
145
|
-
end
|
146
|
-
|
147
|
-
def z_index_options
|
148
|
-
{
|
149
|
-
z_index: "z-index",
|
150
|
-
}
|
151
|
-
end
|
152
|
-
|
153
|
-
def z_index_values
|
154
|
-
%w[1 2 3 4 5 6 7 8 9 10]
|
155
|
-
end
|
156
|
-
|
157
|
-
def spacing_values
|
158
|
-
%w[none xs sm md lg xl]
|
159
44
|
end
|
160
45
|
|
161
46
|
class_methods do
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Playbook
|
4
|
+
module Spacing
|
5
|
+
def self.included(base)
|
6
|
+
base.prop :margin
|
7
|
+
base.prop :margin_bottom
|
8
|
+
base.prop :margin_left
|
9
|
+
base.prop :margin_right
|
10
|
+
base.prop :margin_top
|
11
|
+
base.prop :margin_x
|
12
|
+
base.prop :margin_y
|
13
|
+
base.prop :max_width
|
14
|
+
base.prop :padding
|
15
|
+
base.prop :padding_bottom
|
16
|
+
base.prop :padding_left
|
17
|
+
base.prop :padding_right
|
18
|
+
base.prop :padding_top
|
19
|
+
base.prop :padding_x
|
20
|
+
base.prop :padding_y
|
21
|
+
end
|
22
|
+
|
23
|
+
def spacing_options
|
24
|
+
{
|
25
|
+
margin: "m",
|
26
|
+
margin_bottom: "mb",
|
27
|
+
margin_left: "ml",
|
28
|
+
margin_right: "mr",
|
29
|
+
margin_top: "mt",
|
30
|
+
margin_x: "mx",
|
31
|
+
margin_y: "my",
|
32
|
+
padding: "p",
|
33
|
+
padding_bottom: "pb",
|
34
|
+
padding_left: "pl",
|
35
|
+
padding_right: "pr",
|
36
|
+
padding_top: "pt",
|
37
|
+
padding_x: "px",
|
38
|
+
padding_y: "py",
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
def spacing_values
|
43
|
+
%w[none xs sm md lg xl]
|
44
|
+
end
|
45
|
+
|
46
|
+
def spacing_props
|
47
|
+
selected_props = spacing_options.keys.select { |sk| try(sk) }
|
48
|
+
return nil unless selected_props.present?
|
49
|
+
|
50
|
+
selected_props.map do |k|
|
51
|
+
spacing_value = send(k)
|
52
|
+
"#{spacing_options[k]}_#{spacing_value}" if spacing_values.include? spacing_value
|
53
|
+
end.compact.join(" ")
|
54
|
+
end
|
55
|
+
|
56
|
+
def max_width_props
|
57
|
+
selected_mw_props = max_width_options.keys.select { |sk| try(sk) }
|
58
|
+
return nil unless selected_mw_props.present?
|
59
|
+
|
60
|
+
selected_mw_props.map do |k|
|
61
|
+
width_value = send(k)
|
62
|
+
"max_width_#{width_value}" if max_width_values.include? width_value
|
63
|
+
end.compact.join(" ")
|
64
|
+
end
|
65
|
+
|
66
|
+
def max_width_options
|
67
|
+
{
|
68
|
+
max_width: "mw",
|
69
|
+
}
|
70
|
+
end
|
71
|
+
|
72
|
+
def max_width_values
|
73
|
+
%w[sm md lg xl]
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|