lookbook 1.0.0.beta.5 → 1.0.0.beta.8
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 +29 -254
- data/app/assets/lookbook/css/lookbook.css +1 -1
- data/app/assets/lookbook/css/themes/blue.css +58 -37
- data/app/assets/lookbook/css/themes/indigo.css +58 -37
- data/app/assets/lookbook/css/themes/zinc.css +58 -37
- data/app/assets/lookbook/css/tooltip.css +5 -5
- data/app/components/lookbook/base_component.rb +0 -1
- data/app/components/lookbook/button/component.html.erb +2 -2
- data/app/components/lookbook/embed/component.html.erb +5 -5
- data/app/components/lookbook/embed/component.rb +8 -0
- data/app/components/lookbook/filter/component.html.erb +1 -1
- data/app/components/lookbook/header/component.html.erb +1 -1
- data/app/components/lookbook/inspector_panel/component.css +5 -0
- data/app/components/lookbook/inspector_panel/component.html.erb +6 -0
- data/app/components/lookbook/inspector_panel/component.rb +36 -0
- data/app/components/lookbook/nav/component.rb +1 -2
- data/app/components/lookbook/nav/item/component.html.erb +1 -1
- data/app/components/lookbook/params_editor/field/component.rb +2 -1
- data/app/components/lookbook/prose/component.html.erb +1 -1
- data/app/components/lookbook/tab_panels/component.rb +1 -1
- data/app/components/lookbook/tab_panels/panel/component.rb +2 -2
- data/app/components/lookbook/tabs/dropdown_tab/component.html.erb +1 -1
- data/app/components/lookbook/tabs/tab/component.html.erb +1 -1
- data/app/components/lookbook/tag_component.rb +1 -1
- data/app/components/lookbook/toolbar/component.html.erb +1 -1
- data/app/components/lookbook/viewport/component.css +1 -1
- data/app/components/lookbook/viewport/component.html.erb +1 -1
- data/app/controllers/lookbook/application_controller.rb +1 -1
- data/app/controllers/lookbook/pages_controller.rb +1 -0
- data/app/controllers/lookbook/previews_controller.rb +21 -9
- data/app/helpers/lookbook/application_helper.rb +9 -6
- data/app/helpers/lookbook/preview_helper.rb +2 -3
- data/app/views/layouts/lookbook/application.html.erb +1 -1
- data/app/views/layouts/lookbook/page.html.erb +2 -2
- data/app/views/layouts/lookbook/shell.html.erb +6 -0
- data/app/views/layouts/lookbook/skeleton.html.erb +15 -14
- data/app/views/lookbook/previews/panels/_content.html.erb +1 -1
- data/app/views/lookbook/previews/panels/_notes.html.erb +2 -2
- data/app/views/lookbook/previews/panels/_params.html.erb +1 -1
- data/app/views/lookbook/previews/show.html.erb +7 -5
- data/lib/lookbook/code_formatter.rb +1 -1
- data/lib/lookbook/collection.rb +1 -1
- data/lib/lookbook/component.rb +2 -3
- data/lib/lookbook/config.rb +68 -46
- data/lib/lookbook/data.rb +11 -0
- data/lib/lookbook/engine.rb +64 -68
- data/lib/lookbook/entity.rb +1 -1
- data/lib/lookbook/hooks.rb +21 -0
- data/lib/lookbook/markdown.rb +1 -1
- data/lib/lookbook/page.rb +4 -5
- data/lib/lookbook/page_section.rb +2 -4
- data/lib/lookbook/panels.rb +15 -0
- data/lib/lookbook/params.rb +12 -0
- data/lib/lookbook/parser.rb +4 -1
- data/lib/lookbook/preview.rb +9 -11
- data/lib/lookbook/preview_example.rb +1 -1
- data/lib/lookbook/preview_group.rb +8 -0
- data/lib/lookbook/source_inspector.rb +9 -0
- data/lib/lookbook/store.rb +14 -2
- data/lib/lookbook/tag.rb +112 -0
- data/lib/lookbook/tags.rb +22 -0
- data/lib/lookbook/theme.rb +38 -9
- data/lib/lookbook/version.rb +1 -1
- data/lib/lookbook.rb +1 -0
- data/lib/tasks/lookbook_tasks.rake +1 -2
- data/public/lookbook-assets/css/lookbook.css +307 -150
- data/public/lookbook-assets/css/lookbook.css.map +1 -1
- data/public/lookbook-assets/css/themes/blue.css +57 -36
- data/public/lookbook-assets/css/themes/blue.css.map +1 -1
- data/public/lookbook-assets/css/themes/indigo.css +57 -36
- data/public/lookbook-assets/css/themes/indigo.css.map +1 -1
- data/public/lookbook-assets/css/themes/zinc.css +57 -36
- data/public/lookbook-assets/css/themes/zinc.css.map +1 -1
- data/public/lookbook-assets/js/embed.js +193 -193
- data/public/lookbook-assets/js/lookbook.js +1151 -1308
- data/public/lookbook-assets/js/lookbook.js.map +1 -1
- metadata +12 -4
@@ -1,7 +1,7 @@
|
|
1
1
|
module Lookbook
|
2
2
|
class PreviewExample < Entity
|
3
3
|
attr_reader :name, :preview
|
4
|
-
delegate :params, :position, :group, :notes, :hidden?, :source, to: :@example_inspector
|
4
|
+
delegate :params, :position, :group, :notes, :hidden?, :source, :tags, :tag, to: :@example_inspector
|
5
5
|
|
6
6
|
def initialize(name, preview)
|
7
7
|
@name = name
|
@@ -49,6 +49,14 @@ module Lookbook
|
|
49
49
|
@preview.hierarchy_depth + 1
|
50
50
|
end
|
51
51
|
|
52
|
+
def tags(name = nil)
|
53
|
+
examples.map { |example| example.tags(name) }.flatten
|
54
|
+
end
|
55
|
+
|
56
|
+
def tag(name = nil)
|
57
|
+
tags(name).first
|
58
|
+
end
|
59
|
+
|
52
60
|
alias_method :lookup_path, :path
|
53
61
|
end
|
54
62
|
end
|
@@ -79,5 +79,14 @@ module Lookbook
|
|
79
79
|
def methods
|
80
80
|
code_object&.meths
|
81
81
|
end
|
82
|
+
|
83
|
+
def tags(name = nil)
|
84
|
+
tag_objects = code_object&.tags(name).presence || []
|
85
|
+
Lookbook::Tags.process_tags(tag_objects)
|
86
|
+
end
|
87
|
+
|
88
|
+
def tag(name = nil)
|
89
|
+
tags(name).first
|
90
|
+
end
|
82
91
|
end
|
83
92
|
end
|
data/lib/lookbook/store.rb
CHANGED
@@ -21,16 +21,28 @@ module Lookbook
|
|
21
21
|
self
|
22
22
|
end
|
23
23
|
|
24
|
+
def get(key, fallback = nil)
|
25
|
+
if key?(normalize_key(key))
|
26
|
+
self[normalize_key(key)]
|
27
|
+
else
|
28
|
+
fallback
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
24
32
|
def method_missing(name, *args)
|
25
33
|
super(normalize_key(name), *args.map { |arg| normalize_value(arg) })
|
26
34
|
end
|
27
35
|
|
36
|
+
def respond_to_missing?(name, *)
|
37
|
+
key?(name)
|
38
|
+
end
|
39
|
+
|
28
40
|
def normalize_key(key)
|
29
|
-
key.to_s.downcase.
|
41
|
+
key.to_s.downcase.tr("-", "_").to_sym
|
30
42
|
end
|
31
43
|
|
32
44
|
def normalize_value(value)
|
33
45
|
@deep && value.is_a?(Hash) ? Store.new(value) : value
|
34
46
|
end
|
35
47
|
end
|
36
|
-
end
|
48
|
+
end
|
data/lib/lookbook/tag.rb
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
require "shellwords"
|
2
|
+
|
3
|
+
module Lookbook
|
4
|
+
class Tag
|
5
|
+
attr_reader :data, :arg_names
|
6
|
+
attr_accessor :args, :opts
|
7
|
+
|
8
|
+
def initialize(tag_object, arg_names = nil, parser: nil, **options)
|
9
|
+
@tag_object = tag_object
|
10
|
+
@arg_names = arg_names
|
11
|
+
@args = {}
|
12
|
+
@opts = {}
|
13
|
+
@options = options
|
14
|
+
@parser = parser
|
15
|
+
@data = Store.new
|
16
|
+
run_parser
|
17
|
+
end
|
18
|
+
|
19
|
+
def tag_name
|
20
|
+
@name ||= @tag_object.tag_name.to_sym
|
21
|
+
end
|
22
|
+
|
23
|
+
def tag_body
|
24
|
+
@tag_object.text
|
25
|
+
end
|
26
|
+
|
27
|
+
def get_opt(key, fallback = nil)
|
28
|
+
opts[key] || fallback
|
29
|
+
end
|
30
|
+
|
31
|
+
def opts_str
|
32
|
+
@opts_str ||= text_tokens.size > args_count ? text_tokens.slice(args_count, text_tokens.size).join(" ") : ""
|
33
|
+
end
|
34
|
+
|
35
|
+
protected
|
36
|
+
|
37
|
+
def parse_args
|
38
|
+
unless arg_names.nil?
|
39
|
+
values = text_tokens.slice(0, args_count)
|
40
|
+
@args = build_args(values)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def parse_opts
|
45
|
+
return @opts if @options[:parse_options] == false
|
46
|
+
parsed_opts = parse_yaml(opts_str)
|
47
|
+
@opts = parsed_opts.is_a?(Hash) ? parsed_opts.with_indifferent_access : {}
|
48
|
+
end
|
49
|
+
|
50
|
+
def run_parser
|
51
|
+
parse_args
|
52
|
+
parse_opts
|
53
|
+
@parser.call(self) if @parser.respond_to?(:call)
|
54
|
+
end
|
55
|
+
|
56
|
+
def arg_options
|
57
|
+
return [] if arg_names.nil?
|
58
|
+
@arg_options ||= arg_names.map do |arg|
|
59
|
+
unless arg.is_a? Hash
|
60
|
+
name = arg
|
61
|
+
arg = {
|
62
|
+
name: name.to_sym
|
63
|
+
}
|
64
|
+
end
|
65
|
+
arg[:parse] = false unless arg.key? :parse
|
66
|
+
arg
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def validate_arg_names
|
71
|
+
if arg_names.present?
|
72
|
+
arg_names.each do |name|
|
73
|
+
if methods.include? name.to_sym
|
74
|
+
raise ArgumentError, "'#{name}' is a reserved word and cannot be used as an argument name."
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def args_count
|
81
|
+
arg_options.size
|
82
|
+
end
|
83
|
+
|
84
|
+
def parse_yaml(str, fallback = "~")
|
85
|
+
YAML.safe_load(str || fallback)
|
86
|
+
end
|
87
|
+
|
88
|
+
def text_tokens
|
89
|
+
@tokens ||= Shellwords.split(@tag_object.text)
|
90
|
+
end
|
91
|
+
|
92
|
+
def build_args(values)
|
93
|
+
arg_options.map.with_index do |arg, i|
|
94
|
+
value = values[i]
|
95
|
+
value = parse_arg(value) if arg[:parse] == true && value.present?
|
96
|
+
[arg[:name].to_sym, value]
|
97
|
+
end.to_h
|
98
|
+
end
|
99
|
+
|
100
|
+
def method_missing(name, *method_args)
|
101
|
+
if name.end_with? "="
|
102
|
+
data[name.to_s.chomp("=").to_sym] = method_args.first
|
103
|
+
else
|
104
|
+
data[name] || args[name]
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def respond_to_missing?(name, *)
|
109
|
+
data.key?(name) || args.key?(name)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Lookbook
|
2
|
+
module Tags
|
3
|
+
def define_tag(name, args = nil, opts = {}, &block)
|
4
|
+
name = name.to_s.downcase.underscore.to_sym
|
5
|
+
if args.is_a? Hash
|
6
|
+
opts = args
|
7
|
+
args = nil
|
8
|
+
end
|
9
|
+
opts[:args] = args
|
10
|
+
opts[:parser] = block if block
|
11
|
+
Lookbook.config.preview_tags[name] = opts
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.process_tags(tag_objects)
|
15
|
+
return [] if tag_objects.none?
|
16
|
+
tag_objects.map do |tag_object|
|
17
|
+
opts = Lookbook.config.preview_tags[tag_object.tag_name] || {}
|
18
|
+
Lookbook::Tag.new(tag_object, opts[:args], opts.except(:args))
|
19
|
+
end.compact
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/lookbook/theme.rb
CHANGED
@@ -1,19 +1,48 @@
|
|
1
1
|
module Lookbook
|
2
2
|
class Theme
|
3
|
+
BASE_THEMES = {
|
4
|
+
indigo: {
|
5
|
+
favicon_light_mode: "#4F46E5",
|
6
|
+
favicon_dark_mode: "#818CF8"
|
7
|
+
},
|
8
|
+
zinc: {
|
9
|
+
favicon_light_mode: "#52525b",
|
10
|
+
favicon_dark_mode: "#E4E4E7"
|
11
|
+
},
|
12
|
+
blue: {
|
13
|
+
favicon_light_mode: "#2563EB",
|
14
|
+
favicon_dark_mode: "#60A5FA"
|
15
|
+
}
|
16
|
+
}
|
3
17
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
@config = config
|
18
|
+
def initialize(base_theme, overrides = {})
|
19
|
+
@base_theme = base_theme
|
20
|
+
@overrides = overrides
|
8
21
|
@css = nil
|
9
22
|
end
|
10
23
|
|
24
|
+
def favicon_light_mode
|
25
|
+
(
|
26
|
+
@overrides[:favicon_light_mode].presence ||
|
27
|
+
@overrides[:favicon].presence ||
|
28
|
+
BASE_THEMES[@base_theme.to_sym][:favicon_light_mode]
|
29
|
+
)
|
30
|
+
end
|
31
|
+
|
32
|
+
def favicon_dark_mode
|
33
|
+
(
|
34
|
+
@overrides[:favicon_dark_mode].presence ||
|
35
|
+
@overrides[:favicon].presence ||
|
36
|
+
BASE_THEMES[@base_theme.to_sym][:favicon_dark_mode]
|
37
|
+
)
|
38
|
+
end
|
39
|
+
|
11
40
|
def to_css
|
12
41
|
return @css unless @css.nil?
|
13
|
-
@css ||= if @
|
42
|
+
@css ||= if @overrides.present?
|
14
43
|
styles = [":root {"]
|
15
|
-
styles << @
|
16
|
-
" --lookbook-#{key.to_s.underscore.
|
44
|
+
styles << @overrides.select { |key| !key.start_with?("favicon") }.map do |key, value|
|
45
|
+
" --lookbook-#{key.to_s.underscore.tr("_", "-")}: #{value};"
|
17
46
|
end
|
18
47
|
styles.push "}"
|
19
48
|
styles.join("\n")
|
@@ -23,7 +52,7 @@ module Lookbook
|
|
23
52
|
end
|
24
53
|
|
25
54
|
def self.valid_theme?(name)
|
26
|
-
BASE_THEMES.
|
55
|
+
BASE_THEMES.key? name.to_sym
|
27
56
|
end
|
28
57
|
end
|
29
|
-
end
|
58
|
+
end
|
data/lib/lookbook/version.rb
CHANGED
data/lib/lookbook.rb
CHANGED
@@ -11,6 +11,7 @@ module Lookbook
|
|
11
11
|
autoload :Lang, "lookbook/lang"
|
12
12
|
autoload :Params, "lookbook/params"
|
13
13
|
autoload :Page, "lookbook/page"
|
14
|
+
autoload :Tag, "lookbook/tag"
|
14
15
|
autoload :PageSection, "lookbook/page_section"
|
15
16
|
autoload :PageCollection, "lookbook/page_collection"
|
16
17
|
autoload :Features, "lookbook/features"
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require_relative "../lookbook"
|
2
2
|
|
3
3
|
namespace :lookbook do
|
4
|
-
|
5
4
|
desc "Run the rspec tests"
|
6
5
|
task :test do
|
7
6
|
sh "bundle exec rspec"
|
@@ -16,7 +15,7 @@ namespace :lookbook do
|
|
16
15
|
|
17
16
|
namespace :previews do
|
18
17
|
desc "Preparse the previews"
|
19
|
-
task :
|
18
|
+
task preparse: :environment do
|
20
19
|
Lookbook::Engine.parser.parse
|
21
20
|
puts "Lookbook preview parsing complete"
|
22
21
|
end
|