lookbook 0.3.1 → 0.3.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e1f01b55ea75634f7e4cf2f7fe438ce6b56042daa5d7f178e50d0db7c267a644
4
- data.tar.gz: 81fddb93ab9aed2d51a59ecd00deced19c97a395ced5de3223db0d229f3a57dd
3
+ metadata.gz: 9d2f6afc23ec83a6ed2c19314540d26f83406da564385337fe29f9769253a432
4
+ data.tar.gz: bc239282a1bbbca50a72da683e270efafd60f515cf59a9b56ffc98b73f5e53a6
5
5
  SHA512:
6
- metadata.gz: 535340241df2352ba1c0fa5983f178cdb76d5fc39f0b4c9bcc8c34e4dc782177a4110f85a47ac6632064ac52b064f6936fe9cb764d5a5f2a8b527c9a80342bff
7
- data.tar.gz: 1d580f19491db04693d6e31941c198c4b1416665836d90436e84ddf4dadad7e325612be88c959fd2fff1900c061e2e54e2b8cbf82cda5ce947addcdba7bd251d
6
+ metadata.gz: '08d4cf77cc06512be08c1f1baf567b55ac4e8d0328281896ddb2dd7381051b9ed538e8c2333a4437629cfc3e7852f5398672d013a271cacfae4dad0bc8769d97'
7
+ data.tar.gz: b748d37275d69d82522b7e7746d31ed54d296dac939c5610d3559834207fc0488d682ee86b161c42418af71a80eaee79ec10f16cd276b4d510a87e3446379253
@@ -50,7 +50,7 @@ module Lookbook
50
50
  def find_preview
51
51
  candidates = []
52
52
  params[:path].to_s.scan(%r{/|$}) { candidates << $` }
53
- match = candidates.detect { |candidate| Lookbook::Preview.exists?(candidate) }
53
+ match = candidates.reverse.detect { |candidate| Lookbook::Preview.exists?(candidate) }
54
54
  @preview = match ? Lookbook::Preview.find(match) : nil
55
55
  end
56
56
 
@@ -95,7 +95,7 @@ module Lookbook
95
95
  html: preview_controller.render_example_to_string(@preview, example.name)
96
96
  }
97
97
  end
98
- joined = render_to_string "./preview_group", locals: {examples: examples}, layout: nil
98
+ joined = render_to_string "lookbook/preview_group", locals: {examples: examples}, layout: nil
99
99
  preview_controller.render_in_layout_to_string(joined, @preview.lookbook_layout)
100
100
  else
101
101
  preview_controller.request.params[:path] = "#{@preview.preview_name}/#{@example.name}".chomp("/")
@@ -152,7 +152,7 @@ module Lookbook
152
152
  end
153
153
 
154
154
  def previews
155
- Lookbook::Preview.all
155
+ Lookbook::Preview.all.sort_by(&:label)
156
156
  end
157
157
 
158
158
  def preview_controller
@@ -1,5 +1,5 @@
1
1
  <div class="flex flex-col h-full min-h-fill w-full">
2
- <%= render "./shared/header" %>
2
+ <%= render "shared/header" %>
3
3
  <div class="flex flex-col items-center justify-center h-full min-h-fill">
4
4
  <div class="p-4 text-center">
5
5
  <svg class="feather w-10 h-10 text-gray-300 mx-auto">
@@ -8,4 +8,4 @@
8
8
  <h5 class="mt-4 text-gray-400 text-base">Select a preview to get started</h5>
9
9
  </div>
10
10
  </div>
11
- </div>
11
+ </div>
@@ -1 +1 @@
1
- <%= render "./workbench" %>
1
+ <%= render "shared/workbench" %>
@@ -10,7 +10,7 @@
10
10
 
11
11
  <% if config.auto_refresh %>
12
12
  <script>
13
- window.SOCKET_PATH = "/lookbook/cable";
13
+ window.SOCKET_PATH = "<%= Lookbook::Engine.websocket_mount_path %>";
14
14
  </script>
15
15
  <% end %>
16
16
  <script src="/lookbook-assets/app.js" defer></script>
@@ -21,14 +21,14 @@
21
21
  <div
22
22
  x-data="page"
23
23
  x-effect="updateTitle"
24
- @refresh.document="fetchHTML().then(doc => $dispatch('document:updated', {doc}))"
24
+ @refresh.document="fetchHTML().then(doc => $dispatch('document:updated', {doc}))"
25
25
  @popstate.window="fetchHTML().then(doc => { $dispatch('document:loaded', {doc}); sidebarOpenMobile = false})"
26
26
  @sidebar:toggle.window="sidebarOpenMobile = !sidebarOpenMobile"
27
27
  :style="`grid-template-columns: ${$store.nav.width}px 1px 1fr;`"
28
28
  class="md:grid w-screen h-screen"
29
29
  >
30
30
  <div class="h-full bg-gray-100 overflow-hidden" x-show="$screen('md') || sidebarOpenMobile" x-cloak>
31
- <%= render "./sidebar" %>
31
+ <%= render "shared/sidebar" %>
32
32
  </div>
33
33
  <div x-data="split(splitProps)" class="h-full gutter border-r border-gray-300 relative" x-show="$screen('md')" x-cloak>
34
34
  <div class="w-[9px] h-full bg-transparent hover:bg-indigo-100 hover:bg-opacity-20 transition absolute top-0 bottom-0 transform -translate-x-1/2 cursor-[col-resize] z-10"></div>
@@ -1,5 +1,5 @@
1
- <%= render "./nav/node", node: node do %>
1
+ <%= render "nav/node", node: node do %>
2
2
  <% node.items.each do |item| %>
3
- <%= render "./nav/#{item.type.to_s}", node: item %>
4
- <% end %>
5
- <% end %>
3
+ <%= render "nav/#{item.type.to_s}", node: item %>
4
+ <% end %>
5
+ <% end %>
@@ -1,5 +1,5 @@
1
1
  <li id="<%= node.id %>" x-data="navNode" <% if node.hierarchy_depth == 1 %> class="py-1 border-b border-gray-300 cursor-pointer"<% end %> :class="{hidden}" x-cloak>
2
- <div @click="toggle(); if (open()) { <%= "navigate('#{path}')" if defined?(path) %>}" style="<%= nav_padding_style(node.hierarchy_depth) %>" class="hover:bg-gray-200 hover:bg-opacity-50">
2
+ <div @click="toggle" style="<%= nav_padding_style(node.hierarchy_depth) %>" class="hover:bg-gray-200 hover:bg-opacity-50">
3
3
  <div class="flex items-center cursor-pointer pr-3 py-[5px]">
4
4
  <svg class="feather w-3 h-3 mr-1 text-gray-500 flex-none">
5
5
  <use xlink:href="/lookbook-assets/feather-sprite.svg#chevron-down" x-show="open" x-cloak />
@@ -8,7 +8,7 @@
8
8
  <svg class="feather h-3.5 w-3.5 mr-1.5 flex-none text-indigo-500">
9
9
  <use xlink:href="/lookbook-assets/feather-sprite.svg#<%= node.type == :preview ? 'layers' : 'folder' %>" />
10
10
  </svg>
11
- <div class="truncate whitespace-nowrap text-left <%= "font-bold" if node.type == :preview %>">
11
+ <div class="truncate w-full whitespace-nowrap text-left <%= "font-bold" if node.type == :preview %>" @click.stop="toggle(); if (open()) { <%= "navigate('#{path}')" if defined?(path) %>}">
12
12
  <%= node.label %>
13
13
  </div>
14
14
  </div>
@@ -1,11 +1,11 @@
1
1
  <% examples = node.get_examples %>
2
2
  <% if examples.many? %>
3
- <%= render "./nav/node", node: node, path: show_path(examples.first.path) do %>
3
+ <%= render "nav/node", node: node, path: show_path(examples.first.path) do %>
4
4
  <% examples.each do |example| %>
5
- <%= render "./nav/leaf", leaf: example, depth: example.hierarchy_depth + 1 %>
5
+ <%= render "nav/leaf", leaf: example, depth: example.hierarchy_depth + 1 %>
6
6
  <% end %>
7
7
  <% end %>
8
8
  <% else %>
9
9
  <% example = examples.first %>
10
- <%= render "./nav/leaf", leaf: example, depth: example.hierarchy_depth, label: node.label, display: :node %>
11
- <% end %>
10
+ <%= render "nav/leaf", leaf: example, depth: example.hierarchy_depth, label: node.label, display: :node %>
11
+ <% end %>
@@ -5,4 +5,4 @@
5
5
  </svg>
6
6
  </button>
7
7
  <%= yield %>
8
- </header>
8
+ </header>
@@ -27,7 +27,7 @@
27
27
  <% if @nav.items.any? %>
28
28
  <ul x-ref="items">
29
29
  <% @nav.items.each do |item| %>
30
- <%= render "./nav/#{item.type.to_s}", node: item %>
30
+ <%= render "nav/#{item.type.to_s}", node: item %>
31
31
  <% end %>
32
32
  </ul>
33
33
  <div class="p-4 text-center" x-show="hidden" x-cloak>
@@ -41,5 +41,5 @@
41
41
  <% end %>
42
42
  </nav>
43
43
  </div>
44
- </div>
45
- </div>
44
+ </div>
45
+ </div>
@@ -1,12 +1,12 @@
1
1
  <div id="workbench" class="bg-gray-50 h-screen flex flex-col" x-data="workbench">
2
- <%= render "./workbench/header" %>
2
+ <%= render "workbench/header" %>
3
3
  <div class="md:grid flex-grow" :style="`grid-template-rows: 1fr 1px ${$store.inspector.height}px`">
4
- <%= render "./workbench/preview" %>
4
+ <%= render "workbench/preview" %>
5
5
  <div class="w-full gutter border-t border-gray-300 relative" x-data="split(splitProps)" x-show="$screen('md')">
6
6
  <div class="h-[11px] w-full bg-transparent hover:bg-indigo-100 hover:bg-opacity-20 transition absolute left-0 right-0 transform -translate-y-1/2 cursor-[row-resize]"></div>
7
7
  </div>
8
8
  <% if @inspector %>
9
- <%= render "./workbench/inspector", **@inspector %>
9
+ <%= render "workbench/inspector", **@inspector %>
10
10
  <% end %>
11
- </div>
12
- </div>
11
+ </div>
12
+ </div>
@@ -1,4 +1,4 @@
1
- <%= render "./shared/header" do %>
1
+ <%= render "shared/header" do %>
2
2
  <div class="flex items-center">
3
3
  <div class="flex items-center space-x-1">
4
4
  <strong class="whitespace-nowrap truncate"><%= @preview.label %></strong>
@@ -36,4 +36,4 @@
36
36
  </svg>
37
37
  </a>
38
38
  </div>
39
- <% end %>
39
+ <% end %>
@@ -21,12 +21,12 @@
21
21
  <% panes.each do |key, props| %>
22
22
  <div class="flex flex-col h-full relative" x-show="active('<%= key %>')" x-cloak>
23
23
  <% if props[:clipboard].present? %>
24
- <%= render "./shared/clipboard" do %><%= h props[:clipboard].strip %><% end %>
24
+ <%= render "shared/clipboard" do %><%= h props[:clipboard].strip %><% end %>
25
25
  <% end %>
26
26
  <div class="flex flex-col h-full overflow-auto">
27
- <%= render "./workbench/inspector/#{props[:template]}", key: key, **props %>
27
+ <%= render "workbench/inspector/#{props[:template]}", key: key, **props %>
28
28
  </div>
29
29
  </div>
30
30
  <% end %>
31
31
  </div>
32
- </div>
32
+ </div>
@@ -12,11 +12,11 @@ module Lookbook
12
12
  end
13
13
 
14
14
  def name
15
- @path ? @path.split("/").last : "root"
15
+ @path.present? ? @path.split("/").last : "root"
16
16
  end
17
17
 
18
18
  def label
19
- name.titleize
19
+ name&.titleize
20
20
  end
21
21
 
22
22
  def hierarchy_depth
@@ -24,7 +24,7 @@ module Lookbook
24
24
  end
25
25
 
26
26
  def items(sorted = true)
27
- sorted ? @items.sort_by(&:name) : @items
27
+ sorted ? @items.sort_by(&:label) : @items
28
28
  end
29
29
 
30
30
  def add(item)
@@ -23,6 +23,7 @@ module Lookbook
23
23
 
24
24
  options.auto_refresh = true if options.auto_refresh.nil?
25
25
  options.sort_examples = false if options.sort_examples.nil?
26
+ options.debug = false unless options.debug == true
26
27
 
27
28
  options.preview_paths = options.preview_paths.map(&:to_s)
28
29
  options.preview_paths += vc_options.preview_paths
@@ -43,10 +44,6 @@ module Lookbook
43
44
  end
44
45
  end
45
46
 
46
- initializer "lookbook.cable.logger" do
47
- Lookbook::Engine.cable.logger ||= Rails.logger
48
- end
49
-
50
47
  initializer "lookbook.parser.tags" do
51
48
  Lookbook::Parser.define_tags
52
49
  end
@@ -58,6 +55,15 @@ module Lookbook
58
55
  )
59
56
  end
60
57
 
58
+ initializer "lookbook.logging" do
59
+ if config.lookbook.debug == true
60
+ Lookbook::Engine.cable.logger ||= Rails.logger
61
+ else
62
+ Lookbook::Engine.cable.logger = Lookbook::NullLogger.new
63
+ config.action_view.logger = Lookbook::NullLogger.new
64
+ end
65
+ end
66
+
61
67
  initializer "lookbook.preview.extend" do
62
68
  ActiveSupport.on_load(:view_component) do
63
69
  ViewComponent::Preview.extend Lookbook::Preview
@@ -93,6 +99,10 @@ module Lookbook
93
99
  end
94
100
  end
95
101
 
102
+ def websocket_mount_path
103
+ "#{Lookbook::Engine.routes.find_script_name({})}#{cable.mount_path}"
104
+ end
105
+
96
106
  def cable
97
107
  @cable ||= ActionCable::Server::Configuration.new
98
108
  end
@@ -0,0 +1,47 @@
1
+ module Lookbook
2
+ class NullLogger
3
+ def unknown(*)
4
+ nil
5
+ end
6
+
7
+ def fatal(*)
8
+ nil
9
+ end
10
+
11
+ def fatal?
12
+ false
13
+ end
14
+
15
+ def error(*)
16
+ nil
17
+ end
18
+
19
+ def error?
20
+ false
21
+ end
22
+
23
+ def warn(*)
24
+ nil
25
+ end
26
+
27
+ def warn?
28
+ false
29
+ end
30
+
31
+ def info(*)
32
+ nil
33
+ end
34
+
35
+ def info?
36
+ false
37
+ end
38
+
39
+ def debug(*)
40
+ nil
41
+ end
42
+
43
+ def debug?
44
+ false
45
+ end
46
+ end
47
+ end
@@ -5,7 +5,7 @@ module Lookbook
5
5
  YARDOC_FILE_PATH = Rails.root.join("tmp/storage/.yardoc").to_s
6
6
 
7
7
  def initialize(paths)
8
- @paths = paths.map { |p| "#{p}/**/*.rb" }
8
+ @paths = paths.map { |p| "#{p}/**/*_preview.rb" }
9
9
  YARD::Registry.yardoc_file = YARDOC_FILE_PATH
10
10
  end
11
11
 
@@ -80,7 +80,7 @@ module Lookbook
80
80
 
81
81
  class << self
82
82
  def all
83
- ViewComponent::Preview.all
83
+ ViewComponent::Preview.all.sort_by(&:label)
84
84
  end
85
85
 
86
86
  def find(path)
@@ -90,8 +90,6 @@ module Lookbook
90
90
  def exists?(path)
91
91
  !!find(path)
92
92
  end
93
-
94
-
95
93
  end
96
94
 
97
95
  private
@@ -1,17 +1,19 @@
1
1
  module Lookbook
2
2
  module Taggable
3
3
  def lookbook_hidden?
4
- if code_object.tag(:hidden)
4
+ if code_object&.tag(:hidden)
5
5
  code_object.tag(:hidden).text.strip != "false"
6
6
  end
7
7
  end
8
8
 
9
9
  def lookbook_label
10
- code_object.tag(:label)&.text
10
+ code_object&.tag(:label)&.text
11
11
  end
12
12
 
13
13
  def lookbook_notes
14
- code_object.docstring.to_s.strip
14
+ if code_object&.docstring
15
+ code_object.docstring.to_s.strip
16
+ end
15
17
  end
16
18
 
17
19
  def lookbook_group
@@ -1,3 +1,3 @@
1
1
  module Lookbook
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.5"
3
3
  end
data/lib/lookbook.rb CHANGED
@@ -12,4 +12,5 @@ module Lookbook
12
12
  autoload :PreviewExample, "lookbook/preview_example"
13
13
  autoload :PreviewGroup, "lookbook/preview_group"
14
14
  autoload :Taggable, "lookbook/taggable"
15
+ autoload :NullLogger, "lookbook/null_logger"
15
16
  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", "").gsub("-",".")
9
+ new_version = args[:version].sub("v", "").tr("-", ".")
10
10
  file = File.open(filename)
11
11
  contents = file.read
12
12
  File.write(filename, contents.gsub(current_version, new_version))