lookbook 0.3.0 → 0.3.4
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 +4 -4
- data/README.md +5 -3
- data/app/controllers/lookbook/app_controller.rb +2 -2
- data/app/views/lookbook/app/index.html.erb +2 -2
- data/app/views/lookbook/app/show.html.erb +1 -1
- data/app/views/lookbook/layouts/app.html.erb +3 -3
- data/app/views/lookbook/nav/_collection.html.erb +4 -4
- data/app/views/lookbook/nav/_node.html.erb +2 -2
- data/app/views/lookbook/nav/_preview.html.erb +4 -4
- data/app/views/lookbook/shared/_header.html.erb +1 -1
- data/app/views/lookbook/{_sidebar.html.erb → shared/_sidebar.html.erb} +3 -3
- data/app/views/lookbook/{_workbench.html.erb → shared/_workbench.html.erb} +5 -5
- data/app/views/lookbook/workbench/_header.html.erb +2 -2
- data/app/views/lookbook/workbench/_inspector.html.erb +3 -3
- data/lib/lookbook/collection.rb +3 -3
- data/lib/lookbook/engine.rb +22 -5
- data/lib/lookbook/null_logger.rb +47 -0
- data/lib/lookbook/parser.rb +1 -1
- data/lib/lookbook/preview.rb +1 -3
- data/lib/lookbook/taggable.rb +5 -3
- data/lib/lookbook/version.rb +1 -1
- data/lib/lookbook.rb +1 -0
- data/lib/tasks/lookbook_tasks.rake +1 -1
- data/public/lookbook-assets/app.css +84 -84
- metadata +9 -9
- data/lib/lookbook/navigation.rb +0 -68
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 64f02e35ce90b1e27249752c3ea536ead68b7f6dba3a6bb0991dff8f29f63d92
|
4
|
+
data.tar.gz: effca06a618749eb6be51880929f417d0de03fe180d60e3df026065a7d0718ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3323004e8ea85985c687adfe184b0519b3b168676df1640cdb5ada335ffef304a1266e6ad239e62968261e2c043c98b23589dd28ed3913e22c620500fc76cdde
|
7
|
+
data.tar.gz: a60ed3e4b295875fcac660f560d75dc4ac9ecff3cf26a410c30837326c84e26e8e2cea4ad183879ee94049836ab68fb81b3d59c0aab6c081d239744184cfc374
|
data/README.md
CHANGED
@@ -27,9 +27,9 @@ Lookbook uses [RDoc/Yard-style comment tags](https://rubydoc.info/gems/yard/file
|
|
27
27
|
- Resizable preview window for responsive testing
|
28
28
|
- Highlighted preview source code and HTML output
|
29
29
|
- Add notes via comments in the preview file (markdown supported)
|
30
|
-
- Auto-updating UI when component or preview files are updated
|
31
|
-
-
|
32
|
-
-
|
30
|
+
- Auto-updating UI when component or preview files are updated _(Rails v6.0+ only)_
|
31
|
+
- Hide, group and rename preview examples using comment tags
|
32
|
+
- Fully compatible with standard the ViewComponent preview system
|
33
33
|
|
34
34
|
## Lookbook demo
|
35
35
|
|
@@ -248,6 +248,8 @@ However the following Lookbook-specific config options are also available:
|
|
248
248
|
|
249
249
|
### UI auto-refresh
|
250
250
|
|
251
|
+
> ⚠️ UI auto-refresh is only supported in Rails v6.0+
|
252
|
+
|
251
253
|
Disable/enable the auto-updating of the Lookbook UI when files change. Enabled by default.
|
252
254
|
|
253
255
|
```ruby
|
@@ -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 "
|
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 "
|
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 "
|
1
|
+
<%= render "shared/workbench" %>
|
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
<% if config.auto_refresh %>
|
12
12
|
<script>
|
13
|
-
window.SOCKET_PATH = "
|
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 "
|
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 "
|
1
|
+
<%= render "nav/node", node: node do %>
|
2
2
|
<% node.items.each do |item| %>
|
3
|
-
<%= render "
|
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
|
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 "
|
3
|
+
<%= render "nav/node", node: node, path: show_path(examples.first.path) do %>
|
4
4
|
<% examples.each do |example| %>
|
5
|
-
<%= render "
|
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 "
|
11
|
-
<% end %>
|
10
|
+
<%= render "nav/leaf", leaf: example, depth: example.hierarchy_depth, label: node.label, display: :node %>
|
11
|
+
<% end %>
|
@@ -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 "
|
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 "
|
2
|
+
<%= render "workbench/header" %>
|
3
3
|
<div class="md:grid flex-grow" :style="`grid-template-rows: 1fr 1px ${$store.inspector.height}px`">
|
4
|
-
<%= render "
|
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 "
|
9
|
+
<%= render "workbench/inspector", **@inspector %>
|
10
10
|
<% end %>
|
11
|
-
</div>
|
12
|
-
</div>
|
11
|
+
</div>
|
12
|
+
</div>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<%= render "
|
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 "
|
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 "
|
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>
|
data/lib/lookbook/collection.rb
CHANGED
@@ -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
|
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(&:
|
27
|
+
sorted ? @items.sort_by(&:label) : @items
|
28
28
|
end
|
29
29
|
|
30
30
|
def add(item)
|
data/lib/lookbook/engine.rb
CHANGED
@@ -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
|
@@ -83,7 +89,18 @@ module Lookbook
|
|
83
89
|
|
84
90
|
class << self
|
85
91
|
def websocket
|
86
|
-
|
92
|
+
if Rails.version.to_f >= 6.0
|
93
|
+
@websocket ||= ActionCable::Server::Base.new(config: Lookbook::Engine.cable)
|
94
|
+
else
|
95
|
+
@websocket = ActionCable::Server::Base.new
|
96
|
+
@websocket.config = Lookbook::Engine.cable
|
97
|
+
|
98
|
+
@websocket
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def websocket_mount_path
|
103
|
+
"#{Lookbook::Engine.routes.find_script_name({})}#{cable.mount_path}"
|
87
104
|
end
|
88
105
|
|
89
106
|
def cable
|
@@ -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
|
data/lib/lookbook/parser.rb
CHANGED
data/lib/lookbook/preview.rb
CHANGED
@@ -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
|
data/lib/lookbook/taggable.rb
CHANGED
@@ -1,17 +1,19 @@
|
|
1
1
|
module Lookbook
|
2
2
|
module Taggable
|
3
3
|
def lookbook_hidden?
|
4
|
-
if code_object
|
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
|
10
|
+
code_object&.tag(:label)&.text
|
11
11
|
end
|
12
12
|
|
13
13
|
def lookbook_notes
|
14
|
-
code_object
|
14
|
+
if code_object&.docstring
|
15
|
+
code_object.docstring.to_s.strip
|
16
|
+
end
|
15
17
|
end
|
16
18
|
|
17
19
|
def lookbook_group
|
data/lib/lookbook/version.rb
CHANGED
data/lib/lookbook.rb
CHANGED
@@ -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", "").tr("-", ".")
|
10
10
|
file = File.open(filename)
|
11
11
|
contents = file.read
|
12
12
|
File.write(filename, contents.gsub(current_version, new_version))
|
@@ -1456,28 +1456,28 @@ pre[class*="language-"] {
|
|
1456
1456
|
bottom: 0px;
|
1457
1457
|
}
|
1458
1458
|
|
1459
|
-
.top-
|
1460
|
-
top:
|
1461
|
-
}
|
1462
|
-
|
1463
|
-
.right-2 {
|
1464
|
-
right: 0.5rem;
|
1459
|
+
.top-0 {
|
1460
|
+
top: 0px;
|
1465
1461
|
}
|
1466
1462
|
|
1467
|
-
.
|
1468
|
-
|
1463
|
+
.bottom-0 {
|
1464
|
+
bottom: 0px;
|
1469
1465
|
}
|
1470
1466
|
|
1471
1467
|
.right-0 {
|
1472
1468
|
right: 0px;
|
1473
1469
|
}
|
1474
1470
|
|
1475
|
-
.top-
|
1476
|
-
top:
|
1471
|
+
.top-1\/2 {
|
1472
|
+
top: 50%;
|
1477
1473
|
}
|
1478
1474
|
|
1479
|
-
.
|
1480
|
-
|
1475
|
+
.right-2 {
|
1476
|
+
right: 0.5rem;
|
1477
|
+
}
|
1478
|
+
|
1479
|
+
.left-0 {
|
1480
|
+
left: 0px;
|
1481
1481
|
}
|
1482
1482
|
|
1483
1483
|
.left-4 {
|
@@ -1493,14 +1493,6 @@ pre[class*="language-"] {
|
|
1493
1493
|
margin-right: auto;
|
1494
1494
|
}
|
1495
1495
|
|
1496
|
-
.ml-4 {
|
1497
|
-
margin-left: 1rem;
|
1498
|
-
}
|
1499
|
-
|
1500
|
-
.mb-1 {
|
1501
|
-
margin-bottom: 0.25rem;
|
1502
|
-
}
|
1503
|
-
|
1504
1496
|
.mt-4 {
|
1505
1497
|
margin-top: 1rem;
|
1506
1498
|
}
|
@@ -1529,6 +1521,14 @@ pre[class*="language-"] {
|
|
1529
1521
|
margin-right: 0.75rem;
|
1530
1522
|
}
|
1531
1523
|
|
1524
|
+
.ml-4 {
|
1525
|
+
margin-left: 1rem;
|
1526
|
+
}
|
1527
|
+
|
1528
|
+
.mb-1 {
|
1529
|
+
margin-bottom: 0.25rem;
|
1530
|
+
}
|
1531
|
+
|
1532
1532
|
.ml-auto {
|
1533
1533
|
margin-left: auto;
|
1534
1534
|
}
|
@@ -1553,6 +1553,10 @@ pre[class*="language-"] {
|
|
1553
1553
|
display: none;
|
1554
1554
|
}
|
1555
1555
|
|
1556
|
+
.h-screen {
|
1557
|
+
height: 100vh;
|
1558
|
+
}
|
1559
|
+
|
1556
1560
|
.h-full {
|
1557
1561
|
height: 100%;
|
1558
1562
|
}
|
@@ -1561,40 +1565,28 @@ pre[class*="language-"] {
|
|
1561
1565
|
height: 2.5rem;
|
1562
1566
|
}
|
1563
1567
|
|
1564
|
-
.h-5 {
|
1565
|
-
height:
|
1568
|
+
.h-3\.5 {
|
1569
|
+
height: 0.875rem;
|
1566
1570
|
}
|
1567
1571
|
|
1568
1572
|
.h-3 {
|
1569
1573
|
height: 0.75rem;
|
1570
1574
|
}
|
1571
1575
|
|
1572
|
-
.h-screen {
|
1573
|
-
height: 100vh;
|
1574
|
-
}
|
1575
|
-
|
1576
|
-
.h-\[11px\] {
|
1577
|
-
height: 11px;
|
1578
|
-
}
|
1579
|
-
|
1580
|
-
.h-3\.5 {
|
1581
|
-
height: 0.875rem;
|
1582
|
-
}
|
1583
|
-
|
1584
1576
|
.h-4 {
|
1585
1577
|
height: 1rem;
|
1586
1578
|
}
|
1587
1579
|
|
1588
|
-
.
|
1589
|
-
|
1580
|
+
.h-5 {
|
1581
|
+
height: 1.25rem;
|
1590
1582
|
}
|
1591
1583
|
|
1592
|
-
.
|
1593
|
-
|
1584
|
+
.h-\[11px\] {
|
1585
|
+
height: 11px;
|
1594
1586
|
}
|
1595
1587
|
|
1596
|
-
.w-
|
1597
|
-
width:
|
1588
|
+
.w-full {
|
1589
|
+
width: 100%;
|
1598
1590
|
}
|
1599
1591
|
|
1600
1592
|
.w-10 {
|
@@ -1613,10 +1605,18 @@ pre[class*="language-"] {
|
|
1613
1605
|
width: 0.875rem;
|
1614
1606
|
}
|
1615
1607
|
|
1608
|
+
.w-3 {
|
1609
|
+
width: 0.75rem;
|
1610
|
+
}
|
1611
|
+
|
1616
1612
|
.w-4 {
|
1617
1613
|
width: 1rem;
|
1618
1614
|
}
|
1619
1615
|
|
1616
|
+
.w-5 {
|
1617
|
+
width: 1.25rem;
|
1618
|
+
}
|
1619
|
+
|
1620
1620
|
.max-w-xs {
|
1621
1621
|
max-width: 20rem;
|
1622
1622
|
}
|
@@ -1633,22 +1633,18 @@ pre[class*="language-"] {
|
|
1633
1633
|
flex-grow: 1;
|
1634
1634
|
}
|
1635
1635
|
|
1636
|
-
.-translate-y-1\/2 {
|
1637
|
-
--tw-translate-y: -50%;
|
1638
|
-
transform: var(--tw-transform);
|
1639
|
-
}
|
1640
|
-
|
1641
1636
|
.-translate-x-1\/2 {
|
1642
1637
|
--tw-translate-x: -50%;
|
1643
1638
|
transform: var(--tw-transform);
|
1644
1639
|
}
|
1645
1640
|
|
1646
|
-
|
1641
|
+
.-translate-y-1\/2 {
|
1642
|
+
--tw-translate-y: -50%;
|
1647
1643
|
transform: var(--tw-transform);
|
1648
1644
|
}
|
1649
1645
|
|
1650
|
-
.
|
1651
|
-
|
1646
|
+
.transform {
|
1647
|
+
transform: var(--tw-transform);
|
1652
1648
|
}
|
1653
1649
|
|
1654
1650
|
.cursor-\[col-resize\] {
|
@@ -1659,6 +1655,10 @@ pre[class*="language-"] {
|
|
1659
1655
|
cursor: pointer;
|
1660
1656
|
}
|
1661
1657
|
|
1658
|
+
.cursor-\[row-resize\] {
|
1659
|
+
cursor: row-resize;
|
1660
|
+
}
|
1661
|
+
|
1662
1662
|
.cursor-auto {
|
1663
1663
|
cursor: auto;
|
1664
1664
|
}
|
@@ -1754,22 +1754,22 @@ pre[class*="language-"] {
|
|
1754
1754
|
border-width: 1px;
|
1755
1755
|
}
|
1756
1756
|
|
1757
|
-
.border-b {
|
1758
|
-
border-bottom-width: 1px;
|
1759
|
-
}
|
1760
|
-
|
1761
|
-
.border-t {
|
1762
|
-
border-top-width: 1px;
|
1763
|
-
}
|
1764
|
-
|
1765
1757
|
.border-r {
|
1766
1758
|
border-right-width: 1px;
|
1767
1759
|
}
|
1768
1760
|
|
1761
|
+
.border-b {
|
1762
|
+
border-bottom-width: 1px;
|
1763
|
+
}
|
1764
|
+
|
1769
1765
|
.border-l {
|
1770
1766
|
border-left-width: 1px;
|
1771
1767
|
}
|
1772
1768
|
|
1769
|
+
.border-t {
|
1770
|
+
border-top-width: 1px;
|
1771
|
+
}
|
1772
|
+
|
1773
1773
|
.border-b-2 {
|
1774
1774
|
border-bottom-width: 2px;
|
1775
1775
|
}
|
@@ -1802,25 +1802,25 @@ pre[class*="language-"] {
|
|
1802
1802
|
background-color: rgba(255, 255, 255, var(--tw-bg-opacity));
|
1803
1803
|
}
|
1804
1804
|
|
1805
|
-
.bg-transparent {
|
1806
|
-
background-color: transparent;
|
1807
|
-
}
|
1808
|
-
|
1809
|
-
.bg-gray-50 {
|
1810
|
-
--tw-bg-opacity: 1;
|
1811
|
-
background-color: rgba(249, 250, 251, var(--tw-bg-opacity));
|
1812
|
-
}
|
1813
|
-
|
1814
1805
|
.bg-gray-100 {
|
1815
1806
|
--tw-bg-opacity: 1;
|
1816
1807
|
background-color: rgba(243, 244, 246, var(--tw-bg-opacity));
|
1817
1808
|
}
|
1818
1809
|
|
1810
|
+
.bg-transparent {
|
1811
|
+
background-color: transparent;
|
1812
|
+
}
|
1813
|
+
|
1819
1814
|
.\!bg-indigo-100 {
|
1820
1815
|
--tw-bg-opacity: 1 !important;
|
1821
1816
|
background-color: rgba(224, 231, 255, var(--tw-bg-opacity)) !important;
|
1822
1817
|
}
|
1823
1818
|
|
1819
|
+
.bg-gray-50 {
|
1820
|
+
--tw-bg-opacity: 1;
|
1821
|
+
background-color: rgba(249, 250, 251, var(--tw-bg-opacity));
|
1822
|
+
}
|
1823
|
+
|
1824
1824
|
.p-4 {
|
1825
1825
|
padding: 1rem;
|
1826
1826
|
}
|
@@ -1833,11 +1833,6 @@ pre[class*="language-"] {
|
|
1833
1833
|
padding: 0.25rem;
|
1834
1834
|
}
|
1835
1835
|
|
1836
|
-
.px-4 {
|
1837
|
-
padding-left: 1rem;
|
1838
|
-
padding-right: 1rem;
|
1839
|
-
}
|
1840
|
-
|
1841
1836
|
.py-\[5px\] {
|
1842
1837
|
padding-top: 5px;
|
1843
1838
|
padding-bottom: 5px;
|
@@ -1853,6 +1848,11 @@ pre[class*="language-"] {
|
|
1853
1848
|
padding-bottom: 0.5rem;
|
1854
1849
|
}
|
1855
1850
|
|
1851
|
+
.px-4 {
|
1852
|
+
padding-left: 1rem;
|
1853
|
+
padding-right: 1rem;
|
1854
|
+
}
|
1855
|
+
|
1856
1856
|
.px-1 {
|
1857
1857
|
padding-left: 0.25rem;
|
1858
1858
|
padding-right: 0.25rem;
|
@@ -1896,6 +1896,11 @@ pre[class*="language-"] {
|
|
1896
1896
|
font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;
|
1897
1897
|
}
|
1898
1898
|
|
1899
|
+
.text-base {
|
1900
|
+
font-size: 1rem;
|
1901
|
+
line-height: 1.5rem;
|
1902
|
+
}
|
1903
|
+
|
1899
1904
|
.text-sm {
|
1900
1905
|
font-size: 0.875rem;
|
1901
1906
|
line-height: 1.25rem;
|
@@ -1906,11 +1911,6 @@ pre[class*="language-"] {
|
|
1906
1911
|
line-height: 1rem;
|
1907
1912
|
}
|
1908
1913
|
|
1909
|
-
.text-base {
|
1910
|
-
font-size: 1rem;
|
1911
|
-
line-height: 1.5rem;
|
1912
|
-
}
|
1913
|
-
|
1914
1914
|
.text-\[11px\] {
|
1915
1915
|
font-size: 11px;
|
1916
1916
|
}
|
@@ -1919,19 +1919,14 @@ pre[class*="language-"] {
|
|
1919
1919
|
font-weight: 700;
|
1920
1920
|
}
|
1921
1921
|
|
1922
|
-
.text-gray-
|
1923
|
-
--tw-text-opacity: 1;
|
1924
|
-
color: rgba(156, 163, 175, var(--tw-text-opacity));
|
1925
|
-
}
|
1926
|
-
|
1927
|
-
.text-gray-500 {
|
1922
|
+
.text-gray-300 {
|
1928
1923
|
--tw-text-opacity: 1;
|
1929
|
-
color: rgba(
|
1924
|
+
color: rgba(209, 213, 219, var(--tw-text-opacity));
|
1930
1925
|
}
|
1931
1926
|
|
1932
|
-
.text-gray-
|
1927
|
+
.text-gray-400 {
|
1933
1928
|
--tw-text-opacity: 1;
|
1934
|
-
color: rgba(
|
1929
|
+
color: rgba(156, 163, 175, var(--tw-text-opacity));
|
1935
1930
|
}
|
1936
1931
|
|
1937
1932
|
.text-red-300 {
|
@@ -1944,6 +1939,11 @@ pre[class*="language-"] {
|
|
1944
1939
|
color: rgba(55, 65, 81, var(--tw-text-opacity));
|
1945
1940
|
}
|
1946
1941
|
|
1942
|
+
.text-gray-500 {
|
1943
|
+
--tw-text-opacity: 1;
|
1944
|
+
color: rgba(107, 114, 128, var(--tw-text-opacity));
|
1945
|
+
}
|
1946
|
+
|
1947
1947
|
.text-gray-800 {
|
1948
1948
|
--tw-text-opacity: 1;
|
1949
1949
|
color: rgba(31, 41, 55, var(--tw-text-opacity));
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lookbook
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Perkins
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-10-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '5.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '5.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: view_component
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '3.
|
75
|
+
version: '3.0'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '3.
|
82
|
+
version: '3.0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: yard
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -207,8 +207,6 @@ files:
|
|
207
207
|
- app/channels/lookbook/reload_channel.rb
|
208
208
|
- app/controllers/lookbook/app_controller.rb
|
209
209
|
- app/helpers/lookbook/application_helper.rb
|
210
|
-
- app/views/lookbook/_sidebar.html.erb
|
211
|
-
- app/views/lookbook/_workbench.html.erb
|
212
210
|
- app/views/lookbook/app/error.html.erb
|
213
211
|
- app/views/lookbook/app/index.html.erb
|
214
212
|
- app/views/lookbook/app/not_found.html.erb
|
@@ -221,6 +219,8 @@ files:
|
|
221
219
|
- app/views/lookbook/preview_group.html.erb
|
222
220
|
- app/views/lookbook/shared/_clipboard.html.erb
|
223
221
|
- app/views/lookbook/shared/_header.html.erb
|
222
|
+
- app/views/lookbook/shared/_sidebar.html.erb
|
223
|
+
- app/views/lookbook/shared/_workbench.html.erb
|
224
224
|
- app/views/lookbook/workbench/_header.html.erb
|
225
225
|
- app/views/lookbook/workbench/_inspector.html.erb
|
226
226
|
- app/views/lookbook/workbench/_preview.html.erb
|
@@ -232,7 +232,7 @@ files:
|
|
232
232
|
- lib/lookbook/collection.rb
|
233
233
|
- lib/lookbook/engine.rb
|
234
234
|
- lib/lookbook/lang.rb
|
235
|
-
- lib/lookbook/
|
235
|
+
- lib/lookbook/null_logger.rb
|
236
236
|
- lib/lookbook/parser.rb
|
237
237
|
- lib/lookbook/preview.rb
|
238
238
|
- lib/lookbook/preview_controller.rb
|
data/lib/lookbook/navigation.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
module Lookbook
|
2
|
-
class Navigation
|
3
|
-
class << self
|
4
|
-
def previews
|
5
|
-
valid_previews = ViewComponent::Preview.all.filter { |preview| preview.get_visible_examples.any? && !preview.hidden? }
|
6
|
-
valid_previews.sort_by(&:normalized_name)
|
7
|
-
end
|
8
|
-
|
9
|
-
def flat
|
10
|
-
{
|
11
|
-
flat: true,
|
12
|
-
depth: 0,
|
13
|
-
items: previews.map do |preview|
|
14
|
-
nav_item_for_preview(preview, expand_name: true)
|
15
|
-
end
|
16
|
-
}
|
17
|
-
end
|
18
|
-
|
19
|
-
def nested
|
20
|
-
nav = {flat: false, depth: 0, items: []}
|
21
|
-
previews.each do |preview|
|
22
|
-
current = nav
|
23
|
-
depth = preview.path_parts.size
|
24
|
-
path = ""
|
25
|
-
preview.path_parts.each_with_index do |segment, i|
|
26
|
-
target = current[:items].find { |item| item[:name] == segment }
|
27
|
-
if target.nil?
|
28
|
-
path = "#{path.present? ? path + "." : ""}#{segment}"
|
29
|
-
target = {
|
30
|
-
depth: i + 1,
|
31
|
-
nested: true,
|
32
|
-
name: path,
|
33
|
-
label: segment.titleize,
|
34
|
-
type: :group,
|
35
|
-
items: []
|
36
|
-
}
|
37
|
-
current[:items].append(target)
|
38
|
-
end
|
39
|
-
if depth == i + 1
|
40
|
-
target[:items].push(nav_item_for_preview(preview))
|
41
|
-
else
|
42
|
-
current = target
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
nav
|
47
|
-
end
|
48
|
-
|
49
|
-
private
|
50
|
-
|
51
|
-
def nav_item_for_preview(preview, expand_name: false)
|
52
|
-
{
|
53
|
-
name: preview.preview_name.tr("/", "."),
|
54
|
-
label: expand_name ? "#{preview.pretty_path}/#{preview.label}" : preview.label,
|
55
|
-
type: :preview,
|
56
|
-
examples: preview.get_visible_examples.map do |example|
|
57
|
-
example_path = "#{preview.preview_name}/#{example.name}"
|
58
|
-
{
|
59
|
-
name: example.name,
|
60
|
-
label: example.label,
|
61
|
-
path: example_path
|
62
|
-
}
|
63
|
-
end
|
64
|
-
}
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|