ep-lib-ts 0.1.14 → 0.1.16
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/BgAudio-fdecbff9.js +5 -0
- package/dist/DisplayBox-65e9eca6.js +5 -0
- package/dist/EpAlert-a0be5833.js +5 -0
- package/dist/EpAudio-8b3e9bc6.js +5 -0
- package/dist/EpBadge-7c355f64.js +5 -0
- package/dist/EpBarChart-4f9cf4a5.js +5 -0
- package/dist/EpBtn-e272db29.js +5 -0
- package/dist/EpCard-84ed498b.js +5 -0
- package/dist/EpCheckbox-fe632df9.js +36 -0
- package/dist/EpChip-41ef9cda.js +5 -0
- package/dist/EpContentSlider-fa83c239.js +5 -0
- package/dist/EpDivider-782f1320.js +5 -0
- package/dist/EpEdu-254592e7.js +5 -0
- package/dist/EpFlex-3fd43ac8.js +5 -0
- package/dist/EpHeader-36c94e1d.js +5 -0
- package/dist/EpIcon-b1dab9c7.js +5 -0
- package/dist/EpIframe-0ef6462c.js +5 -0
- package/dist/EpImg-a67494ab.js +5 -0
- package/dist/EpInput-7d0ace96.js +1171 -0
- package/dist/EpLineChart-0875318d.js +5 -0
- package/dist/EpLink-ae14268f.js +5 -0
- package/dist/EpLinkVersion-d2a66536.js +5 -0
- package/dist/EpModal-e7752c3a.js +5 -0
- package/dist/EpNothing-89192a65.js +10 -0
- package/dist/EpPieChart-a5c2b324.js +5 -0
- package/dist/EpQuestion-978df44b.js +5 -0
- package/dist/EpQuote-cf643027.js +5 -0
- package/dist/EpRadio-68bd99f6.js +5 -0
- package/dist/EpReading-8d0cd235.js +5 -0
- package/dist/EpResource-c2bda168.js +5 -0
- package/dist/EpScope-c32ba4f3.js +5 -0
- package/dist/EpSection-f86df6e5.js +5 -0
- package/dist/EpSelect-20303cb9.js +31 -0
- package/dist/EpSoftware-8d7db7e7.js +5 -0
- package/dist/EpSpinner-1f81811b.js +5 -0
- package/dist/EpSvg-a5f79222.js +5 -0
- package/dist/EpSwitch-1eaf9d3f.js +44 -0
- package/dist/EpTable-22a1b1a2.js +5 -0
- package/dist/EpTerm-37c870cd.js +5 -0
- package/dist/EpText-5337f1b1.js +5 -0
- package/dist/EpTextarea-67f751e9.js +41 -0
- package/dist/EpTimeLine-c4d0e6f5.js +5 -0
- package/dist/EpToggle-9755056a.js +44 -0
- package/dist/EpVideo-7fe796f2.js +5 -0
- package/dist/EpVideoPanopto-d5bfe806.js +5 -0
- package/dist/components/basics/EpBadge.vue.d.ts +38 -0
- package/dist/components/basics/EpBtn.vue.d.ts +108 -0
- package/dist/components/basics/EpCard.vue.d.ts +95 -0
- package/dist/components/basics/EpChip.vue.d.ts +72 -0
- package/dist/components/basics/EpDivider.vue.d.ts +51 -0
- package/dist/components/basics/EpFlex.vue.d.ts +9 -0
- package/dist/components/basics/EpIcon.vue.d.ts +37 -0
- package/dist/components/basics/EpImg.vue.d.ts +79 -0
- package/dist/components/basics/EpSection.vue.d.ts +84 -0
- package/dist/components/basics/EpSpinner.vue.d.ts +41 -0
- package/dist/components/basics/EpTable.vue.d.ts +24 -0
- package/dist/components/basics/EpText.vue.d.ts +34 -0
- package/dist/components/charts/EpBarChart.vue.d.ts +82 -0
- package/dist/components/charts/EpLineChart.vue.d.ts +82 -0
- package/dist/components/charts/EpPieChart.vue.d.ts +76 -0
- package/dist/components/educationals/EpEdu.vue.d.ts +81 -0
- package/dist/components/educationals/EpReading.vue.d.ts +152 -0
- package/dist/components/educationals/EpResource.vue.d.ts +35 -0
- package/dist/components/educationals/EpScope.vue.d.ts +23 -0
- package/dist/components/forms/EpCheckbox.vue.d.ts +72 -0
- package/dist/components/forms/EpInput.vue.d.ts +98 -0
- package/dist/components/forms/EpRadio.vue.d.ts +69 -0
- package/dist/components/forms/EpSelect.vue.d.ts +83 -0
- package/dist/components/forms/EpSwitch.vue.d.ts +81 -0
- package/dist/components/forms/EpTextarea.vue.d.ts +90 -0
- package/dist/components/forms/EpToggle.vue.d.ts +81 -0
- package/dist/components/interactions/EpAccordeon.vue.d.ts +54 -0
- package/dist/components/interactions/EpContentSlider.vue.d.ts +13 -0
- package/dist/components/interactions/EpModal.vue.d.ts +70 -0
- package/dist/components/interactions/EpQuestion.vue.d.ts +91 -0
- package/dist/components/interactions/EpTabs.vue.d.ts +2 -0
- package/dist/components/medias/EpAudio.vue.d.ts +74 -0
- package/dist/components/medias/EpCarousel.vue.d.ts +41 -0
- package/dist/components/medias/EpIframe.vue.d.ts +58 -0
- package/dist/components/medias/EpKatex.vue.d.ts +52 -0
- package/dist/components/medias/EpLink.vue.d.ts +74 -0
- package/dist/components/medias/EpLinkVersion.vue.d.ts +37 -0
- package/dist/components/medias/EpSoftware.vue.d.ts +89 -0
- package/dist/components/medias/EpSvg.vue.d.ts +35 -0
- package/dist/components/medias/EpTerm.vue.d.ts +91 -0
- package/dist/components/medias/EpTimeLine.vue.d.ts +32 -0
- package/dist/components/medias/EpVideo.vue.d.ts +65 -0
- package/dist/components/medias/EpVideoPanopto.vue.d.ts +65 -0
- package/dist/components/signages/EpAlert.vue.d.ts +61 -0
- package/dist/components/signages/EpHeader.vue.d.ts +105 -0
- package/dist/components/signages/EpNothing.vue.d.ts +2 -0
- package/dist/components/signages/EpQuote.vue.d.ts +39 -0
- package/dist/components/tools/BgAudio.vue.d.ts +14 -0
- package/dist/components/tools/DisplayBox.vue.d.ts +17 -0
- package/dist/components/tools/SvgFilter.vue.d.ts +2 -0
- package/dist/components/tools/TimelineItem.vue.d.ts +29 -0
- package/dist/composables/isHtml.d.ts +1 -0
- package/dist/composables/useColors.d.ts +1 -0
- package/dist/composables/useComponent.d.ts +6 -0
- package/dist/composables/useIcons.d.ts +23 -0
- package/dist/composables/useMarkdown.d.ts +1 -0
- package/dist/composables/useRenderText.d.ts +1 -0
- package/dist/ep-lib-ts.js +43 -0
- package/dist/ep-lib-ts.umd.cjs +348 -0
- package/dist/index-c413caa3.js +19381 -0
- package/dist/index.d.ts +40 -0
- package/dist/main.d.ts +0 -0
- package/dist/router.d.ts +2 -0
- package/dist/style.css +1 -0
- package/dist/types/Accordeon.d.ts +43 -0
- package/dist/types/Alert.d.ts +31 -0
- package/dist/types/Answer.d.ts +15 -0
- package/dist/types/Border.d.ts +2 -0
- package/dist/types/Btn.d.ts +41 -0
- package/dist/types/Card.d.ts +6 -0
- package/dist/types/Chip.d.ts +41 -0
- package/dist/types/MandateLevel.d.ts +5 -0
- package/dist/types/MediaCarousel.d.ts +7 -0
- package/dist/types/Medias.d.ts +11 -0
- package/dist/types/Radio.d.ts +11 -0
- package/dist/types/Slides.d.ts +15 -0
- package/dist/types/TimeLine.d.ts +124 -0
- package/dist/vite.svg +1 -0
- package/package.json +3 -3
- package/src/components/basics/EpCard.vue +0 -1
- package/src/components/basics/EpText.vue +7 -4
- package/src/components/charts/EpPieChart.vue +72 -4
- package/src/components/interactions/EpAccordeon.vue +14 -12
- package/src/components/interactions/EpContentSlider.vue +108 -5
- package/src/components/interactions/EpModal.vue +1 -1
- package/src/components/medias/EpCarousel.vue +1 -1
- package/src/components/medias/EpLink.vue +12 -11
- package/src/components/medias/EpSvg.vue +42 -3
- package/src/components/medias/EpTerm.vue +29 -14
- package/src/components/medias/EpTimeLine.vue +19 -17
- package/src/components/signages/EpHeader.vue +44 -93
- package/src/components/tools/DisplayBox.vue +2 -2
- package/src/components/tools/SvgFilter.vue +220 -0
|
@@ -1,12 +1,115 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
+
import { ref, computed, defineAsyncComponent, toRefs } from "vue";
|
|
3
|
+
import {SlidesType} from "../../types/Slides"
|
|
4
|
+
import { useComponent } from "../../composables/useComponent";
|
|
5
|
+
import { mdiArrowLeft } from "@mdi/js";
|
|
6
|
+
import { mdiArrowRight } from "@mdi/js";
|
|
7
|
+
import EpIcon from "../basics/EpIcon.vue";
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
interface Props {
|
|
11
|
+
slides:SlidesType[];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const props = withDefaults(defineProps<Props>(), {})
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
const currentIndex = ref<number>(0)
|
|
18
|
+
|
|
19
|
+
const currentSlide = computed(() => {
|
|
20
|
+
if(!props.slides){
|
|
21
|
+
return {title:'no data', img:'', uid:2, content:""}
|
|
22
|
+
}
|
|
23
|
+
if(props.slides.length === 0) {
|
|
24
|
+
return {title:'no data', img:'', uid:2, content:""}
|
|
25
|
+
}
|
|
26
|
+
return props.slides[currentIndex.value]
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
const currentSlideMediaContent = computed(() => {
|
|
30
|
+
if (currentSlide.value.img) {
|
|
31
|
+
return defineAsyncComponent(() => import('../basics/EpImg.vue'))
|
|
32
|
+
}
|
|
33
|
+
if(currentSlide.value.component){
|
|
34
|
+
const componentToLoad = useComponent(currentSlide.value.component?.type)
|
|
35
|
+
return defineAsyncComponent(()=>import(`../${componentToLoad.path}/${componentToLoad.name}.vue`))
|
|
36
|
+
}
|
|
37
|
+
return null
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
const max = computed(()=> (currentIndex.value+1) < props.slides.length)
|
|
41
|
+
const min = computed(()=> (currentIndex.value+1) > 1)
|
|
42
|
+
const next = () => {
|
|
43
|
+
if(max.value){
|
|
44
|
+
currentIndex.value += 1
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const prev = () => {
|
|
49
|
+
if(min.value){
|
|
50
|
+
currentIndex.value -= 1
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const goTo = (index:number) =>{
|
|
55
|
+
currentIndex.value = index
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const {slides} = toRefs(props)
|
|
2
59
|
|
|
3
60
|
</script>
|
|
4
61
|
|
|
5
62
|
<template>
|
|
6
|
-
<div class="
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
63
|
+
<div class="bg-stone-100 p-5 w-full md:h-custom overflow-hidden">
|
|
64
|
+
<div class="flex justify-between border-b border-black w-auto">
|
|
65
|
+
<h5 class="text-lg border-b-4 border-black">
|
|
66
|
+
{{ currentSlide.title }}
|
|
67
|
+
</h5>
|
|
68
|
+
<div class="md:flex items-end pb-1" v-if="slides">
|
|
69
|
+
<template v-for="(slide,i) in slides.length" :key="`slide-index-${i}`">
|
|
70
|
+
<span :class="`cursor-pointer h-4 w-4 ml-1 inline-block ${i === currentIndex?'bg-primary':'bg-gray-400'}`" @click="goTo(i)"></span>
|
|
71
|
+
</template>
|
|
72
|
+
<span class="ml-2 text-xs">({{(currentIndex+1)}}/{{ slides.length }})</span>
|
|
73
|
+
<button :class="`px-2 ${min?'':'opacity-5'}`" @click="prev">
|
|
74
|
+
<EpIcon :icon-path="mdiArrowLeft" size="24"></EpIcon>
|
|
75
|
+
</button>
|
|
76
|
+
<button :class="`mx-2 ${max?'':'opacity-5'}`" @click="next">
|
|
77
|
+
<EpIcon :icon-path="mdiArrowRight" size="24"></EpIcon>
|
|
78
|
+
</button>
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
<div class="">
|
|
82
|
+
<Transition name="list" mode="out-in">
|
|
83
|
+
<div class="md:flex p-8" :key="currentSlide.uid">
|
|
84
|
+
<div class="md:w-3/6 mr-5 flex items-center" v-if="currentSlideMediaContent">
|
|
85
|
+
<component v-if="currentSlide.img" :is="currentSlideMediaContent" :src="currentSlide.img"></component>
|
|
86
|
+
<component v-else-if="currentSlide.component" :is="currentSlideMediaContent" v-bind="{...currentSlide.component.data}"></component>
|
|
87
|
+
</div>
|
|
88
|
+
<div class="w-full">
|
|
89
|
+
<div class="overflow-y-auto h-96 p-custom" v-html="currentSlide.content"></div>
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
</Transition>
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
</template>
|
|
96
|
+
<style>
|
|
97
|
+
.list-enter-active,
|
|
98
|
+
.list-leave-active {
|
|
99
|
+
transition: all 0.5s ease;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.list-enter-from,
|
|
103
|
+
.list-leave-to {
|
|
104
|
+
opacity: 0;
|
|
105
|
+
transform: translateX(30px);
|
|
106
|
+
}
|
|
107
|
+
.h-custom {
|
|
108
|
+
height: 30rem;
|
|
109
|
+
}
|
|
10
110
|
|
|
11
|
-
|
|
111
|
+
.p-custom p {
|
|
112
|
+
margin-bottom:1em;
|
|
113
|
+
}
|
|
114
|
+
</style>
|
|
12
115
|
|
|
@@ -71,7 +71,7 @@ const { carrouselImg, labelClose, labelRef } = toRefs(props);
|
|
|
71
71
|
</div>
|
|
72
72
|
</EpModal>
|
|
73
73
|
</div>
|
|
74
|
-
<div v-else>
|
|
74
|
+
<div v-else class="flex">
|
|
75
75
|
<template v-for="image in carrouselImg" :key="`image-${image?.uid}`">
|
|
76
76
|
<EpImg :src="image.src" :bib="image.bib" :caption="image.caption" thumbnail></EpImg>
|
|
77
77
|
</template>
|
|
@@ -18,26 +18,26 @@ interface Props {
|
|
|
18
18
|
labelIntentions?: string;
|
|
19
19
|
type?: MediaVariants;
|
|
20
20
|
hideIcon?: boolean;
|
|
21
|
-
labelCard?:string;
|
|
22
|
-
icon?:string;
|
|
21
|
+
labelCard?: string;
|
|
22
|
+
icon?: string;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
const props = withDefaults(defineProps<Props>(), {
|
|
26
26
|
labelIntentions: "Intentions d'écoute",
|
|
27
27
|
type: "primary",
|
|
28
28
|
hideIcon: false,
|
|
29
|
-
intentions:""
|
|
29
|
+
intentions: ""
|
|
30
30
|
});
|
|
31
31
|
|
|
32
|
-
const renderIcon = computed(()=>{
|
|
33
|
-
if(props.icon){
|
|
32
|
+
const renderIcon = computed(() => {
|
|
33
|
+
if (props.icon) {
|
|
34
34
|
return props.icon
|
|
35
35
|
}
|
|
36
36
|
return mdiLinkVariant
|
|
37
37
|
})
|
|
38
38
|
|
|
39
|
-
const hoverColor = computed(()=>{
|
|
40
|
-
|
|
39
|
+
const hoverColor = computed(() => {
|
|
40
|
+
return `absolute ${useColors('bg', props.type + 'light')} bottom-0 w-0 left-1/2 h-full -translate-x-1/2 transition-all ease-in-out duration-300 group-hover:w-[105%] -z-[1] group-focus:w-[105%]`
|
|
41
41
|
})
|
|
42
42
|
|
|
43
43
|
const { href, label, intentions, mandateLevel, hideIcon } = toRefs(props);
|
|
@@ -46,14 +46,15 @@ const { href, label, intentions, mandateLevel, hideIcon } = toRefs(props);
|
|
|
46
46
|
<template>
|
|
47
47
|
<EpEdu :title="labelCard" :icon="renderIcon" flat :type="type" :hideIcon="hideIcon" :mandateLevel="mandateLevel">
|
|
48
48
|
<template #intentions v-if="useRenderText(intentions)">
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
<div v-html="useRenderText(intentions)"></div>
|
|
50
|
+
</template>
|
|
51
51
|
<template #content>
|
|
52
52
|
<div class="flex justify-center">
|
|
53
53
|
<div class="w-4/5">
|
|
54
|
-
<EpBtn block :color="type === 'base'?'text-black':'text-white'" rounded :type="type" :prependIcon="renderIcon"
|
|
54
|
+
<EpBtn block :color="type === 'base' ? 'text-black' : 'text-white'" rounded :type="type" :prependIcon="renderIcon"
|
|
55
|
+
:href="href"
|
|
55
56
|
extraClass="group font-medium tracking-wide relative inline-flex justify-center overflow-hidden z-10 transition-all duration-300 ease-in-out ">
|
|
56
|
-
<span class="font-medium tracking-wider ">{{label}}</span>
|
|
57
|
+
<span class="font-medium tracking-wider ">{{ label }}</span>
|
|
57
58
|
<span :class='hoverColor'></span>
|
|
58
59
|
</EpBtn>
|
|
59
60
|
</div>
|
|
@@ -1,8 +1,47 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
+
import { toRefs, computed } from 'vue';
|
|
3
|
+
import { MediaVariants } from "../../types/Medias";
|
|
4
|
+
import { MandateLevel } from '../../types/MandateLevel';
|
|
5
|
+
import { useRenderText } from "../../composables/useRenderText";
|
|
6
|
+
import { mdiImage } from '@mdi/js';
|
|
7
|
+
import EpEdu from '../educationals/EpEdu.vue';
|
|
8
|
+
|
|
9
|
+
interface Props {
|
|
10
|
+
desc?:string;
|
|
11
|
+
title?:string;
|
|
12
|
+
content?:string;
|
|
13
|
+
mandateLevel?: string | MandateLevel | null;
|
|
14
|
+
type?:MediaVariants
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
18
|
+
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
const renderText = computed(()=> {
|
|
22
|
+
if(props.desc){
|
|
23
|
+
return useRenderText(props.desc)
|
|
24
|
+
}
|
|
25
|
+
return null
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
const {title, content} = toRefs(props)
|
|
31
|
+
|
|
2
32
|
</script>
|
|
3
33
|
|
|
4
34
|
<template>
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
35
|
+
<EpEdu :title="title" :icon="mdiImage" flat :type="type" :mandateLevel="mandateLevel">
|
|
36
|
+
<template #intentions v-if="renderText">
|
|
37
|
+
<div v-html="renderText"></div>
|
|
38
|
+
</template>
|
|
39
|
+
<template #content>
|
|
40
|
+
<div class="flex justify-center">
|
|
41
|
+
<div class="w-4/5" v-if="content">
|
|
42
|
+
<div v-html="content" class="md:w-96 w-56 mx-auto"></div>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
</template>
|
|
46
|
+
</EpEdu>
|
|
8
47
|
</template>
|
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import { ref, toRefs, computed } from "vue";
|
|
2
|
+
import { ref, toRefs, computed, onMounted} from "vue";
|
|
3
|
+
import { useRenderText } from "../../composables/useRenderText";
|
|
4
|
+
import { mdiBookmarkMultipleOutline } from "@mdi/js";
|
|
5
|
+
import EpImg from "../basics/EpImg.vue";
|
|
3
6
|
import EpIcon from "../basics/EpIcon.vue";
|
|
4
7
|
import EpModal from "../interactions/EpModal.vue";
|
|
5
8
|
import EpDivider from "../basics/EpDivider.vue";
|
|
6
9
|
import EpBtn from "../basics/EpBtn.vue";
|
|
7
|
-
|
|
8
|
-
import { useMarkdown } from "../../composables/useMarkdown";
|
|
9
|
-
import { mdiBookmarkMultipleOutline } from "@mdi/js";
|
|
10
|
+
|
|
10
11
|
|
|
11
12
|
interface Props {
|
|
12
13
|
term: string;
|
|
13
14
|
word: string;
|
|
14
|
-
definition
|
|
15
|
+
definition?: string;
|
|
15
16
|
variations?: string;
|
|
16
17
|
domain?: string;
|
|
17
18
|
graminfo?: string;
|
|
18
19
|
relations?: string;
|
|
19
20
|
idrelation?: string;
|
|
20
21
|
labelClose?: string;
|
|
22
|
+
src?:string;
|
|
21
23
|
}
|
|
22
24
|
|
|
23
25
|
const props = withDefaults(defineProps<Props>(), {
|
|
@@ -30,12 +32,10 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
30
32
|
|
|
31
33
|
const show = ref(false);
|
|
32
34
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return props.definition;
|
|
38
|
-
});
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
39
|
|
|
40
40
|
const subtitle = computed(() => {
|
|
41
41
|
if (props.term !== props.word) {
|
|
@@ -78,12 +78,22 @@ const renderDomain = computed(() => {
|
|
|
78
78
|
return props.domain;
|
|
79
79
|
});
|
|
80
80
|
|
|
81
|
-
const
|
|
81
|
+
const toggleModal = () => {
|
|
82
|
+
show.value = !show.value
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const el = (contentref:any) => {
|
|
86
|
+
const contentHtml = contentref.innerHTML
|
|
87
|
+
const renderHtml = useRenderText(contentHtml)
|
|
88
|
+
contentref.innerHTML = renderHtml
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const { term, graminfo, labelClose, src } = toRefs(props);
|
|
82
92
|
</script>
|
|
83
93
|
|
|
84
94
|
<template>
|
|
85
95
|
<span
|
|
86
|
-
@click="
|
|
96
|
+
@click="toggleModal"
|
|
87
97
|
class="cursor-pointer border-primary border text-primary px-2 py-1 rounded group overflow-hidden relative"
|
|
88
98
|
>
|
|
89
99
|
<span
|
|
@@ -117,7 +127,12 @@ const { term, graminfo, labelClose } = toRefs(props);
|
|
|
117
127
|
>Domaine : <span class="font-bold">{{ renderDomain }}</span></span
|
|
118
128
|
>
|
|
119
129
|
</div>
|
|
120
|
-
<div v-html="renderText"></div>
|
|
130
|
+
<!-- <div v-html="renderText"></div> -->
|
|
131
|
+
<div :ref="el">
|
|
132
|
+
<slot></slot>
|
|
133
|
+
</div>
|
|
134
|
+
<EpImg v-if="src" :src="src"></EpImg>
|
|
135
|
+
|
|
121
136
|
<EpDivider v-if="renderVariations || renderRelations"></EpDivider>
|
|
122
137
|
<div class="text-sm mt-2" v-if="renderVariations">
|
|
123
138
|
<span class="mr-2 font-bold">Variations :</span>
|
|
@@ -65,24 +65,26 @@ const {title} = toRefs(props)
|
|
|
65
65
|
|
|
66
66
|
<template>
|
|
67
67
|
<!-- component -->
|
|
68
|
-
|
|
69
|
-
<
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
<
|
|
73
|
-
<
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
<div class="border-l-4 pl-1 transition-all">
|
|
79
|
-
<TransitionGroup name="list" tag="ul">
|
|
80
|
-
<template v-for="(item, i) in filteredEvents" :key="`${i}-card-${item.id}`">
|
|
81
|
-
<TimeLineItem :event="item"></TimeLineItem>
|
|
82
|
-
</template>
|
|
83
|
-
</TransitionGroup>
|
|
68
|
+
<div>
|
|
69
|
+
<div class="w-10/12 md:w-7/12 lg:6/12 mx-auto relative">
|
|
70
|
+
<h3 class="text-2xl mb-2">{{ title?.title?.text?.headline }}</h3>
|
|
71
|
+
<p>{{ title?.title?.text?.text }}</p>
|
|
72
|
+
<div class="my-4">
|
|
73
|
+
<template v-for="tag in timeLineTags" :key="tag.id">
|
|
74
|
+
<span @click="toggleActive(tag)" :class="`mr-2 cursor-pointer text-sm px-2 py-1 rounded border ${styleTag(tag.color).border} ${tag.active?'text-white':styleTag(tag.color).text} ${tag.active?styleTag(tag.color).bg:''}`">
|
|
75
|
+
{{ tag.title }} <EpIcon :icon-path="tag.active?mdiCheckboxMarkedCircle:mdiCheckboxBlankCircleOutline" size="14"></EpIcon>
|
|
76
|
+
</span>
|
|
77
|
+
</template>
|
|
84
78
|
</div>
|
|
85
|
-
|
|
79
|
+
<div class="border-l-4 pl-1 transition-all">
|
|
80
|
+
<TransitionGroup name="list" tag="ul">
|
|
81
|
+
<template v-for="(item, i) in filteredEvents" :key="`${i}-card-${item.id}`">
|
|
82
|
+
<TimeLineItem :event="item"></TimeLineItem>
|
|
83
|
+
</template>
|
|
84
|
+
</TransitionGroup>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
</div>
|
|
86
88
|
|
|
87
89
|
</template>
|
|
88
90
|
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import { toRefs, computed } from "vue";
|
|
3
|
-
import EpIcon from "../basics/EpIcon.vue";
|
|
4
3
|
|
|
5
|
-
import EpChip from "../basics/EpChip.vue";
|
|
6
|
-
import useColors from "../../composables/useColors";
|
|
7
|
-
import { mdiHome } from "@mdi/js";
|
|
8
4
|
import { mdiCast } from "@mdi/js";
|
|
9
5
|
import { mdiTimerOutline } from "@mdi/js";
|
|
10
6
|
import { mdiChairSchool } from "@mdi/js";
|
|
11
7
|
import { mdiChevronDown } from "@mdi/js";
|
|
8
|
+
import SvgFilter from '../tools/SvgFilter.vue'
|
|
9
|
+
import EpIcon from "../basics/EpIcon.vue";
|
|
10
|
+
import EpChip from "../basics/EpChip.vue";
|
|
12
11
|
|
|
13
12
|
interface Props {
|
|
14
13
|
title?: string | null;
|
|
15
14
|
subtitle?: string | null;
|
|
16
15
|
icon?: string | null;
|
|
17
16
|
color?: string | null;
|
|
18
|
-
taxonomyLevel?: string | null;
|
|
19
17
|
courseCode?: string | null;
|
|
20
18
|
courseTitle?: string | null;
|
|
21
19
|
height?: string | null;
|
|
@@ -23,6 +21,7 @@ interface Props {
|
|
|
23
21
|
synchrone?: boolean;
|
|
24
22
|
duration?: string | null;
|
|
25
23
|
assessment?: string | null;
|
|
24
|
+
headerImgColor?:string | null
|
|
26
25
|
}
|
|
27
26
|
|
|
28
27
|
// type, taxonomyLevel, courseCode, courseTitle, title, subtitle, height, src, color, synchrone
|
|
@@ -38,6 +37,7 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
38
37
|
assessment: null,
|
|
39
38
|
});
|
|
40
39
|
|
|
40
|
+
|
|
41
41
|
const colorText = computed(() => {
|
|
42
42
|
return props.color;
|
|
43
43
|
});
|
|
@@ -49,10 +49,9 @@ const styles = computed(() => {
|
|
|
49
49
|
items-start
|
|
50
50
|
overflow-hidden
|
|
51
51
|
w-full
|
|
52
|
+
absolute
|
|
52
53
|
${props.height !== null ? "min-h-screen" : "h-96"}
|
|
53
|
-
bg-cover
|
|
54
|
-
bg-blue-500
|
|
55
|
-
bg-blend-multiply `;
|
|
54
|
+
bg-cover`;
|
|
56
55
|
});
|
|
57
56
|
|
|
58
57
|
const bgImg = computed(() => {
|
|
@@ -62,102 +61,54 @@ const bgImg = computed(() => {
|
|
|
62
61
|
return `https://picsum.photos/800/480?random`;
|
|
63
62
|
});
|
|
64
63
|
|
|
65
|
-
const
|
|
64
|
+
const emit = defineEmits<{
|
|
65
|
+
(e:"clicked"):void
|
|
66
|
+
}>()
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
const clickScroll = ():void => {
|
|
70
|
+
emit('clicked')
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
const { title, headerImgColor } = toRefs(props);
|
|
66
75
|
</script>
|
|
67
76
|
|
|
68
77
|
<template>
|
|
69
|
-
<section class="items-center overflow-hidden
|
|
70
|
-
<div :class="styles" :style="`background-image:url('${bgImg}')
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
>
|
|
78
|
-
<
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
<div
|
|
91
|
-
v-if="title"
|
|
92
|
-
class="p-4 md:items-center backdrop-blur-md backdrop-brightness-50 backdrop-opacity-75 rounded-xl"
|
|
93
|
-
>
|
|
94
|
-
<div class="text-center md:text-left">
|
|
95
|
-
<div>
|
|
96
|
-
<p
|
|
97
|
-
class="text-2xl font-medium tracking-tight text-white sm:text-4xl"
|
|
98
|
-
>
|
|
99
|
-
{{ title }}
|
|
100
|
-
</p>
|
|
101
|
-
<p
|
|
102
|
-
class="max-w-xl mt-4 text-xl tracking-tight text-white contrast-50"
|
|
103
|
-
>
|
|
104
|
-
{{ subtitle }}
|
|
105
|
-
</p>
|
|
78
|
+
<section class="items-center overflow-hidden relative" ref="el">
|
|
79
|
+
<div :class="styles" :style="`background-image:url('${bgImg}'); filter:url(#${headerImgColor});`"></div>
|
|
80
|
+
|
|
81
|
+
<div class="relative">
|
|
82
|
+
<div class="flex md:justify-end justify-center pt-5">
|
|
83
|
+
<EpChip v-if="synchrone" :prependIcon="mdiCast">Synchrone</EpChip>
|
|
84
|
+
<EpChip v-if="duration" :prependIcon="mdiTimerOutline"> {{ duration }}</EpChip>
|
|
85
|
+
<EpChip v-if="assessment" :prependIcon="mdiChairSchool">Formatif</EpChip>
|
|
86
|
+
</div>
|
|
87
|
+
<div class="md:px-64 flex w-full py-24 grow flex items-end">
|
|
88
|
+
<div class="container flex flex-col px-8 max-w-7xl md:flex-row lg:px-16">
|
|
89
|
+
<div v-if="title || subtitle"
|
|
90
|
+
class="p-4 md:items-center backdrop-blur-md backdrop-brightness-50 backdrop-opacity-75 rounded"
|
|
91
|
+
>
|
|
92
|
+
<div class="text-center md:text-left">
|
|
93
|
+
<h1 v-if="title" class="text-xl font-medium tracking-tight text-white sm:text-3xl">
|
|
94
|
+
{{ title }}
|
|
95
|
+
</h1>
|
|
96
|
+
<h2 v-if="subtitle" class="max-w-xl mt-4 text-xl tracking-tight text-white contrast-50">
|
|
97
|
+
{{ subtitle }}
|
|
98
|
+
</h2>
|
|
106
99
|
</div>
|
|
107
100
|
</div>
|
|
108
101
|
</div>
|
|
109
102
|
</div>
|
|
103
|
+
|
|
110
104
|
</div>
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
class="place-self-center pb-12 animate-bounce"
|
|
115
|
-
>
|
|
116
|
-
<div class="mx-auto w-12 bg-white rounded-full p-2">
|
|
105
|
+
|
|
106
|
+
<div v-if="props.height !== null" class="place-self-center pb-12 animate-bounce">
|
|
107
|
+
<div class="mx-auto w-12 bg-white rounded-full p-2" @click="clickScroll">
|
|
117
108
|
<EpIcon :iconPath="mdiChevronDown" size="32"></EpIcon>
|
|
118
109
|
</div>
|
|
119
110
|
</div>
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
<!-- <div>
|
|
123
|
-
<div class="px-5 pt-6 mx-auto lg:max-w-6xl lg:px-0">
|
|
124
|
-
<dl class="grid grid-cols-1 gap-6 space-y-0 lg:gap-24 lg:grid-cols-3">
|
|
125
|
-
<div>
|
|
126
|
-
<div>
|
|
127
|
-
<p class="mt-5 text-lg font-semibold leading-6 text-black">
|
|
128
|
-
Developer experience
|
|
129
|
-
</p>
|
|
130
|
-
</div>
|
|
131
|
-
<div class="mt-2 text-base text-gray-600">
|
|
132
|
-
Do what you think is right. Don't let people make the decision of
|
|
133
|
-
right or wrong for you.
|
|
134
|
-
</div>
|
|
135
|
-
</div>
|
|
136
|
-
<div>
|
|
137
|
-
<div>
|
|
138
|
-
<p class="mt-5 text-lg font-semibold leading-6 text-black">
|
|
139
|
-
Designers go-to app
|
|
140
|
-
</p>
|
|
141
|
-
</div>
|
|
142
|
-
<div class="mt-2 text-base text-gray-600">
|
|
143
|
-
Only you can take inner freedom away from yourself, or give it to
|
|
144
|
-
yourself. Nobody else can
|
|
145
|
-
</div>
|
|
146
|
-
</div>
|
|
147
|
-
<div>
|
|
148
|
-
<div>
|
|
149
|
-
<p class="mt-5 text-lg font-semibold leading-6 text-black">
|
|
150
|
-
Easy onboarding
|
|
151
|
-
</p>
|
|
152
|
-
</div>
|
|
153
|
-
<div class="mt-2 text-base text-gray-600">
|
|
154
|
-
Your greatest self has been waiting your whole life; don't make it
|
|
155
|
-
wait any longer
|
|
156
|
-
</div>
|
|
157
|
-
</div>
|
|
158
|
-
</dl>
|
|
159
|
-
</div>
|
|
160
|
-
</div> -->
|
|
111
|
+
<SvgFilter></SvgFilter>
|
|
161
112
|
</section>
|
|
162
113
|
|
|
163
114
|
</template>
|
|
@@ -21,13 +21,13 @@ function close() {
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
const classOpen = computed(()=> {
|
|
24
|
-
return isOpen.value?`absolute w-[32rem] -left-96 z-
|
|
24
|
+
return isOpen.value?`absolute w-[32rem] -left-96 z-50`:`hidden`
|
|
25
25
|
})
|
|
26
26
|
|
|
27
27
|
</script>
|
|
28
28
|
|
|
29
29
|
<template>
|
|
30
|
-
<div class="relative">
|
|
30
|
+
<div class="relative z-50">
|
|
31
31
|
<slot :open="open" />
|
|
32
32
|
<div ref="menu" :class="classOpen">
|
|
33
33
|
<slot name="menu" :is-open="isOpen" :close="close" />
|