lookbook 1.0.0.beta.4 → 1.0.0.beta.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +27 -254
- data/app/assets/lookbook/css/lookbook.css +1 -1
- data/app/assets/lookbook/css/themes/blue.css +57 -36
- data/app/assets/lookbook/css/themes/indigo.css +57 -36
- data/app/assets/lookbook/css/themes/zinc.css +57 -36
- data/app/assets/lookbook/css/tooltip.css +5 -5
- data/app/components/lookbook/base_component.rb +6 -4
- data/app/components/lookbook/button/component.html.erb +2 -2
- data/app/components/lookbook/copy_button/component.html.erb +3 -3
- data/app/components/lookbook/embed/component.html.erb +33 -33
- 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 +3 -3
- data/app/components/lookbook/inspector_panel/component.html.erb +4 -0
- data/app/components/lookbook/inspector_panel/component.rb +36 -0
- data/app/components/lookbook/nav/component.html.erb +4 -8
- data/app/components/lookbook/nav/component.rb +5 -7
- data/app/components/lookbook/nav/item/component.html.erb +12 -6
- data/app/components/lookbook/nav/item/component.rb +9 -2
- data/app/components/lookbook/page_tabs/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/split_layout/component.html.erb +1 -1
- data/app/components/lookbook/tab_panels/panel/component.html.erb +2 -2
- data/app/components/lookbook/tabs/component.html.erb +2 -2
- data/app/components/lookbook/tabs/dropdown_tab/component.html.erb +2 -2
- data/app/components/lookbook/tabs/tab/component.html.erb +2 -2
- data/app/components/lookbook/tag_component.rb +5 -10
- 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 +2 -2
- data/app/controllers/lookbook/pages_controller.rb +1 -0
- data/app/controllers/lookbook/previews_controller.rb +15 -3
- 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 +76 -60
- data/app/views/layouts/lookbook/page.html.erb +36 -36
- data/app/views/layouts/lookbook/shell.html.erb +6 -0
- data/app/views/layouts/lookbook/skeleton.html.erb +15 -14
- data/app/views/lookbook/index.html.erb +24 -11
- data/app/views/lookbook/pages/show.html.erb +1 -1
- 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 +12 -10
- data/lib/lookbook/config.rb +63 -36
- data/lib/lookbook/data.rb +11 -0
- data/lib/lookbook/engine.rb +68 -60
- data/lib/lookbook/hooks.rb +21 -0
- data/lib/lookbook/markdown.rb +3 -1
- data/lib/lookbook/page.rb +4 -0
- 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 +36 -6
- 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 +8 -0
- data/lib/lookbook/tag.rb +108 -0
- data/lib/lookbook/tags.rb +22 -0
- data/lib/lookbook/theme.rb +36 -7
- data/lib/lookbook/version.rb +1 -1
- data/lib/lookbook.rb +1 -0
- data/lib/tasks/lookbook_tasks.rake +1 -1
- data/public/lookbook-assets/css/lookbook.css +314 -162
- 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 +1162 -1319
- data/public/lookbook-assets/js/lookbook.js.map +1 -1
- metadata +11 -4
data/lib/lookbook/tag.rb
ADDED
@@ -0,0 +1,108 @@
|
|
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
|
+
end
|
108
|
+
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_given?
|
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,18 +1,47 @@
|
|
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 << @
|
44
|
+
styles << @overrides.select { |key| !key.start_with?("favicon") }.map do |key, value|
|
16
45
|
" --lookbook-#{key.to_s.underscore.gsub("_","-")}: #{value};"
|
17
46
|
end
|
18
47
|
styles.push "}"
|
@@ -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
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"
|