lookbook 0.2.1 → 0.3.0.beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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))