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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/playbook/application_controller.rb +0 -1
  3. data/app/helpers/playbook/pb_doc_helper.rb +30 -26
  4. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_flatpickr_styles.scss +0 -3
  5. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_header_styles.scss +1 -0
  6. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_overrides.scss +2 -2
  7. data/app/pb_kits/playbook/pb_filter/filter.html.erb +86 -0
  8. data/app/pb_kits/playbook/pb_filter/filter.rb +9 -5
  9. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +2 -2
  10. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +1 -1
  11. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form.html.erb +1 -2
  12. data/app/pb_kits/playbook/pb_form/form.html.erb +7 -0
  13. data/app/pb_kits/playbook/pb_form/form.rb +12 -14
  14. data/app/pb_kits/playbook/pb_form/form_builder.rb +1 -1
  15. data/app/pb_kits/playbook/pb_form/form_builder/action_area.html.erb +3 -0
  16. data/app/pb_kits/playbook/pb_form/form_builder/action_area.rb +5 -21
  17. data/app/pb_kits/playbook/pb_form/form_with.html.erb +18 -0
  18. data/app/pb_kits/playbook/pb_form/form_with.rb +34 -0
  19. data/app/pb_kits/playbook/pb_form/{_form_simple_form.html.erb → simple_form.html.erb} +3 -3
  20. data/app/pb_kits/playbook/pb_form/simple_form.rb +63 -0
  21. data/app/pb_kits/playbook/pb_layout/{_item.html.erb → item.html.erb} +1 -1
  22. data/app/pb_kits/playbook/pb_layout/item.rb +1 -5
  23. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +1 -0
  24. data/lib/playbook.rb +1 -0
  25. data/lib/playbook/classnames.rb +34 -0
  26. data/lib/playbook/engine.rb +4 -10
  27. data/lib/playbook/kit_base.rb +13 -1
  28. data/lib/playbook/kit_resolver.rb +23 -0
  29. data/lib/playbook/pb_kit_helper.rb +3 -24
  30. data/lib/playbook/props.rb +3 -118
  31. data/lib/playbook/spacing.rb +76 -0
  32. data/lib/playbook/version.rb +1 -1
  33. data/lib/playbook/z_index.rb +31 -0
  34. metadata +16 -18
  35. data/app/pb_kits/playbook/config/_kit_example.html.erb +0 -23
  36. data/app/pb_kits/playbook/config/_kit_samples_list.html.erb +0 -3
  37. data/app/pb_kits/playbook/config/_kit_ui.html.erb +0 -43
  38. data/app/pb_kits/playbook/config/_pb_kit_api.html.erb +0 -16
  39. data/app/pb_kits/playbook/pb_filter/_filter.html.erb +0 -6
  40. data/app/pb_kits/playbook/pb_filter/templates/_core.html.erb +0 -67
  41. data/app/pb_kits/playbook/pb_filter/templates/_default.html.erb +0 -23
  42. data/app/pb_kits/playbook/pb_form/_form_form_with.html.erb +0 -13
  43. data/app/pb_kits/playbook/pb_form/form/form_with_form.rb +0 -39
  44. data/app/pb_kits/playbook/pb_form/form/simple_form_form.rb +0 -46
  45. data/app/pb_kits/playbook/pb_form/form_builder/form_with_form_builder.rb +0 -11
  46. data/app/pb_kits/playbook/pb_form/form_builder/simple_form_builder.rb +0 -25
  47. data/app/pb_kits/playbook/pb_kit/base.rb +0 -99
@@ -1,8 +1,8 @@
1
- <%= simple_form_for *object.merged_form_system_options do |form| %>
2
- <% instance_exec form, &object.children %>
1
+ <%= simple_form_for model, options do |form| %>
2
+ <% instance_exec form, &children %>
3
3
  <% end %>
4
4
 
5
- <% if object.validate %>
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
@@ -2,5 +2,5 @@
2
2
  id: object.id,
3
3
  data: object.data,
4
4
  class: object.classname) do %>
5
- <%= capture(&object.children) %>
5
+ <%= content %>
6
6
  <% end %>
@@ -2,11 +2,7 @@
2
2
 
3
3
  module Playbook
4
4
  module PbLayout
5
- class Item
6
- include Playbook::Props
7
-
8
- partial "pb_layout/item"
9
-
5
+ class Item < Playbook::KitBase
10
6
  prop :size, type: Playbook::Props::Enum,
11
7
  values: %w[sm md lg],
12
8
  default: "sm"
@@ -40,6 +40,7 @@ module Playbook
40
40
  id: id,
41
41
  isMulti: true,
42
42
  label: label,
43
+ name: name,
43
44
  options: options,
44
45
  placeholder: placeholder,
45
46
  }
data/lib/playbook.rb CHANGED
@@ -10,6 +10,7 @@ require "playbook/props"
10
10
  require "playbook/version"
11
11
  require "playbook/pb_kit_helper"
12
12
  require "playbook/kit_base"
13
+ require "playbook/kit_resolver"
13
14
  require "playbook/markdown/template_handler"
14
15
  require "playbook/engine" if defined?(Rails)
15
16
 
@@ -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
@@ -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 << "#{Gem.loaded_specs['playbook_ui'].full_gem_path}/fonts"
17
- config.assets.paths << "#{Gem.loaded_specs['playbook_ui'].full_gem_path}/app/pb_kits/playbook/pb_*"
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 << "#{Gem.loaded_specs['playbook_ui'].full_gem_path}/app/pb_kits/playbook"
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
@@ -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(kit, props: {}, &block)
6
- previous = prefix_partial_path_with_controller_namespace
7
- self.prefix_partial_path_with_controller_namespace = false
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
@@ -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