Skip to content

Commit 5e010bd

Browse files
committed
docs: 📝 améliore la documentation
1 parent 663ba97 commit 5e010bd

File tree

14 files changed

+177
-75
lines changed

14 files changed

+177
-75
lines changed

.vitepress/config.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ const composants = [
9999
text: 'DsfrAccordion',
100100
link: '/composants/DsfrAccordion.md',
101101
},
102+
{
103+
text: 'DsfrAccordionsGroup',
104+
link: '/composants/DsfrAccordionsGroup.md',
105+
},
102106
{
103107
text: 'DsfrAlert',
104108
link: '/composants/DsfrAlert.md',
@@ -123,6 +127,10 @@ const composants = [
123127
text: 'DsfrButtonGroup',
124128
link: '/composants/DsfrButtonGroup.md',
125129
},
130+
{
131+
text: 'DsfrCallout',
132+
link: '/composants/DsfrCallout.md',
133+
},
126134
{
127135
text: 'DsfrCard',
128136
link: '/composants/DsfrCard.md',

docs/guide/migrations.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ Il faudra peut-être dans certains cas renommer les icônes car la syntaxe atten
3333

3434
Dans les cas ou le nom de la collection ne contient pas de tiret `-`, alors le `-` est accepté en tant que séparateur entre le nom de collection et le nom d’icône.
3535

36+
### Les onglets
37+
38+
Avant la version 6.x de VueDsfr, pour activer un onglet particulier, il fallait passer la prop `selected` au bon titre d’onglet et à la bonne zone de contenu.
39+
40+
Désormais c’est beaucoup plus simple, il suffit d’utiliser `v-model` sur le composant parent `DsfrTabs`.
41+
3642
## Migration vers 3.x (depuis 1.x ou 2.x)
3743

3844
La migration de la version 1.x ou 2.x vers la version 3.x nécessite un certain nombre de changements

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
"dev": "storybook dev -p 6006",
5252
"vitest": "vitest",
5353
"coverage": "vitest run --coverage",
54-
"test-storybook": "test-storybook --url $TEST_STORYBOOK_URL",
54+
"test-storybook": "cross-env test-storybook --url ${TEST_STORYBOOK_URL:-http://localhost:6006}",
5555
"test": "run-s test:unit",
5656
"test:watch": "vitest",
5757
"test:unit": "vitest run",

src/components/DsfrAccordion/DsfrAccordion.stories.ts

Lines changed: 14 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -49,18 +49,14 @@ export const Accordeon = (args) => ({
4949
},
5050

5151
template: `
52-
<DsfrAccordionsGroup>
52+
<DsfrAccordionsGroup v-model="selectedAccordion">
5353
<DsfrAccordion
5454
:title="title1"
55-
:expanded-id="expandedId"
56-
@expand="expandedId = $event"
5755
>
5856
Contenu de l’accordéon 1
5957
</DsfrAccordion>
6058
<DsfrAccordion
6159
:title="title2"
62-
:expanded-id="expandedId"
63-
@expand="expandedId = $event"
6460
>
6561
Contenu de l’accordéon 2
6662
</DsfrAccordion>
@@ -69,6 +65,7 @@ export const Accordeon = (args) => ({
6965
})
7066
Accordeon.args = {
7167
title: 'Un titre d’accordéon',
68+
selectedAccordion: undefined,
7269
}
7370
Accordeon.play = async ({ canvasElement }) => {
7471
const canvas = within(canvasElement)
@@ -84,12 +81,12 @@ Accordeon.play = async ({ canvasElement }) => {
8481
export const AccordeonSimple = (args) => ({
8582
components: {
8683
DsfrAccordion,
84+
DsfrAccordionsGroup,
8785
},
8886

8987
data () {
9088
return {
9189
...args,
92-
expandedId: undefined,
9390
title1: `${args.title} 1`,
9491
}
9592
},
@@ -104,6 +101,7 @@ export const AccordeonSimple = (args) => ({
104101
})
105102
AccordeonSimple.args = {
106103
title: 'Un titre d’accordéon',
104+
selectedAccordion: undefined,
107105
}
108106
AccordeonSimple.play = async ({ canvasElement }) => {
109107
const canvas = within(canvasElement)
@@ -132,20 +130,16 @@ export const AccordeonDejaOuvert = (args) => ({
132130
},
133131

134132
template: `
135-
<DsfrAccordionsGroup>
133+
<DsfrAccordionsGroup v-model="selectedAccordion">
136134
<DsfrAccordion
137135
:title="title1"
138136
id="accordeon-1"
139-
:expanded-id="expandedId"
140-
@expand="expandedId = $event"
141137
>
142138
Contenu de l’accordéon 1
143139
</DsfrAccordion>
144140
<DsfrAccordion
145141
:title="title2"
146142
id="accordeon-2"
147-
:expanded-id="expandedId"
148-
@expand="expandedId = $event"
149143
>
150144
Contenu de l’accordéon 2
151145
</DsfrAccordion>
@@ -154,6 +148,7 @@ export const AccordeonDejaOuvert = (args) => ({
154148
})
155149
AccordeonDejaOuvert.args = {
156150
title: 'Un titre d’accordéon',
151+
selectedAccordion: 0,
157152
}
158153
AccordeonDejaOuvert.play = async ({ canvasElement }) => {
159154
const canvas = within(canvasElement)
@@ -187,24 +182,18 @@ export const AccordeonDansUnAccordeon = (args) => ({
187182
},
188183

189184
template: `
190-
<DsfrAccordionsGroup>
185+
<DsfrAccordionsGroup v-model="selectedAccordion">
191186
<DsfrAccordion
192187
:title="title1"
193-
:expanded-id="expandedId"
194-
@expand="expandedId = $event"
195188
>
196-
<DsfrAccordionsGroup>
189+
<DsfrAccordionsGroup v-model="selectedSubAccordion">
197190
<DsfrAccordion
198191
:title="titleSub1"
199-
:expanded-id="subExpandedId"
200-
@expand="subExpandedId = $event"
201192
>
202193
Contenu de l’accordéon dans l’accordéon 1.1
203194
</DsfrAccordion>
204195
<DsfrAccordion
205196
:title="titleSub2"
206-
:expanded-id="subExpandedId"
207-
@expand="subExpandedId = $event"
208197
>
209198
Contenu de l’accordéon dans l’accordéon 1.2
210199
</DsfrAccordion>
@@ -216,6 +205,8 @@ export const AccordeonDansUnAccordeon = (args) => ({
216205
AccordeonDansUnAccordeon.args = {
217206
title: 'Un titre d’accordéon',
218207
titleSub: 'Accordéon dans l’accordéon',
208+
selectedAccordion: undefined,
209+
selectedSubAccordion: undefined,
219210
}
220211
AccordeonDansUnAccordeon.play = async ({ canvasElement }) => {
221212
const canvas = within(canvasElement)
@@ -248,18 +239,14 @@ export const AccordeonTitreCustom = (args) => ({
248239
},
249240

250241
template: `
251-
<DsfrAccordionsGroup>
242+
<DsfrAccordionsGroup v-model="selectedAccordion">
252243
<DsfrAccordion
253-
:expanded-id="expandedId"
254-
@expand="expandedId = $event"
255244
>
256245
<template #title><h1>{{title1}}</h1></template>
257246
Contenu de l’accordéon avec titre customisé
258247
</DsfrAccordion>
259248
<DsfrAccordion
260249
:title="title2"
261-
:expanded-id="expandedId"
262-
@expand="expandedId = $event"
263250
>
264251
Test DsfrAccordion
265252
</DsfrAccordion>
@@ -269,6 +256,7 @@ export const AccordeonTitreCustom = (args) => ({
269256
AccordeonTitreCustom.args = {
270257
title1: 'Un titre d’accordéon customisé',
271258
title2: 'Un autre titre d’accordéon',
259+
selectedAccordion: undefined,
272260
}
273261
AccordeonTitreCustom.play = async ({ canvasElement }) => {
274262
const canvas = within(canvasElement)
@@ -297,7 +285,7 @@ export const AccordeonAvecCheckbox = (args) => ({
297285
},
298286

299287
template: `
300-
<DsfrAccordionsGroup>
288+
<DsfrAccordionsGroup v-model="selectedAccordion">
301289
<template
302290
v-for="(accordion, name) in accordions"
303291
:id="\`accordion_${name}\`"
@@ -306,8 +294,6 @@ export const AccordeonAvecCheckbox = (args) => ({
306294
<DsfrAccordion
307295
:id="name"
308296
:title="name"
309-
:expanded-id="expandedId"
310-
@expand="id => expandedId = id"
311297
>
312298
<DsfrCheckboxSet
313299
:options="accordion.options"
@@ -318,6 +304,7 @@ export const AccordeonAvecCheckbox = (args) => ({
318304
`,
319305
})
320306
AccordeonAvecCheckbox.args = {
307+
selectedAccordion: undefined,
321308
accordions: {
322309
'Accordéon 1': {
323310
options: [

src/components/DsfrAccordion/DsfrAccordionsGroup.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ Le composant `DsfrAccordionsGroup` agit comme un conteneur pour les composants d
4141
## ⚙️ Code source des composants
4242

4343
::: code-group
44-
<<< DsfrAccordion.vue
44+
<<< DsfrAccordionsGroup.vue
4545
<<< DsfrAccordion.types.ts
4646
:::
4747

src/components/DsfrAccordion/DsfrAccordionsGroup.stories.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,28 +51,22 @@ export const AccordeonGroupe = (args) => ({
5151
},
5252

5353
template: `
54-
<DsfrAccordionsGroup>
54+
<DsfrAccordionsGroup v-model="selectedAccordion">
5555
<DsfrAccordion
5656
id="accordion-1"
5757
:title="title1"
58-
:expanded-id="expandedId"
59-
@expand="expandedId = $event"
6058
>
6159
Contenu de l’accordéon 1
6260
</DsfrAccordion>
6361
<DsfrAccordion
6462
id="accordion-2"
6563
:title="title2"
66-
:expanded-id="expandedId"
67-
@expand="id => expandedId = id"
6864
>
6965
Contenu de l’accordéon 2
7066
</DsfrAccordion>
7167
<DsfrAccordion
7268
id="accordion-3"
7369
:title="title3"
74-
:expanded-id="expandedId"
75-
@expand="id => expandedId = id"
7670
>
7771
Contenu de l’accordéon 3
7872
</DsfrAccordion>
@@ -83,7 +77,7 @@ AccordeonGroupe.args = {
8377
title1: 'Un titre d’accordéon 1',
8478
title2: 'Un titre d’accordéon 2',
8579
title3: 'Un titre d’accordéon 3',
86-
expandedId: '',
80+
selectedAccordion: undefined,
8781
}
8882

8983
AccordeonGroupe.play = async ({ canvasElement }) => {

src/components/DsfrCallout/DsfrCallout.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,17 @@ Ce composant ne déclenche pas d'événements personnalisés.
3333
::: code-group
3434

3535
<Story data-title="Démo" min-h="200px">
36-
<DsfrConsentDemo />
36+
<DsfrCalloutDemo />
3737
</Story>
3838

39-
<<< docs-demo/DsfrConsentDemo.vue [Code de la démo]
39+
<<< docs-demo/DsfrCalloutDemo.vue [Code de la démo]
4040

41-
<<< DsfrConsent.vue
41+
<<< DsfrCallout.vue
4242

4343
:::
4444

4545
<script setup lang="ts">
46-
import DsfrConsentDemo from './docs-demo/DsfrConsentDemo.vue'
46+
import DsfrCalloutDemo from './docs-demo/DsfrCalloutDemo.vue'
4747
</script>
4848

4949
## ⚙️ Code source du composant
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import type VIcon from '../VIcon/VIcon.vue'
21
import type { DsfrButtonProps } from '../DsfrButton/DsfrButton.types'
2+
import type { VIconProps } from '../VIcon/VIcon.vue'
33

44
export type DsfrCalloutProps = {
55
title?: string
66
content: string
77
titleTag?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'
88
button?: DsfrButtonProps
9-
icon?: string | InstanceType<typeof VIcon>['$props']
9+
icon?: string | VIconProps
1010
}

src/components/DsfrCallout/DsfrCallout.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<script lang="ts" setup>
22
import { computed } from 'vue'
33
4+
import VIcon from '../VIcon/VIcon.vue'
45
import DsfrButton from '../DsfrButton/DsfrButton.vue'
56
67
import type { DsfrCalloutProps } from './DsfrCallout.types'
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<script lang="ts" setup>
2+
import { ref } from 'vue'
3+
4+
import type { VIconProps } from '@/components/VIcon/VIcon.types'
5+
import DsfrCallout from '../DsfrCallout.vue'
6+
import DsfrButton from '../../DsfrButton/DsfrButton.vue'
7+
8+
const title = 'Titre de la mise en avant'
9+
const button = undefined
10+
const icon = 'ri:notification-3-line'
11+
const content = 'Lorem ipsum dolor sit amet, consectetur adipiscing, incididunt, ut labore et dol'
12+
const titleTag = undefined
13+
14+
const animateTitle = 'Titre de la mise en avant stylée'
15+
const animatedIcon: VIconProps = { name: 'bi:bell', animation: 'ring' }
16+
const animatedtitleTag = 'h4'
17+
const buttonIcon = ref<VIconProps>({ name: 'ri-refresh-line', animation: 'spin' })
18+
const possibleAnimations = ['spin', 'wrench', 'pulse', 'spin-pulse', 'flash', 'float', 'ring'] as const
19+
const getRandomNb = (max = 1000, min = 0) => Math.floor(min + Math.random() * (max + 1 - min))
20+
function getRandomEl<T> (x: readonly T[]): T | undefined {
21+
if (x.length === 0) {
22+
return undefined
23+
}
24+
return x.at(getRandomNb(x.length - 1))
25+
}
26+
const getRandomAnimation = () => getRandomEl<(typeof possibleAnimations)[number]>(possibleAnimations)
27+
</script>
28+
29+
<template>
30+
<DsfrCallout
31+
:title="`${title} (${titleTag ?? 'h3'})`"
32+
:content="content"
33+
:button="button"
34+
:icon="icon"
35+
:title-tag="titleTag"
36+
/>
37+
<DsfrCallout
38+
:title="`${animateTitle} (${animatedtitleTag ?? 'h3'})`"
39+
:button="button"
40+
:icon="animatedIcon"
41+
:title-tag="animatedtitleTag"
42+
>
43+
Contenu <em>élaboré</em> avec d’autres composants
44+
<DsfrButton
45+
type="button"
46+
:label="`(${buttonIcon.animation}) Cliquez-moi pour changer l’animation de l’icône !`"
47+
:icon="buttonIcon"
48+
@click="buttonIcon.animation = getRandomAnimation()"
49+
/>
50+
</DsfrCallout>
51+
</template>

0 commit comments

Comments
 (0)