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.
Files changed (138) hide show
  1. package/dist/BgAudio-fdecbff9.js +5 -0
  2. package/dist/DisplayBox-65e9eca6.js +5 -0
  3. package/dist/EpAlert-a0be5833.js +5 -0
  4. package/dist/EpAudio-8b3e9bc6.js +5 -0
  5. package/dist/EpBadge-7c355f64.js +5 -0
  6. package/dist/EpBarChart-4f9cf4a5.js +5 -0
  7. package/dist/EpBtn-e272db29.js +5 -0
  8. package/dist/EpCard-84ed498b.js +5 -0
  9. package/dist/EpCheckbox-fe632df9.js +36 -0
  10. package/dist/EpChip-41ef9cda.js +5 -0
  11. package/dist/EpContentSlider-fa83c239.js +5 -0
  12. package/dist/EpDivider-782f1320.js +5 -0
  13. package/dist/EpEdu-254592e7.js +5 -0
  14. package/dist/EpFlex-3fd43ac8.js +5 -0
  15. package/dist/EpHeader-36c94e1d.js +5 -0
  16. package/dist/EpIcon-b1dab9c7.js +5 -0
  17. package/dist/EpIframe-0ef6462c.js +5 -0
  18. package/dist/EpImg-a67494ab.js +5 -0
  19. package/dist/EpInput-7d0ace96.js +1171 -0
  20. package/dist/EpLineChart-0875318d.js +5 -0
  21. package/dist/EpLink-ae14268f.js +5 -0
  22. package/dist/EpLinkVersion-d2a66536.js +5 -0
  23. package/dist/EpModal-e7752c3a.js +5 -0
  24. package/dist/EpNothing-89192a65.js +10 -0
  25. package/dist/EpPieChart-a5c2b324.js +5 -0
  26. package/dist/EpQuestion-978df44b.js +5 -0
  27. package/dist/EpQuote-cf643027.js +5 -0
  28. package/dist/EpRadio-68bd99f6.js +5 -0
  29. package/dist/EpReading-8d0cd235.js +5 -0
  30. package/dist/EpResource-c2bda168.js +5 -0
  31. package/dist/EpScope-c32ba4f3.js +5 -0
  32. package/dist/EpSection-f86df6e5.js +5 -0
  33. package/dist/EpSelect-20303cb9.js +31 -0
  34. package/dist/EpSoftware-8d7db7e7.js +5 -0
  35. package/dist/EpSpinner-1f81811b.js +5 -0
  36. package/dist/EpSvg-a5f79222.js +5 -0
  37. package/dist/EpSwitch-1eaf9d3f.js +44 -0
  38. package/dist/EpTable-22a1b1a2.js +5 -0
  39. package/dist/EpTerm-37c870cd.js +5 -0
  40. package/dist/EpText-5337f1b1.js +5 -0
  41. package/dist/EpTextarea-67f751e9.js +41 -0
  42. package/dist/EpTimeLine-c4d0e6f5.js +5 -0
  43. package/dist/EpToggle-9755056a.js +44 -0
  44. package/dist/EpVideo-7fe796f2.js +5 -0
  45. package/dist/EpVideoPanopto-d5bfe806.js +5 -0
  46. package/dist/components/basics/EpBadge.vue.d.ts +38 -0
  47. package/dist/components/basics/EpBtn.vue.d.ts +108 -0
  48. package/dist/components/basics/EpCard.vue.d.ts +95 -0
  49. package/dist/components/basics/EpChip.vue.d.ts +72 -0
  50. package/dist/components/basics/EpDivider.vue.d.ts +51 -0
  51. package/dist/components/basics/EpFlex.vue.d.ts +9 -0
  52. package/dist/components/basics/EpIcon.vue.d.ts +37 -0
  53. package/dist/components/basics/EpImg.vue.d.ts +79 -0
  54. package/dist/components/basics/EpSection.vue.d.ts +84 -0
  55. package/dist/components/basics/EpSpinner.vue.d.ts +41 -0
  56. package/dist/components/basics/EpTable.vue.d.ts +24 -0
  57. package/dist/components/basics/EpText.vue.d.ts +34 -0
  58. package/dist/components/charts/EpBarChart.vue.d.ts +82 -0
  59. package/dist/components/charts/EpLineChart.vue.d.ts +82 -0
  60. package/dist/components/charts/EpPieChart.vue.d.ts +76 -0
  61. package/dist/components/educationals/EpEdu.vue.d.ts +81 -0
  62. package/dist/components/educationals/EpReading.vue.d.ts +152 -0
  63. package/dist/components/educationals/EpResource.vue.d.ts +35 -0
  64. package/dist/components/educationals/EpScope.vue.d.ts +23 -0
  65. package/dist/components/forms/EpCheckbox.vue.d.ts +72 -0
  66. package/dist/components/forms/EpInput.vue.d.ts +98 -0
  67. package/dist/components/forms/EpRadio.vue.d.ts +69 -0
  68. package/dist/components/forms/EpSelect.vue.d.ts +83 -0
  69. package/dist/components/forms/EpSwitch.vue.d.ts +81 -0
  70. package/dist/components/forms/EpTextarea.vue.d.ts +90 -0
  71. package/dist/components/forms/EpToggle.vue.d.ts +81 -0
  72. package/dist/components/interactions/EpAccordeon.vue.d.ts +54 -0
  73. package/dist/components/interactions/EpContentSlider.vue.d.ts +13 -0
  74. package/dist/components/interactions/EpModal.vue.d.ts +70 -0
  75. package/dist/components/interactions/EpQuestion.vue.d.ts +91 -0
  76. package/dist/components/interactions/EpTabs.vue.d.ts +2 -0
  77. package/dist/components/medias/EpAudio.vue.d.ts +74 -0
  78. package/dist/components/medias/EpCarousel.vue.d.ts +41 -0
  79. package/dist/components/medias/EpIframe.vue.d.ts +58 -0
  80. package/dist/components/medias/EpKatex.vue.d.ts +52 -0
  81. package/dist/components/medias/EpLink.vue.d.ts +74 -0
  82. package/dist/components/medias/EpLinkVersion.vue.d.ts +37 -0
  83. package/dist/components/medias/EpSoftware.vue.d.ts +89 -0
  84. package/dist/components/medias/EpSvg.vue.d.ts +35 -0
  85. package/dist/components/medias/EpTerm.vue.d.ts +91 -0
  86. package/dist/components/medias/EpTimeLine.vue.d.ts +32 -0
  87. package/dist/components/medias/EpVideo.vue.d.ts +65 -0
  88. package/dist/components/medias/EpVideoPanopto.vue.d.ts +65 -0
  89. package/dist/components/signages/EpAlert.vue.d.ts +61 -0
  90. package/dist/components/signages/EpHeader.vue.d.ts +105 -0
  91. package/dist/components/signages/EpNothing.vue.d.ts +2 -0
  92. package/dist/components/signages/EpQuote.vue.d.ts +39 -0
  93. package/dist/components/tools/BgAudio.vue.d.ts +14 -0
  94. package/dist/components/tools/DisplayBox.vue.d.ts +17 -0
  95. package/dist/components/tools/SvgFilter.vue.d.ts +2 -0
  96. package/dist/components/tools/TimelineItem.vue.d.ts +29 -0
  97. package/dist/composables/isHtml.d.ts +1 -0
  98. package/dist/composables/useColors.d.ts +1 -0
  99. package/dist/composables/useComponent.d.ts +6 -0
  100. package/dist/composables/useIcons.d.ts +23 -0
  101. package/dist/composables/useMarkdown.d.ts +1 -0
  102. package/dist/composables/useRenderText.d.ts +1 -0
  103. package/dist/ep-lib-ts.js +43 -0
  104. package/dist/ep-lib-ts.umd.cjs +348 -0
  105. package/dist/index-c413caa3.js +19381 -0
  106. package/dist/index.d.ts +40 -0
  107. package/dist/main.d.ts +0 -0
  108. package/dist/router.d.ts +2 -0
  109. package/dist/style.css +1 -0
  110. package/dist/types/Accordeon.d.ts +43 -0
  111. package/dist/types/Alert.d.ts +31 -0
  112. package/dist/types/Answer.d.ts +15 -0
  113. package/dist/types/Border.d.ts +2 -0
  114. package/dist/types/Btn.d.ts +41 -0
  115. package/dist/types/Card.d.ts +6 -0
  116. package/dist/types/Chip.d.ts +41 -0
  117. package/dist/types/MandateLevel.d.ts +5 -0
  118. package/dist/types/MediaCarousel.d.ts +7 -0
  119. package/dist/types/Medias.d.ts +11 -0
  120. package/dist/types/Radio.d.ts +11 -0
  121. package/dist/types/Slides.d.ts +15 -0
  122. package/dist/types/TimeLine.d.ts +124 -0
  123. package/dist/vite.svg +1 -0
  124. package/package.json +3 -3
  125. package/src/components/basics/EpCard.vue +0 -1
  126. package/src/components/basics/EpText.vue +7 -4
  127. package/src/components/charts/EpPieChart.vue +72 -4
  128. package/src/components/interactions/EpAccordeon.vue +14 -12
  129. package/src/components/interactions/EpContentSlider.vue +108 -5
  130. package/src/components/interactions/EpModal.vue +1 -1
  131. package/src/components/medias/EpCarousel.vue +1 -1
  132. package/src/components/medias/EpLink.vue +12 -11
  133. package/src/components/medias/EpSvg.vue +42 -3
  134. package/src/components/medias/EpTerm.vue +29 -14
  135. package/src/components/medias/EpTimeLine.vue +19 -17
  136. package/src/components/signages/EpHeader.vue +44 -93
  137. package/src/components/tools/DisplayBox.vue +2 -2
  138. 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="p-12 bg-warning-light w-[50%] mx-auto border-2 border-warning">
7
- <p class="text-center text-error font-bold uppercase">In progress</p>
8
- </div>
9
- </template>
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
 
@@ -3,7 +3,7 @@ import { computed, toRefs } from 'vue';
3
3
  import EpCard from '../basics/EpCard.vue'
4
4
 
5
5
  const size = {
6
- compact:"w-[40%]",
6
+ compact:"w-[45%]",
7
7
  default:"w-[75%]",
8
8
  comfortable:"w-[85%]"
9
9
  }
@@ -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
- 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%]`
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
- <div v-html="useRenderText(intentions)"></div>
50
- </template>
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" :href="href"
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
- <div class="p-12 bg-warning-light w-[50%] mx-auto border-2 border-warning">
6
- <p class="text-center text-error font-bold uppercase">In progress</p>
7
- </div>
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
- import { isHtml } from "../../composables/isHtml";
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: string;
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
- const renderText = computed(() => {
34
- if (!isHtml(props.definition)) {
35
- return useMarkdown(props.definition);
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 { term, graminfo, labelClose } = toRefs(props);
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="show = true"
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
- <div class="w-10/12 md:w-7/12 lg:6/12 mx-auto relative">
69
- <h3 class="text-2xl mb-2">{{ title?.title?.text?.headline }}</h3>
70
- <p>{{ title?.title?.text?.text }}</p>
71
- <div class="my-4">
72
- <template v-for="tag in timeLineTags" :key="tag.id">
73
- <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:''}`">
74
- {{ tag.title }} <EpIcon :icon-path="tag.active?mdiCheckboxMarkedCircle:mdiCheckboxBlankCircleOutline" size="14"></EpIcon>
75
- </span>
76
- </template>
77
- </div>
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
- </div>
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 { title, icon, color, src, height } = toRefs(props);
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 bg-white">
70
- <div :class="styles" :style="`background-image:url('${bgImg}')`">
71
- <div class="flex mt-2 place-self-end gap-2 lg:flex-row">
72
- <EpChip v-if="synchrone" color="secondary" :prependIcon="mdiCast"
73
- >Synchrone</EpChip
74
- >
75
- <EpChip v-if="duration" color="secondary" :prependIcon="mdiTimerOutline"
76
- > {{ duration }}</EpChip
77
- >
78
- <EpChip
79
- v-if="assessment"
80
- color="secondary"
81
- :prependIcon="mdiChairSchool"
82
- >Formatif</EpChip
83
- >
84
- </div>
85
-
86
- <div id="title-content" class="md:px-64 flex w-full grow flex items-end">
87
- <div
88
- class="container flex flex-col px-8 py-24 max-w-7xl md:flex-row lg:px-16"
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
- <div
112
- id="action"
113
- v-if="props.height !== null"
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
- </div>
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-40`:`hidden`
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" />