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.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +27 -254
  3. data/app/assets/lookbook/css/lookbook.css +1 -1
  4. data/app/assets/lookbook/css/themes/blue.css +57 -36
  5. data/app/assets/lookbook/css/themes/indigo.css +57 -36
  6. data/app/assets/lookbook/css/themes/zinc.css +57 -36
  7. data/app/assets/lookbook/css/tooltip.css +5 -5
  8. data/app/components/lookbook/base_component.rb +6 -4
  9. data/app/components/lookbook/button/component.html.erb +2 -2
  10. data/app/components/lookbook/copy_button/component.html.erb +3 -3
  11. data/app/components/lookbook/embed/component.html.erb +33 -33
  12. data/app/components/lookbook/embed/component.rb +8 -0
  13. data/app/components/lookbook/filter/component.html.erb +1 -1
  14. data/app/components/lookbook/header/component.html.erb +3 -3
  15. data/app/components/lookbook/inspector_panel/component.html.erb +4 -0
  16. data/app/components/lookbook/inspector_panel/component.rb +36 -0
  17. data/app/components/lookbook/nav/component.html.erb +4 -8
  18. data/app/components/lookbook/nav/component.rb +5 -7
  19. data/app/components/lookbook/nav/item/component.html.erb +12 -6
  20. data/app/components/lookbook/nav/item/component.rb +9 -2
  21. data/app/components/lookbook/page_tabs/component.html.erb +1 -1
  22. data/app/components/lookbook/params_editor/field/component.rb +2 -1
  23. data/app/components/lookbook/prose/component.html.erb +1 -1
  24. data/app/components/lookbook/split_layout/component.html.erb +1 -1
  25. data/app/components/lookbook/tab_panels/panel/component.html.erb +2 -2
  26. data/app/components/lookbook/tabs/component.html.erb +2 -2
  27. data/app/components/lookbook/tabs/dropdown_tab/component.html.erb +2 -2
  28. data/app/components/lookbook/tabs/tab/component.html.erb +2 -2
  29. data/app/components/lookbook/tag_component.rb +5 -10
  30. data/app/components/lookbook/toolbar/component.html.erb +1 -1
  31. data/app/components/lookbook/viewport/component.css +1 -1
  32. data/app/components/lookbook/viewport/component.html.erb +1 -1
  33. data/app/controllers/lookbook/application_controller.rb +2 -2
  34. data/app/controllers/lookbook/pages_controller.rb +1 -0
  35. data/app/controllers/lookbook/previews_controller.rb +15 -3
  36. data/app/helpers/lookbook/application_helper.rb +9 -6
  37. data/app/helpers/lookbook/preview_helper.rb +2 -3
  38. data/app/views/layouts/lookbook/application.html.erb +76 -60
  39. data/app/views/layouts/lookbook/page.html.erb +36 -36
  40. data/app/views/layouts/lookbook/shell.html.erb +6 -0
  41. data/app/views/layouts/lookbook/skeleton.html.erb +15 -14
  42. data/app/views/lookbook/index.html.erb +24 -11
  43. data/app/views/lookbook/pages/show.html.erb +1 -1
  44. data/app/views/lookbook/previews/panels/_content.html.erb +1 -1
  45. data/app/views/lookbook/previews/panels/_notes.html.erb +2 -2
  46. data/app/views/lookbook/previews/panels/_params.html.erb +1 -1
  47. data/app/views/lookbook/previews/show.html.erb +12 -10
  48. data/lib/lookbook/config.rb +63 -36
  49. data/lib/lookbook/data.rb +11 -0
  50. data/lib/lookbook/engine.rb +68 -60
  51. data/lib/lookbook/hooks.rb +21 -0
  52. data/lib/lookbook/markdown.rb +3 -1
  53. data/lib/lookbook/page.rb +4 -0
  54. data/lib/lookbook/panels.rb +15 -0
  55. data/lib/lookbook/params.rb +12 -0
  56. data/lib/lookbook/parser.rb +4 -1
  57. data/lib/lookbook/preview.rb +36 -6
  58. data/lib/lookbook/preview_example.rb +1 -1
  59. data/lib/lookbook/preview_group.rb +8 -0
  60. data/lib/lookbook/source_inspector.rb +9 -0
  61. data/lib/lookbook/store.rb +8 -0
  62. data/lib/lookbook/tag.rb +108 -0
  63. data/lib/lookbook/tags.rb +22 -0
  64. data/lib/lookbook/theme.rb +36 -7
  65. data/lib/lookbook/version.rb +1 -1
  66. data/lib/lookbook.rb +1 -0
  67. data/lib/tasks/lookbook_tasks.rake +1 -1
  68. data/public/lookbook-assets/css/lookbook.css +314 -162
  69. data/public/lookbook-assets/css/lookbook.css.map +1 -1
  70. data/public/lookbook-assets/css/themes/blue.css +57 -36
  71. data/public/lookbook-assets/css/themes/blue.css.map +1 -1
  72. data/public/lookbook-assets/css/themes/indigo.css +57 -36
  73. data/public/lookbook-assets/css/themes/indigo.css.map +1 -1
  74. data/public/lookbook-assets/css/themes/zinc.css +57 -36
  75. data/public/lookbook-assets/css/themes/zinc.css.map +1 -1
  76. data/public/lookbook-assets/js/embed.js +193 -193
  77. data/public/lookbook-assets/js/lookbook.js +1162 -1319
  78. data/public/lookbook-assets/js/lookbook.js.map +1 -1
  79. metadata +11 -4
@@ -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
@@ -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
- BASE_THEMES = [:indigo, :zinc, :blue]
5
-
6
- def initialize(config = {})
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 @config.present?
42
+ @css ||= if @overrides.present?
14
43
  styles = [":root {"]
15
- styles << @config.map do |key, value|
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.include? name.to_sym
55
+ BASE_THEMES.key? name.to_sym
27
56
  end
28
57
  end
29
58
  end
@@ -1,3 +1,3 @@
1
1
  module Lookbook
2
- VERSION = "1.0.0.beta.4"
2
+ VERSION = "1.0.0.beta.7"
3
3
  end
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"
@@ -16,7 +16,7 @@ namespace :lookbook do
16
16
 
17
17
  namespace :previews do
18
18
  desc "Preparse the previews"
19
- task :preparse do
19
+ task :preparse => :environment do
20
20
  Lookbook::Engine.parser.parse
21
21
  puts "Lookbook preview parsing complete"
22
22
  end