@cnamts/synapse 0.0.8-alpha → 0.0.10-alpha
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.
- package/dist/design-system-v3.d.ts +1152 -127
- package/dist/design-system-v3.js +4888 -2605
- package/dist/design-system-v3.umd.cjs +1 -1
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/src/assets/settings.scss +1 -1
- package/src/components/ContextualMenu/Accessibilite.mdx +14 -0
- package/src/components/ContextualMenu/Accessibilite.stories.ts +191 -0
- package/src/components/ContextualMenu/AccessibiliteItems.ts +89 -0
- package/src/components/ContextualMenu/constants/ExpertiseLevelEnum.ts +4 -0
- package/src/components/Customs/SySelect/SySelect.stories.ts +7 -7
- package/src/components/Customs/SySelect/SySelect.vue +9 -4
- package/src/components/Customs/SySelect/tests/SySelect.spec.ts +2 -2
- package/src/components/Customs/SyTextField/SyTextField.stories.ts +187 -2
- package/src/components/Customs/SyTextField/SyTextField.vue +185 -16
- package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +2 -4
- package/src/components/Customs/SyTextField/tests/__snapshots__/SyTextField.spec.ts.snap +18 -16
- package/src/components/Customs/SyTextField/types.d.ts +2 -2
- package/src/components/DatePicker/Accessibilite.mdx +14 -0
- package/src/components/DatePicker/Accessibilite.stories.ts +191 -0
- package/src/components/DatePicker/AccessibiliteItems.ts +233 -0
- package/src/components/DatePicker/DatePicker.mdx +186 -0
- package/src/components/DatePicker/DatePicker.stories.ts +787 -0
- package/src/components/DatePicker/DatePicker.vue +574 -0
- package/src/components/DatePicker/DateTextInput.vue +409 -0
- package/src/components/DatePicker/constants/ExpertiseLevelEnum.ts +4 -0
- package/src/components/DatePicker/tests/DatePicker.spec.ts +266 -0
- package/src/components/DialogBox/DialogBox.stories.ts +1 -1
- package/src/components/ExternalLinks/Accessibilite.mdx +14 -0
- package/src/components/ExternalLinks/Accessibilite.stories.ts +191 -0
- package/src/components/ExternalLinks/AccessibiliteItems.ts +197 -0
- package/src/components/ExternalLinks/constants/ExpertiseLevelEnum.ts +4 -0
- package/src/components/ExternalLinks/tests/__snapshots__/ExternalLinks.spec.ts.snap +9 -9
- package/src/components/FileList/FileList.mdx +103 -0
- package/src/components/FileList/FileList.stories.ts +562 -0
- package/src/components/FileList/FileList.vue +78 -0
- package/src/components/FileList/UploadItem/UploadItem.vue +270 -0
- package/src/components/FileList/UploadItem/locales.ts +9 -0
- package/src/components/FileList/tests/FileList.spec.ts +176 -0
- package/src/components/FilePreview/FilePreview.mdx +82 -0
- package/src/components/FilePreview/FilePreview.stories.ts +242 -0
- package/src/components/FilePreview/FilePreview.vue +68 -0
- package/src/components/FilePreview/config.ts +10 -0
- package/src/components/FilePreview/locales.ts +4 -0
- package/src/components/FilePreview/tests/FilePreview.spec.ts +124 -0
- package/src/components/FilePreview/tests/__snapshots__/FilePreview.spec.ts.snap +11 -0
- package/src/components/FileUpload/FileUpload.mdx +165 -0
- package/src/components/FileUpload/FileUpload.stories.ts +429 -0
- package/src/components/FileUpload/FileUpload.vue +195 -0
- package/src/components/FileUpload/FileUploadContent.vue +109 -0
- package/src/components/FileUpload/locales.ts +10 -0
- package/src/components/FileUpload/tests/FileUpload.spec.ts +332 -0
- package/src/components/FileUpload/tests/__snapshots__/FileUpload.spec.ts.snap +7 -0
- package/src/components/FileUpload/useFileDrop.ts +23 -0
- package/src/components/FileUpload/validateFiles.ts +39 -0
- package/src/components/NirField/NirField.stories.ts +1 -1
- package/src/components/NirField/NirField.vue +2 -1
- package/src/components/PasswordField/Accessibilite.mdx +14 -0
- package/src/components/PasswordField/Accessibilite.stories.ts +191 -0
- package/src/components/PasswordField/AccessibiliteItems.ts +184 -0
- package/src/components/PasswordField/PasswordField.vue +3 -3
- package/src/components/PasswordField/constants/ExpertiseLevelEnum.ts +4 -0
- package/src/components/PeriodField/PeriodField.mdx +32 -0
- package/src/components/PeriodField/PeriodField.stories.ts +807 -0
- package/src/components/PeriodField/PeriodField.vue +355 -0
- package/src/components/PeriodField/tests/PeriodField.spec.ts +348 -0
- package/src/components/PhoneField/PhoneField.vue +44 -60
- package/src/components/PhoneField/tests/PhoneField.spec.ts +0 -15
- package/src/components/RangeField/Accessibilite.mdx +14 -0
- package/src/components/RangeField/Accessibilite.stories.ts +191 -0
- package/src/components/RangeField/AccessibiliteItems.ts +179 -0
- package/src/components/RangeField/RangeField.mdx +54 -0
- package/src/components/RangeField/RangeField.stories.ts +189 -0
- package/src/components/RangeField/RangeField.vue +157 -0
- package/src/components/RangeField/RangeSlider/RangeSlider.vue +387 -0
- package/src/components/RangeField/RangeSlider/Tooltip/Tooltip.vue +64 -0
- package/src/components/RangeField/RangeSlider/tests/__snapshots__/rangeSlider.spec.ts.snap +27 -0
- package/src/components/RangeField/RangeSlider/tests/rangeSlider.spec.ts +100 -0
- package/src/components/RangeField/RangeSlider/tests/useDoubleSlider.spec.ts +246 -0
- package/src/components/RangeField/RangeSlider/tests/useMouseSlide.spec.ts +204 -0
- package/src/components/RangeField/RangeSlider/tests/useThumb.spec.ts +22 -0
- package/src/components/RangeField/RangeSlider/tests/useThumbKeyboard.spec.ts +233 -0
- package/src/components/RangeField/RangeSlider/tests/useTooltipsNudge.spec.ts +150 -0
- package/src/components/RangeField/RangeSlider/tests/useTrack.spec.ts +314 -0
- package/src/components/RangeField/RangeSlider/tests/vAnimateClick.spec.ts +32 -0
- package/src/components/RangeField/RangeSlider/types.ts +15 -0
- package/src/components/RangeField/RangeSlider/useMouseSlide.ts +109 -0
- package/src/components/RangeField/RangeSlider/useRangeSlider.ts +126 -0
- package/src/components/RangeField/RangeSlider/useThumb.ts +18 -0
- package/src/components/RangeField/RangeSlider/useThumbKeyboard.ts +84 -0
- package/src/components/RangeField/RangeSlider/useTooltipsNudge.ts +92 -0
- package/src/components/RangeField/RangeSlider/useTrack.ts +116 -0
- package/src/components/RangeField/RangeSlider/vAnimateClick.ts +19 -0
- package/src/components/RangeField/config.ts +7 -0
- package/src/components/RangeField/constants/ExpertiseLevelEnum.ts +4 -0
- package/src/components/RangeField/locales.ts +4 -0
- package/src/components/RangeField/tests/RangeField.spec.ts +224 -0
- package/src/components/RangeField/tests/__snapshots__/RangeField.spec.ts.snap +379 -0
- package/src/components/RatingPicker/Accessibilite.mdx +14 -0
- package/src/components/RatingPicker/Accessibilite.stories.ts +191 -0
- package/src/components/RatingPicker/AccessibiliteItems.ts +208 -0
- package/src/components/RatingPicker/EmotionPicker/EmotionPicker.vue +205 -0
- package/src/components/RatingPicker/EmotionPicker/locales.ts +3 -0
- package/src/components/RatingPicker/EmotionPicker/tests/EmotionPicker.spec.ts +104 -0
- package/src/components/RatingPicker/EmotionPicker/tests/__snapshots__/EmotionPicker.spec.ts.snap +66 -0
- package/src/components/RatingPicker/NumberPicker/NumberPicker.vue +159 -0
- package/src/components/RatingPicker/NumberPicker/locales.ts +4 -0
- package/src/components/RatingPicker/NumberPicker/tests/NumberPicker.spec.ts +73 -0
- package/src/components/RatingPicker/NumberPicker/tests/__snapshots__/NumberPicker.spec.ts.snap +105 -0
- package/src/components/RatingPicker/Rating.ts +45 -0
- package/src/components/RatingPicker/RatingPicker.mdx +56 -0
- package/src/components/RatingPicker/RatingPicker.stories.ts +515 -0
- package/src/components/RatingPicker/RatingPicker.vue +122 -0
- package/src/components/RatingPicker/StarsPicker/StarsPicker.vue +116 -0
- package/src/components/RatingPicker/StarsPicker/tests/StarsPicker.spec.ts +95 -0
- package/src/components/RatingPicker/StarsPicker/tests/__snapshots__/StarsPicker.spec.ts.snap +36 -0
- package/src/components/RatingPicker/constants/ExpertiseLevelEnum.ts +4 -0
- package/src/components/RatingPicker/locales.ts +3 -0
- package/src/components/RatingPicker/tests/Rating.spec.ts +104 -0
- package/src/components/RatingPicker/tests/RatingPicker.spec.ts +187 -0
- package/src/components/RatingPicker/tests/__snapshots__/RatingPicker.spec.ts.snap +108 -0
- package/src/components/SearchListField/Accessibilite.mdx +14 -0
- package/src/components/SearchListField/Accessibilite.stories.ts +191 -0
- package/src/components/SearchListField/AccessibiliteItems.ts +310 -0
- package/src/components/SearchListField/SearchListField.mdx +74 -0
- package/src/components/SearchListField/SearchListField.stories.ts +126 -0
- package/src/components/SearchListField/SearchListField.vue +194 -0
- package/src/components/SearchListField/constants/ExpertiseLevelEnum.ts +4 -0
- package/src/components/SearchListField/locales.ts +5 -0
- package/src/components/SearchListField/tests/SearchListField.spec.ts +323 -0
- package/src/components/SearchListField/types.d.ts +4 -0
- package/src/components/SelectBtnField/Accessibilite.mdx +14 -0
- package/src/components/SelectBtnField/Accessibilite.stories.ts +191 -0
- package/src/components/SelectBtnField/AccessibiliteItems.ts +191 -0
- package/src/components/SelectBtnField/SelectBtnField.mdx +50 -0
- package/src/components/SelectBtnField/SelectBtnField.stories.ts +763 -0
- package/src/components/SelectBtnField/SelectBtnField.vue +283 -0
- package/src/components/SelectBtnField/config.ts +11 -0
- package/src/components/SelectBtnField/constants/ExpertiseLevelEnum.ts +4 -0
- package/src/components/SelectBtnField/tests/SelectBtnField.spec.ts +327 -0
- package/src/components/SelectBtnField/tests/__snapshots__/SelectBtnField.spec.ts.snap +125 -0
- package/src/components/SelectBtnField/types.d.ts +11 -0
- package/src/components/SyAlert/SyAlert.vue +11 -9
- package/src/components/TableToolbar/TableToolbar.mdx +130 -0
- package/src/components/TableToolbar/TableToolbar.stories.ts +935 -0
- package/src/components/TableToolbar/TableToolbar.vue +168 -0
- package/src/components/TableToolbar/config.ts +24 -0
- package/src/components/TableToolbar/locales.ts +6 -0
- package/src/components/TableToolbar/tests/TableToolbar.spec.ts +166 -0
- package/src/components/TableToolbar/tests/__snapshots__/TableToolbar.spec.ts.snap +359 -0
- package/src/components/index.ts +11 -1
- package/src/composables/rules/useFieldValidation.ts +174 -44
- package/src/designTokens/index.ts +3 -3
- package/src/stories/Fondamentaux/CustomisationEtThemes.mdx +52 -2
- package/src/utils/calcHumanFileSize/index.ts +12 -0
- package/src/utils/calcHumanFileSize/tests/calcHumanFileSize.spec.ts +21 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts" setup>
|
|
2
|
-
import { computed, ref } from 'vue'
|
|
2
|
+
import { computed, ref, watch } from 'vue'
|
|
3
3
|
import type { IconType, VariantStyle, ColorType } from './types'
|
|
4
4
|
import {
|
|
5
5
|
mdiAlertOutline,
|
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
mdiInformationOutline,
|
|
8
8
|
mdiClose,
|
|
9
9
|
mdiInformation,
|
|
10
|
+
mdiCalendar,
|
|
10
11
|
} from '@mdi/js'
|
|
11
12
|
|
|
12
|
-
// only variantStyle need a default value
|
|
13
|
-
/* eslint-disable vue/require-default-prop */
|
|
14
13
|
const props = withDefaults(
|
|
15
14
|
defineProps<{
|
|
15
|
+
modelValue?: string | number | null
|
|
16
16
|
prependIcon?: IconType
|
|
17
17
|
appendIcon?: IconType
|
|
18
18
|
prependInnerIcon?: IconType
|
|
@@ -23,22 +23,121 @@
|
|
|
23
23
|
showDivider?: boolean
|
|
24
24
|
label?: string
|
|
25
25
|
required?: boolean
|
|
26
|
-
errorMessages?: string[]
|
|
26
|
+
errorMessages?: string[] | null
|
|
27
|
+
isReadOnly?: boolean
|
|
28
|
+
isActive?: boolean
|
|
29
|
+
baseColor?: string
|
|
30
|
+
bgColor?: string
|
|
31
|
+
centerAffix?: boolean
|
|
32
|
+
counter?: string | number | boolean
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- This is a generic type
|
|
34
|
+
counterValue?: number | ((value: any) => number)
|
|
35
|
+
density?: 'default' | 'comfortable' | 'compact'
|
|
36
|
+
direction?: 'horizontal' | 'vertical'
|
|
37
|
+
isDirty?: boolean
|
|
38
|
+
isDisabled?: boolean
|
|
39
|
+
isOnError?: boolean
|
|
40
|
+
isFlat?: boolean
|
|
41
|
+
isFocused?: boolean
|
|
42
|
+
areDetailsHidden?: boolean | 'auto'
|
|
43
|
+
areSpinButtonsHidden?: boolean
|
|
44
|
+
hint?: string
|
|
45
|
+
id?: string
|
|
46
|
+
loading?: string | boolean
|
|
47
|
+
maxErrors?: string | number
|
|
48
|
+
maxWidth?: string | number
|
|
49
|
+
messages?: string | string[]
|
|
50
|
+
minWidth?: string | number
|
|
51
|
+
name?: string
|
|
52
|
+
displayPersistentClear?: boolean
|
|
53
|
+
displayPersistentCounter?: boolean
|
|
54
|
+
displayPersistentHint?: boolean
|
|
55
|
+
displayPersistentPlaceholder?: boolean
|
|
56
|
+
placeholder?: string
|
|
57
|
+
prefix?: string
|
|
58
|
+
isReversed?: boolean
|
|
59
|
+
role?: string
|
|
60
|
+
rounded?: string | number | boolean
|
|
61
|
+
isOnSingleLine?: boolean
|
|
62
|
+
suffix?: string
|
|
63
|
+
theme?: string
|
|
64
|
+
isTiled?: boolean
|
|
65
|
+
type?: string
|
|
66
|
+
width?: string | number
|
|
67
|
+
displayAsterisk?: boolean
|
|
68
|
+
noIcon?: boolean
|
|
27
69
|
}>(),
|
|
28
70
|
{
|
|
29
|
-
|
|
71
|
+
modelValue: undefined,
|
|
72
|
+
prependIcon: undefined,
|
|
73
|
+
appendIcon: undefined,
|
|
74
|
+
appendInnerIcon: undefined,
|
|
75
|
+
prependInnerIcon: undefined,
|
|
76
|
+
variantStyle: 'outlined',
|
|
77
|
+
color: 'primary',
|
|
78
|
+
label: 'custom label',
|
|
79
|
+
errorMessages: null,
|
|
80
|
+
isReadOnly: false,
|
|
81
|
+
isClearable: false,
|
|
82
|
+
isActive: false,
|
|
83
|
+
baseColor: undefined,
|
|
84
|
+
bgColor: undefined,
|
|
85
|
+
centerAffix: undefined,
|
|
86
|
+
counter: false,
|
|
87
|
+
counterValue: undefined,
|
|
88
|
+
density: 'default',
|
|
89
|
+
direction: 'horizontal',
|
|
90
|
+
isDirty: false,
|
|
91
|
+
isDisabled: false,
|
|
92
|
+
isOnError: false,
|
|
93
|
+
isFlat: false,
|
|
94
|
+
isFocused: false,
|
|
95
|
+
areDetailsHidden: false,
|
|
96
|
+
areSpinButtonsHidden: false,
|
|
97
|
+
hint: undefined,
|
|
98
|
+
id: undefined,
|
|
99
|
+
loading: false,
|
|
100
|
+
maxErrors: 2,
|
|
101
|
+
maxWidth: undefined,
|
|
102
|
+
messages: undefined,
|
|
103
|
+
minWidth: undefined,
|
|
104
|
+
name: undefined,
|
|
105
|
+
displayPersistentClear: false,
|
|
106
|
+
displayPersistentCounter: false,
|
|
107
|
+
displayPersistentHint: false,
|
|
108
|
+
displayPersistentPlaceholder: false,
|
|
109
|
+
placeholder: undefined,
|
|
110
|
+
prefix: undefined,
|
|
111
|
+
isReversed: false,
|
|
112
|
+
role: undefined,
|
|
113
|
+
rounded: undefined,
|
|
114
|
+
isOnSingleLine: false,
|
|
115
|
+
suffix: undefined,
|
|
116
|
+
theme: undefined,
|
|
117
|
+
isTiled: false,
|
|
118
|
+
type: 'text',
|
|
119
|
+
width: undefined,
|
|
120
|
+
displayAsterisk: false,
|
|
121
|
+
noIcon: false,
|
|
30
122
|
},
|
|
31
123
|
)
|
|
32
124
|
|
|
33
|
-
const ICONS: Record<IconType
|
|
125
|
+
const ICONS: Record<NonNullable<IconType>, string> = {
|
|
34
126
|
info: mdiInformationOutline,
|
|
35
127
|
success: mdiCheck,
|
|
36
128
|
warning: mdiAlertOutline,
|
|
37
129
|
error: mdiInformation,
|
|
38
130
|
close: mdiClose,
|
|
131
|
+
calendar: mdiCalendar,
|
|
39
132
|
}
|
|
40
133
|
|
|
41
|
-
const model =
|
|
134
|
+
const model = computed({
|
|
135
|
+
get: () => props.modelValue,
|
|
136
|
+
set: (value) => {
|
|
137
|
+
emit('update:model-value', value)
|
|
138
|
+
},
|
|
139
|
+
})
|
|
140
|
+
|
|
42
141
|
const isBlurred = ref(false)
|
|
43
142
|
|
|
44
143
|
const hasError = computed(() => {
|
|
@@ -50,11 +149,19 @@
|
|
|
50
149
|
}
|
|
51
150
|
|
|
52
151
|
const appendInnerIconColor = computed(() => {
|
|
53
|
-
return props.appendInnerIcon === 'error' || props.appendInnerIcon === 'success'
|
|
152
|
+
return props.appendInnerIcon === 'error' || props.appendInnerIcon === 'success' || props.appendInnerIcon === 'warning'
|
|
54
153
|
? props.appendInnerIcon
|
|
55
154
|
: 'black'
|
|
56
155
|
})
|
|
57
156
|
|
|
157
|
+
const isShouldDisplayAsterisk = computed(() => {
|
|
158
|
+
return props.displayAsterisk && props.required
|
|
159
|
+
})
|
|
160
|
+
|
|
161
|
+
const labelWithAsterisk = computed(() => {
|
|
162
|
+
return isShouldDisplayAsterisk.value ? `${props.label} *` : props.label
|
|
163
|
+
})
|
|
164
|
+
|
|
58
165
|
const dividerProps = {
|
|
59
166
|
thickness: 2,
|
|
60
167
|
length: '25px',
|
|
@@ -62,6 +169,14 @@
|
|
|
62
169
|
opacity: '1',
|
|
63
170
|
}
|
|
64
171
|
|
|
172
|
+
const emit = defineEmits(['update:model-value', 'clear', 'prepend-icon-click', 'append-icon-click'])
|
|
173
|
+
|
|
174
|
+
watch(model, (newValue) => {
|
|
175
|
+
if (props.isClearable && newValue === '') {
|
|
176
|
+
emit('clear')
|
|
177
|
+
}
|
|
178
|
+
})
|
|
179
|
+
|
|
65
180
|
defineExpose({
|
|
66
181
|
appendInnerIconColor,
|
|
67
182
|
})
|
|
@@ -69,37 +184,90 @@
|
|
|
69
184
|
|
|
70
185
|
<template>
|
|
71
186
|
<VTextField
|
|
187
|
+
:id="props.id"
|
|
72
188
|
v-model="model"
|
|
189
|
+
:active="props.isActive"
|
|
73
190
|
:aria-label="props.label"
|
|
191
|
+
:base-color="props.baseColor"
|
|
192
|
+
:bg-color="props.bgColor"
|
|
193
|
+
:center-affix="props.centerAffix"
|
|
74
194
|
:clear-icon="ICONS.close"
|
|
75
195
|
:clearable="props.isClearable"
|
|
76
196
|
:color="props.color"
|
|
197
|
+
:counter-value="props.counterValue"
|
|
198
|
+
:density="props.density"
|
|
199
|
+
:direction="props.direction"
|
|
200
|
+
:dirty="props.isDirty"
|
|
201
|
+
:disabled="props.isDisabled"
|
|
202
|
+
:display-asterisk="isShouldDisplayAsterisk"
|
|
203
|
+
:error="props.isOnError"
|
|
77
204
|
:error-messages="props.errorMessages"
|
|
78
|
-
:
|
|
205
|
+
:flat="props.isFlat"
|
|
206
|
+
:focused="props.isFocused"
|
|
207
|
+
:hide-details="props.areDetailsHidden"
|
|
208
|
+
:hide-spin-buttons="props.areSpinButtonsHidden"
|
|
209
|
+
:hint="props.hint"
|
|
210
|
+
:label="labelWithAsterisk"
|
|
211
|
+
:loading="props.loading"
|
|
212
|
+
:max-errors="props.maxErrors"
|
|
213
|
+
:max-width="props.maxWidth"
|
|
214
|
+
:messages="props.messages"
|
|
215
|
+
:min-width="props.minWidth"
|
|
216
|
+
:name="props.name"
|
|
217
|
+
:no-icon="props.noIcon"
|
|
218
|
+
:persistent-clear="props.displayPersistentClear"
|
|
219
|
+
:persistent-counter="props.displayPersistentCounter"
|
|
220
|
+
:persistent-hint="props.displayPersistentHint"
|
|
221
|
+
:persistent-placeholder="displayPersistentPlaceholder"
|
|
222
|
+
:placeholder="props.placeholder"
|
|
223
|
+
:prefix="props.prefix"
|
|
224
|
+
:readonly="props.isReadOnly"
|
|
225
|
+
:reverse="props.isReversed"
|
|
226
|
+
:role="props.role"
|
|
227
|
+
:rounded="props.rounded"
|
|
79
228
|
:rules="props.required ? ['Le champ est requis.'] : []"
|
|
229
|
+
:single-line="props.isOnSingleLine"
|
|
230
|
+
:suffix="props.suffix"
|
|
231
|
+
:theme="props.theme"
|
|
232
|
+
:tile="props.isTiled"
|
|
233
|
+
:type="props.type"
|
|
80
234
|
:variant="props.variantStyle"
|
|
235
|
+
:width="props.width"
|
|
81
236
|
@blur="checkErrorOnBlur"
|
|
82
237
|
>
|
|
83
|
-
<template
|
|
238
|
+
<template
|
|
239
|
+
v-if="props.prependIcon && !props.noIcon"
|
|
240
|
+
#prepend
|
|
241
|
+
>
|
|
84
242
|
<slot name="prepend">
|
|
85
243
|
<VIcon
|
|
86
|
-
|
|
244
|
+
:aria-label="props.label ? `${props.label} - bouton ${props.prependIcon}` : `Bouton ${props.prependIcon}`"
|
|
245
|
+
:color="appendInnerIconColor"
|
|
87
246
|
:icon="ICONS[props.prependIcon]"
|
|
247
|
+
role="button"
|
|
248
|
+
@click="$emit('prepend-icon-click')"
|
|
88
249
|
/>
|
|
89
250
|
</slot>
|
|
90
251
|
</template>
|
|
91
|
-
<template
|
|
252
|
+
<template
|
|
253
|
+
v-if="props.appendIcon && !props.noIcon"
|
|
254
|
+
#append
|
|
255
|
+
>
|
|
92
256
|
<slot name="append">
|
|
93
257
|
<VIcon
|
|
94
|
-
|
|
258
|
+
:aria-label="props.label ? `${props.label} - bouton ${props.appendIcon}` : `Bouton ${props.appendIcon}`"
|
|
259
|
+
:color="appendInnerIconColor"
|
|
95
260
|
:icon="ICONS[props.appendIcon]"
|
|
261
|
+
role="button"
|
|
262
|
+
@click="$emit('append-icon-click')"
|
|
96
263
|
/>
|
|
97
264
|
</slot>
|
|
98
265
|
</template>
|
|
99
266
|
<template #prepend-inner>
|
|
100
267
|
<slot name="prepend-inner">
|
|
101
268
|
<VIcon
|
|
102
|
-
v-if="props.prependInnerIcon"
|
|
269
|
+
v-if="props.prependInnerIcon && !props.noIcon"
|
|
270
|
+
:aria-label="props.label ? `${props.label} - bouton ${props.prependInnerIcon}` : `Bouton ${props.prependInnerIcon}`"
|
|
103
271
|
:icon="ICONS[props.prependInnerIcon]"
|
|
104
272
|
/>
|
|
105
273
|
</slot>
|
|
@@ -112,11 +280,12 @@
|
|
|
112
280
|
</template>
|
|
113
281
|
<template #append-inner>
|
|
114
282
|
<slot name="append-inner">
|
|
115
|
-
<VIcon v-if="hasError">
|
|
283
|
+
<VIcon v-if="hasError && !props.appendInnerIcon">
|
|
116
284
|
{{ mdiInformation }}
|
|
117
285
|
</VIcon>
|
|
118
286
|
<VIcon
|
|
119
|
-
v-if="props.appendInnerIcon"
|
|
287
|
+
v-if="props.appendInnerIcon && !props.noIcon"
|
|
288
|
+
:aria-label="props.label ? `${props.label} - bouton ${props.appendInnerIcon}` : `Bouton ${props.appendInnerIcon}`"
|
|
120
289
|
:class="{ 'error-icon': props.appendInnerIcon === 'error' }"
|
|
121
290
|
:color="appendInnerIconColor"
|
|
122
291
|
:icon="ICONS[props.appendInnerIcon]"
|
|
@@ -33,13 +33,11 @@ describe('SyTextField', () => {
|
|
|
33
33
|
append: '<div data-testid="append-slot">Append Slot Content</div>',
|
|
34
34
|
})
|
|
35
35
|
|
|
36
|
-
const prependSlot = wrapper.find('
|
|
37
|
-
const appendSlot = wrapper.find('
|
|
36
|
+
const prependSlot = wrapper.find('.v-field--prepended')
|
|
37
|
+
const appendSlot = wrapper.find('.v-field--appended')
|
|
38
38
|
|
|
39
39
|
expect(prependSlot.exists()).toBe(true)
|
|
40
|
-
expect(prependSlot.text()).toBe('Prepend Slot Content')
|
|
41
40
|
expect(appendSlot.exists()).toBe(true)
|
|
42
|
-
expect(appendSlot.text()).toBe('Append Slot Content')
|
|
43
41
|
})
|
|
44
42
|
|
|
45
43
|
it('renders inner slots correctly', () => {
|
|
@@ -2,41 +2,43 @@
|
|
|
2
2
|
|
|
3
3
|
exports[`SyTextField > matches snapshot 1`] = `
|
|
4
4
|
"<div class="v-input v-input--horizontal v-input--center-affix v-input--density-default v-theme--light v-locale--is-ltr v-text-field">
|
|
5
|
-
<div class="v-input__prepend"><i class="M11,9H13V7H11M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M11,17H13V11H11V17Z mdi v-icon notranslate v-theme--light v-icon--size-default" aria-hidden="
|
|
5
|
+
<div class="v-input__prepend"><i class="M11,9H13V7H11M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M11,17H13V11H11V17Z mdi v-icon notranslate v-theme--light v-icon--size-default text-error v-icon--clickable" role="button" aria-hidden="false" tabindex="0" aria-label="custom label - bouton info"></i>
|
|
6
6
|
<!---->
|
|
7
7
|
</div>
|
|
8
8
|
<div class="v-input__control">
|
|
9
|
-
<div class="v-field v-field--appended v-field--center-affix v-field--prepended v-field--
|
|
9
|
+
<div class="v-field v-field--appended v-field--center-affix v-field--prepended v-field--variant-filled v-theme--light v-locale--is-ltr">
|
|
10
10
|
<div class="v-field__overlay"></div>
|
|
11
11
|
<div class="v-field__loader">
|
|
12
12
|
<div class="v-progress-linear v-theme--light v-locale--is-ltr" style="top: 0px; height: 0px; --v-progress-linear-height: 2px;" role="progressbar" aria-hidden="true" aria-valuemin="0" aria-valuemax="100">
|
|
13
13
|
<!---->
|
|
14
|
-
<div class="v-progress-linear__background" style="opacity: NaN;"></div>
|
|
15
|
-
<div class="v-progress-linear__buffer" style="opacity: NaN; width: 0%;"></div>
|
|
14
|
+
<div class="v-progress-linear__background bg-primary" style="opacity: NaN;"></div>
|
|
15
|
+
<div class="v-progress-linear__buffer bg-primary" style="opacity: NaN; width: 0%;"></div>
|
|
16
16
|
<transition-stub name="fade-transition" appear="false" persisted="false" css="true">
|
|
17
17
|
<div class="v-progress-linear__indeterminate">
|
|
18
|
-
<div class="v-progress-linear__indeterminate long"></div>
|
|
19
|
-
<div class="v-progress-linear__indeterminate short"></div>
|
|
18
|
+
<div class="v-progress-linear__indeterminate long bg-primary"></div>
|
|
19
|
+
<div class="v-progress-linear__indeterminate short bg-primary"></div>
|
|
20
20
|
</div>
|
|
21
21
|
</transition-stub>
|
|
22
22
|
<!---->
|
|
23
23
|
</div>
|
|
24
24
|
</div>
|
|
25
25
|
<div class="v-field__prepend-inner">
|
|
26
|
-
<!----><i class="M12,2L1,21H23M12,6L19.53,19H4.47M11,10V14H13V10M11,16V18H13V16 mdi v-icon notranslate v-theme--light v-icon--size-default" aria-hidden="true"></i>
|
|
26
|
+
<!----><i class="M12,2L1,21H23M12,6L19.53,19H4.47M11,10V14H13V10M11,16V18H13V16 mdi v-icon notranslate v-theme--light v-icon--size-default" aria-hidden="true" aria-label="custom label - bouton warning"></i>
|
|
27
27
|
<hr class="v-divider v-divider--vertical v-theme--light text-primary mt-4 pa-1" style="height: 25px; border-right-width: 2px; --v-border-opacity: 1;" aria-orientation="vertical" role="separator">
|
|
28
28
|
</div>
|
|
29
|
-
<div class="v-field__field" data-no-activator="">
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
<div class="v-field__field" data-no-activator=""><label class="v-label v-field-label v-field-label--floating" aria-hidden="true" for="input-0">
|
|
30
|
+
<!---->custom label
|
|
31
|
+
</label><label class="v-label v-field-label" for="input-0">
|
|
32
|
+
<!---->custom label
|
|
33
|
+
</label>
|
|
34
|
+
<!----><input size="1" type="text" id="input-0" aria-describedby="input-0-messages" aria-label="custom label" display-asterisk="false" no-icon="false" class="v-field__input">
|
|
33
35
|
<!---->
|
|
34
36
|
</div>
|
|
35
37
|
<transition-stub name="expand-x-transition" appear="false" persisted="false" css="true">
|
|
36
|
-
<div class="v-field__clearable" style="display: none;"><i class="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z mdi v-icon notranslate v-theme--light v-icon--size-default v-icon--clickable" role="button" aria-hidden="false" tabindex="0" aria-label="Clear "></i></div>
|
|
38
|
+
<div class="v-field__clearable" style="display: none;"><i class="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z mdi v-icon notranslate v-theme--light v-icon--size-default v-icon--clickable" role="button" aria-hidden="false" tabindex="0" aria-label="Clear custom label"></i></div>
|
|
37
39
|
</transition-stub>
|
|
38
40
|
<div class="v-field__append-inner">
|
|
39
|
-
<!--v-if--><i class="M13,9H11V7H13M13,17H11V11H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z mdi v-icon notranslate v-theme--light v-icon--size-default text-error error-icon" aria-hidden="true"></i>
|
|
41
|
+
<!--v-if--><i class="M13,9H11V7H13M13,17H11V11H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z mdi v-icon notranslate v-theme--light v-icon--size-default text-error error-icon" aria-hidden="true" aria-label="custom label - bouton error"></i>
|
|
40
42
|
<!---->
|
|
41
43
|
</div>
|
|
42
44
|
<div class="v-field__outline">
|
|
@@ -46,10 +48,10 @@ exports[`SyTextField > matches snapshot 1`] = `
|
|
|
46
48
|
</div>
|
|
47
49
|
</div>
|
|
48
50
|
<div class="v-input__append">
|
|
49
|
-
<!----><i class="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z mdi v-icon notranslate v-theme--light v-icon--size-default" aria-hidden="
|
|
51
|
+
<!----><i class="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z mdi v-icon notranslate v-theme--light v-icon--size-default text-error v-icon--clickable" role="button" aria-hidden="false" tabindex="0" aria-label="custom label - bouton success"></i>
|
|
50
52
|
</div>
|
|
51
|
-
<div class="v-input__details">
|
|
52
|
-
<transition-group-stub name="slide-y-transition" tag="div" appear="false" persisted="false" css="true" class="v-messages"
|
|
53
|
+
<div id="input-0-messages" class="v-input__details" role="alert" aria-live="polite">
|
|
54
|
+
<transition-group-stub name="slide-y-transition" tag="div" appear="false" persisted="false" css="true" class="v-messages">
|
|
53
55
|
<!---->
|
|
54
56
|
</transition-group-stub>
|
|
55
57
|
<!---->
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export type IconType = 'info' | 'success' | 'warning' | 'error' | 'close'
|
|
2
|
-
export type VariantStyle = 'outlined' | 'filled' | 'solo' | 'solo-inverted' | 'solo-filled'
|
|
1
|
+
export type IconType = 'info' | 'success' | 'warning' | 'error' | 'close' | 'calendar' | undefined
|
|
2
|
+
export type VariantStyle = 'outlined' | 'filled' | 'solo' | 'solo-inverted' | 'solo-filled' | 'underlined'
|
|
3
3
|
export type ColorType = 'primary' | 'secondary' | 'success' | 'info' | 'warning' | 'error'
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Meta, Story } from '@storybook/addon-docs';
|
|
2
|
+
import * as AccessStories from './Accessibilite.stories.ts';
|
|
3
|
+
|
|
4
|
+
<Meta of={AccessStories} />
|
|
5
|
+
|
|
6
|
+
Accessibilité
|
|
7
|
+
=============
|
|
8
|
+
<Story of={AccessStories.Legende} />
|
|
9
|
+
<br />
|
|
10
|
+
|
|
11
|
+
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
12
|
+
|
|
13
|
+
<Story of={AccessStories.AccessibilitePanel} />
|
|
14
|
+
<br />
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { VExpansionPanels, VExpansionPanel, VExpansionPanelTitle, VExpansionPanelText, VDataTable, VIcon } from 'vuetify/components'
|
|
2
|
+
import type { StoryObj } from '@storybook/vue3'
|
|
3
|
+
import { AccessibiliteItemsIndeterminate, AccessibiliteItemsValidated } from './AccessibiliteItems'
|
|
4
|
+
import { mdiCheckboxMarkedCircle, mdiLink, mdiEye } from '@mdi/js'
|
|
5
|
+
|
|
6
|
+
const checkIcon = mdiCheckboxMarkedCircle
|
|
7
|
+
const iconEye = mdiEye
|
|
8
|
+
const linkICon = mdiLink
|
|
9
|
+
|
|
10
|
+
export default {
|
|
11
|
+
title: 'Composants/Formulaires/DatePicker/Accessibilité',
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const AccessibilitePanel: StoryObj = {
|
|
15
|
+
|
|
16
|
+
render: () => {
|
|
17
|
+
return {
|
|
18
|
+
components: { VExpansionPanels, VExpansionPanel, VExpansionPanelTitle, VExpansionPanelText, VDataTable, VIcon },
|
|
19
|
+
|
|
20
|
+
setup() {
|
|
21
|
+
const icon = checkIcon
|
|
22
|
+
|
|
23
|
+
return { AccessibiliteItemsIndeterminate, AccessibiliteItemsValidated, icon, linkICon, iconEye }
|
|
24
|
+
},
|
|
25
|
+
template: `
|
|
26
|
+
<div class="accessibiliteItems" style="display:flex; max-width: none !important;">
|
|
27
|
+
<v-col cols="6">
|
|
28
|
+
<div style="display:flex; margin-bottom: 10px; justify-content: space-between; align-items: center;">
|
|
29
|
+
<h5>{{ AccessibiliteItemsIndeterminate.length }} critères à prendre en charge par le projet</h5>
|
|
30
|
+
<div style="display: flex; align-items: center;">
|
|
31
|
+
<v-btn variant="tonal" color="red" size="x-small" style="margin: 4px;font-size: 8px;"
|
|
32
|
+
rounded>Tanaguru
|
|
33
|
+
</v-btn>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<v-expansion-panels value="opened" multiple>
|
|
38
|
+
<v-expansion-panel v-for="(item, index) in AccessibiliteItemsIndeterminate" :key="index" style="background-color: rgba(42, 96, 158, 0.1); margin-bottom: 10px;">
|
|
39
|
+
<v-expansion-panel-title>
|
|
40
|
+
<VIcon :icon="iconEye" style="margin-right: 5px; color:#5778b7;"/>
|
|
41
|
+
{{ item.title }}
|
|
42
|
+
</v-expansion-panel-title>
|
|
43
|
+
<v-expansion-panel-text>
|
|
44
|
+
<v-expansion-panels>
|
|
45
|
+
<v-expansion-panel v-for="(i, index) in item.items2" :key="i" style="margin-bottom: 10px;">
|
|
46
|
+
<v-expansion-panel-title
|
|
47
|
+
style="font-weight: bold; font-size: 13px; line-height: 16px;">
|
|
48
|
+
{{ i.subtitle}}
|
|
49
|
+
</v-expansion-panel-title>
|
|
50
|
+
<v-expansion-panel-text>
|
|
51
|
+
<div>
|
|
52
|
+
<p style="font-size: 13px;line-height: 16px;">
|
|
53
|
+
{{ i.precision }}
|
|
54
|
+
</p>
|
|
55
|
+
<div v-for="(value, index) in i.solution"
|
|
56
|
+
style="margin-top:15px; font-size: 13px;line-height: 16px;">
|
|
57
|
+
<p style="font-weight: bold;">Méthodologie du test : <a
|
|
58
|
+
href="{{i.link}}" target="blank">
|
|
59
|
+
<VIcon :icon="linkICon"/>
|
|
60
|
+
</a></p>
|
|
61
|
+
<p>{{ value.info1 }}</p>
|
|
62
|
+
<p>{{ value.info2 }}</p>
|
|
63
|
+
<p>{{ value.info3 }}</p>
|
|
64
|
+
<p>{{ value.info4 }}</p>
|
|
65
|
+
|
|
66
|
+
</div>
|
|
67
|
+
<span style="display:flex; justify-content:center; margin-bottom:5px;">______</span>
|
|
68
|
+
</div>
|
|
69
|
+
</v-expansion-panel-text>
|
|
70
|
+
</v-expansion-panel>
|
|
71
|
+
<v-expansion-panel >
|
|
72
|
+
<v-expansion-panel-title
|
|
73
|
+
style="font-weight: bold; font-size: 13px; line-height: 16px;">
|
|
74
|
+
{{ item.subtitle }}
|
|
75
|
+
</v-expansion-panel-title>
|
|
76
|
+
<v-expansion-panel-text>
|
|
77
|
+
<div v-for="(value, i) in item.items" :key="i">
|
|
78
|
+
<p style="font-size: 13px;line-height: 16px;">
|
|
79
|
+
{{ value.precision }}
|
|
80
|
+
</p>
|
|
81
|
+
<div v-for="element in value.solution"
|
|
82
|
+
style="margin-top:15px; font-size: 13px;line-height: 16px;">
|
|
83
|
+
<p style="font-weight: bold;">Méthodologie du test : <a
|
|
84
|
+
href="value.link" target="blank">
|
|
85
|
+
<VIcon :icon="linkICon"/>
|
|
86
|
+
</a></p>
|
|
87
|
+
<p>{{ element.info1 }}</p>
|
|
88
|
+
<p>{{ element.info2 }}</p>
|
|
89
|
+
<p>{{ element.info3 }}</p>
|
|
90
|
+
</div>
|
|
91
|
+
<span style="display:flex; justify-content:center; margin-bottom:5px;">______</span>
|
|
92
|
+
</div>
|
|
93
|
+
</v-expansion-panel-text>
|
|
94
|
+
</v-expansion-panel>
|
|
95
|
+
</v-expansion-panels>
|
|
96
|
+
</v-expansion-panel-text>
|
|
97
|
+
</v-expansion-panel>
|
|
98
|
+
</v-expansion-panels>
|
|
99
|
+
</v-col>
|
|
100
|
+
<v-col cols="6">
|
|
101
|
+
<div style="display:flex; margin-bottom: 10px; justify-content: space-between; align-items: center;">
|
|
102
|
+
<h5>{{ AccessibiliteItemsValidated.length }} critères pris en charge par l'équipe Design System</h5>
|
|
103
|
+
<div style="display: flex; align-items: center;">
|
|
104
|
+
<v-btn variant="tonal" color="red" size="x-small" style="margin: 4px;font-size: 8px;"
|
|
105
|
+
rounded>Tanaguru
|
|
106
|
+
</v-btn>
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
<v-expansion-panels v-if="AccessibiliteItemsValidated.length > 0" value="opened" multiple>
|
|
110
|
+
<v-expansion-panel
|
|
111
|
+
v-for="(item, index) in AccessibiliteItemsValidated"
|
|
112
|
+
:key="index" style="background-color: rgba(53,135,0,0.1); margin-bottom: 10px;">
|
|
113
|
+
<v-expansion-panel-title>
|
|
114
|
+
<VIcon color="green" :icon="icon" style="margin-right: 5px;"/>
|
|
115
|
+
{{ item.title }}
|
|
116
|
+
</v-expansion-panel-title>
|
|
117
|
+
<v-expansion-panel-text>
|
|
118
|
+
<v-expansion-panels>
|
|
119
|
+
<v-expansion-panel>
|
|
120
|
+
<v-expansion-panel-title style="font-weight: bold;font-size: 13px; line-height: 16px;">
|
|
121
|
+
{{ item.subtitle }}
|
|
122
|
+
</v-expansion-panel-title>
|
|
123
|
+
<v-expansion-panel-text>
|
|
124
|
+
<div v-for="(value, i) in item.items" :key="i">
|
|
125
|
+
<p style="font-size: 13px;line-height: 16px;">
|
|
126
|
+
{{ value.precision }}
|
|
127
|
+
</p>
|
|
128
|
+
<div v-for="element in value.solution"
|
|
129
|
+
style="margin-top:15px; font-size: 13px;line-height: 16px;">
|
|
130
|
+
<p style="font-weight: bold;">Méthodologie du test : <a
|
|
131
|
+
href="value.link" target="blank">
|
|
132
|
+
<VIcon :icon="linkICon"/>
|
|
133
|
+
</a></p>
|
|
134
|
+
<p>{{ element.info1 }}</p>
|
|
135
|
+
<p>{{ element.info2 }}</p>
|
|
136
|
+
<p>{{ element.info3 }}</p>
|
|
137
|
+
</div>
|
|
138
|
+
<span style="display:flex; justify-content:center; margin-bottom:5px;">______</span>
|
|
139
|
+
</div>
|
|
140
|
+
</v-expansion-panel-text>
|
|
141
|
+
</v-expansion-panel>
|
|
142
|
+
</v-expansion-panels>
|
|
143
|
+
</v-expansion-panel-text>
|
|
144
|
+
</v-expansion-panel>
|
|
145
|
+
</v-expansion-panels>
|
|
146
|
+
<div v-else style="display: flex;justify-content: center;"><span style="text-align:center;" >Pas de critère d'accessibilité bloquant</span></div>
|
|
147
|
+
</v-col>
|
|
148
|
+
</div>
|
|
149
|
+
`,
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
tags: ['!dev'],
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export const Legende: StoryObj = {
|
|
156
|
+
args: {
|
|
157
|
+
icon: checkIcon,
|
|
158
|
+
},
|
|
159
|
+
render: (args) => {
|
|
160
|
+
return {
|
|
161
|
+
components: { VIcon },
|
|
162
|
+
setup() {
|
|
163
|
+
return { args }
|
|
164
|
+
},
|
|
165
|
+
template: `
|
|
166
|
+
<p style="color: grey;font-size: 11px; margin-bottom: 12px;">Date de conception: 20/11/2024</p>
|
|
167
|
+
<div>
|
|
168
|
+
<p>Le tableau ci-dessous liste nos recommandations suivant les <a target="blank" style="color:#0C41BD;" href="https://www.numerique.gouv.fr/publications/rgaa-accessibilite/#contenu">catégories du RGAA</a>.</p>
|
|
169
|
+
<p style="margin-bottom: 12px;font-weight:bold;">Pour rappel le composant seul ne garantie pas
|
|
170
|
+
l'accessibilité du site.</p>
|
|
171
|
+
<div style="font-size: 14px">
|
|
172
|
+
<p>Nous avons deux façons de relever les problèmes d'accessibilité des composants :</p>
|
|
173
|
+
<div>
|
|
174
|
+
<v-btn variant="tonal" color="grey" size="x-small" style="margin: 2px;font-size: 8px;" rounded>
|
|
175
|
+
Audit
|
|
176
|
+
</v-btn>
|
|
177
|
+
Problèmes relevés par le projet
|
|
178
|
+
</div>
|
|
179
|
+
<div>
|
|
180
|
+
<v-btn variant="tonal" color="red" size="x-small" style="margin: 2px;font-size: 8px;" rounded>
|
|
181
|
+
Tanaguru
|
|
182
|
+
</v-btn>
|
|
183
|
+
Problèmes relevés par Tanaguru
|
|
184
|
+
</div>
|
|
185
|
+
</div>
|
|
186
|
+
</div>
|
|
187
|
+
`,
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
tags: ['!dev'],
|
|
191
|
+
}
|