lookbook 2.0.0.beta.1 → 2.0.0.beta.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/lookbook/css/fonts.css +33 -0
- data/app/assets/lookbook/css/lookbook.css +1 -0
- data/app/assets/lookbook/fonts/Inter-italic.var.woff2 +0 -0
- data/app/assets/lookbook/fonts/Inter-roman.var.woff2 +0 -0
- data/app/assets/lookbook/fonts/SourceCodeVariable-Italic.ttf.woff2 +0 -0
- data/app/assets/lookbook/fonts/SourceCodeVariable-Roman.ttf.woff2 +0 -0
- data/app/assets/lookbook/js/lib/lookbook.js +12 -2
- data/app/components/lookbook/embed_code_dropdown/component.html.erb +4 -1
- data/app/components/lookbook/embed_code_dropdown/component.rb +3 -2
- data/app/components/lookbook/nav/entity/component.html.erb +1 -1
- data/app/components/lookbook/page_tabs/component.html.erb +2 -2
- data/app/controllers/concerns/lookbook/targetable_concern.rb +3 -2
- data/app/controllers/lookbook/previews_controller.rb +6 -1
- data/app/views/layouts/lookbook/application.html.erb +1 -1
- data/app/views/lookbook/inspector/show.html.erb +10 -7
- data/app/views/lookbook/pages/show.html.erb +3 -3
- data/config/app.yml +2 -1
- data/config/routes.rb +4 -2
- data/lib/lookbook/engine.rb +24 -5
- data/lib/lookbook/entities/scenario_group_entity.rb +1 -1
- data/lib/lookbook/error.rb +1 -1
- data/lib/lookbook/helpers/preview_helper.rb +4 -0
- data/lib/lookbook/services/markdown_renderer.rb +2 -4
- data/lib/lookbook/version.rb +1 -1
- data/public/lookbook-assets/Inter-italic.var.69eb0fe1.woff2 +0 -0
- data/public/lookbook-assets/Inter-italic.var.736a7044.woff2 +0 -0
- data/public/lookbook-assets/Inter-roman.var.b695afbe.woff2 +0 -0
- data/public/lookbook-assets/Inter-roman.var.fbdd51d0.woff2 +0 -0
- data/public/lookbook-assets/SourceCodeVariable-Italic.cad97b83.otf +0 -0
- data/public/lookbook-assets/SourceCodeVariable-Italic.ttf.09b4354a.woff2 +0 -0
- data/public/lookbook-assets/SourceCodeVariable-Italic.ttf.fcd7e9f4.woff2 +0 -0
- data/public/lookbook-assets/SourceCodeVariable-Roman.185ddb17.otf +0 -0
- data/public/lookbook-assets/SourceCodeVariable-Roman.ttf.118e9f22.woff2 +0 -0
- data/public/lookbook-assets/SourceCodeVariable-Roman.ttf.91043609.woff2 +0 -0
- data/public/lookbook-assets/css/lookbook.css +426 -386
- data/public/lookbook-assets/css/lookbook.css.map +1 -1
- data/public/lookbook-assets/js/lookbook-core.js +4 -2
- data/public/lookbook-assets/js/lookbook.js +4 -2
- metadata +18 -21
- data/lib/tasks/lookbook_tasks.rake +0 -10
- data/public/lookbook-assets/css/app.css +0 -2341
- data/public/lookbook-assets/css/app.css.map +0 -11
- data/public/lookbook-assets/css/themes/zinc.css.map.91837.5 +0 -1
- data/public/lookbook-assets/feather-sprite.svg +0 -1
- data/public/lookbook-assets/js/app.js +0 -10862
- data/public/lookbook-assets/js/app.js.map +0 -2571
- data/public/lookbook-assets/js/embed.js +0 -1427
- data/public/lookbook-assets/js/embed.js.91837.6 +0 -0
- data/public/lookbook-assets/js/embed.js.map +0 -1
- data/public/lookbook-assets/js/lookbook-core.js.map +0 -1
- data/public/lookbook-assets/js/lookbook.js.map +0 -1
- data/public/lookbook-assets/lookbook-esm.js +0 -1427
- data/public/lookbook-assets/lookbook-esm.js.map +0 -1
- data/public/lookbook-assets/lookbook-global.js +0 -1427
- data/public/lookbook-assets/lookbook-global.js.map +0 -1
- data/public/lookbook-assets/lookbook.js +0 -1427
- data/public/lookbook-assets/lookbook.js.map +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fcdd4b9e317b56fb9844a1f7017604b77de9992c2d837dc927c9114d5da085cd
|
4
|
+
data.tar.gz: 4cde43bf1aa5df6d781fdf5406faff47cee683bd778654b78d7c96b1439e61ab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99f938fc0e5827535823a9631dd8f7de7fe341da07ebdd1591a70fdb25b1124613c8a5d07d621985447a1e00eb6ee2314f933059652b21b9fd33997452010acd
|
7
|
+
data.tar.gz: 4f0378245e9e3239affe31022d69a61c276bfa1389450a410db183acd9faa137a32c1908859b88f6e5808bdbf2a6fced966751834627ae6a96025d85df7c6967
|
@@ -0,0 +1,33 @@
|
|
1
|
+
@font-face {
|
2
|
+
font-family: "Inter var";
|
3
|
+
font-weight: 100 900;
|
4
|
+
font-display: swap;
|
5
|
+
font-style: normal;
|
6
|
+
font-named-instance: "Regular";
|
7
|
+
src: url("../fonts/Inter-roman.var.woff2?v=3.19") format("woff2");
|
8
|
+
}
|
9
|
+
|
10
|
+
@font-face {
|
11
|
+
font-family: "Inter var";
|
12
|
+
font-weight: 100 900;
|
13
|
+
font-display: swap;
|
14
|
+
font-style: italic;
|
15
|
+
font-named-instance: "Italic";
|
16
|
+
src: url("../fonts/Inter-italic.var.woff2?v=3.19") format("woff2");
|
17
|
+
}
|
18
|
+
|
19
|
+
@font-face {
|
20
|
+
font-family: "Source Code Variable";
|
21
|
+
font-weight: 200 900;
|
22
|
+
font-style: normal;
|
23
|
+
font-stretch: normal;
|
24
|
+
src: url("../fonts/SourceCodeVariable-Roman.ttf.woff2") format("woff2");
|
25
|
+
}
|
26
|
+
|
27
|
+
@font-face {
|
28
|
+
font-family: "Source Code Variable";
|
29
|
+
font-weight: 200 900;
|
30
|
+
font-style: italic;
|
31
|
+
font-stretch: normal;
|
32
|
+
src: url("../fonts/SourceCodeVariable-Italic.ttf.woff2") format("woff2");
|
33
|
+
}
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -10,7 +10,7 @@ const whiteListedAttributes = [
|
|
10
10
|
"param-*",
|
11
11
|
];
|
12
12
|
|
13
|
-
function initEmbeds() {
|
13
|
+
function initEmbeds(root = document) {
|
14
14
|
if (typeof window.iFrameResize !== "function") {
|
15
15
|
console.error(
|
16
16
|
"Lookbook embeds require the 'iframe-resizer' library to be available. Skipping embed instantiation."
|
@@ -18,7 +18,17 @@ function initEmbeds() {
|
|
18
18
|
return;
|
19
19
|
}
|
20
20
|
|
21
|
-
|
21
|
+
if (typeof root === "string") {
|
22
|
+
root = document.querySelector(root);
|
23
|
+
}
|
24
|
+
|
25
|
+
if (!root) {
|
26
|
+
return console.error(
|
27
|
+
"Could not initialize Lookbook embeds. Root node not found."
|
28
|
+
);
|
29
|
+
}
|
30
|
+
|
31
|
+
const embeds = Array.from(root.querySelectorAll("lookbook-embed"));
|
22
32
|
|
23
33
|
embeds.forEach((embed) => {
|
24
34
|
const attrs = Array.from(embed.attributes);
|
@@ -1,7 +1,10 @@
|
|
1
1
|
<%= render_component_tag class:"p-3 w-[320px]" do %>
|
2
2
|
<h4 class="text-[11px] uppercase tracking-wider mb-2 font-bold">Preview embed code</h4>
|
3
3
|
|
4
|
-
<p class="text-xs text-gray-600 mb-3">
|
4
|
+
<p class="text-xs text-gray-600 mb-3">
|
5
|
+
This code can be used to embed this preview in
|
6
|
+
Lookbook pages<% unless policy == "SAMEORIGIN" %> or on external sites<% end %>.
|
7
|
+
</p>
|
5
8
|
|
6
9
|
<div class="border-t border-lookbook-dropdown-divider pt-3 pb-3">
|
7
10
|
<%= code :html do %><%= embed_code %><% end %>
|
@@ -1,11 +1,12 @@
|
|
1
1
|
module Lookbook
|
2
2
|
class EmbedCodeDropdown::Component < Lookbook::BaseComponent
|
3
|
-
attr_reader :preview, :pages, :params, :target
|
3
|
+
attr_reader :preview, :pages, :params, :target, :policy
|
4
4
|
|
5
|
-
def initialize(preview:, target:, pages:, params:, **html_attrs)
|
5
|
+
def initialize(preview:, target:, pages:, params:, policy:, **html_attrs)
|
6
6
|
@preview = preview
|
7
7
|
@target = target
|
8
8
|
@pages = pages
|
9
|
+
@policy = policy
|
9
10
|
@params = params.deep_symbolize_keys
|
10
11
|
super(**html_attrs)
|
11
12
|
end
|
@@ -17,7 +17,7 @@
|
|
17
17
|
class: "nav-toggle-icon",
|
18
18
|
"x-effect": "iconName = open ? 'chevron-down' : 'chevron-right'" if children? %>
|
19
19
|
<%= icon nav_icon, size: 3.5, class: "mr-1.5 text-lookbook-nav-icon-stroke" %>
|
20
|
-
<span class="truncate <% if node.type == :preview %>font-
|
20
|
+
<span class="truncate <% if node.type == :preview %>font-semibold<% end %>"><%= label %></span>
|
21
21
|
</div>
|
22
22
|
<% end %>
|
23
23
|
|
@@ -2,13 +2,13 @@
|
|
2
2
|
<div class="flex w-full border-b border-lookbook-divider mb-6">
|
3
3
|
<%= lookbook_render :tabs, theme: :page do |t| %>
|
4
4
|
<% @tabs.each do |props| %>
|
5
|
-
<%= t.
|
5
|
+
<%= t.with_tab **props %>
|
6
6
|
<% end %>
|
7
7
|
<% end %>
|
8
8
|
</div>
|
9
9
|
<%= lookbook_render :tab_panels do |t| %>
|
10
10
|
<% @tabs.each do |props| %>
|
11
|
-
<% t.
|
11
|
+
<% t.with_panel name: props[:name] do %>
|
12
12
|
<%= lookbook_render :prose, markdown: props[:markdown], class: "max-w-none flex-none" do %>
|
13
13
|
<%== props[:tab_content] %>
|
14
14
|
<% end %>
|
@@ -42,14 +42,15 @@ module Lookbook
|
|
42
42
|
display_params = SearchParamParser.call(params[:_display])
|
43
43
|
display_params.each do |name, value|
|
44
44
|
if @dynamic_display_options.key?(name)
|
45
|
-
cookies["lookbook-display-#{name}"] = value
|
45
|
+
cookies["lookbook-display-#{name}"] = value.is_a?(Array) ? value[1] : value
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
50
|
@dynamic_display_options.each do |name, opts|
|
51
51
|
choices = opts.is_a?(Hash) ? opts[:choices].to_a : opts
|
52
|
-
|
52
|
+
value = choices.first.is_a?(Array) ? choices.first[1] : choices.first
|
53
|
+
@static_display_options[name] ||= cookies.fetch("lookbook-display-#{name}", value)
|
53
54
|
end
|
54
55
|
|
55
56
|
unless params[:_display]
|
@@ -40,7 +40,7 @@ module Lookbook
|
|
40
40
|
if @target
|
41
41
|
begin
|
42
42
|
opts = {layout: @preview.layout}
|
43
|
-
if
|
43
|
+
if embedded?
|
44
44
|
opts[:append_html] = render_to_string("lookbook/partials/_iframe_content_scripts", layout: nil)
|
45
45
|
end
|
46
46
|
@preview_html = preview_controller.process(:render_in_layout_to_string, "lookbook/previews/group", inspector_data, **opts)
|
@@ -56,6 +56,10 @@ module Lookbook
|
|
56
56
|
|
57
57
|
private
|
58
58
|
|
59
|
+
def embedded?
|
60
|
+
params[:lookbook_embed] == "true"
|
61
|
+
end
|
62
|
+
|
59
63
|
def scenario_json(scenario)
|
60
64
|
{
|
61
65
|
name: scenario.name,
|
@@ -65,6 +69,7 @@ module Lookbook
|
|
65
69
|
end
|
66
70
|
|
67
71
|
def permit_framing
|
72
|
+
headers["X-Frame-Options"] = Lookbook.config.preview_embeds.policy if embedded?
|
68
73
|
headers["X-Frame-Options"] = "SAMEORIGIN" if headers["X-Frame-Options"] == "DENY"
|
69
74
|
end
|
70
75
|
end
|
@@ -29,7 +29,7 @@
|
|
29
29
|
"@click.outside": "closeMobileSidebar",
|
30
30
|
cloak: true do %>
|
31
31
|
|
32
|
-
<% cache do %>
|
32
|
+
<% cache @engine.last_changed do %>
|
33
33
|
|
34
34
|
<%= lookbook_render :split_layout,
|
35
35
|
alpine_data: "$store.layout.#{@pages.any? && @previews.any? ? "sidebar" : "singleSectionSidebar"}",
|
@@ -33,13 +33,16 @@
|
|
33
33
|
|
34
34
|
<% toolbar.with_section divide: :left, class: "flex-none relative z-10" do %>
|
35
35
|
<%= lookbook_render :button_group do |group| %>
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
36
|
+
<% if @engine.preview_embeds_allowed? %>
|
37
|
+
<%= group.with_button id: "embed-generator-dropdown-button", icon: :code_2, tooltip: "Get embed code" do |button| %>
|
38
|
+
<% button.with_dropdown.with_content(lookbook_render :embed_code_dropdown,
|
39
|
+
pages: @pages,
|
40
|
+
preview: @preview,
|
41
|
+
target: @target,
|
42
|
+
params: request.query_parameters,
|
43
|
+
policy: @config.preview_embeds.policy
|
44
|
+
) %>
|
45
|
+
<% end %>
|
43
46
|
<% end %>
|
44
47
|
<% group.with_button id: "copy-preview-url-button",
|
45
48
|
icon: :link,
|
@@ -5,11 +5,11 @@
|
|
5
5
|
@dom:update-complete.window="Lookbook.initEmbeds();">
|
6
6
|
<div class="h-full bg-lookbook-page-bg relative">
|
7
7
|
<% unless @error %>
|
8
|
-
|
8
|
+
|
9
9
|
<div class="absolute top-0 right-0 pt-1 pr-0 pl-1 pb-1 rounded-bl-md">
|
10
10
|
<div class="bg-lookbook-page-bg opacity-90 absolute inset-0 w-full h-full z-0"></div>
|
11
11
|
<div class="relative z-10 flex items-center">
|
12
|
-
|
12
|
+
|
13
13
|
<% if @previous_page %>
|
14
14
|
<%= lookbook_render :icon_button,
|
15
15
|
size: :lg,
|
@@ -58,7 +58,7 @@
|
|
58
58
|
<% if @page.sections.any? %>
|
59
59
|
<%= lookbook_render :page_tabs, id: "page-tabbed-sections", markdown: false, class: "mt-6" do |page_tabs| %>
|
60
60
|
<% @page.sections.each do |section| %>
|
61
|
-
<% page_tabs.
|
61
|
+
<% page_tabs.with_tab name: "page-section-#{section.name}", label: section.label do %>
|
62
62
|
<%= page_controller.render_page(section) %>
|
63
63
|
<% end %>
|
64
64
|
<% end %>
|
data/config/app.yml
CHANGED
data/config/routes.rb
CHANGED
@@ -13,6 +13,8 @@ Lookbook::Engine.routes.draw do
|
|
13
13
|
|
14
14
|
get "/inspect/*path", to: "inspector#show", as: :lookbook_inspect
|
15
15
|
|
16
|
-
|
17
|
-
|
16
|
+
if Lookbook::Engine.preview_embeds_allowed?
|
17
|
+
get "/embed", to: "embeds#lookup", as: :lookbook_embed_lookup
|
18
|
+
get "/embed/*path", to: "embeds#show", as: :lookbook_embed
|
19
|
+
end
|
18
20
|
end
|
data/lib/lookbook/engine.rb
CHANGED
@@ -26,7 +26,7 @@ module Lookbook
|
|
26
26
|
end
|
27
27
|
|
28
28
|
config.after_initialize do
|
29
|
-
if opts.using_view_component
|
29
|
+
if opts.using_view_component
|
30
30
|
vc_config = Engine.host_config.view_component
|
31
31
|
|
32
32
|
opts.preview_paths += vc_config.preview_paths
|
@@ -82,6 +82,10 @@ module Lookbook
|
|
82
82
|
reloading? && runtime_context.web? && FileWatcher.evented?
|
83
83
|
end
|
84
84
|
|
85
|
+
def preview_embeds_allowed?
|
86
|
+
opts.preview_embeds.enabled == true && opts.preview_embeds.policy != "DENY"
|
87
|
+
end
|
88
|
+
|
85
89
|
def websocket
|
86
90
|
@_websocket ||= auto_refresh? ? Websocket.new(mount_path, logger: Lookbook.logger) : NullWebsocket.new
|
87
91
|
end
|
@@ -125,14 +129,18 @@ module Lookbook
|
|
125
129
|
end
|
126
130
|
|
127
131
|
def view_paths
|
128
|
-
|
129
|
-
|
132
|
+
# handle view path registry changes in Rails 7.1
|
133
|
+
paths = if defined?(ActionView::ViewPaths::Registry)
|
134
|
+
ActionView::ViewPaths::Registry.all_file_system_resolvers.map(&:path)
|
135
|
+
else
|
136
|
+
ActionView::ViewPaths.all_view_paths.flat_map(&paths)
|
130
137
|
end
|
138
|
+
paths.map { |path| Pathname(path.to_s) }
|
131
139
|
end
|
132
140
|
|
133
141
|
def component_paths
|
134
142
|
@_component_paths ||= begin
|
135
|
-
paths = [*opts.component_paths, *
|
143
|
+
paths = [*opts.component_paths, *view_paths, host_app_path]
|
136
144
|
PathUtils.normalize_paths(paths)
|
137
145
|
end
|
138
146
|
end
|
@@ -150,7 +158,7 @@ module Lookbook
|
|
150
158
|
def preview_watch_paths
|
151
159
|
return @_preview_watch_paths if @_preview_watch_paths
|
152
160
|
|
153
|
-
paths = [*opts.preview_paths, opts.
|
161
|
+
paths = [*opts.preview_paths, *opts.component_paths, *opts.listen_paths, *view_paths].uniq
|
154
162
|
@_preview_watch_paths ||= PathUtils.normalize_paths(paths)
|
155
163
|
end
|
156
164
|
|
@@ -173,11 +181,13 @@ module Lookbook
|
|
173
181
|
changed_files = [*changes[:added], *changes[:modified]] if changes
|
174
182
|
parser.parse(changed_files) do |code_objects|
|
175
183
|
previews.load(code_objects.all(:class), changes)
|
184
|
+
mark_changed
|
176
185
|
end
|
177
186
|
end
|
178
187
|
|
179
188
|
def load_pages(changes = nil)
|
180
189
|
pages.load(Engine.page_paths, changes)
|
190
|
+
mark_changed
|
181
191
|
end
|
182
192
|
|
183
193
|
def notify_clients(changes = nil)
|
@@ -192,6 +202,15 @@ module Lookbook
|
|
192
202
|
reloaders.register_changes(changes)
|
193
203
|
notify_clients(changes)
|
194
204
|
end
|
205
|
+
|
206
|
+
def mark_changed
|
207
|
+
@_last_changed = (Time.now.to_f * 1000).to_i
|
208
|
+
end
|
209
|
+
|
210
|
+
def last_changed
|
211
|
+
mark_changed unless @_last_changed
|
212
|
+
@_last_changed
|
213
|
+
end
|
195
214
|
end
|
196
215
|
|
197
216
|
at_exit do
|
@@ -24,7 +24,7 @@ module Lookbook
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def render_targets
|
27
|
-
@_render_targets ||= RenderTargetCollection.new(scenarios.flat_map(&:render_targets).uniq(&:
|
27
|
+
@_render_targets ||= RenderTargetCollection.new(scenarios.flat_map(&:render_targets).uniq(&:lookup_path))
|
28
28
|
end
|
29
29
|
|
30
30
|
def search_terms
|
data/lib/lookbook/error.rb
CHANGED
@@ -18,11 +18,9 @@ module Lookbook
|
|
18
18
|
class LookbookMarkdownRenderer < Redcarpet::Render::HTML
|
19
19
|
def block_code(code, language = "ruby")
|
20
20
|
line_numbers = language.to_s.end_with? "-numbered"
|
21
|
-
ApplicationController.render(Lookbook::Code::Component.new(
|
22
|
-
source: code,
|
21
|
+
ApplicationController.render(Lookbook::Code::Component.new(source: code,
|
23
22
|
language: language.to_s.chomp("-numbered"),
|
24
|
-
line_numbers: line_numbers
|
25
|
-
}), layout: nil)
|
23
|
+
line_numbers: line_numbers), layout: nil)
|
26
24
|
end
|
27
25
|
|
28
26
|
def postprocess(full_document)
|
data/lib/lookbook/version.rb
CHANGED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|