lookbook 0.4.0.beta.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 870ef6a17d84bca0a9fbbc421e27c2d6d682965d96c646f44d3db817e5a5e4f2
4
- data.tar.gz: 669ce3b709792be5bdf46ac806efdca269d694349e74f759b0997cbbb456792e
3
+ metadata.gz: 2f5cf46a07c480d8c8c3fe5f0a521ce01a316985f458becf36fb4c73c871f7cf
4
+ data.tar.gz: 2474c4105e357d9762c5228cee1190194a3b3069c6a9a9dc2afe0cf287339efe
5
5
  SHA512:
6
- metadata.gz: b0293806f0d57b130c07ae84b5d30fad2625df0cbf2477303d924dddfd42ece6e49b10f15fc0b395fa65adfca3de3ab1096e72565a175bdab14df2af1ba57050
7
- data.tar.gz: 2e5ad4ca7957d2684dc367b3a7d89d9922024cfc01cdbcd2567d30b830fe891b815924d64f5b7048783efd42736f41924354255f847850498fd596ba1c25e977
6
+ metadata.gz: 439aad3227d8e1e3c8d0202c4edf6b93983a2182c7a8d32c120c47f7fcd1c1dcdff675084029172c200d25fe052916b5cdcb812acd378b37af5e793ce5bea613
7
+ data.tar.gz: ab031ca977f442a1203fb059df65fe763db9e4877eeb594e44b09c63b2f0bd58bc7e6ab409ef2a11d7f33fe5b5a90f8b30a0eadd5114566c619dcc9b62be8a1e
data/README.md CHANGED
@@ -76,7 +76,7 @@ Lookbook parses [Yard-style comment tags](https://rubydoc.info/gems/yard/file/do
76
76
 
77
77
  ```ruby
78
78
  # @label Basic Button
79
- # @display bg_color: "#fff"
79
+ # @display bg_color "#fff"
80
80
  class ButtonComponentPreview < ViewComponent::Preview
81
81
 
82
82
  # Primary button
@@ -94,7 +94,7 @@ class ButtonComponentPreview < ViewComponent::Preview
94
94
  # ---------------
95
95
  # For light-on-dark screens
96
96
  #
97
- # @display bg_color: "#000"
97
+ # @display bg_color "#000"
98
98
  def secondary
99
99
  render ButtonComponent.new(style: :inverted) do
100
100
  "Click me"
@@ -143,7 +143,7 @@ The following Lookbook-specific tags are available for use:
143
143
 
144
144
  * `@label <label>` -[Customise navigation labels](#-label-text)
145
145
  * `@hidden` - [Prevent items displaying in the navigation](#-hidden)
146
- * `@display <key>:<value>` - [Specify params to pass into the preview template](#-display-key-value)
146
+ * `@display <key> <value>` - [Specify params to pass into the preview template](#-display-key-value)
147
147
  * `@!group <name> ... @!endgroup` - [Render examples in a group on the same page](#-group-name--endgroup)
148
148
 
149
149
  ### šŸ”– `@label <text>`
@@ -180,16 +180,16 @@ class FooComponentPreview < ViewComponent::Preview
180
180
  end
181
181
  ```
182
182
 
183
- ### šŸ”– `@display <key>: <value>`
183
+ ### šŸ”– `@display <key> <value>`
184
184
 
185
185
  The `@display` tag lets you pass custom parameters to your preview layout so that the component preview can be customised on a per-example basis.
186
186
 
187
187
  ```ruby
188
- # @display bg_color: "#eee"
188
+ # @display bg_color "#eee"
189
189
  class FooComponentPreview < ViewComponent::Preview
190
190
 
191
- # @display max_width: "500px"
192
- # @display wrapper: true
191
+ # @display max_width "500px"
192
+ # @display wrapper true
193
193
  def default
194
194
  end
195
195
  end
@@ -198,7 +198,7 @@ end
198
198
  The `@display` tag can be applied at the preview (class) or at the example (method) level, and takes the following format:
199
199
 
200
200
  ```ruby
201
- # @display <key>: <value>
201
+ # @display <key> <value>
202
202
  ```
203
203
 
204
204
  - `<key>` must be a valid Ruby hash key name, without quotes or spaces
@@ -249,19 +249,19 @@ Globally defined display params will be available to all previews. Any preview o
249
249
  Valid:
250
250
 
251
251
  ```ruby
252
- # @display body_classes: "bg-red border border-4 border-green"
253
- # @display wrap_in_container: true
254
- # @display emojis_to_show: 4
255
- # @display page_title: "Special example title"
252
+ # @display body_classes "bg-red border border-4 border-green"
253
+ # @display wrap_in_container true
254
+ # @display emojis_to_show 4
255
+ # @display page_title "Special example title"
256
256
  ```
257
257
 
258
258
  Invalid:
259
259
 
260
260
  ```ruby
261
- # @display body_classes: 'bg-red border border-4 border-green' [āŒ single quotes]
262
- # @display wrap_in_container: should_wrap [āŒ unquoted string, perhaps trying to call a method]
263
- # @display page title: "Special example title" [āŒ space in key]
264
- # @display bg_color: #fff [āŒ colors need quotes around them, it's not CSS!]
261
+ # @display body_classes 'bg-red border border-4 border-green' [āŒ single quotes]
262
+ # @display wrap_in_container should_wrap [āŒ unquoted string, perhaps trying to call a method]
263
+ # @display page title "Special example title" [āŒ space in key]
264
+ # @display bg_color #fff [āŒ colors need quotes around them, it's not CSS!]
265
265
  ```
266
266
 
267
267
  ### šŸ”– `@!group <name> ... @!endgroup`
@@ -50,7 +50,7 @@ module Lookbook
50
50
  def find_preview
51
51
  candidates = []
52
52
  params[:path].to_s.scan(%r{/|$}) { candidates << $` }
53
- match = candidates.detect { |candidate| Lookbook::Preview.exists?(candidate) }
53
+ match = candidates.reverse.detect { |candidate| Lookbook::Preview.exists?(candidate) }
54
54
  @preview = match ? Lookbook::Preview.find(match) : nil
55
55
  end
56
56
 
@@ -96,8 +96,7 @@ module Lookbook
96
96
  }
97
97
  end
98
98
  set_params
99
- joined = render_to_string "lookbook/preview_group", locals: {examples: examples}, layout: nil
100
- preview_controller.render_in_layout_to_string(joined, @preview.lookbook_layout || current_layout)
99
+ preview_controller.render_in_layout_to_string("lookbook/preview/group", {examples: examples}, @preview.lookbook_layout)
101
100
  else
102
101
  set_params(@example)
103
102
  preview_controller.params[:path] = "#{@preview.preview_name}/#{@example.name}".chomp("/")
@@ -106,18 +105,14 @@ module Lookbook
106
105
  end
107
106
 
108
107
  def set_params(example = nil)
109
- example_params = @preview.lookbook_display_params.deep_merge(example ? example.lookbook_display_params : {})
108
+ example_params = example.nil? ? @preview.display_params : example.display_params
110
109
  preview_controller.params.merge!({
111
110
  lookbook: {
112
- display: Lookbook.config.preview_display_params.deep_merge(example_params)
111
+ display: example_params
113
112
  }
114
113
  })
115
114
  end
116
115
 
117
- def current_layout
118
- preview_controller.send :_layout, preview_controller.lookup_context, [:html]
119
- end
120
-
121
116
  def assign_inspector
122
117
  @inspector = {
123
118
  panes: {
@@ -8,7 +8,12 @@ module Lookbook
8
8
  end
9
9
 
10
10
  def markdown(text)
11
- Markdown.new(text).to_html.html_safe
11
+ markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, {
12
+ tables: true,
13
+ fenced_code_blocks: true,
14
+ disable_indented_code_blocks: true,
15
+ })
16
+ markdown.render(text).html_safe
12
17
  end
13
18
 
14
19
  def highlight(source, language)
@@ -1,4 +1,4 @@
1
- <% examples = node.get_examples %>
1
+ <% examples = node.get_examples.reject(&:hidden?) %>
2
2
  <% if examples.many? %>
3
3
  <%= render "nav/node", node: node, path: show_path(examples.first.path) do %>
4
4
  <% examples.each do |example| %>
@@ -3,6 +3,7 @@
3
3
  <nav class="-mb-px flex space-x-8 cursor-auto">
4
4
  <% panes.each do |key, props| %>
5
5
  <a
6
+ id="inspector-tab-<%= key %>"
6
7
  href="#<%= key %>"
7
8
  class="whitespace-nowrap py-2 px-1 border-b-2 cursor-pointer <%= "!text-gray-300" if props[:disabled] %>"
8
9
  :class="{
@@ -23,7 +24,7 @@
23
24
  <% if props[:clipboard].present? %>
24
25
  <%= render "shared/clipboard" do %><%= h props[:clipboard].strip %><% end %>
25
26
  <% end %>
26
- <div class="flex flex-col h-full overflow-auto">
27
+ <div id="inspector-content-<%= key %>" class="flex flex-col h-full overflow-auto">
27
28
  <%= render "workbench/inspector/#{props[:template]}", key: key, **props %>
28
29
  </div>
29
30
  </div>
@@ -30,7 +30,7 @@ module Lookbook
30
30
 
31
31
  options.preview_controller = vc_options.preview_controller if options.preview_controller.nil?
32
32
  options.preview_srcdoc = true if options.preview_srcdoc.nil?
33
- options.preview_display_params ||= {}
33
+ options.preview_display_params ||= {}.with_indifferent_access
34
34
 
35
35
  options.listen_paths = options.listen_paths.map(&:to_s)
36
36
  options.listen_paths += options.preview_paths
@@ -23,8 +23,8 @@ module Lookbook
23
23
  return @lookbook_examples if @lookbook_examples.present?
24
24
  public_methods = public_instance_methods(false)
25
25
  public_method_objects = code_object.meths.filter { |m| public_methods.include?(m.name) }
26
- visible = public_method_objects.map { |m| PreviewExample.new(m.name.to_s, self) }.reject(&:hidden?)
27
- sorted = Lookbook.config.sort_examples ? visible.sort_by(&:label) : visible
26
+ examples = public_method_objects.map { |m| PreviewExample.new(m.name.to_s, self) }
27
+ sorted = Lookbook.config.sort_examples ? examples.sort_by(&:label) : examples
28
28
  @lookbook_examples = []
29
29
  if code_object.groups.any?
30
30
  sorted.group_by { |m| m.group }.each do |name, examples|
@@ -78,6 +78,10 @@ module Lookbook
78
78
  defined?(@layout) ? @layout : nil
79
79
  end
80
80
 
81
+ def display_params
82
+ Lookbook.config.preview_display_params.deep_merge(lookbook_display_params)
83
+ end
84
+
81
85
  class << self
82
86
  def all
83
87
  ViewComponent::Preview.all.sort_by(&:label)
@@ -14,9 +14,9 @@ module Lookbook
14
14
  render_to_string template, opts
15
15
  end
16
16
 
17
- def render_in_layout_to_string(content, layout_override)
18
- layout = determine_layout(layout_override, prepend_views: false)[:layout]
19
- render_to_string html: content, layout: layout
17
+ def render_in_layout_to_string(template, locals, layout = nil)
18
+ append_view_path Lookbook::Engine.root.join("app/views")
19
+ render_to_string template, locals: locals, **determine_layout(@preview.lookbook_layout)
20
20
  end
21
21
  end
22
22
  end
@@ -21,6 +21,10 @@ module Lookbook
21
21
  lookbook_label.presence || name.titleize
22
22
  end
23
23
 
24
+ def display_params
25
+ @preview.display_params.merge(lookbook_display_params)
26
+ end
27
+
24
28
  def method_source
25
29
  code_object.source.split("\n")[1..-2].join("\n").strip_heredoc
26
30
  end
@@ -26,6 +26,10 @@ module Lookbook
26
26
  :group
27
27
  end
28
28
 
29
+ def hidden?
30
+ false
31
+ end
32
+
29
33
  def matchers
30
34
  [@preview.label, label].map { |m| m.gsub(/\s/, "").downcase }
31
35
  end
@@ -21,15 +21,15 @@ module Lookbook
21
21
  end
22
22
 
23
23
  def lookbook_display_params
24
- display_params = {}
24
+ display_params = {}.with_indifferent_access
25
25
  if code_object&.tags(:display).present?
26
26
  code_object.tags(:display).each do |tag|
27
- parts = tag.text.match(/^\s?([^:]*)\s?:\s?(.*)\s?$/)
27
+ parts = tag.text.strip.match(/^([^\s]*)\s?(.*)$/)
28
28
  if parts.present?
29
29
  begin
30
30
  display_params[parts[1]] = JSON.parse parts[2]
31
31
  rescue JSON::ParserError => err
32
- Rails.logger.error("\nšŸ‘€ [Lookbook] Invalid JSON in @display tag.\nšŸ‘€ [Lookbook] (#{err.to_s})\n")
32
+ Rails.logger.error("\nšŸ‘€ [Lookbook] Invalid JSON in @display tag.\nšŸ‘€ [Lookbook] (#{err})\n")
33
33
  end
34
34
  end
35
35
  end
@@ -1,3 +1,3 @@
1
1
  module Lookbook
2
- VERSION = "0.4.0.beta.1"
2
+ VERSION = "0.4.3"
3
3
  end
@@ -11,5 +11,10 @@ namespace :lookbook do
11
11
  contents = file.read
12
12
  File.write(filename, contents.gsub(current_version, new_version))
13
13
  end
14
+
15
+ desc "Build Gem and push to RubyGems"
16
+ task :build_and_push do
17
+ sh("rake build && gem push pkg/lookbook-#{Lookbook::VERSION}.gem")
18
+ end
14
19
  end
15
20
  end
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.4.0.beta.1
4
+ version: 0.4.3
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-10-19 00:00:00.000000000 Z
11
+ date: 2021-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -216,7 +216,7 @@ files:
216
216
  - app/views/lookbook/nav/_leaf.html.erb
217
217
  - app/views/lookbook/nav/_node.html.erb
218
218
  - app/views/lookbook/nav/_preview.html.erb
219
- - app/views/lookbook/preview_group.html.erb
219
+ - app/views/lookbook/preview/group.html.erb
220
220
  - app/views/lookbook/shared/_clipboard.html.erb
221
221
  - app/views/lookbook/shared/_header.html.erb
222
222
  - app/views/lookbook/shared/_sidebar.html.erb
@@ -259,9 +259,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
259
259
  version: '0'
260
260
  required_rubygems_version: !ruby/object:Gem::Requirement
261
261
  requirements:
262
- - - ">"
262
+ - - ">="
263
263
  - !ruby/object:Gem::Version
264
- version: 1.3.1
264
+ version: '0'
265
265
  requirements: []
266
266
  rubygems_version: 3.1.2
267
267
  signing_key: