@cnamts/synapse 1.0.6 → 1.0.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.
- package/dist/{DateFilter-BlOpwEVq.js → DateFilter-DkqG0pmr.js} +1 -1
- package/dist/{NumberFilter-BPUXE4wY.js → NumberFilter-Ck7AwD39.js} +1 -1
- package/dist/{PeriodFilter-B2yx329_.js → PeriodFilter-LRI6YpgU.js} +1 -1
- package/dist/{SelectFilter-CedKn1oV.js → SelectFilter-DPc70Jk7.js} +1 -1
- package/dist/{TextFilter-DkhJjRtR.js → TextFilter-DRQL7uD8.js} +1 -1
- package/dist/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.d.ts +116 -0
- package/dist/components/Amelipro/AmeliproAccordionGroup/types.d.ts +4 -0
- package/dist/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.d.ts +220 -0
- package/dist/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.d.ts +68 -0
- package/dist/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/AmeliproAccordionResultTemplate.d.ts +70 -0
- package/dist/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.d.ts +204 -0
- package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +26 -26
- package/dist/components/Amelipro/AmeliproBadge/AmeliproBadge.d.ts +59 -0
- package/dist/components/Amelipro/AmeliproBtn/AmeliproBtn.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproCaptcha/AmeliproCaptcha.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +214 -0
- package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/AmeliproCarouselItem.d.ts +70 -0
- package/dist/components/Amelipro/AmeliproCarousel/types.d.ts +7 -0
- package/dist/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.d.ts +125 -0
- package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproIllustratedDataTile/AmeliproIllustratedDataTile.d.ts +2 -2
- package/dist/components/Amelipro/AmeliproResultList/AmeliproResultList.d.ts +164 -0
- package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +27 -27
- package/dist/components/Amelipro/AmeliproStateTile/AmeliproStateTile.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproTable/AmeliproTable.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +32 -32
- package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +6 -6
- package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +7 -7
- package/dist/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproTooltips/AmeliproTooltips.d.ts +2 -2
- package/dist/components/ChipList/ChipList.d.ts +4 -0
- package/dist/components/ChipList/locales.d.ts +4 -2
- package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +8 -8
- package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +329 -1296
- package/dist/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.d.ts +0 -1
- package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +2 -0
- package/dist/components/Customs/SyTabs/SyTabs.d.ts +71 -0
- package/dist/components/Customs/SyTabs/config.d.ts +17 -0
- package/dist/components/Customs/SyTabs/types.d.ts +11 -0
- package/dist/components/Customs/SyTextField/SyTextField.d.ts +9 -9
- package/dist/components/DataList/DataList.d.ts +1 -1
- package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +4811 -240
- package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +52 -33
- package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +23 -10
- package/dist/components/DatePicker/composables/useDateInputEditing.d.ts +1 -0
- package/dist/components/DatePicker/composables/useTodayButton.d.ts +1 -0
- package/dist/components/DialogBox/DialogBox.d.ts +219 -0
- package/dist/components/HeaderLoading/HeaderLoading.d.ts +27 -0
- package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +110 -3
- package/dist/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.d.ts +19 -1
- package/dist/components/LangBtn/LangBtn.d.ts +2 -2
- package/dist/components/NirField/NirField.d.ts +18 -18
- package/dist/components/PeriodField/PeriodField.d.ts +10766 -1620
- package/dist/components/PhoneField/PhoneField.d.ts +1866 -2
- package/dist/components/PhoneField/indicatifs.d.ts +1 -0
- package/dist/components/PhoneField/locales.d.ts +1 -0
- package/dist/components/RangeField/RangeField.d.ts +1 -1
- package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +1 -1
- package/dist/components/SubHeader/SubHeader.d.ts +8 -0
- package/dist/components/SubHeader/locales.d.ts +1 -0
- package/dist/components/SyTextArea/SyTextArea.d.ts +6 -6
- package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +5 -4
- package/dist/components/Tables/SyTable/SyTable.d.ts +5 -4
- package/dist/components/Tables/common/SyTablePagination.d.ts +333 -1296
- package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +2 -2
- package/dist/components/Tables/common/types.d.ts +2 -0
- package/dist/components/index.d.ts +9 -0
- package/dist/design-system-v3.js +173 -164
- package/dist/design-system-v3.umd.cjs +286 -263
- package/dist/{main-BXPFSAB4.js → main-DXMoMtj5.js} +13176 -11457
- package/dist/services/NotificationService.d.ts +1 -0
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/src/assets/amelipro/icons.ts +38 -11
- package/src/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.mdx +20 -0
- package/src/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.stories.ts +135 -0
- package/src/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.vue +107 -0
- package/src/components/Amelipro/AmeliproAccordionGroup/__tests__/AmeliproAccordionGroup.spec.ts +37 -0
- package/src/components/Amelipro/AmeliproAccordionGroup/__tests__/__snapshots__/AmeliproAccordionGroup.spec.ts.snap +513 -0
- package/src/components/Amelipro/AmeliproAccordionGroup/types.d.ts +4 -0
- package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.mdx +16 -0
- package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.stories.ts +300 -0
- package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +288 -0
- package/src/components/Amelipro/AmeliproAccordionList/__tests__/AmeliproAccordionList.spec.ts +38 -0
- package/src/components/Amelipro/AmeliproAccordionList/__tests__/__snapshots__/AmeliproAccordionList.spec.ts.snap +1712 -0
- package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.mdx +19 -0
- package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.stories.ts +68 -0
- package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.vue +66 -0
- package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/AmeliproAccordionResultTemplate.vue +145 -0
- package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/__tests__/AmeliproAccordionResultTemplate.spec.ts +24 -0
- package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/__tests__/__snapshots__/AmeliproAccordionResultTemplate.spec.ts.snap +127 -0
- package/src/components/Amelipro/AmeliproAccordionResult/__tests__/AmeliproAccordionResult.spec.ts +24 -0
- package/src/components/Amelipro/AmeliproAccordionResult/__tests__/__snapshots__/AmeliproAccordionResult.spec.ts.snap +123 -0
- package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.mdx +20 -0
- package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.stories.ts +273 -0
- package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +275 -0
- package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/AmeliproAccordionResultList.spec.ts +38 -0
- package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/__snapshots__/AmeliproAccordionResultList.spec.ts.snap +1593 -0
- package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.mdx +15 -0
- package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.stories.ts +54 -0
- package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.vue +76 -0
- package/src/components/Amelipro/AmeliproBadge/__tests__/AmeliproBadge.spec.ts +20 -0
- package/src/components/Amelipro/AmeliproBadge/__tests__/__snapshots__/AmeliproBadge.spec.ts.snap +19 -0
- package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.mdx +15 -0
- package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.stories.ts +191 -0
- package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.vue +263 -0
- package/src/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/AmeliproCarouselItem.vue +93 -0
- package/src/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/__tests__/AmeliproCarouselItem.spec.ts +24 -0
- package/src/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/__tests__/__snapshots__/AmeliproCarouselItem.spec.ts.snap +43 -0
- package/src/components/Amelipro/AmeliproCarousel/__tests__/AmeliproCarousel.spec.ts +40 -0
- package/src/components/Amelipro/AmeliproCarousel/__tests__/__snapshots__/AmeliproCarousel.spec.ts.snap +342 -0
- package/src/components/Amelipro/AmeliproCarousel/types.d.ts +8 -0
- package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.mdx +18 -0
- package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.stories.ts +67 -0
- package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.vue +233 -0
- package/src/components/Amelipro/AmeliproClickableTile/tests/AmeliproClickableTile.spec.ts +21 -0
- package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +140 -0
- package/src/components/Amelipro/AmeliproHeader/AmeliproHeader.vue +7 -1
- package/src/components/Amelipro/AmeliproHeader/tests/__snapshots__/AmeliproHeader.spec.ts.snap +5 -4
- package/src/components/Amelipro/AmeliproIcon/iconList.ts +6 -0
- package/src/components/Amelipro/AmeliproPageLayout/tests/__snapshots__/AmeliproPageLayout.spec.ts.snap +5 -4
- package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.mdx +15 -0
- package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.stories.ts +264 -0
- package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +231 -0
- package/src/components/Amelipro/AmeliproResultList/__tests__/AmeliproResultList.spec.ts +37 -0
- package/src/components/Amelipro/AmeliproResultList/__tests__/__snapshots__/AmeliproResultList.spec.ts.snap +434 -0
- package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +6 -5
- package/src/components/Amelipro/AmeliproTable/__tests__/__snapshots__/AmeliproTable.spec.ts.snap +23 -26
- package/src/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.stories.ts +2 -2
- package/src/components/ChipList/Accessibilite.stories.ts +4 -0
- package/src/components/ChipList/ChipList.vue +185 -42
- package/src/components/ChipList/locales.ts +4 -2
- package/src/components/ChipList/tests/chipList.spec.ts +7 -4
- package/src/components/Customs/Selects/SelectOverview.mdx +34 -66
- package/src/components/Customs/Selects/SyBtnSelect/SyBtnSelect.stories.ts +10 -10
- package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.mdx +3 -0
- package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.stories.ts +14 -0
- package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +14 -6
- package/src/components/Customs/Selects/SySelect/SySelect.vue +268 -205
- package/src/components/Customs/Selects/SySelect/composables/tests/useSySelectKeyboard.spec.ts +0 -10
- package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +0 -5
- package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +184 -25
- package/src/components/Customs/SyCheckbox/SyCheckbox.mdx +3 -1
- package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +165 -0
- package/src/components/Customs/SyCheckbox/SyCheckbox.vue +28 -9
- package/src/components/Customs/SyTabs/Accessibilite.mdx +309 -0
- package/src/components/Customs/SyTabs/SyTabs.mdx +117 -0
- package/src/components/Customs/SyTabs/SyTabs.stories.ts +354 -0
- package/src/components/Customs/SyTabs/SyTabs.vue +413 -0
- package/src/components/Customs/SyTabs/config.ts +17 -0
- package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +425 -0
- package/src/components/Customs/SyTabs/types.ts +12 -0
- package/src/components/Customs/SyTextField/SyTextField.mdx +3 -0
- package/src/components/Customs/SyTextField/SyTextField.stories.ts +142 -1
- package/src/components/Customs/SyTextField/SyTextField.vue +19 -16
- package/src/components/DataList/DataList.vue +47 -49
- package/src/components/DataListGroup/DataListGroup.vue +1 -1
- package/src/components/DataListItem/DataListItem.vue +67 -63
- package/src/components/DataListItem/tests/DataListItem.spec.ts +2 -2
- package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +3 -3
- package/src/components/DatePicker/CalendarMode/DatePicker.vue +49 -13
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +412 -649
- package/src/components/DatePicker/DatePickerValidationExample/CalendarMode.stories.ts +215 -0
- package/src/components/DatePicker/DatePickerValidationExample/ComplexDatePicker.stories.ts +218 -0
- package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.mdx +2 -0
- package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.stories.ts +1 -1
- package/src/components/DatePicker/DatePickerValidationExample/DateTextInput.stories.ts +218 -0
- package/src/components/DatePicker/DatePickerValidationExample/MultiMode.stories.ts +281 -0
- package/src/components/DatePicker/DateTextInput/DateTextInput.events.spec.ts +17 -4
- package/src/components/DatePicker/DateTextInput/DateTextInput.range.spec.ts +111 -18
- package/src/components/DatePicker/DateTextInput/DateTextInput.spec.ts +238 -6
- package/src/components/DatePicker/DateTextInput/DateTextInput.vue +716 -757
- package/src/components/DatePicker/composables/tests/useDateInputEditing.spec.ts +4 -4
- package/src/components/DatePicker/composables/tests/useDisplayedDateString.spec.ts +17 -10
- package/src/components/DatePicker/composables/useDateInputEditing.ts +52 -22
- package/src/components/DatePicker/composables/useDisplayedDateString.ts +18 -4
- package/src/components/DatePicker/composables/useTodayButton.ts +13 -1
- package/src/components/DatePicker/utils/dateFormattingUtils.ts +79 -14
- package/src/components/DialogBox/DialogBox.stories.ts +12 -0
- package/src/components/DialogBox/DialogBox.vue +16 -11
- package/src/components/DialogBox/tests/DialogBox.spec.ts +22 -0
- package/src/components/HeaderLoading/Accessibilite.mdx +429 -8
- package/src/components/HeaderLoading/Accessibilite.stories.ts +4 -0
- package/src/components/HeaderLoading/HeaderLoading.vue +59 -0
- package/src/components/HeaderNavigationBar/HeaderNavigationBar.mdx +17 -2
- package/src/components/HeaderNavigationBar/HeaderNavigationBar.stories.ts +91 -2
- package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +37 -1
- package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +284 -21
- package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.spec.ts +2 -2
- package/src/components/NirField/NirField.mdx +3 -0
- package/src/components/NirField/NirField.vue +10 -1
- package/src/components/NirField/tests/NirField.spec.ts +81 -0
- package/src/components/NotificationBar/NotificationBar.stories.ts +128 -2
- package/src/components/NotificationBar/NotificationBar.vue +16 -1
- package/src/components/NotificationBar/tests/NotificationBar.spec.ts +65 -0
- package/src/components/PasswordField/PasswordField.mdx +3 -0
- package/src/components/PeriodField/PeriodField.mdx +2 -0
- package/src/components/PeriodField/PeriodField.stories.ts +195 -0
- package/src/components/PhoneField/Accessibilite.stories.ts +4 -0
- package/src/components/PhoneField/PhoneField.mdx +3 -1
- package/src/components/PhoneField/PhoneField.stories.ts +285 -1
- package/src/components/PhoneField/PhoneField.vue +228 -95
- package/src/components/PhoneField/indicatifs.ts +102 -102
- package/src/components/PhoneField/locales.ts +1 -0
- package/src/components/PhoneField/tests/PhoneField.spec.ts +419 -2
- package/src/components/SkipLink/SkipLink.vue +3 -31
- package/src/components/SkipLink/tests/skipLink.spec.ts +0 -21
- package/src/components/SubHeader/Accessibilite.stories.ts +8 -0
- package/src/components/SubHeader/SubHeader.mdx +1 -0
- package/src/components/SubHeader/SubHeader.stories.ts +179 -60
- package/src/components/SubHeader/SubHeader.vue +45 -15
- package/src/components/SubHeader/locales.ts +1 -0
- package/src/components/SyAlert/SyAlert.vue +6 -0
- package/src/components/Tables/SyServerTable/SyServerTable.mdx +3 -10
- package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +242 -0
- package/src/components/Tables/SyServerTable/SyServerTable.vue +29 -10
- package/src/components/Tables/SyTable/SyTable.mdx +3 -10
- package/src/components/Tables/SyTable/SyTable.stories.ts +242 -0
- package/src/components/Tables/SyTable/SyTable.vue +2 -0
- package/src/components/Tables/common/SyTablePagination.vue +13 -6
- package/src/components/Tables/common/filters/tests/SelectFilter.spec.ts +6 -1
- package/src/components/Tables/common/tests/SyTablePagination.spec.ts +157 -0
- package/src/components/Tables/common/types.ts +2 -0
- package/src/components/index.ts +9 -0
- package/src/composables/useFilterable/useFilterable.ts +10 -0
- package/src/designTokens/tokens/amelipro/apColors.ts +1 -1
- package/src/designTokens/tokens/cnam/cnamSemantic.ts +3 -3
- package/src/services/NotificationService.ts +9 -0
- package/src/stories/Components/Components.stories.ts +1 -1
- package/src/stories/GuideDuDev/FormValidationGuide.mdx +342 -0
- package/src/stories/Templates/Templates.stories.ts +1 -1
- package/src/utils/functions/ameliproColors/ameliproColors.ts +1 -1
- package/dist/components/DataList/locales.d.ts +0 -3
- package/src/components/DataList/locales.ts +0 -3
- package/src/components/PhoneField/tests/PhoneField.additional.spec.ts +0 -266
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Controls, Canvas, Meta } from '@storybook/blocks';
|
|
2
|
+
|
|
3
|
+
import * as AmeliproBadgeStories from './AmeliproBadge.stories';
|
|
4
|
+
|
|
5
|
+
<Meta of={AmeliproBadgeStories} />
|
|
6
|
+
|
|
7
|
+
# AmeliproBadge
|
|
8
|
+
|
|
9
|
+
L’élément `AmeliproBadge` est utilisé pour afficher des indicateurs numériques associés à des liens ou boutons.
|
|
10
|
+
|
|
11
|
+
<Canvas of={AmeliproBadgeStories.Default} />
|
|
12
|
+
|
|
13
|
+
## API
|
|
14
|
+
|
|
15
|
+
<Controls of={AmeliproBadgeStories.Default} />
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/vue3'
|
|
2
|
+
import AmeliproBadge from './AmeliproBadge.vue'
|
|
3
|
+
|
|
4
|
+
const meta = {
|
|
5
|
+
argTypes: {
|
|
6
|
+
badgeColor: { description: 'Défini la couleur du badge' },
|
|
7
|
+
badgeContent: { description: 'Texte à l’intérieur du badge' },
|
|
8
|
+
badgeTextColor: { description: 'Défini la couleur du text du badge' },
|
|
9
|
+
isSpan: { description: 'Gère le type de balise HTML du composant, `p` ou `span`' },
|
|
10
|
+
roundedRight: { description: 'Active l’apparence label avec un border radius a droite' },
|
|
11
|
+
uniqueId: { description: 'Identifiant unique du badge' },
|
|
12
|
+
},
|
|
13
|
+
component: AmeliproBadge,
|
|
14
|
+
title: 'Composants/Amelipro/AmeliproBadge',
|
|
15
|
+
} as Meta<typeof AmeliproBadge>
|
|
16
|
+
export default meta
|
|
17
|
+
|
|
18
|
+
type Story = StoryObj<typeof AmeliproBadge>
|
|
19
|
+
|
|
20
|
+
export const Default: Story = {
|
|
21
|
+
args: { badgeContent: 'Contenu du badge' },
|
|
22
|
+
parameters: {
|
|
23
|
+
sourceCode: [
|
|
24
|
+
{
|
|
25
|
+
name: 'Template',
|
|
26
|
+
code: `<template>
|
|
27
|
+
<AmeliproBadge
|
|
28
|
+
badge-content="Contenu du badge"
|
|
29
|
+
/>
|
|
30
|
+
</template>
|
|
31
|
+
`,
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'Scripts',
|
|
35
|
+
code: `<script setup lang="ts">
|
|
36
|
+
import { AmeliproBadge } from '@cnamts/synapse'
|
|
37
|
+
</script>
|
|
38
|
+
`,
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
render: args => ({
|
|
43
|
+
components: { AmeliproBadge },
|
|
44
|
+
setup() {
|
|
45
|
+
return { args }
|
|
46
|
+
},
|
|
47
|
+
template: `
|
|
48
|
+
<AmeliproBadge
|
|
49
|
+
v-bind="args"
|
|
50
|
+
/>
|
|
51
|
+
`,
|
|
52
|
+
}),
|
|
53
|
+
|
|
54
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { IndexedObject } from '../types'
|
|
3
|
+
import { computed } from 'vue'
|
|
4
|
+
import { convertToHex } from '@/utils/functions/convertToHex'
|
|
5
|
+
|
|
6
|
+
const props = defineProps({
|
|
7
|
+
badgeColor: {
|
|
8
|
+
type: String,
|
|
9
|
+
default: 'ap-blue-darken-1',
|
|
10
|
+
},
|
|
11
|
+
badgeContent: {
|
|
12
|
+
type: String,
|
|
13
|
+
default: undefined,
|
|
14
|
+
},
|
|
15
|
+
badgeTextColor: {
|
|
16
|
+
type: String,
|
|
17
|
+
default: 'ap-white',
|
|
18
|
+
},
|
|
19
|
+
isSpan: {
|
|
20
|
+
type: Boolean,
|
|
21
|
+
default: false,
|
|
22
|
+
},
|
|
23
|
+
roundedRight: {
|
|
24
|
+
type: Boolean,
|
|
25
|
+
default: false,
|
|
26
|
+
},
|
|
27
|
+
uniqueId: {
|
|
28
|
+
type: String,
|
|
29
|
+
default: undefined,
|
|
30
|
+
},
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
const style = computed <IndexedObject>(() => ({ backgroundColor: convertToHex(props.badgeColor) }))
|
|
34
|
+
const styleText = computed <IndexedObject>(() => ({ color: convertToHex(props.badgeTextColor) }))
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<template>
|
|
38
|
+
<Component
|
|
39
|
+
:is="isSpan ? 'span' : 'p'"
|
|
40
|
+
:id="uniqueId"
|
|
41
|
+
class="amelipro-badge"
|
|
42
|
+
:class="roundedRight ? 'round-custom' : 'round-classic'"
|
|
43
|
+
:style="style"
|
|
44
|
+
>
|
|
45
|
+
<span
|
|
46
|
+
class="amelipro-badge__content"
|
|
47
|
+
:style="styleText"
|
|
48
|
+
>
|
|
49
|
+
{{ badgeContent }}
|
|
50
|
+
</span>
|
|
51
|
+
</Component>
|
|
52
|
+
</template>
|
|
53
|
+
|
|
54
|
+
<style lang="scss" scoped>
|
|
55
|
+
@use '@/assets/amelipro/apTokens';
|
|
56
|
+
|
|
57
|
+
.amelipro-badge {
|
|
58
|
+
display: inline-block;
|
|
59
|
+
margin-left: 0.5rem;
|
|
60
|
+
padding: 0.5rem 1rem !important;
|
|
61
|
+
|
|
62
|
+
&.round-custom {
|
|
63
|
+
border-radius: 0.5rem 1rem 1rem 0.5rem;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
&.round-classic {
|
|
67
|
+
border-radius: 1rem;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.amelipro-badge__content {
|
|
72
|
+
display: inline-block;
|
|
73
|
+
font-size: apTokens.$font-size-sm !important;
|
|
74
|
+
font-weight: apTokens.$ap-font-weight-bold !important;
|
|
75
|
+
}
|
|
76
|
+
</style>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { mount } from '@vue/test-utils'
|
|
2
|
+
import { expect, describe, it } from 'vitest'
|
|
3
|
+
import AmeliproBadge from '../AmeliproBadge.vue'
|
|
4
|
+
import { vuetify } from '@tests/unit/setup'
|
|
5
|
+
|
|
6
|
+
describe('AmeliproBadge', () => {
|
|
7
|
+
it('render correctly', async () => {
|
|
8
|
+
const wrapper = mount(AmeliproBadge, {
|
|
9
|
+
global: {
|
|
10
|
+
plugins: [vuetify],
|
|
11
|
+
},
|
|
12
|
+
props: {
|
|
13
|
+
badgeContent: 'contenu du badge',
|
|
14
|
+
uniqueId: 'my-badge-id',
|
|
15
|
+
},
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
expect(wrapper.html()).toMatchSnapshot()
|
|
19
|
+
})
|
|
20
|
+
})
|
package/src/components/Amelipro/AmeliproBadge/__tests__/__snapshots__/AmeliproBadge.spec.ts.snap
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
|
+
|
|
3
|
+
exports[`AmeliproBadge > render correctly 1`] = `
|
|
4
|
+
<p
|
|
5
|
+
class="
|
|
6
|
+
amelipro-badge
|
|
7
|
+
round-classic
|
|
8
|
+
"
|
|
9
|
+
id="my-badge-id"
|
|
10
|
+
style="background-color: #00749C;"
|
|
11
|
+
>
|
|
12
|
+
<span
|
|
13
|
+
class="amelipro-badge__content"
|
|
14
|
+
style="color: #FFFFFF;"
|
|
15
|
+
>
|
|
16
|
+
contenu du badge
|
|
17
|
+
</span>
|
|
18
|
+
</p>
|
|
19
|
+
`;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Controls, Canvas, Meta } from '@storybook/blocks';
|
|
2
|
+
|
|
3
|
+
import * as AmeliproCarouselStories from './AmeliproCarousel.stories';
|
|
4
|
+
|
|
5
|
+
<Meta of={AmeliproCarouselStories} />
|
|
6
|
+
|
|
7
|
+
# AmeliproCarousel
|
|
8
|
+
|
|
9
|
+
L’élément `AmeliproCarousel` est utilisé pour afficher tous les éléments de type Carrousel dans la charte Amelipro
|
|
10
|
+
|
|
11
|
+
<Canvas of={AmeliproCarouselStories.Default} />
|
|
12
|
+
|
|
13
|
+
## API
|
|
14
|
+
|
|
15
|
+
<Controls of={AmeliproCarouselStories.Default} />
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/vue3'
|
|
2
|
+
import AmeliproBtn from '../AmeliproBtn/AmeliproBtn.vue'
|
|
3
|
+
import AmeliproCard from '../AmeliproCard/AmeliproCard.vue'
|
|
4
|
+
import AmeliproCarousel from './AmeliproCarousel.vue'
|
|
5
|
+
|
|
6
|
+
const meta = {
|
|
7
|
+
argTypes: {
|
|
8
|
+
'`${uniqueId}-slot-item-${index}`': { description: 'Slots générés automatiquement pour chaque slide, l’id est celui du carrousel et index est la position de la slide' },
|
|
9
|
+
'duration': { description: 'Durée de transition entre les slides du carrousel en secondes' },
|
|
10
|
+
'infiniteRotation': { description: 'Booléen permettant de faire boucler les slides du carrousel' },
|
|
11
|
+
'item': { description: 'Slots générés automatiquement pour chaque slide, afin de donner le même aspect à tous les items' },
|
|
12
|
+
'items': {
|
|
13
|
+
description: 'Tableau comprenant la liste des slides (si vous voulez utiliser les slots, créez un objet vide `{}` dans ce tableau pour chaque slide)',
|
|
14
|
+
table: {
|
|
15
|
+
type: {
|
|
16
|
+
detail: `Array <{
|
|
17
|
+
href?: string;
|
|
18
|
+
imgSrc?: string;
|
|
19
|
+
imgAlt?: string;
|
|
20
|
+
to?: RouteLocationRaw;
|
|
21
|
+
}>`,
|
|
22
|
+
summary: 'AmeliproCarouselListItem[]',
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
'labelNextBtn': { description: 'Libellé du bouton suivant, il est affiché au survol du bouton' },
|
|
27
|
+
'labelPreviousBtn': { description: 'Libellé du bouton précédent, il est affiché au survol du bouton' },
|
|
28
|
+
'title': { description: 'Titre du carrousel doit être pertinent par rapport au contenu' },
|
|
29
|
+
'uniqueId': { description: 'Identifiant unique du carrousel' },
|
|
30
|
+
},
|
|
31
|
+
component: AmeliproCarousel,
|
|
32
|
+
title: 'Composants/Amelipro/Mise en page/AmeliproCarousel',
|
|
33
|
+
} as Meta<typeof AmeliproCarousel>
|
|
34
|
+
export default meta
|
|
35
|
+
|
|
36
|
+
type Story = StoryObj<typeof AmeliproCarousel>
|
|
37
|
+
|
|
38
|
+
export const Default: Story = {
|
|
39
|
+
args: {
|
|
40
|
+
items: [{}, {}, {}],
|
|
41
|
+
title: 'Titre du carrousel',
|
|
42
|
+
uniqueId: 'amelipro-carousel-id',
|
|
43
|
+
},
|
|
44
|
+
parameters: {
|
|
45
|
+
sourceCode: [
|
|
46
|
+
{
|
|
47
|
+
name: 'Template',
|
|
48
|
+
code: `<template>
|
|
49
|
+
<AmeliproCarousel
|
|
50
|
+
:items="items"
|
|
51
|
+
title="Titre du carrousel"
|
|
52
|
+
unique-id="amelipro-carousel-id"
|
|
53
|
+
>
|
|
54
|
+
<template #amelipro-carousel-id-slot-item-0>
|
|
55
|
+
<div class="d-flex">
|
|
56
|
+
<AmeliproCard card-title="Slide 1">
|
|
57
|
+
<template #default>
|
|
58
|
+
<p class="mb-0">
|
|
59
|
+
Le lorem ipsum est, en imprimerie, une suite de mots sans signification utilisée
|
|
60
|
+
à titre provisoire pour calibrer une mise en page, le texte définitif venant remplacer le
|
|
61
|
+
faux-texte dès qu'il est prêt ou que la mise en page est achevée. Généralement, on utilise
|
|
62
|
+
un texte en faux latin, le Lorem ipsum ou Lipsum.
|
|
63
|
+
</p>
|
|
64
|
+
<AmeliproBtn class="mt-2">
|
|
65
|
+
bouton slide 1
|
|
66
|
+
</AmeliproBtn>
|
|
67
|
+
</template>
|
|
68
|
+
</AmeliproCard>
|
|
69
|
+
</div>
|
|
70
|
+
</template>
|
|
71
|
+
|
|
72
|
+
<template #amelipro-carousel-id-slot-item-1>
|
|
73
|
+
<div class="d-flex">
|
|
74
|
+
<AmeliproCard card-title="Slide 2">
|
|
75
|
+
<template #default>
|
|
76
|
+
<p class="mb-0">
|
|
77
|
+
Le lorem ipsum est, en imprimerie, une suite de mots sans signification utilisée
|
|
78
|
+
à titre provisoire pour calibrer une mise en page, le texte définitif venant remplacer le
|
|
79
|
+
faux-texte dès qu'il est prêt ou que la mise en page est achevée. Généralement, on utilise
|
|
80
|
+
un texte en faux latin, le Lorem ipsum ou Lipsum.
|
|
81
|
+
</p>
|
|
82
|
+
<AmeliproBtn class="mt-2">
|
|
83
|
+
bouton slide 2
|
|
84
|
+
</AmeliproBtn>
|
|
85
|
+
</template>
|
|
86
|
+
</AmeliproCard>
|
|
87
|
+
</div>
|
|
88
|
+
</template>
|
|
89
|
+
|
|
90
|
+
<template #amelipro-carousel-id-slot-item-2>
|
|
91
|
+
<div class="d-flex">
|
|
92
|
+
<AmeliproCard card-title="Slide 3">
|
|
93
|
+
<template #default>
|
|
94
|
+
<p class="mb-0">
|
|
95
|
+
Le lorem ipsum est, en imprimerie, une suite de mots sans signification utilisée
|
|
96
|
+
à titre provisoire pour calibrer une mise en page, le texte définitif venant remplacer le
|
|
97
|
+
faux-texte dès qu'il est prêt ou que la mise en page est achevée. Généralement, on utilise
|
|
98
|
+
un texte en faux latin, le Lorem ipsum ou Lipsum.
|
|
99
|
+
</p>
|
|
100
|
+
<AmeliproBtn class="mt-2">
|
|
101
|
+
bouton slide 3
|
|
102
|
+
</AmeliproBtn>
|
|
103
|
+
</template>
|
|
104
|
+
</AmeliproCard>
|
|
105
|
+
</div>
|
|
106
|
+
</template>
|
|
107
|
+
</AmeliproCarousel>
|
|
108
|
+
</template>
|
|
109
|
+
`,
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: 'Script',
|
|
113
|
+
code: `<script setup lang="ts">
|
|
114
|
+
import { AmeliproBtn, AmeliproCard, AmeliproCarousel } from '@cnamts/synapse'
|
|
115
|
+
|
|
116
|
+
const items = [
|
|
117
|
+
{},
|
|
118
|
+
{},
|
|
119
|
+
{},
|
|
120
|
+
]
|
|
121
|
+
</script>
|
|
122
|
+
`,
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
},
|
|
126
|
+
render: args => ({
|
|
127
|
+
components: { AmeliproBtn, AmeliproCard, AmeliproCarousel },
|
|
128
|
+
setup() {
|
|
129
|
+
return { args }
|
|
130
|
+
},
|
|
131
|
+
template: `
|
|
132
|
+
<AmeliproCarousel
|
|
133
|
+
v-bind="args"
|
|
134
|
+
>
|
|
135
|
+
<template #amelipro-carousel-id-slot-item-0>
|
|
136
|
+
<div class="d-flex">
|
|
137
|
+
<AmeliproCard card-title="Slide 1">
|
|
138
|
+
<template #default>
|
|
139
|
+
<p class="mb-0">
|
|
140
|
+
Le lorem ipsum est, en imprimerie, une suite de mots sans signification utilisée
|
|
141
|
+
à titre provisoire pour calibrer une mise en page, le texte définitif venant remplacer le
|
|
142
|
+
faux-texte dès qu'il est prêt ou que la mise en page est achevée. Généralement, on utilise
|
|
143
|
+
un texte en faux latin, le Lorem ipsum ou Lipsum.
|
|
144
|
+
</p>
|
|
145
|
+
<AmeliproBtn class="mt-2">
|
|
146
|
+
bouton slide 1
|
|
147
|
+
</AmeliproBtn>
|
|
148
|
+
</template>
|
|
149
|
+
</AmeliproCard>
|
|
150
|
+
</div>
|
|
151
|
+
</template>
|
|
152
|
+
|
|
153
|
+
<template #amelipro-carousel-id-slot-item-1>
|
|
154
|
+
<div class="d-flex">
|
|
155
|
+
<AmeliproCard card-title="Slide 2">
|
|
156
|
+
<template #default>
|
|
157
|
+
<p class="mb-0">
|
|
158
|
+
Le lorem ipsum est, en imprimerie, une suite de mots sans signification utilisée
|
|
159
|
+
à titre provisoire pour calibrer une mise en page, le texte définitif venant remplacer le
|
|
160
|
+
faux-texte dès qu'il est prêt ou que la mise en page est achevée. Généralement, on utilise
|
|
161
|
+
un texte en faux latin, le Lorem ipsum ou Lipsum.
|
|
162
|
+
</p>
|
|
163
|
+
<AmeliproBtn class="mt-2">
|
|
164
|
+
bouton slide 2
|
|
165
|
+
</AmeliproBtn>
|
|
166
|
+
</template>
|
|
167
|
+
</AmeliproCard>
|
|
168
|
+
</div>
|
|
169
|
+
</template>
|
|
170
|
+
|
|
171
|
+
<template #amelipro-carousel-id-slot-item-2>
|
|
172
|
+
<div class="d-flex">
|
|
173
|
+
<AmeliproCard card-title="Slide 3">
|
|
174
|
+
<template #default>
|
|
175
|
+
<p class="mb-0">
|
|
176
|
+
Le lorem ipsum est, en imprimerie, une suite de mots sans signification utilisée
|
|
177
|
+
à titre provisoire pour calibrer une mise en page, le texte définitif venant remplacer le
|
|
178
|
+
faux-texte dès qu'il est prêt ou que la mise en page est achevée. Généralement, on utilise
|
|
179
|
+
un texte en faux latin, le Lorem ipsum ou Lipsum.
|
|
180
|
+
</p>
|
|
181
|
+
<AmeliproBtn class="mt-2">
|
|
182
|
+
bouton slide 3
|
|
183
|
+
</AmeliproBtn>
|
|
184
|
+
</template>
|
|
185
|
+
</AmeliproCard>
|
|
186
|
+
</div>
|
|
187
|
+
</template>
|
|
188
|
+
</AmeliproCarousel>
|
|
189
|
+
`,
|
|
190
|
+
}),
|
|
191
|
+
}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type PropType, computed, onMounted, onUpdated, ref } from 'vue'
|
|
3
|
+
import AmeliproCarouselItem from './AmeliproCarouselItem/AmeliproCarouselItem.vue'
|
|
4
|
+
import type { AmeliproCarouselListItem } from './types'
|
|
5
|
+
import AmeliproIconBtn from '../AmeliproIconBtn/AmeliproIconBtn.vue'
|
|
6
|
+
import type { IndexedObject } from '../types'
|
|
7
|
+
|
|
8
|
+
const props = defineProps({
|
|
9
|
+
duration: {
|
|
10
|
+
type: Number,
|
|
11
|
+
default: 0.3,
|
|
12
|
+
},
|
|
13
|
+
infiniteRotation: {
|
|
14
|
+
type: Boolean,
|
|
15
|
+
default: false,
|
|
16
|
+
},
|
|
17
|
+
items: {
|
|
18
|
+
type: Array as PropType<AmeliproCarouselListItem[]>,
|
|
19
|
+
default: () => [],
|
|
20
|
+
},
|
|
21
|
+
labelNextBtn: {
|
|
22
|
+
type: String,
|
|
23
|
+
default: 'Slide suivante',
|
|
24
|
+
},
|
|
25
|
+
labelPreviousBtn: {
|
|
26
|
+
type: String,
|
|
27
|
+
default: 'Slide précédente',
|
|
28
|
+
},
|
|
29
|
+
title: {
|
|
30
|
+
type: String,
|
|
31
|
+
required: true,
|
|
32
|
+
},
|
|
33
|
+
uniqueId: {
|
|
34
|
+
type: String,
|
|
35
|
+
required: true,
|
|
36
|
+
},
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
const ameliproCarouselItems = ref<AmeliproCarouselListItem[]>()
|
|
40
|
+
const currentElement = ref(0)
|
|
41
|
+
|
|
42
|
+
const carouselTrackStyles = computed<IndexedObject>(() => {
|
|
43
|
+
const styles: IndexedObject = {
|
|
44
|
+
maxWidth: `calc(100% * ${props.items.length})`,
|
|
45
|
+
transform: `translateX(calc((-${currentElement.value} / ${props.items.length}) * 100%))`,
|
|
46
|
+
transition: `all ${props.duration}s ease-out`,
|
|
47
|
+
width: `calc(100% * ${props.items.length})`,
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return styles
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
const emit = defineEmits(['click-event', 'click-next', 'click-previous'])
|
|
54
|
+
|
|
55
|
+
const emitClickEvent = (id: string): void => {
|
|
56
|
+
emit('click-event', id)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const nextSlide = (): void => {
|
|
60
|
+
if (currentElement.value < props.items.length - 1) {
|
|
61
|
+
currentElement.value += 1
|
|
62
|
+
}
|
|
63
|
+
else if (currentElement.value === props.items.length - 1 && props.infiniteRotation) {
|
|
64
|
+
currentElement.value = 0
|
|
65
|
+
}
|
|
66
|
+
emit('click-next')
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const previousSlide = (): void => {
|
|
70
|
+
if (currentElement.value > 0) {
|
|
71
|
+
currentElement.value -= 1
|
|
72
|
+
}
|
|
73
|
+
else if (currentElement.value === 0 && props.infiniteRotation) {
|
|
74
|
+
currentElement.value = props.items.length - 1
|
|
75
|
+
}
|
|
76
|
+
emit('click-previous')
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const setFocusableElement = (): void => {
|
|
80
|
+
const carousel = document.querySelector(`#${props.uniqueId}`)
|
|
81
|
+
if (carousel !== null) {
|
|
82
|
+
const selection = carousel.querySelectorAll('.hide')
|
|
83
|
+
if (selection !== null) {
|
|
84
|
+
selection.forEach((element) => {
|
|
85
|
+
const elementSelections = element.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"]):not([disabled]), details:not([disabled]), summary:not(:disabled)')
|
|
86
|
+
if (elementSelections !== null) {
|
|
87
|
+
elementSelections.forEach((elementSelection) => {
|
|
88
|
+
elementSelection.setAttribute('tabindex', '-1')
|
|
89
|
+
})
|
|
90
|
+
}
|
|
91
|
+
})
|
|
92
|
+
}
|
|
93
|
+
const current = carousel.querySelector(`#${props.uniqueId}-item-${currentElement.value}`)
|
|
94
|
+
if (current !== null) {
|
|
95
|
+
const elementSelection = current.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"]):not([disabled]), details:not([disabled]), summary:not(:disabled)')
|
|
96
|
+
|
|
97
|
+
if (elementSelection !== null) {
|
|
98
|
+
elementSelection.forEach((element) => {
|
|
99
|
+
element.setAttribute('tabindex', '0')
|
|
100
|
+
})
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
onMounted(() => {
|
|
107
|
+
setFocusableElement()
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
onUpdated(() => {
|
|
111
|
+
setFocusableElement()
|
|
112
|
+
})
|
|
113
|
+
</script>
|
|
114
|
+
|
|
115
|
+
<template>
|
|
116
|
+
<section
|
|
117
|
+
:id="uniqueId"
|
|
118
|
+
:aria-label="title"
|
|
119
|
+
aria-roledescription="carousel"
|
|
120
|
+
class="carousel"
|
|
121
|
+
>
|
|
122
|
+
<AmeliproIconBtn
|
|
123
|
+
:aria-controls="`${uniqueId}-items`"
|
|
124
|
+
:btn-title="labelPreviousBtn"
|
|
125
|
+
class="btn-previous"
|
|
126
|
+
:disabled="currentElement === 0 && !infiniteRotation ? true : undefined"
|
|
127
|
+
icon="chevronLeft"
|
|
128
|
+
icon-bg-color="transparent"
|
|
129
|
+
icon-color="ap-blue-darken-1"
|
|
130
|
+
icon-hover-bg-color="transparent"
|
|
131
|
+
icon-hover-color="ap-blue-darken-2"
|
|
132
|
+
large
|
|
133
|
+
type="button"
|
|
134
|
+
:unique-id="`${uniqueId}-previous`"
|
|
135
|
+
@click="previousSlide()"
|
|
136
|
+
/>
|
|
137
|
+
|
|
138
|
+
<AmeliproIconBtn
|
|
139
|
+
:aria-controls="`${uniqueId}-items`"
|
|
140
|
+
:btn-title="labelNextBtn"
|
|
141
|
+
class="btn-next"
|
|
142
|
+
:disabled="currentElement === items.length - 1 && !infiniteRotation ? true : undefined"
|
|
143
|
+
icon="chevronRight"
|
|
144
|
+
icon-bg-color="transparent"
|
|
145
|
+
icon-color="ap-blue-darken-1"
|
|
146
|
+
icon-hover-bg-color="transparent"
|
|
147
|
+
icon-hover-color="ap-blue-darken-2"
|
|
148
|
+
large
|
|
149
|
+
type="button"
|
|
150
|
+
:unique-id="`${uniqueId}-next`"
|
|
151
|
+
@click="nextSlide()"
|
|
152
|
+
/>
|
|
153
|
+
|
|
154
|
+
<div
|
|
155
|
+
:id="`${uniqueId}-items`"
|
|
156
|
+
aria-live="polite"
|
|
157
|
+
class="carousel-items"
|
|
158
|
+
>
|
|
159
|
+
<div
|
|
160
|
+
class="d-flex align-center carousel__track"
|
|
161
|
+
:style="carouselTrackStyles"
|
|
162
|
+
>
|
|
163
|
+
<AmeliproCarouselItem
|
|
164
|
+
v-for="(item, index) in items"
|
|
165
|
+
:key="index"
|
|
166
|
+
ref="ameliproCarouselItems"
|
|
167
|
+
:aria-label="`${index + 1} sur ${items.length}`"
|
|
168
|
+
:href="item.href"
|
|
169
|
+
:img-alt="item.imgAlt"
|
|
170
|
+
:img-src="item.imgSrc"
|
|
171
|
+
:is-active="currentElement === index"
|
|
172
|
+
:style="`width: calc((1 / ${items.length}) * 100%);`"
|
|
173
|
+
:to="item.to"
|
|
174
|
+
:unique-id="`${uniqueId}-item-${index}`"
|
|
175
|
+
@click-event="emitClickEvent(`${uniqueId}-item-${index}`)"
|
|
176
|
+
>
|
|
177
|
+
<!-- :style="currentElement === index ? undefined : 'visibility: hidden;'" -->
|
|
178
|
+
<slot :name="`${uniqueId}-slot-item-${index}`">
|
|
179
|
+
<slot
|
|
180
|
+
name="item"
|
|
181
|
+
v-bind="item"
|
|
182
|
+
/>
|
|
183
|
+
</slot>
|
|
184
|
+
</AmeliproCarouselItem>
|
|
185
|
+
</div>
|
|
186
|
+
</div>
|
|
187
|
+
|
|
188
|
+
<div
|
|
189
|
+
:id="`${uniqueId}-dots`"
|
|
190
|
+
class="d-flex justify-center align-center carousel-dots"
|
|
191
|
+
>
|
|
192
|
+
<span
|
|
193
|
+
v-for="(item, index) in items"
|
|
194
|
+
:key="index"
|
|
195
|
+
:aria-hidden="true"
|
|
196
|
+
class="mx-2 carousel-dot"
|
|
197
|
+
:class="index === currentElement ? 'active-dot' : undefined"
|
|
198
|
+
/>
|
|
199
|
+
</div>
|
|
200
|
+
</section>
|
|
201
|
+
</template>
|
|
202
|
+
|
|
203
|
+
<style lang="scss" scoped>
|
|
204
|
+
@use '@/assets/amelipro/apTokens';
|
|
205
|
+
|
|
206
|
+
.v-btn {
|
|
207
|
+
&.btn-previous,
|
|
208
|
+
&.btn-next {
|
|
209
|
+
&:disabled {
|
|
210
|
+
color: apTokens.$ap-blue-darken1 !important;
|
|
211
|
+
background-color: transparent !important;
|
|
212
|
+
opacity: 0.7;
|
|
213
|
+
cursor: default;
|
|
214
|
+
|
|
215
|
+
& .v-icon {
|
|
216
|
+
color: apTokens.$ap-blue-darken1 !important;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.carousel {
|
|
223
|
+
position: relative;
|
|
224
|
+
width: 100%;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.carousel-items {
|
|
228
|
+
position: relative;
|
|
229
|
+
width: calc(100% - 80px);
|
|
230
|
+
margin: 0 40px;
|
|
231
|
+
overflow: hidden;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
.btn-previous,
|
|
235
|
+
.btn-next {
|
|
236
|
+
position: absolute;
|
|
237
|
+
top: calc(50% - 20px);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.btn-previous {
|
|
241
|
+
left: 0;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
.btn-next {
|
|
245
|
+
right: 0;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
.carousel-dots {
|
|
249
|
+
margin-top: 1.5rem;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
.carousel-dot {
|
|
253
|
+
width: 1rem;
|
|
254
|
+
height: 1rem;
|
|
255
|
+
border-radius: 50%;
|
|
256
|
+
border: 1px solid apTokens.$ap-blue-darken1;
|
|
257
|
+
background-color: apTokens.$ap-white;
|
|
258
|
+
|
|
259
|
+
&.active-dot {
|
|
260
|
+
background-color: apTokens.$ap-blue-darken1;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
</style>
|