optics_view_components 0.1.6 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5089194dafd053f1b21e399d01fa5c9c3bf8f4851d8232065ba1ba0e13d4b8ee
4
- data.tar.gz: 2db292342076af2ca06cccf3eb3266ed149f01f15e56b79cf5986937e0d42462
3
+ metadata.gz: db165928ba46774fcb8412d71cd02ae0c4e066e323bff171c7bedaae7f7e1cf9
4
+ data.tar.gz: 482b366146b1e0ff14e8cd2c6c5819e51374ae142bb969b7f520f8f68a5de220
5
5
  SHA512:
6
- metadata.gz: a7234b11befc27ab837247c1ab7738b32273493d1eb9c75b5955cbb8fe843f8d69e07afb9f966255cba89fc832455b091fdbb6bef38a2e50a997e11cfc0a403d
7
- data.tar.gz: 5aa83b5e3465b60b0d5ceba74a576bb4d223947bbf0a1df0209761e09d98a55947bd6a9a8fe51957a26f097ee5b0fccf7a3d741e430648f30828bd2ad381b30c
6
+ metadata.gz: e8783ca32282a2e8f8f45b97b443198be8507f65d1c48cc773fe6f4ddd5ef737bdfa3a865b7591101b57fbf700e9d1af96858443f1ad3883338713f662ad2b7d
7
+ data.tar.gz: e21dd5880c6d94568f53c3202b154e7702d809fe7535e31134b3aef6c9ee56c8ce06a60de87a1069fb4381b4ee993c4bf5bb56b2d2ec3442720a479a7838d4c9
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- optics_view_components (0.1.3)
4
+ optics_view_components (0.1.8)
5
5
  view_component (> 2.0, < 4.0)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -38,6 +38,18 @@ Add to `config/application.rb`:
38
38
  config.view_component.preview_paths << Optics::ViewComponents::Engine.root.join('previews')
39
39
  ```
40
40
 
41
+ If you need a custom layout add:
42
+ ```
43
+ config.view_component.default_preview_layout = 'preview'
44
+ ```
45
+
46
+ To use the shorthand `component 'optics/icon'` syntax, add this to `app/helpers/application_helper.rb`:
47
+ ```
48
+ def component(name, *args, **kwargs, &)
49
+ render(name.camelize.constantize::Component.new(*args, **kwargs), &)
50
+ end
51
+ ```
52
+
41
53
  ## Development
42
54
 
43
55
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -6,30 +6,27 @@ module Optics
6
6
  SIZES = %w[small medium large].freeze
7
7
  STYLES = %w[default primary secondary delete].freeze
8
8
 
9
- renders_one :leading_icon, lambda { |name:, size: 'normal'|
10
- Optics::Icon::Component.new(name:, size:)
11
- }
12
-
13
9
  accepts :label
10
+ accepts :active, default: false
14
11
  accepts :border, default: true
12
+ accepts :disabled, default: false
15
13
  accepts :icon, default: false
14
+ accepts :icon_with_label, default: false
15
+ accepts :pill, default: false
16
16
  accepts :size, default: 'medium'
17
17
  accepts :variant, default: 'default'
18
18
  accepts :url
19
19
 
20
20
  def call
21
21
  build_button do
22
- capture do
23
- concat leading_icon
24
- concat label
25
- end
22
+ content || label
26
23
  end
27
24
  end
28
25
 
29
26
  def build_button(&)
30
- return link_to(url, class: classes, **@attributes.except(:class), &) if url
27
+ return link_to(url, class: classes, **@attributes.except(:class), &) if url && !disabled
31
28
 
32
- tag.button(class: classes, **@attributes.except(:class), &)
29
+ tag.button(class: classes, disabled:, **@attributes.except(:class), &)
33
30
  end
34
31
 
35
32
  def button_class
@@ -43,8 +40,12 @@ module Optics
43
40
  @attributes[:class],
44
41
  button_class,
45
42
  size_class,
43
+ 'btn--active': active,
44
+ 'btn--disabled': disabled,
46
45
  'btn--icon': icon,
47
- 'btn--no-border': !border
46
+ 'btn--icon-with-label': icon_with_label,
47
+ 'btn--no-border': !border,
48
+ 'btn--pill': pill
48
49
  ).join(' ')
49
50
  end
50
51
 
@@ -3,9 +3,12 @@
3
3
  module Optics
4
4
  module Sidebar
5
5
  class Component < ApplicationViewComponent
6
+ VARIANTS = %w[drawer compact rail].freeze
7
+
6
8
  renders_one :brand, 'Brand'
7
- renders_many :buttons, Optics::Button::Component
9
+ renders_many :sidebar_contents, 'SidebarContent'
8
10
 
11
+ accepts :responsive, default: false
9
12
  accepts :variant, default: 'drawer'
10
13
 
11
14
  def call
@@ -15,16 +18,9 @@ module Optics
15
18
  ) do
16
19
  capture do
17
20
  concat brand
18
- concat(
19
- content_tag(
20
- :div,
21
- class: 'sidebar__content sidebar__content--center'
22
- ) do
23
- buttons.each do |button|
24
- concat button
25
- end
21
+ sidebar_contents.each do |content|
22
+ concat content
26
23
  end
27
- )
28
24
  end
29
25
  end
30
26
  end
@@ -33,7 +29,8 @@ module Optics
33
29
  class_names(
34
30
  'sidebar',
35
31
  variant_class,
36
- @attributes[:class]
32
+ @attributes[:class],
33
+ 'sidebar--responsive': responsive
37
34
  ).join(' ')
38
35
  end
39
36
 
@@ -43,24 +40,44 @@ module Optics
43
40
 
44
41
  class Brand < ApplicationViewComponent
45
42
  accepts :url
46
- accepts :image_source
43
+ accepts :img_src
44
+ accepts :name
47
45
 
48
46
  def call
49
47
  link_to(url, class: 'sidebar__brand') do
50
- image_tag(image_source)
48
+ name || image_tag(img_src)
51
49
  end
52
50
  end
53
51
  end
54
52
 
55
- class LinksComponent < ApplicationViewComponent
56
- VARIANTS = %w[drawer compact rail]
53
+ class SidebarContent < ApplicationViewComponent
54
+ accepts :position, default: 'center'
55
+
56
+ def call
57
+ content_tag(:div, class: classes) do
58
+ content
59
+ end
60
+ end
57
61
 
58
- accepts :image_source
62
+ def classes
63
+ class_names(
64
+ 'sidebar__content',
65
+ position_class
66
+ ).join(' ')
67
+ end
68
+
69
+ def position_class
70
+ "sidebar__content--#{position}"
71
+ end
72
+ end
73
+
74
+ class LinksComponent < ApplicationViewComponent
75
+ accepts :img_src
59
76
  accepts :url
60
77
 
61
78
  def call
62
79
  link_to(url, class: 'sidebar__brand') do
63
- image_tag(image_source)
80
+ image_tag(img_src)
64
81
  end
65
82
  end
66
83
  end
data/demo/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- optics_view_components (0.1.3)
4
+ optics_view_components (0.1.8)
5
5
  view_component (> 2.0, < 4.0)
6
6
 
7
7
  GEM
@@ -1,4 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ApplicationHelper
4
+ def component(name, *args, **kwargs, &)
5
+ render(name.camelize.constantize::Component.new(*args, **kwargs), &)
6
+ end
4
7
  end
data/demo/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "dependencies": {
3
- "@rolemodel/optics": "^0.3.1",
4
- "sass": "^1.62.1"
3
+ "@rolemodel/optics": "^0.4.2",
4
+ "sass": "^1.63.6"
5
5
  },
6
6
  "scripts": {
7
7
  "build:css": "sass ./app/assets/stylesheets/application.sass.scss:./app/assets/builds/application.css --no-source-map --load-path=node_modules"
data/demo/yarn.lock CHANGED
@@ -2,25 +2,12 @@
2
2
  # yarn lockfile v1
3
3
 
4
4
 
5
- "@orchidjs/sifter@^1.0.3":
6
- version "1.0.3"
7
- resolved "https://registry.yarnpkg.com/@orchidjs/sifter/-/sifter-1.0.3.tgz#43f42519472282eb632d0a1589184f044d64129b"
8
- integrity sha512-zCZbwKegHytfsPm8Amcfh7v/4vHqTAaOu6xFswBYcn8nznBOuseu6COB2ON7ez0tFV0mKL0nRNnCiZZA+lU9/g==
9
- dependencies:
10
- "@orchidjs/unicode-variants" "^1.0.4"
11
-
12
- "@orchidjs/unicode-variants@^1.0.4":
13
- version "1.0.4"
14
- resolved "https://registry.yarnpkg.com/@orchidjs/unicode-variants/-/unicode-variants-1.0.4.tgz#6d2f812e3b19545bba2d81caffff1204de9a6a58"
15
- integrity sha512-NvVBRnZNE+dugiXERFsET1JlKZfM5lJDEpSMilKW4bToYJ7pxf0Zne78xyXB2ny2c2aHfJ6WLnz1AaTNHAmQeQ==
16
-
17
- "@rolemodel/optics@^0.3.1":
18
- version "0.3.1"
19
- resolved "https://registry.yarnpkg.com/@rolemodel/optics/-/optics-0.3.1.tgz#87a8f3733d8fc3e59d26f3c484e3a308cffd1f54"
20
- integrity sha512-/bbYc63WH8Yp/PWJ8jew/O1mYqKYqTIw7ixWViEDt/XM4AG8WYZZV+WUvMBUrff5k8kM6M8ZZVLkmaDple8e/Q==
5
+ "@rolemodel/optics@^0.4.2":
6
+ version "0.4.2"
7
+ resolved "https://registry.yarnpkg.com/@rolemodel/optics/-/optics-0.4.2.tgz#c8cadfa37091a4d97e81f5ff8662af1b74505af5"
8
+ integrity sha512-yppM7DbMF5AmWQ4g21N5fLufwtmef9pmlTGlLPgUtMgVDBGZmoz0BiRf6VjUsAXNRmvgqCK/g+YrT1kyEtQE1A==
21
9
  dependencies:
22
10
  modern-css-reset "^1.4.0"
23
- tom-select "^2.0.0"
24
11
 
25
12
  anymatch@~3.1.2:
26
13
  version "3.1.3"
@@ -127,10 +114,10 @@ readdirp@~3.6.0:
127
114
  dependencies:
128
115
  picomatch "^2.2.1"
129
116
 
130
- sass@^1.62.1:
131
- version "1.62.1"
132
- resolved "https://registry.yarnpkg.com/sass/-/sass-1.62.1.tgz#caa8d6bf098935bc92fc73fa169fb3790cacd029"
133
- integrity sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==
117
+ sass@^1.63.6:
118
+ version "1.63.6"
119
+ resolved "https://registry.yarnpkg.com/sass/-/sass-1.63.6.tgz#481610e612902e0c31c46b46cf2dad66943283ea"
120
+ integrity sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==
134
121
  dependencies:
135
122
  chokidar ">=3.0.0 <4.0.0"
136
123
  immutable "^4.0.0"
@@ -147,11 +134,3 @@ to-regex-range@^5.0.1:
147
134
  integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
148
135
  dependencies:
149
136
  is-number "^7.0.0"
150
-
151
- tom-select@^2.0.0:
152
- version "2.2.2"
153
- resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.2.2.tgz#8e5f9296e6d80254feccb57f0986bd6c44d126e2"
154
- integrity sha512-igGah1yY6yhrnN2h/Ky8I5muw/nE/YQxIsEZoYu5qaA4bsRibvKto3s8QZZosKpOd0uO8fNYhRfAwgHB4IAYew==
155
- dependencies:
156
- "@orchidjs/sifter" "^1.0.3"
157
- "@orchidjs/unicode-variants" "^1.0.4"
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Optics
4
4
  module ViewComponents
5
- VERSION = '0.1.6'
5
+ VERSION = '0.1.8'
6
6
  end
7
7
  end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ComponentHelper
4
+ def component(name, *args, **kwargs, &)
5
+ render(name.camelize.constantize::Component.new(*args, **kwargs), &)
6
+ end
7
+ end
@@ -0,0 +1,4 @@
1
+ <%= component('optics/button', active:, border:, disabled:, icon:, icon_with_label:, id:, pill:, size:, url:) do |component| %>
2
+ <%= component('optics/icon', name: 'home') %>
3
+ Button
4
+ <% end %>
@@ -2,31 +2,59 @@
2
2
 
3
3
  module Optics
4
4
  class ButtonPreview < ViewComponent::Preview
5
+ include ComponentHelper
6
+
7
+ # @param active toggle
5
8
  # @param border toggle
9
+ # @param disabled toggle
6
10
  # @param icon toggle
11
+ # @param icon_with_label toggle
7
12
  # @param id text
8
13
  # @param label text
14
+ # @param pill toggle
9
15
  # @param size select {{ Optics::Button::Component::SIZES }}
10
16
  # @param variant select {{ Optics::Button::Component::STYLES }}
11
17
  # @param url text
12
18
  def default( # rubocop:disable Metrics/ParameterLists
13
- border: true,
14
- icon: false,
15
- id: nil,
16
- label: 'Default',
17
- size: 'normal',
18
- variant: 'default',
19
- url: nil
20
- )
21
- render(Optics::Button::Component.new(
22
- border:,
23
- icon:,
24
- id:,
25
- label:,
26
- size:,
27
- variant:,
28
- url:
29
- ))
19
+ active: false,
20
+ border: true,
21
+ disabled: false,
22
+ icon: false,
23
+ icon_with_label: false,
24
+ id: nil,
25
+ label: 'Default',
26
+ pill: false,
27
+ size: 'medium',
28
+ variant: 'default',
29
+ url: nil
30
+ )
31
+ component 'optics/button', active:, border:, disabled:, icon:, icon_with_label:, id:, label:, pill:, size:,
32
+ variant:, url:
33
+ end
34
+
35
+ # @param active toggle
36
+ # @param border toggle
37
+ # @param disabled toggle
38
+ # @param icon toggle
39
+ # @param icon_with_label toggle
40
+ # @param id text
41
+ # @param pill toggle
42
+ # @param size select {{ Optics::Button::Component::SIZES }}
43
+ # @param variant select {{ Optics::Button::Component::STYLES }}
44
+ # @param url text
45
+ def with_icon( # rubocop:disable Metrics/ParameterLists
46
+ active: false,
47
+ border: true,
48
+ disabled: false,
49
+ icon: false,
50
+ icon_with_label: false,
51
+ id: nil,
52
+ pill: false,
53
+ size: 'medium',
54
+ variant: 'default',
55
+ url: nil
56
+ )
57
+ render_with_template(locals: { active:, border:, disabled:, icon:, icon_with_label:, id:, pill:, size:, url: })
30
58
  end
31
59
  end
32
60
  end
@@ -2,6 +2,8 @@
2
2
 
3
3
  module Optics
4
4
  class IconPreview < ViewComponent::Preview
5
+ include ComponentHelper
6
+
5
7
  # @param emphasis select {{ Optics::Icon::Component::EMPHASES }}
6
8
  # @param filled toggle
7
9
  # @param name
@@ -9,23 +11,14 @@ module Optics
9
11
  # @param title
10
12
  # @param weight select {{ Optics::Icon::Component::WEIGHTS }}
11
13
  def default( # rubocop:disable Metrics/ParameterLists
12
- emphasis: 'normal',
13
- filled: false,
14
- name: 'settings',
15
- size: 'normal',
16
- title: nil,
17
- weight: 'normal'
18
- )
19
- render(
20
- Optics::Icon::Component.new(
21
- emphasis:,
22
- filled:,
23
- name:,
24
- size:,
25
- title:,
26
- weight:
27
- )
28
- )
14
+ emphasis: 'normal',
15
+ filled: false,
16
+ name: 'settings',
17
+ size: 'normal',
18
+ title: nil,
19
+ weight: 'normal'
20
+ )
21
+ component('optics/icon', emphasis:, filled:, name:, size:, title:, weight:)
29
22
  end
30
23
  end
31
24
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Optics
4
+ class SidebarPreview < ViewComponent::Preview
5
+ include ComponentHelper
6
+
7
+ # @param responsive toggle
8
+ # @param variant select {{ Optics::Sidebar::Component::VARIANTS }}
9
+ def default(
10
+ responsive: true,
11
+ variant: 'drawer'
12
+ )
13
+ component('optics/sidebar', responsive:, variant:) do |sidebar|
14
+ sidebar.with_brand(name: 'Optics', url: 'https://www.example.com')
15
+ end
16
+ end
17
+ end
18
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: optics_view_components
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Reed Law
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-18 00:00:00.000000000 Z
11
+ date: 2023-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: view_component
@@ -178,8 +178,11 @@ files:
178
178
  - lib/optics/view_components.rb
179
179
  - lib/optics/view_components/engine.rb
180
180
  - lib/optics/view_components/version.rb
181
+ - previews/component_helper.rb
181
182
  - previews/optics/button_preview.rb
183
+ - previews/optics/button_preview/with_icon.html.erb
182
184
  - previews/optics/icon_preview.rb
185
+ - previews/optics/sidebar_preview.rb
183
186
  - sig/optics_view_components.rbs
184
187
  homepage: https://github.com/RoleModel/optics_view_components
185
188
  licenses: