lookbook 0.4.1 → 0.4.5
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 +220 -53
- data/app/assets/lookbook/css/app.css +14 -8
- data/app/assets/lookbook/js/app.js +2 -0
- data/app/assets/lookbook/js/nav.js +5 -6
- data/app/assets/lookbook/js/page.js +5 -0
- data/app/assets/lookbook/js/utils/morph.js +3 -0
- data/app/assets/lookbook/js/workbench/param.js +19 -0
- data/app/controllers/lookbook/app_controller.rb +24 -7
- data/app/helpers/lookbook/application_helper.rb +6 -1
- data/app/helpers/lookbook/preview_helper.rb +7 -0
- data/app/views/lookbook/workbench/_inspector.html.erb +6 -1
- data/app/views/lookbook/workbench/inspector/_params.html.erb +28 -0
- data/app/views/lookbook/workbench/inspector/params/_select.html.erb +8 -0
- data/app/views/lookbook/workbench/inspector/params/_text.html.erb +8 -0
- data/app/views/lookbook/workbench/inspector/params/_textarea.html.erb +8 -0
- data/app/views/lookbook/workbench/inspector/params/_toggle.html.erb +13 -0
- data/lib/lookbook/engine.rb +6 -0
- data/lib/lookbook/features.rb +24 -0
- data/lib/lookbook/params.rb +110 -0
- data/lib/lookbook/parser.rb +1 -1
- data/lib/lookbook/preview.rb +1 -1
- data/lib/lookbook/preview_controller.rb +2 -3
- data/lib/lookbook/preview_example.rb +13 -1
- data/lib/lookbook/preview_group.rb +5 -1
- data/lib/lookbook/taggable.rb +2 -2
- data/lib/lookbook/version.rb +1 -1
- data/lib/lookbook.rb +2 -0
- data/public/lookbook-assets/app.css +129 -7
- data/public/lookbook-assets/app.js +46 -8
- metadata +12 -3
data/lib/lookbook/engine.rb
CHANGED
@@ -8,6 +8,10 @@ module Lookbook
|
|
8
8
|
def config
|
9
9
|
@config ||= Engine.config.lookbook
|
10
10
|
end
|
11
|
+
|
12
|
+
def logger
|
13
|
+
@logger ||= config.debug == true ? Rails.logger : Lookbook::NullLogger.new
|
14
|
+
end
|
11
15
|
end
|
12
16
|
|
13
17
|
class Engine < Rails::Engine
|
@@ -35,6 +39,8 @@ module Lookbook
|
|
35
39
|
options.listen_paths = options.listen_paths.map(&:to_s)
|
36
40
|
options.listen_paths += options.preview_paths
|
37
41
|
options.listen_paths << (vc_options.view_component_path || Rails.root.join("app/components"))
|
42
|
+
|
43
|
+
options.experimental_features = false unless options.experimental_features.present?
|
38
44
|
end
|
39
45
|
|
40
46
|
initializer "lookbook.cable.config" do |app|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Lookbook
|
2
|
+
module Features
|
3
|
+
EXPERIMENTAL_FEATURES = [:params]
|
4
|
+
|
5
|
+
def self.experimental_feature?(name)
|
6
|
+
EXPERIMENTAL_FEATURES.include?(name.to_sym)
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.enabled?(name)
|
10
|
+
return true unless experimental_feature?(name)
|
11
|
+
enabled.include?(name.to_sym)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.enabled
|
15
|
+
if Lookbook.config.experimental_features == true
|
16
|
+
EXPERIMENTAL_FEATURES
|
17
|
+
elsif Lookbook.config.experimental_features.blank?
|
18
|
+
[]
|
19
|
+
else
|
20
|
+
Lookbook.config.experimental_features.map(&:to_sym)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
module Lookbook
|
2
|
+
module Params
|
3
|
+
class << self
|
4
|
+
def build_param(param, default)
|
5
|
+
input, options_str = param.text.present? ? param.text.split(" ", 2) : [nil, ""]
|
6
|
+
type = param.types&.first
|
7
|
+
options = YAML.safe_load(options_str || "~")
|
8
|
+
input ||= guess_input(type, default)
|
9
|
+
type ||= guess_type(input, default)
|
10
|
+
{
|
11
|
+
name: param.name,
|
12
|
+
input: input_text?(input) ? "text" : input,
|
13
|
+
input_type: (input if input_text?(input)),
|
14
|
+
options: options,
|
15
|
+
type: type,
|
16
|
+
default: default
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
def parse_method_param_str(param_str)
|
21
|
+
return nil if param_str[0].nil? || param_str[1].nil?
|
22
|
+
name = param_str[0].chomp(":")
|
23
|
+
value = param_str[1]&.strip
|
24
|
+
value = case value
|
25
|
+
when "nil"
|
26
|
+
nil
|
27
|
+
else
|
28
|
+
if value&.first == ":"
|
29
|
+
value.delete_prefix(":").to_sym
|
30
|
+
else
|
31
|
+
YAML.safe_load(value)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
[name, value]
|
35
|
+
end
|
36
|
+
|
37
|
+
def cast(value, type = "String")
|
38
|
+
case type.downcase
|
39
|
+
when "symbol"
|
40
|
+
value.delete_prefix(":").to_sym
|
41
|
+
when "hash"
|
42
|
+
result = safe_parse_yaml(value, {})
|
43
|
+
unless result.is_a? Hash
|
44
|
+
Lookbook.logger.debug "Failed to parse '#{value}' into a Hash"
|
45
|
+
result = {}
|
46
|
+
end
|
47
|
+
result
|
48
|
+
when "array"
|
49
|
+
result = safe_parse_yaml(value, [])
|
50
|
+
unless result.is_a? Array
|
51
|
+
Lookbook.logger.debug "Failed to parse '#{value}' into an Array"
|
52
|
+
result = []
|
53
|
+
end
|
54
|
+
result
|
55
|
+
else
|
56
|
+
begin
|
57
|
+
type_class = "ActiveModel::Type::#{type}".constantize
|
58
|
+
type_class.new.cast(value)
|
59
|
+
rescue NameError
|
60
|
+
raise ArgumentError, "'#{type}' is not a valid param type to cast to."
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def guess_input(type, default)
|
68
|
+
if type&.downcase == "boolean" || (type.blank? && boolean?(default))
|
69
|
+
"toggle"
|
70
|
+
else
|
71
|
+
"text"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def guess_type(input, default)
|
76
|
+
if input&.downcase == "toggle"
|
77
|
+
"Boolean"
|
78
|
+
elsif input&.downcase == "number"
|
79
|
+
"Integer"
|
80
|
+
elsif boolean?(default)
|
81
|
+
"Boolean"
|
82
|
+
elsif default.is_a? Symbol
|
83
|
+
"Symbol"
|
84
|
+
else
|
85
|
+
"String"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def input_text?(input)
|
90
|
+
[
|
91
|
+
"email",
|
92
|
+
"number",
|
93
|
+
"tel",
|
94
|
+
"text",
|
95
|
+
"url"
|
96
|
+
].include? input
|
97
|
+
end
|
98
|
+
|
99
|
+
def safe_parse_yaml(value, fallback)
|
100
|
+
value.present? ? YAML.safe_load(value) : fallback
|
101
|
+
rescue Psych::SyntaxError
|
102
|
+
fallback
|
103
|
+
end
|
104
|
+
|
105
|
+
def boolean?(value)
|
106
|
+
value == true || value == false
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
data/lib/lookbook/parser.rb
CHANGED
@@ -5,7 +5,7 @@ module Lookbook
|
|
5
5
|
YARDOC_FILE_PATH = Rails.root.join("tmp/storage/.yardoc").to_s
|
6
6
|
|
7
7
|
def initialize(paths)
|
8
|
-
@paths = paths.map { |p| "#{p}/**/*
|
8
|
+
@paths = paths.map { |p| "#{p}/**/*preview.rb" }
|
9
9
|
YARD::Registry.yardoc_file = YARDOC_FILE_PATH
|
10
10
|
end
|
11
11
|
|
data/lib/lookbook/preview.rb
CHANGED
@@ -14,10 +14,9 @@ module Lookbook
|
|
14
14
|
render_to_string template, opts
|
15
15
|
end
|
16
16
|
|
17
|
-
def render_in_layout_to_string(template, locals,
|
17
|
+
def render_in_layout_to_string(template, locals, layout = nil)
|
18
18
|
append_view_path Lookbook::Engine.root.join("app/views")
|
19
|
-
|
20
|
-
render_to_string template, locals: locals, layout: layout
|
19
|
+
render_to_string template, locals: locals, **determine_layout(@preview.lookbook_layout)
|
21
20
|
end
|
22
21
|
end
|
23
22
|
end
|
@@ -10,7 +10,7 @@ module Lookbook
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def id
|
13
|
-
path.underscore.tr("_", "-")
|
13
|
+
path.underscore.tr("/", "-").tr("_", "-")
|
14
14
|
end
|
15
15
|
|
16
16
|
def path
|
@@ -25,6 +25,12 @@ module Lookbook
|
|
25
25
|
@preview.display_params.merge(lookbook_display_params)
|
26
26
|
end
|
27
27
|
|
28
|
+
def params
|
29
|
+
@params || code_object&.tags("param")&.map do |param|
|
30
|
+
Lookbook::Params.build_param(param, parameter_defaults[param.name])
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
28
34
|
def method_source
|
29
35
|
code_object.source.split("\n")[1..-2].join("\n").strip_heredoc
|
30
36
|
end
|
@@ -55,6 +61,12 @@ module Lookbook
|
|
55
61
|
|
56
62
|
private
|
57
63
|
|
64
|
+
def parameter_defaults
|
65
|
+
@parameter_defaults || code_object&.parameters&.map do |param_str|
|
66
|
+
Lookbook::Params.parse_method_param_str(param_str)
|
67
|
+
end&.compact&.to_h
|
68
|
+
end
|
69
|
+
|
58
70
|
def taggable_object_path
|
59
71
|
"#{@preview.name}##{name}"
|
60
72
|
end
|
@@ -11,7 +11,7 @@ module Lookbook
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def id
|
14
|
-
path.underscore.tr("_", "-")
|
14
|
+
path.underscore.tr("/", "-").tr("_", "-")
|
15
15
|
end
|
16
16
|
|
17
17
|
def path
|
@@ -26,6 +26,10 @@ module Lookbook
|
|
26
26
|
:group
|
27
27
|
end
|
28
28
|
|
29
|
+
def params
|
30
|
+
[]
|
31
|
+
end
|
32
|
+
|
29
33
|
def hidden?
|
30
34
|
false
|
31
35
|
end
|
data/lib/lookbook/taggable.rb
CHANGED
@@ -27,8 +27,8 @@ module Lookbook
|
|
27
27
|
parts = tag.text.strip.match(/^([^\s]*)\s?(.*)$/)
|
28
28
|
if parts.present?
|
29
29
|
begin
|
30
|
-
display_params[parts[1]] =
|
31
|
-
rescue
|
30
|
+
display_params[parts[1]] = YAML.safe_load(parts[2] || "~")
|
31
|
+
rescue SyntaxError => err
|
32
32
|
Rails.logger.error("\n👀 [Lookbook] Invalid JSON in @display tag.\n👀 [Lookbook] (#{err})\n")
|
33
33
|
end
|
34
34
|
end
|
data/lib/lookbook/version.rb
CHANGED
data/lib/lookbook.rb
CHANGED
@@ -5,6 +5,8 @@ module Lookbook
|
|
5
5
|
extend ActiveSupport::Autoload
|
6
6
|
|
7
7
|
autoload :Lang, "lookbook/lang"
|
8
|
+
autoload :Params, "lookbook/params"
|
9
|
+
autoload :Features, "lookbook/features"
|
8
10
|
autoload :Collection, "lookbook/collection"
|
9
11
|
autoload :Parser, "lookbook/parser"
|
10
12
|
autoload :Preview, "lookbook/preview"
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/*! tailwindcss v2.2.
|
1
|
+
/*! tailwindcss v2.2.19 | MIT License | https://tailwindcss.com */
|
2
2
|
|
3
3
|
/*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */
|
4
4
|
|
@@ -606,6 +606,9 @@ video {
|
|
606
606
|
--tw-transform: translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
|
607
607
|
--tw-border-opacity: 1;
|
608
608
|
border-color: rgba(229, 231, 235, var(--tw-border-opacity));
|
609
|
+
--tw-ring-offset-shadow: 0 0 #0000;
|
610
|
+
--tw-ring-shadow: 0 0 #0000;
|
611
|
+
--tw-shadow: 0 0 #0000;
|
609
612
|
--tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);
|
610
613
|
--tw-ring-offset-width: 0px;
|
611
614
|
--tw-ring-offset-color: #fff;
|
@@ -820,12 +823,6 @@ pre[class*="language-"] {
|
|
820
823
|
fill: none;
|
821
824
|
}
|
822
825
|
|
823
|
-
.min-h-fill {
|
824
|
-
min-height: -webkit-fill-available;
|
825
|
-
min-height: -moz-available;
|
826
|
-
min-height: fill-available;
|
827
|
-
}
|
828
|
-
|
829
826
|
::-webkit-scrollbar {
|
830
827
|
width: 8px;
|
831
828
|
height: 8px;
|
@@ -1563,6 +1560,10 @@ pre[class*="language-"] {
|
|
1563
1560
|
display: flex;
|
1564
1561
|
}
|
1565
1562
|
|
1563
|
+
.inline-flex {
|
1564
|
+
display: inline-flex;
|
1565
|
+
}
|
1566
|
+
|
1566
1567
|
.hidden {
|
1567
1568
|
display: none;
|
1568
1569
|
}
|
@@ -1599,6 +1600,10 @@ pre[class*="language-"] {
|
|
1599
1600
|
height: 11px;
|
1600
1601
|
}
|
1601
1602
|
|
1603
|
+
.h-6 {
|
1604
|
+
height: 1.5rem;
|
1605
|
+
}
|
1606
|
+
|
1602
1607
|
.w-full {
|
1603
1608
|
width: 100%;
|
1604
1609
|
}
|
@@ -1631,10 +1636,22 @@ pre[class*="language-"] {
|
|
1631
1636
|
width: 1.25rem;
|
1632
1637
|
}
|
1633
1638
|
|
1639
|
+
.w-\[200px\] {
|
1640
|
+
width: 200px;
|
1641
|
+
}
|
1642
|
+
|
1643
|
+
.w-11 {
|
1644
|
+
width: 2.75rem;
|
1645
|
+
}
|
1646
|
+
|
1634
1647
|
.max-w-xs {
|
1635
1648
|
max-width: 20rem;
|
1636
1649
|
}
|
1637
1650
|
|
1651
|
+
.max-w-\[800px\] {
|
1652
|
+
max-width: 800px;
|
1653
|
+
}
|
1654
|
+
|
1638
1655
|
.flex-none {
|
1639
1656
|
flex: none;
|
1640
1657
|
}
|
@@ -1643,6 +1660,10 @@ pre[class*="language-"] {
|
|
1643
1660
|
flex: 1 1 auto;
|
1644
1661
|
}
|
1645
1662
|
|
1663
|
+
.flex-shrink-0 {
|
1664
|
+
flex-shrink: 0;
|
1665
|
+
}
|
1666
|
+
|
1646
1667
|
.flex-grow {
|
1647
1668
|
flex-grow: 1;
|
1648
1669
|
}
|
@@ -1657,6 +1678,16 @@ pre[class*="language-"] {
|
|
1657
1678
|
transform: var(--tw-transform);
|
1658
1679
|
}
|
1659
1680
|
|
1681
|
+
.translate-x-5 {
|
1682
|
+
--tw-translate-x: 1.25rem;
|
1683
|
+
transform: var(--tw-transform);
|
1684
|
+
}
|
1685
|
+
|
1686
|
+
.translate-x-0 {
|
1687
|
+
--tw-translate-x: 0px;
|
1688
|
+
transform: var(--tw-transform);
|
1689
|
+
}
|
1690
|
+
|
1660
1691
|
.transform {
|
1661
1692
|
transform: var(--tw-transform);
|
1662
1693
|
}
|
@@ -1692,6 +1723,10 @@ pre[class*="language-"] {
|
|
1692
1723
|
flex-direction: column;
|
1693
1724
|
}
|
1694
1725
|
|
1726
|
+
.items-start {
|
1727
|
+
align-items: flex-start;
|
1728
|
+
}
|
1729
|
+
|
1695
1730
|
.items-center {
|
1696
1731
|
align-items: center;
|
1697
1732
|
}
|
@@ -1751,6 +1786,10 @@ pre[class*="language-"] {
|
|
1751
1786
|
white-space: nowrap;
|
1752
1787
|
}
|
1753
1788
|
|
1789
|
+
.rounded-full {
|
1790
|
+
border-radius: 9999px;
|
1791
|
+
}
|
1792
|
+
|
1754
1793
|
.rounded-b {
|
1755
1794
|
border-bottom-right-radius: 0.25rem;
|
1756
1795
|
border-bottom-left-radius: 0.25rem;
|
@@ -1768,6 +1807,10 @@ pre[class*="language-"] {
|
|
1768
1807
|
border-width: 1px;
|
1769
1808
|
}
|
1770
1809
|
|
1810
|
+
.border-2 {
|
1811
|
+
border-width: 2px;
|
1812
|
+
}
|
1813
|
+
|
1771
1814
|
.border-r {
|
1772
1815
|
border-right-width: 1px;
|
1773
1816
|
}
|
@@ -1835,6 +1878,16 @@ pre[class*="language-"] {
|
|
1835
1878
|
background-color: rgba(249, 250, 251, var(--tw-bg-opacity));
|
1836
1879
|
}
|
1837
1880
|
|
1881
|
+
.bg-indigo-500 {
|
1882
|
+
--tw-bg-opacity: 1;
|
1883
|
+
background-color: rgba(99, 102, 241, var(--tw-bg-opacity));
|
1884
|
+
}
|
1885
|
+
|
1886
|
+
.bg-gray-300 {
|
1887
|
+
--tw-bg-opacity: 1;
|
1888
|
+
background-color: rgba(209, 213, 219, var(--tw-bg-opacity));
|
1889
|
+
}
|
1890
|
+
|
1838
1891
|
.p-4 {
|
1839
1892
|
padding: 1rem;
|
1840
1893
|
}
|
@@ -1882,6 +1935,11 @@ pre[class*="language-"] {
|
|
1882
1935
|
padding-bottom: 0px;
|
1883
1936
|
}
|
1884
1937
|
|
1938
|
+
.py-3 {
|
1939
|
+
padding-top: 0.75rem;
|
1940
|
+
padding-bottom: 0.75rem;
|
1941
|
+
}
|
1942
|
+
|
1885
1943
|
.pr-3 {
|
1886
1944
|
padding-right: 0.75rem;
|
1887
1945
|
}
|
@@ -2000,11 +2058,22 @@ pre[class*="language-"] {
|
|
2000
2058
|
opacity: 0.5;
|
2001
2059
|
}
|
2002
2060
|
|
2061
|
+
.shadow {
|
2062
|
+
--tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
|
2063
|
+
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
2064
|
+
}
|
2065
|
+
|
2003
2066
|
.outline-none {
|
2004
2067
|
outline: 2px solid transparent;
|
2005
2068
|
outline-offset: 2px;
|
2006
2069
|
}
|
2007
2070
|
|
2071
|
+
.ring-0 {
|
2072
|
+
--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
|
2073
|
+
--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
|
2074
|
+
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
|
2075
|
+
}
|
2076
|
+
|
2008
2077
|
.blur {
|
2009
2078
|
--tw-blur: blur(8px);
|
2010
2079
|
filter: var(--tw-filter);
|
@@ -2022,6 +2091,44 @@ pre[class*="language-"] {
|
|
2022
2091
|
transition-duration: 150ms;
|
2023
2092
|
}
|
2024
2093
|
|
2094
|
+
.transition-colors {
|
2095
|
+
transition-property: background-color, border-color, color, fill, stroke;
|
2096
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
2097
|
+
transition-duration: 150ms;
|
2098
|
+
}
|
2099
|
+
|
2100
|
+
.duration-200 {
|
2101
|
+
transition-duration: 200ms;
|
2102
|
+
}
|
2103
|
+
|
2104
|
+
.ease-in-out {
|
2105
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
2106
|
+
}
|
2107
|
+
|
2108
|
+
.min-h-fill {
|
2109
|
+
min-height: -webkit-fill-available;
|
2110
|
+
min-height: -moz-available;
|
2111
|
+
min-height: fill-available;
|
2112
|
+
}
|
2113
|
+
|
2114
|
+
.form-input {
|
2115
|
+
width: 100%;
|
2116
|
+
border-radius: 0.125rem;
|
2117
|
+
--tw-border-opacity: 1;
|
2118
|
+
border-color: rgba(209, 213, 219, var(--tw-border-opacity));
|
2119
|
+
font-size: 0.875rem;
|
2120
|
+
line-height: 1.25rem;
|
2121
|
+
--tw-text-opacity: 1;
|
2122
|
+
color: rgba(55, 65, 81, var(--tw-text-opacity));
|
2123
|
+
}
|
2124
|
+
|
2125
|
+
.form-input:focus {
|
2126
|
+
--tw-border-opacity: 1;
|
2127
|
+
border-color: rgba(165, 180, 252, var(--tw-border-opacity));
|
2128
|
+
--tw-ring-opacity: 1;
|
2129
|
+
--tw-ring-color: rgba(165, 180, 252, var(--tw-ring-opacity));
|
2130
|
+
}
|
2131
|
+
|
2025
2132
|
.tippy-box[data-animation=fade][data-state=hidden]{
|
2026
2133
|
opacity:0
|
2027
2134
|
}
|
@@ -2463,6 +2570,21 @@ pre[class*="language-"] {
|
|
2463
2570
|
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
|
2464
2571
|
}
|
2465
2572
|
|
2573
|
+
.focus\:ring-2:focus {
|
2574
|
+
--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
|
2575
|
+
--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
|
2576
|
+
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
|
2577
|
+
}
|
2578
|
+
|
2579
|
+
.focus\:ring-indigo-400:focus {
|
2580
|
+
--tw-ring-opacity: 1;
|
2581
|
+
--tw-ring-color: rgba(129, 140, 248, var(--tw-ring-opacity));
|
2582
|
+
}
|
2583
|
+
|
2584
|
+
.focus\:ring-offset-2:focus {
|
2585
|
+
--tw-ring-offset-width: 2px;
|
2586
|
+
}
|
2587
|
+
|
2466
2588
|
.group:hover .group-hover\:text-indigo-800 {
|
2467
2589
|
--tw-text-opacity: 1;
|
2468
2590
|
color: rgba(55, 48, 163, var(--tw-text-opacity));
|
@@ -7333,7 +7333,9 @@ Expression: "${expression}"
|
|
7333
7333
|
var module_default3 = src_default3;
|
7334
7334
|
|
7335
7335
|
// node_modules/@ryangjchandler/alpine-clipboard/src/index.js
|
7336
|
-
|
7336
|
+
var onCopy = () => {
|
7337
|
+
};
|
7338
|
+
function Clipboard(Alpine3) {
|
7337
7339
|
Alpine3.magic("clipboard", () => {
|
7338
7340
|
return function(target) {
|
7339
7341
|
if (typeof target === "function") {
|
@@ -7342,10 +7344,17 @@ Expression: "${expression}"
|
|
7342
7344
|
if (typeof target === "object") {
|
7343
7345
|
target = JSON.stringify(target);
|
7344
7346
|
}
|
7345
|
-
return window.navigator.clipboard.writeText(target);
|
7347
|
+
return window.navigator.clipboard.writeText(target).then(onCopy);
|
7346
7348
|
};
|
7347
7349
|
});
|
7348
7350
|
}
|
7351
|
+
Clipboard.configure = (config) => {
|
7352
|
+
if (config.hasOwnProperty("onCopy") && typeof config.onCopy === "function") {
|
7353
|
+
onCopy = config.onCopy;
|
7354
|
+
}
|
7355
|
+
return Clipboard;
|
7356
|
+
};
|
7357
|
+
var src_default4 = Clipboard;
|
7349
7358
|
|
7350
7359
|
// app/assets/lookbook/js/utils/screen.js
|
7351
7360
|
function screen_default(Alpine3) {
|
@@ -8359,6 +8368,9 @@ Expression: "${expression}"
|
|
8359
8368
|
if (fromEl.isEqualNode(toEl)) {
|
8360
8369
|
return false;
|
8361
8370
|
}
|
8371
|
+
if (fromEl.hasAttribute("skip-morph")) {
|
8372
|
+
return false;
|
8373
|
+
}
|
8362
8374
|
return true;
|
8363
8375
|
}
|
8364
8376
|
}, opts));
|
@@ -8395,7 +8407,12 @@ Expression: "${expression}"
|
|
8395
8407
|
render() {
|
8396
8408
|
if (this.ready) {
|
8397
8409
|
morph_default(this.$el, store2.doc.getElementById(this.$el.id));
|
8410
|
+
this.$dispatch("document:patched");
|
8398
8411
|
}
|
8412
|
+
},
|
8413
|
+
navigateTo(path2) {
|
8414
|
+
history.pushState({}, null, path2);
|
8415
|
+
this.$dispatch("popstate");
|
8399
8416
|
}
|
8400
8417
|
};
|
8401
8418
|
}
|
@@ -8469,6 +8486,27 @@ Expression: "${expression}"
|
|
8469
8486
|
};
|
8470
8487
|
}
|
8471
8488
|
|
8489
|
+
// app/assets/lookbook/js/workbench/param.js
|
8490
|
+
function param() {
|
8491
|
+
return {
|
8492
|
+
focused: false,
|
8493
|
+
setFocus() {
|
8494
|
+
if (this.focused && this.$el.focus) {
|
8495
|
+
this.$el.focus();
|
8496
|
+
}
|
8497
|
+
},
|
8498
|
+
update(name, value) {
|
8499
|
+
const searchParams = new URLSearchParams(window.location.search);
|
8500
|
+
searchParams.set(name, value);
|
8501
|
+
const path2 = location.href.replace(location.search, "");
|
8502
|
+
this.navigateTo(`${path2}?${searchParams.toString()}`);
|
8503
|
+
},
|
8504
|
+
validate() {
|
8505
|
+
return this.$el.reportValidity ? this.$el.reportValidity() : true;
|
8506
|
+
}
|
8507
|
+
};
|
8508
|
+
}
|
8509
|
+
|
8472
8510
|
// app/assets/lookbook/js/nav.js
|
8473
8511
|
function nav_default() {
|
8474
8512
|
return {
|
@@ -8492,13 +8530,12 @@ Expression: "${expression}"
|
|
8492
8530
|
});
|
8493
8531
|
},
|
8494
8532
|
navigate(path2) {
|
8495
|
-
|
8496
|
-
path2 = path2.currentTarget.href;
|
8497
|
-
}
|
8498
|
-
history.pushState({}, null, path2);
|
8499
|
-
this.$dispatch("popstate");
|
8533
|
+
this.navigateTo(path2 instanceof Event ? path2.currentTarget.href : path2);
|
8500
8534
|
},
|
8501
|
-
focusFilter() {
|
8535
|
+
focusFilter($event) {
|
8536
|
+
if ($event.target.tagName === "INPUT") {
|
8537
|
+
return;
|
8538
|
+
}
|
8502
8539
|
this.currentFocus = this.$refs.filter;
|
8503
8540
|
setTimeout(() => this.$refs.filter.focus(), 0);
|
8504
8541
|
},
|
@@ -8666,6 +8703,7 @@ Expression: "${expression}"
|
|
8666
8703
|
module_default.data("workbench", workbench);
|
8667
8704
|
module_default.data("preview", preview);
|
8668
8705
|
module_default.data("inspector", inspector);
|
8706
|
+
module_default.data("param", param);
|
8669
8707
|
module_default.data("clipboard", clipboard);
|
8670
8708
|
module_default.data("sizeObserver", sizeObserver);
|
8671
8709
|
module_default.data("split", split_default);
|
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.
|
4
|
+
version: 0.4.5
|
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-
|
11
|
+
date: 2021-11-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -202,11 +202,13 @@ files:
|
|
202
202
|
- app/assets/lookbook/js/utils/split.js
|
203
203
|
- app/assets/lookbook/js/workbench.js
|
204
204
|
- app/assets/lookbook/js/workbench/inspector.js
|
205
|
+
- app/assets/lookbook/js/workbench/param.js
|
205
206
|
- app/assets/lookbook/js/workbench/preview.js
|
206
207
|
- app/channels/lookbook/connection.rb
|
207
208
|
- app/channels/lookbook/reload_channel.rb
|
208
209
|
- app/controllers/lookbook/app_controller.rb
|
209
210
|
- app/helpers/lookbook/application_helper.rb
|
211
|
+
- app/helpers/lookbook/preview_helper.rb
|
210
212
|
- app/views/lookbook/app/error.html.erb
|
211
213
|
- app/views/lookbook/app/index.html.erb
|
212
214
|
- app/views/lookbook/app/not_found.html.erb
|
@@ -226,13 +228,20 @@ files:
|
|
226
228
|
- app/views/lookbook/workbench/_preview.html.erb
|
227
229
|
- app/views/lookbook/workbench/inspector/_code.html.erb
|
228
230
|
- app/views/lookbook/workbench/inspector/_notes.html.erb
|
231
|
+
- app/views/lookbook/workbench/inspector/_params.html.erb
|
229
232
|
- app/views/lookbook/workbench/inspector/_plain.html.erb
|
233
|
+
- app/views/lookbook/workbench/inspector/params/_select.html.erb
|
234
|
+
- app/views/lookbook/workbench/inspector/params/_text.html.erb
|
235
|
+
- app/views/lookbook/workbench/inspector/params/_textarea.html.erb
|
236
|
+
- app/views/lookbook/workbench/inspector/params/_toggle.html.erb
|
230
237
|
- config/routes.rb
|
231
238
|
- lib/lookbook.rb
|
232
239
|
- lib/lookbook/collection.rb
|
233
240
|
- lib/lookbook/engine.rb
|
241
|
+
- lib/lookbook/features.rb
|
234
242
|
- lib/lookbook/lang.rb
|
235
243
|
- lib/lookbook/null_logger.rb
|
244
|
+
- lib/lookbook/params.rb
|
236
245
|
- lib/lookbook/parser.rb
|
237
246
|
- lib/lookbook/preview.rb
|
238
247
|
- lib/lookbook/preview_controller.rb
|
@@ -263,7 +272,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
263
272
|
- !ruby/object:Gem::Version
|
264
273
|
version: '0'
|
265
274
|
requirements: []
|
266
|
-
rubygems_version: 3.
|
275
|
+
rubygems_version: 3.2.22
|
267
276
|
signing_key:
|
268
277
|
specification_version: 4
|
269
278
|
summary: A native development UI for ViewComponent
|