@cnamts/synapse 0.0.7-alpha → 0.0.8-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.
Files changed (102) hide show
  1. package/dist/design-system-v3.d.ts +325 -368
  2. package/dist/design-system-v3.js +2791 -2637
  3. package/dist/design-system-v3.umd.cjs +1 -10
  4. package/dist/style.css +1 -1
  5. package/package.json +10 -2
  6. package/src/assets/settings.scss +2 -2
  7. package/src/assets/tokens.scss +107 -112
  8. package/src/components/BackBtn/BackBtn.vue +4 -4
  9. package/src/components/BackToTopBtn/BackToTopBtn.vue +1 -0
  10. package/src/components/CollapsibleList/CollapsibleList.mdx +1 -1
  11. package/src/components/CollapsibleList/CollapsibleList.vue +43 -44
  12. package/src/components/ContextualMenu/ContextualMenu.mdx +118 -0
  13. package/src/components/ContextualMenu/ContextualMenu.stories.ts +430 -0
  14. package/src/components/ContextualMenu/ContextualMenu.vue +101 -0
  15. package/src/components/ContextualMenu/tests/ContextualMenu.spec.ts +115 -0
  16. package/src/components/ContextualMenu/tests/__snapshots__/ContextualMenu.spec.ts.snap +10 -0
  17. package/src/components/ContextualMenu/types.ts +5 -0
  18. package/src/components/CookieBanner/CookieBanner.stories.ts +1 -2
  19. package/src/components/CookieBanner/CookieBanner.vue +13 -10
  20. package/src/components/CookieBanner/tests/__snapshots__/CookieBanner.spec.ts.snap +17 -15
  21. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +6 -1
  22. package/src/components/CookiesSelection/CookiesInformation/locales.ts +1 -0
  23. package/src/components/CookiesSelection/CookiesTable/CookiesTable.vue +1 -0
  24. package/src/components/CookiesSelection/tests/__snapshots__/CookiesSelection.spec.ts.snap +17 -15
  25. package/src/components/CopyBtn/CopyBtn.vue +7 -7
  26. package/src/components/Customs/SyBtnSelect/SyBtnSelect.vue +26 -26
  27. package/src/components/Customs/SyInputSelect/SyInputSelect.vue +24 -24
  28. package/src/components/Customs/SySelect/SySelect.vue +27 -26
  29. package/src/components/DataList/DataList.stories.ts +3 -2
  30. package/src/components/DataList/DataList.vue +1 -1
  31. package/src/components/DataListGroup/DataListGroup.stories.ts +3 -2
  32. package/src/components/DataListItem/DataListItem.vue +12 -12
  33. package/src/components/DialogBox/DialogBox.mdx +28 -2
  34. package/src/components/DialogBox/DialogBox.stories.ts +1 -1
  35. package/src/components/DialogBox/DialogBox.vue +3 -2
  36. package/src/components/DownloadBtn/DownloadBtn.vue +2 -1
  37. package/src/components/ExternalLinks/ExternalLinks.mdx +86 -0
  38. package/src/components/ExternalLinks/ExternalLinks.stories.ts +553 -0
  39. package/src/components/ExternalLinks/ExternalLinks.vue +200 -0
  40. package/src/components/ExternalLinks/config.ts +34 -0
  41. package/src/components/ExternalLinks/locales.ts +4 -0
  42. package/src/components/ExternalLinks/tests/ExternalLinks.spec.ts +154 -0
  43. package/src/components/ExternalLinks/tests/__snapshots__/ExternalLinks.spec.ts.snap +159 -0
  44. package/src/components/FooterBar/FooterBar.vue +105 -80
  45. package/src/components/FranceConnectBtn/FranceConnectBtn.vue +14 -13
  46. package/src/components/HeaderBar/HeaderBar.vue +3 -3
  47. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.vue +11 -7
  48. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.vue +5 -5
  49. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuSection/HeaderMenuSection.vue +2 -2
  50. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.vue +10 -8
  51. package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +2 -2
  52. package/src/components/HeaderBar/HeaderLogo/logos/Logo-mobile.vue +2 -1
  53. package/src/components/HeaderBar/HeaderLogo/logos/Logo.vue +2 -1
  54. package/src/components/HeaderBar/HeaderMenuBtn/HeaderMenuBtn.vue +10 -10
  55. package/src/components/HeaderBar/consts.scss +1 -1
  56. package/src/components/HeaderLoading/HeaderLoading.vue +12 -11
  57. package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +2 -1
  58. package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +9 -9
  59. package/src/components/HeaderToolbar/HeaderToolbar.vue +215 -202
  60. package/src/components/LangBtn/LangBtn.vue +8 -6
  61. package/src/components/LogoBrandSection/LogoBrandSection.stories.ts +2 -2
  62. package/src/components/NirField/NirField.stories.ts +7 -7
  63. package/src/components/NirField/NirField.vue +44 -47
  64. package/src/components/NotFoundPage/NotFoundPage.stories.ts +33 -2
  65. package/src/components/NotFoundPage/NotFoundPage.vue +17 -0
  66. package/src/components/NotificationBar/NotificationBar.mdx +5 -5
  67. package/src/components/NotificationBar/NotificationBar.stories.ts +410 -314
  68. package/src/components/NotificationBar/NotificationBar.vue +43 -41
  69. package/src/components/PageContainer/PageContainer.vue +4 -4
  70. package/src/components/PasswordField/PasswordField.mdx +70 -0
  71. package/src/components/PasswordField/PasswordField.stories.ts +213 -0
  72. package/src/components/PasswordField/PasswordField.vue +189 -0
  73. package/src/components/PasswordField/config.ts +11 -0
  74. package/src/components/PasswordField/locales.ts +4 -0
  75. package/src/components/PasswordField/tests/PasswordField.spec.ts +96 -0
  76. package/src/components/PhoneField/PhoneField.mdx +0 -2
  77. package/src/components/PhoneField/PhoneField.stories.ts +10 -50
  78. package/src/components/PhoneField/PhoneField.vue +34 -34
  79. package/src/components/SkipLink/SkipLink.vue +10 -10
  80. package/src/components/SocialMediaLinks/SocialMediaLinks.vue +28 -26
  81. package/src/components/SubHeader/SubHeader.vue +32 -31
  82. package/src/components/SyAlert/SyAlert.vue +12 -12
  83. package/src/components/UserMenuBtn/UserMenuBtn.vue +1 -1
  84. package/src/components/UserMenuBtn/config.ts +1 -1
  85. package/src/components/index.ts +10 -7
  86. package/src/designTokens/index.ts +6 -4
  87. package/src/designTokens/{bootstrapColors.md → paColors.md} +1 -1
  88. package/src/designTokens/tokens/cnam/cnamLightTheme.ts +2 -0
  89. package/src/designTokens/tokens/pa/paColors.ts +171 -0
  90. package/src/designTokens/tokens/pa/paContextual.ts +58 -0
  91. package/src/designTokens/tokens/pa/paDarkTheme.ts +5 -0
  92. package/src/designTokens/tokens/pa/paLightTheme.ts +123 -0
  93. package/src/designTokens/tokens/pa/paSemantic.ts +87 -0
  94. package/src/stories/GuideDuDev/CreerUneIssue.mdx +64 -0
  95. package/src/stories/GuideDuDev/{CommentUtiliserLesRules.mdx → UtiliserLesRules.mdx} +2 -2
  96. package/src/stories/GuideDuDev/components.stories.ts +9 -7
  97. package/src/stories/Guidelines/Vuetify/Vuetify.stories.ts +163 -88
  98. package/src/stories/Guidelines/Vuetify/VuetifyItems.ts +250 -23
  99. package/src/temp/TestDTComponent.vue +5 -6
  100. package/src/designTokens/tokens/bootstrap/bootstrapColors.ts +0 -158
  101. package/src/designTokens/tokens/bootstrap/bootstrapLightTheme.ts +0 -22
  102. package/src/stories/GuideDuDev/CommentContribuer.mdx +0 -22
@@ -0,0 +1,200 @@
1
+ <script setup lang="ts">
2
+ import {
3
+ mdiChevronRight as rightArrowIcon,
4
+ mdiChevronLeft as leftArrowIcon,
5
+ mdiOpenInNew as linkIcon,
6
+ } from '@mdi/js'
7
+
8
+ import { locales } from './locales'
9
+ import { computed, ref, type CSSProperties } from 'vue'
10
+ import { convertToUnit } from '@/utils/convertToUnit'
11
+ import useCustomizableOptions, { type CustomizableOptions } from '@/composables/useCustomizableOptions'
12
+ import { config } from './config'
13
+
14
+ const props = withDefaults(defineProps<CustomizableOptions & {
15
+ items: Array<{
16
+ text: string
17
+ href: string
18
+ }>
19
+ position?: 'top right' | 'top left' | 'bottom right' | 'bottom left'
20
+ btnText?: string
21
+ nudgeTop?: number | string
22
+ nudgeBottom?: number | string
23
+ fixed?: boolean
24
+ ariaLabel?: string
25
+ ariaOwns?: string
26
+ }>(), {
27
+ position: 'top left',
28
+ btnText: locales.btnText,
29
+ nudgeTop: 0,
30
+ nudgeBottom: 0,
31
+ fixed: false,
32
+ ariaLabel: 'external-link-btn',
33
+ ariaOwns: 'external-link-btn',
34
+ })
35
+
36
+ const options = useCustomizableOptions(config, props)
37
+
38
+ const menu = ref(false)
39
+ const hover = ref(false)
40
+ const open = computed(() => menu.value || hover.value)
41
+
42
+ const left = computed(() => props.position.includes('left'))
43
+ const top = computed(() => props.position.includes('top'))
44
+
45
+ const btnStyle = computed<CSSProperties>(() => {
46
+ const minBtnWidth = '48px'
47
+ const translate = left.value
48
+ ? `translateX(calc(-100% + ${minBtnWidth}))`
49
+ : `translateX(calc(100% - ${minBtnWidth}))`
50
+
51
+ return {
52
+ transform: open.value ? 'translateX(0)' : translate,
53
+ position: props.fixed ? 'fixed' : 'absolute',
54
+ flexDirection: left.value ? 'row' : 'row-reverse',
55
+ top: top.value ? convertToUnit(props.nudgeTop) : 'auto',
56
+ bottom: !top.value ? convertToUnit(props.nudgeBottom) : 'auto',
57
+ left: left.value ? 0 : 'auto',
58
+ right: !left.value ? 0 : 'auto',
59
+ // Change z-index to avoid shadow bleeding (VMenu is set to 4)
60
+ zIndex: top.value ? '4' : '5',
61
+ }
62
+ })
63
+
64
+ const arrowIcon = computed(() => {
65
+ if (open.value) {
66
+ return left.value ? leftArrowIcon : rightArrowIcon
67
+ }
68
+ return left.value ? rightArrowIcon : leftArrowIcon
69
+ })
70
+ </script>
71
+
72
+ <template>
73
+ <div
74
+ :id="props.ariaOwns"
75
+ >
76
+ <VMenu
77
+ v-bind="options.menu"
78
+ :id="props.ariaOwns"
79
+ v-model="menu"
80
+ :location="top ? 'bottom' : 'top'"
81
+ attach
82
+ transition="fade-transition"
83
+ class="vd-external-links"
84
+ :class="{
85
+ 'vd-external-links--left': left,
86
+ 'vd-external-links--right': !left,
87
+ }"
88
+ >
89
+ <template #activator="{ props: vMenuProps }">
90
+ <VBtn
91
+ v-bind="{
92
+ ...vMenuProps,
93
+ ...options.btn,
94
+ }"
95
+ :aria-label="props.ariaLabel"
96
+ :aria-owns="props.ariaOwns"
97
+ :style="btnStyle"
98
+ class="vd-external-links-btn"
99
+ @mouseenter="hover = true"
100
+ @mouseleave="hover = false"
101
+ @focusin="hover = true"
102
+ @focusout="hover = false"
103
+ >
104
+ <span
105
+ :class="{
106
+ 'ml-3': !left,
107
+ 'mr-3': left,
108
+ }"
109
+ class="vd-external-links-btn-text white--text"
110
+ >
111
+ {{ btnText }}
112
+ </span>
113
+
114
+ <VIcon v-bind="options.btnIcon">
115
+ {{ arrowIcon }}
116
+ </VIcon>
117
+ </VBtn>
118
+ </template>
119
+
120
+ <VList
121
+ v-if="items.length"
122
+ v-bind="options.list"
123
+ class="vd-external-links-list"
124
+ >
125
+ <VListItem
126
+ v-for="(item, index) in items"
127
+ :key="index"
128
+ :href="item.href"
129
+ v-bind="options.listItem"
130
+ >
131
+ <div class="d-flex flex-row justify-space-between">
132
+ <VListItemTitle v-bind="options.listItemTitle">
133
+ {{ item.text }}
134
+ </VListItemTitle>
135
+
136
+ <slot name="link-icon">
137
+ <VIcon v-bind="options.linkIcon">
138
+ {{ linkIcon }}
139
+ </VIcon>
140
+ </slot>
141
+ </div>
142
+ </VListItem>
143
+ </VList>
144
+
145
+ <VSheet
146
+ v-else
147
+ v-bind="options.sheet"
148
+ >
149
+ <p class="mb-0">
150
+ {{ locales.noData }}
151
+ </p>
152
+ </VSheet>
153
+ </VMenu>
154
+ </div>
155
+ </template>
156
+
157
+ <style lang="scss" scoped>
158
+ $list-max-height: 248px;
159
+
160
+ .vd-external-links-btn {
161
+ // Allow overgrow on mobile
162
+ max-width: none;
163
+
164
+ :deep(.v-btn__content) {
165
+ flex-direction: inherit;
166
+ justify-content: space-between;
167
+ width: 100%;
168
+ }
169
+
170
+ .v-icon {
171
+ font-size: 1.5rem;
172
+ }
173
+ }
174
+
175
+ .vd-external-links--left :deep(.v-overlay__content) {
176
+ left: 0 !important;
177
+ right: auto !important;
178
+ }
179
+
180
+ .vd-external-links--right :deep(.v-overlay__content) {
181
+ right: 0 !important;
182
+ left: auto !important;
183
+ }
184
+
185
+ .vd-external-links > :deep(.v-overlay__content) {
186
+ border-radius: 0;
187
+ }
188
+
189
+ .vd-external-links-list {
190
+ max-height: $list-max-height;
191
+ overflow-y: auto;
192
+ border-radius: 0;
193
+ }
194
+
195
+ @media only screen and (height <= 340px) {
196
+ .vd-external-links-btn {
197
+ z-index: 4 !important;
198
+ }
199
+ }
200
+ </style>
@@ -0,0 +1,34 @@
1
+ import { cnamColorsTokens } from '@/designTokens/tokens/cnam/cnamColors'
2
+
3
+ export const config = {
4
+ menu: {
5
+ tile: true,
6
+ zIndex: 4,
7
+ offset: 0,
8
+ },
9
+ btn: {
10
+ tile: true,
11
+ minHeight: '48px',
12
+ minWidth: '328px',
13
+ color: cnamColorsTokens.blue.lighten20,
14
+ class: 'd-flex px-3',
15
+ },
16
+ btnIcon: {
17
+ color: 'white',
18
+ },
19
+ linkIcon: {
20
+ color: 'rgba(0, 0, 0, .54)',
21
+ },
22
+ list: {
23
+ border: false,
24
+ elevation: 3,
25
+ class: 'py-0',
26
+ },
27
+ listItem: {
28
+ target: '_blank',
29
+ rel: 'noopener noreferrer',
30
+ },
31
+ sheet: {
32
+ class: 'px-4 py-3',
33
+ },
34
+ }
@@ -0,0 +1,4 @@
1
+ export const locales = {
2
+ noData: 'Pas de données.',
3
+ btnText: 'Consulter les données externes',
4
+ }
@@ -0,0 +1,154 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { shallowMount, mount } from '@vue/test-utils'
3
+ import { vuetify } from '@tests/unit/setup'
4
+ import { locales } from '../locales'
5
+
6
+ import ExternalLinks from '../ExternalLinks.vue'
7
+
8
+ describe('ExternalLinks', () => {
9
+ it('renders correctly', () => {
10
+ const wrapper = shallowMount(ExternalLinks, {
11
+ props: {
12
+ position: 'top left',
13
+ items: [
14
+ {
15
+ text: 'ameli.fr',
16
+ href: 'https://www.ameli.fr',
17
+ },
18
+ {
19
+ text: 'Github',
20
+ href: 'https://www.github.com',
21
+ },
22
+ {
23
+ text: 'Twitter',
24
+ href: 'https://www.twitter.com',
25
+ },
26
+ ],
27
+ btnText: 'External Links',
28
+ nudgeTop: '0px',
29
+ nudgeBottom: '0px',
30
+ fixed: true,
31
+ },
32
+ global: {
33
+ plugins: [vuetify],
34
+ },
35
+ })
36
+
37
+ expect(wrapper.html()).toMatchSnapshot()
38
+ })
39
+
40
+ it('opens the menu when the button is clicked', async () => {
41
+ const wrapper = mount(ExternalLinks, {
42
+ props: {
43
+ position: 'top left',
44
+ items: [
45
+ {
46
+ text: 'ameli.fr',
47
+ href: 'https://www.ameli.fr',
48
+ },
49
+ {
50
+ text: 'Github',
51
+ href: 'https://www.github.com',
52
+ },
53
+ {
54
+ text: 'Twitter',
55
+ href: 'https://www.twitter.com',
56
+ },
57
+ ],
58
+ },
59
+ global: {
60
+ plugins: [vuetify],
61
+ },
62
+ })
63
+
64
+ const button = wrapper.find('button')
65
+ expect(wrapper.find('.vd-external-links-list').exists()).toBe(false)
66
+ await button.trigger('click')
67
+ expect(wrapper.find('.vd-external-links-list').exists()).toBe(true)
68
+ expect(wrapper.html()).toMatchSnapshot()
69
+ })
70
+
71
+ it('renders correctly without items', async () => {
72
+ const wrapper = mount(ExternalLinks, {
73
+ props: {
74
+ position: 'top left',
75
+ items: [],
76
+ },
77
+ global: {
78
+ plugins: [vuetify],
79
+ },
80
+ })
81
+
82
+ const button = wrapper.find('button')
83
+ await button.trigger('click')
84
+
85
+ expect(wrapper.text()).toContain(locales.noData)
86
+ })
87
+
88
+ it('renders correctly with fixed prop', async () => {
89
+ const wrapper = mount(ExternalLinks, {
90
+ props: {
91
+ position: 'bottom right',
92
+ items: [
93
+ {
94
+ text: 'ameli.fr',
95
+ href: 'https://www.ameli.fr',
96
+ },
97
+ {
98
+ text: 'Github',
99
+ href: 'https://www.github.com',
100
+ },
101
+ {
102
+ text: 'Twitter',
103
+ href: 'https://www.twitter.com',
104
+ },
105
+ ],
106
+ fixed: true,
107
+ },
108
+ global: {
109
+ plugins: [vuetify],
110
+ },
111
+ })
112
+
113
+ const button = wrapper.find('button')
114
+ await button.trigger('click')
115
+
116
+ expect(wrapper.html()).toMatchSnapshot()
117
+ expect(wrapper.find('.vd-external-links-btn').attributes('style')).toContain('position: fixed;')
118
+ })
119
+
120
+ it('slides on hover or focus', async () => {
121
+ const wrapper = mount(ExternalLinks, {
122
+ props: {
123
+ position: 'bottom right',
124
+ items: [],
125
+ },
126
+ global: {
127
+ plugins: [vuetify],
128
+ },
129
+ })
130
+ const button = wrapper.find('button')
131
+ expect(button.attributes('style')).toContain('transform: translateX(calc(100% - 48px));')
132
+ expect(wrapper.html()).toMatchSnapshot()
133
+
134
+ // set hover in mouseenter
135
+ await button.trigger('mouseenter')
136
+ expect(button.attributes('style')).toContain('transform: translateX(0);')
137
+ expect(wrapper.html()).toMatchSnapshot()
138
+
139
+ // remove hover mouseleave
140
+ await button.trigger('mouseleave')
141
+ expect(button.attributes('style')).toContain('transform: translateX(calc(100% - 48px));')
142
+ expect(wrapper.html()).toMatchSnapshot()
143
+
144
+ // set hover in focusin
145
+ await button.trigger('focusin')
146
+ expect(button.attributes('style')).toContain('transform: translateX(0);')
147
+ expect(wrapper.html()).toMatchSnapshot()
148
+
149
+ // remove hover focusout
150
+ await button.trigger('focusout')
151
+ expect(button.attributes('style')).toContain('transform: translateX(calc(100% - 48px));')
152
+ expect(wrapper.html()).toMatchSnapshot()
153
+ })
154
+ })
@@ -0,0 +1,159 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`ExternalLinks > opens the menu when the button is clicked 1`] = `
4
+ "<div data-v-353763df="" id="external-link-btn"><button data-v-353763df="" type="button" class="v-btn v-btn--elevated v-theme--light v-btn--density-default rounded-0 v-btn--size-default v-btn--variant-elevated d-flex px-3 vd-external-links-btn" style="background-color: #3d67ae; color: #fff; caret-color: #fff; min-height: 48px; min-width: 328px; transform: translateX(0); position: absolute; flex-direction: row; top: 0px; bottom: auto; left: 0px; right: auto; z-index: 4;" aria-haspopup="menu" aria-expanded="true" aria-owns="external-link-btn" aria-label="external-link-btn"><span class="v-btn__overlay"></span><span class="v-btn__underlay"></span>
5
+ <!----><span class="v-btn__content" data-no-activator=""><span data-v-353763df="" class="mr-3 vd-external-links-btn-text white--text">Consulter les données externes</span><i data-v-353763df="" class="M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z mdi v-icon notranslate v-theme--light v-icon--size-default text-white" aria-hidden="true"></i></span>
6
+ <!---->
7
+ <!---->
8
+ </button>
9
+ <!--teleport start-->
10
+ <div class="v-overlay v-overlay--absolute v-overlay--active v-theme--light v-locale--is-ltr v-menu vd-external-links vd-external-links--left" style="z-index: 4;" id="external-link-btn" data-v-353763df="" tile="true">
11
+ <transition-stub name="fade-transition" appear="true" persisted="false" css="true">
12
+ <!---->
13
+ </transition-stub>
14
+ <transition-stub name="fade-transition" appear="true" persisted="true" css="true" target="<button data-v-353763df=&quot;&quot; type=&quot;button&quot; class=&quot;v-btn v-btn--elevated v-theme--light v-btn--density-default rounded-0 v-btn--size-default v-btn--variant-elevated d-flex px-3 vd-external-links-btn&quot; style=&quot;background-color: #3d67ae; color: #fff; caret-color: #fff; min-height: 48px; min-width: 328px; transform: translateX(0); position: absolute; flex-direction: row; top: 0px; bottom: auto; left: 0px; right: auto; z-index: 4;&quot; aria-haspopup=&quot;menu&quot; aria-expanded=&quot;true&quot; aria-owns=&quot;external-link-btn&quot; aria-label=&quot;external-link-btn&quot;><span class=&quot;v-btn__overlay&quot;></span><span class=&quot;v-btn__underlay&quot;></span><!----><span class=&quot;v-btn__content&quot; data-no-activator=&quot;&quot;><span data-v-353763df=&quot;&quot; class=&quot;mr-3 vd-external-links-btn-text white--text&quot;>Consulter les données externes</span><i data-v-353763df=&quot;&quot; class=&quot;M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z mdi v-icon notranslate v-theme--light v-icon--size-default text-white&quot; aria-hidden=&quot;true&quot;></i></span><!----><!----></button>">
15
+ <div class="v-overlay__content" style="--v-overlay-anchor-origin: top right; transform-origin: bottom right; top: 12px; left: 12px; min-width: 0px; max-width: 0px; max-height: 0px;">
16
+ <div data-v-353763df="" class="v-list v-theme--light v-list--density-default elevation-3 v-list--one-line py-0 vd-external-links-list" tabindex="0" role="listbox"><a data-v-353763df="" class="v-list-item v-list-item--link v-theme--light v-list-item--density-default v-list-item--one-line rounded-0 v-list-item--variant-text" tabindex="-2" href="https://www.ameli.fr" target="_blank" rel="noopener noreferrer"><span class="v-list-item__overlay"></span><span class="v-list-item__underlay"></span>
17
+ <!---->
18
+ <div class="v-list-item__content" data-no-activator="">
19
+ <!---->
20
+ <!---->
21
+ <div data-v-353763df="" class="d-flex flex-row justify-space-between">
22
+ <div data-v-353763df="" class="v-list-item-title">ameli.fr</div><i data-v-353763df="" class="M14,3V5H17.59L7.76,14.83L9.17,16.24L19,6.41V10H21V3M19,19H5V5H12V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V12H19V19Z mdi v-icon notranslate v-theme--light v-icon--size-default" style="color: rgba(0, 0, 0, .54); caret-color: rgba(0, 0, 0, .54);" aria-hidden="true"></i>
23
+ </div>
24
+ </div>
25
+ <!---->
26
+ </a><a data-v-353763df="" class="v-list-item v-list-item--link v-theme--light v-list-item--density-default v-list-item--one-line rounded-0 v-list-item--variant-text" tabindex="-2" href="https://www.github.com" target="_blank" rel="noopener noreferrer"><span class="v-list-item__overlay"></span><span class="v-list-item__underlay"></span>
27
+ <!---->
28
+ <div class="v-list-item__content" data-no-activator="">
29
+ <!---->
30
+ <!---->
31
+ <div data-v-353763df="" class="d-flex flex-row justify-space-between">
32
+ <div data-v-353763df="" class="v-list-item-title">Github</div><i data-v-353763df="" class="M14,3V5H17.59L7.76,14.83L9.17,16.24L19,6.41V10H21V3M19,19H5V5H12V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V12H19V19Z mdi v-icon notranslate v-theme--light v-icon--size-default" style="color: rgba(0, 0, 0, .54); caret-color: rgba(0, 0, 0, .54);" aria-hidden="true"></i>
33
+ </div>
34
+ </div>
35
+ <!---->
36
+ </a><a data-v-353763df="" class="v-list-item v-list-item--link v-theme--light v-list-item--density-default v-list-item--one-line rounded-0 v-list-item--variant-text" tabindex="-2" href="https://www.twitter.com" target="_blank" rel="noopener noreferrer"><span class="v-list-item__overlay"></span><span class="v-list-item__underlay"></span>
37
+ <!---->
38
+ <div class="v-list-item__content" data-no-activator="">
39
+ <!---->
40
+ <!---->
41
+ <div data-v-353763df="" class="d-flex flex-row justify-space-between">
42
+ <div data-v-353763df="" class="v-list-item-title">Twitter</div><i data-v-353763df="" class="M14,3V5H17.59L7.76,14.83L9.17,16.24L19,6.41V10H21V3M19,19H5V5H12V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V12H19V19Z mdi v-icon notranslate v-theme--light v-icon--size-default" style="color: rgba(0, 0, 0, .54); caret-color: rgba(0, 0, 0, .54);" aria-hidden="true"></i>
43
+ </div>
44
+ </div>
45
+ <!---->
46
+ </a></div>
47
+ </div>
48
+ </transition-stub>
49
+ </div>
50
+ <!--teleport end-->
51
+ </div>"
52
+ `;
53
+
54
+ exports[`ExternalLinks > renders correctly 1`] = `
55
+ "<div data-v-353763df="" id="external-link-btn">
56
+ <v-menu-stub data-v-353763df="" offset="0" id="external-link-btn" class="vd-external-links vd-external-links--left" submenu="false" attach="true" closeonback="true" contained="false" disabled="false" noclickanimation="false" modelvalue="false" persistent="false" scrim="false" zindex="4" activatorprops="[object Object]" openonhover="false" closeoncontentclick="true" closedelay="250" opendelay="300" eager="false" locationstrategy="connected" location="bottom" origin="auto" scrollstrategy="reposition" transition="fade-transition" tile="true"></v-menu-stub>
57
+ </div>"
58
+ `;
59
+
60
+ exports[`ExternalLinks > renders correctly with fixed prop 1`] = `
61
+ "<div data-v-353763df="" id="external-link-btn"><button data-v-353763df="" type="button" class="v-btn v-btn--elevated v-theme--light v-btn--density-default rounded-0 v-btn--size-default v-btn--variant-elevated d-flex px-3 vd-external-links-btn" style="background-color: #3d67ae; color: #fff; caret-color: #fff; min-height: 48px; min-width: 328px; transform: translateX(0); position: fixed; flex-direction: row-reverse; top: auto; bottom: 0px; left: auto; right: 0px; z-index: 5;" aria-haspopup="menu" aria-expanded="true" aria-owns="external-link-btn" aria-label="external-link-btn"><span class="v-btn__overlay"></span><span class="v-btn__underlay"></span>
62
+ <!----><span class="v-btn__content" data-no-activator=""><span data-v-353763df="" class="ml-3 vd-external-links-btn-text white--text">Consulter les données externes</span><i data-v-353763df="" class="M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z mdi v-icon notranslate v-theme--light v-icon--size-default text-white" aria-hidden="true"></i></span>
63
+ <!---->
64
+ <!---->
65
+ </button>
66
+ <!--teleport start-->
67
+ <div class="v-overlay v-overlay--absolute v-overlay--active v-theme--light v-locale--is-ltr v-menu vd-external-links vd-external-links--right" style="z-index: 24;" id="external-link-btn" data-v-353763df="" tile="true">
68
+ <transition-stub name="fade-transition" appear="true" persisted="false" css="true">
69
+ <!---->
70
+ </transition-stub>
71
+ <transition-stub name="fade-transition" appear="true" persisted="true" css="true" target="<button data-v-353763df=&quot;&quot; type=&quot;button&quot; class=&quot;v-btn v-btn--elevated v-theme--light v-btn--density-default rounded-0 v-btn--size-default v-btn--variant-elevated d-flex px-3 vd-external-links-btn&quot; style=&quot;background-color: #3d67ae; color: #fff; caret-color: #fff; min-height: 48px; min-width: 328px; transform: translateX(0); position: fixed; flex-direction: row-reverse; top: auto; bottom: 0px; left: auto; right: 0px; z-index: 5;&quot; aria-haspopup=&quot;menu&quot; aria-expanded=&quot;true&quot; aria-owns=&quot;external-link-btn&quot; aria-label=&quot;external-link-btn&quot;><span class=&quot;v-btn__overlay&quot;></span><span class=&quot;v-btn__underlay&quot;></span><!----><span class=&quot;v-btn__content&quot; data-no-activator=&quot;&quot;><span data-v-353763df=&quot;&quot; class=&quot;ml-3 vd-external-links-btn-text white--text&quot;>Consulter les données externes</span><i data-v-353763df=&quot;&quot; class=&quot;M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z mdi v-icon notranslate v-theme--light v-icon--size-default text-white&quot; aria-hidden=&quot;true&quot;></i></span><!----><!----></button>">
72
+ <div class="v-overlay__content" style="--v-overlay-anchor-origin: bottom right; transform-origin: top right; top: 12px; left: 12px; min-width: 0px; max-width: 0px; max-height: 0px;">
73
+ <div data-v-353763df="" class="v-list v-theme--light v-list--density-default elevation-3 v-list--one-line py-0 vd-external-links-list" tabindex="0" role="listbox"><a data-v-353763df="" class="v-list-item v-list-item--link v-theme--light v-list-item--density-default v-list-item--one-line rounded-0 v-list-item--variant-text" tabindex="-2" href="https://www.ameli.fr" target="_blank" rel="noopener noreferrer"><span class="v-list-item__overlay"></span><span class="v-list-item__underlay"></span>
74
+ <!---->
75
+ <div class="v-list-item__content" data-no-activator="">
76
+ <!---->
77
+ <!---->
78
+ <div data-v-353763df="" class="d-flex flex-row justify-space-between">
79
+ <div data-v-353763df="" class="v-list-item-title">ameli.fr</div><i data-v-353763df="" class="M14,3V5H17.59L7.76,14.83L9.17,16.24L19,6.41V10H21V3M19,19H5V5H12V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V12H19V19Z mdi v-icon notranslate v-theme--light v-icon--size-default" style="color: rgba(0, 0, 0, .54); caret-color: rgba(0, 0, 0, .54);" aria-hidden="true"></i>
80
+ </div>
81
+ </div>
82
+ <!---->
83
+ </a><a data-v-353763df="" class="v-list-item v-list-item--link v-theme--light v-list-item--density-default v-list-item--one-line rounded-0 v-list-item--variant-text" tabindex="-2" href="https://www.github.com" target="_blank" rel="noopener noreferrer"><span class="v-list-item__overlay"></span><span class="v-list-item__underlay"></span>
84
+ <!---->
85
+ <div class="v-list-item__content" data-no-activator="">
86
+ <!---->
87
+ <!---->
88
+ <div data-v-353763df="" class="d-flex flex-row justify-space-between">
89
+ <div data-v-353763df="" class="v-list-item-title">Github</div><i data-v-353763df="" class="M14,3V5H17.59L7.76,14.83L9.17,16.24L19,6.41V10H21V3M19,19H5V5H12V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V12H19V19Z mdi v-icon notranslate v-theme--light v-icon--size-default" style="color: rgba(0, 0, 0, .54); caret-color: rgba(0, 0, 0, .54);" aria-hidden="true"></i>
90
+ </div>
91
+ </div>
92
+ <!---->
93
+ </a><a data-v-353763df="" class="v-list-item v-list-item--link v-theme--light v-list-item--density-default v-list-item--one-line rounded-0 v-list-item--variant-text" tabindex="-2" href="https://www.twitter.com" target="_blank" rel="noopener noreferrer"><span class="v-list-item__overlay"></span><span class="v-list-item__underlay"></span>
94
+ <!---->
95
+ <div class="v-list-item__content" data-no-activator="">
96
+ <!---->
97
+ <!---->
98
+ <div data-v-353763df="" class="d-flex flex-row justify-space-between">
99
+ <div data-v-353763df="" class="v-list-item-title">Twitter</div><i data-v-353763df="" class="M14,3V5H17.59L7.76,14.83L9.17,16.24L19,6.41V10H21V3M19,19H5V5H12V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V12H19V19Z mdi v-icon notranslate v-theme--light v-icon--size-default" style="color: rgba(0, 0, 0, .54); caret-color: rgba(0, 0, 0, .54);" aria-hidden="true"></i>
100
+ </div>
101
+ </div>
102
+ <!---->
103
+ </a></div>
104
+ </div>
105
+ </transition-stub>
106
+ </div>
107
+ <!--teleport end-->
108
+ </div>"
109
+ `;
110
+
111
+ exports[`ExternalLinks > slides on hover or focus 1`] = `
112
+ "<div data-v-353763df="" id="external-link-btn"><button data-v-353763df="" type="button" class="v-btn v-btn--elevated v-theme--light v-btn--density-default rounded-0 v-btn--size-default v-btn--variant-elevated d-flex px-3 vd-external-links-btn" style="background-color: #3d67ae; color: #fff; caret-color: #fff; min-height: 48px; min-width: 328px; transform: translateX(calc(100% - 48px)); position: absolute; flex-direction: row-reverse; top: auto; bottom: 0px; left: auto; right: 0px; z-index: 5;" aria-haspopup="menu" aria-expanded="false" aria-owns="external-link-btn" aria-label="external-link-btn"><span class="v-btn__overlay"></span><span class="v-btn__underlay"></span>
113
+ <!----><span class="v-btn__content" data-no-activator=""><span data-v-353763df="" class="ml-3 vd-external-links-btn-text white--text">Consulter les données externes</span><i data-v-353763df="" class="M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z mdi v-icon notranslate v-theme--light v-icon--size-default text-white" aria-hidden="true"></i></span>
114
+ <!---->
115
+ <!---->
116
+ </button>
117
+ <!---->
118
+ </div>"
119
+ `;
120
+
121
+ exports[`ExternalLinks > slides on hover or focus 2`] = `
122
+ "<div data-v-353763df="" id="external-link-btn"><button data-v-353763df="" type="button" class="v-btn v-btn--elevated v-theme--light v-btn--density-default rounded-0 v-btn--size-default v-btn--variant-elevated d-flex px-3 vd-external-links-btn" style="background-color: #3d67ae; color: #fff; caret-color: #fff; min-height: 48px; min-width: 328px; transform: translateX(0); position: absolute; flex-direction: row-reverse; top: auto; bottom: 0px; left: auto; right: 0px; z-index: 5;" aria-haspopup="menu" aria-expanded="false" aria-owns="external-link-btn" aria-label="external-link-btn"><span class="v-btn__overlay"></span><span class="v-btn__underlay"></span>
123
+ <!----><span class="v-btn__content" data-no-activator=""><span data-v-353763df="" class="ml-3 vd-external-links-btn-text white--text">Consulter les données externes</span><i data-v-353763df="" class="M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z mdi v-icon notranslate v-theme--light v-icon--size-default text-white" aria-hidden="true"></i></span>
124
+ <!---->
125
+ <!---->
126
+ </button>
127
+ <!---->
128
+ </div>"
129
+ `;
130
+
131
+ exports[`ExternalLinks > slides on hover or focus 3`] = `
132
+ "<div data-v-353763df="" id="external-link-btn"><button data-v-353763df="" type="button" class="v-btn v-btn--elevated v-theme--light v-btn--density-default rounded-0 v-btn--size-default v-btn--variant-elevated d-flex px-3 vd-external-links-btn" style="background-color: #3d67ae; color: #fff; caret-color: #fff; min-height: 48px; min-width: 328px; transform: translateX(calc(100% - 48px)); position: absolute; flex-direction: row-reverse; top: auto; bottom: 0px; left: auto; right: 0px; z-index: 5;" aria-haspopup="menu" aria-expanded="false" aria-owns="external-link-btn" aria-label="external-link-btn"><span class="v-btn__overlay"></span><span class="v-btn__underlay"></span>
133
+ <!----><span class="v-btn__content" data-no-activator=""><span data-v-353763df="" class="ml-3 vd-external-links-btn-text white--text">Consulter les données externes</span><i data-v-353763df="" class="M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z mdi v-icon notranslate v-theme--light v-icon--size-default text-white" aria-hidden="true"></i></span>
134
+ <!---->
135
+ <!---->
136
+ </button>
137
+ <!---->
138
+ </div>"
139
+ `;
140
+
141
+ exports[`ExternalLinks > slides on hover or focus 4`] = `
142
+ "<div data-v-353763df="" id="external-link-btn"><button data-v-353763df="" type="button" class="v-btn v-btn--elevated v-theme--light v-btn--density-default rounded-0 v-btn--size-default v-btn--variant-elevated d-flex px-3 vd-external-links-btn" style="background-color: #3d67ae; color: #fff; caret-color: #fff; min-height: 48px; min-width: 328px; transform: translateX(0); position: absolute; flex-direction: row-reverse; top: auto; bottom: 0px; left: auto; right: 0px; z-index: 5;" aria-haspopup="menu" aria-expanded="false" aria-owns="external-link-btn" aria-label="external-link-btn"><span class="v-btn__overlay"></span><span class="v-btn__underlay"></span>
143
+ <!----><span class="v-btn__content" data-no-activator=""><span data-v-353763df="" class="ml-3 vd-external-links-btn-text white--text">Consulter les données externes</span><i data-v-353763df="" class="M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z mdi v-icon notranslate v-theme--light v-icon--size-default text-white" aria-hidden="true"></i></span>
144
+ <!---->
145
+ <!---->
146
+ </button>
147
+ <!---->
148
+ </div>"
149
+ `;
150
+
151
+ exports[`ExternalLinks > slides on hover or focus 5`] = `
152
+ "<div data-v-353763df="" id="external-link-btn"><button data-v-353763df="" type="button" class="v-btn v-btn--elevated v-theme--light v-btn--density-default rounded-0 v-btn--size-default v-btn--variant-elevated d-flex px-3 vd-external-links-btn" style="background-color: #3d67ae; color: #fff; caret-color: #fff; min-height: 48px; min-width: 328px; transform: translateX(calc(100% - 48px)); position: absolute; flex-direction: row-reverse; top: auto; bottom: 0px; left: auto; right: 0px; z-index: 5;" aria-haspopup="menu" aria-expanded="false" aria-owns="external-link-btn" aria-label="external-link-btn"><span class="v-btn__overlay"></span><span class="v-btn__underlay"></span>
153
+ <!----><span class="v-btn__content" data-no-activator=""><span data-v-353763df="" class="ml-3 vd-external-links-btn-text white--text">Consulter les données externes</span><i data-v-353763df="" class="M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z mdi v-icon notranslate v-theme--light v-icon--size-default text-white" aria-hidden="true"></i></span>
154
+ <!---->
155
+ <!---->
156
+ </button>
157
+ <!---->
158
+ </div>"
159
+ `;