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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 060bbc665f5d8d94eb51bc59b16af5175b9b1bf7e9bfd8c6e1fffa42b690e8df
4
- data.tar.gz: e40e476f42e53227913d489e305a9affab6566ee389a0cf52645571d7dcfb33c
3
+ metadata.gz: c921685c5d3955c36d8ae3c9e44ca3da8a85566f09b1586435c2e0eaadef53bc
4
+ data.tar.gz: 84fe2792d4bd4dbc7bb57bc150d5af4bec0cf93b7bbf7ed7e64a7b5c85e6b63d
5
5
  SHA512:
6
- metadata.gz: fc610e6bd830d1d91a90296c44b1600058f9ce285a556deda7574644f931567c8b9df3c641e01783be7c709ca0417c6f3b11f0adfba7eb9b843416aa34aa6697
7
- data.tar.gz: 6ccdb6de2019e82c42b4703cbf688c485060e8c7747b2a69d20623b045f30c28baa11665bf7066680989c7913afc62dedb5a49e7b2f40d75394ee6ac066adf77
6
+ metadata.gz: 68eb2a35ffe4c1b6ecf9fe60853562f7d2cd28ab16c17a8f4cc5904f9b05e56128fa66699fd82527346bdff505f8d797d5eb7251ac78d7095088c8dacabdc721
7
+ data.tar.gz: de3dfb369f495b031ac6744170d62c5dfe0ef1ff84cbbb470a03b35675fc8460abb63b44940764b7c6239e351a888d4a23a9c5733958d0595bd5dc97d2c62be9
@@ -6,7 +6,6 @@ module Playbook
6
6
  helper Playbook::ApplicationHelper
7
7
  helper Playbook::PbDocHelper
8
8
  helper Playbook::PbSampleHelper
9
- append_view_path Playbook::Engine.root + "app/pb_kits"
10
9
 
11
10
  def delete_dark_mode_cookie
12
11
  cookies.delete :dark_mode
@@ -6,6 +6,27 @@ module Playbook
6
6
  title.remove("pb_").titleize.tr("_", " ")
7
7
  end
8
8
 
9
+ def pb_doc_source(type, kit, example_key)
10
+ highlight = type == "react" ? "react" : "erb"
11
+ extension = type == "react" ? "jsx" : "html.erb"
12
+ source = read_source_file kit_path(kit).join("docs/_#{example_key}.#{extension}")
13
+ raw rouge(source, highlight)
14
+ end
15
+
16
+ def pb_doc_example(type, kit, example_key)
17
+ if type == "rails"
18
+ render file: kit_path(kit).join("docs/_#{example_key}.html.erb")
19
+ elsif type == "react"
20
+ pb_react(example_key.camelize)
21
+ end
22
+ end
23
+
24
+ def pb_doc_kit_api(kit)
25
+ kit_class = Playbook::KitResolver.resolve(kit.to_s)
26
+ return unless kit_class
27
+ render partial: "playbook/config/pb_kit_api", locals: { kit_api: kit_class.props.keys }
28
+ end
29
+
9
30
  def has_kit_type?(kit, type)
10
31
  type ||= "rails"
11
32
  if type == "rails"
@@ -17,20 +38,16 @@ module Playbook
17
38
  end
18
39
  end
19
40
 
20
- def kit_path(kit)
21
- "#{Playbook::Engine.root}/app/pb_kits/playbook/pb_#{kit}"
22
- end
23
-
24
41
  def get_kit_description(kit)
25
- read_source_file "app/pb_kits/playbook/pb_#{kit}/docs/_description.md"
42
+ read_source_file kit_path(kit).join("docs/_description.md")
26
43
  end
27
44
 
28
45
  def get_per_sample_descriptions(kit, key)
29
- read_source_file "app/pb_kits/playbook/pb_#{kit}/docs/_#{key}.md"
46
+ read_source_file kit_path(kit).join("docs/_#{key}.md")
30
47
  end
31
48
 
32
49
  def get_kit_footer(kit)
33
- read_source_file "app/pb_kits/playbook/pb_#{kit}/docs/_footer.md"
50
+ read_source_file kit_path(kit).join("docs/_footer.md")
34
51
  end
35
52
 
36
53
  def pb_kit(kit: "", type: "rails", show_code: true, limit_examples: false)
@@ -38,7 +55,7 @@ module Playbook
38
55
  @kit_examples = get_kit_examples(kit, type)
39
56
  @limit_examples = limit_examples
40
57
  @show_code = show_code
41
- render partial: "config/kit_example"
58
+ render partial: "playbook/config/kit_example"
42
59
  end
43
60
 
44
61
  def pb_kits(type: "rails", limit_examples: false)
@@ -76,16 +93,6 @@ module Playbook
76
93
  title + ui
77
94
  end
78
95
 
79
- def pb_kit_api(kit)
80
- kit_class_obj = get_class_name(kit.to_s)
81
- @kit_api = if kit_class_obj < Playbook::PbKit::Base
82
- kit_class_obj.instance_method(:initialize).parameters.map(&:last)
83
- else
84
- kit_class_obj.props.keys
85
- end
86
- render partial: "playbook/config/pb_kit_api"
87
- end
88
-
89
96
  def nav_hash_category(link)
90
97
  link.keys.first
91
98
  end
@@ -171,9 +178,12 @@ module Playbook
171
178
 
172
179
  private
173
180
 
181
+ def kit_path(kit)
182
+ Playbook::Engine.root.join("app/pb_kits/playbook/pb_#{kit}")
183
+ end
184
+
174
185
  def get_kit_examples(kit, type)
175
- example_file = File.join(Playbook::Engine.root,
176
- "app", "pb_kits", "playbook", "pb_#{kit}", "docs", "example.yml")
186
+ example_file = kit_path(kit).join("docs/example.yml")
177
187
  if File.exist? example_file
178
188
  examples_list = YAML.load_file(example_file)
179
189
  .inject({}) { |item, (k, v)| item[k.to_sym] = v; item }
@@ -183,12 +193,6 @@ module Playbook
183
193
  end
184
194
  end
185
195
 
186
- def get_class_name(kit)
187
- folder = is_subkit?(kit) ? kit.split("/")[0] : kit
188
- item = is_subkit?(kit) ? kit.split("/")[-1] : kit
189
- "Playbook::Pb#{folder.camelize}::#{item.camelize}".safe_constantize
190
- end
191
-
192
196
  def render_clickable_title(kit, type)
193
197
  url = "#"
194
198
  begin
@@ -289,9 +289,6 @@
289
289
  .numInputWrapper span svg path {
290
290
  fill: rgba(0,0,0,0.5);
291
291
  }
292
- .numInputWrapper:hover {
293
- background: rgba(0,0,0,0.05);
294
- }
295
292
  .numInputWrapper:hover span {
296
293
  opacity: 1;
297
294
  }
@@ -37,6 +37,7 @@
37
37
  border: 0;
38
38
  appearance: none;
39
39
  -webkit-appearance: none;
40
+ border-radius: 0;
40
41
  background-color: transparent;
41
42
  border-left: solid 1px $border_light;
42
43
  padding-left: $space_md - 1.5;
@@ -42,6 +42,6 @@
42
42
  -webkit-box-shadow: none;
43
43
  box-shadow: none;
44
44
  }
45
- .flatpickr-current-month .flatpickr-monthDropdown-months:hover {
45
+ .flatpickr-current-month .flatpickr-monthDropdown-months:hover, .numInputWrapper:hover {
46
46
  background-color: $white;
47
- }
47
+ }
@@ -0,0 +1,86 @@
1
+ <%= content_tag(:div,
2
+ id: object.id,
3
+ data: object.data,
4
+ class: object.classname) do %>
5
+ <%= object.wrapper do %>
6
+ <%= pb_rails("flex", props: { orientation: "row", padding_right: "lg", vertical: "center" }) do %>
7
+ <% if (object.template != "sort_only") %>
8
+ <%= pb_rails("circle_icon_button", props: { variant: "secondary", icon: "filter", id:"filter#{object.id}"}) %>
9
+ <div class="maskContainer">
10
+ <div class="filters">
11
+ <div class="left_gradient"></div>
12
+ <% object.filters.each do |filter| %>
13
+ <% if filter[:name] == "" %>
14
+ <div>
15
+ <%= pb_rails("body", props: {
16
+ color: "light",
17
+ padding_left: "xs",
18
+ size: 4,
19
+ tag:"h4",
20
+ text: "No Filter Selected"
21
+ }) %>
22
+ </div>
23
+ <% else %>
24
+ <div class="filter">
25
+ <%= pb_rails("caption", props: { text: filter[:name]}) %>
26
+ <%= pb_rails("title", props: { size: 4, tag:"h4", text: filter[:value]}) %>
27
+ </div>
28
+ <% end %>
29
+ <% end %>
30
+ <div class="right_gradient"></div>
31
+ </div>
32
+ </div>
33
+ <% if (object.template != "default") %>
34
+ <%= pb_rails("caption", props: {text: object.result_text, size:"xs", classname:"filter-results"})%>
35
+ <% end %>
36
+ <% end %>
37
+
38
+ <% if (object.template == "single" ) || (object.template == "sort_only") %>
39
+ <% unless object.sort_menu == [{}] %>
40
+ <%= pb_rails("button", props: {variant: "link",id: "sort-button#{object.id}",padding_right: "none"}) do %>
41
+ <% object.sort_menu.each do |item| %>
42
+ <% if item[:active] == true %>
43
+ <%= item[:item] %>
44
+ <%= pb_rails("icon", props: { icon: object.sort_icon(item[:direction]), fixed_width: true }) %>
45
+ <% end %>
46
+ <% end %>
47
+ <% end %>
48
+ <% end %>
49
+ <% end %>
50
+ <% end %>
51
+
52
+ <% if (object.template == "default")%>
53
+ <%= pb_rails("section_separator") %>
54
+ <%= pb_rails("flex", props: {orientation: "row", vertical: "center", spacing: "between", classname: "filter-bottom"}) do %>
55
+ <%= pb_rails("title_count", props: {title: "Results:",count: object.results, align:"center"}) %>
56
+ <%= pb_rails("flex", props: {orientation: "row", vertical: "center"}) do %>
57
+ <%= pb_rails("caption", props: { text: "sort by:"}) %>
58
+ <%= pb_rails("button", props: {variant: "link", padding_right: "none", id: "sort-button#{object.id}"}) do %>
59
+ <% object.sort_menu.each do |item| %>
60
+ <% if item[:active] == true %>
61
+ <%= item[:item] %>
62
+ <%= pb_rails("icon", props: { icon: object.sort_icon(item[:direction]), fixed_width: true }) %>
63
+ <% end %>
64
+ <% end %>
65
+ <% end %>
66
+ <% end %>
67
+ <% end %>
68
+ <% end %>
69
+ <% end %>
70
+
71
+ <% if object.template != "sort_only"%>
72
+ <%= pb_rails("popover", props: {min_width: object.min_width, close_on_click: "outside", trigger_element_id: "filter#{object.id}", tooltip_id: "filter-form#{object.id}", position: 'bottom'}) do %>
73
+ <%= content %>
74
+ <% end %>
75
+ <%end%>
76
+
77
+ <% if object.template != "filter_only"%>
78
+ <%= pb_rails("popover", props: {classname: "pb_filter_sort_menu", close_on_click: "outside", trigger_element_id: "sort-button#{object.id}", tooltip_id: "sort-filter-btn-tooltip#{object.id}", position: 'bottom', padding: 'none'}) do %>
79
+ <%= pb_rails("list") do %>
80
+ <% object.sort_menu.each do |item| %>
81
+ <%= pb_rails("list/item") do%> <%= pb_rails("button", props: {variant: "link" ,classname: "p-0", text: item[:item], link: item[:link]}) %><% end %>
82
+ <% end %>
83
+ <% end %>
84
+ <% end %>
85
+ <% end %>
86
+ <% end %>
@@ -2,11 +2,7 @@
2
2
 
3
3
  module Playbook
4
4
  module PbFilter
5
- class Filter
6
- include Playbook::Props
7
-
8
- partial "pb_filter/filter"
9
-
5
+ class Filter < Playbook::KitBase
10
6
  prop :filters, type: Playbook::Props::HashArray, default: [{name: ''}]
11
7
  prop :sort_menu, type: Playbook::Props::HashArray, default: [{}]
12
8
  prop :results, type: Playbook::Props::Numeric
@@ -31,6 +27,14 @@ module Playbook
31
27
  end
32
28
  end
33
29
 
30
+ def wrapper(&block)
31
+ if object.background
32
+ pb_rails("card", props: { padding: "none" }, &block)
33
+ else
34
+ capture(&block)
35
+ end
36
+ end
37
+
34
38
  def sort_icon(direction)
35
39
  case direction
36
40
  when "asc"
@@ -13,7 +13,7 @@
13
13
  ]
14
14
  %>
15
15
 
16
- <%= pb_rails("form", props: { form_system_options: { scope: :example, method: :get } }) do |form| %>
16
+ <%= pb_rails("form", props: { form_system_options: { 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 } %>
@@ -32,7 +32,7 @@
32
32
  unchecked_value: "no",
33
33
  id: "checkbox-id",
34
34
  name: "checkbox-name",
35
- class: "checkbox-class"
35
+ class: "checkbox-class"
36
36
  %>
37
37
  <%= form.date_picker :example_date_picker_1, props: { label: true } %>
38
38
 
@@ -14,7 +14,7 @@
14
14
  %>
15
15
 
16
16
  <%= pb_rails("form", props: {
17
- form_system_options: { scope: :example, method: :get },
17
+ form_system_options: { scope: :example, method: :get, url: "" },
18
18
  validate: true
19
19
  }) do |form| %>
20
20
  <%= form.text_field :example_text_field, props: { label: true, required: true } %>
@@ -39,8 +39,7 @@
39
39
  ]
40
40
  %>
41
41
 
42
-
43
- <%= pb_rails("form", props: { form_system: "simple_form", form_system_options: [example_form_model.new, url: "", method: :get] }) do |form| %>
42
+ <%= pb_rails("form/simple_form", props: { options: { model: example_form_model.new, url: "", method: :get } }) do |form| %>
44
43
  <%= form.input :example_text_field, as: :string %>
45
44
  <%= form.input :example_phone_field, as: :tel %>
46
45
  <%= form.input :example_email_field, as: :email %>
@@ -0,0 +1,7 @@
1
+ <%=
2
+ pb_rails("form/#{form_system}", props: {
3
+ options: form_system_options,
4
+ children: children,
5
+ validate: validate
6
+ })
7
+ %>
@@ -1,28 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # require_dependency "app/pb_kits/playbook/pb_form/form_builder"
4
-
5
3
  module Playbook
6
4
  module PbForm
7
- class Form
8
- include Playbook::Props
9
-
10
- clear_props
5
+ class Form < ::Playbook::KitBase
11
6
  prop :form_system, type: Playbook::Props::Enum,
12
7
  values: %w[form_with simple_form],
13
8
  default: "form_with"
14
9
  prop :form_system_options, type: Playbook::Props::Base
15
- prop :children, type: Playbook::Props::Proc
16
10
  prop :validate, type: Playbook::Props::Boolean, default: false
17
11
 
18
- delegate :to_partial_path, to: :specific_form
19
- delegate :merged_form_system_options, to: :specific_form
20
- delegate :form_builder, to: :specific_form
21
-
22
- private
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
23
21
 
24
- def specific_form
25
- @specific_form ||= "#{self.class}::#{form_system.classify}Form".constantize.new(self)
22
+ def render_in(view_context, &_block)
23
+ super(view_context, &nil)
26
24
  end
27
25
  end
28
26
  end
@@ -21,7 +21,7 @@ module Playbook
21
21
  prepend(DatePickerField)
22
22
 
23
23
  def actions(&block)
24
- ActionArea.new(self).wrapper(&block)
24
+ @template.render_component ActionArea.new(submit_default_value: submit_default_value), &block
25
25
  end
26
26
  end
27
27
  end
@@ -0,0 +1,3 @@
1
+ <ol class="pb-form-actions">
2
+ <%= content %>
3
+ </ol>
@@ -3,10 +3,8 @@
3
3
  module Playbook
4
4
  module PbForm
5
5
  module FormBuilder
6
- class ActionArea
7
- def initialize(form_builder)
8
- self.form_builder = form_builder
9
- end
6
+ class ActionArea < Playbook::KitBase
7
+ prop :submit_default_value, type: Playbook::Props::String
10
8
 
11
9
  def submit(value = nil, props: {})
12
10
  props[:type] ||= "submit"
@@ -14,26 +12,12 @@ module Playbook
14
12
  end
15
13
 
16
14
  def button(value = nil, props:)
17
- props[:text] ||= value || form_builder.send(:submit_default_value)
18
-
19
- template.content_tag(:li) do
20
- template.pb_rails("button", props: props)
21
- end
22
- end
15
+ props[:text] ||= value || submit_default_value
23
16
 
24
- def wrapper
25
- template.content_tag(:ol, class: "pb-form-actions") do
26
- yield self
17
+ content_tag(:li) do
18
+ pb_rails("button", props: props)
27
19
  end
28
20
  end
29
-
30
- private
31
-
32
- attr_accessor :form_builder
33
-
34
- def template
35
- form_builder.instance_variable_get("@template")
36
- end
37
21
  end
38
22
  end
39
23
  end
@@ -0,0 +1,18 @@
1
+ <%= form_with(id: id,
2
+ aria: aria,
3
+ class: classname,
4
+ data: data,
5
+ builder: form_builder,
6
+ **options) do |form| %>
7
+ <% instance_exec form, &children %>
8
+
9
+ <% if validate %>
10
+ <% content_for :pb_js do %>
11
+ <%= javascript_tag do %>
12
+ window.addEventListener('DOMContentLoaded', function() {
13
+ PbFormValidation.start()
14
+ })
15
+ <% end %>
16
+ <% end %>
17
+ <% end %>
18
+ <% end %>
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module PbForm
5
+ class FormWith < Playbook::KitBase
6
+ class FormBuilder < ::ActionView::Helpers::FormBuilder
7
+ include ::Playbook::PbForm::FormBuilder
8
+ end
9
+
10
+ prop :options, type: Playbook::Props::Hash, default: {}
11
+ prop :validate, type: Playbook::Props::Boolean, default: false
12
+
13
+ def data
14
+ prop(:data).merge("pb-form-validation" => validate)
15
+ end
16
+
17
+ def options
18
+ { url: "" }.merge(Hash(prop(:options)))
19
+ end
20
+
21
+ def classname
22
+ [generate_classname("pb-form"), options[:class]].join(" ")
23
+ end
24
+
25
+ def form_builder
26
+ ::Playbook::PbForm::FormWith::FormBuilder
27
+ end
28
+
29
+ def render_in(view_context, &_block)
30
+ super(view_context, &nil)
31
+ end
32
+ end
33
+ end
34
+ end