lookbook 1.0.0.beta.5 → 1.0.0.beta.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +29 -254
  3. data/app/assets/lookbook/css/lookbook.css +1 -1
  4. data/app/assets/lookbook/css/themes/blue.css +58 -37
  5. data/app/assets/lookbook/css/themes/indigo.css +58 -37
  6. data/app/assets/lookbook/css/themes/zinc.css +58 -37
  7. data/app/assets/lookbook/css/tooltip.css +5 -5
  8. data/app/components/lookbook/base_component.rb +0 -1
  9. data/app/components/lookbook/button/component.html.erb +2 -2
  10. data/app/components/lookbook/embed/component.html.erb +5 -5
  11. data/app/components/lookbook/embed/component.rb +8 -0
  12. data/app/components/lookbook/filter/component.html.erb +1 -1
  13. data/app/components/lookbook/header/component.html.erb +1 -1
  14. data/app/components/lookbook/inspector_panel/component.css +5 -0
  15. data/app/components/lookbook/inspector_panel/component.html.erb +6 -0
  16. data/app/components/lookbook/inspector_panel/component.rb +36 -0
  17. data/app/components/lookbook/nav/component.rb +1 -2
  18. data/app/components/lookbook/nav/item/component.html.erb +1 -1
  19. data/app/components/lookbook/params_editor/field/component.rb +2 -1
  20. data/app/components/lookbook/prose/component.html.erb +1 -1
  21. data/app/components/lookbook/tab_panels/component.rb +1 -1
  22. data/app/components/lookbook/tab_panels/panel/component.rb +2 -2
  23. data/app/components/lookbook/tabs/dropdown_tab/component.html.erb +1 -1
  24. data/app/components/lookbook/tabs/tab/component.html.erb +1 -1
  25. data/app/components/lookbook/tag_component.rb +1 -1
  26. data/app/components/lookbook/toolbar/component.html.erb +1 -1
  27. data/app/components/lookbook/viewport/component.css +1 -1
  28. data/app/components/lookbook/viewport/component.html.erb +1 -1
  29. data/app/controllers/lookbook/application_controller.rb +1 -1
  30. data/app/controllers/lookbook/pages_controller.rb +1 -0
  31. data/app/controllers/lookbook/previews_controller.rb +21 -9
  32. data/app/helpers/lookbook/application_helper.rb +9 -6
  33. data/app/helpers/lookbook/preview_helper.rb +2 -3
  34. data/app/views/layouts/lookbook/application.html.erb +1 -1
  35. data/app/views/layouts/lookbook/page.html.erb +2 -2
  36. data/app/views/layouts/lookbook/shell.html.erb +6 -0
  37. data/app/views/layouts/lookbook/skeleton.html.erb +15 -14
  38. data/app/views/lookbook/previews/panels/_content.html.erb +1 -1
  39. data/app/views/lookbook/previews/panels/_notes.html.erb +2 -2
  40. data/app/views/lookbook/previews/panels/_params.html.erb +1 -1
  41. data/app/views/lookbook/previews/show.html.erb +7 -5
  42. data/lib/lookbook/code_formatter.rb +1 -1
  43. data/lib/lookbook/collection.rb +1 -1
  44. data/lib/lookbook/component.rb +2 -3
  45. data/lib/lookbook/config.rb +68 -46
  46. data/lib/lookbook/data.rb +11 -0
  47. data/lib/lookbook/engine.rb +64 -68
  48. data/lib/lookbook/entity.rb +1 -1
  49. data/lib/lookbook/hooks.rb +21 -0
  50. data/lib/lookbook/markdown.rb +1 -1
  51. data/lib/lookbook/page.rb +4 -5
  52. data/lib/lookbook/page_section.rb +2 -4
  53. data/lib/lookbook/panels.rb +15 -0
  54. data/lib/lookbook/params.rb +12 -0
  55. data/lib/lookbook/parser.rb +4 -1
  56. data/lib/lookbook/preview.rb +9 -11
  57. data/lib/lookbook/preview_example.rb +1 -1
  58. data/lib/lookbook/preview_group.rb +8 -0
  59. data/lib/lookbook/source_inspector.rb +9 -0
  60. data/lib/lookbook/store.rb +14 -2
  61. data/lib/lookbook/tag.rb +112 -0
  62. data/lib/lookbook/tags.rb +22 -0
  63. data/lib/lookbook/theme.rb +38 -9
  64. data/lib/lookbook/version.rb +1 -1
  65. data/lib/lookbook.rb +1 -0
  66. data/lib/tasks/lookbook_tasks.rake +1 -2
  67. data/public/lookbook-assets/css/lookbook.css +307 -150
  68. data/public/lookbook-assets/css/lookbook.css.map +1 -1
  69. data/public/lookbook-assets/css/themes/blue.css +57 -36
  70. data/public/lookbook-assets/css/themes/blue.css.map +1 -1
  71. data/public/lookbook-assets/css/themes/indigo.css +57 -36
  72. data/public/lookbook-assets/css/themes/indigo.css.map +1 -1
  73. data/public/lookbook-assets/css/themes/zinc.css +57 -36
  74. data/public/lookbook-assets/css/themes/zinc.css.map +1 -1
  75. data/public/lookbook-assets/js/embed.js +193 -193
  76. data/public/lookbook-assets/js/lookbook.js +1151 -1308
  77. data/public/lookbook-assets/js/lookbook.js.map +1 -1
  78. metadata +12 -4
@@ -4,23 +4,23 @@
4
4
  .tippy-box[data-theme~="tooltip"] {
5
5
  @apply text-xs opacity-90;
6
6
 
7
- background-color: var(--lookbook-tooltip);
7
+ background-color: var(--lookbook-tooltip-bg);
8
8
  color: var(--lookbook-tooltip-text);
9
9
 
10
10
  &[data-placement^="top"] > .tippy-arrow::before {
11
- border-top-color: var(--lookbook-tooltip);
11
+ border-top-color: var(--lookbook-tooltip-bg);
12
12
  }
13
13
 
14
14
  &[data-placement^="bottom"] > .tippy-arrow::before {
15
- border-bottom-color: var(--lookbook-tooltip);
15
+ border-bottom-color: var(--lookbook-tooltip-bg);
16
16
  }
17
17
 
18
18
  &[data-placement^="left"] > .tippy-arrow::before {
19
- border-left-color: var(--lookbook-tooltip);
19
+ border-left-color: var(--lookbook-tooltip-bg);
20
20
  }
21
21
 
22
22
  &[data-placement^="right"] > .tippy-arrow::before {
23
- border-right-color: var(--lookbook-tooltip);
23
+ border-right-color: var(--lookbook-tooltip-bg);
24
24
  }
25
25
  }
26
26
 
@@ -12,7 +12,6 @@ module Lookbook
12
12
  merged_classes = class_names(attrs[:class], @html_attrs[:class])
13
13
  merged_attrs = @html_attrs.except(:class).deep_merge(attrs.except(:class))
14
14
 
15
-
16
15
  render Lookbook::TagComponent.new(tag: tag,
17
16
  name: component_name,
18
17
  **merged_attrs,
@@ -1,9 +1,9 @@
1
1
  <%= render_component_tag tag_name,
2
2
  href: @href,
3
3
  class: [
4
- "block text-lookbook-button-text focus:outline-none focus-visible:outline-none #{padding}",
4
+ "block text-lookbook-icon-button-stroke focus:outline-none focus-visible:outline-none #{padding}",
5
5
  {
6
- "hover:text-lookbook-button-text-hover": !@disabled,
6
+ "hover:text-lookbook-icon-button-stroke-hover": !@disabled,
7
7
  "cursor-[not-allowed] opacity-50": @disabled
8
8
  }
9
9
  ],
@@ -7,13 +7,13 @@
7
7
  <%= @example.preview.label %> (<%= @example.label %>)
8
8
  </h3>
9
9
  <% end %>
10
- <% toolbar.section align: :right, divide: :left do %>
11
- <%= render_component :button_group do |group| %>
10
+ <% toolbar.section align: :right, divide: :left do %>
11
+ <%= render_component :button_group do |group| %>
12
12
  <% group.button icon: :eye,
13
- href: helpers.lookbook_inspect_path(@example.path, @params),
13
+ href: lookbook_inspect_path(@example.path, @params),
14
14
  tooltip: "View in Inspector" %>
15
15
  <% group.button icon: :external_link,
16
- href: helpers.lookbook_inspect_path(@example.path, @params),
16
+ href: lookbook_inspect_path(@example.path, @params),
17
17
  tooltip: "Open in new window",
18
18
  target: "_blank" %>
19
19
  <% end %>
@@ -28,7 +28,7 @@
28
28
  @viewport:resize-complete="resizeIframe"
29
29
  @tabs:change.window="resizeIframe">
30
30
  <%= render_component :viewport,
31
- src: helpers.lookbook_preview_path(@example.path, @params.merge(lookbook_embed: true)),
31
+ src: lookbook_preview_path(@example.path, @params.merge(lookbook_embed: true)),
32
32
  alpine_data: "store",
33
33
  resize_height: false,
34
34
  max_height: @max_height,
@@ -11,6 +11,14 @@ module Lookbook
11
11
 
12
12
  protected
13
13
 
14
+ def lookbook_inspect_path(*args)
15
+ Lookbook::Engine.routes.url_helpers.lookbook_inspect_path(*args)
16
+ end
17
+
18
+ def lookbook_preview_path(*args)
19
+ Lookbook::Engine.routes.url_helpers.lookbook_preview_path(*args)
20
+ end
21
+
14
22
  def alpine_data
15
23
  [@id.to_json, "$store.pages.embeds"].join(",")
16
24
  end
@@ -10,7 +10,7 @@
10
10
  @keydown.esc.stop="clear"
11
11
  @keydown.f.stop.prevent.window="focus"
12
12
  @keydown.stop>
13
- <button class="text-lookbook-button-text hover:text-lookbook-button-text-hover focus:ring-0 focus:outline-none absolute top-1/2 right-3 -translate-y-1/2" @click="clear" :class="{hidden: !active}">
13
+ <button class="text-lookbook-icon-button-stroke hover:text-lookbook-icon-button-stroke-hover focus:ring-0 focus:outline-none absolute top-1/2 right-3 -translate-y-1/2" @click="clear" :class="{hidden: !active}">
14
14
  <%= icon :x, size: 3 %>
15
15
  </button>
16
16
  </div>
@@ -1,5 +1,5 @@
1
1
  <%= render_component_tag :header do %>
2
- <%= render_component :toolbar, class: "!bg-lookbook-header !text-lookbook-header-text !border-lookbook-header-border" do |toolbar| %>
2
+ <%= render_component :toolbar, class: "!bg-lookbook-header-bg !text-lookbook-header-text !border-lookbook-header-border" do |toolbar| %>
3
3
  <% toolbar.section padded: true do %>
4
4
  <% if branding.present? %>
5
5
  <a
@@ -0,0 +1,5 @@
1
+ @layer components {
2
+ .lookbook-panel {
3
+ @apply p-4 min-h-full;
4
+ }
5
+ }
@@ -0,0 +1,6 @@
1
+ <%= render_component_tag :div, class: "h-full" do %>
2
+ <% if panel_styles %>
3
+ <% content_for :panel_css do %><%= panel_styles %><% end %>
4
+ <% end %>
5
+ <%= panel_html %>
6
+ <% end %>
@@ -0,0 +1,36 @@
1
+ require "css_parser"
2
+
3
+ module Lookbook
4
+ class InspectorPanel::Component < Lookbook::BaseComponent
5
+ attr_reader :panel_styles, :panel_html, :id
6
+
7
+ def initialize(id:, name:, system: false, **html_attrs)
8
+ @id = id
9
+ @name = name
10
+ @system = system
11
+ @panel_html = nil
12
+ @panel_styles = nil
13
+ super(**html_attrs)
14
+ end
15
+
16
+ def before_render
17
+ if @system == false
18
+ panel_dom = ::Nokogiri::HTML.fragment(content)
19
+ style_tags = panel_dom.css("style")
20
+ if style_tags.any?
21
+ css_parser = ::CssParser::Parser.new
22
+ @panel_styles = ""
23
+ style_tags.each do |style_tag|
24
+ css_parser.load_string! style_tag.text
25
+ css_parser.each_selector do |selector, declarations, specificity|
26
+ @panel_styles += "##{id} #{selector} { #{declarations} }\n"
27
+ end
28
+ style_tag.unlink
29
+ end
30
+ @panel_html = panel_dom.to_html.html_safe
31
+ end
32
+ end
33
+ @panel_html ||= content
34
+ end
35
+ end
36
+ end
@@ -4,8 +4,7 @@ module Lookbook
4
4
  renders_one :toolbar, Lookbook::Toolbar::Component
5
5
 
6
6
  def initialize(
7
- id: nil,
8
- collection:,
7
+ collection:, id: nil,
9
8
  collapse_singles: false,
10
9
  **attrs
11
10
  )
@@ -16,7 +16,7 @@
16
16
  size: 3,
17
17
  class: "mr-1 text-lookbook-nav-toggle absolute -left-4",
18
18
  "x-effect": "iconName = open ? 'chevron-down' : 'chevron-right'" if children? %>
19
- <%= icon nav_icon, size: 3.5, class: "mr-1.5 text-lookbook-nav-icon" %>
19
+ <%= icon nav_icon, size: 3.5, class: "mr-1.5 text-lookbook-nav-icon-stroke" %>
20
20
  <span><%= label %></span>
21
21
  </div>
22
22
  <% end %>
@@ -31,7 +31,8 @@ module Lookbook
31
31
  protected
32
32
 
33
33
  def alpine_data
34
- "{name: '#{@name}', value: #{value.to_json}}"
34
+ escaped_value = value.is_a?(String) ? helpers.j(value) : value
35
+ "{name: '#{@name}', value: '#{escaped_value}'}"
35
36
  end
36
37
 
37
38
  def alpine_component
@@ -1,3 +1,3 @@
1
- <%= render_component_tag class: "prose #{size_class} text-lookbook-prose-text bg-lookbook-prose prose-a:text-lookbook-prose-link" do %>
1
+ <%= render_component_tag class: "prose #{size_class} text-lookbook-prose-text bg-lookbook-prose-bg prose-a:text-lookbook-prose-link" do %>
2
2
  <%== rendered_content %>
3
3
  <% end %>
@@ -3,7 +3,7 @@ module Lookbook
3
3
  renders_many :panels, ->(**attrs) do
4
4
  @panel_counter += 1
5
5
  attrs[:name] ||= "tab-#{@panel_counter}"
6
- Lookbook::TabPanels::Panel::Component.new **attrs
6
+ Lookbook::TabPanels::Panel::Component.new(**attrs)
7
7
  end
8
8
 
9
9
  def initialize(**html_attrs)
@@ -1,8 +1,8 @@
1
1
  module Lookbook
2
2
  class TabPanels::Panel::Component < Lookbook::BaseComponent
3
3
  def initialize(name:, id: nil, **html_attrs)
4
- @name = name
5
- @id = "#{id || "panel-#{name}"}"
4
+ @name = name
5
+ @id = (id || "panel-#{name}").to_s
6
6
  super(**html_attrs)
7
7
  end
8
8
  end
@@ -8,7 +8,7 @@
8
8
  }
9
9
  ],
10
10
  ":class": "{
11
- 'border-lookbook-tabs-highlight': isSelected($el),
11
+ 'border-lookbook-tabs-border-active': isSelected($el),
12
12
  'border-transparent text-lookbook-tabs-text hover:text-lookbook-tabs-text-hover': !isSelected($el),
13
13
  'hidden': visibleTabsCount >= #{@position}
14
14
  }",
@@ -9,7 +9,7 @@
9
9
  }
10
10
  ],
11
11
  ":class": "{
12
- 'border-lookbook-tabs-highlight': isSelected($el),
12
+ 'border-lookbook-tabs-border-active': isSelected($el),
13
13
  'border-transparent text-lookbook-tabs-text hover:text-lookbook-tabs-text-hover': !isSelected($el),
14
14
  '!text-lookbook-tabs-text-disabled': isDisabled($el),
15
15
  'invisible pointer-events-none relative z-[-1]': visibleTabsCount < #{@position}
@@ -18,7 +18,7 @@ module Lookbook
18
18
  end
19
19
 
20
20
  def self.escape_attribute_key
21
- @escape_attribute_key ||= Gem::Version.new(Rails.version) < Gem::Version.new('6.1.5.1') ? :escape_attributes : :escape
21
+ @escape_attribute_key ||= Gem::Version.new(Rails.version) < Gem::Version.new("6.1.5.1") ? :escape_attributes : :escape
22
22
  end
23
23
  end
24
24
  end
@@ -1,4 +1,4 @@
1
- <%= render_component_tag class: "h-10 border-b border-lookbook-divider w-full flex items-center text-sm flex-none bg-lookbook-toolbar" do %>
1
+ <%= render_component_tag class: "h-10 border-b border-lookbook-divider w-full flex items-center text-sm flex-none bg-lookbook-toolbar-bg" do %>
2
2
  <div class="toolbar-sections flex items-stretch w-full">
3
3
  <%= safe_join(sections) %>
4
4
  </div>
@@ -5,7 +5,7 @@
5
5
 
6
6
  .resize-handle {
7
7
  @apply flex items-center justify-center h-full w-full border-lookbook-divider bg-lookbook-viewport-handle hover:bg-indigo-100 hover:bg-opacity-20;
8
- @apply text-lookbook-viewport-handle-icon hover:text-lookbook-viewport-handle-icon-hover transition select-none touch-none;
8
+ @apply text-lookbook-viewport-handle-icon-stroke hover:text-lookbook-viewport-handle-icon-stroke-hover transition select-none touch-none;
9
9
  }
10
10
  }
11
11
  }
@@ -34,7 +34,7 @@
34
34
  <% end %>
35
35
  <% if @resize_height %>
36
36
  <div
37
- class="resize-handle border-b border-l border-lookbook-divider cursor-[col-resize] <%= "border-r" unless @resize_width %>"
37
+ class="resize-handle border-b border-l border-lookbook-divider cursor-[row-resize] <%= "border-r" unless @resize_width %>"
38
38
  @pointerdown="onResizeHeightStart"
39
39
  @dblclick="toggleFullHeight">
40
40
  <svg class="h-4 w-4 pointer-events-none rotate-90" fill="currentColor" viewBox="0 0 24 24" >
@@ -24,7 +24,7 @@ module Lookbook
24
24
  protected
25
25
 
26
26
  def generate_theme_overrides
27
- @theme_overrides ||= Lookbook::Theme.new(Lookbook.config.ui_theme_overrides).to_css
27
+ @theme_overrides ||= Lookbook.theme.to_css
28
28
  end
29
29
 
30
30
  def feature_enabled?(feature)
@@ -2,6 +2,7 @@ module Lookbook
2
2
  class PagesController < ApplicationController
3
3
  layout "lookbook/page"
4
4
  helper_method :page_controller
5
+ helper Lookbook::PageHelper
5
6
 
6
7
  def self.controller_path
7
8
  "lookbook/pages"
@@ -47,6 +47,16 @@ module Lookbook
47
47
  redirect_to lookbook_inspect_path params[:path]
48
48
  end
49
49
 
50
+ # Namespaced preview helpers
51
+
52
+ def lookbook_display(key, fallback = nil)
53
+ params.dig(:lookbook, :display, key.to_sym) || fallback
54
+ end
55
+
56
+ def lookbook_data(key, fallback = nil)
57
+ Lookbook.data.get(key, fallback)
58
+ end
59
+
50
60
  private
51
61
 
52
62
  def lookup_entities
@@ -98,10 +108,11 @@ module Lookbook
98
108
  preview_controller.params[param[:name]] = Lookbook::Params.cast(preview_controller.params[param[:name]], param[:type])
99
109
  end
100
110
  end
101
- # set display params
111
+ # set display and data params
102
112
  preview_controller.params.merge!({
103
113
  lookbook: {
104
- display: @example.display_params
114
+ display: @example.display_params,
115
+ data: Lookbook.data
105
116
  }
106
117
  })
107
118
  end
@@ -119,7 +130,7 @@ module Lookbook
119
130
 
120
131
  context_data = {
121
132
  preview_params: preview_params,
122
- path: params[:path],
133
+ path: params[:path]
123
134
  }
124
135
 
125
136
  example = @example
@@ -134,7 +145,7 @@ module Lookbook
134
145
  output = preview_controller.process(:render_example_to_string, @preview, example.name)
135
146
  source = has_template ? example.template_source(render_args[:template]) : example.method_source
136
147
  source_lang = has_template ? example.template_lang(render_args[:template]) : example.lang
137
-
148
+
138
149
  example.define_singleton_method(:output, proc { output })
139
150
  example.define_singleton_method(:source, proc { source })
140
151
  example.define_singleton_method(:source_lang, proc { source_lang })
@@ -145,7 +156,8 @@ module Lookbook
145
156
  context: context_data,
146
157
  preview: preview,
147
158
  examples: examples,
148
- components: preview.components,
159
+ example: example,
160
+ data: Lookbook.data,
149
161
  app: Lookbook
150
162
  })
151
163
  end
@@ -158,21 +170,21 @@ module Lookbook
158
170
 
159
171
  callable_data = {
160
172
  name: name.to_s,
161
- index_position: (@panels.select { |p| p.pane == config.pane }.size + 1),
173
+ index_position: (@panels.count { |p| p.pane == config.pane } + 1),
162
174
  **inspector_data
163
175
  }
164
176
 
165
177
  resolved_config = config_with_defaults.transform_values do |value|
166
- value.class == Proc ? value.call(Lookbook::Store.new(callable_data)) : value
178
+ value.instance_of?(Proc) ? value.call(Lookbook::Store.new(callable_data)) : value
167
179
  end
168
180
  resolved_config[:name] = name.to_s
169
-
181
+
170
182
  @panels << Lookbook::Store.new(resolved_config, deep: false)
171
183
  end
172
184
 
173
185
  @panels = @panels.select(&:show).sort_by { |p| [p.position, p.label] }
174
186
  end
175
-
187
+
176
188
  def main_panels
177
189
  panels.select { |panel| panel.pane == :main }
178
190
  end
@@ -4,6 +4,15 @@ module Lookbook
4
4
  Lookbook::Engine.config.lookbook
5
5
  end
6
6
 
7
+ def theme
8
+ Lookbook.theme
9
+ end
10
+
11
+ def asset_path(file, version: true)
12
+ path = "/lookbook-assets/#{file}".gsub("//", "/")
13
+ version ? "#{path}?v=#{Lookbook::VERSION}" : path
14
+ end
15
+
7
16
  def feature_enabled?(name)
8
17
  Lookbook::Features.enabled?(name)
9
18
  end
@@ -20,11 +29,5 @@ module Lookbook
20
29
  def generate_id(*args)
21
30
  args.map { |args| args.delete_prefix("/").tr("&?=/_\-", "-") }.join("-")
22
31
  end
23
-
24
- def append_styles(&block)
25
- content_for :styles do
26
- capture(&block)
27
- end
28
- end
29
32
  end
30
33
  end
@@ -1,7 +1,6 @@
1
1
  module Lookbook
2
2
  module PreviewHelper
3
- def lookbook_display(key, fallback = nil)
4
- params.dig(:lookbook, :display, key.to_sym) || fallback
5
- end
3
+ # Left intentionally empty.
4
+ # Included for backwards compatability.
6
5
  end
7
6
  end
@@ -4,7 +4,7 @@
4
4
  alpine_data: "$store.layout.main",
5
5
  ":class": "$store.layout.mobile && '!block'" do |layout| %>
6
6
 
7
- <% layout.pane id: "app-sidebar", class: "flex flex-col bg-lookbook-sidebar relative translate-x-0",
7
+ <% layout.pane id: "app-sidebar", class: "flex flex-col bg-lookbook-sidebar-bg relative translate-x-0",
8
8
  ":class": "{
9
9
  'transition': $store.layout.mobile,
10
10
  'translate-x-full': $store.layout.mobile && sidebarHidden,
@@ -4,11 +4,11 @@
4
4
  x-data="{}"
5
5
  @navigation:complete.window="$refs.scroller.scrollTop = 0">
6
6
 
7
- <div class="h-full bg-lookbook-page relative">
7
+ <div class="h-full bg-lookbook-page-bg relative">
8
8
  <% unless @error %>
9
9
 
10
10
  <div class="absolute top-0 right-0 pt-1 pr-0 pl-1 pb-1 rounded-bl-md">
11
- <div class="bg-lookbook-page opacity-90 absolute inset-0 w-full h-full z-0"></div>
11
+ <div class="bg-lookbook-page-bg opacity-90 absolute inset-0 w-full h-full z-0"></div>
12
12
  <div class="relative z-10 flex items-center">
13
13
 
14
14
  <% if @previous_page %>
@@ -7,6 +7,12 @@
7
7
  @navigation:start="closeMobileSidebar"
8
8
  class="w-screen h-screen grid grid-rows-[40px_1fr] relative">
9
9
 
10
+ <% if content_for? :panel_css %>
11
+ <style media="all" id="panel-styles">
12
+ <%= content_for :panel_css -%>
13
+ </style>
14
+ <% end %>
15
+
10
16
  <%= render_component :header, id: "app-header", debug_menu: config.debug_menu do |header| %>
11
17
  <% header.branding { config.project_name } %>
12
18
  <% end %>
@@ -5,22 +5,24 @@
5
5
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
7
7
 
8
- <link href="/lookbook-assets/css/lookbook.css?v=<%= Lookbook::VERSION %>" rel="stylesheet">
9
- <link href="/lookbook-assets/css/themes/<%= config.ui_theme %>.css?v=<%= Lookbook::VERSION %>" rel="stylesheet">
10
- <% if @theme_overrides.present? %>
11
- <style media="all">
12
- <%== @theme_overrides %>
13
- </style>
14
- <% end %>
8
+ <link href="<%= asset_path("/css/lookbook.css") %>" rel="stylesheet">
9
+ <link href="<%= asset_path("/css/themes/#{config.ui_theme}.css") %>" rel="stylesheet">
15
10
 
16
- <% if content_for? :styles %>
11
+ <%- if @theme_overrides.present? %>
17
12
  <style media="all">
18
- <%= content_for :styles %>
13
+ <%== @theme_overrides %>
19
14
  </style>
20
15
  <% end %>
21
16
 
22
- <% if config.ui_favicon != false %>
23
- <link rel="icon" href="<%= config.ui_favicon || "data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>👀</text></svg>" %>">
17
+ <% if config.ui_favicon == true %>
18
+ <link
19
+ rel="icon"
20
+ href="data:image/svg+xml,%3Csvg width='96' height='84' viewBox='0 0 96 84' xmlns='http://www.w3.org/2000/svg'%3E%3Cdefs%3E%3CclipPath id='a'%3E%3Cpath d='M96 0v84H0V0h96Z'/%3E%3C/clipPath%3E%3CclipPath id='b'%3E%3Cpath d='M71.897 0a1.5 1.5 0 0 1 1.31.769l22.605 40.5a1.5 1.5 0 0 1 0 1.462l-22.605 40.5a1.5 1.5 0 0 1-1.31.769H49.481a1 1 0 0 1-.873-1.487L70.812 42.73a1.5 1.5 0 0 0 0-1.462L48.608 1.487A1 1 0 0 1 49.481 0ZM24.655.564l22.72 40.705a1.5 1.5 0 0 1 0 1.462l-22.72 40.705a1 1 0 0 1-1.746 0L.19 42.73a1.5 1.5 0 0 1 0-1.462L22.91.564a1 1 0 0 1 1.746 0Z'/%3E%3C/clipPath%3E%3C/defs%3E%3Cg clip-path='url(%23a)'%3E%3Cg clip-path='url(%23b)'%3E%3Cpath fill='<%= url_encode theme.favicon_dark_mode %>' d='M0 0h96v84H0V0z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E"
21
+ media="(prefers-color-scheme: dark)">
22
+ <link
23
+ rel="icon"
24
+ href="data:image/svg+xml,%3Csvg width='96' height='84' viewBox='0 0 96 84' xmlns='http://www.w3.org/2000/svg'%3E%3Cdefs%3E%3CclipPath id='a'%3E%3Cpath d='M96 0v84H0V0h96Z'/%3E%3C/clipPath%3E%3CclipPath id='b'%3E%3Cpath d='M71.897 0a1.5 1.5 0 0 1 1.31.769l22.605 40.5a1.5 1.5 0 0 1 0 1.462l-22.605 40.5a1.5 1.5 0 0 1-1.31.769H49.481a1 1 0 0 1-.873-1.487L70.812 42.73a1.5 1.5 0 0 0 0-1.462L48.608 1.487A1 1 0 0 1 49.481 0ZM24.655.564l22.72 40.705a1.5 1.5 0 0 1 0 1.462l-22.72 40.705a1 1 0 0 1-1.746 0L.19 42.73a1.5 1.5 0 0 1 0-1.462L22.91.564a1 1 0 0 1 1.746 0Z'/%3E%3C/clipPath%3E%3C/defs%3E%3Cg clip-path='url(%23a)'%3E%3Cg clip-path='url(%23b)'%3E%3Cpath fill='<%= url_encode theme.favicon_light_mode %>' d='M0 0h96v84H0V0z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E"
25
+ media="(prefers-color-scheme: light)">
24
26
  <% end %>
25
27
 
26
28
  <script>
@@ -31,15 +33,14 @@
31
33
  <% end %>
32
34
  </script>
33
35
 
34
- <script src="/lookbook-assets/js/lookbook.js?v=<%= Lookbook::VERSION %>" defer></script>
36
+ <script src="<%= asset_path("/js/lookbook.js") %>" defer></script>
35
37
  <% if params[:lookbook_embed] %>
36
- <script src="/lookbook-assets/js/embed.js?v=<%= Lookbook::VERSION %>" defer></script>
38
+ <script src="<%= asset_path("/js/embed.js") %>" defer></script>
37
39
  <% end %>
38
40
 
39
41
  <title><%= [@title, config.project_name || "Lookbook"].compact.join(" :: ") %></title>
40
42
  </head>
41
43
  <body>
42
-
43
44
  <%= yield :body %>
44
45
 
45
46
  <% if Rails.env.development? %>
@@ -1,4 +1,4 @@
1
- <div class="p-4 bg-lookbook-prose h-full">
1
+ <div class="p-4 bg-lookbook-prose-bg h-full">
2
2
  <% if panel.content.present? %>
3
3
  <%= render_component :prose, markdown: true do %>
4
4
  <%== panel.content %>
@@ -1,6 +1,6 @@
1
1
  <% items = examples.select { |example| example.notes.present? } %>
2
2
  <% if items.many? %>
3
- <div class="divide-y divide-dashed divide-lookbook-divider bg-lookbook-prose h-full w-full">
3
+ <div class="divide-y divide-dashed divide-lookbook-divider bg-lookbook-prose-bg h-full w-full">
4
4
  <% items.each do |item| %>
5
5
  <div class="px-4 py-6 relative">
6
6
  <h6 class="italic font-mono mb-4 opacity-40">
@@ -11,7 +11,7 @@
11
11
  <% end %>
12
12
  </div>
13
13
  <% else %>
14
- <div class="p-4 bg-lookbook-prose w-full h-full">
14
+ <div class="px-4 py-6 bg-lookbook-prose-bg w-full h-full">
15
15
  <%= render_component :prose do %>
16
16
  <%== items.any? ? items.first.notes : "<em class='opacity-50'>No notes provided.</em>" %>
17
17
  <% end %>
@@ -1,5 +1,5 @@
1
1
  <% if preview.params.none? %>
2
- <div class="p-4 w-full h-full bg-lookbook-prose">
2
+ <div class="p-4 w-full h-full bg-lookbook-prose-bg">
3
3
  <%= render_component :prose do %>
4
4
  <em class='opacity-50'>No params configured.</em>
5
5
  <% end %>
@@ -38,7 +38,7 @@
38
38
  "@click.stop": "startSpin(); $dispatch('viewport:reload'); stopSpin(500);" %>
39
39
 
40
40
  <% group.button icon: :external_link,
41
- href: lookbook_preview_path(@example.lookup_path),
41
+ href: lookbook_preview_path(@example.lookup_path, request.query_parameters),
42
42
  tooltip: "Open preview in new window",
43
43
  target: "_blank" %>
44
44
 
@@ -55,7 +55,7 @@
55
55
  <div class="h-full relative overflow-auto">
56
56
  <%= render_component :tab_panels, alpine_data: "$store.inspector.main" do |tabs| %>
57
57
  <% @main_panels.each do |panel| %>
58
- <% tabs.panel id: panel.id, name: panel.name, class: [panel.panel_classes, { "p-4": panel.padded, "prose": panel.prose }] do %>
58
+ <% tabs.panel id: panel.id, name: panel.name, class: panel.panel_classes do %>
59
59
  <%= render panel.partial, **@inspector_data, panel: panel, **panel.locals %>
60
60
  <% end %>
61
61
  <% end %>
@@ -63,7 +63,7 @@
63
63
  </div>
64
64
  <% end %>
65
65
 
66
- <%= layout.pane class: "flex flex-col h-full overflow-hidden bg-lookbook-drawer",
66
+ <%= layout.pane class: "flex flex-col h-full overflow-hidden bg-lookbook-drawer-bg",
67
67
  "x-show": "!$store.inspector.drawer.hidden && #{@drawer_panels.any?}" do %>
68
68
 
69
69
  <%= render_component :toolbar do |toolbar| %>
@@ -123,8 +123,10 @@
123
123
  <div class="h-full overflow-auto">
124
124
  <%= render_component :tab_panels, alpine_data: "$store.inspector.drawer" do |tabs| %>
125
125
  <% @drawer_panels.each do |panel| %>
126
- <% tabs.panel id: panel.id, name: panel.name, class: [panel.panel_classes, { "p-4": panel.padded, "prose": panel.prose }] do %>
127
- <%= render panel.partial, **@inspector_data, panel: panel, **panel.locals %>
126
+ <% tabs.panel id: panel.id, name: panel.name, class: panel.panel_classes do %>
127
+ <%= render_component :inspector_panel, **panel.slice(:id, :name, :system) do %>
128
+ <%= render panel.partial, **@inspector_data, panel: panel, **panel.locals %>
129
+ <% end %>
128
130
  <% end %>
129
131
  <% end %>
130
132
  <% end %>
@@ -1,6 +1,6 @@
1
1
  require "rouge"
2
2
  require "htmlbeautifier"
3
- require 'htmlentities'
3
+ require "htmlentities"
4
4
 
5
5
  module Lookbook
6
6
  module CodeFormatter
@@ -10,7 +10,7 @@ module Lookbook
10
10
  items = path
11
11
  path = ""
12
12
  end
13
-
13
+
14
14
  @path = path.delete_prefix("/").delete_suffix("/")
15
15
  super(@path)
16
16
 
@@ -1,13 +1,12 @@
1
1
  module Lookbook
2
2
  class Component < Entity
3
-
4
3
  attr_accessor :name
5
4
 
6
5
  def initialize(name)
7
6
  @name = name
8
7
  super(path)
9
8
  end
10
-
9
+
11
10
  def path
12
11
  name.underscore
13
12
  end
@@ -28,4 +27,4 @@ module Lookbook
28
27
  template_path.present?
29
28
  end
30
29
  end
31
- end
30
+ end