backpack 0.4.0 → 0.4.1

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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/demo/.yarnrc.yml +4 -0
  3. data/demo/Gemfile.lock +1 -2
  4. data/demo/app/views/layouts/backpack.html.erb +2 -4
  5. data/demo/config/initializers/phlex.rb +9 -0
  6. data/demo/yarn.lock +1101 -1101
  7. data/lib/backpack/{components/concerns/classes.rb → classes.rb} +1 -1
  8. data/lib/backpack/components/badge.rb +1 -1
  9. data/lib/backpack/components/base.rb +1 -1
  10. data/lib/backpack/components/breadcrumb.rb +2 -2
  11. data/lib/backpack/components/button.rb +1 -1
  12. data/lib/backpack/components/favicon.rb +1 -1
  13. data/lib/backpack/components/heading.rb +1 -1
  14. data/lib/backpack/components/icon.rb +1 -1
  15. data/lib/backpack/components/icon_button/icon_button.css +183 -0
  16. data/lib/backpack/components/icon_button/icon_button.js +1 -0
  17. data/lib/backpack/components/icon_button.rb +32 -0
  18. data/lib/backpack/components/icon_sprite.rb +1 -1
  19. data/lib/backpack/components/quotation.rb +1 -1
  20. data/lib/backpack/components/rich_text.rb +1 -1
  21. data/lib/backpack/components/skip_links.rb +1 -1
  22. data/lib/backpack/components.rb +2 -4
  23. data/lib/backpack/{components/concerns/identifier.rb → identifier.rb} +5 -1
  24. data/lib/backpack/version.rb +1 -1
  25. data/lib/backpack.rb +5 -4
  26. data/spec/components/badge_spec.rb +1 -1
  27. data/spec/components/breadcrumb_spec.rb +1 -1
  28. data/spec/components/button_spec.rb +3 -3
  29. data/spec/components/favicon_spec.rb +1 -1
  30. data/spec/components/heading_spec.rb +1 -1
  31. data/spec/components/icon_button_spec.rb +58 -0
  32. data/spec/components/icon_spec.rb +1 -1
  33. data/spec/components/icon_sprite_spec.rb +1 -1
  34. data/spec/components/previews/badge_preview/overview.html.erb +8 -5
  35. data/spec/components/previews/badge_preview.rb +3 -1
  36. data/spec/components/previews/breadcrumb_preview.rb +3 -1
  37. data/spec/components/previews/button_preview/overview.html.erb +12 -7
  38. data/spec/components/previews/button_preview.rb +2 -1
  39. data/spec/components/previews/heading_preview.rb +3 -1
  40. data/spec/components/previews/icon_button_preview/overview.html.erb +48 -0
  41. data/spec/components/previews/icon_button_preview.rb +14 -0
  42. data/spec/components/previews/icon_preview.rb +3 -1
  43. data/spec/components/previews/quotation_preview/overview.html.erb +5 -4
  44. data/spec/components/previews/quotation_preview.rb +3 -1
  45. data/spec/components/previews/rich_text_preview.rb +3 -1
  46. data/spec/components/previews/skip_links_preview.rb +3 -1
  47. data/spec/components/quotation_spec.rb +1 -1
  48. data/spec/components/rich_text_spec.rb +1 -1
  49. data/spec/components/skip_links_spec.rb +1 -1
  50. data/spec/spec_helper.rb +1 -1
  51. data/spec/support/components.rb +8 -0
  52. data/{lib/backpack → spec/support}/spec_helpers.rb +1 -1
  53. metadata +13 -20
  54. data/spec/components/previews/backpack/preview.rb +0 -3
  55. /data/lib/backpack/{components/concerns/attributes.rb → attributes.rb} +0 -0
@@ -7,7 +7,7 @@ module Backpack::Classes
7
7
 
8
8
  class_methods do
9
9
  def root_class
10
- to_s.delete_prefix("Backpack::Components::").gsub(/::/, "/")
10
+ identifier
11
11
  end
12
12
  end
13
13
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Backpack::Components::Badge < Backpack::Components::Base
3
+ class Components::Badge < Components::Base
4
4
  prop :variant, _Union(:solid, :soft, :surface, :outline), default: :solid
5
5
  prop :color, Backpack::Tokens::OptionalColor
6
6
  prop :size, Backpack::Tokens::Size, default: 2
@@ -1,4 +1,4 @@
1
- class Backpack::Components::Base < Phlex::HTML
1
+ class Components::Base < Phlex::HTML
2
2
  # Component concerns (order of includes in important)
3
3
  include Backpack::Identifier
4
4
  include Backpack::Classes
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Backpack::Components::Breadcrumb < Backpack::Components::Base
4
- class Item < Backpack::Components::Base
3
+ class Components::Breadcrumb < Components::Base
4
+ class Item < Components::Base
5
5
  prop :href, HTMLAttribute, default: ""
6
6
  prop :breadcrumb, Breadcrumb
7
7
  prop :last, _Boolean, default: false
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Backpack::Components::Button < Backpack::Components::Base
3
+ class Components::Button < Components::Base
4
4
  Radius = _Union(:none, :small, :full)
5
5
 
6
6
  prop :href, HTMLAttribute, predicate: :private
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Backpack::Components::Favicon < Backpack::Components::Base
3
+ class Components::Favicon < Components::Base
4
4
  prop :application_name, _String?
5
5
 
6
6
  def view_template
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Backpack::Components::Heading < Backpack::Components::Base
3
+ class Components::Heading < Components::Base
4
4
  prop :level, _Union(1, 2, 3, 4, 5), default: 1
5
5
  prop :tag, _Union(:h1, :h2, :h3, :h4, :h5, :h6), default: -> { :"h#{@level}" }
6
6
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Backpack::Components::Icon < Backpack::Components::Base
3
+ class Components::Icon < Components::Base
4
4
  prop :key, _Union(Symbol, String), :positional do |value|
5
5
  value.to_s.parameterize
6
6
  end
@@ -0,0 +1,183 @@
1
+ .root {
2
+ appearance: none;
3
+ border: none;
4
+ border-radius: var(--radius-full);
5
+ cursor: pointer;
6
+ display: inline-flex;
7
+ justify-content: center;
8
+ text-decoration: none;
9
+ transition:
10
+ background-color 0.2s ease-in-out,
11
+ color 0.2s ease-in-out;
12
+ }
13
+
14
+ /* solid */
15
+ .variant-solid {
16
+ background-color: var(--accent-9);
17
+ color: var(--accent-1);
18
+ }
19
+
20
+ @media (hover: hover) {
21
+ .variant-solid:hover {
22
+ background-color: var(--accent-10);
23
+ }
24
+ }
25
+
26
+ .variant-solid:active {
27
+ background-color: var(--accent-12);
28
+ }
29
+
30
+ .variant-solid:focus {
31
+ outline: 0.3rem solid var(--accent-8);
32
+ }
33
+
34
+ .variant-solid:disabled {
35
+ background-color: var(--slate-5);
36
+ border: none;
37
+ color: var(--slate-9);
38
+ }
39
+
40
+ /* soft */
41
+ .variant-soft {
42
+ background-color: var(--accent-5);
43
+ color: var(--accent-9);
44
+ }
45
+
46
+ @media (hover: hover) {
47
+ .variant-soft:hover {
48
+ background-color: var(--accent-6);
49
+ }
50
+ }
51
+
52
+ .variant-soft:active {
53
+ background-color: var(--accent-7);
54
+ }
55
+
56
+ .variant-soft:focus {
57
+ background-color: var(--accent-5);
58
+ outline: 0.2rem solid var(--accent-9);
59
+ }
60
+
61
+ .variant-soft:disabled {
62
+ background-color: var(--slate-4);
63
+ border: none;
64
+ color: var(--slate-9);
65
+ }
66
+
67
+ /* surface */
68
+ .variant-surface {
69
+ background-color: var(--accent-3);
70
+ box-shadow: inset 0 0 0 1px var(--accent-9);
71
+ color: var(--accent-9);
72
+ }
73
+
74
+ @media (hover: hover) {
75
+ .variant-surface:hover {
76
+ background-color: var(--accent-4);
77
+ }
78
+ }
79
+
80
+ .variant-surface:active {
81
+ background-color: var(--accent-5);
82
+ }
83
+
84
+ .variant-surface:focus {
85
+ outline: 0.2rem solid var(--accent-9);
86
+ }
87
+
88
+ .variant-surface:disabled {
89
+ background-color: var(--slate-3);
90
+ box-shadow: inset 0 0 0 1px var(--slate-8);
91
+ color: var(--slate-9);
92
+ }
93
+
94
+ /* outline */
95
+ .variant-outline {
96
+ background-color: transparent;
97
+ box-shadow: inset 0 0 0 1px var(--accent-9);
98
+ color: var(--accent-9);
99
+ }
100
+
101
+ @media (hover: hover) {
102
+ .variant-outline:hover {
103
+ background-color: var(--accent-3);
104
+ }
105
+ }
106
+
107
+ .variant-outline:active {
108
+ background-color: var(--accent-4);
109
+ }
110
+
111
+ .variant-outline:focus {
112
+ outline: 0.2rem solid var(--accent-9);
113
+ }
114
+
115
+ .variant-outline:disabled {
116
+ background-color: transparent;
117
+ box-shadow: inset 0 0 0 1px var(--slate-8);
118
+ color: var(--slate-8);
119
+ }
120
+
121
+ /* ghost */
122
+ .variant-ghost {
123
+ color: var(--accent-9);
124
+ background-color: transparent;
125
+ }
126
+
127
+ @media (hover: hover) {
128
+ .variant-ghost:hover {
129
+ background-color: var(--accent-4);
130
+ }
131
+ }
132
+
133
+ .variant-ghost:active {
134
+ background-color: var(--accent-5);
135
+ }
136
+
137
+ .variant-ghost:focus {
138
+ outline: 0.2rem solid var(--accent-9);
139
+ }
140
+
141
+ .variant-ghost:disabled {
142
+ background-color: transparent;
143
+ color: var(--slate-8);
144
+ }
145
+
146
+ /* size */
147
+ .size-1 {
148
+ --icon-size: 1.8rem;
149
+ padding: var(--space-4);
150
+ }
151
+
152
+ .size-2 {
153
+ --icon-size: 2rem;
154
+ padding: var(--space-5);
155
+ }
156
+
157
+ .size-3 {
158
+ --icon-size: 2.4rem;
159
+ padding: var(--space-5);
160
+ }
161
+
162
+ /* States */
163
+ .root:disabled {
164
+ cursor: not-allowed;
165
+ }
166
+
167
+ @media (max-width: 576px) {
168
+ .root {
169
+ line-height: 1;
170
+ }
171
+
172
+ .size-1 {
173
+ --icon-size: 1.6rem;
174
+ }
175
+
176
+ .size-2 {
177
+ --icon-size: 1.8rem;
178
+ }
179
+
180
+ .size-3 {
181
+ --icon-size: 2rem;
182
+ }
183
+ }
@@ -0,0 +1 @@
1
+ import "./icon_button.css";
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Components::IconButton < Components::Base
4
+ prop :href, HTMLAttribute, predicate: :private
5
+ prop :label, MandatoryHTMLAttribute
6
+ prop :icon, _Union(Symbol, String)
7
+ prop :variant, Backpack::Tokens::Variant, default: :solid
8
+ prop :color, Backpack::Tokens::OptionalColor
9
+ prop :size, Backpack::Tokens::Size, default: 2
10
+
11
+ def view_template
12
+ if href?
13
+ a(href: @href, **root_attributes) { render_icon }
14
+ else
15
+ button(**root_attributes) { render_icon }
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def render_icon
22
+ Icon(@icon, class: "#{root_class}-icon", label: @label)
23
+ end
24
+
25
+ def variant_props
26
+ %i[variant size]
27
+ end
28
+
29
+ def extra_root_attributes
30
+ { data_accent_color: @color }
31
+ end
32
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'rails-html-sanitizer'
4
4
 
5
- class Backpack::Components::IconSprite < Backpack::Components::Base
5
+ class Components::IconSprite < Components::Base
6
6
  ICON_PATHS = [
7
7
  Rails.root&.join("app/assets/icons"),
8
8
  Rails.root&.join("node_modules/lucide-static/icons"),
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Backpack::Components::Quotation < Backpack::Components::Base
3
+ class Components::Quotation < Components::Base
4
4
  prop :cite, _String?, predicate: :private
5
5
  prop :size, _Union(1, 2, 3, 4, 5, 6), default: 2
6
6
  prop :weight, Backpack::Tokens::Weight, default: :regular
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Backpack::Components::RichText < Backpack::Components::Base
3
+ class Components::RichText < Components::Base
4
4
  prop :tag, _Union(:article, :aside, :div, :main, :section), default: :div
5
5
 
6
6
  def view_template(&block)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Backpack::Components::SkipLinks < Backpack::Components::Base
3
+ class Components::SkipLinks < Components::Base
4
4
  LINKS = {
5
5
  content: "Aller au contenu",
6
6
  navigation: "Aller à la navigation"
@@ -1,5 +1,3 @@
1
- module Backpack
2
- module Components
3
- extend Phlex::Kit
4
- end
1
+ module Components
2
+ extend Phlex::Kit
5
3
  end
@@ -5,9 +5,13 @@ module Backpack::Identifier
5
5
 
6
6
  class_methods do
7
7
  def identifier
8
- self.to_s.delete_prefix("Backpack::Components::").gsub(/::/, "--").parameterize
8
+ (name.split("::") - %w[Components Backpack]).join("/")
9
9
  end
10
10
  end
11
11
 
12
+ def identifier
13
+ self.class.identifier.parameterize
14
+ end
15
+
12
16
  delegate :identifier, to: :class
13
17
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Backpack
4
- VERSION = "0.4.0"
4
+ VERSION = "0.4.1"
5
5
  end
data/lib/backpack.rb CHANGED
@@ -6,11 +6,12 @@ require 'date'
6
6
  require 'literal'
7
7
  require 'phlex-rails'
8
8
  require 'rails'
9
- require 'zeitwerk'
10
9
 
11
- loader = Zeitwerk::Loader.for_gem
12
- loader.push_dir("#{__dir__}/backpack/components/concerns", namespace: Backpack)
13
- loader.setup
10
+ require 'backpack/attributes'
11
+ require 'backpack/classes'
12
+ require 'backpack/identifier'
13
+ require 'backpack/tokens'
14
+ require 'backpack/components'
14
15
 
15
16
  module Backpack
16
17
  class Error < StandardError; end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Backpack::Components::Badge, type: :component do
3
+ describe Components::Badge, type: :component do
4
4
  let(:component) { described_class.new(**params) { text } }
5
5
  let(:params) { {} }
6
6
  let(:text) { "Badge" }
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Backpack::Components::Breadcrumb, type: :component do
3
+ describe Components::Breadcrumb, type: :component do
4
4
  let(:component) { described_class.new(**params) }
5
5
  let(:params) { {} }
6
6
 
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Backpack::Components::Button, type: :component do
3
+ describe Components::Button, type: :component do
4
4
  let(:component) { described_class.new(**params) { text } }
5
5
  let(:params) { {} }
6
6
  let(:text) { "Label" }
@@ -54,7 +54,7 @@ describe Backpack::Components::Button, type: :component do
54
54
  end
55
55
 
56
56
  context "with an icon before the text" do
57
- let(:icon) { render(Backpack::Components::Icon.new("user")) }
57
+ let(:icon) { render(Components::Icon.new("user")) }
58
58
  let(:component) do
59
59
  described_class.new(**params) do
60
60
  icon
@@ -74,7 +74,7 @@ describe Backpack::Components::Button, type: :component do
74
74
  end
75
75
 
76
76
  context "with an icon after the text" do
77
- let(:icon) { render(Backpack::Components::Icon.new("user")) }
77
+ let(:icon) { render(Components::Icon.new("user")) }
78
78
  let(:component) do
79
79
  described_class.new(**params) do
80
80
  text
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Backpack::Components::Favicon, type: :component do
3
+ describe Components::Favicon, type: :component do
4
4
  let(:component) { described_class.new(**params) }
5
5
  let(:params) { {} }
6
6
 
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Backpack::Components::Heading, type: :component do
3
+ describe Components::Heading, type: :component do
4
4
  let(:component) { described_class.new(**params) { text } }
5
5
  let(:params) { {} }
6
6
  let(:text) { "Heading" }
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe Components::IconButton, type: :component do
4
+ let(:component) { described_class.new(**params) }
5
+ let(:params) { { icon: :user, label: "User" } }
6
+
7
+ subject(:output) { render_fragment(component) }
8
+
9
+ it "renders a button element with the default styling" do
10
+ expect(output).to have_css(
11
+ "button.IconButton.IconButton-variant-solid.IconButton-size-2"
12
+ )
13
+ end
14
+
15
+ it "renders the icon" do
16
+ expect(output).to have_css("button.IconButton svg.Icon.IconButton-icon[data-icon-key='user']")
17
+ end
18
+
19
+ context "with a href" do
20
+ let(:params) { { icon: :user, label: "User", href: "/path" } }
21
+
22
+ it "renders a link element using the same styling classes" do
23
+ expect(output).to have_css(
24
+ "a.IconButton.IconButton-variant-solid.IconButton-size-2[href='/path']"
25
+ )
26
+ end
27
+ end
28
+
29
+ context "with variant options" do
30
+ let(:params) { { icon: :user, label: "User", variant: :outline, color: :red, size: 1 } }
31
+
32
+ it "updates the variant modifiers in the class list" do
33
+ expect(output).to have_css(
34
+ "button.IconButton.IconButton-variant-outline.IconButton-size-1"
35
+ )
36
+ end
37
+ end
38
+
39
+ context "with HTML attributes" do
40
+ let(:params) do
41
+ { icon: :user, label: "User", class: "custom", data: { test: "value" }, aria: { label: "Open menu" } }
42
+ end
43
+
44
+ it "merges custom attributes with the generated ones" do
45
+ expect(output).to have_css(
46
+ "button.IconButton.IconButton-variant-solid.IconButton-size-2.custom[data-test='value'][aria-label='Open menu']"
47
+ )
48
+ end
49
+ end
50
+
51
+ context "with a color option" do
52
+ let(:params) { { icon: :user, label: "User", color: :red } }
53
+
54
+ it "sets the data-accent-color attribute" do
55
+ expect(output).to have_css("button.IconButton[data-accent-color='red']")
56
+ end
57
+ end
58
+ end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Backpack::Components::Icon, type: :component do
3
+ describe Components::Icon, type: :component do
4
4
  let(:component) { described_class.new(key, **params) }
5
5
  let(:key) { nil }
6
6
  let(:params) { {} }
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Backpack::Components::IconSprite, type: :component do
3
+ describe Components::IconSprite, type: :component do
4
4
  let(:component) { described_class.new(**params) }
5
5
  let(:params) { {} }
6
6
 
@@ -1,12 +1,13 @@
1
- <%
2
- props = Backpack::Components::Badge.literal_properties
3
- %>
1
+ <% props = Components::Badge.literal_properties %>
2
+
4
3
  <table class="lookbook-table">
5
4
  <thead>
6
5
  <tr>
7
6
  <th>Color</th>
8
7
  <% props[:color].type.each do |color| %>
9
- <th colspan="<%= props[:size].type.to_a.size %>"><code><%= color || :default %></code></th>
8
+ <th colspan="<%= props[:size].type.to_a.size %>">
9
+ <code><%= color || :default %></code>
10
+ </th>
10
11
  <% end %>
11
12
  </tr>
12
13
  <tr>
@@ -24,7 +25,9 @@ props = Backpack::Components::Badge.literal_properties
24
25
  <th><code><%= variant %></code></th>
25
26
  <% props[:color].type.each do |color| %>
26
27
  <% props[:size].type.each do |size| %>
27
- <td><%= render Backpack::Components::Badge.new(variant:, size:, color:) { "Badge" } %></td>
28
+ <td>
29
+ <%= render Components::Badge.new(variant:, size:, color:) { "Badge" } %>
30
+ </td>
28
31
  <% end %>
29
32
  <% end %>
30
33
  </tr>
@@ -1,4 +1,6 @@
1
- class BadgePreview < Backpack::Preview
1
+ class BadgePreview < Lookbook::Preview
2
+ include Components
3
+
2
4
  def overview; end
3
5
 
4
6
  # @param size [Integer] range { min: 1, max: 3, step: 1 }
@@ -1,4 +1,6 @@
1
- class BreadcrumbPreview < Backpack::Preview
1
+ class BreadcrumbPreview < Lookbook::Preview
2
+ include Components
3
+
2
4
  # Markup and style based on [ARIA Breadcrumb Pattern Example](https://www.w3.org/WAI/ARIA/apg/patterns/breadcrumb/examples/breadcrumb/)
3
5
  def default
4
6
  Breadcrumb() do |c|
@@ -1,13 +1,14 @@
1
- <%
2
- props = Backpack::Components::Button.literal_properties
3
- icon = "arrow-right"
4
- %>
1
+ <% props = Components::Button.literal_properties
2
+ icon = "arrow-right" %>
3
+
5
4
  <table class="lookbook-table">
6
5
  <thead>
7
6
  <tr>
8
7
  <th>Color</th>
9
8
  <% props[:color].type.each do |color| %>
10
- <th colspan="<%= props[:size].type.to_a.size %>"><code><%= color || :default %></code></th>
9
+ <th colspan="<%= props[:size].type.to_a.size %>">
10
+ <code><%= color || :default %></code>
11
+ </th>
11
12
  <% end %>
12
13
  </tr>
13
14
  <tr>
@@ -25,7 +26,9 @@ icon = "arrow-right"
25
26
  <th><code><%= variant %></code></th>
26
27
  <% props[:color].type.each do |color| %>
27
28
  <% props[:size].type.each do |size| %>
28
- <td><%= render Backpack::Components::Button.new(variant:, size:, color:, icon:) { "Button" } %></td>
29
+ <td>
30
+ <%= render Components::Button.new(variant:, size:, color:, icon:) { "Button" } %>
31
+ </td>
29
32
  <% end %>
30
33
  <% end %>
31
34
  </tr>
@@ -33,7 +36,9 @@ icon = "arrow-right"
33
36
  <th><code><%= variant %></code>, <code>disabled</code></th>
34
37
  <% props[:color].type.each do |color| %>
35
38
  <% props[:size].type.each do |size| %>
36
- <td><%= render Backpack::Components::Button.new(variant:, size:, color:, icon:, disabled: true) { "Button" } %></td>
39
+ <td>
40
+ <%= render Components::Button.new(variant:, size:, color:, icon:, disabled: true) { "Button" } %>
41
+ </td>
37
42
  <% end %>
38
43
  <% end %>
39
44
  </tr>
@@ -1,4 +1,5 @@
1
- class ButtonPreview < Backpack::Preview
1
+ class ButtonPreview < Lookbook::Preview
2
+ include Components
2
3
 
3
4
  def overview; end
4
5
 
@@ -1,4 +1,6 @@
1
- class HeadingPreview < Backpack::Preview
1
+ class HeadingPreview < Lookbook::Preview
2
+ include Components
3
+
2
4
  # @!group
3
5
  def default
4
6
  Heading() { "Hello, Lookbook!" }