dsfr-view-components 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 26127e695550fca9861568104cb2e15f13f81c77d8ab97788db823215bdcd43e
4
- data.tar.gz: 90059e2796a0b0e63f6fed13bb9183866dd01ec796d190e342fd9f458d5a1bdf
3
+ metadata.gz: e93e6bf0c8951900e6b030e6e0f25b59cf5adda2d357522f150cf2c2700d22b7
4
+ data.tar.gz: e445fe61031ec9e52a2d1abb82240293825e988995fdf72eba461d88b23aeed8
5
5
  SHA512:
6
- metadata.gz: f14bbd9482cf8dfa9473d024c388a30db71225c31fcee52bf69d2dfed43802892dc3cfb56e21f1273d187378cf0e905e801ed9092958839ed3ec9329fc58ece9
7
- data.tar.gz: 30e838fb64e6e0fb1fb11adea4967aaf4cdeed2fc8763d8e46ffe4823f1e3a98c4512e974a001e86fcefe47b113dec303e49e3e7e4517727098edda9439c498f
6
+ metadata.gz: 2ce58d44d3ada31a6f9381017fc6da31a1dad95e8d14128f2e30a91dba279a63c19dfdbcb992807f422f5e3536d13d4b5198537cd313414eb8427fdea7af04db
7
+ data.tar.gz: 2baad7dedd1acb5e512f8056f819d586937e9d49c360b4c4aa3e162f122dd2c0d17eba1217db9f05cb6403987f3bf702b089efbc57b37bc7378d5de20fe312f7
data/README.md CHANGED
@@ -42,7 +42,7 @@ require "dsfr/components"
42
42
 
43
43
  Cette gem a pour but de supporter tous les composants proposés par le Design Système de l'État hormis ceux concernant les formulaires. Ceux-ci seront fournis dans une gem indépendante dans le futur.
44
44
 
45
- 10/36 composants sont disponibles :
45
+ 11/36 composants sont disponibles :
46
46
 
47
47
  - [x] Accordéon - Accordion
48
48
  - [x] Alertes - Alert
@@ -69,7 +69,7 @@ Cette gem a pour but de supporter tous les composants proposés par le Design Sy
69
69
  - [ ] Mise en exergue - Highlight
70
70
  - [x] Modale - Modal
71
71
  - [ ] Navigation principale - Main navigation
72
- - [ ] Onglets - Tabs
72
+ - [x] Onglets - Tabs
73
73
  - [ ] Pagination
74
74
  - [ ] Paramètres d'affichage - Display
75
75
  - [ ] Partage - Share
@@ -0,0 +1,58 @@
1
+ class DsfrComponent::TabsComponent::TabComponent < DsfrComponent::Base
2
+ # @param title [String] Le titre de l’onglet affiché dans la barre d’onglets
3
+ # @param active [Boolean] Définit si l’onglet est actif ou non
4
+ # @param path [String] (optionnel) chemin vers lequel l’onglet pointe, utilisable avec Turbo Drive, transforme le bouton en lien, avec une turbo action `advance`
5
+ # @param icon [String] (optionnel) icône affichée à gauche du titre de l’onglet (sans le préfixe `fr-icon-`)
6
+ def initialize(title:, active: false, path: nil, icon: nil, classes: [], html_attributes: {})
7
+ @title = title
8
+ @active = active
9
+ @path = path
10
+ @icon = icon
11
+
12
+ super(classes: classes, html_attributes: html_attributes)
13
+ end
14
+
15
+ def nav_id
16
+ @nav_id ||= "tab-#{title_slug}-nav"
17
+ end
18
+
19
+ def panel_id
20
+ @panel_id ||= "tab-#{title_slug}-panel"
21
+ end
22
+
23
+ def nav_item
24
+ path ? nav_link : nav_button
25
+ end
26
+
27
+ def call
28
+ tag.div(**html_attributes) { content }
29
+ end
30
+
31
+ private
32
+
33
+ attr_reader :title, :active, :path, :icon
34
+
35
+ def default_attributes
36
+ classes = ['fr-tabs__panel']
37
+ classes << "fr-tabs__panel--selected" if active
38
+ { id: panel_id, class: classes, role: 'tabpanel', "aria-labelledby": nav_id }
39
+ end
40
+
41
+ def title_slug
42
+ @title_slug ||= title.parameterize
43
+ end
44
+
45
+ def nav_button
46
+ tag.button(title, **nav_html_attributes)
47
+ end
48
+
49
+ def nav_link
50
+ tag.a(title, href: path, data: { turbo_action: "advance" }, **nav_html_attributes)
51
+ end
52
+
53
+ def nav_html_attributes
54
+ classes = ["fr-tabs__tab"]
55
+ classes += ["fr-icon-#{icon}", "fr-tabs__tab--icon-left"] if icon.present?
56
+ { id: nav_id, class: classes, role: 'tab', "aria-selected": active ? "true" : "false", "aria-controls": panel_id }
57
+ end
58
+ end
@@ -0,0 +1,12 @@
1
+ <%= tag.div(**html_attributes) do %>
2
+ <ul class="fr-tabs__list" role="tablist" aria-label="<%= label %>">
3
+ <% tabs.each do |tab| %>
4
+ <li role="presentation">
5
+ <%= tab.nav_item %>
6
+ </li>
7
+ <% end %>
8
+ </ul>
9
+ <% tabs.each do |tab| %>
10
+ <%= tab %>
11
+ <% end %>
12
+ <% end %>
@@ -0,0 +1,19 @@
1
+ class DsfrComponent::TabsComponent < DsfrComponent::Base
2
+ renders_many :tabs, "DsfrComponent::TabsComponent::TabComponent"
3
+
4
+ # @param label [String] Le nom du système d’onglets, sera uniquement affiché comme aria-label (optionnel)
5
+ def initialize(label: nil, classes: [], html_attributes: {})
6
+ @label = label
7
+ @tabs = []
8
+
9
+ super(classes: classes, html_attributes: html_attributes)
10
+ end
11
+
12
+ private
13
+
14
+ attr_reader :label
15
+
16
+ def default_attributes
17
+ { class: 'fr-tabs' }
18
+ end
19
+ end
@@ -14,6 +14,7 @@ module DsfrComponentsHelper
14
14
  dsfr_header_tool_link: 'DsfrComponent::HeaderComponent::ToolLinkComponent',
15
15
  dsfr_header_direct_link: 'DsfrComponent::HeaderComponent::DirectLinkComponent',
16
16
  dsfr_header_direct_dropdown_link: 'DsfrComponent::HeaderComponent::DirectLinkDropdownComponent',
17
+ dsfr_tabs: 'DsfrComponent::TabsComponent',
17
18
  # DO NOT REMOVE: new component mapping here
18
19
  }.freeze
19
20
  HELPER_NAME_TO_CLASS_NAME.each do |name, klass|
@@ -1,5 +1,5 @@
1
1
  module Dsfr
2
2
  module Components
3
- VERSION = '0.2.1'.freeze
3
+ VERSION = '0.3.0'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dsfr-view-components
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - BetaGouv developers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-17 00:00:00.000000000 Z
11
+ date: 2023-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack
@@ -461,6 +461,9 @@ files:
461
461
  - app/components/dsfr_component/modal_component.rb
462
462
  - app/components/dsfr_component/stepper_component.html.erb
463
463
  - app/components/dsfr_component/stepper_component.rb
464
+ - app/components/dsfr_component/tabs_component.html.erb
465
+ - app/components/dsfr_component/tabs_component.rb
466
+ - app/components/dsfr_component/tabs_component/tab_component.rb
464
467
  - app/components/dsfr_component/tag_component.rb
465
468
  - app/components/dsfr_component/tile_component.html.erb
466
469
  - app/components/dsfr_component/tile_component.rb