lookbook 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/README.md +47 -14
- data/app/components/lookbook/button/component.html.erb +2 -1
- data/app/components/lookbook/button/component.js +9 -0
- data/app/components/lookbook/code/component.html.erb +1 -1
- data/app/components/lookbook/inspector_panel/component.rb +3 -5
- data/app/components/lookbook/nav/item/component.html.erb +1 -1
- data/app/components/lookbook/params/editor/component.rb +3 -10
- data/app/components/lookbook/params/field/component.html.erb +8 -8
- data/app/components/lookbook/params/field/component.rb +21 -72
- data/app/controllers/concerns/lookbook/targetable_concern.rb +156 -0
- data/app/controllers/concerns/lookbook/with_preview_controller_concern.rb +13 -0
- data/app/controllers/lookbook/application_controller.rb +13 -3
- data/app/controllers/lookbook/inspector_controller.rb +45 -0
- data/app/controllers/lookbook/page_controller.rb +11 -7
- data/app/controllers/lookbook/previews_controller.rb +4 -210
- data/app/helpers/lookbook/output_helper.rb +5 -5
- data/app/views/layouts/lookbook/skeleton.html.erb +3 -3
- data/app/views/lookbook/index.html.erb +12 -1
- data/app/views/lookbook/{previews → inspector}/inputs/_color.html.erb +0 -0
- data/app/views/lookbook/{previews → inspector}/inputs/_range.html.erb +0 -0
- data/app/views/lookbook/{previews → inspector}/inputs/_select.html.erb +0 -0
- data/app/views/lookbook/{previews → inspector}/inputs/_text.html.erb +0 -0
- data/app/views/lookbook/{previews → inspector}/inputs/_textarea.html.erb +0 -0
- data/app/views/lookbook/{previews → inspector}/inputs/_toggle.html.erb +3 -3
- data/app/views/lookbook/{previews → inspector}/panels/_content.html.erb +0 -0
- data/app/views/lookbook/{previews → inspector}/panels/_notes.html.erb +0 -0
- data/app/views/lookbook/{previews → inspector}/panels/_output.html.erb +0 -0
- data/app/views/lookbook/{previews → inspector}/panels/_params.html.erb +4 -4
- data/app/views/lookbook/{previews → inspector}/panels/_preview.html.erb +0 -0
- data/app/views/lookbook/{previews → inspector}/panels/_source.html.erb +0 -0
- data/app/views/lookbook/{previews → inspector}/show.html.erb +4 -1
- data/config/app.yml +8 -1
- data/config/inputs.yml +12 -12
- data/config/panels.yml +5 -5
- data/config/routes.rb +5 -5
- data/config/tags.yml +4 -1
- data/lib/lookbook/engine.rb +101 -150
- data/lib/lookbook/file_watcher.rb +47 -0
- data/lib/lookbook/page.rb +15 -16
- data/lib/lookbook/param.rb +99 -0
- data/lib/lookbook/preview.rb +8 -1
- data/lib/lookbook/{preview_controller.rb → preview_actions.rb} +14 -3
- data/lib/lookbook/preview_example.rb +1 -1
- data/lib/lookbook/preview_group.rb +0 -4
- data/lib/lookbook/preview_parser.rb +53 -0
- data/lib/lookbook/process.rb +21 -0
- data/lib/lookbook/services/code/code_beautifier.rb +21 -0
- data/lib/lookbook/services/code/code_highlighter.rb +69 -0
- data/lib/lookbook/services/data/parsers/data_parser.rb +22 -0
- data/lib/lookbook/services/data/parsers/json_parser.rb +7 -0
- data/lib/lookbook/services/data/parsers/yaml_parser.rb +7 -0
- data/lib/lookbook/services/data/resolvers/data_resolver.rb +70 -0
- data/lib/lookbook/services/data/resolvers/eval_resolver.rb +10 -0
- data/lib/lookbook/services/data/resolvers/file_resolver.rb +28 -0
- data/lib/lookbook/services/data/resolvers/method_resolver.rb +10 -0
- data/lib/lookbook/services/data/resolvers/yaml_resolver.rb +18 -0
- data/lib/lookbook/services/markdown_renderer.rb +29 -0
- data/lib/lookbook/services/string_value_caster.rb +60 -0
- data/lib/lookbook/services/tags/tag_options_parser.rb +62 -0
- data/lib/lookbook/services/templates/action_view_annotations_handler.rb +21 -0
- data/lib/lookbook/services/templates/action_view_annotations_stripper.rb +15 -0
- data/lib/lookbook/services/templates/frontmatter_extractor.rb +28 -0
- data/lib/lookbook/services/templates/styles_extractor.rb +38 -0
- data/lib/lookbook/services/{search_param_builder.rb → urls/search_param_builder.rb} +1 -1
- data/lib/lookbook/services/{search_param_parser.rb → urls/search_param_parser.rb} +1 -1
- data/lib/lookbook/source_inspector.rb +26 -45
- data/lib/lookbook/stores/config_store.rb +7 -8
- data/lib/lookbook/stores/input_store.rb +7 -3
- data/lib/lookbook/stores/tag_store.rb +3 -5
- data/lib/lookbook/support/null_object.rb +10 -0
- data/lib/lookbook/support/service.rb +2 -2
- data/lib/lookbook/support/store.rb +1 -1
- data/lib/lookbook/support/utils/attribute_utils.rb +6 -1
- data/lib/lookbook/support/utils/path_utils.rb +6 -3
- data/lib/lookbook/tags/component_tag.rb +7 -0
- data/lib/lookbook/tags/custom_tag.rb +59 -0
- data/lib/lookbook/tags/display_tag.rb +15 -0
- data/lib/lookbook/tags/hidden_tag.rb +13 -0
- data/lib/lookbook/tags/id_tag.rb +7 -0
- data/lib/lookbook/tags/label_tag.rb +4 -0
- data/lib/lookbook/tags/logical_path.rb +4 -0
- data/lib/lookbook/tags/param_tag.rb +61 -0
- data/lib/lookbook/tags/position_tag.rb +16 -0
- data/lib/lookbook/tags/tag_provider.rb +18 -0
- data/lib/lookbook/tags/yard_tag.rb +62 -0
- data/lib/lookbook/utils.rb +0 -40
- data/lib/lookbook/version.rb +1 -1
- data/lib/lookbook/websocket.rb +60 -0
- data/lib/lookbook.rb +2 -1
- data/public/lookbook-assets/css/lookbook.css +30 -77
- data/public/lookbook-assets/css/lookbook.css.map +1 -1
- data/public/lookbook-assets/js/lookbook.js +15 -2
- data/public/lookbook-assets/js/lookbook.js.map +1 -1
- metadata +55 -26
- data/lib/lookbook/code_formatter.rb +0 -68
- data/lib/lookbook/markdown.rb +0 -22
- data/lib/lookbook/params.rb +0 -157
- data/lib/lookbook/parser.rb +0 -42
- data/lib/lookbook/tag.rb +0 -122
- data/lib/lookbook/tag_options.rb +0 -111
- data/lib/lookbook/tags.rb +0 -17
- data/lib/lookbook/template_parser.rb +0 -72
@@ -1,19 +1,16 @@
|
|
1
1
|
module Lookbook
|
2
2
|
class PreviewsController < ApplicationController
|
3
|
-
|
3
|
+
include TargetableConcern
|
4
|
+
include WithPreviewControllerConcern
|
4
5
|
|
6
|
+
layout "lookbook/inspector"
|
5
7
|
helper Lookbook::PreviewHelper
|
6
8
|
|
7
9
|
def self.controller_path
|
8
10
|
"lookbook/previews"
|
9
11
|
end
|
10
12
|
|
11
|
-
|
12
|
-
before_action :set_title
|
13
|
-
before_action :set_display_options
|
14
|
-
before_action :set_params
|
15
|
-
|
16
|
-
def preview
|
13
|
+
def show
|
17
14
|
if @target
|
18
15
|
begin
|
19
16
|
opts = {layout: @preview.layout}
|
@@ -31,208 +28,5 @@ module Lookbook
|
|
31
28
|
show_404 layout: "lookbook/standalone"
|
32
29
|
end
|
33
30
|
end
|
34
|
-
|
35
|
-
def show
|
36
|
-
if @target
|
37
|
-
begin
|
38
|
-
@main_panels = main_panels
|
39
|
-
@drawer_panels = drawer_panels
|
40
|
-
rescue => exception
|
41
|
-
render_in_layout "lookbook/error", layout: "lookbook/inspector", error: prettify_error(exception)
|
42
|
-
end
|
43
|
-
else
|
44
|
-
show_404
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def show_legacy
|
49
|
-
Lookbook.logger.warn("Legacy URL path detected. These paths are deprecated and will be removed in a future version")
|
50
|
-
redirect_to lookbook_inspect_path params[:path]
|
51
|
-
end
|
52
|
-
|
53
|
-
private
|
54
|
-
|
55
|
-
def lookup_entities
|
56
|
-
@target = Lookbook.previews.find_example(params[:path])
|
57
|
-
if @target.present?
|
58
|
-
@preview = @target.preview
|
59
|
-
if params[:path] == @preview&.lookup_path
|
60
|
-
redirect_to lookbook_inspect_path "#{params[:path]}/#{@preview.default_example.name}"
|
61
|
-
end
|
62
|
-
else
|
63
|
-
@preview = Lookbook.previews.find(params[:path])
|
64
|
-
if @preview.present?
|
65
|
-
first_example = @preview.examples.first
|
66
|
-
redirect_to lookbook_inspect_path(first_example.lookup_path) if first_example
|
67
|
-
else
|
68
|
-
@preview = Lookbook.previews.find(path_segments.slice(0, path_segments.size - 1).join("/"))
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
def show_404(layout: nil)
|
74
|
-
locals = if @preview
|
75
|
-
{
|
76
|
-
message: "Example not found",
|
77
|
-
description: "The '#{@preview.label}' preview does not have an example named '#{path_segments.last}'."
|
78
|
-
}
|
79
|
-
else
|
80
|
-
{
|
81
|
-
message: "Not found",
|
82
|
-
description: "Looked for '#{params[:path]}'.<br>The preview may have been renamed or deleted."
|
83
|
-
}
|
84
|
-
end
|
85
|
-
render_in_layout "lookbook/404", layout: layout, **locals
|
86
|
-
end
|
87
|
-
|
88
|
-
def target_examples
|
89
|
-
@target.type == :group ? @target.examples : [@target]
|
90
|
-
end
|
91
|
-
|
92
|
-
def set_title
|
93
|
-
@title = @target.present? ? [@target&.label, @preview&.label].compact.join(" :: ") : "Not found"
|
94
|
-
end
|
95
|
-
|
96
|
-
def set_display_options
|
97
|
-
@dynamic_display_options = []
|
98
|
-
@static_display_options = []
|
99
|
-
|
100
|
-
if @target.present?
|
101
|
-
opts = @target.display_options
|
102
|
-
@dynamic_display_options = opts.select { _2.is_a?(Array) || _2.is_a?(Hash) }
|
103
|
-
@static_display_options = opts.except(*@dynamic_display_options.keys)
|
104
|
-
|
105
|
-
if params[:_display]
|
106
|
-
display_params = SearchParamParser.call(params[:_display])
|
107
|
-
display_params.each do |name, value|
|
108
|
-
if @dynamic_display_options.key?(name)
|
109
|
-
cookies["lookbook-display-#{name}"] = value
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
@dynamic_display_options.each do |name, opts|
|
115
|
-
choices = opts.is_a?(Hash) ? opts[:choices].to_a : opts
|
116
|
-
@static_display_options[name] ||= cookies.fetch("lookbook-display-#{name}", choices.first)
|
117
|
-
end
|
118
|
-
|
119
|
-
unless params[:_display]
|
120
|
-
display_params = @dynamic_display_options.map do |name, opts|
|
121
|
-
[name, @static_display_options[name]]
|
122
|
-
end.to_h
|
123
|
-
request.query_parameters[:_display] = SearchParamBuilder.call(display_params)
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
def set_params
|
129
|
-
if @target
|
130
|
-
# cast known params to type
|
131
|
-
@target.params.each do |param|
|
132
|
-
if preview_controller.params.key?(param[:name])
|
133
|
-
preview_controller.params[param[:name]] = Lookbook::Params.cast(preview_controller.params[param[:name]], param[:value_type])
|
134
|
-
end
|
135
|
-
end
|
136
|
-
# set display and data params
|
137
|
-
preview_controller.params.merge!({
|
138
|
-
lookbook: {
|
139
|
-
display: @static_display_options,
|
140
|
-
data: Lookbook.data
|
141
|
-
}
|
142
|
-
})
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
def preview_params
|
147
|
-
preview_controller.params.permit!
|
148
|
-
preview_controller.params.to_h.select do |key, value|
|
149
|
-
!!@target.params.find { |param| param[:name] == key }
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
def inspector_data
|
154
|
-
return @inspector_data if @inspector_data.present?
|
155
|
-
|
156
|
-
context_data = {
|
157
|
-
preview_params: preview_params,
|
158
|
-
path: params[:path]
|
159
|
-
}
|
160
|
-
|
161
|
-
preview = @preview
|
162
|
-
examples = target_examples.map do |example|
|
163
|
-
render_args = @preview.render_args(example.name, params: preview_controller.params)
|
164
|
-
has_template = render_args[:template] != "view_components/preview"
|
165
|
-
output = preview_controller.process(:render_example_to_string, @preview, example.name)
|
166
|
-
source = has_template ? example.template_source(render_args[:template]) : example.method_source
|
167
|
-
source_lang = has_template ? example.template_lang(render_args[:template]) : example.lang
|
168
|
-
|
169
|
-
example.define_singleton_method(:output, proc { output })
|
170
|
-
example.define_singleton_method(:source, proc { source })
|
171
|
-
example.define_singleton_method(:source_lang, proc { source_lang })
|
172
|
-
example
|
173
|
-
end
|
174
|
-
|
175
|
-
target = @target.type == :group ? @target : examples.find { |e| e.lookup_path == @target.lookup_path }
|
176
|
-
|
177
|
-
preview.define_singleton_method(:params, proc {
|
178
|
-
target.params
|
179
|
-
})
|
180
|
-
|
181
|
-
@inspector_data ||= Lookbook::Store.new({
|
182
|
-
context: context_data,
|
183
|
-
preview: preview,
|
184
|
-
examples: examples,
|
185
|
-
example: examples.first,
|
186
|
-
target: target,
|
187
|
-
data: Lookbook.data,
|
188
|
-
app: Lookbook
|
189
|
-
})
|
190
|
-
end
|
191
|
-
|
192
|
-
def main_panels
|
193
|
-
Engine.panels.in_group(:main).map do |config|
|
194
|
-
PanelStore.resolve_config(config, inspector_data)
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
|
-
def drawer_panels
|
199
|
-
Engine.panels.in_group(:drawer).map do |config|
|
200
|
-
PanelStore.resolve_config(config, inspector_data)
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
def preview_controller
|
205
|
-
return @preview_controller if @preview_controller
|
206
|
-
controller = Lookbook::Engine.preview_controller.new
|
207
|
-
controller.request = request
|
208
|
-
controller.response = response
|
209
|
-
@preview_controller ||= controller
|
210
|
-
end
|
211
|
-
|
212
|
-
def prettify_error(exception)
|
213
|
-
error_params = if exception.is_a?(ViewComponent::PreviewTemplateError)
|
214
|
-
{
|
215
|
-
file_path: @preview&.full_path,
|
216
|
-
line_number: 0,
|
217
|
-
source_code: @target&.source
|
218
|
-
}
|
219
|
-
elsif exception.is_a?(ActionView::Template::Error) & exception.message.include?("implements a reserved method")
|
220
|
-
message_parts = exception.message.split("\n").first.split
|
221
|
-
component_class = message_parts.first.constantize
|
222
|
-
naughty_method = message_parts.last.delete("#").delete("`").delete(".")
|
223
|
-
method = component_class.instance_method(naughty_method.to_sym)
|
224
|
-
if method
|
225
|
-
{
|
226
|
-
file_path: method.source_location.first,
|
227
|
-
line_number: method.source_location[1]
|
228
|
-
}
|
229
|
-
end
|
230
|
-
end
|
231
|
-
Lookbook::Error.new(exception, **(error_params || {}))
|
232
|
-
end
|
233
|
-
|
234
|
-
def path_segments
|
235
|
-
params[:path].split("/")
|
236
|
-
end
|
237
31
|
end
|
238
32
|
end
|
@@ -1,15 +1,15 @@
|
|
1
1
|
module Lookbook
|
2
2
|
module OutputHelper
|
3
3
|
def markdown(text = nil, &block)
|
4
|
-
|
4
|
+
MarkdownRenderer.call(block ? capture(&block) : text, Lookbook.config.markdown_options)
|
5
5
|
end
|
6
6
|
|
7
|
-
def highlight(
|
8
|
-
|
7
|
+
def highlight(*args, **opts)
|
8
|
+
CodeHighlighter.call(*args, **opts)
|
9
9
|
end
|
10
10
|
|
11
|
-
def beautify(
|
12
|
-
|
11
|
+
def beautify(*args, **opts)
|
12
|
+
CodeBeautifier.call(*args, **opts)
|
13
13
|
end
|
14
14
|
|
15
15
|
def pretty_json(obj)
|
@@ -26,10 +26,10 @@
|
|
26
26
|
<% end %>
|
27
27
|
|
28
28
|
<script>
|
29
|
-
window.LOG_LEVEL = <%=
|
29
|
+
window.LOG_LEVEL = <%= config.log_level %>;
|
30
30
|
window.APP_NAME = "<%= Lookbook::Engine.app_name %>";
|
31
|
-
<% if Lookbook::Engine.websocket %>
|
32
|
-
window.SOCKET_PATH = "<%= Lookbook::Engine.
|
31
|
+
<% if Lookbook::Engine.websocket.mounted? %>
|
32
|
+
window.SOCKET_PATH = "<%= Lookbook::Engine.websocket.full_mount_path %>";
|
33
33
|
<% end %>
|
34
34
|
</script>
|
35
35
|
|
@@ -1,8 +1,19 @@
|
|
1
1
|
<div id="landing" class="flex flex-col items-center justify-center h-full w-full">
|
2
2
|
<div class="text-center" id="landing-<%= @previews.any? ? "with" : "no" %>-content">
|
3
|
-
|
3
|
+
<% if config.project_name.downcase == "lookbook" %>
|
4
|
+
<div class="flex justify-center pb-4">
|
5
|
+
<svg class="flex-none mx-auto w-[140px]" viewBox="0 0 275 36">
|
6
|
+
<g fill-rule="nonzero" fill="none">
|
7
|
+
<path d="M4.536 35c-1.408 0-2.504-.392-3.288-1.176-.784-.784-1.176-1.88-1.176-3.288V5.576c0-1.44.384-2.544 1.152-3.312.768-.768 1.856-1.152 3.264-1.152 1.44 0 2.536.384 3.288 1.152.752.768 1.128 1.872 1.128 3.312v22.08h11.712c1.216 0 2.152.312 2.808.936.656.624.984 1.528.984 2.712 0 1.184-.328 2.096-.984 2.736-.656.64-1.592.96-2.808.96H4.536ZM42.066.632c3.425 0 6.425.72 9 2.16 2.577 1.44 4.585 3.464 6.025 6.072 1.44 2.608 2.16 5.672 2.16 9.192 0 2.624-.408 5.008-1.224 7.152-.816 2.144-1.984 3.992-3.504 5.544-1.52 1.552-3.336 2.736-5.448 3.552-2.112.816-4.448 1.224-7.008 1.224-3.424 0-6.432-.728-9.024-2.184-2.592-1.456-4.6-3.496-6.024-6.12-1.424-2.624-2.136-5.68-2.136-9.168 0-2.624.408-5.008 1.224-7.152.816-2.144 1.984-3.984 3.504-5.52 1.52-1.536 3.336-2.712 5.448-3.528C37.17 1.04 39.507.632 42.067.632Zm0 7.392c-1.663 0-3.095.392-4.295 1.176-1.2.784-2.12 1.92-2.76 3.408-.64 1.488-.96 3.304-.96 5.448 0 3.168.704 5.64 2.112 7.416 1.408 1.776 3.376 2.664 5.904 2.664 1.696 0 3.136-.4 4.32-1.2 1.07-.723 1.917-1.733 2.543-3.031-.39-1.314-.934-2.855-2.087-5.286-.07-.147-.07-.233 0-.38l2.187-5.84a8.262 8.262 0 0 0-1.06-1.735c-1.407-1.76-3.375-2.64-5.903-2.64ZM80.27.632c3.424 0 6.424.72 9 2.16 2.576 1.44 4.584 3.464 6.024 6.072 1.44 2.608 2.16 5.672 2.16 9.192 0 2.624-.408 5.008-1.224 7.152-.816 2.144-1.984 3.992-3.504 5.544-1.52 1.552-3.336 2.736-5.448 3.552-2.112.816-4.448 1.224-7.008 1.224-3.424 0-6.432-.728-9.024-2.184-2.592-1.456-4.6-3.496-6.024-6.12-1.424-2.624-2.136-5.68-2.136-9.168 0-2.624.408-5.008 1.224-7.152.816-2.144 1.984-3.984 3.504-5.52 1.52-1.536 3.336-2.712 5.448-3.528C75.373 1.04 77.71.632 80.27.632Zm0 7.392c-1.664 0-3.096.392-4.296 1.176-1.2.784-2.12 1.92-2.76 3.408-.64 1.488-.96 3.304-.96 5.448 0 3.168.704 5.64 2.112 7.416 1.408 1.776 3.376 2.664 5.904 2.664 1.696 0 3.136-.4 4.32-1.2.999-.675 1.804-1.6 2.416-2.775-.395-1.37-.933-2.95-2.162-5.542-.07-.147-.07-.233 0-.38l2.276-6.08a8.166 8.166 0 0 0-.946-1.495c-1.408-1.76-3.376-2.64-5.904-2.64Zm26.299 27.408c-1.408 0-2.496-.392-3.264-1.176-.768-.784-1.152-1.88-1.152-3.288V5.192c0-1.472.384-2.584 1.152-3.336.768-.752 1.856-1.128 3.264-1.128 1.44 0 2.536.376 3.288 1.128.752.752 1.128 1.864 1.128 3.336v10.464h.096l11.664-12.864a7.705 7.705 0 0 1 1.944-1.512c.688-.368 1.464-.552 2.328-.552 1.344 0 2.312.344 2.904 1.032.592.688.864 1.488.816 2.4-.048.912-.424 1.752-1.128 2.52l-11.616 12.336v-3.6l12.192 13.776c.832.928 1.248 1.88 1.248 2.856s-.328 1.784-.984 2.424c-.656.64-1.624.96-2.904.96-1.088 0-1.96-.216-2.616-.648-.656-.432-1.368-1.08-2.136-1.944L111.08 19.736h-.096v11.232c0 1.408-.368 2.504-1.104 3.288-.736.784-1.84 1.176-3.312 1.176Z" fill="#919191"/>
|
8
|
+
<path d="M140.403 35c-1.504 0-2.648-.392-3.432-1.176-.784-.784-1.176-1.912-1.176-3.384V5.72c0-1.472.392-2.6 1.176-3.384.784-.784 1.928-1.176 3.432-1.176h11.712c2.432 0 4.504.36 6.216 1.08 1.712.72 3.016 1.736 3.912 3.048.896 1.312 1.344 2.848 1.344 4.608 0 1.984-.568 3.68-1.704 5.088-1.136 1.408-2.68 2.368-4.632 2.88v-.768c2.304.416 4.088 1.344 5.352 2.784 1.264 1.44 1.896 3.28 1.896 5.52 0 2.976-1.064 5.32-3.192 7.032-2.128 1.712-5.032 2.568-8.712 2.568h-12.192Zm3.84-6.48h7.152c1.632 0 2.824-.312 3.576-.936.752-.624 1.128-1.56 1.128-2.808 0-1.248-.376-2.176-1.128-2.784-.752-.608-1.944-.912-3.576-.912h-7.152v7.44Zm0-13.92h6.288c1.6 0 2.776-.288 3.528-.864.752-.576 1.128-1.456 1.128-2.64 0-1.184-.376-2.056-1.128-2.616-.752-.56-1.928-.84-3.528-.84h-6.288v6.96Zm41.034 20.928c-3.424 0-6.432-.728-9.024-2.184-2.592-1.456-4.6-3.496-6.024-6.12-1.424-2.624-2.136-5.68-2.136-9.168 0-2.624.408-5.008 1.224-7.152.816-2.144 1.984-3.984 3.504-5.52 1.52-1.536 3.336-2.712 5.448-3.528 2.112-.816 4.448-1.224 7.008-1.224 3.424 0 6.424.72 9 2.16 2.576 1.44 4.584 3.464 6.024 6.072 1.44 2.608 2.16 5.672 2.16 9.192 0 2.624-.408 5.008-1.224 7.152-.816 2.144-1.984 3.992-3.504 5.544-1.52 1.552-3.336 2.736-5.448 3.552-2.112.816-4.448 1.224-7.008 1.224Zm0-7.392c1.696 0 3.136-.4 4.32-1.2 1.184-.8 2.096-1.952 2.736-3.456.64-1.504.96-3.312.96-5.424 0-3.168-.704-5.632-2.112-7.392-1.408-1.76-3.376-2.64-5.904-2.64-1.664 0-3.096.392-4.296 1.176-1.2.784-2.12 1.92-2.76 3.408-.64 1.488-.96 3.304-.96 5.448 0 3.168.704 5.64 2.112 7.416 1.408 1.776 3.376 2.664 5.904 2.664Zm38.203 7.392c-3.424 0-6.432-.728-9.024-2.184-2.592-1.456-4.6-3.496-6.024-6.12-1.424-2.624-2.136-5.68-2.136-9.168 0-2.624.408-5.008 1.224-7.152.816-2.144 1.984-3.984 3.504-5.52 1.52-1.536 3.336-2.712 5.448-3.528 2.112-.816 4.448-1.224 7.008-1.224 3.424 0 6.424.72 9 2.16 2.576 1.44 4.584 3.464 6.024 6.072 1.44 2.608 2.16 5.672 2.16 9.192 0 2.624-.408 5.008-1.224 7.152-.816 2.144-1.984 3.992-3.504 5.544-1.52 1.552-3.336 2.736-5.448 3.552-2.112.816-4.448 1.224-7.008 1.224Zm0-7.392c1.696 0 3.136-.4 4.32-1.2 1.184-.8 2.096-1.952 2.736-3.456.64-1.504.96-3.312.96-5.424 0-3.168-.704-5.632-2.112-7.392-1.408-1.76-3.376-2.64-5.904-2.64-1.664 0-3.096.392-4.296 1.176-1.2.784-2.12 1.92-2.76 3.408-.64 1.488-.96 3.304-.96 5.448 0 3.168.704 5.64 2.112 7.416 1.408 1.776 3.376 2.664 5.904 2.664Zm26.299 7.296c-1.408 0-2.496-.392-3.264-1.176-.768-.784-1.152-1.88-1.152-3.288V5.192c0-1.472.384-2.584 1.152-3.336.768-.752 1.856-1.128 3.264-1.128 1.44 0 2.536.376 3.288 1.128.752.752 1.128 1.864 1.128 3.336v10.464h.096l11.664-12.864a7.705 7.705 0 0 1 1.944-1.512c.688-.368 1.464-.552 2.328-.552 1.344 0 2.312.344 2.904 1.032.592.688.864 1.488.816 2.4-.048.912-.424 1.752-1.128 2.52l-11.616 12.336v-3.6l12.192 13.776c.832.928 1.248 1.88 1.248 2.856s-.328 1.784-.984 2.424c-.656.64-1.624.96-2.904.96-1.088 0-1.96-.216-2.616-.648-.656-.432-1.368-1.08-2.136-1.944L254.29 19.736h-.096v11.232c0 1.408-.368 2.504-1.104 3.288-.736.784-1.84 1.176-3.312 1.176Z" fill="#ABABAB"/>
|
9
|
+
</g>
|
10
|
+
</svg>
|
11
|
+
</div>
|
12
|
+
<% elsif config.project_name != false %>
|
13
|
+
<h5 class="text-base text-lookbook-blank-slate-title truncate uppercase font-black tracking-wide mb-2">
|
4
14
|
<%= config.project_name %>
|
5
15
|
</h5>
|
16
|
+
<% end %>
|
6
17
|
<div class="opacity-60">
|
7
18
|
<% if @previews.any? %>
|
8
19
|
<p>Select a preview from the nav to get started.</p>
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -3,11 +3,11 @@ button_classes = [
|
|
3
3
|
"relative inline-flex flex-shrink-0 h-6 w-11 border-2 border-transparent rounded-full
|
4
4
|
cursor-pointer transition-colors ease-in-out duration-200 focus:outline-none focus:ring-2
|
5
5
|
focus:ring-offset-2 focus:ring-input-border-focus",
|
6
|
-
value == true ? "bg-lookbook-input-toggle-active" : "bg-lookbook-input-toggle"
|
6
|
+
value == "true" ? "bg-lookbook-input-toggle-active" : "bg-lookbook-input-toggle"
|
7
7
|
]
|
8
8
|
span_classes = [
|
9
9
|
"pointer-events-none inline-block h-5 w-5 rounded-full bg-white shadow ring-0 transition ease-in-out duration-200",
|
10
|
-
value == true ? "translate-x-5" : "translate-x-0"
|
10
|
+
value == "true" ? "translate-x-5" : "translate-x-0"
|
11
11
|
]
|
12
12
|
%>
|
13
13
|
|
@@ -15,6 +15,6 @@ span_classes = [
|
|
15
15
|
class: class_names(button_classes),
|
16
16
|
role: "switch",
|
17
17
|
type: "button",
|
18
|
-
"@click.stop": "value =
|
18
|
+
"@click.stop": "value = value == 'true' ? 'false' : 'true'" do %>
|
19
19
|
<%= tag.span "aria-hidden": true, class: class_names(span_classes) %>
|
20
20
|
<% end %>
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<% if
|
1
|
+
<% if @params.none? %>
|
2
2
|
<div class="p-4 w-full h-full bg-lookbook-prose-bg">
|
3
3
|
<%= lookbook_render :prose do %>
|
4
4
|
<em class='opacity-50'>No params configured.</em>
|
@@ -6,9 +6,9 @@
|
|
6
6
|
</div>
|
7
7
|
<% else %>
|
8
8
|
<div class="h-full overflow-x-hidden">
|
9
|
-
<%= lookbook_render "params/editor"
|
10
|
-
<%
|
11
|
-
<% editor.field
|
9
|
+
<%= lookbook_render "params/editor" do |editor| %>
|
10
|
+
<% @params.each do |param| %>
|
11
|
+
<% editor.field param: param %>
|
12
12
|
<% end %>
|
13
13
|
<% end %>
|
14
14
|
</div>
|
File without changes
|
File without changes
|
@@ -1,6 +1,9 @@
|
|
1
1
|
<%= lookbook_render :split_layout,
|
2
2
|
alpine_data: "$store.layout.inspector",
|
3
|
-
":class": "($store.inspector.drawer.hidden || #{@drawer_panels.none?}) && '!grid-rows-[1fr] !grid-cols-[1fr]'"
|
3
|
+
":class": "($store.inspector.drawer.hidden || #{@drawer_panels.none?}) && '!grid-rows-[1fr] !grid-cols-[1fr]'",
|
4
|
+
data: {
|
5
|
+
"preview-target": @target.id
|
6
|
+
} do |layout| %>
|
4
7
|
|
5
8
|
<%= layout.pane class: "flex flex-col h-full overflow-hidden",
|
6
9
|
"x-effect": "forceOrientation = (layoutWidth < $store.inspector.minVerticalSplitWidth) ? 'horizontal' : null" do %>
|
data/config/app.yml
CHANGED
@@ -2,11 +2,12 @@ shared:
|
|
2
2
|
project_name: Lookbook
|
3
3
|
log_level: 2
|
4
4
|
log_use_rails_logger: true
|
5
|
-
auto_refresh:
|
5
|
+
auto_refresh: false
|
6
6
|
components_path: app/components
|
7
7
|
page_controller: Lookbook::PageController
|
8
8
|
page_route: pages
|
9
9
|
page_paths: [test/components/docs]
|
10
|
+
page_extensions: [html.*, md.*]
|
10
11
|
page_options: {}
|
11
12
|
markdown_options:
|
12
13
|
tables: true
|
@@ -33,4 +34,10 @@ shared:
|
|
33
34
|
|
34
35
|
development:
|
35
36
|
listen: true
|
37
|
+
auto_refresh: true
|
38
|
+
debug_menu: true
|
39
|
+
|
40
|
+
test:
|
41
|
+
listen: false
|
42
|
+
auto_refresh: false
|
36
43
|
debug_menu: true
|
data/config/inputs.yml
CHANGED
@@ -1,48 +1,48 @@
|
|
1
1
|
shared:
|
2
2
|
select:
|
3
|
-
partial: lookbook/
|
3
|
+
partial: lookbook/inspector/inputs/select
|
4
4
|
opts: {}
|
5
5
|
|
6
6
|
textarea:
|
7
|
-
partial: lookbook/
|
7
|
+
partial: lookbook/inspector/inputs/textarea
|
8
8
|
opts: {}
|
9
9
|
|
10
10
|
toggle:
|
11
|
-
partial: lookbook/
|
11
|
+
partial: lookbook/inspector/inputs/toggle
|
12
12
|
opts: {}
|
13
13
|
|
14
14
|
color:
|
15
|
-
partial: lookbook/
|
15
|
+
partial: lookbook/inspector/inputs/color
|
16
16
|
opts: {}
|
17
17
|
|
18
18
|
range:
|
19
|
-
partial: lookbook/
|
19
|
+
partial: lookbook/inspector/inputs/range
|
20
20
|
opts: {}
|
21
21
|
|
22
22
|
text:
|
23
|
-
partial: lookbook/
|
23
|
+
partial: lookbook/inspector/inputs/text
|
24
24
|
opts: {}
|
25
25
|
|
26
26
|
email:
|
27
|
-
partial: lookbook/
|
27
|
+
partial: lookbook/inspector/inputs/text
|
28
28
|
opts: {}
|
29
29
|
|
30
30
|
number:
|
31
|
-
partial: lookbook/
|
31
|
+
partial: lookbook/inspector/inputs/text
|
32
32
|
opts: {}
|
33
33
|
|
34
34
|
tel:
|
35
|
-
partial: lookbook/
|
35
|
+
partial: lookbook/inspector/inputs/text
|
36
36
|
opts: {}
|
37
37
|
|
38
38
|
url:
|
39
|
-
partial: lookbook/
|
39
|
+
partial: lookbook/inspector/inputs/text
|
40
40
|
opts: {}
|
41
41
|
|
42
42
|
date:
|
43
|
-
partial: lookbook/
|
43
|
+
partial: lookbook/inspector/inputs/text
|
44
44
|
opts: {}
|
45
45
|
|
46
46
|
datetime_local:
|
47
|
-
partial: lookbook/
|
47
|
+
partial: lookbook/inspector/inputs/text
|
48
48
|
opts: {}
|
data/config/panels.yml
CHANGED
@@ -1,30 +1,30 @@
|
|
1
1
|
shared:
|
2
2
|
main:
|
3
3
|
- name: preview
|
4
|
-
partial: lookbook/
|
4
|
+
partial: lookbook/inspector/panels/preview
|
5
5
|
label: Preview
|
6
6
|
hotkey: v
|
7
7
|
|
8
8
|
- name: output
|
9
|
-
partial: lookbook/
|
9
|
+
partial: lookbook/inspector/panels/output
|
10
10
|
label: HTML
|
11
11
|
hotkey: h
|
12
12
|
|
13
13
|
drawer:
|
14
14
|
- name: source
|
15
|
-
partial: lookbook/
|
15
|
+
partial: lookbook/inspector/panels/source
|
16
16
|
label: Source
|
17
17
|
hotkey: s
|
18
18
|
copy: "->(data) { data.examples.map { |e| e.source }.join(\n) }"
|
19
19
|
|
20
20
|
- name: notes
|
21
|
-
partial: lookbook/
|
21
|
+
partial: lookbook/inspector/panels/notes
|
22
22
|
label: Notes
|
23
23
|
hotkey: n
|
24
24
|
disabled: ->(data) { data.examples.select { |e| e.notes.present? }.none? }
|
25
25
|
|
26
26
|
- name: params
|
27
|
-
partial: lookbook/
|
27
|
+
partial: lookbook/inspector/panels/params
|
28
28
|
label: Params
|
29
29
|
hotkey: p
|
30
30
|
disabled: ->(data) { data.preview.params.none? }
|
data/config/routes.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Lookbook::Engine.routes.draw do
|
2
|
-
if Lookbook::Engine.websocket?
|
3
|
-
mount Lookbook::Engine.websocket => "/cable", :as => :cable
|
2
|
+
if Lookbook::Engine.websocket.mountable?
|
3
|
+
mount Lookbook::Engine.websocket.server => "/cable", :as => :cable
|
4
4
|
end
|
5
5
|
|
6
6
|
root to: "application#index", as: :lookbook_home
|
@@ -8,8 +8,8 @@ Lookbook::Engine.routes.draw do
|
|
8
8
|
get "/#{Lookbook.config.page_route}", to: "pages#index", as: :lookbook_page_index
|
9
9
|
get "/#{Lookbook.config.page_route}/*path", to: "pages#show", as: :lookbook_page
|
10
10
|
|
11
|
-
get "/preview/*path", to: "previews#
|
12
|
-
get "/inspect/*path", to: "
|
11
|
+
get "/preview/*path", to: "previews#show", as: :lookbook_preview
|
12
|
+
get "/inspect/*path", to: "inspector#show", as: :lookbook_inspect
|
13
13
|
|
14
|
-
get "/*path", to: "
|
14
|
+
get "/*path", to: "inspector#show_legacy", as: :lookbook_inspect_legacy
|
15
15
|
end
|