Skip to content

Commit 45b0e0b

Browse files
committed
refactor(DsfrFieldset,DsfrFileDownload): ♻️ améliore defineSlots et met à jour imports Storybook
- Améliore DsfrFieldset avec JSDoc pour defineSlots et supprime les commentaires HTML obsolètes - Met à jour DsfrFileDownload stories avec les imports Storybook 9 - Améliore la documentation des slots avec JSDoc pour une meilleure DX - Corrige les échappements d'apostrophes dans les descriptions - DsfrFieldset.vue : Ajoute JSDoc à defineSlots existant et supprime commentaires HTML - DsfrFieldset.stories.ts : Met à jour avec Meta/StoryObj depuis @storybook/vue3-vite - DsfrFileDownload.stories.ts : Met à jour avec Meta/StoryObj et satisfies Meta<typeof> - Ajoute type Story = StoryObj<typeof meta> dans les deux fichiers stories
1 parent a328af1 commit 45b0e0b

File tree

3 files changed

+93
-89
lines changed

3 files changed

+93
-89
lines changed
Lines changed: 49 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
import type { Meta, StoryObj } from '@storybook/vue3-vite'
2+
13
import DsfrFieldset from './DsfrFieldset.vue'
24

3-
export default {
5+
const meta = {
46
component: DsfrFieldset,
57
title: 'Composants/DsfrFieldset',
68
tags: ['formulaire'],
@@ -30,76 +32,70 @@ export default {
3032
'Classe(s) à ajouter à l’élément <span class="fr-hint-text">',
3133
},
3234
},
33-
}
35+
} satisfies Meta<typeof DsfrFieldset>
3436

35-
export const EnsembleDeChamps = (args) => ({
36-
components: {
37-
DsfrFieldset,
38-
},
37+
export default meta
3938

40-
data () {
41-
return {
42-
...args,
43-
expandedId: undefined,
44-
title1: `${args.title} 1`,
45-
title2: `${args.title} 2`,
46-
}
47-
},
39+
type Story = StoryObj<typeof meta>
4840

49-
template: `
41+
export const EnsembleDeChamps: Story = {
42+
args: {
43+
legend: 'Titre de l\'ensemble des champs',
44+
legendId: 'legend-id',
45+
legendClass: '',
46+
hintClass: '',
47+
hint: 'Texte d\'indice',
48+
},
49+
render: (args) => ({
50+
components: {
51+
DsfrFieldset,
52+
},
53+
setup () {
54+
return { args }
55+
},
56+
template: `
5057
<DsfrFieldset
51-
:legend="legend"
52-
:hint="hint"
53-
:legend-class="legendClass"
54-
:hint-class="hintClass"
55-
:legend-id="legendId"
58+
:legend="args.legend"
59+
:hint="args.hint"
60+
:legend-class="args.legendClass"
61+
:hint-class="args.hintClass"
62+
:legend-id="args.legendId"
5663
>
5764
Contenu du fieldset
5865
</DsfrFieldset>
5966
`,
60-
})
61-
EnsembleDeChamps.args = {
62-
legend: 'Titre de l’ensemble des champs',
63-
legendId: 'legend-id',
64-
legendClass: '',
65-
hintClass: '',
66-
hint: 'Texte d’indice',
67+
}),
6768
}
6869

69-
export const EnsemblePersonnaliseDeChamps = (args) => ({
70-
components: {
71-
DsfrFieldset,
72-
},
73-
74-
data () {
75-
return {
76-
...args,
77-
expandedId: undefined,
78-
title1: `${args.title} 1`,
79-
title2: `${args.title} 2`,
80-
}
70+
export const EnsemblePersonnaliseDeChamps: Story = {
71+
args: {
72+
legend: 'Contenu personnalisé du titre de l\'ensemble des champs',
73+
legendId: 'legend-id',
74+
legendClass: '',
75+
hintClass: '',
76+
hint: 'Contenu personnalisé de l\'indice',
8177
},
82-
83-
template: `
78+
render: (args) => ({
79+
components: {
80+
DsfrFieldset,
81+
},
82+
setup () {
83+
return { args }
84+
},
85+
template: `
8486
<DsfrFieldset
85-
:legend-id="legendId"
86-
:legend-class="legendClass"
87-
:hint-class="hintClass"
87+
:legend-id="args.legendId"
88+
:legend-class="args.legendClass"
89+
:hint-class="args.hintClass"
8890
>
8991
<template #legend>
90-
<h6>{{ legend }} avec <em>de litalique</em> dans un titre</h6>
92+
<h6>{{ args.legend }} avec <em>de l'italique</em> dans un titre</h6>
9193
</template>
9294
<template #hint>
93-
{{ hint }} avec <strong>du gras</strong>
95+
{{ args.hint }} avec <strong>du gras</strong>
9496
</template>
9597
Contenu du fieldset
9698
</DsfrFieldset>
9799
`,
98-
})
99-
EnsemblePersonnaliseDeChamps.args = {
100-
legend: 'Contenu personnalisé du titre de l’ensemble des champs',
101-
legendId: 'legend-id',
102-
legendClass: '',
103-
hintClass: '',
104-
hint: 'Contenu personnalisé de l’indice',
100+
}),
105101
}

src/components/DsfrFieldset/DsfrFieldset.vue

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,24 @@ import type { DsfrFieldsetProps } from './DsfrFieldset.types'
33
44
export type { DsfrFieldsetProps }
55
6+
/**
7+
* @slot default - Slot par défaut pour le contenu du fieldset (sera dans `<div class="fr-fieldset__element">`)
8+
* @slot legend - Slot pour le contenu du titre du `fieldset` (sera dans `<legend class="fr-fieldset__legend">`). Une props du même nom est utilisable pour du texte simple sans mise en forme.
9+
* @slot hint - Slot pour le contenu de l'indice (sera dans `<span class="fr-hint-text">` qui sera dans `</legend>`). Une **props du même nom est utilisable pour du texte simple** sans mise en forme.
10+
*/
11+
defineSlots<{
12+
default?: () => any
13+
legend?: () => any
14+
hint?: () => any
15+
}>()
16+
617
withDefaults(defineProps<DsfrFieldsetProps>(), {
718
legend: '',
819
legendId: '',
920
legendClass: '',
1021
hint: '',
1122
hintClass: '',
1223
})
13-
14-
defineSlots<{
15-
default?: () => any
16-
legend?: () => any
17-
hint?: () => any
18-
}>()
1924
</script>
2025

2126
<template>
@@ -27,7 +32,6 @@ defineSlots<{
2732
:class="legendClass"
2833
>
2934
{{ legend }}
30-
<!-- @slot Slot pour le contenu du titre du `fieldset` (sera dans `<legend class="fr-fieldset__legend">`). Une props du même nom est utilisable pour du texte simple sans mise en forme. -->
3135
<slot name="legend" />
3236
</legend>
3337
<div
@@ -39,12 +43,10 @@ defineSlots<{
3943
:class="hintClass"
4044
>
4145
{{ hint }}
42-
<!-- @slot Slot pour le contenu de l’indice (sera dans `<span class="fr-hint-text">` qui sera dans `</legend>`). Une **props du même nom est utilisable pour du texte simple** sans mise en forme. -->
4346
<slot name="hint" />
4447
</span>
4548
</div>
4649
<div class="fr-fieldset__element">
47-
<!-- @slot Slot par défaut pour le contenu du fieldset (sera dans `<div class="fr-fieldset__element">`) -->
4850
<slot />
4951
</div>
5052
</fieldset>
Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
import type { Meta, StoryObj } from '@storybook/vue3-vite'
2+
13
import DsfrFileDownload from './DsfrFileDownload.vue'
24

35
/**
4-
* [Voir quand lutiliser sur la documentation du DSFR](https://www.systeme-de-design.gouv.fr/version-courante/fr/composants/telechargement-de-fichier)
6+
* [Voir quand l\'utiliser sur la documentation du DSFR](https://www.systeme-de-design.gouv.fr/version-courante/fr/composants/telechargement-de-fichier)
57
*/
6-
export default {
8+
const meta = {
79
component: DsfrFileDownload,
810
title: 'Composants/DsfrFileDownload',
911
argTypes: {
@@ -29,31 +31,35 @@ export default {
2931
description: 'Nom de la ressource à télécharger',
3032
},
3133
},
32-
}
34+
} satisfies Meta<typeof DsfrFileDownload>
3335

34-
export const LienDeTelechargement = (args) => ({
35-
components: {
36-
DsfrFileDownload,
37-
},
38-
data () {
39-
return {
40-
...args,
41-
}
36+
export default meta
37+
38+
type Story = StoryObj<typeof meta>
39+
40+
export const LienDeTelechargement: Story = {
41+
args: {
42+
format: 'PDF',
43+
size: '250 Go',
44+
href: 'src/assets/icone-marianne-seule.png',
45+
download: 'marianne.png',
46+
title: 'Titre du téléchargement',
4247
},
43-
template: `
44-
<DsfrFileDownload
45-
:format="format"
46-
:size="size"
47-
:href="href"
48-
:download="download"
49-
:title="title"
50-
/>
51-
`,
52-
})
53-
LienDeTelechargement.args = {
54-
format: 'PDF',
55-
size: '250 Go',
56-
href: 'src/assets/icone-marianne-seule.png',
57-
download: 'marianne.png',
58-
title: 'Titre du téléchargement',
48+
render: (args) => ({
49+
components: {
50+
DsfrFileDownload,
51+
},
52+
setup () {
53+
return { args }
54+
},
55+
template: `
56+
<DsfrFileDownload
57+
:format="args.format"
58+
:size="args.size"
59+
:href="args.href"
60+
:download="args.download"
61+
:title="args.title"
62+
/>
63+
`,
64+
}),
5965
}

0 commit comments

Comments
 (0)