lookbook 0.2.1 → 0.3.0.beta.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +155 -77
  3. data/app/assets/lookbook/css/app.css +28 -0
  4. data/app/assets/lookbook/js/app.js +51 -24
  5. data/app/assets/lookbook/js/nav/leaf.js +20 -0
  6. data/app/assets/lookbook/js/nav/node.js +31 -0
  7. data/app/assets/lookbook/js/nav.js +36 -0
  8. data/app/assets/lookbook/js/page.js +33 -0
  9. data/app/assets/lookbook/js/utils/clipboard.js +13 -0
  10. data/app/assets/lookbook/js/utils/morph.js +16 -0
  11. data/app/assets/lookbook/js/{reloader.js → utils/reloader.js} +0 -0
  12. data/app/assets/lookbook/js/utils/screen.js +44 -0
  13. data/app/assets/lookbook/js/{size_observer.js → utils/size_observer.js} +1 -1
  14. data/app/assets/lookbook/js/{split.js → utils/split.js} +4 -4
  15. data/app/assets/lookbook/js/workbench/inspector.js +11 -0
  16. data/app/assets/lookbook/js/workbench/preview.js +39 -0
  17. data/app/assets/lookbook/js/workbench.js +14 -0
  18. data/app/controllers/lookbook/{browser_controller.rb → app_controller.rb} +58 -31
  19. data/app/helpers/lookbook/application_helper.rb +1 -1
  20. data/app/views/lookbook/_sidebar.html.erb +45 -0
  21. data/app/views/lookbook/_workbench.html.erb +12 -0
  22. data/app/views/lookbook/{browser → app}/error.html.erb +0 -0
  23. data/app/views/lookbook/app/index.html.erb +11 -0
  24. data/app/views/lookbook/{browser → app}/not_found.html.erb +1 -1
  25. data/app/views/lookbook/app/show.html.erb +1 -0
  26. data/app/views/lookbook/layouts/app.html.erb +22 -30
  27. data/app/views/lookbook/layouts/group.html.erb +6 -0
  28. data/app/views/lookbook/nav/_collection.html.erb +5 -0
  29. data/app/views/lookbook/nav/_node.html.erb +19 -0
  30. data/app/views/lookbook/nav/_preview.html.erb +29 -0
  31. data/app/views/lookbook/shared/_clipboard.html.erb +11 -0
  32. data/app/views/lookbook/shared/_header.html.erb +8 -0
  33. data/app/views/lookbook/workbench/_header.html.erb +37 -0
  34. data/app/views/lookbook/workbench/_inspector.html.erb +32 -0
  35. data/app/views/lookbook/workbench/_preview.html.erb +24 -0
  36. data/app/views/lookbook/workbench/inspector/_code.html.erb +3 -0
  37. data/app/views/lookbook/workbench/inspector/_notes.html.erb +24 -0
  38. data/app/views/lookbook/{partials → workbench}/inspector/_plain.html.erb +0 -0
  39. data/config/routes.rb +6 -4
  40. data/lib/lookbook/engine.rb +6 -4
  41. data/lib/lookbook/preview.rb +25 -3
  42. data/lib/lookbook/preview_controller.rb +6 -1
  43. data/lib/lookbook/preview_example.rb +3 -2
  44. data/lib/lookbook/preview_group.rb +37 -0
  45. data/lib/lookbook/taggable.rb +5 -1
  46. data/lib/lookbook/version.rb +1 -1
  47. data/lib/lookbook.rb +1 -0
  48. data/lib/tasks/lookbook_tasks.rake +1 -1
  49. data/public/lookbook-assets/app.css +267 -113
  50. data/public/lookbook-assets/app.js +1014 -116
  51. data/{app/views/lookbook/partials/_icon_sprite.html.erb → public/lookbook-assets/feather-sprite.svg} +1 -1
  52. metadata +54 -27
  53. data/app/assets/lookbook/js/preview.js +0 -76
  54. data/app/views/lookbook/browser/index.html.erb +0 -8
  55. data/app/views/lookbook/browser/show.html.erb +0 -33
  56. data/app/views/lookbook/partials/_preview.html.erb +0 -18
  57. data/app/views/lookbook/partials/_sidebar.html.erb +0 -21
  58. data/app/views/lookbook/partials/inspector/_code.html.erb +0 -1
  59. data/app/views/lookbook/partials/inspector/_inspector.html.erb +0 -43
  60. data/app/views/lookbook/partials/inspector/_prose.html.erb +0 -3
  61. data/app/views/lookbook/partials/nav/_collection.html.erb +0 -17
  62. data/app/views/lookbook/partials/nav/_label.html.erb +0 -13
  63. data/app/views/lookbook/partials/nav/_nav.html.erb +0 -27
  64. data/app/views/lookbook/partials/nav/_preview.html.erb +0 -48
  65. data/config/lookbook_cable.yml +0 -8
@@ -28,6 +28,7 @@ module Lookbook
28
28
  options.preview_paths += vc_options.preview_paths
29
29
 
30
30
  options.preview_controller = vc_options.preview_controller if options.preview_controller.nil?
31
+ options.preview_srcdoc = true if options.preview_srcdoc.nil?
31
32
 
32
33
  options.listen_paths = options.listen_paths.map(&:to_s)
33
34
  options.listen_paths += options.preview_paths
@@ -35,10 +36,11 @@ module Lookbook
35
36
  end
36
37
 
37
38
  initializer "lookbook.cable.config" do |app|
38
- config_path = Lookbook::Engine.root.join("config", "lookbook_cable.yml")
39
- Lookbook::Engine.cable.cable = app.config_for(config_path).with_indifferent_access
40
- Lookbook::Engine.cable.mount_path = "/cable"
41
- Lookbook::Engine.cable.connection_class = -> { Lookbook::Connection }
39
+ if app.config.lookbook.auto_refresh
40
+ Lookbook::Engine.cable.cable = {adapter: "async"}.with_indifferent_access
41
+ Lookbook::Engine.cable.mount_path = "/cable"
42
+ Lookbook::Engine.cable.connection_class = -> { Lookbook::Connection }
43
+ end
42
44
  end
43
45
 
44
46
  initializer "lookbook.cable.logger" do
@@ -2,6 +2,10 @@ module Lookbook
2
2
  module Preview
3
3
  include Taggable
4
4
 
5
+ def id
6
+ lookbook_path.tr("_", "-")
7
+ end
8
+
5
9
  # Examples::FooBarComponent::Preview -> "Foo Bar"
6
10
  def lookbook_label
7
11
  super.presence || lookbook_path.split("/").last.titleize
@@ -19,9 +23,21 @@ module Lookbook
19
23
  return @lookbook_examples if @lookbook_examples.present?
20
24
  public_methods = public_instance_methods(false)
21
25
  public_method_objects = code_object.meths.filter { |m| public_methods.include?(m.name) }
22
- examples = public_method_objects.map { |m| PreviewExample.new(m.name.to_s, self) }
23
- examples.reject!(&:hidden?)
24
- @lookbook_examples ||= Lookbook.config.sort_examples ? examples.sort_by(&:label) : examples
26
+ visible = public_method_objects.map { |m| PreviewExample.new(m.name.to_s, self) }.reject(&:hidden?)
27
+ sorted = Lookbook.config.sort_examples ? visible.sort_by(&:label) : visible
28
+ @lookbook_examples = []
29
+ if code_object.groups.any?
30
+ sorted.group_by { |m| m.group }.each do |name, examples|
31
+ if name.nil?
32
+ @lookbook_examples += examples
33
+ else
34
+ @lookbook_examples << PreviewGroup.new(name.underscore, self, examples)
35
+ end
36
+ end
37
+ else
38
+ @lookbook_examples = sorted
39
+ end
40
+ @lookbook_examples
25
41
  end
26
42
 
27
43
  # Examples::FooBarComponentPreview -> "Examples::FooBar"
@@ -57,6 +73,10 @@ module Lookbook
57
73
  lookbook_path.tr("_", "-")
58
74
  end
59
75
 
76
+ def lookbook_layout
77
+ defined?(@layout) ? @layout : nil
78
+ end
79
+
60
80
  class << self
61
81
  def all
62
82
  ViewComponent::Preview.all
@@ -69,6 +89,8 @@ module Lookbook
69
89
  def exists?(path)
70
90
  !!find(path)
71
91
  end
92
+
93
+
72
94
  end
73
95
 
74
96
  private
@@ -1,6 +1,6 @@
1
1
  module Lookbook
2
2
  module PreviewController
3
- def render_component_to_string(preview, example_name)
3
+ def render_example_to_string(preview, example_name)
4
4
  prepend_application_view_paths
5
5
  prepend_preview_examples_view_path
6
6
  @preview = preview
@@ -13,5 +13,10 @@ module Lookbook
13
13
  opts[:locals] = locals if locals.present?
14
14
  render_to_string template, opts
15
15
  end
16
+
17
+ def render_in_layout_to_string(content, layout_override)
18
+ layout = determine_layout(layout_override, prepend_views: false)[:layout]
19
+ render_to_string html: content, layout: layout
20
+ end
16
21
  end
17
22
  end
@@ -41,8 +41,8 @@ module Lookbook
41
41
  :example
42
42
  end
43
43
 
44
- def filter_match_string
45
- [*@preview.lookbook_parent_collections, @preview.label, label].join("/").gsub(/\s/, "").downcase
44
+ def matchers
45
+ [@preview.label, label].map { |m| m.gsub(/\s/, "").downcase }
46
46
  end
47
47
 
48
48
  def hierarchy_depth
@@ -62,6 +62,7 @@ module Lookbook
62
62
  Pathname.new(Dir["#{base_path}/#{template_path}.html.*"].first)
63
63
  end
64
64
 
65
+ alias_method :group, :lookbook_group
65
66
  alias_method :notes, :lookbook_notes
66
67
  alias_method :hidden?, :lookbook_hidden?
67
68
  end
@@ -0,0 +1,37 @@
1
+ module Lookbook
2
+ class PreviewGroup
3
+ include Taggable
4
+
5
+ attr_reader :name, :examples
6
+
7
+ def initialize(name, preview, examples)
8
+ @name = name
9
+ @preview = preview
10
+ @examples = examples
11
+ end
12
+
13
+ def id
14
+ path.underscore.tr("_", "-")
15
+ end
16
+
17
+ def path
18
+ "#{@preview.lookbook_path}/#{name}"
19
+ end
20
+
21
+ def label
22
+ name.titleize
23
+ end
24
+
25
+ def type
26
+ :group
27
+ end
28
+
29
+ def matchers
30
+ [@preview.label, label].map { |m| m.gsub(/\s/, "").downcase }
31
+ end
32
+
33
+ def hierarchy_depth
34
+ @preview.lookbook_hierarchy_depth + 1
35
+ end
36
+ end
37
+ end
@@ -14,7 +14,11 @@ module Lookbook
14
14
  code_object.docstring.to_s.strip
15
15
  end
16
16
 
17
- private
17
+ def lookbook_group
18
+ code_object&.group
19
+ end
20
+
21
+ # private
18
22
 
19
23
  def code_object
20
24
  @code_object ||= Lookbook::Engine.parser.get_code_object(taggable_object_path)
@@ -1,3 +1,3 @@
1
1
  module Lookbook
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0.beta.0"
3
3
  end
data/lib/lookbook.rb CHANGED
@@ -10,5 +10,6 @@ module Lookbook
10
10
  autoload :Preview, "lookbook/preview"
11
11
  autoload :PreviewController, "lookbook/preview_controller"
12
12
  autoload :PreviewExample, "lookbook/preview_example"
13
+ autoload :PreviewGroup, "lookbook/preview_group"
13
14
  autoload :Taggable, "lookbook/taggable"
14
15
  end
@@ -6,7 +6,7 @@ namespace :lookbook do
6
6
  task :bump_version, [:version] do |t, args|
7
7
  filename = Lookbook::Engine.root.join("lib/lookbook/version.rb")
8
8
  current_version = Lookbook::VERSION.to_s
9
- new_version = args[:version].sub("v", "")
9
+ new_version = args[:version].sub("v", "").gsub("-",".")
10
10
  file = File.open(filename)
11
11
  contents = file.read
12
12
  File.write(filename, contents.gsub(current_version, new_version))