ep-lib-ts 1.1.13 → 1.1.14

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 (142) hide show
  1. package/dist/components/basics/EpBtn.vue.js +2 -2
  2. package/dist/components/basics/EpBtn.vue.js.map +1 -1
  3. package/dist/components/basics/EpChip.vue.js +2 -2
  4. package/dist/components/basics/EpChip.vue.js.map +1 -1
  5. package/dist/components/basics/EpHover.vue.js +1 -1
  6. package/dist/components/basics/EpHover.vue.js.map +1 -1
  7. package/dist/components/basics/EpHoverCard.vue.js +6 -6
  8. package/dist/components/basics/EpHoverCard.vue.js.map +1 -1
  9. package/dist/components/basics/EpImg.vue.js +8 -8
  10. package/dist/components/basics/EpImg.vue.js.map +1 -1
  11. package/dist/components/basics/EpImgCarousel.vue.js +8 -8
  12. package/dist/components/basics/EpImgCarousel.vue.js.map +1 -1
  13. package/dist/components/basics/EpSection.vue.js +25 -25
  14. package/dist/components/basics/EpSection.vue.js.map +1 -1
  15. package/dist/components/basics/EpSectionCols.vue.js +29 -29
  16. package/dist/components/basics/EpSectionCols.vue.js.map +1 -1
  17. package/dist/components/basics/EpSpinner.vue.js +5 -5
  18. package/dist/components/basics/EpSpinner.vue.js.map +1 -1
  19. package/dist/components/basics/EpStackedList.vue.js +4 -4
  20. package/dist/components/basics/EpStackedList.vue.js.map +1 -1
  21. package/dist/components/charts/EpBarChart.vue.js +3 -3
  22. package/dist/components/charts/EpBarChart.vue.js.map +1 -1
  23. package/dist/components/charts/EpFunnelChart.vue.js +4 -4
  24. package/dist/components/charts/EpFunnelChart.vue.js.map +1 -1
  25. package/dist/components/charts/EpLineChart.vue.js +3 -3
  26. package/dist/components/charts/EpLineChart.vue.js.map +1 -1
  27. package/dist/components/charts/EpPieChart.vue.js +4 -4
  28. package/dist/components/charts/EpPieChart.vue.js.map +1 -1
  29. package/dist/components/educationals/EpBranchingScenario.vue2.js +19 -19
  30. package/dist/components/educationals/EpBranchingScenario.vue2.js.map +1 -1
  31. package/dist/components/educationals/EpCodeblock.vue.js +1 -1
  32. package/dist/components/educationals/EpCodeblock.vue.js.map +1 -1
  33. package/dist/components/educationals/EpConclusion.vue.js +3 -3
  34. package/dist/components/educationals/EpConclusion.vue.js.map +1 -1
  35. package/dist/components/educationals/EpDescription.vue.js +1 -1
  36. package/dist/components/educationals/EpDocument.vue.js +4 -4
  37. package/dist/components/educationals/EpDocument.vue.js.map +1 -1
  38. package/dist/components/educationals/EpEdu.vue.js +4 -4
  39. package/dist/components/educationals/EpEdu.vue.js.map +1 -1
  40. package/dist/components/educationals/EpFillBlanks.vue.js +1 -1
  41. package/dist/components/educationals/EpFillBlanks.vue.js.map +1 -1
  42. package/dist/components/educationals/EpInstructions.vue.js +1 -1
  43. package/dist/components/educationals/EpIntroduction.vue.js +6 -6
  44. package/dist/components/educationals/EpIntroduction.vue.js.map +1 -1
  45. package/dist/components/educationals/EpObjective.vue.js +3 -3
  46. package/dist/components/educationals/EpObjective.vue.js.map +1 -1
  47. package/dist/components/educationals/EpReading.vue.js +3 -3
  48. package/dist/components/educationals/EpReading.vue.js.map +1 -1
  49. package/dist/components/educationals/EpResource.vue.js +3 -3
  50. package/dist/components/educationals/EpResource.vue.js.map +1 -1
  51. package/dist/components/educationals/EpScope.vue.js +2 -2
  52. package/dist/components/educationals/EpScope.vue.js.map +1 -1
  53. package/dist/components/educationals/EpSegmentedBox.vue.js +1 -1
  54. package/dist/components/educationals/EpSegmentedBox.vue.js.map +1 -1
  55. package/dist/components/educationals/EpSpecificObjective.vue.js +10 -10
  56. package/dist/components/educationals/EpSpecificObjective.vue.js.map +1 -1
  57. package/dist/components/forms/EpSelect.vue.js +3 -3
  58. package/dist/components/forms/EpSelect.vue.js.map +1 -1
  59. package/dist/components/forms/EpTextarea.vue2.js +1 -1
  60. package/dist/components/forms/EpTextarea.vue2.js.map +1 -1
  61. package/dist/components/forms/EpToggle.vue2.js +1 -1
  62. package/dist/components/forms/EpToggle.vue2.js.map +1 -1
  63. package/dist/components/interactions/EpAccordeon.vue2.js +1 -1
  64. package/dist/components/interactions/EpAccordeon.vue2.js.map +1 -1
  65. package/dist/components/interactions/EpAssociation.vue.js +13 -14
  66. package/dist/components/interactions/EpAssociation.vue.js.map +1 -1
  67. package/dist/components/interactions/EpContentSlider.vue.js +2 -2
  68. package/dist/components/interactions/EpContentSlider.vue.js.map +1 -1
  69. package/dist/components/interactions/EpFlipCard.vue2.js +17 -17
  70. package/dist/components/interactions/EpFlipCard.vue2.js.map +1 -1
  71. package/dist/components/interactions/EpHotSpot.vue.js +1 -1
  72. package/dist/components/interactions/EpHotSpot.vue.js.map +1 -1
  73. package/dist/components/interactions/EpImageCompare.vue.js +6 -6
  74. package/dist/components/interactions/EpImageCompare.vue.js.map +1 -1
  75. package/dist/components/interactions/EpModal.vue.js +4 -4
  76. package/dist/components/interactions/EpModal.vue.js.map +1 -1
  77. package/dist/components/interactions/EpQuestion.vue.js +8 -8
  78. package/dist/components/interactions/EpQuestion.vue.js.map +1 -1
  79. package/dist/components/interactions/EpSummativeTable.vue.js +3 -3
  80. package/dist/components/interactions/EpSummativeTable.vue.js.map +1 -1
  81. package/dist/components/interactions/EpTooltip.vue.js +1 -1
  82. package/dist/components/interactions/EpTooltip.vue.js.map +1 -1
  83. package/dist/components/medias/EpAudio.vue.js +3 -3
  84. package/dist/components/medias/EpAudio.vue.js.map +1 -1
  85. package/dist/components/medias/EpCardLink.vue.js +16 -16
  86. package/dist/components/medias/EpCardLink.vue.js.map +1 -1
  87. package/dist/components/medias/EpCarousel.vue.js +10 -10
  88. package/dist/components/medias/EpCarousel.vue.js.map +1 -1
  89. package/dist/components/medias/EpHierarchy.vue2.js +1 -1
  90. package/dist/components/medias/EpHierarchy.vue2.js.map +1 -1
  91. package/dist/components/medias/EpIframe.vue.js +3 -3
  92. package/dist/components/medias/EpIframe.vue.js.map +1 -1
  93. package/dist/components/medias/EpKatex.vue2.js +4 -4
  94. package/dist/components/medias/EpKatex.vue2.js.map +1 -1
  95. package/dist/components/medias/EpLink.vue.js +2 -2
  96. package/dist/components/medias/EpLink.vue.js.map +1 -1
  97. package/dist/components/medias/EpLinkVersion.vue.js +1 -1
  98. package/dist/components/medias/EpLinkVersion.vue.js.map +1 -1
  99. package/dist/components/medias/EpLottieSvg.vue.js +8 -8
  100. package/dist/components/medias/EpLottieSvg.vue.js.map +1 -1
  101. package/dist/components/medias/EpSensibleImage.vue2.js +18 -18
  102. package/dist/components/medias/EpSensibleImage.vue2.js.map +1 -1
  103. package/dist/components/medias/EpSoftware.vue.js +3 -3
  104. package/dist/components/medias/EpSoftware.vue.js.map +1 -1
  105. package/dist/components/medias/EpSvg.vue.js +4 -4
  106. package/dist/components/medias/EpSvg.vue.js.map +1 -1
  107. package/dist/components/medias/EpTerm.vue.js +6 -6
  108. package/dist/components/medias/EpTerm.vue.js.map +1 -1
  109. package/dist/components/medias/EpVideo.vue.js +2 -2
  110. package/dist/components/medias/EpVideo.vue.js.map +1 -1
  111. package/dist/components/medias/EpVideoPanopto.vue.js +3 -3
  112. package/dist/components/medias/EpVideoPanopto.vue.js.map +1 -1
  113. package/dist/components/medias/EpWordDef.vue.js +39 -39
  114. package/dist/components/medias/EpWordDef.vue.js.map +1 -1
  115. package/dist/components/signages/EpAlert.vue2.js +1 -1
  116. package/dist/components/signages/EpHeader.vue.js +22 -22
  117. package/dist/components/signages/EpHeader.vue.js.map +1 -1
  118. package/dist/components/signages/EpQuote.vue.js +1 -1
  119. package/dist/components/signages/EpSkeleton.vue2.js +1 -1
  120. package/dist/components/tools/AssociationNode.vue2.js +8 -8
  121. package/dist/components/tools/AssociationNode.vue2.js.map +1 -1
  122. package/dist/components/tools/AsyncKatexRender.vue2.js +1 -1
  123. package/dist/components/tools/AsyncKatexRender.vue2.js.map +1 -1
  124. package/dist/components/tools/Details.vue.js +1 -56
  125. package/dist/components/tools/Details.vue.js.map +1 -1
  126. package/dist/components/tools/Details.vue2.js +56 -1
  127. package/dist/components/tools/Details.vue2.js.map +1 -1
  128. package/dist/components/tools/RenderTextNode.vue.js +1 -19
  129. package/dist/components/tools/RenderTextNode.vue.js.map +1 -1
  130. package/dist/components/tools/RenderTextNode.vue2.js +19 -1
  131. package/dist/components/tools/RenderTextNode.vue2.js.map +1 -1
  132. package/dist/components/tools/SegmentedBox.vue2.js +3 -3
  133. package/dist/components/tools/SegmentedBox.vue2.js.map +1 -1
  134. package/dist/components/tools/TextMedia.vue.js +1 -50
  135. package/dist/components/tools/TextMedia.vue.js.map +1 -1
  136. package/dist/components/tools/TextMedia.vue2.js +50 -1
  137. package/dist/components/tools/TextMedia.vue2.js.map +1 -1
  138. package/dist/components/tools/TimelineItem.vue2.js +1 -1
  139. package/dist/components/tools/TwoColsMedia.vue2.js +4 -4
  140. package/dist/components/tools/TwoColsMedia.vue2.js.map +1 -1
  141. package/dist/style.css +81 -81
  142. package/package.json +40 -43
@@ -1 +1 @@
1
- {"version":3,"file":"EpContentSlider.vue.js","sources":["../../../src/components/interactions/EpContentSlider.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n ref,\n computed,\n defineAsyncComponent,\n} from \"vue\";\nimport { useComponent } from \"~/composables/useComponent\";\nimport { mdiArrowLeft, mdiArrowRight } from \"@mdi/js\";\nimport EpIcon from \"~/components/basics/EpIcon.vue\";\nimport type { EpContentSliderProps } from \"~/types/interactions/EpContentSlider\";\nimport { type SlidesType, type SizeCols } from \"~/types/Slides\";\nimport RenderTextNode from \"~/components/tools/RenderTextNode.vue\";\nconst props = withDefaults(defineProps<EpContentSliderProps>(), {\n loading: \"...loading\",\n noData: \"No data available\",\n mediaPosition: \"left\",\n titleSize: \"md\"\n});\n\nconst isLoading = ref(false);\n\n//slide information\nconst currentSlide = computed<SlidesType>(() => {\n if (!props.slides || props.slides.length === 0) {\n return {\n title: props.noData,\n img: \"\",\n uid: 2,\n content: \"\",\n component: null,\n layoutRatio: \"50/50\"\n };\n }\n return props.slides[currentIndex.value];\n});\n\n//nested components \nconst dynamicComponents = import.meta.glob(\n '../{basics,educationals,charts,forms,interactions,signages,medias}/**/*.vue'\n) as Record<string, () => Promise<{ default: any }>>;\n\nfunction resolveAsyncByName(name: string) {\n for (const [path, loader] of Object.entries(dynamicComponents)) {\n if (path.endsWith(`/${name}.vue`)) {\n // ensure the loader returns the component itself (module.default)\n return defineAsyncComponent(() => loader().then((m) => m.default));\n }\n }\n return null\n}\n\nconst currentSlideMediaContent = computed(() => {\n if (currentSlide.value.img) {\n //EFFACER UNE FOIS TOUS LES COURS ONT ÉTÉ MIGRÉS \n return defineAsyncComponent(() => import(\"../basics/EpImg.vue\"));\n }\n if (currentSlide.value.component) {\n const { name } = useComponent(currentSlide.value.component.type)\n return resolveAsyncByName(name)\n }\n return null\n});\n\n//col system and render slide \nconst layoutMode = computed(() => {\n const slide = currentSlide.value;\n const hasMedia = !!(slide.img || slide.component);\n const hasContent = !!(slide.content && slide.content.trim());\n return {\n type: hasMedia && hasContent ? 'two-cols'\n : hasMedia ? 'media-only'\n : hasContent ? 'content-only'\n : 'empty',\n hasMedia,\n hasContent,\n switchCol: slide.switchCol || false,\n gap: slide.gap || 'gap-6', // default gap\n leftCol: slide.leftCol || 'w-1/2' // default 50/50\n };\n});\n\n\n//rigth col based on left \nconst getRightColWidth = computed(() => {\n const leftCol = layoutMode.value.leftCol as SizeCols;\n\n // Map left width to corresponding right width\n const widthMap: Record<SizeCols, string> = {\n 'w-1/5': 'w-4/5',\n 'w-2/5': 'w-3/5',\n 'w-3/5': 'w-2/5',\n 'w-4/5': 'w-1/5',\n 'w-full': 'w-1/2' // 50/50\n };\n\n return widthMap[leftCol];\n});\n\n// Title size classes\nconst getTitleClasses = computed(() => {\n const base = 'font-bold ep-text-primary mb-3'\n switch (props.titleSize) {\n case 'sm': return `${base} text-xl`\n case 'lg': return `${base} text-4xl`\n case 'md':\n default: return `${base} text-2xl`\n }\n});\n\n\n\n\n\n\n//control navigation \nconst currentIndex = ref(0);\nconst max = computed(() => currentIndex.value < props.slides.length - 1);\n\nconst next = async () => {\n isLoading.value = true;\n if (max.value) {\n currentIndex.value += 1;\n }\n isLoading.value = false;\n};\n\nconst prev = async () => {\n isLoading.value = true;\n if (currentIndex.value > 0) {\n currentIndex.value -= 1;\n }\n isLoading.value = false;\n};\n\nconst goTo = (index: number) => (currentIndex.value = index);\n\n\n</script>\n\n<template>\n <div\n class=\"relative h-[600px] flex flex-col p-6 w-full overflow-hidden rounded-lg shadow-xl bg-surface-2 dark:bg-surface-2-dark\">\n <!-- Header section with navigation -->\n <div class=\"flex justify-between items-center pb-3 mb-3 border-b-2 border-gray-600 dark:border-gray-300\">\n <h5 :class=\"getTitleClasses\">{{ currentSlide.title }}</h5>\n <div class=\"flex items-center space-x-3\" v-if=\"props.slides.length\">\n <!-- Bullets -->\n <div class=\"flex space-x-2\">\n <span v-for=\"(_, i) in props.slides.length\" :key=\"`slide-index-${i}`\" @click=\"goTo(i)\" :class=\"[\n 'w-2 h-2 rounded-full cursor-pointer',\n i === currentIndex ? 'bg-primary' : 'bg-surface-2-dark dark:bg-surface-2',\n ]\" />\n </div>\n\n <!-- Controls -->\n <div class=\"flex space-x-2\">\n <button class=\"nav-btn\" @click=\"prev\" :disabled=\"currentIndex === 0\">\n <EpIcon :icon-path=\"mdiArrowLeft\" size=\"24\" />\n </button>\n <button class=\"nav-btn\" @click=\"next\" :disabled=\"!max\">\n <EpIcon :icon-path=\"mdiArrowRight\" size=\"24\" />\n </button>\n </div>\n <span class=\"text-sm\">{{ currentIndex + 1 }} / {{ props.slides.length }}</span>\n </div>\n </div>\n\n <!-- Slider content -->\n <div class=\"flex flex-1 min-h-0 justify-center overflow-hidden\">\n <transition name=\"slide-fade\" mode=\"out-in\">\n <div class=\"flex w-full h-full\" :class=\"[\n layoutMode.type === 'two-cols' && !layoutMode.switchCol ? `flex-row ${layoutMode.gap}` : '',\n layoutMode.type === 'two-cols' && layoutMode.switchCol ? `flex-row-reverse ${layoutMode.gap}` : '',\n layoutMode.type !== 'two-cols' ? 'justify-center items-center' : ''\n ]\">\n <!-- Media column (left when normal, right when switched) -->\n <div v-if=\"layoutMode.hasMedia\" :class=\"layoutMode.type === 'two-cols'\n ? (layoutMode.switchCol ? getRightColWidth : layoutMode.leftCol)\n : 'w-full'\">\n <template v-if=\"currentSlide.component\">\n <Suspense>\n <component :is=\"currentSlideMediaContent\" v-bind=\"{ ...currentSlide.component.data }\"\n class=\"max-h-full max-w-full object-contain\" />\n <template #fallback>{{ loading }}</template>\n </Suspense>\n </template>\n </div>\n\n <!-- Content column (right when normal, left when switched) -->\n <div v-if=\"layoutMode.hasContent\" :class=\"[\n 'h-full',\n layoutMode.type === 'two-cols'\n ? (layoutMode.switchCol ? layoutMode.leftCol : getRightColWidth)\n : 'w-full'\n ]\">\n <div class=\"h-full overflow-y-auto overflow-x-hidden pr-2\" :key=\"currentSlide.uid\">\n <RenderTextNode :content=\"currentSlide.content\"/>\n </div>\n </div>\n </div>\n </transition>\n </div>\n\n <!-- Progress bar -->\n <div class=\"mt-4 h-2 w-full bg-gray-300 rounded-full flex-shrink-0\">\n <div class=\"bg-primary h-full rounded-full transition-all duration-300\" :style=\"{\n width: ((currentIndex + 1) / props.slides.length) * 100 + '%',\n }\" />\n </div>\n </div>\n</template>\n"],"names":["_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_Fragment","_renderList","_normalizeClass","_createVNode","EpIcon","_unref","_Transition","_createBlock","_Suspense","_resolveDynamicComponent","_mergeProps","RenderTextNode","_normalizeStyle"],"mappings":"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"}
1
+ {"version":3,"file":"EpContentSlider.vue.js","sources":["../../../src/components/interactions/EpContentSlider.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n ref,\n computed,\n defineAsyncComponent,\n} from \"vue\";\nimport { useComponent } from \"~/composables/useComponent\";\nimport { mdiArrowLeft, mdiArrowRight } from \"@mdi/js\";\nimport EpIcon from \"~/components/basics/EpIcon.vue\";\nimport type { EpContentSliderProps } from \"~/types/interactions/EpContentSlider\";\nimport { type SlidesType, type SizeCols } from \"~/types/Slides\";\nimport RenderTextNode from \"~/components/tools/RenderTextNode.vue\";\nconst props = withDefaults(defineProps<EpContentSliderProps>(), {\n loading: \"...loading\",\n noData: \"No data available\",\n mediaPosition: \"left\",\n titleSize: \"md\"\n});\n\nconst isLoading = ref(false);\n\n//slide information\nconst currentSlide = computed<SlidesType>(() => {\n if (!props.slides || props.slides.length === 0) {\n return {\n title: props.noData,\n img: \"\",\n uid: 2,\n content: \"\",\n component: null,\n layoutRatio: \"50/50\"\n };\n }\n return props.slides[currentIndex.value];\n});\n\n//nested components \nconst dynamicComponents = import.meta.glob(\n '../{basics,educationals,charts,forms,interactions,signages,medias}/**/*.vue'\n) as Record<string, () => Promise<{ default: any }>>;\n\nfunction resolveAsyncByName(name: string) {\n for (const [path, loader] of Object.entries(dynamicComponents)) {\n if (path.endsWith(`/${name}.vue`)) {\n // ensure the loader returns the component itself (module.default)\n return defineAsyncComponent(() => loader().then((m) => m.default));\n }\n }\n return null\n}\n\nconst currentSlideMediaContent = computed(() => {\n if (currentSlide.value.img) {\n //EFFACER UNE FOIS TOUS LES COURS ONT ÉTÉ MIGRÉS \n return defineAsyncComponent(() => import(\"../basics/EpImg.vue\"));\n }\n if (currentSlide.value.component) {\n const { name } = useComponent(currentSlide.value.component.type)\n return resolveAsyncByName(name)\n }\n return null\n});\n\n//col system and render slide \nconst layoutMode = computed(() => {\n const slide = currentSlide.value;\n const hasMedia = !!(slide.img || slide.component);\n const hasContent = !!(slide.content && slide.content.trim());\n return {\n type: hasMedia && hasContent ? 'two-cols'\n : hasMedia ? 'media-only'\n : hasContent ? 'content-only'\n : 'empty',\n hasMedia,\n hasContent,\n switchCol: slide.switchCol || false,\n gap: slide.gap || 'gap-6', // default gap\n leftCol: slide.leftCol || 'w-1/2' // default 50/50\n };\n});\n\n\n//rigth col based on left \nconst getRightColWidth = computed(() => {\n const leftCol = layoutMode.value.leftCol as SizeCols;\n\n // Map left width to corresponding right width\n const widthMap: Record<SizeCols, string> = {\n 'w-1/5': 'w-4/5',\n 'w-2/5': 'w-3/5',\n 'w-3/5': 'w-2/5',\n 'w-4/5': 'w-1/5',\n 'w-full': 'w-1/2' // 50/50\n };\n\n return widthMap[leftCol];\n});\n\n// Title size classes\nconst getTitleClasses = computed(() => {\n const base = 'font-bold ep-text-primary mb-3'\n switch (props.titleSize) {\n case 'sm': return `${base} text-xl`\n case 'lg': return `${base} text-4xl`\n case 'md':\n default: return `${base} text-2xl`\n }\n});\n\n\n\n\n\n\n//control navigation \nconst currentIndex = ref(0);\nconst max = computed(() => currentIndex.value < props.slides.length - 1);\n\nconst next = async () => {\n isLoading.value = true;\n if (max.value) {\n currentIndex.value += 1;\n }\n isLoading.value = false;\n};\n\nconst prev = async () => {\n isLoading.value = true;\n if (currentIndex.value > 0) {\n currentIndex.value -= 1;\n }\n isLoading.value = false;\n};\n\nconst goTo = (index: number) => (currentIndex.value = index);\n\n\n</script>\n\n<template>\n <div\n class=\"relative h-[600px] flex flex-col p-6 w-full overflow-hidden rounded-lg shadow-xl bg-surface-2 dark:bg-surface-2-dark\">\n <!-- Header section with navigation -->\n <div class=\"flex justify-between items-center pb-3 mb-3 border-b-2 border-gray-600 dark:border-gray-300\">\n <h5 :class=\"getTitleClasses\">{{ currentSlide.title }}</h5>\n <div class=\"flex items-center space-x-3\" v-if=\"props.slides.length\">\n <!-- Bullets -->\n <div class=\"flex space-x-2\">\n <span v-for=\"(_, i) in props.slides.length\" :key=\"`slide-index-${i}`\" @click=\"goTo(i)\" :class=\"[\n 'w-2 h-2 rounded-full cursor-pointer',\n i === currentIndex ? 'bg-primary' : 'bg-surface-2-dark dark:bg-surface-2',\n ]\" />\n </div>\n\n <!-- Controls -->\n <div class=\"flex space-x-2\">\n <button class=\"nav-btn\" @click=\"prev\" :disabled=\"currentIndex === 0\">\n <EpIcon :icon-path=\"mdiArrowLeft\" size=\"24\" />\n </button>\n <button class=\"nav-btn\" @click=\"next\" :disabled=\"!max\">\n <EpIcon :icon-path=\"mdiArrowRight\" size=\"24\" />\n </button>\n </div>\n <span class=\"text-sm\">{{ currentIndex + 1 }} / {{ props.slides.length }}</span>\n </div>\n </div>\n\n <!-- Slider content -->\n <div class=\"flex flex-1 min-h-0 justify-center overflow-hidden\">\n <transition name=\"slide-fade\" mode=\"out-in\">\n <div class=\"flex w-full h-full\" :class=\"[\n layoutMode.type === 'two-cols' && !layoutMode.switchCol ? `flex-row ${layoutMode.gap}` : '',\n layoutMode.type === 'two-cols' && layoutMode.switchCol ? `flex-row-reverse ${layoutMode.gap}` : '',\n layoutMode.type !== 'two-cols' ? 'justify-center items-center' : ''\n ]\">\n <!-- Media column (left when normal, right when switched) -->\n <div v-if=\"layoutMode.hasMedia\" :class=\"layoutMode.type === 'two-cols'\n ? (layoutMode.switchCol ? getRightColWidth : layoutMode.leftCol)\n : 'w-full'\">\n <template v-if=\"currentSlide.component\">\n <Suspense>\n <component :is=\"currentSlideMediaContent\" v-bind=\"{ ...currentSlide.component.data }\"\n class=\"max-h-full max-w-full object-contain\" />\n <template #fallback>{{ loading }}</template>\n </Suspense>\n </template>\n </div>\n\n <!-- Content column (right when normal, left when switched) -->\n <div v-if=\"layoutMode.hasContent\" :class=\"[\n 'h-full',\n layoutMode.type === 'two-cols'\n ? (layoutMode.switchCol ? layoutMode.leftCol : getRightColWidth)\n : 'w-full'\n ]\">\n <div class=\"h-full overflow-y-auto overflow-x-hidden pr-2\" :key=\"currentSlide.uid\">\n <RenderTextNode :content=\"currentSlide.content\"/>\n </div>\n </div>\n </div>\n </transition>\n </div>\n\n <!-- Progress bar -->\n <div class=\"mt-4 h-2 w-full bg-gray-300 rounded-full flex-shrink-0\">\n <div class=\"bg-primary h-full rounded-full transition-all duration-300\" :style=\"{\n width: ((currentIndex + 1) / props.slides.length) * 100 + '%',\n }\" />\n </div>\n </div>\n</template>\n"],"names":["_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_Fragment","_renderList","_normalizeClass","_createVNode","EpIcon","_unref","_Transition","_createBlock","_Suspense","loading","_resolveDynamicComponent","_mergeProps","RenderTextNode","_normalizeStyle"],"mappings":"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"}
@@ -88,18 +88,18 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
88
88
  var _a, _b, _c, _d;
89
89
  return hasContent.value ? (openBlock(), createElementBlock("div", {
90
90
  key: 0,
91
- class: normalizeClass(`relative perspective-1000 cursor-pointer ${heightStyle.value} my-3 ${__props.inline ? `inline-block ${__props.maxWidth} align-bottom m-3 w-full` : __props.thumbnail ? "inline-block align-bottom m-3 " + styleSizeThumbnail.value : "flex items-center justify-center w-full"}`),
91
+ class: normalizeClass(`relative perspective-1000 cursor-pointer ${heightStyle.value} my-3 ${_ctx.inline ? `inline-block ${_ctx.maxWidth} align-bottom m-3 w-full` : _ctx.thumbnail ? "inline-block align-bottom m-3 " + styleSizeThumbnail.value : "flex items-center justify-center w-full"}`),
92
92
  onClick: _cache[2] || (_cache[2] = () => {
93
- if (__props.trigger === "click") toggle();
93
+ if (_ctx.trigger === "click") toggle();
94
94
  })
95
95
  }, [
96
96
  createElementVNode("div", {
97
- class: normalizeClass(`${__props.maxWidth} h-full relative w-full`),
97
+ class: normalizeClass(`${_ctx.maxWidth} h-full relative w-full`),
98
98
  onMouseenter: _cache[0] || (_cache[0] = () => {
99
- if (__props.trigger === "hover") flipped.value = true;
99
+ if (_ctx.trigger === "hover") flipped.value = true;
100
100
  }),
101
101
  onMouseleave: _cache[1] || (_cache[1] = () => {
102
- if (__props.trigger === "hover") flipped.value = false;
102
+ if (_ctx.trigger === "hover") flipped.value = false;
103
103
  })
104
104
  }, [
105
105
  createElementVNode("div", {
@@ -109,39 +109,39 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
109
109
  createElementVNode("div", {
110
110
  class: normalizeClass(`${stylesCard.value} ${!props.front.bgImg && !props.front.bgColor ? "bg-surface-2 dark:bg-surface-2-dark" : ""} absolute inset-0 w-full h-full backface-hidden overflow-y-auto
111
111
  bg-cover bg-center dark:text-white`),
112
- style: normalizeStyle({ color: (_a = __props.front.textColor) != null ? _a : void 0, backgroundImage: gradientFront.value, backgroundColor: __props.front.bgImg || !__props.front.bgColor ? void 0 : __props.front.bgColor })
112
+ style: normalizeStyle({ color: (_a = _ctx.front.textColor) != null ? _a : void 0, backgroundImage: gradientFront.value, backgroundColor: _ctx.front.bgImg || !_ctx.front.bgColor ? void 0 : _ctx.front.bgColor })
113
113
  }, [
114
- __props.front.title || __props.front.subtitle ? (openBlock(), createElementBlock("div", _hoisted_1, [
115
- createElementVNode("h3", _hoisted_2, toDisplayString(__props.front.title), 1),
116
- createElementVNode("h4", _hoisted_3, toDisplayString(__props.front.subtitle), 1)
114
+ _ctx.front.title || _ctx.front.subtitle ? (openBlock(), createElementBlock("div", _hoisted_1, [
115
+ createElementVNode("h3", _hoisted_2, toDisplayString(_ctx.front.title), 1),
116
+ createElementVNode("h4", _hoisted_3, toDisplayString(_ctx.front.subtitle), 1)
117
117
  ])) : createCommentVNode("", true),
118
118
  createElementVNode("div", {
119
- innerHTML: unref(useRenderText)((_b = __props.front.content) != null ? _b : "")
119
+ innerHTML: unref(useRenderText)((_b = _ctx.front.content) != null ? _b : "")
120
120
  }, null, 8, _hoisted_4)
121
121
  ], 6),
122
122
  createElementVNode("div", {
123
123
  class: normalizeClass(`${stylesCard.value} ${!props.back.bgImg && !props.back.bgColor ? "bg-surface-2 dark:bg-surface-2-dark" : ""} absolute inset-0 w-full h-full rotate-y-180 backface-hidden overflow-y-auto
124
124
  bg-cover bg-center dark:text-white`),
125
- style: normalizeStyle({ color: (_c = __props.back.textColor) != null ? _c : void 0, backgroundImage: gradientBack.value, backgroundColor: __props.back.bgImg || !__props.back.bgColor ? void 0 : __props.back.bgColor })
125
+ style: normalizeStyle({ color: (_c = _ctx.back.textColor) != null ? _c : void 0, backgroundImage: gradientBack.value, backgroundColor: _ctx.back.bgImg || !_ctx.back.bgColor ? void 0 : _ctx.back.bgColor })
126
126
  }, [
127
- __props.back.title || __props.back.subtitle ? (openBlock(), createElementBlock("div", _hoisted_5, [
128
- createElementVNode("h3", _hoisted_6, toDisplayString(__props.back.title), 1),
129
- createElementVNode("h4", _hoisted_7, toDisplayString(__props.back.subtitle), 1)
127
+ _ctx.back.title || _ctx.back.subtitle ? (openBlock(), createElementBlock("div", _hoisted_5, [
128
+ createElementVNode("h3", _hoisted_6, toDisplayString(_ctx.back.title), 1),
129
+ createElementVNode("h4", _hoisted_7, toDisplayString(_ctx.back.subtitle), 1)
130
130
  ])) : createCommentVNode("", true),
131
131
  createElementVNode("div", {
132
- innerHTML: unref(useRenderText)((_d = __props.back.content) != null ? _d : "")
132
+ innerHTML: unref(useRenderText)((_d = _ctx.back.content) != null ? _d : "")
133
133
  }, null, 8, _hoisted_8)
134
134
  ], 6)
135
135
  ], 2),
136
136
  createVNode(Transition, { name: "fade" }, {
137
137
  default: withCtx(() => [
138
- !__props.noIndicator ? (openBlock(), createElementBlock("div", _hoisted_9, [
138
+ !_ctx.noIndicator ? (openBlock(), createElementBlock("div", _hoisted_9, [
139
139
  createVNode(_sfc_main$1, {
140
140
  "icon-path": unref(mdiRotate360),
141
141
  class: normalizeClass(`w-3.5 h-3.5 shrink-0 transition-transform duration-500
142
142
  ${flipped.value ? "rotate-180" : ""}`)
143
143
  }, null, 8, ["icon-path", "class"]),
144
- createElementVNode("span", _hoisted_10, toDisplayString(__props.trigger === "hover" ? "Survoler" : "Cliquer"), 1)
144
+ createElementVNode("span", _hoisted_10, toDisplayString(_ctx.trigger === "hover" ? "Survoler" : "Cliquer"), 1)
145
145
  ])) : createCommentVNode("", true)
146
146
  ]),
147
147
  _: 1
@@ -1 +1 @@
1
- {"version":3,"file":"EpFlipCard.vue2.js","sources":["../../../src/components/interactions/EpFlipCard.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref} from 'vue'\n\nimport type { EpFlipCardProps } from \"~/types/interactions/EpFlipCard\";\nimport { mdiRotate360 } from '@mdi/js';\nimport EpIcon from '../basics/EpIcon.vue';\nimport { density_style, sizeCardThumbnailStyle } from '~/types/Card';\nimport { useColorMode } from '@vueuse/core';\nimport { useRenderText } from '~/composables/useRenderText';\n\nconst props = withDefaults(defineProps<EpFlipCardProps>(), {\n trigger: \"click\",\n noIndicator: false,\n density: \"default\",\n maxWidth: \"max-w-xl\",\n height: \"medium\",\n front: () => ({\n content: \"\",\n bgImg: \"\",\n bgColor: null,\n textColor: null,\n }),\n back: () => ({\n content: \"\",\n bgImg: \"\",\n bgColor: null,\n textColor: null,\n }),\n thumbnail: false,\n sizeThumbnail: \"medium\",\n inline: false\n});\n\nconst flipped = ref(false);\nconst toggle = () => {\n flipped.value = !flipped.value\n}\n\n\nconst stylesCard = computed(() => {\n return `\n shadow-lg \n ${density_style[props.density]}\n rounded-md\n `;\n});\n\nconst heightStyle = computed(() => {\n return (props.height === \"small\") ? \"h-72\" : (props.height === \"medium\") ? \"h-96\" : \"h-[612px]\" \n});\n\n\nconst hasContent = computed(() => {\n return !!props.front.content || !!props.back.content || !!props.front.title || !!props.front.subtitle || !!props.back.title || !!props.back.subtitle;\n});\n\n\nconst darkMode = useColorMode();\n\nconst gradientFront = computed(() => {\n if (!props.front.bgImg) return undefined;\n const color = (darkMode.value === \"dark\") ? \"rgba(0,0,0,0.75)\" : \"rgba(255,255,255,0.8)\";\n return `linear-gradient(to bottom, ${color}, ${color}), url(${props.front.bgImg})`;\n});\n\nconst gradientBack = computed(() => {\n if (!props.back.bgImg) return undefined;\n const color = (darkMode.value === \"dark\") ? \"rgba(0,0,0,0.75)\" : \"rgba(255,255,255,0.8)\";\n return `linear-gradient(to bottom, ${color}, ${color}), url(${props.back.bgImg})`;\n});\n\nconst styleSizeThumbnail = computed(() => {\n return sizeCardThumbnailStyle[props.sizeThumbnail];\n});\n\n</script>\n\n<template>\n <div \n :class=\"`relative perspective-1000 cursor-pointer ${heightStyle} my-3 ${inline? `inline-block ${maxWidth} align-bottom m-3 w-full` : thumbnail? ('inline-block align-bottom m-3 ' + styleSizeThumbnail) : 'flex items-center justify-center w-full'}`\" \n v-if=\"hasContent\"\n @click=\"() => {if(trigger === 'click') toggle()}\"\n > \n <div \n :class=\"`${maxWidth} h-full relative w-full`\"\n @mouseenter=\"() => { if (trigger === 'hover') flipped = true }\"\n @mouseleave=\"() => { if (trigger === 'hover') flipped = false }\"\n >\n <!-- Rotator -->\n <div\n :class=\"`relative w-full h-full transition-transform duration-500 preserve-3d\n ${flipped ? 'rotate-y-180' : ''}`\"\n >\n <!-- Front card -->\n <div \n :class=\"`${stylesCard} ${(!props.front.bgImg && !props.front.bgColor) ? 'bg-surface-2 dark:bg-surface-2-dark' : ''} absolute inset-0 w-full h-full backface-hidden overflow-y-auto\n bg-cover bg-center dark:text-white`\"\n :style=\"{ color: (front.textColor) ?? undefined, backgroundImage: gradientFront, backgroundColor: (front.bgImg || !front.bgColor)? undefined : front.bgColor}\"\n >\n <div\n v-if=\"front.title || front.subtitle\"\n class=\"mb-2\"\n >\n <h3 class=\"text-2xl font-bold\">{{ front.title }}</h3>\n <h4 :class=\"`text-xs`\">\n {{ front.subtitle }}\n </h4>\n </div>\n <div v-html=\"useRenderText(front.content ?? '')\"></div>\n </div>\n <!-- Back card -->\n <div\n :class=\"`${stylesCard} ${(!props.back.bgImg && !props.back.bgColor) ? 'bg-surface-2 dark:bg-surface-2-dark' : ''} absolute inset-0 w-full h-full rotate-y-180 backface-hidden overflow-y-auto\n bg-cover bg-center dark:text-white`\"\n :style=\"{ color: (back.textColor) ?? undefined, backgroundImage: gradientBack, backgroundColor: (back.bgImg || !back.bgColor)? undefined : back.bgColor}\"\n >\n <div\n v-if=\"back.title || back.subtitle\"\n class=\"mb-2\"\n >\n <h3 class=\"text-2xl font-bold\">{{ back.title }}</h3>\n <h4 :class=\"`text-xs`\">\n {{ back.subtitle }}\n </h4>\n </div>\n <div v-html=\"useRenderText(back.content ?? '')\"></div>\n </div>\n </div>\n\n <!-- Indicator -->\n <transition name=\"fade\">\n <div v-if=\"!noIndicator\"\n class=\"absolute bottom-2 right-2 flex items-center gap-1\n px-2 py-1 rounded-full bg-black/70 text-white text-[10px] font-medium\n pointer-events-none select-none\">\n <EpIcon\n :icon-path=\"mdiRotate360\"\n :class=\"`w-3.5 h-3.5 shrink-0 transition-transform duration-500\n ${flipped ? 'rotate-180' : ''}`\"\n />\n <span class=\"leading-none\">\n {{ trigger==='hover' ? 'Survoler' : 'Cliquer' }}\n </span>\n </div>\n </transition>\n </div>\n </div>\n</template>\n\n<style scoped>\n.perspective-1000 { perspective: 1000px }\n.preserve-3d { transform-style: preserve-3d }\n.backface-hidden { backface-visibility: hidden }\n.rotate-y-180 { transform: rotateY(180deg) }\n\n/* simple fade for the helper badge */\n.fade-enter-active, .fade-leave-active { transition: opacity .3s }\n.fade-enter-from, .fade-leave-to { opacity: 0 }\n</style>\n"],"names":["_createElementBlock","_normalizeClass","_createElementVNode","_normalizeStyle","_openBlock","_toDisplayString","_unref","_createVNode","_Transition","EpIcon"],"mappings":"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"}
1
+ {"version":3,"file":"EpFlipCard.vue2.js","sources":["../../../src/components/interactions/EpFlipCard.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref} from 'vue'\n\nimport type { EpFlipCardProps } from \"~/types/interactions/EpFlipCard\";\nimport { mdiRotate360 } from '@mdi/js';\nimport EpIcon from '../basics/EpIcon.vue';\nimport { density_style, sizeCardThumbnailStyle } from '~/types/Card';\nimport { useColorMode } from '@vueuse/core';\nimport { useRenderText } from '~/composables/useRenderText';\n\nconst props = withDefaults(defineProps<EpFlipCardProps>(), {\n trigger: \"click\",\n noIndicator: false,\n density: \"default\",\n maxWidth: \"max-w-xl\",\n height: \"medium\",\n front: () => ({\n content: \"\",\n bgImg: \"\",\n bgColor: null,\n textColor: null,\n }),\n back: () => ({\n content: \"\",\n bgImg: \"\",\n bgColor: null,\n textColor: null,\n }),\n thumbnail: false,\n sizeThumbnail: \"medium\",\n inline: false\n});\n\nconst flipped = ref(false);\nconst toggle = () => {\n flipped.value = !flipped.value\n}\n\n\nconst stylesCard = computed(() => {\n return `\n shadow-lg \n ${density_style[props.density]}\n rounded-md\n `;\n});\n\nconst heightStyle = computed(() => {\n return (props.height === \"small\") ? \"h-72\" : (props.height === \"medium\") ? \"h-96\" : \"h-[612px]\" \n});\n\n\nconst hasContent = computed(() => {\n return !!props.front.content || !!props.back.content || !!props.front.title || !!props.front.subtitle || !!props.back.title || !!props.back.subtitle;\n});\n\n\nconst darkMode = useColorMode();\n\nconst gradientFront = computed(() => {\n if (!props.front.bgImg) return undefined;\n const color = (darkMode.value === \"dark\") ? \"rgba(0,0,0,0.75)\" : \"rgba(255,255,255,0.8)\";\n return `linear-gradient(to bottom, ${color}, ${color}), url(${props.front.bgImg})`;\n});\n\nconst gradientBack = computed(() => {\n if (!props.back.bgImg) return undefined;\n const color = (darkMode.value === \"dark\") ? \"rgba(0,0,0,0.75)\" : \"rgba(255,255,255,0.8)\";\n return `linear-gradient(to bottom, ${color}, ${color}), url(${props.back.bgImg})`;\n});\n\nconst styleSizeThumbnail = computed(() => {\n return sizeCardThumbnailStyle[props.sizeThumbnail];\n});\n\n</script>\n\n<template>\n <div \n :class=\"`relative perspective-1000 cursor-pointer ${heightStyle} my-3 ${inline? `inline-block ${maxWidth} align-bottom m-3 w-full` : thumbnail? ('inline-block align-bottom m-3 ' + styleSizeThumbnail) : 'flex items-center justify-center w-full'}`\" \n v-if=\"hasContent\"\n @click=\"() => {if(trigger === 'click') toggle()}\"\n > \n <div \n :class=\"`${maxWidth} h-full relative w-full`\"\n @mouseenter=\"() => { if (trigger === 'hover') flipped = true }\"\n @mouseleave=\"() => { if (trigger === 'hover') flipped = false }\"\n >\n <!-- Rotator -->\n <div\n :class=\"`relative w-full h-full transition-transform duration-500 preserve-3d\n ${flipped ? 'rotate-y-180' : ''}`\"\n >\n <!-- Front card -->\n <div \n :class=\"`${stylesCard} ${(!props.front.bgImg && !props.front.bgColor) ? 'bg-surface-2 dark:bg-surface-2-dark' : ''} absolute inset-0 w-full h-full backface-hidden overflow-y-auto\n bg-cover bg-center dark:text-white`\"\n :style=\"{ color: (front.textColor) ?? undefined, backgroundImage: gradientFront, backgroundColor: (front.bgImg || !front.bgColor)? undefined : front.bgColor}\"\n >\n <div\n v-if=\"front.title || front.subtitle\"\n class=\"mb-2\"\n >\n <h3 class=\"text-2xl font-bold\">{{ front.title }}</h3>\n <h4 :class=\"`text-xs`\">\n {{ front.subtitle }}\n </h4>\n </div>\n <div v-html=\"useRenderText(front.content ?? '')\"></div>\n </div>\n <!-- Back card -->\n <div\n :class=\"`${stylesCard} ${(!props.back.bgImg && !props.back.bgColor) ? 'bg-surface-2 dark:bg-surface-2-dark' : ''} absolute inset-0 w-full h-full rotate-y-180 backface-hidden overflow-y-auto\n bg-cover bg-center dark:text-white`\"\n :style=\"{ color: (back.textColor) ?? undefined, backgroundImage: gradientBack, backgroundColor: (back.bgImg || !back.bgColor)? undefined : back.bgColor}\"\n >\n <div\n v-if=\"back.title || back.subtitle\"\n class=\"mb-2\"\n >\n <h3 class=\"text-2xl font-bold\">{{ back.title }}</h3>\n <h4 :class=\"`text-xs`\">\n {{ back.subtitle }}\n </h4>\n </div>\n <div v-html=\"useRenderText(back.content ?? '')\"></div>\n </div>\n </div>\n\n <!-- Indicator -->\n <transition name=\"fade\">\n <div v-if=\"!noIndicator\"\n class=\"absolute bottom-2 right-2 flex items-center gap-1\n px-2 py-1 rounded-full bg-black/70 text-white text-[10px] font-medium\n pointer-events-none select-none\">\n <EpIcon\n :icon-path=\"mdiRotate360\"\n :class=\"`w-3.5 h-3.5 shrink-0 transition-transform duration-500\n ${flipped ? 'rotate-180' : ''}`\"\n />\n <span class=\"leading-none\">\n {{ trigger==='hover' ? 'Survoler' : 'Cliquer' }}\n </span>\n </div>\n </transition>\n </div>\n </div>\n</template>\n\n<style scoped>\n.perspective-1000 { perspective: 1000px }\n.preserve-3d { transform-style: preserve-3d }\n.backface-hidden { backface-visibility: hidden }\n.rotate-y-180 { transform: rotateY(180deg) }\n\n/* simple fade for the helper badge */\n.fade-enter-active, .fade-leave-active { transition: opacity .3s }\n.fade-enter-from, .fade-leave-to { opacity: 0 }\n</style>\n"],"names":["_createElementBlock","_normalizeClass","inline","maxWidth","thumbnail","trigger","_createElementVNode","_normalizeStyle","front","_openBlock","_toDisplayString","_unref","back","_createVNode","_Transition","noIndicator","EpIcon"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,UAAM,QAAQ;AAuBd,UAAM,UAAU,IAAI,KAAK;AACzB,UAAM,SAAS,MAAM;AACjB,cAAQ,QAAQ,CAAC,QAAQ;AAAA,IAC7B;AAGA,UAAM,aAAa,SAAS,MAAM;AAChC,aAAO;AAAA;AAAA,MAEH,cAAc,MAAM,OAAO,CAAC;AAAA;AAAA;AAAA,IAGlC,CAAC;AAED,UAAM,cAAc,SAAS,MAAM;AAC/B,aAAQ,MAAM,WAAW,UAAW,SAAU,MAAM,WAAW,WAAY,SAAS;AAAA,IACxF,CAAC;AAGD,UAAM,aAAa,SAAS,MAAM;AAChC,aAAO,CAAC,CAAC,MAAM,MAAM,WAAW,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,MAAM,SAAS,CAAC,CAAC,MAAM,MAAM,YAAY,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,KAAK;AAAA,IAC9I,CAAC;AAGD,UAAM,WAAW,aAAA;AAEjB,UAAM,gBAAgB,SAAS,MAAM;AACnC,UAAI,CAAC,MAAM,MAAM,MAAO,QAAO;AAC/B,YAAM,QAAS,SAAS,UAAU,SAAU,qBAAqB;AACjE,aAAO,8BAA8B,KAAK,KAAK,KAAK,UAAU,MAAM,MAAM,KAAK;AAAA,IACjF,CAAC;AAED,UAAM,eAAe,SAAS,MAAM;AAClC,UAAI,CAAC,MAAM,KAAK,MAAO,QAAO;AAC9B,YAAM,QAAS,SAAS,UAAU,SAAU,qBAAqB;AACjE,aAAO,8BAA8B,KAAK,KAAK,KAAK,UAAU,MAAM,KAAK,KAAK;AAAA,IAChF,CAAC;AAED,UAAM,qBAAqB,SAAS,MAAM;AACxC,aAAO,uBAAuB,MAAM,aAAa;AAAA,IACnD,CAAC;;;aAOa,WAAA,sBAFVA,mBAoEM,OAAA;AAAA;QAnED,OAAKC,eAAA,4CAA8C,iBAAW,SAASC,KAAAA,yBAAwBC,KAAAA,QAAQ,6BAA6BC,KAAAA,YAAS,mCAAsC,mBAAA,QAAkB,yCAAA,EAAA;AAAA,QAErM,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,MAAA;AAAA,cAAYC,KAAAA,YAAO,QAAc,QAAA;AAAA,QAAM;AAAA,MAAA;QAE7CC,mBA8DM,OAAA;AAAA,UA7DD,yBAAUH,KAAAA,QAAQ,yBAAA;AAAA,UAClB,cAAU,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,MAAA;AAAA,gBAAcE,KAAAA,YAAO,QAAc,SAAA,QAAO;AAAA,UAAA;AAAA,UACpD,cAAU,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,MAAA;AAAA,gBAAcA,KAAAA,YAAO,QAAc,SAAA,QAAO;AAAA,UAAA;AAAA,QAAA;UAGrDC,mBAsCM,OAAA;AAAA,YArCD,OAAKL,eAAA;AAAA,kBAA0F,QAAA,QAAO,iBAAA,EAAA,EAAA;AAAA,UAAA;YAIvGK,mBAeM,OAAA;AAAA,cAdD,OAAKL,eAAA,GAAK,WAAA,KAAU,IAAA,CAAM,MAAM,MAAM,SAAK,CAAK,MAAM,MAAM,UAAO,wCAAA,EAAA;AAAA;cAEnE,OAAKM,eAAA,EAAA,QAAYC,gBAAM,cAANA,YAAoB,QAAS,iBAAmB,qBAAa,iBAAoBA,KAAAA,MAAM,SAAK,CAAKA,WAAM,UAAU,SAAYA,KAAAA,MAAM,QAAA,CAAO;AAAA,YAAA;cAGlJA,KAAAA,MAAM,SAASA,KAAAA,MAAM,YAD/BC,aAAAT,mBAQM,OARN,YAQM;AAAA,gBAJFM,mBAAqD,MAArD,YAAqDI,gBAAnBF,KAAAA,MAAM,KAAK,GAAA,CAAA;AAAA,gBAC7CF,mBAEK,MAFL,YAEKI,gBADEF,KAAAA,MAAM,QAAQ,GAAA,CAAA;AAAA,cAAA;cAGzBF,mBAAuD,OAAA;AAAA,gBAAlD,WAAQK,MAAA,aAAA,GAAcH,UAAAA,MAAM,YAANA,YAAa,EAAA;AAAA,cAAA;;YAG5CF,mBAeM,OAAA;AAAA,cAdD,OAAKL,eAAA,GAAK,WAAA,KAAU,IAAA,CAAM,MAAM,KAAK,SAAK,CAAK,MAAM,KAAK,UAAO,wCAAA,EAAA;AAAA;cAEjE,OAAKM,eAAA,EAAA,QAAYK,eAAK,cAALA,YAAmB,QAAS,iBAAmB,oBAAY,iBAAoBA,KAAAA,KAAK,SAAK,CAAKA,UAAK,UAAU,SAAYA,KAAAA,KAAK,QAAA,CAAO;AAAA,YAAA;cAG7IA,KAAAA,KAAK,SAASA,KAAAA,KAAK,YAD7BH,aAAAT,mBAQM,OARN,YAQM;AAAA,gBAJFM,mBAAoD,MAApD,YAAoDI,gBAAlBE,KAAAA,KAAK,KAAK,GAAA,CAAA;AAAA,gBAC5CN,mBAEK,MAFL,YAEKI,gBADEE,KAAAA,KAAK,QAAQ,GAAA,CAAA;AAAA,cAAA;cAGxBN,mBAAsD,OAAA;AAAA,gBAAjD,WAAQK,MAAA,aAAA,GAAcC,UAAAA,KAAK,YAALA,YAAY,EAAA;AAAA,cAAA;;;UAK/CC,YAcaC,YAAA,EAdD,MAAK,UAAM;AAAA,6BACnB,MAYM;AAAA,eAZMC,KAAAA,eAAZN,aAAAT,mBAYM,OAZN,YAYM;AAAA,gBARFa,YAIEG,aAAA;AAAA,kBAHG,aAAWL,MAAA,YAAA;AAAA,kBACX,OAAKV,eAAA;AAAA,0BAAoF,QAAA,QAAO,eAAA,EAAA,EAAA;AAAA,gBAAA;gBAGrGK,mBAEO,QAFP,aAEOI,gBADAL,KAAAA,YAAO,UAAA,aAAA,SAAA,GAAA,CAAA;AAAA,cAAA;;;;;;;;;"}
@@ -78,7 +78,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
78
78
  createElementVNode("button", {
79
79
  onClick: closeModal,
80
80
  class: "mt-4 bg-primary text-white px-2 py-1 text-sm"
81
- }, toDisplayString(__props.labels.fermer), 1)
81
+ }, toDisplayString(_ctx.labels.fermer), 1)
82
82
  ])
83
83
  ])) : createCommentVNode("", true)
84
84
  ])
@@ -1 +1 @@
1
- {"version":3,"file":"EpHotSpot.vue.js","sources":["../../../src/components/interactions/EpHotSpot.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed, toRefs } from \"vue\";\nimport type { EpHotSpotProps } from \"~/types/interactions/EpHotSpot\";\n\nconst props = withDefaults(defineProps<EpHotSpotProps>(), {\n labels: () => {\n return {\n fermer: \"Fermer\",\n };\n },\n});\n\nconst { title, imageURL } = toRefs(props);\n\nconst hotsPots = computed(() => {\n if (props.infoButtons) {\n return props.infoButtons.map((button) => {\n let transform = `translateX(-50%)`;\n\n if (button.horizontalPosition === 0) transform = ``;\n else if (button.horizontalPosition === 100)\n transform = `translateX(-100%)`;\n if (button.verticalPosition === 100)\n transform = `translateY(-100%) ${transform}`;\n\n const position = `transform: ${transform}; top: ${button.verticalPosition}%; left: ${button.horizontalPosition}%;`;\n\n return { ...button, position };\n });\n }\n return [];\n});\n\nconst modalOpen = ref(false);\nconst displayContent = ref(\"\");\nconst titleDisplay = ref(\"\");\n\nconst openModal = (title: string, content: string) => {\n modalOpen.value = true;\n displayContent.value = content;\n titleDisplay.value = title;\n};\n\nconst closeModal = () => {\n modalOpen.value = false;\n displayContent.value = \"\";\n};\n</script>\n\n<template>\n <div>\n <h2 class=\"text-xl font-bold\">{{ title }}</h2>\n <div class=\"relative\">\n <img :src=\"imageURL\" :alt=\"`l'image de ${title}`\" />\n <template v-for=\"spot in hotsPots\" :key=\"spot.id\">\n <button\n @click=\"openModal(spot.title, spot.content)\"\n :class=\"`absolute text-white px-4 py-2 shadow-md bg-primary`\"\n :style=\"`${spot.position}`\"\n >\n +\n </button>\n </template>\n <div\n v-if=\"modalOpen\"\n class=\"absolute inset-0 flex items-center justify-center bg-black bg-opacity-5 px-2\"\n >\n <div class=\"mx-2 bg-white p-2 shadow-md\">\n <h4>{{ titleDisplay }}</h4>\n <div v-html=\"displayContent\" class=\"text-sm\" />\n <button\n @click=\"closeModal\"\n class=\"mt-4 bg-primary text-white px-2 py-1 text-sm\"\n >\n {{ labels.fermer }}\n </button>\n </div>\n </div>\n </div>\n </div>\n</template>\n"],"names":["title","_createElementBlock","_createElementVNode","_toDisplayString","_unref","_Fragment","_renderList","_normalizeStyle","_openBlock"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,UAAM,QAAQ;AAQd,UAAM,EAAE,OAAO,aAAa,OAAO,KAAK;AAExC,UAAM,WAAW,SAAS,MAAM;AAC9B,UAAI,MAAM,aAAa;AACrB,eAAO,MAAM,YAAY,IAAI,CAAC,WAAW;AACvC,cAAI,YAAY;AAEhB,cAAI,OAAO,uBAAuB,EAAG,aAAY;AAAA,mBACxC,OAAO,uBAAuB;AACrC,wBAAY;AACd,cAAI,OAAO,qBAAqB;AAC9B,wBAAY,qBAAqB,SAAS;AAE5C,gBAAM,WAAW,cAAc,SAAS,UAAU,OAAO,gBAAgB,YAAY,OAAO,kBAAkB;AAE9G,iBAAO,EAAE,GAAG,QAAQ,SAAA;AAAA,QACtB,CAAC;AAAA,MACH;AACA,aAAO,CAAA;AAAA,IACT,CAAC;AAED,UAAM,YAAY,IAAI,KAAK;AAC3B,UAAM,iBAAiB,IAAI,EAAE;AAC7B,UAAM,eAAe,IAAI,EAAE;AAE3B,UAAM,YAAY,CAACA,QAAe,YAAoB;AACpD,gBAAU,QAAQ;AAClB,qBAAe,QAAQ;AACvB,mBAAa,QAAQA;AAAAA,IACvB;AAEA,UAAM,aAAa,MAAM;AACvB,gBAAU,QAAQ;AAClB,qBAAe,QAAQ;AAAA,IACzB;;0BAIEC,mBA6BM,OAAA,MAAA;AAAA,QA5BJC,mBAA8C,MAA9C,YAA8CC,gBAAbC,MAAA,KAAA,CAAK,GAAA,CAAA;AAAA,QACtCF,mBA0BM,OA1BN,YA0BM;AAAA,UAzBJA,mBAAoD,OAAA;AAAA,YAA9C,KAAKE,MAAA,QAAA;AAAA,YAAW,mBAAmBA,MAAA,KAAA,CAAK;AAAA,UAAA;4BAC9CH,mBAQWI,UAAA,MAAAC,WARc,SAAA,OAAQ,CAAhB,SAAI;gCACnBL,mBAMS,UAAA;AAAA,cAP8B,KAAA,KAAK;AAAA,cAEzC,SAAK,CAAA,WAAE,UAAU,KAAK,OAAO,KAAK,OAAO;AAAA,cACzC,sBAAO,oDAAoD;AAAA,cAC3D,OAAKM,eAAA,GAAK,KAAK,QAAQ,EAAA;AAAA,YAAA,GACzB,OAED,IAAA,UAAA;AAAA;UAGM,UAAA,SADRC,UAAA,GAAAP,mBAcM,OAdN,YAcM;AAAA,YAVJC,mBASM,OATN,YASM;AAAA,cARJA,mBAA2B,4BAApB,aAAA,KAAY,GAAA,CAAA;AAAA,cACnBA,mBAA+C,OAAA;AAAA,gBAA1C,WAAQ,eAAA;AAAA,gBAAgB,OAAM;AAAA,cAAA;cACnCA,mBAKS,UAAA;AAAA,gBAJN,SAAO;AAAA,gBACR,OAAM;AAAA,cAAA,GAEHC,gBAAA,QAAA,OAAO,MAAM,GAAA,CAAA;AAAA,YAAA;;;;;;;"}
1
+ {"version":3,"file":"EpHotSpot.vue.js","sources":["../../../src/components/interactions/EpHotSpot.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed, toRefs } from \"vue\";\nimport type { EpHotSpotProps } from \"~/types/interactions/EpHotSpot\";\n\nconst props = withDefaults(defineProps<EpHotSpotProps>(), {\n labels: () => {\n return {\n fermer: \"Fermer\",\n };\n },\n});\n\nconst { title, imageURL } = toRefs(props);\n\nconst hotsPots = computed(() => {\n if (props.infoButtons) {\n return props.infoButtons.map((button) => {\n let transform = `translateX(-50%)`;\n\n if (button.horizontalPosition === 0) transform = ``;\n else if (button.horizontalPosition === 100)\n transform = `translateX(-100%)`;\n if (button.verticalPosition === 100)\n transform = `translateY(-100%) ${transform}`;\n\n const position = `transform: ${transform}; top: ${button.verticalPosition}%; left: ${button.horizontalPosition}%;`;\n\n return { ...button, position };\n });\n }\n return [];\n});\n\nconst modalOpen = ref(false);\nconst displayContent = ref(\"\");\nconst titleDisplay = ref(\"\");\n\nconst openModal = (title: string, content: string) => {\n modalOpen.value = true;\n displayContent.value = content;\n titleDisplay.value = title;\n};\n\nconst closeModal = () => {\n modalOpen.value = false;\n displayContent.value = \"\";\n};\n</script>\n\n<template>\n <div>\n <h2 class=\"text-xl font-bold\">{{ title }}</h2>\n <div class=\"relative\">\n <img :src=\"imageURL\" :alt=\"`l'image de ${title}`\" />\n <template v-for=\"spot in hotsPots\" :key=\"spot.id\">\n <button\n @click=\"openModal(spot.title, spot.content)\"\n :class=\"`absolute text-white px-4 py-2 shadow-md bg-primary`\"\n :style=\"`${spot.position}`\"\n >\n +\n </button>\n </template>\n <div\n v-if=\"modalOpen\"\n class=\"absolute inset-0 flex items-center justify-center bg-black bg-opacity-5 px-2\"\n >\n <div class=\"mx-2 bg-white p-2 shadow-md\">\n <h4>{{ titleDisplay }}</h4>\n <div v-html=\"displayContent\" class=\"text-sm\" />\n <button\n @click=\"closeModal\"\n class=\"mt-4 bg-primary text-white px-2 py-1 text-sm\"\n >\n {{ labels.fermer }}\n </button>\n </div>\n </div>\n </div>\n </div>\n</template>\n"],"names":["title","_createElementBlock","_createElementVNode","_toDisplayString","_unref","_Fragment","_renderList","_normalizeStyle","_openBlock","labels"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,UAAM,QAAQ;AAQd,UAAM,EAAE,OAAO,aAAa,OAAO,KAAK;AAExC,UAAM,WAAW,SAAS,MAAM;AAC9B,UAAI,MAAM,aAAa;AACrB,eAAO,MAAM,YAAY,IAAI,CAAC,WAAW;AACvC,cAAI,YAAY;AAEhB,cAAI,OAAO,uBAAuB,EAAG,aAAY;AAAA,mBACxC,OAAO,uBAAuB;AACrC,wBAAY;AACd,cAAI,OAAO,qBAAqB;AAC9B,wBAAY,qBAAqB,SAAS;AAE5C,gBAAM,WAAW,cAAc,SAAS,UAAU,OAAO,gBAAgB,YAAY,OAAO,kBAAkB;AAE9G,iBAAO,EAAE,GAAG,QAAQ,SAAA;AAAA,QACtB,CAAC;AAAA,MACH;AACA,aAAO,CAAA;AAAA,IACT,CAAC;AAED,UAAM,YAAY,IAAI,KAAK;AAC3B,UAAM,iBAAiB,IAAI,EAAE;AAC7B,UAAM,eAAe,IAAI,EAAE;AAE3B,UAAM,YAAY,CAACA,QAAe,YAAoB;AACpD,gBAAU,QAAQ;AAClB,qBAAe,QAAQ;AACvB,mBAAa,QAAQA;AAAAA,IACvB;AAEA,UAAM,aAAa,MAAM;AACvB,gBAAU,QAAQ;AAClB,qBAAe,QAAQ;AAAA,IACzB;;0BAIEC,mBA6BM,OAAA,MAAA;AAAA,QA5BJC,mBAA8C,MAA9C,YAA8CC,gBAAbC,MAAA,KAAA,CAAK,GAAA,CAAA;AAAA,QACtCF,mBA0BM,OA1BN,YA0BM;AAAA,UAzBJA,mBAAoD,OAAA;AAAA,YAA9C,KAAKE,MAAA,QAAA;AAAA,YAAW,mBAAmBA,MAAA,KAAA,CAAK;AAAA,UAAA;4BAC9CH,mBAQWI,UAAA,MAAAC,WARc,SAAA,OAAQ,CAAhB,SAAI;gCACnBL,mBAMS,UAAA;AAAA,cAP8B,KAAA,KAAK;AAAA,cAEzC,SAAK,CAAA,WAAE,UAAU,KAAK,OAAO,KAAK,OAAO;AAAA,cACzC,sBAAO,oDAAoD;AAAA,cAC3D,OAAKM,eAAA,GAAK,KAAK,QAAQ,EAAA;AAAA,YAAA,GACzB,OAED,IAAA,UAAA;AAAA;UAGM,UAAA,SADRC,UAAA,GAAAP,mBAcM,OAdN,YAcM;AAAA,YAVJC,mBASM,OATN,YASM;AAAA,cARJA,mBAA2B,4BAApB,aAAA,KAAY,GAAA,CAAA;AAAA,cACnBA,mBAA+C,OAAA;AAAA,gBAA1C,WAAQ,eAAA;AAAA,gBAAgB,OAAM;AAAA,cAAA;cACnCA,mBAKS,UAAA;AAAA,gBAJN,SAAO;AAAA,gBACR,OAAM;AAAA,cAAA,GAEHO,gBAAAA,KAAAA,OAAO,MAAM,GAAA,CAAA;AAAA,YAAA;;;;;;;"}
@@ -65,8 +65,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
65
65
  return openBlock(), createElementBlock("div", {
66
66
  ref_key: "containerRef",
67
67
  ref: containerRef,
68
- class: normalizeClass(["relative overflow-hidden select-none", { "rounded-xl": __props.rounded }]),
69
- style: normalizeStyle({ height: __props.height }),
68
+ class: normalizeClass(["relative overflow-hidden select-none", { "rounded-xl": _ctx.rounded }]),
69
+ style: normalizeStyle({ height: _ctx.height }),
70
70
  onMousemove: onMouseMove,
71
71
  onMouseup: onMouseUp,
72
72
  onMouseleave: onMouseUp,
@@ -74,20 +74,20 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
74
74
  onTouchend: onTouchEnd
75
75
  }, [
76
76
  createElementVNode("img", {
77
- src: __props.imageAfter,
77
+ src: _ctx.imageAfter,
78
78
  class: "absolute inset-0 w-full h-full object-cover",
79
79
  draggable: "false",
80
80
  alt: ""
81
81
  }, null, 8, _hoisted_1),
82
82
  createElementVNode("img", {
83
- src: __props.imageBefore,
83
+ src: _ctx.imageBefore,
84
84
  class: "absolute inset-0 w-full h-full object-cover",
85
85
  style: normalizeStyle({ clipPath: `inset(0 ${100 - position.value}% 0 0)` }),
86
86
  draggable: "false",
87
87
  alt: ""
88
88
  }, null, 12, _hoisted_2),
89
- __props.labelBefore ? (openBlock(), createElementBlock("span", _hoisted_3, toDisplayString(__props.labelBefore), 1)) : createCommentVNode("", true),
90
- __props.labelAfter ? (openBlock(), createElementBlock("span", _hoisted_4, toDisplayString(__props.labelAfter), 1)) : createCommentVNode("", true),
89
+ _ctx.labelBefore ? (openBlock(), createElementBlock("span", _hoisted_3, toDisplayString(_ctx.labelBefore), 1)) : createCommentVNode("", true),
90
+ _ctx.labelAfter ? (openBlock(), createElementBlock("span", _hoisted_4, toDisplayString(_ctx.labelAfter), 1)) : createCommentVNode("", true),
91
91
  createElementVNode("div", {
92
92
  class: "absolute top-0 h-full flex flex-col items-center cursor-ew-resize",
93
93
  style: normalizeStyle({ left: position.value + "%", transform: "translateX(-50%)" }),
@@ -1 +1 @@
1
- {"version":3,"file":"EpImageCompare.vue.js","sources":["../../../src/components/interactions/EpImageCompare.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { mdiChevronLeft, mdiChevronRight } from '@mdi/js'\nimport type { EpImageCompareProps } from '~/types/interactions/EpImageCompare'\n\nconst props = withDefaults(defineProps<EpImageCompareProps>(), {\n labelBefore: null,\n labelAfter: null,\n initialPosition: 50,\n height: '400px',\n rounded: false,\n})\n\nconst position = ref(props.initialPosition)\nconst isDragging = ref(false)\nconst containerRef = ref<HTMLElement | null>(null)\n\nfunction getPosition(clientX: number) {\n if (!containerRef.value) return\n const rect = containerRef.value.getBoundingClientRect()\n const x = Math.max(0, Math.min(clientX - rect.left, rect.width))\n position.value = (x / rect.width) * 100\n}\n\nfunction onMouseDown() { isDragging.value = true }\nfunction onMouseMove(e: MouseEvent) { if (isDragging.value) getPosition(e.clientX) }\nfunction onMouseUp() { isDragging.value = false }\nfunction onTouchStart() { isDragging.value = true }\nfunction onTouchMove(e: TouchEvent) { if (isDragging.value) getPosition(e.touches[0].clientX) }\nfunction onTouchEnd() { isDragging.value = false }\n</script>\n\n<template>\n <div\n ref=\"containerRef\"\n class=\"relative overflow-hidden select-none\"\n :class=\"{ 'rounded-xl': rounded }\"\n :style=\"{ height }\"\n @mousemove=\"onMouseMove\"\n @mouseup=\"onMouseUp\"\n @mouseleave=\"onMouseUp\"\n @touchmove.prevent=\"onTouchMove\"\n @touchend=\"onTouchEnd\"\n >\n <!-- After image (full width, behind) -->\n <img\n :src=\"imageAfter\"\n class=\"absolute inset-0 w-full h-full object-cover\"\n draggable=\"false\"\n alt=\"\"\n />\n\n <!-- Before image (clipped via clip-path so it never moves) -->\n <img\n :src=\"imageBefore\"\n class=\"absolute inset-0 w-full h-full object-cover\"\n :style=\"{ clipPath: `inset(0 ${100 - position}% 0 0)` }\"\n draggable=\"false\"\n alt=\"\"\n />\n\n <!-- Labels -->\n <span\n v-if=\"labelBefore\"\n class=\"absolute top-3 left-3 bg-black/40 text-white text-sm px-2 py-1 rounded pointer-events-none\"\n >\n {{ labelBefore }}\n </span>\n <span\n v-if=\"labelAfter\"\n class=\"absolute top-3 right-3 bg-black/40 text-white text-sm px-2 py-1 rounded pointer-events-none\"\n >\n {{ labelAfter }}\n </span>\n\n <!-- Divider + Handle -->\n <div\n class=\"absolute top-0 h-full flex flex-col items-center cursor-ew-resize\"\n :style=\"{ left: position + '%', transform: 'translateX(-50%)' }\"\n @mousedown=\"onMouseDown\"\n @touchstart.prevent=\"onTouchStart\"\n >\n <!-- Vertical line -->\n <div class=\"w-0.5 bg-white h-full absolute top-0\" />\n\n <!-- Circular handle -->\n <div class=\"absolute top-1/2 -translate-y-1/2 w-10 h-10 rounded-full bg-white shadow-lg flex items-center justify-center z-10\">\n <svg viewBox=\"0 0 24 24\" class=\"w-4 h-4 text-gray-600 -mr-0.5\">\n <path fill=\"currentColor\" :d=\"mdiChevronLeft\" />\n </svg>\n <svg viewBox=\"0 0 24 24\" class=\"w-4 h-4 text-gray-600 -ml-0.5\">\n <path fill=\"currentColor\" :d=\"mdiChevronRight\" />\n </svg>\n </div>\n </div>\n </div>\n</template>\n"],"names":["_createElementBlock","_normalizeClass","_createElementVNode","_toDisplayString","_openBlock","_unref"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,UAAM,QAAQ;AAQd,UAAM,WAAW,IAAI,MAAM,eAAe;AAC1C,UAAM,aAAa,IAAI,KAAK;AAC5B,UAAM,eAAe,IAAwB,IAAI;AAEjD,aAAS,YAAY,SAAiB;AACpC,UAAI,CAAC,aAAa,MAAO;AACzB,YAAM,OAAO,aAAa,MAAM,sBAAA;AAChC,YAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,UAAU,KAAK,MAAM,KAAK,KAAK,CAAC;AAC/D,eAAS,QAAS,IAAI,KAAK,QAAS;AAAA,IACtC;AAEA,aAAS,cAAc;AAAE,iBAAW,QAAQ;AAAA,IAAK;AACjD,aAAS,YAAY,GAAe;AAAE,UAAI,WAAW,MAAO,aAAY,EAAE,OAAO;AAAA,IAAE;AACnF,aAAS,YAAY;AAAE,iBAAW,QAAQ;AAAA,IAAM;AAChD,aAAS,eAAe;AAAE,iBAAW,QAAQ;AAAA,IAAK;AAClD,aAAS,YAAY,GAAe;AAAE,UAAI,WAAW,MAAO,aAAY,EAAE,QAAQ,CAAC,EAAE,OAAO;AAAA,IAAE;AAC9F,aAAS,aAAa;AAAE,iBAAW,QAAQ;AAAA,IAAM;;0BAI/CA,mBA8DM,OAAA;AAAA,iBA7DA;AAAA,QAAJ,KAAI;AAAA,QACJ,OAAKC,eAAA,CAAC,wCAAsC,EAAA,cACpB,QAAA,QAAA,CAAO,CAAA;AAAA,QAC9B,gCAAS,QAAA,QAAM;AAAA,QACf,aAAW;AAAA,QACX,WAAS;AAAA,QACT,cAAY;AAAA,QACZ,2BAAmB,aAAW,CAAA,SAAA,CAAA;AAAA,QAC9B,YAAU;AAAA,MAAA;QAGXC,mBAKE,OAAA;AAAA,UAJC,KAAK,QAAA;AAAA,UACN,OAAM;AAAA,UACN,WAAU;AAAA,UACV,KAAI;AAAA,QAAA;QAINA,mBAME,OAAA;AAAA,UALC,KAAK,QAAA;AAAA,UACN,OAAM;AAAA,UACL,mDAAoC,SAAA,KAAQ,UAAA;AAAA,UAC7C,WAAU;AAAA,UACV,KAAI;AAAA,QAAA;QAKE,QAAA,4BADRF,mBAKO,QALP,YAKOG,gBADF,QAAA,WAAW,GAAA,CAAA;QAGR,QAAA,2BADRH,mBAKO,QALP,YAKOG,gBADF,QAAA,UAAU,GAAA,CAAA;QAIfD,mBAkBM,OAAA;AAAA,UAjBJ,OAAM;AAAA,UACL,8BAAe,SAAA,QAAQ,KAAA,WAAA,oBAAA;AAAA,UACvB,aAAW;AAAA,UACX,4BAAoB,cAAY,CAAA,SAAA,CAAA;AAAA,QAAA;oCAGjCA,mBAAoD,OAAA,EAA/C,OAAM,uCAAA,GAAsC,MAAA,EAAA;AAAA,UAGjDA,mBAOM,OAPN,YAOM;AAAA,aANJE,aAAAJ,mBAEM,OAFN,YAEM;AAAA,cADJE,mBAAgD,QAAA;AAAA,gBAA1C,MAAK;AAAA,gBAAgB,GAAGG,MAAA,cAAA;AAAA,cAAA;;aAEhCD,aAAAJ,mBAEM,OAFN,YAEM;AAAA,cADJE,mBAAiD,QAAA;AAAA,gBAA3C,MAAK;AAAA,gBAAgB,GAAGG,MAAA,eAAA;AAAA,cAAA;;;;;;;;"}
1
+ {"version":3,"file":"EpImageCompare.vue.js","sources":["../../../src/components/interactions/EpImageCompare.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { mdiChevronLeft, mdiChevronRight } from '@mdi/js'\nimport type { EpImageCompareProps } from '~/types/interactions/EpImageCompare'\n\nconst props = withDefaults(defineProps<EpImageCompareProps>(), {\n labelBefore: null,\n labelAfter: null,\n initialPosition: 50,\n height: '400px',\n rounded: false,\n})\n\nconst position = ref(props.initialPosition)\nconst isDragging = ref(false)\nconst containerRef = ref<HTMLElement | null>(null)\n\nfunction getPosition(clientX: number) {\n if (!containerRef.value) return\n const rect = containerRef.value.getBoundingClientRect()\n const x = Math.max(0, Math.min(clientX - rect.left, rect.width))\n position.value = (x / rect.width) * 100\n}\n\nfunction onMouseDown() { isDragging.value = true }\nfunction onMouseMove(e: MouseEvent) { if (isDragging.value) getPosition(e.clientX) }\nfunction onMouseUp() { isDragging.value = false }\nfunction onTouchStart() { isDragging.value = true }\nfunction onTouchMove(e: TouchEvent) { if (isDragging.value) getPosition(e.touches[0].clientX) }\nfunction onTouchEnd() { isDragging.value = false }\n</script>\n\n<template>\n <div\n ref=\"containerRef\"\n class=\"relative overflow-hidden select-none\"\n :class=\"{ 'rounded-xl': rounded }\"\n :style=\"{ height }\"\n @mousemove=\"onMouseMove\"\n @mouseup=\"onMouseUp\"\n @mouseleave=\"onMouseUp\"\n @touchmove.prevent=\"onTouchMove\"\n @touchend=\"onTouchEnd\"\n >\n <!-- After image (full width, behind) -->\n <img\n :src=\"imageAfter\"\n class=\"absolute inset-0 w-full h-full object-cover\"\n draggable=\"false\"\n alt=\"\"\n />\n\n <!-- Before image (clipped via clip-path so it never moves) -->\n <img\n :src=\"imageBefore\"\n class=\"absolute inset-0 w-full h-full object-cover\"\n :style=\"{ clipPath: `inset(0 ${100 - position}% 0 0)` }\"\n draggable=\"false\"\n alt=\"\"\n />\n\n <!-- Labels -->\n <span\n v-if=\"labelBefore\"\n class=\"absolute top-3 left-3 bg-black/40 text-white text-sm px-2 py-1 rounded pointer-events-none\"\n >\n {{ labelBefore }}\n </span>\n <span\n v-if=\"labelAfter\"\n class=\"absolute top-3 right-3 bg-black/40 text-white text-sm px-2 py-1 rounded pointer-events-none\"\n >\n {{ labelAfter }}\n </span>\n\n <!-- Divider + Handle -->\n <div\n class=\"absolute top-0 h-full flex flex-col items-center cursor-ew-resize\"\n :style=\"{ left: position + '%', transform: 'translateX(-50%)' }\"\n @mousedown=\"onMouseDown\"\n @touchstart.prevent=\"onTouchStart\"\n >\n <!-- Vertical line -->\n <div class=\"w-0.5 bg-white h-full absolute top-0\" />\n\n <!-- Circular handle -->\n <div class=\"absolute top-1/2 -translate-y-1/2 w-10 h-10 rounded-full bg-white shadow-lg flex items-center justify-center z-10\">\n <svg viewBox=\"0 0 24 24\" class=\"w-4 h-4 text-gray-600 -mr-0.5\">\n <path fill=\"currentColor\" :d=\"mdiChevronLeft\" />\n </svg>\n <svg viewBox=\"0 0 24 24\" class=\"w-4 h-4 text-gray-600 -ml-0.5\">\n <path fill=\"currentColor\" :d=\"mdiChevronRight\" />\n </svg>\n </div>\n </div>\n </div>\n</template>\n"],"names":["_createElementBlock","_normalizeClass","rounded","height","_createElementVNode","imageAfter","imageBefore","labelBefore","_toDisplayString","labelAfter","_openBlock","_unref"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,UAAM,QAAQ;AAQd,UAAM,WAAW,IAAI,MAAM,eAAe;AAC1C,UAAM,aAAa,IAAI,KAAK;AAC5B,UAAM,eAAe,IAAwB,IAAI;AAEjD,aAAS,YAAY,SAAiB;AACpC,UAAI,CAAC,aAAa,MAAO;AACzB,YAAM,OAAO,aAAa,MAAM,sBAAA;AAChC,YAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,UAAU,KAAK,MAAM,KAAK,KAAK,CAAC;AAC/D,eAAS,QAAS,IAAI,KAAK,QAAS;AAAA,IACtC;AAEA,aAAS,cAAc;AAAE,iBAAW,QAAQ;AAAA,IAAK;AACjD,aAAS,YAAY,GAAe;AAAE,UAAI,WAAW,MAAO,aAAY,EAAE,OAAO;AAAA,IAAE;AACnF,aAAS,YAAY;AAAE,iBAAW,QAAQ;AAAA,IAAM;AAChD,aAAS,eAAe;AAAE,iBAAW,QAAQ;AAAA,IAAK;AAClD,aAAS,YAAY,GAAe;AAAE,UAAI,WAAW,MAAO,aAAY,EAAE,QAAQ,CAAC,EAAE,OAAO;AAAA,IAAE;AAC9F,aAAS,aAAa;AAAE,iBAAW,QAAQ;AAAA,IAAM;;0BAI/CA,mBA8DM,OAAA;AAAA,iBA7DA;AAAA,QAAJ,KAAI;AAAA,QACJ,OAAKC,eAAA,CAAC,wCAAsC,EAAA,cACpBC,KAAAA,QAAAA,CAAO,CAAA;AAAA,QAC9B,gCAASC,KAAAA,QAAM;AAAA,QACf,aAAW;AAAA,QACX,WAAS;AAAA,QACT,cAAY;AAAA,QACZ,2BAAmB,aAAW,CAAA,SAAA,CAAA;AAAA,QAC9B,YAAU;AAAA,MAAA;QAGXC,mBAKE,OAAA;AAAA,UAJC,KAAKC,KAAAA;AAAAA,UACN,OAAM;AAAA,UACN,WAAU;AAAA,UACV,KAAI;AAAA,QAAA;QAIND,mBAME,OAAA;AAAA,UALC,KAAKE,KAAAA;AAAAA,UACN,OAAM;AAAA,UACL,mDAAoC,SAAA,KAAQ,UAAA;AAAA,UAC7C,WAAU;AAAA,UACV,KAAI;AAAA,QAAA;QAKEC,KAAAA,4BADRP,mBAKO,QALP,YAKOQ,gBADFD,KAAAA,WAAW,GAAA,CAAA;QAGRE,KAAAA,2BADRT,mBAKO,QALP,YAKOQ,gBADFC,KAAAA,UAAU,GAAA,CAAA;QAIfL,mBAkBM,OAAA;AAAA,UAjBJ,OAAM;AAAA,UACL,8BAAe,SAAA,QAAQ,KAAA,WAAA,oBAAA;AAAA,UACvB,aAAW;AAAA,UACX,4BAAoB,cAAY,CAAA,SAAA,CAAA;AAAA,QAAA;oCAGjCA,mBAAoD,OAAA,EAA/C,OAAM,uCAAA,GAAsC,MAAA,EAAA;AAAA,UAGjDA,mBAOM,OAPN,YAOM;AAAA,aANJM,aAAAV,mBAEM,OAFN,YAEM;AAAA,cADJI,mBAAgD,QAAA;AAAA,gBAA1C,MAAK;AAAA,gBAAgB,GAAGO,MAAA,cAAA;AAAA,cAAA;;aAEhCD,aAAAV,mBAEM,OAFN,YAEM;AAAA,cADJI,mBAAiD,QAAA;AAAA,gBAA3C,MAAK;AAAA,gBAAgB,GAAGO,MAAA,eAAA;AAAA,cAAA;;;;;;;;"}
@@ -32,7 +32,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
32
32
  return openBlock(), createBlock(Teleport, { to: "body" }, [
33
33
  createVNode(Transition, { name: "ep-modal" }, {
34
34
  default: withCtx(() => [
35
- __props.modelValue ? (openBlock(), createElementBlock("div", {
35
+ _ctx.modelValue ? (openBlock(), createElementBlock("div", {
36
36
  key: 0,
37
37
  class: "ep-modal-mask",
38
38
  onClick: withModifiers(closeModal, ["self"])
@@ -42,9 +42,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
42
42
  }, [
43
43
  createElementVNode("div", _hoisted_1, [
44
44
  createVNode(_sfc_main$1, {
45
- title: __props.title,
46
- subtitle: __props.subtitle,
47
- icon: __props.icon
45
+ title: _ctx.title,
46
+ subtitle: _ctx.subtitle,
47
+ icon: _ctx.icon
48
48
  }, {
49
49
  default: withCtx(() => [
50
50
  renderSlot(_ctx.$slots, "default")
@@ -1 +1 @@
1
- {"version":3,"file":"EpModal.vue.js","sources":["../../../src/components/interactions/EpModal.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport EpCard from \"~/components/basics/EpCard.vue\";\nimport type { EpModalProps } from \"~/types/interactions/EpModal\";\n\nconst props = withDefaults(defineProps<EpModalProps>(), {\n modelValue: false,\n title: null,\n subtitle: null,\n icon: null,\n persistent: false,\n size: \"default\", // ✅ must be a string literal\n});\n\nconst size = {\n compact: \"w-[45%]\",\n default: \"w-[75%]\",\n comfortable: \"w-[85%]\",\n};\n\nconst emit = defineEmits<{\n (e: \"update:modelValue\", modelValue: boolean): void;\n}>();\n\nconst closeModal = (): void => {\n if (!props.persistent) {\n emit(\"update:modelValue\", false);\n }\n};\n\nconst sizeModal = computed(() => {\n return size[props.size];\n});\n</script>\n\n<template>\n <Teleport to=\"body\">\n <Transition name=\"ep-modal\">\n <div v-if=\"modelValue\" class=\"ep-modal-mask\" @click.self=\"closeModal\">\n <div :class=\"`ep-modal-container ${sizeModal} max-h-screen overflow-auto`\">\n <div class=\"mx-auto\">\n <EpCard :title=\"title\" :subtitle=\"subtitle\" :icon=\"icon\">\n <slot />\n </EpCard>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n\n<style>\n.ep-modal-mask {\n position: fixed;\n z-index: 6998;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n transition: opacity 0.3s ease;\n}\n\n.ep-modal-container {\n margin: auto;\n max-height: 95%;\n transition: all 0.3s ease;\n z-index: 7000;\n}\n\n.ep-modal-header h3 {\n margin-top: 0;\n color: #42b983;\n}\n\n.ep-modal-body {\n margin: 20px 0;\n}\n\n.ep-modal-default-button {\n float: right;\n}\n\n.ep-modal-enter-from {\n opacity: 0;\n}\n\n.ep-modal-leave-to {\n opacity: 0;\n}\n\n.ep-modal-enter-from .ep-modal-container,\n.ep-modal-leave-to .ep-modal-container {\n -webkit-transform: scale(1.1);\n transform: scale(1.1);\n}\n</style>\n"],"names":["_createBlock","_Teleport","_createVNode","_Transition","_createElementBlock","_createElementVNode","EpCard","_renderSlot"],"mappings":";;;;;;;;;;;;;;;AAKA,UAAM,QAAQ;AASd,UAAM,OAAO;AAAA,MACX,SAAS;AAAA,MACT,SAAS;AAAA,MACT,aAAa;AAAA,IAAA;AAGf,UAAM,OAAO;AAIb,UAAM,aAAa,MAAY;AAC7B,UAAI,CAAC,MAAM,YAAY;AACrB,aAAK,qBAAqB,KAAK;AAAA,MACjC;AAAA,IACF;AAEA,UAAM,YAAY,SAAS,MAAM;AAC/B,aAAO,KAAK,MAAM,IAAI;AAAA,IACxB,CAAC;;0BAICA,YAYWC,UAAA,EAZD,IAAG,UAAM;AAAA,QACjBC,YAUaC,YAAA,EAVD,MAAK,cAAU;AAAA,2BACzB,MAQM;AAAA,YARK,QAAA,2BAAXC,mBAQM,OAAA;AAAA;cARiB,OAAM;AAAA,cAAiB,uBAAY,YAAU,CAAA,MAAA,CAAA;AAAA,YAAA;cAClEC,mBAMM,OAAA;AAAA,gBANA,4CAA6B,UAAA,KAAS,6BAAA;AAAA,cAAA;gBAC1CA,mBAIM,OAJN,YAIM;AAAA,kBAHJH,YAESI,aAAA;AAAA,oBAFA,OAAO,QAAA;AAAA,oBAAQ,UAAU,QAAA;AAAA,oBAAW,MAAM,QAAA;AAAA,kBAAA;qCACjD,MAAQ;AAAA,sBAARC,WAAQ,KAAA,QAAA,SAAA;AAAA,oBAAA;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"EpModal.vue.js","sources":["../../../src/components/interactions/EpModal.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport EpCard from \"~/components/basics/EpCard.vue\";\nimport type { EpModalProps } from \"~/types/interactions/EpModal\";\n\nconst props = withDefaults(defineProps<EpModalProps>(), {\n modelValue: false,\n title: null,\n subtitle: null,\n icon: null,\n persistent: false,\n size: \"default\", // ✅ must be a string literal\n});\n\nconst size = {\n compact: \"w-[45%]\",\n default: \"w-[75%]\",\n comfortable: \"w-[85%]\",\n};\n\nconst emit = defineEmits<{\n (e: \"update:modelValue\", modelValue: boolean): void;\n}>();\n\nconst closeModal = (): void => {\n if (!props.persistent) {\n emit(\"update:modelValue\", false);\n }\n};\n\nconst sizeModal = computed(() => {\n return size[props.size];\n});\n</script>\n\n<template>\n <Teleport to=\"body\">\n <Transition name=\"ep-modal\">\n <div v-if=\"modelValue\" class=\"ep-modal-mask\" @click.self=\"closeModal\">\n <div :class=\"`ep-modal-container ${sizeModal} max-h-screen overflow-auto`\">\n <div class=\"mx-auto\">\n <EpCard :title=\"title\" :subtitle=\"subtitle\" :icon=\"icon\">\n <slot />\n </EpCard>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n\n<style>\n.ep-modal-mask {\n position: fixed;\n z-index: 6998;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n transition: opacity 0.3s ease;\n}\n\n.ep-modal-container {\n margin: auto;\n max-height: 95%;\n transition: all 0.3s ease;\n z-index: 7000;\n}\n\n.ep-modal-header h3 {\n margin-top: 0;\n color: #42b983;\n}\n\n.ep-modal-body {\n margin: 20px 0;\n}\n\n.ep-modal-default-button {\n float: right;\n}\n\n.ep-modal-enter-from {\n opacity: 0;\n}\n\n.ep-modal-leave-to {\n opacity: 0;\n}\n\n.ep-modal-enter-from .ep-modal-container,\n.ep-modal-leave-to .ep-modal-container {\n -webkit-transform: scale(1.1);\n transform: scale(1.1);\n}\n</style>\n"],"names":["_createBlock","_Teleport","_createVNode","_Transition","modelValue","_createElementBlock","_createElementVNode","EpCard","title","subtitle","icon","_renderSlot"],"mappings":";;;;;;;;;;;;;;;AAKA,UAAM,QAAQ;AASd,UAAM,OAAO;AAAA,MACX,SAAS;AAAA,MACT,SAAS;AAAA,MACT,aAAa;AAAA,IAAA;AAGf,UAAM,OAAO;AAIb,UAAM,aAAa,MAAY;AAC7B,UAAI,CAAC,MAAM,YAAY;AACrB,aAAK,qBAAqB,KAAK;AAAA,MACjC;AAAA,IACF;AAEA,UAAM,YAAY,SAAS,MAAM;AAC/B,aAAO,KAAK,MAAM,IAAI;AAAA,IACxB,CAAC;;0BAICA,YAYWC,UAAA,EAZD,IAAG,UAAM;AAAA,QACjBC,YAUaC,YAAA,EAVD,MAAK,cAAU;AAAA,2BACzB,MAQM;AAAA,YARKC,KAAAA,2BAAXC,mBAQM,OAAA;AAAA;cARiB,OAAM;AAAA,cAAiB,uBAAY,YAAU,CAAA,MAAA,CAAA;AAAA,YAAA;cAClEC,mBAMM,OAAA;AAAA,gBANA,4CAA6B,UAAA,KAAS,6BAAA;AAAA,cAAA;gBAC1CA,mBAIM,OAJN,YAIM;AAAA,kBAHJJ,YAESK,aAAA;AAAA,oBAFA,OAAOC,KAAAA;AAAAA,oBAAQ,UAAUC,KAAAA;AAAAA,oBAAW,MAAMC,KAAAA;AAAAA,kBAAAA;qCACjD,MAAQ;AAAA,sBAARC,WAAQ,KAAA,QAAA,SAAA;AAAA,oBAAA;;;;;;;;;;;;;"}
@@ -102,22 +102,22 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
102
102
  return defineAsyncComponent(() => import("../signages/EpNothing.vue.js"));
103
103
  }
104
104
  return defineAsyncComponent(
105
- () => __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "../basics/EpAvatar.vue": () => import("../basics/EpAvatar.vue.js"), "../basics/EpBadge.vue": () => import("../basics/EpBadge.vue.js"), "../basics/EpBtn.vue": () => import("../basics/EpBtn.vue2.js"), "../basics/EpCard.vue": () => import("../basics/EpCard.vue2.js"), "../basics/EpChip.vue": () => import("../basics/EpChip.vue2.js"), "../basics/EpDivider.vue": () => import("../basics/EpDivider.vue2.js"), "../basics/EpFlex.vue": () => import("../basics/EpFlex.vue2.js"), "../basics/EpHover.vue": () => import("../basics/EpHover.vue2.js"), "../basics/EpHoverCard.vue": () => import("../basics/EpHoverCard.vue2.js"), "../basics/EpIcon.vue": () => import("../basics/EpIcon.vue2.js"), "../basics/EpImg.vue": () => import("../basics/EpImg.vue2.js"), "../basics/EpImgCarousel.vue": () => import("../basics/EpImgCarousel.vue2.js"), "../basics/EpList.vue": () => import("../basics/EpList.vue.js"), "../basics/EpListItem.vue": () => import("../basics/EpListItem.vue2.js"), "../basics/EpSection.vue": () => import("../basics/EpSection.vue2.js"), "../basics/EpSectionCols.vue": () => import("../basics/EpSectionCols.vue2.js"), "../basics/EpSpinner.vue": () => import("../basics/EpSpinner.vue2.js"), "../basics/EpStackedList.vue": () => import("../basics/EpStackedList.vue2.js"), "../basics/EpTable.vue": () => import("../basics/EpTable.vue2.js"), "../basics/EpText.vue": () => import("../basics/EpText.vue2.js"), "../charts/EpBarChart.vue": () => import("../charts/EpBarChart.vue2.js"), "../charts/EpFunnelChart.vue": () => import("../charts/EpFunnelChart.vue2.js"), "../charts/EpLineChart.vue": () => import("../charts/EpLineChart.vue2.js"), "../charts/EpPieChart.vue": () => import("../charts/EpPieChart.vue2.js"), "../educationals/EpBranchingScenario.vue": () => import("../educationals/EpBranchingScenario.vue.js"), "../educationals/EpCodeblock.vue": () => import("../educationals/EpCodeblock.vue3.js"), "../educationals/EpConclusion.vue": () => import("../educationals/EpConclusion.vue2.js"), "../educationals/EpDescription.vue": () => import("../educationals/EpDescription.vue2.js"), "../educationals/EpDocument.vue": () => import("../educationals/EpDocument.vue2.js"), "../educationals/EpEdu.vue": () => import("../educationals/EpEdu.vue2.js"), "../educationals/EpFillBlanks.vue": () => import("../educationals/EpFillBlanks.vue2.js"), "../educationals/EpInstructions.vue": () => import("../educationals/EpInstructions.vue2.js"), "../educationals/EpIntroduction.vue": () => import("../educationals/EpIntroduction.vue2.js"), "../educationals/EpObjective.vue": () => import("../educationals/EpObjective.vue2.js"), "../educationals/EpReading.vue": () => import("../educationals/EpReading.vue2.js"), "../educationals/EpResource.vue": () => import("../educationals/EpResource.vue2.js"), "../educationals/EpScope.vue": () => import("../educationals/EpScope.vue2.js"), "../educationals/EpSegmentedBox.vue": () => import("../educationals/EpSegmentedBox.vue2.js"), "../educationals/EpSpecificObjective.vue": () => import("../educationals/EpSpecificObjective.vue2.js"), "../forms/EpCheckbox.vue": () => import("../forms/EpCheckbox.vue.js"), "../forms/EpInput.vue": () => import("../forms/EpInput.vue.js"), "../forms/EpRadio.vue": () => import("../forms/EpRadio.vue.js"), "../forms/EpRadioSummative.vue": () => import("../forms/EpRadioSummative.vue.js"), "../forms/EpSelect.vue": () => import("../forms/EpSelect.vue2.js"), "../forms/EpSwitch.vue": () => import("../forms/EpSwitch.vue.js"), "../forms/EpTextarea.vue": () => import("../forms/EpTextarea.vue.js"), "../forms/EpToggle.vue": () => import("../forms/EpToggle.vue.js"), "./Ep360Image.vue": () => import("./Ep360Image.vue.js"), "./Ep360Video.vue": () => import("./Ep360Video.vue.js"), "./EpAccordeon.vue": () => import("./EpAccordeon.vue.js"), "./EpAssociation.vue": () => import("./EpAssociation.vue2.js"), "./EpContentSlider.vue": () => import("./EpContentSlider.vue2.js"), "./EpDarkMode.vue": () => import("./EpDarkMode.vue2.js"), "./EpDraggable.vue": () => import("./EpDraggable.vue2.js"), "./EpFlipCard.vue": () => import("./EpFlipCard.vue.js"), "./EpHotSpot.vue": () => import("./EpHotSpot.vue2.js"), "./EpImageCompare.vue": () => import("./EpImageCompare.vue2.js"), "./EpModal.vue": () => import("./EpModal.vue3.js"), "./EpQuestion.vue": () => import("./EpQuestion.vue2.js"), "./EpSummativeTable.vue": () => import("./EpSummativeTable.vue2.js"), "./EpSvgShow.vue": () => import("./EpSvgShow.vue2.js"), "./EpTabs.vue": () => import("./EpTabs.vue.js"), "./EpTooltip.vue": () => import("./EpTooltip.vue2.js"), "../medias/EpAudio.vue": () => import("../medias/EpAudio.vue2.js"), "../medias/EpCardLink.vue": () => import("../medias/EpCardLink.vue2.js"), "../medias/EpCarousel.vue": () => import("../medias/EpCarousel.vue2.js"), "../medias/EpHierarchy.vue": () => import("../medias/EpHierarchy.vue.js"), "../medias/EpIframe.vue": () => import("../medias/EpIframe.vue2.js"), "../medias/EpKatex.vue": () => import("../medias/EpKatex.vue.js"), "../medias/EpLink.vue": () => import("../medias/EpLink.vue2.js"), "../medias/EpLinkVersion.vue": () => import("../medias/EpLinkVersion.vue2.js"), "../medias/EpLottieSvg.vue": () => import("../medias/EpLottieSvg.vue2.js"), "../medias/EpSensibleImage.vue": () => import("../medias/EpSensibleImage.vue.js"), "../medias/EpSoftware.vue": () => import("../medias/EpSoftware.vue2.js"), "../medias/EpSvg.vue": () => import("../medias/EpSvg.vue2.js"), "../medias/EpTerm.vue": () => import("../medias/EpTerm.vue2.js"), "../medias/EpTimeLine.vue": () => import("../medias/EpTimeLine.vue.js"), "../medias/EpVideo.vue": () => import("../medias/EpVideo.vue2.js"), "../medias/EpVideoPanopto.vue": () => import("../medias/EpVideoPanopto.vue2.js"), "../medias/EpWordDef.vue": () => import("../medias/EpWordDef.vue2.js"), "../signages/EpAlert.vue": () => import("../signages/EpAlert.vue.js"), "../signages/EpBadge.vue": () => import("../signages/EpBadge.vue2.js"), "../signages/EpHeader.vue": () => import("../signages/EpHeader.vue2.js"), "../signages/EpNothing.vue": () => import("../signages/EpNothing.vue.js"), "../signages/EpQuote.vue": () => import("../signages/EpQuote.vue2.js"), "../signages/EpSkeleton.vue": () => import("../signages/EpSkeleton.vue.js"), "../tools/AssociationNode.vue": () => import("../tools/AssociationNode.vue.js"), "../tools/AsyncKatexRender.vue": () => import("../tools/AsyncKatexRender.vue.js"), "../tools/BgAudio.vue": () => import("../tools/BgAudio.vue.js"), "../tools/Details.vue": () => import("../tools/Details.vue2.js"), "../tools/DisplayBox.vue": () => import("../tools/DisplayBox.vue.js"), "../tools/RenderTextNode.vue": () => import("../tools/RenderTextNode.vue2.js"), "../tools/SegmentedBox.vue": () => import("../tools/SegmentedBox.vue.js"), "../tools/SvgFilter.vue": () => import("../tools/SvgFilter.vue.js"), "../tools/TextMedia.vue": () => import("../tools/TextMedia.vue2.js"), "../tools/TimelineItem.vue": () => import("../tools/TimelineItem.vue.js"), "../tools/TwoColsMedia.vue": () => import("../tools/TwoColsMedia.vue.js") }), `../${componentToLoad.path}/${componentToLoad.name}.vue`, 3)
105
+ () => __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "../basics/EpAvatar.vue": () => import("../basics/EpAvatar.vue.js"), "../basics/EpBadge.vue": () => import("../basics/EpBadge.vue.js"), "../basics/EpBtn.vue": () => import("../basics/EpBtn.vue2.js"), "../basics/EpCard.vue": () => import("../basics/EpCard.vue2.js"), "../basics/EpChip.vue": () => import("../basics/EpChip.vue2.js"), "../basics/EpDivider.vue": () => import("../basics/EpDivider.vue2.js"), "../basics/EpFlex.vue": () => import("../basics/EpFlex.vue2.js"), "../basics/EpHover.vue": () => import("../basics/EpHover.vue2.js"), "../basics/EpHoverCard.vue": () => import("../basics/EpHoverCard.vue2.js"), "../basics/EpIcon.vue": () => import("../basics/EpIcon.vue2.js"), "../basics/EpImg.vue": () => import("../basics/EpImg.vue2.js"), "../basics/EpImgCarousel.vue": () => import("../basics/EpImgCarousel.vue2.js"), "../basics/EpList.vue": () => import("../basics/EpList.vue.js"), "../basics/EpListItem.vue": () => import("../basics/EpListItem.vue2.js"), "../basics/EpSection.vue": () => import("../basics/EpSection.vue2.js"), "../basics/EpSectionCols.vue": () => import("../basics/EpSectionCols.vue2.js"), "../basics/EpSpinner.vue": () => import("../basics/EpSpinner.vue2.js"), "../basics/EpStackedList.vue": () => import("../basics/EpStackedList.vue2.js"), "../basics/EpTable.vue": () => import("../basics/EpTable.vue2.js"), "../basics/EpText.vue": () => import("../basics/EpText.vue2.js"), "../charts/EpBarChart.vue": () => import("../charts/EpBarChart.vue2.js"), "../charts/EpFunnelChart.vue": () => import("../charts/EpFunnelChart.vue2.js"), "../charts/EpLineChart.vue": () => import("../charts/EpLineChart.vue2.js"), "../charts/EpPieChart.vue": () => import("../charts/EpPieChart.vue2.js"), "../educationals/EpBranchingScenario.vue": () => import("../educationals/EpBranchingScenario.vue.js"), "../educationals/EpCodeblock.vue": () => import("../educationals/EpCodeblock.vue3.js"), "../educationals/EpConclusion.vue": () => import("../educationals/EpConclusion.vue2.js"), "../educationals/EpDescription.vue": () => import("../educationals/EpDescription.vue2.js"), "../educationals/EpDocument.vue": () => import("../educationals/EpDocument.vue2.js"), "../educationals/EpEdu.vue": () => import("../educationals/EpEdu.vue2.js"), "../educationals/EpFillBlanks.vue": () => import("../educationals/EpFillBlanks.vue2.js"), "../educationals/EpInstructions.vue": () => import("../educationals/EpInstructions.vue2.js"), "../educationals/EpIntroduction.vue": () => import("../educationals/EpIntroduction.vue2.js"), "../educationals/EpObjective.vue": () => import("../educationals/EpObjective.vue2.js"), "../educationals/EpReading.vue": () => import("../educationals/EpReading.vue2.js"), "../educationals/EpResource.vue": () => import("../educationals/EpResource.vue2.js"), "../educationals/EpScope.vue": () => import("../educationals/EpScope.vue2.js"), "../educationals/EpSegmentedBox.vue": () => import("../educationals/EpSegmentedBox.vue2.js"), "../educationals/EpSpecificObjective.vue": () => import("../educationals/EpSpecificObjective.vue2.js"), "../forms/EpCheckbox.vue": () => import("../forms/EpCheckbox.vue.js"), "../forms/EpInput.vue": () => import("../forms/EpInput.vue.js"), "../forms/EpRadio.vue": () => import("../forms/EpRadio.vue.js"), "../forms/EpRadioSummative.vue": () => import("../forms/EpRadioSummative.vue.js"), "../forms/EpSelect.vue": () => import("../forms/EpSelect.vue2.js"), "../forms/EpSwitch.vue": () => import("../forms/EpSwitch.vue.js"), "../forms/EpTextarea.vue": () => import("../forms/EpTextarea.vue.js"), "../forms/EpToggle.vue": () => import("../forms/EpToggle.vue.js"), "./Ep360Image.vue": () => import("./Ep360Image.vue.js"), "./Ep360Video.vue": () => import("./Ep360Video.vue.js"), "./EpAccordeon.vue": () => import("./EpAccordeon.vue.js"), "./EpAssociation.vue": () => import("./EpAssociation.vue2.js"), "./EpContentSlider.vue": () => import("./EpContentSlider.vue2.js"), "./EpDarkMode.vue": () => import("./EpDarkMode.vue2.js"), "./EpDraggable.vue": () => import("./EpDraggable.vue2.js"), "./EpFlipCard.vue": () => import("./EpFlipCard.vue.js"), "./EpHotSpot.vue": () => import("./EpHotSpot.vue2.js"), "./EpImageCompare.vue": () => import("./EpImageCompare.vue2.js"), "./EpModal.vue": () => import("./EpModal.vue3.js"), "./EpQuestion.vue": () => import("./EpQuestion.vue2.js"), "./EpSummativeTable.vue": () => import("./EpSummativeTable.vue2.js"), "./EpSvgShow.vue": () => import("./EpSvgShow.vue2.js"), "./EpTabs.vue": () => import("./EpTabs.vue.js"), "./EpTooltip.vue": () => import("./EpTooltip.vue2.js"), "../medias/EpAudio.vue": () => import("../medias/EpAudio.vue2.js"), "../medias/EpCardLink.vue": () => import("../medias/EpCardLink.vue2.js"), "../medias/EpCarousel.vue": () => import("../medias/EpCarousel.vue2.js"), "../medias/EpHierarchy.vue": () => import("../medias/EpHierarchy.vue.js"), "../medias/EpIframe.vue": () => import("../medias/EpIframe.vue2.js"), "../medias/EpKatex.vue": () => import("../medias/EpKatex.vue.js"), "../medias/EpLink.vue": () => import("../medias/EpLink.vue2.js"), "../medias/EpLinkVersion.vue": () => import("../medias/EpLinkVersion.vue2.js"), "../medias/EpLottieSvg.vue": () => import("../medias/EpLottieSvg.vue2.js"), "../medias/EpSensibleImage.vue": () => import("../medias/EpSensibleImage.vue.js"), "../medias/EpSoftware.vue": () => import("../medias/EpSoftware.vue2.js"), "../medias/EpSvg.vue": () => import("../medias/EpSvg.vue2.js"), "../medias/EpTerm.vue": () => import("../medias/EpTerm.vue2.js"), "../medias/EpTimeLine.vue": () => import("../medias/EpTimeLine.vue.js"), "../medias/EpVideo.vue": () => import("../medias/EpVideo.vue2.js"), "../medias/EpVideoPanopto.vue": () => import("../medias/EpVideoPanopto.vue2.js"), "../medias/EpWordDef.vue": () => import("../medias/EpWordDef.vue2.js"), "../signages/EpAlert.vue": () => import("../signages/EpAlert.vue.js"), "../signages/EpBadge.vue": () => import("../signages/EpBadge.vue2.js"), "../signages/EpHeader.vue": () => import("../signages/EpHeader.vue2.js"), "../signages/EpNothing.vue": () => import("../signages/EpNothing.vue.js"), "../signages/EpQuote.vue": () => import("../signages/EpQuote.vue2.js"), "../signages/EpSkeleton.vue": () => import("../signages/EpSkeleton.vue.js"), "../tools/AssociationNode.vue": () => import("../tools/AssociationNode.vue.js"), "../tools/AsyncKatexRender.vue": () => import("../tools/AsyncKatexRender.vue.js"), "../tools/BgAudio.vue": () => import("../tools/BgAudio.vue.js"), "../tools/Details.vue": () => import("../tools/Details.vue.js"), "../tools/DisplayBox.vue": () => import("../tools/DisplayBox.vue.js"), "../tools/RenderTextNode.vue": () => import("../tools/RenderTextNode.vue.js"), "../tools/SegmentedBox.vue": () => import("../tools/SegmentedBox.vue.js"), "../tools/SvgFilter.vue": () => import("../tools/SvgFilter.vue.js"), "../tools/TextMedia.vue": () => import("../tools/TextMedia.vue.js"), "../tools/TimelineItem.vue": () => import("../tools/TimelineItem.vue.js"), "../tools/TwoColsMedia.vue": () => import("../tools/TwoColsMedia.vue.js") }), `../${componentToLoad.path}/${componentToLoad.name}.vue`, 3)
106
106
  );
107
107
  };
108
108
  const { title, hideIcon, question, src } = toRefs(props);
109
109
  return (_ctx, _cache) => {
110
110
  return openBlock(), createBlock(_sfc_main$1, {
111
111
  title: unref(title),
112
- type: __props.type,
112
+ type: _ctx.type,
113
113
  hideIcon: unref(hideIcon),
114
114
  icon: unref(mdiHelpCircle),
115
- "label-intentions": __props.labelIntentions,
115
+ "label-intentions": _ctx.labelIntentions,
116
116
  card: ""
117
117
  }, createSlots({
118
118
  content: withCtx(() => [
119
119
  createElementVNode("div", _hoisted_2, [
120
- unref(src) && __props.before ? (openBlock(), createBlock(_sfc_main$2, {
120
+ unref(src) && _ctx.before ? (openBlock(), createBlock(_sfc_main$2, {
121
121
  key: 0,
122
122
  src: unref(src),
123
123
  alt: `Image soutien à la question`,
@@ -127,7 +127,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
127
127
  innerHTML: unref(useRenderText)(unref(question)),
128
128
  class: "my-6"
129
129
  }, null, 8, _hoisted_3),
130
- unref(src) && !__props.before ? (openBlock(), createBlock(_sfc_main$2, {
130
+ unref(src) && !_ctx.before ? (openBlock(), createBlock(_sfc_main$2, {
131
131
  key: 1,
132
132
  src: unref(src),
133
133
  alt: `Image soutien à la question`,
@@ -155,7 +155,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
155
155
  type: "error",
156
156
  outlined: "",
157
157
  noIcon: "",
158
- content: __props.labelNoAnswer
158
+ content: _ctx.labelNoAnswer
159
159
  }, null, 8, ["content"])) : createCommentVNode("", true)
160
160
  ]),
161
161
  answered.value ? (openBlock(), createElementBlock("div", _hoisted_6, [
@@ -176,7 +176,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
176
176
  extraClass: "mr-2"
177
177
  }, {
178
178
  default: withCtx(() => [
179
- createTextVNode(toDisplayString(__props.labelAnswerBtn), 1)
179
+ createTextVNode(toDisplayString(_ctx.labelAnswerBtn), 1)
180
180
  ]),
181
181
  _: 1
182
182
  }, 8, ["disabled"]),
@@ -187,7 +187,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
187
187
  outlined: ""
188
188
  }, {
189
189
  default: withCtx(() => [
190
- createTextVNode(toDisplayString(__props.labelTryAgainBtn), 1)
190
+ createTextVNode(toDisplayString(_ctx.labelTryAgainBtn), 1)
191
191
  ]),
192
192
  _: 1
193
193
  })) : createCommentVNode("", true)
@@ -1 +1 @@
1
- {"version":3,"file":"EpQuestion.vue.js","sources":["../../../src/components/interactions/EpQuestion.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { watch, ref, toRefs, computed, defineAsyncComponent } from \"vue\";\nimport EpEdu from \"~/components/educationals/EpEdu.vue\";\nimport { type Answer } from \"~/types/Answer\";\nimport { useRenderText } from \"~/composables/useRenderText\";\nimport { useComponent } from \"~/composables/useComponent\";\nimport { mdiHelpCircle } from \"@mdi/js\";\nimport EpImg from \"~/components/basics/EpImg.vue\";\nimport EpRadio from \"~/components/forms/EpRadio.vue\";\nimport EpBtn from \"~/components/basics/EpBtn.vue\";\nimport EpAlert from \"~/components/signages/EpAlert.vue\";\nimport type { EpQuestionProps } from \"~/types/interactions/EpQuestion\";\n\nconst props = withDefaults(defineProps<EpQuestionProps>(), {\n type: \"neutral\",\n hideIcon: false,\n shuffle: false,\n before: false,\n numeration: false,\n labelNoAnswer: \"Veuillez choisir une réponse\",\n labelAnswerBtn: \"Valider\",\n labelTryAgainBtn: \"Réessayer\",\n});\n\nconst renderText = computed(() => {\n if (!props.intentions) {\n return null;\n }\n return useRenderText(props.intentions);\n});\n\n//shuffle and list\nconst shuffleAnswers = computed(() => {\n const array = props.answers;\n if (props.shuffle) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n const temp = array[i];\n array[i] = array[j];\n array[j] = temp;\n }\n }\n return array;\n});\n\nconst alphabet = [\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\"];\nconst typeList = (index: number) => {\n if (props.numeration) {\n return alphabet[index];\n }\n return index + 1;\n};\n\n///user answer\nconst userAnswer = ref(\"\");\nconst answered = ref(false);\nconst valid = ref(true);\nconst response = ref<Answer>({\n type: \"warning\",\n text: \"no found\",\n component: null,\n feedback: \"\",\n});\nconst checkAnswer = () => {\n if (userAnswer.value === \"\") {\n valid.value = false;\n return;\n }\n const valuesAnswer = props.answers.find((x) => x.uid === userAnswer.value);\n if (!valuesAnswer) {\n return;\n }\n response.value = valuesAnswer!;\n answered.value = true;\n};\n\nconst reset = () => {\n answered.value = false;\n userAnswer.value = \"\";\n};\n\nwatch(userAnswer, (val) => {\n if (val !== \"\") {\n valid.value = true;\n }\n});\n\n//get Component asyncComponent\nconst getCompontent = (name: string | undefined) => {\n const componentToLoad = useComponent(name);\n //console.log(componentToLoad)\n if (componentToLoad.name === \"EpNothing\") {\n return defineAsyncComponent(() => import(\"../signages/EpNothing.vue\"));\n }\n return defineAsyncComponent(\n () => import(`../${componentToLoad.path}/${componentToLoad.name}.vue`)\n );\n};\n\n//returned values from props\nconst { title, intentions, hideIcon, question, src } = toRefs(props);\n</script>\n\n<template>\n <EpEdu\n :title=\"title\"\n :type=\"type\"\n :hideIcon=\"hideIcon\"\n :icon=\"mdiHelpCircle\"\n :label-intentions=\"labelIntentions\"\n card\n >\n <template #intentions v-if=\"renderText\">\n <div v-html=\"renderText\" />\n </template>\n <template #content>\n <div class=\"mt-5\">\n <EpImg\n v-if=\"src && before\"\n :src=\"src\"\n :alt=\"`Image soutien à la question`\"\n cols=\"5\"\n />\n <div v-html=\"useRenderText(question)\" class=\"my-6\" />\n <EpImg\n v-if=\"src && !before\"\n :src=\"src\"\n :alt=\"`Image soutien à la question`\"\n cols=\"5\"\n />\n\n <div class=\"mb-6\">\n <ol class=\"no-list\">\n <li v-for=\"(answer, i) in shuffleAnswers\" :key=\"answer.uid\">\n <EpRadio\n :label=\"`${typeList(i)}. ${answer.text}`\"\n v-model=\"userAnswer\"\n :value=\"answer.uid\"\n :disabled=\"answered\"\n type=\"primary\"\n ></EpRadio>\n </li>\n </ol>\n <EpAlert type=\"error\" outlined noIcon v-if=\"!valid\" :content=\"labelNoAnswer\"/>\n \n\n </div>\n\n <div v-if=\"answered\" class=\"mb-2\">\n <EpAlert :type=\"response.type\" outlined :content=\"response.feedback\"/>\n \n\n\n <div v-if=\"response.component\" class=\"my-2\">\n <component\n :is=\"getCompontent(response.component.type)\"\n v-bind=\"{ ...response.component.data }\"\n ></component>\n </div>\n </div>\n\n <EpBtn\n type=\"primary\"\n @click=\"checkAnswer\"\n :disabled=\"answered\"\n outlined\n extraClass=\"mr-2\"\n >{{ labelAnswerBtn }}</EpBtn\n >\n <EpBtn type=\"primary\" v-if=\"answered\" @click=\"reset\" outlined>{{\n labelTryAgainBtn\n }}</EpBtn>\n </div>\n </template>\n <!-- <template #actions>\n <EpBtn :color=\"type=='base'?'text-gray-700':'text-white'\" :type=\"type\">[Repair btn style... to change]</EpBtn>\n </template> -->\n </EpEdu>\n</template>\n"],"names":["_createBlock","EpEdu","_unref","_createElementVNode","EpImg","_openBlock","_createElementBlock","_Fragment","_renderList","_createVNode","EpRadio","EpAlert","_resolveDynamicComponent","_normalizeProps","_guardReactiveProps","EpBtn"],"mappings":"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"}
1
+ {"version":3,"file":"EpQuestion.vue.js","sources":["../../../src/components/interactions/EpQuestion.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { watch, ref, toRefs, computed, defineAsyncComponent } from \"vue\";\nimport EpEdu from \"~/components/educationals/EpEdu.vue\";\nimport { type Answer } from \"~/types/Answer\";\nimport { useRenderText } from \"~/composables/useRenderText\";\nimport { useComponent } from \"~/composables/useComponent\";\nimport { mdiHelpCircle } from \"@mdi/js\";\nimport EpImg from \"~/components/basics/EpImg.vue\";\nimport EpRadio from \"~/components/forms/EpRadio.vue\";\nimport EpBtn from \"~/components/basics/EpBtn.vue\";\nimport EpAlert from \"~/components/signages/EpAlert.vue\";\nimport type { EpQuestionProps } from \"~/types/interactions/EpQuestion\";\n\nconst props = withDefaults(defineProps<EpQuestionProps>(), {\n type: \"neutral\",\n hideIcon: false,\n shuffle: false,\n before: false,\n numeration: false,\n labelNoAnswer: \"Veuillez choisir une réponse\",\n labelAnswerBtn: \"Valider\",\n labelTryAgainBtn: \"Réessayer\",\n});\n\nconst renderText = computed(() => {\n if (!props.intentions) {\n return null;\n }\n return useRenderText(props.intentions);\n});\n\n//shuffle and list\nconst shuffleAnswers = computed(() => {\n const array = props.answers;\n if (props.shuffle) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n const temp = array[i];\n array[i] = array[j];\n array[j] = temp;\n }\n }\n return array;\n});\n\nconst alphabet = [\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\"];\nconst typeList = (index: number) => {\n if (props.numeration) {\n return alphabet[index];\n }\n return index + 1;\n};\n\n///user answer\nconst userAnswer = ref(\"\");\nconst answered = ref(false);\nconst valid = ref(true);\nconst response = ref<Answer>({\n type: \"warning\",\n text: \"no found\",\n component: null,\n feedback: \"\",\n});\nconst checkAnswer = () => {\n if (userAnswer.value === \"\") {\n valid.value = false;\n return;\n }\n const valuesAnswer = props.answers.find((x) => x.uid === userAnswer.value);\n if (!valuesAnswer) {\n return;\n }\n response.value = valuesAnswer!;\n answered.value = true;\n};\n\nconst reset = () => {\n answered.value = false;\n userAnswer.value = \"\";\n};\n\nwatch(userAnswer, (val) => {\n if (val !== \"\") {\n valid.value = true;\n }\n});\n\n//get Component asyncComponent\nconst getCompontent = (name: string | undefined) => {\n const componentToLoad = useComponent(name);\n //console.log(componentToLoad)\n if (componentToLoad.name === \"EpNothing\") {\n return defineAsyncComponent(() => import(\"../signages/EpNothing.vue\"));\n }\n return defineAsyncComponent(\n () => import(`../${componentToLoad.path}/${componentToLoad.name}.vue`)\n );\n};\n\n//returned values from props\nconst { title, intentions, hideIcon, question, src } = toRefs(props);\n</script>\n\n<template>\n <EpEdu\n :title=\"title\"\n :type=\"type\"\n :hideIcon=\"hideIcon\"\n :icon=\"mdiHelpCircle\"\n :label-intentions=\"labelIntentions\"\n card\n >\n <template #intentions v-if=\"renderText\">\n <div v-html=\"renderText\" />\n </template>\n <template #content>\n <div class=\"mt-5\">\n <EpImg\n v-if=\"src && before\"\n :src=\"src\"\n :alt=\"`Image soutien à la question`\"\n cols=\"5\"\n />\n <div v-html=\"useRenderText(question)\" class=\"my-6\" />\n <EpImg\n v-if=\"src && !before\"\n :src=\"src\"\n :alt=\"`Image soutien à la question`\"\n cols=\"5\"\n />\n\n <div class=\"mb-6\">\n <ol class=\"no-list\">\n <li v-for=\"(answer, i) in shuffleAnswers\" :key=\"answer.uid\">\n <EpRadio\n :label=\"`${typeList(i)}. ${answer.text}`\"\n v-model=\"userAnswer\"\n :value=\"answer.uid\"\n :disabled=\"answered\"\n type=\"primary\"\n ></EpRadio>\n </li>\n </ol>\n <EpAlert type=\"error\" outlined noIcon v-if=\"!valid\" :content=\"labelNoAnswer\"/>\n \n\n </div>\n\n <div v-if=\"answered\" class=\"mb-2\">\n <EpAlert :type=\"response.type\" outlined :content=\"response.feedback\"/>\n \n\n\n <div v-if=\"response.component\" class=\"my-2\">\n <component\n :is=\"getCompontent(response.component.type)\"\n v-bind=\"{ ...response.component.data }\"\n ></component>\n </div>\n </div>\n\n <EpBtn\n type=\"primary\"\n @click=\"checkAnswer\"\n :disabled=\"answered\"\n outlined\n extraClass=\"mr-2\"\n >{{ labelAnswerBtn }}</EpBtn\n >\n <EpBtn type=\"primary\" v-if=\"answered\" @click=\"reset\" outlined>{{\n labelTryAgainBtn\n }}</EpBtn>\n </div>\n </template>\n <!-- <template #actions>\n <EpBtn :color=\"type=='base'?'text-gray-700':'text-white'\" :type=\"type\">[Repair btn style... to change]</EpBtn>\n </template> -->\n </EpEdu>\n</template>\n"],"names":["_createBlock","EpEdu","_unref","type","labelIntentions","_createElementVNode","before","EpImg","_openBlock","_createElementBlock","_Fragment","_renderList","_createVNode","EpRadio","EpAlert","labelNoAnswer","_resolveDynamicComponent","_normalizeProps","_guardReactiveProps","EpBtn","labelAnswerBtn","labelTryAgainBtn"],"mappings":"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"}
@@ -35,8 +35,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
35
35
  };
36
36
  return (_ctx, _cache) => {
37
37
  return openBlock(), createElementBlock("div", _hoisted_1, [
38
- __props.title ? (openBlock(), createElementBlock("h4", _hoisted_2, toDisplayString(__props.title), 1)) : createCommentVNode("", true),
39
- (openBlock(true), createElementBlock(Fragment, null, renderList(__props.questions, (question, i) => {
38
+ _ctx.title ? (openBlock(), createElementBlock("h4", _hoisted_2, toDisplayString(_ctx.title), 1)) : createCommentVNode("", true),
39
+ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.questions, (question, i) => {
40
40
  return openBlock(), createElementBlock(Fragment, {
41
41
  key: `item-question-${i}`
42
42
  }, [
@@ -58,7 +58,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
58
58
  ], 64);
59
59
  }), 128)),
60
60
  createElementVNode("div", _hoisted_5, [
61
- createElementVNode("span", _hoisted_6, toDisplayString(__props.totalLabel) + " " + toDisplayString(resultSummative.value), 1)
61
+ createElementVNode("span", _hoisted_6, toDisplayString(_ctx.totalLabel) + " " + toDisplayString(resultSummative.value), 1)
62
62
  ])
63
63
  ]);
64
64
  };
@@ -1 +1 @@
1
- {"version":3,"file":"EpSummativeTable.vue.js","sources":["../../../src/components/interactions/EpSummativeTable.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed } from \"vue\";\nimport EpDivider from \"~/components/basics/EpDivider.vue\";\nimport EpRadioSummative from \"~/components/forms/EpRadioSummative.vue\";\nimport type { EpSummativeTableProps } from \"~/types/interactions/EpSummativeTable\";\nconst totalValue = ref<number[]>([]);\n\nconst {\n title,\n questions,\n totalLabel = \"Total :\",\n} = defineProps<EpSummativeTableProps>();\n\nconst resultSummative = computed(() => {\n return totalValue.value.reduce(\n (total, currentvalue) => total + currentvalue,\n 0\n );\n});\n\n//cette function sera efface, en creant le nouveau editeur\nconst transformNumber = (value: string | number) => {\n const num = Number(value);\n if (isNaN(num)) {\n return 0;\n } else {\n return num;\n }\n};\n</script>\n\n<template>\n <div class=\"mt-4 bg-surface-2 dark:bg-surface-2-dark p-4 rounded\">\n <h4 v-if=\"title\" class=\"text-xl font-semibold mb-6\">{{ title }}</h4>\n <template v-for=\"(question, i) in questions\" :key=\"`item-question-${i}`\">\n <p class=\"py-2 rounded\">\n {{ question.label }}\n </p>\n <div class=\"flex flex-row flex-wrap gap-y-2 sm:gap-x-4\">\n <template\n v-for=\"(_option, j) in question.options\"\n :key=\"`option-question-${j}`\"\n >\n <EpRadioSummative\n :id=\"`option-${i}-${j}-${_option.uid}`\"\n :name=\"`option-${i}-${j}-${_option.uid}`\"\n :label=\"_option.label\"\n :value=\"transformNumber(_option.value)\"\n v-model=\"totalValue[i]\"\n >\n </EpRadioSummative>\n </template>\n </div>\n <EpDivider />\n </template>\n <div class=\"text-right pr-16\">\n <span class=\"text-sm font-semibold uppercase\"\n >{{ totalLabel }} {{ resultSummative }}</span\n >\n </div>\n </div>\n</template>\n"],"names":["_openBlock","_createElementBlock","_toDisplayString","_Fragment","_renderList","_createElementVNode","_createBlock","EpRadioSummative","_createVNode","EpDivider"],"mappings":";;;;;;;;;;;;;;;;;;;;AAKA,UAAM,aAAa,IAAc,EAAE;AAQnC,UAAM,kBAAkB,SAAS,MAAM;AACrC,aAAO,WAAW,MAAM;AAAA,QACtB,CAAC,OAAO,iBAAiB,QAAQ;AAAA,QACjC;AAAA,MAAA;AAAA,IAEJ,CAAC;AAGD,UAAM,kBAAkB,CAAC,UAA2B;AAClD,YAAM,MAAM,OAAO,KAAK;AACxB,UAAI,MAAM,GAAG,GAAG;AACd,eAAO;AAAA,MACT,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;;AAIE,aAAAA,UAAA,GAAAC,mBA4BM,OA5BN,YA4BM;AAAA,QA3BM,QAAA,sBAAVA,mBAAoE,MAApE,YAAoEC,gBAAb,QAAA,KAAK,GAAA,CAAA;SAC5DF,UAAA,IAAA,GAAAC,mBAoBWE,UAAA,MAAAC,WApBuB,QAAA,WAAS,CAAzB,UAAU,MAAC;;kCAAuC,CAAC;AAAA,UAAA;YACnEC,mBAEI,KAFJ,YAEIH,gBADC,SAAS,KAAK,GAAA,CAAA;AAAA,YAEnBG,mBAcM,OAdN,YAcM;AAAA,eAbJL,UAAA,IAAA,GAAAC,mBAYWE,2BAXc,SAAS,SAAO,CAA/B,SAAS,MAAC;oCAGlBG,YAOmBC,aAAA;AAAA,0CATM,CAAC;AAAA,kBAGvB,cAAc,CAAC,IAAI,CAAC,IAAI,QAAQ,GAAG;AAAA,kBACnC,gBAAgB,CAAC,IAAI,CAAC,IAAI,QAAQ,GAAG;AAAA,kBACrC,OAAO,QAAQ;AAAA,kBACf,OAAO,gBAAgB,QAAQ,KAAK;AAAA,kBAC5B,YAAA,WAAA,MAAW,CAAC;AAAA,kBAAZ,uBAAA,CAAA,WAAA,WAAA,MAAW,CAAC,IAAA;AAAA,gBAAA;;;YAK3BC,YAAaC,WAAA;AAAA,UAAA;;QAEfJ,mBAIM,OAJN,YAIM;AAAA,UAHJA,mBAEC,QAFD,YAECH,gBADK,kBAAU,IAAG,sBAAI,gBAAA,KAAe,GAAA,CAAA;AAAA,QAAA;;;;;"}
1
+ {"version":3,"file":"EpSummativeTable.vue.js","sources":["../../../src/components/interactions/EpSummativeTable.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed } from \"vue\";\nimport EpDivider from \"~/components/basics/EpDivider.vue\";\nimport EpRadioSummative from \"~/components/forms/EpRadioSummative.vue\";\nimport type { EpSummativeTableProps } from \"~/types/interactions/EpSummativeTable\";\nconst totalValue = ref<number[]>([]);\n\nconst {\n title,\n questions,\n totalLabel = \"Total :\",\n} = defineProps<EpSummativeTableProps>();\n\nconst resultSummative = computed(() => {\n return totalValue.value.reduce(\n (total, currentvalue) => total + currentvalue,\n 0\n );\n});\n\n//cette function sera efface, en creant le nouveau editeur\nconst transformNumber = (value: string | number) => {\n const num = Number(value);\n if (isNaN(num)) {\n return 0;\n } else {\n return num;\n }\n};\n</script>\n\n<template>\n <div class=\"mt-4 bg-surface-2 dark:bg-surface-2-dark p-4 rounded\">\n <h4 v-if=\"title\" class=\"text-xl font-semibold mb-6\">{{ title }}</h4>\n <template v-for=\"(question, i) in questions\" :key=\"`item-question-${i}`\">\n <p class=\"py-2 rounded\">\n {{ question.label }}\n </p>\n <div class=\"flex flex-row flex-wrap gap-y-2 sm:gap-x-4\">\n <template\n v-for=\"(_option, j) in question.options\"\n :key=\"`option-question-${j}`\"\n >\n <EpRadioSummative\n :id=\"`option-${i}-${j}-${_option.uid}`\"\n :name=\"`option-${i}-${j}-${_option.uid}`\"\n :label=\"_option.label\"\n :value=\"transformNumber(_option.value)\"\n v-model=\"totalValue[i]\"\n >\n </EpRadioSummative>\n </template>\n </div>\n <EpDivider />\n </template>\n <div class=\"text-right pr-16\">\n <span class=\"text-sm font-semibold uppercase\"\n >{{ totalLabel }} {{ resultSummative }}</span\n >\n </div>\n </div>\n</template>\n"],"names":["_openBlock","_createElementBlock","title","_toDisplayString","_Fragment","_renderList","questions","_createElementVNode","_createBlock","EpRadioSummative","_createVNode","EpDivider","totalLabel"],"mappings":";;;;;;;;;;;;;;;;;;;;AAKA,UAAM,aAAa,IAAc,EAAE;AAQnC,UAAM,kBAAkB,SAAS,MAAM;AACrC,aAAO,WAAW,MAAM;AAAA,QACtB,CAAC,OAAO,iBAAiB,QAAQ;AAAA,QACjC;AAAA,MAAA;AAAA,IAEJ,CAAC;AAGD,UAAM,kBAAkB,CAAC,UAA2B;AAClD,YAAM,MAAM,OAAO,KAAK;AACxB,UAAI,MAAM,GAAG,GAAG;AACd,eAAO;AAAA,MACT,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;;AAIE,aAAAA,UAAA,GAAAC,mBA4BM,OA5BN,YA4BM;AAAA,QA3BMC,KAAAA,sBAAVD,mBAAoE,MAApE,YAAoEE,gBAAbD,KAAAA,KAAK,GAAA,CAAA;SAC5DF,UAAA,IAAA,GAAAC,mBAoBWG,UAAA,MAAAC,WApBuBC,KAAAA,WAAS,CAAzB,UAAU,MAAC;;kCAAuC,CAAC;AAAA,UAAA;YACnEC,mBAEI,KAFJ,YAEIJ,gBADC,SAAS,KAAK,GAAA,CAAA;AAAA,YAEnBI,mBAcM,OAdN,YAcM;AAAA,eAbJP,UAAA,IAAA,GAAAC,mBAYWG,2BAXc,SAAS,SAAO,CAA/B,SAAS,MAAC;oCAGlBI,YAOmBC,aAAA;AAAA,0CATM,CAAC;AAAA,kBAGvB,cAAc,CAAC,IAAI,CAAC,IAAI,QAAQ,GAAG;AAAA,kBACnC,gBAAgB,CAAC,IAAI,CAAC,IAAI,QAAQ,GAAG;AAAA,kBACrC,OAAO,QAAQ;AAAA,kBACf,OAAO,gBAAgB,QAAQ,KAAK;AAAA,kBAC5B,YAAA,WAAA,MAAW,CAAC;AAAA,kBAAZ,uBAAA,CAAA,WAAA,WAAA,MAAW,CAAC,IAAA;AAAA,gBAAA;;;YAK3BC,YAAaC,WAAA;AAAA,UAAA;;QAEfJ,mBAIM,OAJN,YAIM;AAAA,UAHJA,mBAEC,QAFD,YAECJ,gBADKS,eAAU,IAAG,sBAAI,gBAAA,KAAe,GAAA,CAAA;AAAA,QAAA;;;;;"}
@@ -39,7 +39,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
39
39
  renderSlot(_ctx.$slots, "default"),
40
40
  createElementVNode("span", {
41
41
  class: normalizeClass(`pointer-events-none absolute w-max rounded px-2 py-1 text-sm font-medium opacity-0 shadow transition-opacity group-hover:opacity-100 ${finalStyles.value} `)
42
- }, toDisplayString(__props.text), 3)
42
+ }, toDisplayString(_ctx.text), 3)
43
43
  ]);
44
44
  };
45
45
  }