ep-lib-ts 1.1.11 → 1.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/basics/EpAvatar.vue.js +1 -55
- package/dist/components/basics/EpAvatar.vue.js.map +1 -1
- package/dist/components/basics/EpAvatar.vue2.js +55 -1
- package/dist/components/basics/EpAvatar.vue2.js.map +1 -1
- package/dist/components/basics/EpBtn.vue.js +2 -2
- package/dist/components/basics/EpBtn.vue.js.map +1 -1
- package/dist/components/basics/EpChip.vue.js +2 -2
- package/dist/components/basics/EpChip.vue.js.map +1 -1
- package/dist/components/basics/EpHover.vue.js +1 -1
- package/dist/components/basics/EpHover.vue.js.map +1 -1
- package/dist/components/basics/EpHoverCard.vue.js +6 -6
- package/dist/components/basics/EpHoverCard.vue.js.map +1 -1
- package/dist/components/basics/EpImg.vue.js +8 -8
- package/dist/components/basics/EpImg.vue.js.map +1 -1
- package/dist/components/basics/EpImgCarousel.vue.js +8 -8
- package/dist/components/basics/EpImgCarousel.vue.js.map +1 -1
- package/dist/components/basics/EpSection.vue.js +25 -25
- package/dist/components/basics/EpSection.vue.js.map +1 -1
- package/dist/components/basics/EpSectionCols.vue.js +29 -29
- package/dist/components/basics/EpSectionCols.vue.js.map +1 -1
- package/dist/components/basics/EpSpinner.vue.js +5 -5
- package/dist/components/basics/EpSpinner.vue.js.map +1 -1
- package/dist/components/basics/EpStackedList.vue.js +8 -8
- package/dist/components/basics/EpStackedList.vue.js.map +1 -1
- package/dist/components/charts/EpBarChart.vue.js +3 -3
- package/dist/components/charts/EpBarChart.vue.js.map +1 -1
- package/dist/components/charts/EpFunnelChart.vue.js +4 -4
- package/dist/components/charts/EpFunnelChart.vue.js.map +1 -1
- package/dist/components/charts/EpLineChart.vue.js +3 -3
- package/dist/components/charts/EpLineChart.vue.js.map +1 -1
- package/dist/components/charts/EpPieChart.vue.js +4 -4
- package/dist/components/charts/EpPieChart.vue.js.map +1 -1
- package/dist/components/educationals/EpBranchingScenario.vue2.js +19 -19
- package/dist/components/educationals/EpBranchingScenario.vue2.js.map +1 -1
- package/dist/components/educationals/EpCodeblock.vue.js +1 -1
- package/dist/components/educationals/EpCodeblock.vue.js.map +1 -1
- package/dist/components/educationals/EpConclusion.vue.js +3 -3
- package/dist/components/educationals/EpConclusion.vue.js.map +1 -1
- package/dist/components/educationals/EpDescription.vue.js +1 -1
- package/dist/components/educationals/EpDocument.vue.js +4 -4
- package/dist/components/educationals/EpDocument.vue.js.map +1 -1
- package/dist/components/educationals/EpEdu.vue.js +4 -4
- package/dist/components/educationals/EpEdu.vue.js.map +1 -1
- package/dist/components/educationals/EpFillBlanks.vue.js +116 -0
- package/dist/components/educationals/EpFillBlanks.vue.js.map +1 -0
- package/dist/components/educationals/EpFillBlanks.vue2.js +5 -0
- package/dist/components/educationals/EpFillBlanks.vue2.js.map +1 -0
- package/dist/components/educationals/EpInstructions.vue.js +1 -1
- package/dist/components/educationals/EpIntroduction.vue.js +6 -6
- package/dist/components/educationals/EpIntroduction.vue.js.map +1 -1
- package/dist/components/educationals/EpObjective.vue.js +3 -3
- package/dist/components/educationals/EpObjective.vue.js.map +1 -1
- package/dist/components/educationals/EpReading.vue.js +3 -3
- package/dist/components/educationals/EpReading.vue.js.map +1 -1
- package/dist/components/educationals/EpResource.vue.js +3 -3
- package/dist/components/educationals/EpResource.vue.js.map +1 -1
- package/dist/components/educationals/EpScope.vue.js +2 -2
- package/dist/components/educationals/EpScope.vue.js.map +1 -1
- package/dist/components/educationals/EpSegmentedBox.vue.js +1 -1
- package/dist/components/educationals/EpSegmentedBox.vue.js.map +1 -1
- package/dist/components/educationals/EpSpecificObjective.vue.js +16 -10
- package/dist/components/educationals/EpSpecificObjective.vue.js.map +1 -1
- package/dist/components/forms/EpSelect.vue.js +46 -1
- package/dist/components/forms/EpSelect.vue.js.map +1 -1
- package/dist/components/forms/EpSelect.vue2.js +1 -37
- package/dist/components/forms/EpSelect.vue2.js.map +1 -1
- package/dist/components/forms/EpTextarea.vue2.js +1 -1
- package/dist/components/forms/EpTextarea.vue2.js.map +1 -1
- package/dist/components/forms/EpToggle.vue2.js +1 -1
- package/dist/components/forms/EpToggle.vue2.js.map +1 -1
- package/dist/components/interactions/EpAccordeon.vue2.js +1 -1
- package/dist/components/interactions/EpAccordeon.vue2.js.map +1 -1
- package/dist/components/interactions/EpAssociation.vue.js +14 -13
- package/dist/components/interactions/EpAssociation.vue.js.map +1 -1
- package/dist/components/interactions/EpContentSlider.vue.js +5 -4
- package/dist/components/interactions/EpContentSlider.vue.js.map +1 -1
- package/dist/components/interactions/EpFlipCard.vue2.js +17 -17
- package/dist/components/interactions/EpFlipCard.vue2.js.map +1 -1
- package/dist/components/interactions/EpHotSpot.vue.js +1 -1
- package/dist/components/interactions/EpHotSpot.vue.js.map +1 -1
- package/dist/components/interactions/EpImageCompare.vue.js +6 -6
- package/dist/components/interactions/EpImageCompare.vue.js.map +1 -1
- package/dist/components/interactions/EpModal.vue.js +4 -4
- package/dist/components/interactions/EpModal.vue.js.map +1 -1
- package/dist/components/interactions/EpQuestion.vue.js +8 -8
- package/dist/components/interactions/EpQuestion.vue.js.map +1 -1
- package/dist/components/interactions/EpSummativeTable.vue.js +3 -3
- package/dist/components/interactions/EpSummativeTable.vue.js.map +1 -1
- package/dist/components/interactions/EpTooltip.vue.js +1 -1
- package/dist/components/interactions/EpTooltip.vue.js.map +1 -1
- package/dist/components/medias/EpAudio.vue.js +3 -3
- package/dist/components/medias/EpAudio.vue.js.map +1 -1
- package/dist/components/medias/EpCardLink.vue.js +16 -16
- package/dist/components/medias/EpCardLink.vue.js.map +1 -1
- package/dist/components/medias/EpCarousel.vue.js +10 -10
- package/dist/components/medias/EpCarousel.vue.js.map +1 -1
- package/dist/components/medias/EpHierarchy.vue2.js +2 -2
- package/dist/components/medias/EpHierarchy.vue2.js.map +1 -1
- package/dist/components/medias/EpIframe.vue.js +3 -3
- package/dist/components/medias/EpIframe.vue.js.map +1 -1
- package/dist/components/medias/EpKatex.vue2.js +4 -4
- package/dist/components/medias/EpKatex.vue2.js.map +1 -1
- package/dist/components/medias/EpLink.vue.js +2 -2
- package/dist/components/medias/EpLink.vue.js.map +1 -1
- package/dist/components/medias/EpLinkVersion.vue.js +1 -1
- package/dist/components/medias/EpLinkVersion.vue.js.map +1 -1
- package/dist/components/medias/EpLottieSvg.vue.js +8 -8
- package/dist/components/medias/EpLottieSvg.vue.js.map +1 -1
- package/dist/components/medias/EpSensibleImage.vue2.js +18 -18
- package/dist/components/medias/EpSensibleImage.vue2.js.map +1 -1
- package/dist/components/medias/EpSoftware.vue.js +3 -3
- package/dist/components/medias/EpSoftware.vue.js.map +1 -1
- package/dist/components/medias/EpSvg.vue.js +4 -4
- package/dist/components/medias/EpSvg.vue.js.map +1 -1
- package/dist/components/medias/EpTerm.vue.js +6 -6
- package/dist/components/medias/EpTerm.vue.js.map +1 -1
- package/dist/components/medias/EpVideo.vue.js +2 -2
- package/dist/components/medias/EpVideo.vue.js.map +1 -1
- package/dist/components/medias/EpVideoPanopto.vue.js +3 -3
- package/dist/components/medias/EpVideoPanopto.vue.js.map +1 -1
- package/dist/components/medias/EpWordDef.vue.js +39 -39
- package/dist/components/medias/EpWordDef.vue.js.map +1 -1
- package/dist/components/signages/EpAlert.vue2.js +1 -1
- package/dist/components/signages/EpHeader.vue.js +60 -55
- package/dist/components/signages/EpHeader.vue.js.map +1 -1
- package/dist/components/signages/EpQuote.vue.js +1 -1
- package/dist/components/signages/EpSkeleton.vue2.js +1 -1
- package/dist/components/tools/AssociationNode.vue2.js +8 -8
- package/dist/components/tools/AssociationNode.vue2.js.map +1 -1
- package/dist/components/tools/AsyncKatexRender.vue2.js +1 -1
- package/dist/components/tools/AsyncKatexRender.vue2.js.map +1 -1
- package/dist/components/tools/Details.vue.js +56 -1
- package/dist/components/tools/Details.vue.js.map +1 -1
- package/dist/components/tools/Details.vue2.js +1 -56
- package/dist/components/tools/Details.vue2.js.map +1 -1
- package/dist/components/tools/RenderTextNode.vue.js +19 -1
- package/dist/components/tools/RenderTextNode.vue.js.map +1 -1
- package/dist/components/tools/RenderTextNode.vue2.js +1 -19
- package/dist/components/tools/RenderTextNode.vue2.js.map +1 -1
- package/dist/components/tools/SegmentedBox.vue2.js +3 -3
- package/dist/components/tools/SegmentedBox.vue2.js.map +1 -1
- package/dist/components/tools/TextMedia.vue.js +50 -1
- package/dist/components/tools/TextMedia.vue.js.map +1 -1
- package/dist/components/tools/TextMedia.vue2.js +1 -50
- package/dist/components/tools/TextMedia.vue2.js.map +1 -1
- package/dist/components/tools/TimelineItem.vue2.js +1 -1
- package/dist/components/tools/TwoColsMedia.vue2.js +4 -4
- package/dist/components/tools/TwoColsMedia.vue2.js.map +1 -1
- package/dist/entry/educationals/EpFillBlanks.d.ts +6 -0
- package/dist/entry/educationals/EpFillBlanks.js +7 -0
- package/dist/entry/educationals/EpFillBlanks.js.map +1 -0
- package/dist/entry/forms/EpSelect.d.ts +6 -0
- package/dist/entry/forms/EpSelect.js +7 -0
- package/dist/entry/forms/EpSelect.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +159 -156
- package/dist/index.js.map +1 -1
- package/dist/style.css +82 -82
- package/dist/types/educationals/EpFillBlanks.d.ts +12 -0
- package/dist/types/forms/EpSelect.d.ts +1 -0
- package/dist/types/signages/EpHeader.d.ts +1 -0
- package/package.json +42 -39
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { defineComponent, ref, computed, createElementBlock, openBlock, createElementVNode, normalizeStyle, createCommentVNode, toDisplayString, createVNode, withCtx, unref, normalizeClass, createTextVNode, createBlock, Fragment, renderList } from "vue";
|
|
2
2
|
import { useRenderText } from "../../composables/useRenderText.js";
|
|
3
3
|
import _sfc_main$2 from "../basics/EpIcon.vue.js";
|
|
4
|
-
import _sfc_main$4 from "../tools/Details.
|
|
4
|
+
import _sfc_main$4 from "../tools/Details.vue.js";
|
|
5
5
|
import _sfc_main$5 from "../interactions/EpModal.vue.js";
|
|
6
6
|
/* empty css */
|
|
7
7
|
import Comp from "../medias/EpHierarchy.vue.js";
|
|
8
8
|
import _sfc_main$1 from "../basics/EpBtn.vue.js";
|
|
9
9
|
import { mdiArrowLeft } from "@mdi/js";
|
|
10
|
-
import _sfc_main$3 from "../tools/TextMedia.
|
|
10
|
+
import _sfc_main$3 from "../tools/TextMedia.vue.js";
|
|
11
11
|
const _hoisted_1 = { class: "mb-2" };
|
|
12
12
|
const _hoisted_2 = { class: "font-bold text-3xl text-center" };
|
|
13
13
|
const _hoisted_3 = {
|
|
@@ -145,17 +145,17 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
145
145
|
return openBlock(), createElementBlock("div", null, [
|
|
146
146
|
createElementVNode("div", {
|
|
147
147
|
class: "bg-surface-2 dark:bg-surface-2-dark rounded-md p-4 flex flex-col",
|
|
148
|
-
style: normalizeStyle({ minHeight: "500px", backgroundColor:
|
|
148
|
+
style: normalizeStyle({ minHeight: "500px", backgroundColor: __props.bgColor })
|
|
149
149
|
}, [
|
|
150
150
|
createElementVNode("div", _hoisted_1, [
|
|
151
|
-
createElementVNode("h1", _hoisted_2, toDisplayString(
|
|
151
|
+
createElementVNode("h1", _hoisted_2, toDisplayString(__props.title), 1),
|
|
152
152
|
currentOption.value ? (openBlock(), createElementBlock("h2", _hoisted_3, toDisplayString(currentOption.value.name), 1)) : createCommentVNode("", true),
|
|
153
153
|
currentOption.value ? (openBlock(), createElementBlock("div", _hoisted_4, [
|
|
154
154
|
createVNode(_sfc_main$1, {
|
|
155
155
|
type: "primary",
|
|
156
156
|
rounded: "",
|
|
157
157
|
size: "small",
|
|
158
|
-
"extra-class": `${
|
|
158
|
+
"extra-class": `${__props.transitionAnimation}`,
|
|
159
159
|
onClick: goToPrevious
|
|
160
160
|
}, {
|
|
161
161
|
default: withCtx(() => [
|
|
@@ -171,9 +171,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
171
171
|
createElementVNode("div", null, [
|
|
172
172
|
isIntroductoryPart.value ? (openBlock(), createElementBlock("div", _hoisted_5, [
|
|
173
173
|
createVNode(_sfc_main$3, {
|
|
174
|
-
text: (_a =
|
|
175
|
-
media:
|
|
176
|
-
cols:
|
|
174
|
+
text: (_a = __props.initialInstruction) != null ? _a : "",
|
|
175
|
+
media: __props.media,
|
|
176
|
+
cols: __props.initialTwoCols,
|
|
177
177
|
"flex-col": ""
|
|
178
178
|
}, null, 8, ["text", "media", "cols"]),
|
|
179
179
|
createElementVNode("div", {
|
|
@@ -185,14 +185,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
185
185
|
onClick: start
|
|
186
186
|
}, {
|
|
187
187
|
default: withCtx(() => [
|
|
188
|
-
createTextVNode(toDisplayString(
|
|
188
|
+
createTextVNode(toDisplayString(__props.labelStart), 1)
|
|
189
189
|
]),
|
|
190
190
|
_: 1
|
|
191
191
|
})
|
|
192
192
|
], 2)
|
|
193
193
|
])) : currentOption.value && !isIntroductoryPart.value ? (openBlock(), createElementBlock("div", _hoisted_6, [
|
|
194
194
|
createElementVNode("div", {
|
|
195
|
-
class: normalizeClass(`${
|
|
195
|
+
class: normalizeClass(`${__props.transitionAnimation} my-12`)
|
|
196
196
|
}, [
|
|
197
197
|
createVNode(_sfc_main$3, {
|
|
198
198
|
text: (_b = currentOption.value.text) != null ? _b : "",
|
|
@@ -223,19 +223,19 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
223
223
|
onClick: finish
|
|
224
224
|
}, {
|
|
225
225
|
default: withCtx(() => [
|
|
226
|
-
createTextVNode(toDisplayString(
|
|
226
|
+
createTextVNode(toDisplayString(__props.labelBtnFinish), 1)
|
|
227
227
|
]),
|
|
228
228
|
_: 1
|
|
229
229
|
})) : createCommentVNode("", true)
|
|
230
230
|
])
|
|
231
231
|
], 2)
|
|
232
232
|
])) : (openBlock(), createElementBlock("div", _hoisted_8, [
|
|
233
|
-
createElementVNode("h3", _hoisted_9, toDisplayString(
|
|
233
|
+
createElementVNode("h3", _hoisted_9, toDisplayString(__props.labelFinish), 1),
|
|
234
234
|
createElementVNode("div", {
|
|
235
|
-
class: normalizeClass(`flex gap-6 mt-3 ${!
|
|
235
|
+
class: normalizeClass(`flex gap-6 mt-3 ${!__props.generalFeedback ? "w-3/6 mx-auto" : ""}`)
|
|
236
236
|
}, [
|
|
237
237
|
createElementVNode("div", _hoisted_10, [
|
|
238
|
-
createElementVNode("h3", _hoisted_11, toDisplayString(
|
|
238
|
+
createElementVNode("h3", _hoisted_11, toDisplayString(__props.labelYourPath), 1),
|
|
239
239
|
createElementVNode("div", _hoisted_12, [
|
|
240
240
|
(openBlock(true), createElementBlock(Fragment, null, renderList(path.value, (item, i) => {
|
|
241
241
|
var _a2;
|
|
@@ -259,7 +259,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
259
259
|
onClick: _cache[0] || (_cache[0] = ($event) => showPath.value = true)
|
|
260
260
|
}, {
|
|
261
261
|
default: withCtx(() => [
|
|
262
|
-
createTextVNode(toDisplayString(
|
|
262
|
+
createTextVNode(toDisplayString(__props.labelShowFullPath), 1)
|
|
263
263
|
]),
|
|
264
264
|
_: 1
|
|
265
265
|
})
|
|
@@ -285,7 +285,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
285
285
|
rounded: ""
|
|
286
286
|
}, {
|
|
287
287
|
default: withCtx(() => [
|
|
288
|
-
createTextVNode(toDisplayString(
|
|
288
|
+
createTextVNode(toDisplayString(__props.labelClose), 1)
|
|
289
289
|
]),
|
|
290
290
|
_: 1
|
|
291
291
|
})
|
|
@@ -294,9 +294,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
294
294
|
_: 1
|
|
295
295
|
}, 8, ["modelValue"])) : createCommentVNode("", true)
|
|
296
296
|
]),
|
|
297
|
-
|
|
297
|
+
__props.generalFeedback ? (openBlock(), createElementBlock("div", _hoisted_16, [
|
|
298
298
|
createElementVNode("div", {
|
|
299
|
-
innerHTML: unref(useRenderText)(
|
|
299
|
+
innerHTML: unref(useRenderText)(__props.generalFeedback)
|
|
300
300
|
}, null, 8, _hoisted_17)
|
|
301
301
|
])) : createCommentVNode("", true)
|
|
302
302
|
], 2),
|
|
@@ -307,7 +307,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
307
307
|
onClick: restart
|
|
308
308
|
}, {
|
|
309
309
|
default: withCtx(() => [
|
|
310
|
-
createTextVNode(toDisplayString(
|
|
310
|
+
createTextVNode(toDisplayString(__props.labelRestart), 1)
|
|
311
311
|
]),
|
|
312
312
|
_: 1
|
|
313
313
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EpBranchingScenario.vue2.js","sources":["../../../src/components/educationals/EpBranchingScenario.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed, watchEffect } from \"vue\";\nimport { useRenderText } from \"~/composables/useRenderText\";\nimport type { TreeNode } from \"~/types/Hierarchy\";\nimport EpIcon from \"~/components/basics/EpIcon.vue\";\nimport Details from \"~/components/tools/Details.vue\";\nimport EpModal from \"~/components/interactions/EpModal.vue\";\nimport EpHierarchy from \"~/components/medias/EpHierarchy.vue\";\nimport EpBtn from \"../basics/EpBtn.vue\";\nimport { mdiArrowLeft } from \"@mdi/js\";\nimport TextMedia from \"~/components/tools/TextMedia.vue\";\nimport type { EpBranchingScenarioProps } from \"~/types/educationals/EpBranchingScenario\";\n\nconst props = withDefaults(defineProps<EpBranchingScenarioProps>(), {\n initialInstruction: null,\n transitionAnimation: \"fade\",\n labelFinish: \"Vous avez terminé le scénario!\",\n labelYourPath: \"Votre parcours\",\n labelShowFullPath: \"Voir le parcours au complet\",\n labelClose: \"Fermer\",\n labelRestart: \"Recommencer\",\n labelStart: \"Commencer\",\n labelBtnFinish: \"Fin du scénario\",\n colorRect: \"fill-main-color-400\",\n colorPath: \"stroke-yellow-400\",\n});\n\nconst showPath = ref(false);\nconst path = ref<TreeNode[]>([]);\nconst userPath = ref<TreeNode | null>(null);\nconst currentOption = ref<TreeNode | null>(null);\n\n// Manage the introductory part\nconst isIntroductoryPart = ref(true);\n\nconst start = () => {\n isIntroductoryPart.value = false;\n currentOption.value = props.decisionTree;\n path.value = [props.decisionTree];\n};\n\nconst styleIntro = computed(() => {\n const noInstruction = !props.initialInstruction;\n const noMedia = !props.media;\n\n if (noInstruction && noMedia) {\n return \"pt-44\";\n }\n\n return \"\";\n});\n\n// Return function\nconst goToPrevious = () => {\n //if(notTheEnd.value){\n if (path.value.length === 1) {\n isIntroductoryPart.value = true;\n currentOption.value = null;\n return;\n }\n\n path.value.pop();\n // Get the previous option in the path\n const lastOption = path.value[path.value.length - 1];\n\n if (lastOption) {\n currentOption.value = lastOption;\n isTheLastOne.value = false\n } else {\n currentOption.value = props.decisionTree;\n }\n};\n\n// Restart function\nconst restart = () => {\n //currentSlide.value = 0;\n currentOption.value = null;\n isIntroductoryPart.value = true;\n path.value = [];\n isTheLastOne.value = false\n};\n\nconst isTheLastOne = ref(false)\n\nconst nextSlide = (option: TreeNode) => {\n //currentSlide.value++\n path.value.push(option);\n //console.log(option)\n if (option.children && option.children.length > 0 && !isTheLastOne.value) {\n currentOption.value = option; // drill into next level\n } else {\n //currentOption.value = null; // reached the end (leaf node)\n isTheLastOne.value = true\n currentOption.value = option\n }\n \n};\n\nconst finish = () => {\n currentOption.value = null\n userPath.value = convertOptionToTreeNode(props.decisionTree, path.value); \n}\n\n//helper function\nfunction convertOptionToTreeNode(option: TreeNode, path: TreeNode[]): TreeNode {\n const isActive = path.includes(option);\n return {\n name: option.name,\n label: option.label ?? \"\",\n text: option.text,\n component: option.component,\n active: isActive,\n children: option.children?.map((child) =>\n convertOptionToTreeNode(child, path)\n ),\n };\n}\n\n</script>\n\n<template>\n <div>\n <div\n class=\"bg-surface-2 dark:bg-surface-2-dark rounded-md p-4 flex flex-col\"\n :style=\"{ minHeight: '500px', backgroundColor: bgColor }\"\n >\n <!-- <div v-for=\"item in path\" :key=\"item.name\">\n <span class=\"text-xs\">{{ item.name }}</span>\n </div> -->\n <!-- Header (fixed at top of card) -->\n <div class=\"mb-2\">\n <h1 class=\"font-bold text-3xl text-center\">{{ title }}</h1>\n <h2 class=\"font-semibold text-xl text-center\" v-if=\"currentOption\">{{ currentOption.name }}</h2>\n <div v-if=\"currentOption\" class=\"mt-2\">\n <EpBtn\n type=\"primary\"\n rounded\n size=\"small\"\n :extra-class=\"`${transitionAnimation}`\"\n @click=\"goToPrevious\"\n >\n <EpIcon :icon-path=\"mdiArrowLeft\" size=\"25\" />\n </EpBtn>\n </div>\n </div>\n\n <!-- Content Area -->\n <div>\n <!-- Introductory Part -->\n <div v-if=\"isIntroductoryPart\" class=\"w-full flex flex-col space-y-6\">\n <TextMedia\n :text=\"initialInstruction ?? ''\"\n :media=\"media\"\n :cols=\"initialTwoCols\"\n flex-col\n />\n <div :class=\"`justify-center flex ${styleIntro}`\">\n <EpBtn type=\"primary\" rounded @click=\"start\">{{\n labelStart\n }}</EpBtn>\n </div>\n </div>\n\n <!-- Slides -->\n <template v-else-if=\"currentOption && !isIntroductoryPart\">\n <div class=\"w-full\">\n <div :class=\"`${transitionAnimation} my-12`\">\n <TextMedia\n :text=\"currentOption.text ?? ''\"\n :media=\"currentOption.component\"\n :cols=\"currentOption.cols\"\n flex-col\n />\n\n <div\n :class=\"`w-full my-4 mx-4 flex flex-wrap gap-2 justify-center items-center`\"\n >\n <template\n v-for=\"(option, index) in currentOption.children\"\n :key=\"`option-${index}`\"\n >\n <EpBtn\n rounded\n type=\"primary\"\n class=\"flex-1 min-w-[120px] sm:min-w-[160px] max-w-xs\"\n @click=\"nextSlide(option)\"\n >\n {{ option.name }}\n </EpBtn>\n </template>\n <template v-if=\"isTheLastOne\">\n <EpBtn\n rounded\n type=\"primary\"\n class=\"flex-1 min-w-[120px] sm:min-w-[160px] max-w-xs\"\n @click=\"finish\"\n >\n {{labelBtnFinish}}\n </EpBtn>\n </template>\n </div>\n </div>\n </div>\n </template>\n\n <!--show path-->\n <div v-else>\n <!-- <template v-if=\"userPath\">\n <EpHierarchy :nodes=\"userPath\"/>\n </template> -->\n <h3 class=\"text-xl text-center font-semibold\">{{ labelFinish }}</h3>\n <div\n :class=\"`flex gap-6 mt-3 ${\n !generalFeedback ? 'w-3/6 mx-auto' : ''\n }`\"\n >\n <div class=\"w-full\">\n <h3 class=\"font-semibold mb-3\">{{ labelYourPath }}</h3>\n <div class=\"overflow-auto p-2\" :style=\"{ height: '200px' }\">\n <template v-for=\"(item, i) in path\" :key=\"`user-choice-${i}`\">\n <template v-if=\"i !== 0\">\n <div class=\"mb-2\">\n <Details\n :content=\"path[i-1].text ?? ''\"\n :title=\"item.name\"\n :media=\"path[i-1].component\"\n />\n </div>\n </template>\n </template>\n </div>\n <div class=\"flex justify-center mt-2\">\n <EpBtn type=\"info\" rounded @click=\"showPath = true\">{{\n labelShowFullPath\n }}</EpBtn>\n </div>\n <EpModal v-if=\"userPath\" v-model=\"showPath\">\n <EpHierarchy\n :max-width=\"2000\"\n :nodes=\"userPath\"\n :is-cluster=\"props.isCluster\"\n :color-path=\"props.colorPath\"\n :color-rect=\"props.colorRect\"\n />\n <div class=\"flex justify-end mt-4\">\n <EpBtn\n @click=\"showPath = false\"\n type=\"error\"\n outlined\n rounded\n >{{ labelClose }}</EpBtn\n >\n </div>\n </EpModal>\n </div>\n <div\n v-if=\"generalFeedback\"\n class=\"flex w-full flex-col col-span-1 items-center px-4 border-l-2 border-gray-700 overflow-auto\"\n >\n <div v-html=\"useRenderText(generalFeedback)\" />\n </div>\n </div>\n\n <div class=\"flex justify-center mt-2\">\n <EpBtn rounded type=\"warning\" @click=\"restart\">{{\n labelRestart\n }}</EpBtn>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n@keyframes fade {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n\n@keyframes scale {\n 0% {\n transform: scale(0.5);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n@keyframes slideY {\n 0% {\n transform: translateY(-100%);\n opacity: 0;\n }\n 100% {\n transform: translateY(0);\n opacity: 1;\n }\n}\n\n/* Transition animation */\n.fade {\n animation: fade 1s;\n}\n\n.scale {\n animation: scale 1s;\n}\n\n.slideY {\n animation: slideY 1s;\n}\n</style>\n"],"names":["path","_createElementBlock","_createElementVNode","bgColor","_toDisplayString","title","_openBlock","_createVNode","EpBtn","transitionAnimation","EpIcon","_unref","TextMedia","initialInstruction","media","initialTwoCols","labelStart","_Fragment","_createBlock","_createTextVNode","labelBtnFinish","labelFinish","_normalizeClass","generalFeedback","labelYourPath","_renderList","Details","_a","labelShowFullPath","EpModal","EpHierarchy","labelClose","labelRestart"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EpBranchingScenario.vue2.js","sources":["../../../src/components/educationals/EpBranchingScenario.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed, watchEffect } from \"vue\";\nimport { useRenderText } from \"~/composables/useRenderText\";\nimport type { TreeNode } from \"~/types/Hierarchy\";\nimport EpIcon from \"~/components/basics/EpIcon.vue\";\nimport Details from \"~/components/tools/Details.vue\";\nimport EpModal from \"~/components/interactions/EpModal.vue\";\nimport EpHierarchy from \"~/components/medias/EpHierarchy.vue\";\nimport EpBtn from \"../basics/EpBtn.vue\";\nimport { mdiArrowLeft } from \"@mdi/js\";\nimport TextMedia from \"~/components/tools/TextMedia.vue\";\nimport type { EpBranchingScenarioProps } from \"~/types/educationals/EpBranchingScenario\";\n\nconst props = withDefaults(defineProps<EpBranchingScenarioProps>(), {\n initialInstruction: null,\n transitionAnimation: \"fade\",\n labelFinish: \"Vous avez terminé le scénario!\",\n labelYourPath: \"Votre parcours\",\n labelShowFullPath: \"Voir le parcours au complet\",\n labelClose: \"Fermer\",\n labelRestart: \"Recommencer\",\n labelStart: \"Commencer\",\n labelBtnFinish: \"Fin du scénario\",\n colorRect: \"fill-main-color-400\",\n colorPath: \"stroke-yellow-400\",\n});\n\nconst showPath = ref(false);\nconst path = ref<TreeNode[]>([]);\nconst userPath = ref<TreeNode | null>(null);\nconst currentOption = ref<TreeNode | null>(null);\n\n// Manage the introductory part\nconst isIntroductoryPart = ref(true);\n\nconst start = () => {\n isIntroductoryPart.value = false;\n currentOption.value = props.decisionTree;\n path.value = [props.decisionTree];\n};\n\nconst styleIntro = computed(() => {\n const noInstruction = !props.initialInstruction;\n const noMedia = !props.media;\n\n if (noInstruction && noMedia) {\n return \"pt-44\";\n }\n\n return \"\";\n});\n\n// Return function\nconst goToPrevious = () => {\n //if(notTheEnd.value){\n if (path.value.length === 1) {\n isIntroductoryPart.value = true;\n currentOption.value = null;\n return;\n }\n\n path.value.pop();\n // Get the previous option in the path\n const lastOption = path.value[path.value.length - 1];\n\n if (lastOption) {\n currentOption.value = lastOption;\n isTheLastOne.value = false\n } else {\n currentOption.value = props.decisionTree;\n }\n};\n\n// Restart function\nconst restart = () => {\n //currentSlide.value = 0;\n currentOption.value = null;\n isIntroductoryPart.value = true;\n path.value = [];\n isTheLastOne.value = false\n};\n\nconst isTheLastOne = ref(false)\n\nconst nextSlide = (option: TreeNode) => {\n //currentSlide.value++\n path.value.push(option);\n //console.log(option)\n if (option.children && option.children.length > 0 && !isTheLastOne.value) {\n currentOption.value = option; // drill into next level\n } else {\n //currentOption.value = null; // reached the end (leaf node)\n isTheLastOne.value = true\n currentOption.value = option\n }\n \n};\n\nconst finish = () => {\n currentOption.value = null\n userPath.value = convertOptionToTreeNode(props.decisionTree, path.value); \n}\n\n//helper function\nfunction convertOptionToTreeNode(option: TreeNode, path: TreeNode[]): TreeNode {\n const isActive = path.includes(option);\n return {\n name: option.name,\n label: option.label ?? \"\",\n text: option.text,\n component: option.component,\n active: isActive,\n children: option.children?.map((child) =>\n convertOptionToTreeNode(child, path)\n ),\n };\n}\n\n</script>\n\n<template>\n <div>\n <div\n class=\"bg-surface-2 dark:bg-surface-2-dark rounded-md p-4 flex flex-col\"\n :style=\"{ minHeight: '500px', backgroundColor: bgColor }\"\n >\n <!-- <div v-for=\"item in path\" :key=\"item.name\">\n <span class=\"text-xs\">{{ item.name }}</span>\n </div> -->\n <!-- Header (fixed at top of card) -->\n <div class=\"mb-2\">\n <h1 class=\"font-bold text-3xl text-center\">{{ title }}</h1>\n <h2 class=\"font-semibold text-xl text-center\" v-if=\"currentOption\">{{ currentOption.name }}</h2>\n <div v-if=\"currentOption\" class=\"mt-2\">\n <EpBtn\n type=\"primary\"\n rounded\n size=\"small\"\n :extra-class=\"`${transitionAnimation}`\"\n @click=\"goToPrevious\"\n >\n <EpIcon :icon-path=\"mdiArrowLeft\" size=\"25\" />\n </EpBtn>\n </div>\n </div>\n\n <!-- Content Area -->\n <div>\n <!-- Introductory Part -->\n <div v-if=\"isIntroductoryPart\" class=\"w-full flex flex-col space-y-6\">\n <TextMedia\n :text=\"initialInstruction ?? ''\"\n :media=\"media\"\n :cols=\"initialTwoCols\"\n flex-col\n />\n <div :class=\"`justify-center flex ${styleIntro}`\">\n <EpBtn type=\"primary\" rounded @click=\"start\">{{\n labelStart\n }}</EpBtn>\n </div>\n </div>\n\n <!-- Slides -->\n <template v-else-if=\"currentOption && !isIntroductoryPart\">\n <div class=\"w-full\">\n <div :class=\"`${transitionAnimation} my-12`\">\n <TextMedia\n :text=\"currentOption.text ?? ''\"\n :media=\"currentOption.component\"\n :cols=\"currentOption.cols\"\n flex-col\n />\n\n <div\n :class=\"`w-full my-4 mx-4 flex flex-wrap gap-2 justify-center items-center`\"\n >\n <template\n v-for=\"(option, index) in currentOption.children\"\n :key=\"`option-${index}`\"\n >\n <EpBtn\n rounded\n type=\"primary\"\n class=\"flex-1 min-w-[120px] sm:min-w-[160px] max-w-xs\"\n @click=\"nextSlide(option)\"\n >\n {{ option.name }}\n </EpBtn>\n </template>\n <template v-if=\"isTheLastOne\">\n <EpBtn\n rounded\n type=\"primary\"\n class=\"flex-1 min-w-[120px] sm:min-w-[160px] max-w-xs\"\n @click=\"finish\"\n >\n {{labelBtnFinish}}\n </EpBtn>\n </template>\n </div>\n </div>\n </div>\n </template>\n\n <!--show path-->\n <div v-else>\n <!-- <template v-if=\"userPath\">\n <EpHierarchy :nodes=\"userPath\"/>\n </template> -->\n <h3 class=\"text-xl text-center font-semibold\">{{ labelFinish }}</h3>\n <div\n :class=\"`flex gap-6 mt-3 ${\n !generalFeedback ? 'w-3/6 mx-auto' : ''\n }`\"\n >\n <div class=\"w-full\">\n <h3 class=\"font-semibold mb-3\">{{ labelYourPath }}</h3>\n <div class=\"overflow-auto p-2\" :style=\"{ height: '200px' }\">\n <template v-for=\"(item, i) in path\" :key=\"`user-choice-${i}`\">\n <template v-if=\"i !== 0\">\n <div class=\"mb-2\">\n <Details\n :content=\"path[i-1].text ?? ''\"\n :title=\"item.name\"\n :media=\"path[i-1].component\"\n />\n </div>\n </template>\n </template>\n </div>\n <div class=\"flex justify-center mt-2\">\n <EpBtn type=\"info\" rounded @click=\"showPath = true\">{{\n labelShowFullPath\n }}</EpBtn>\n </div>\n <EpModal v-if=\"userPath\" v-model=\"showPath\">\n <EpHierarchy\n :max-width=\"2000\"\n :nodes=\"userPath\"\n :is-cluster=\"props.isCluster\"\n :color-path=\"props.colorPath\"\n :color-rect=\"props.colorRect\"\n />\n <div class=\"flex justify-end mt-4\">\n <EpBtn\n @click=\"showPath = false\"\n type=\"error\"\n outlined\n rounded\n >{{ labelClose }}</EpBtn\n >\n </div>\n </EpModal>\n </div>\n <div\n v-if=\"generalFeedback\"\n class=\"flex w-full flex-col col-span-1 items-center px-4 border-l-2 border-gray-700 overflow-auto\"\n >\n <div v-html=\"useRenderText(generalFeedback)\" />\n </div>\n </div>\n\n <div class=\"flex justify-center mt-2\">\n <EpBtn rounded type=\"warning\" @click=\"restart\">{{\n labelRestart\n }}</EpBtn>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n@keyframes fade {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n\n@keyframes scale {\n 0% {\n transform: scale(0.5);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n@keyframes slideY {\n 0% {\n transform: translateY(-100%);\n opacity: 0;\n }\n 100% {\n transform: translateY(0);\n opacity: 1;\n }\n}\n\n/* Transition animation */\n.fade {\n animation: fade 1s;\n}\n\n.scale {\n animation: scale 1s;\n}\n\n.slideY {\n animation: slideY 1s;\n}\n</style>\n"],"names":["path","_createElementBlock","_createElementVNode","_toDisplayString","_openBlock","_createVNode","EpBtn","EpIcon","_unref","TextMedia","_Fragment","_createBlock","_createTextVNode","_normalizeClass","_renderList","Details","_a","EpModal","EpHierarchy"],"mappings":"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"}
|
|
@@ -33,7 +33,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
33
33
|
return props.theme;
|
|
34
34
|
});
|
|
35
35
|
return (_ctx, _cache) => {
|
|
36
|
-
return !
|
|
36
|
+
return !__props.compact ? (openBlock(), createBlock(unref(VCodeBlock), {
|
|
37
37
|
key: 0,
|
|
38
38
|
code: code.value,
|
|
39
39
|
highlightjs: "",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EpCodeblock.vue.js","sources":["../../../src/components/educationals/EpCodeblock.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport VCodeBlock from \"@wdns/vue-code-block\";\nimport { defaultOption } from \"~/types/Codeblock\";\nimport EpAccordeon from \"~/components/interactions/EpAccordeon.vue\";\nimport { computed } from \"vue\";\nimport { ref } from \"vue\";\nimport type { EpCodeblockProps } from \"~/types/educationals/EpCodeblock\";\n\nconst props = withDefaults(defineProps<EpCodeblockProps>(), {\n code: \"\",\n label: \"\",\n lang: \"javascript\",\n theme: defaultOption,\n compact: false,\n});\n\nconst renderTitle = computed(() => {\n if (!props.title) {\n return \"En savoir plus\";\n }\n return props.title;\n});\n\nconst code = computed(() => {\n return ref(props.code);\n});\nconst label = computed(() => {\n return props.label;\n});\nconst lang = computed(() => {\n return props.lang;\n});\nconst theme = computed(() => {\n return props.theme;\n});\n</script>\n\n<template>\n <VCodeBlock\n :code=\"code\"\n highlightjs\n :label=\"label\"\n :lang=\"lang\"\n :theme=\"theme\"\n v-if=\"!compact\"\n />\n\n <EpAccordeon outlined :title=\"renderTitle\" v-else>\n <VCodeBlock\n :code=\"code\"\n highlightjs\n :label=\"label\"\n :lang=\"lang\"\n :theme=\"theme\"\n />\n </EpAccordeon>\n</template>\n<style>\npre {\n white-space: break-spaces;\n}\n</style>\n"],"names":["
|
|
1
|
+
{"version":3,"file":"EpCodeblock.vue.js","sources":["../../../src/components/educationals/EpCodeblock.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport VCodeBlock from \"@wdns/vue-code-block\";\nimport { defaultOption } from \"~/types/Codeblock\";\nimport EpAccordeon from \"~/components/interactions/EpAccordeon.vue\";\nimport { computed } from \"vue\";\nimport { ref } from \"vue\";\nimport type { EpCodeblockProps } from \"~/types/educationals/EpCodeblock\";\n\nconst props = withDefaults(defineProps<EpCodeblockProps>(), {\n code: \"\",\n label: \"\",\n lang: \"javascript\",\n theme: defaultOption,\n compact: false,\n});\n\nconst renderTitle = computed(() => {\n if (!props.title) {\n return \"En savoir plus\";\n }\n return props.title;\n});\n\nconst code = computed(() => {\n return ref(props.code);\n});\nconst label = computed(() => {\n return props.label;\n});\nconst lang = computed(() => {\n return props.lang;\n});\nconst theme = computed(() => {\n return props.theme;\n});\n</script>\n\n<template>\n <VCodeBlock\n :code=\"code\"\n highlightjs\n :label=\"label\"\n :lang=\"lang\"\n :theme=\"theme\"\n v-if=\"!compact\"\n />\n\n <EpAccordeon outlined :title=\"renderTitle\" v-else>\n <VCodeBlock\n :code=\"code\"\n highlightjs\n :label=\"label\"\n :lang=\"lang\"\n :theme=\"theme\"\n />\n </EpAccordeon>\n</template>\n<style>\npre {\n white-space: break-spaces;\n}\n</style>\n"],"names":["_createBlock","_unref","EpAccordeon","_createVNode"],"mappings":";;;;;;;;;;;;;;;AAQA,UAAM,QAAQ;AAQd,UAAM,cAAc,SAAS,MAAM;AACjC,UAAI,CAAC,MAAM,OAAO;AAChB,eAAO;AAAA,MACT;AACA,aAAO,MAAM;AAAA,IACf,CAAC;AAED,UAAM,OAAO,SAAS,MAAM;AAC1B,aAAO,IAAI,MAAM,IAAI;AAAA,IACvB,CAAC;AACD,UAAM,QAAQ,SAAS,MAAM;AAC3B,aAAO,MAAM;AAAA,IACf,CAAC;AACD,UAAM,OAAO,SAAS,MAAM;AAC1B,aAAO,MAAM;AAAA,IACf,CAAC;AACD,UAAM,QAAQ,SAAS,MAAM;AAC3B,aAAO,MAAM;AAAA,IACf,CAAC;;cAUU,QAAA,wBANTA,YAOEC,MAAA,UAAA,GAAA;AAAA;QANC,MAAM,KAAA;AAAA,QACP,aAAA;AAAA,QACC,OAAO,MAAA;AAAA,QACP,MAAM,KAAA;AAAA,QACN,OAAO,MAAA;AAAA,MAAA,iEAIVD,YAQcE,MAAA;AAAA;QARD,UAAA;AAAA,QAAU,OAAO,YAAA;AAAA,MAAA;yBAC5B,MAME;AAAA,UANFC,YAMEF,MAAA,UAAA,GAAA;AAAA,YALC,MAAM,KAAA;AAAA,YACP,aAAA;AAAA,YACC,OAAO,MAAA;AAAA,YACP,MAAM,KAAA;AAAA,YACN,OAAO,MAAA;AAAA,UAAA;;;;;;;"}
|
|
@@ -3,7 +3,7 @@ import _sfc_main$4 from "../basics/EpIcon.vue.js";
|
|
|
3
3
|
import _sfc_main$2 from "../interactions/EpModal.vue.js";
|
|
4
4
|
/* empty css */
|
|
5
5
|
import _sfc_main$1 from "../basics/EpBtn.vue.js";
|
|
6
|
-
import _sfc_main$3 from "../tools/RenderTextNode.
|
|
6
|
+
import _sfc_main$3 from "../tools/RenderTextNode.vue.js";
|
|
7
7
|
const _hoisted_1 = { class: "lg:col-span-8 lg:mt-0 lg:border-l dark:border-gray-700 lg:pl-4" };
|
|
8
8
|
const _hoisted_2 = { class: "py-2" };
|
|
9
9
|
const _hoisted_3 = {
|
|
@@ -63,7 +63,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
63
63
|
createElementVNode("div", _hoisted_2, [
|
|
64
64
|
unref(subtitle) ? (openBlock(), createElementBlock("h3", _hoisted_3, toDisplayString(unref(subtitle)), 1)) : createCommentVNode("", true),
|
|
65
65
|
createElementVNode("div", null, [
|
|
66
|
-
createVNode(_sfc_main$3, { content:
|
|
66
|
+
createVNode(_sfc_main$3, { content: __props.content }, null, 8, ["content"])
|
|
67
67
|
])
|
|
68
68
|
])
|
|
69
69
|
])
|
|
@@ -85,7 +85,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
85
85
|
createElementVNode("div", _hoisted_8, [
|
|
86
86
|
unref(subtitle) ? (openBlock(), createElementBlock("h3", _hoisted_9, toDisplayString(unref(subtitle)), 1)) : createCommentVNode("", true),
|
|
87
87
|
createElementVNode("div", null, [
|
|
88
|
-
createVNode(_sfc_main$3, { content:
|
|
88
|
+
createVNode(_sfc_main$3, { content: __props.content }, null, 8, ["content"])
|
|
89
89
|
])
|
|
90
90
|
])
|
|
91
91
|
])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EpConclusion.vue.js","sources":["../../../src/components/educationals/EpConclusion.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { toRefs } from \"vue\";\nimport { ref } from \"vue\";\nimport EpIcon from \"~/components/basics/EpIcon.vue\";\nimport EpModal from \"~/components/interactions/EpModal.vue\";\nimport EpBtn from \"~/components/basics/EpBtn.vue\";\nimport type { EpConclusionProps } from \"~/types/educationals/EpConclusion\";\nimport RenderTextNode from \"~/components/tools/RenderTextNode.vue\";\nconst props = withDefaults(defineProps<EpConclusionProps>(), {\n modal: true,\n title: \"Conclusion\",\n btnType: \"base\",\n btnRounded: true,\n btnOutlined: true,\n});\nconst { title, icon, subtitle, modal, btnType, btnRounded, btnOutlined } = toRefs(props);\n\nconst showDefaultModal = ref(false);\n\n\n</script>\n<template>\n <div>\n <EpBtn\n v-if=\"modal\"\n :btnType=\"btnType\"\n :rounded=\"btnRounded\"\n :outlined=\"btnOutlined\"\n @click=\"showDefaultModal = true\"\n >\n {{ title }}\n </EpBtn>\n <EpModal v-if=\"modal\" v-model=\"showDefaultModal\" :title=\"title\">\n <div\n class=\"lg:col-span-8 lg:mt-0 lg:border-l dark:border-gray-700 lg:pl-4\"\n >\n <div class=\"py-2\">\n <h3\n v-if=\"subtitle\"\n class=\"text-base font-semibold leading-7 \"\n >\n {{ subtitle }}\n </h3>\n <div>\n <RenderTextNode :content=\"content\" />\n </div>\n </div>\n </div>\n </EpModal>\n <div v-else class=\"mt-6 lg:col-span-5 lg:mt-0 lg:flex lg:items-center w-full\">\n <div class=\"lg:col-span-2\">\n <h2\n class=\"text-pretty text-3xl font-semibold tracking-tight sm:text-xl pr-4\"\n >\n <EpIcon v-if=\"icon\" :icon-path=\"icon\" size=\"28\" extraClass=\"mr-2\" />\n {{ title }}\n </h2>\n </div>\n <div\n class=\"lg:col-span-8 lg:mt-0 lg:border-l dark:border-gray-700 lg:pl-4\"\n >\n <div class=\"py-2\">\n <h3\n v-if=\"subtitle\"\n class=\"text-base font-semibold leading-7\"\n >\n {{ subtitle }}\n </h3>\n <div>\n <RenderTextNode :content=\"content\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n"],"names":["_createElementBlock","_unref","_createBlock","EpBtn","EpModal","_createElementVNode","_toDisplayString","_createVNode","RenderTextNode","
|
|
1
|
+
{"version":3,"file":"EpConclusion.vue.js","sources":["../../../src/components/educationals/EpConclusion.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { toRefs } from \"vue\";\nimport { ref } from \"vue\";\nimport EpIcon from \"~/components/basics/EpIcon.vue\";\nimport EpModal from \"~/components/interactions/EpModal.vue\";\nimport EpBtn from \"~/components/basics/EpBtn.vue\";\nimport type { EpConclusionProps } from \"~/types/educationals/EpConclusion\";\nimport RenderTextNode from \"~/components/tools/RenderTextNode.vue\";\nconst props = withDefaults(defineProps<EpConclusionProps>(), {\n modal: true,\n title: \"Conclusion\",\n btnType: \"base\",\n btnRounded: true,\n btnOutlined: true,\n});\nconst { title, icon, subtitle, modal, btnType, btnRounded, btnOutlined } = toRefs(props);\n\nconst showDefaultModal = ref(false);\n\n\n</script>\n<template>\n <div>\n <EpBtn\n v-if=\"modal\"\n :btnType=\"btnType\"\n :rounded=\"btnRounded\"\n :outlined=\"btnOutlined\"\n @click=\"showDefaultModal = true\"\n >\n {{ title }}\n </EpBtn>\n <EpModal v-if=\"modal\" v-model=\"showDefaultModal\" :title=\"title\">\n <div\n class=\"lg:col-span-8 lg:mt-0 lg:border-l dark:border-gray-700 lg:pl-4\"\n >\n <div class=\"py-2\">\n <h3\n v-if=\"subtitle\"\n class=\"text-base font-semibold leading-7 \"\n >\n {{ subtitle }}\n </h3>\n <div>\n <RenderTextNode :content=\"content\" />\n </div>\n </div>\n </div>\n </EpModal>\n <div v-else class=\"mt-6 lg:col-span-5 lg:mt-0 lg:flex lg:items-center w-full\">\n <div class=\"lg:col-span-2\">\n <h2\n class=\"text-pretty text-3xl font-semibold tracking-tight sm:text-xl pr-4\"\n >\n <EpIcon v-if=\"icon\" :icon-path=\"icon\" size=\"28\" extraClass=\"mr-2\" />\n {{ title }}\n </h2>\n </div>\n <div\n class=\"lg:col-span-8 lg:mt-0 lg:border-l dark:border-gray-700 lg:pl-4\"\n >\n <div class=\"py-2\">\n <h3\n v-if=\"subtitle\"\n class=\"text-base font-semibold leading-7\"\n >\n {{ subtitle }}\n </h3>\n <div>\n <RenderTextNode :content=\"content\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n"],"names":["_createElementBlock","_unref","_createBlock","EpBtn","EpModal","_createElementVNode","_toDisplayString","_createVNode","RenderTextNode","_openBlock","EpIcon","_createTextVNode"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,UAAM,QAAQ;AAOd,UAAM,EAAE,OAAO,MAAM,UAAU,OAAO,SAAS,YAAY,YAAA,IAAgB,OAAO,KAAK;AAEvF,UAAM,mBAAmB,IAAI,KAAK;;0BAKhCA,mBAoDM,OAAA,MAAA;AAAA,QAlDIC,MAAA,KAAA,kBADRC,YAQQC,aAAA;AAAA;UANL,SAASF,MAAA,OAAA;AAAA,UACT,SAASA,MAAA,UAAA;AAAA,UACT,UAAUA,MAAA,WAAA;AAAA,UACV,+CAAO,iBAAA,QAAgB;AAAA,QAAA;2BAExB,MAAW;AAAA,4CAARA,MAAA,KAAA,CAAK,GAAA,CAAA;AAAA,UAAA;;;QAEKA,MAAA,KAAA,kBAAfC,YAgBUE,aAAA;AAAA;sBAhBqB,iBAAA;AAAA,uEAAA,iBAAgB,QAAA;AAAA,UAAG,OAAOH,MAAA,KAAA;AAAA,QAAA;2BACvD,MAcM;AAAA,YAdNI,mBAcM,OAdN,YAcM;AAAA,cAXJA,mBAUM,OAVN,YAUM;AAAA,gBARIJ,MAAA,QAAA,kBADRD,mBAKK,MALL,YAKKM,gBADAL,MAAA,QAAA,CAAQ,GAAA,CAAA;gBAEbI,mBAEM,OAAA,MAAA;AAAA,kBADHE,YAAqCC,aAAA,EAApB,SAAS,QAAA,QAAA,GAAO,MAAA,GAAA,CAAA,SAAA,CAAA;AAAA,gBAAA;;;;;2CAK1CC,aAAAT,mBAwBM,OAxBN,YAwBM;AAAA,UAvBJK,mBAOM,OAPN,YAOM;AAAA,YANJA,mBAKK,MALL,YAKK;AAAA,cAFWJ,MAAA,IAAA,kBAAdC,YAAoEQ,aAAA;AAAA;gBAA/C,aAAWT,MAAA,IAAA;AAAA,gBAAM,MAAK;AAAA,gBAAK,YAAW;AAAA,cAAA;cAASU,gBAAA,sBACjEV,MAAA,KAAA,CAAK,GAAA,CAAA;AAAA,YAAA;;UAGZI,mBAcM,OAdN,YAcM;AAAA,YAXJA,mBAUM,OAVN,YAUM;AAAA,cARIJ,MAAA,QAAA,kBADRD,mBAKK,MALL,YAKKM,gBADAL,MAAA,QAAA,CAAQ,GAAA,CAAA;cAEbI,mBAEM,OAAA,MAAA;AAAA,gBADHE,YAAqCC,aAAA,EAApB,SAAS,QAAA,QAAA,GAAO,MAAA,GAAA,CAAA,SAAA,CAAA;AAAA,cAAA;;;;;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent, toRefs, createElementBlock, openBlock, createElementVNode, createBlock, createCommentVNode, createTextVNode, unref, toDisplayString, createVNode } from "vue";
|
|
2
2
|
import _sfc_main$1 from "../basics/EpIcon.vue.js";
|
|
3
|
-
import _sfc_main$2 from "../tools/RenderTextNode.
|
|
3
|
+
import _sfc_main$2 from "../tools/RenderTextNode.vue.js";
|
|
4
4
|
const _hoisted_1 = { class: "lg:grid lg:grid-cols-12 lg:gap-8" };
|
|
5
5
|
const _hoisted_2 = { class: "lg:col-span-2" };
|
|
6
6
|
const _hoisted_3 = { class: "text-pretty text-3xl font-semibold tracking-tight sm:text-xl" };
|
|
@@ -91,14 +91,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
91
91
|
createElementVNode("div", {
|
|
92
92
|
class: normalizeClass(`py-6 flex-1 ${unref(hideIcon) ? "px-6" : "pr-2"}`)
|
|
93
93
|
}, [
|
|
94
|
-
|
|
95
|
-
|
|
94
|
+
__props.title ? (openBlock(), createElementBlock("h4", _hoisted_7, toDisplayString(__props.title), 1)) : createCommentVNode("", true),
|
|
95
|
+
__props.description ? (openBlock(), createElementBlock("div", {
|
|
96
96
|
key: 1,
|
|
97
97
|
class: "mb-3",
|
|
98
|
-
innerHTML: unref(useRenderText)(
|
|
98
|
+
innerHTML: unref(useRenderText)(__props.description)
|
|
99
99
|
}, null, 8, _hoisted_8)) : createCommentVNode("", true),
|
|
100
100
|
createVNode(_sfc_main$3, {
|
|
101
|
-
href:
|
|
101
|
+
href: __props.url,
|
|
102
102
|
block: "",
|
|
103
103
|
type: "primary",
|
|
104
104
|
rounded: "",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EpDocument.vue.js","sources":["../../../src/components/educationals/EpDocument.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { toRefs, computed } from \"vue\";\nimport EpCard from \"~/components/basics/EpCard.vue\";\nimport EpIcon from \"~/components/basics/EpIcon.vue\";\nimport { mdiFile } from \"@mdi/js\";\nimport { mdiArrowCollapseDown } from \"@mdi/js\";\nimport { mdiOpenInNew } from \"@mdi/js\";\nimport EpBtn from \"~/components/basics/EpBtn.vue\";\nimport { useRenderText } from \"~/composables/useRenderText\";\nimport type { EpDocumentProps } from \"~/types/educationals/EpDocument\";\n\nconst props = withDefaults(defineProps<EpDocumentProps>(), {\n src: null,\n hideIcon: false,\n labelDownload: \"Télécharger\",\n labelOpen: \"Ouvrir\",\n});\n\nconst fileDownloadExtensions = [\n \"doc\",\n \"docx\",\n \"xls\",\n \"xlsx\",\n \"ppt\",\n \"pptx\",\n \"rtf\",\n \"odt\",\n \"ods\",\n \"odp\",\n];\n\nconst getExtension = (url: string): string => {\n const queryRemoved = url.split(\"?\")[0];\n const parts = queryRemoved.split(\".\");\n return parts.length > 1 ? parts.pop()!.toLowerCase() : \"\";\n};\n\nconst shouldDownload = computed(() => {\n const ext = getExtension(props.url);\n return fileDownloadExtensions.includes(ext);\n});\n\nconst iconBtn = computed(() => {\n return shouldDownload.value ? mdiArrowCollapseDown : mdiOpenInNew;\n});\n\nconst label = computed(() => {\n return shouldDownload.value ? props.labelDownload : props.labelOpen;\n});\n\nconst renderIcon = computed(() => {\n return props.icon ? props.icon : mdiFile;\n});\n\nconst { src, hideIcon } = toRefs(props);\n</script>\n\n<template>\n <div class=\"w-5/6 mx-auto\">\n <EpCard>\n <div :class=\"`md:flex md:flex-wrap rounded-md`\">\n <div class=\"w-1/5 mr-6\" v-if=\"src\">\n <img\n :class=\"`md:w-full md:h-full md:object-cover rounded-md`\"\n :src=\"src\"\n alt=\"Image of quote\"\n />\n </div>\n <div\n class=\"flex items-center justify-center px-7\"\n v-else-if=\"!hideIcon\"\n >\n <div class=\"text-base dark:text-white'\">\n <EpIcon\n :size=\"60\"\n :icon-path=\"renderIcon\"\n extra-class=\"dark:text-white\"\n />\n </div>\n </div>\n <div :class=\"`py-6 flex-1 ${hideIcon ? 'px-6' : 'pr-2'}`\">\n <h4 class=\"text-2xl font-semibold mb-4\" v-if=\"title\">{{ title }}</h4>\n <div\n class=\"mb-3\"\n v-if=\"description\"\n v-html=\"useRenderText(description)\"\n />\n <EpBtn\n :href=\"url\"\n block\n type=\"primary\"\n rounded\n :prepend-icon=\"iconBtn\"\n >\n {{ label }}\n </EpBtn>\n </div>\n </div>\n </EpCard>\n </div>\n</template>\n"],"names":["_openBlock","_createElementBlock","_createVNode","EpCard","_createElementVNode","_unref","EpIcon","
|
|
1
|
+
{"version":3,"file":"EpDocument.vue.js","sources":["../../../src/components/educationals/EpDocument.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { toRefs, computed } from \"vue\";\nimport EpCard from \"~/components/basics/EpCard.vue\";\nimport EpIcon from \"~/components/basics/EpIcon.vue\";\nimport { mdiFile } from \"@mdi/js\";\nimport { mdiArrowCollapseDown } from \"@mdi/js\";\nimport { mdiOpenInNew } from \"@mdi/js\";\nimport EpBtn from \"~/components/basics/EpBtn.vue\";\nimport { useRenderText } from \"~/composables/useRenderText\";\nimport type { EpDocumentProps } from \"~/types/educationals/EpDocument\";\n\nconst props = withDefaults(defineProps<EpDocumentProps>(), {\n src: null,\n hideIcon: false,\n labelDownload: \"Télécharger\",\n labelOpen: \"Ouvrir\",\n});\n\nconst fileDownloadExtensions = [\n \"doc\",\n \"docx\",\n \"xls\",\n \"xlsx\",\n \"ppt\",\n \"pptx\",\n \"rtf\",\n \"odt\",\n \"ods\",\n \"odp\",\n];\n\nconst getExtension = (url: string): string => {\n const queryRemoved = url.split(\"?\")[0];\n const parts = queryRemoved.split(\".\");\n return parts.length > 1 ? parts.pop()!.toLowerCase() : \"\";\n};\n\nconst shouldDownload = computed(() => {\n const ext = getExtension(props.url);\n return fileDownloadExtensions.includes(ext);\n});\n\nconst iconBtn = computed(() => {\n return shouldDownload.value ? mdiArrowCollapseDown : mdiOpenInNew;\n});\n\nconst label = computed(() => {\n return shouldDownload.value ? props.labelDownload : props.labelOpen;\n});\n\nconst renderIcon = computed(() => {\n return props.icon ? props.icon : mdiFile;\n});\n\nconst { src, hideIcon } = toRefs(props);\n</script>\n\n<template>\n <div class=\"w-5/6 mx-auto\">\n <EpCard>\n <div :class=\"`md:flex md:flex-wrap rounded-md`\">\n <div class=\"w-1/5 mr-6\" v-if=\"src\">\n <img\n :class=\"`md:w-full md:h-full md:object-cover rounded-md`\"\n :src=\"src\"\n alt=\"Image of quote\"\n />\n </div>\n <div\n class=\"flex items-center justify-center px-7\"\n v-else-if=\"!hideIcon\"\n >\n <div class=\"text-base dark:text-white'\">\n <EpIcon\n :size=\"60\"\n :icon-path=\"renderIcon\"\n extra-class=\"dark:text-white\"\n />\n </div>\n </div>\n <div :class=\"`py-6 flex-1 ${hideIcon ? 'px-6' : 'pr-2'}`\">\n <h4 class=\"text-2xl font-semibold mb-4\" v-if=\"title\">{{ title }}</h4>\n <div\n class=\"mb-3\"\n v-if=\"description\"\n v-html=\"useRenderText(description)\"\n />\n <EpBtn\n :href=\"url\"\n block\n type=\"primary\"\n rounded\n :prepend-icon=\"iconBtn\"\n >\n {{ label }}\n </EpBtn>\n </div>\n </div>\n </EpCard>\n </div>\n</template>\n"],"names":["_openBlock","_createElementBlock","_createVNode","EpCard","_createElementVNode","_unref","EpIcon","_toDisplayString","EpBtn"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,UAAM,QAAQ;AAOd,UAAM,yBAAyB;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAGF,UAAM,eAAe,CAAC,QAAwB;AAC5C,YAAM,eAAe,IAAI,MAAM,GAAG,EAAE,CAAC;AACrC,YAAM,QAAQ,aAAa,MAAM,GAAG;AACpC,aAAO,MAAM,SAAS,IAAI,MAAM,IAAA,EAAO,gBAAgB;AAAA,IACzD;AAEA,UAAM,iBAAiB,SAAS,MAAM;AACpC,YAAM,MAAM,aAAa,MAAM,GAAG;AAClC,aAAO,uBAAuB,SAAS,GAAG;AAAA,IAC5C,CAAC;AAED,UAAM,UAAU,SAAS,MAAM;AAC7B,aAAO,eAAe,QAAQ,uBAAuB;AAAA,IACvD,CAAC;AAED,UAAM,QAAQ,SAAS,MAAM;AAC3B,aAAO,eAAe,QAAQ,MAAM,gBAAgB,MAAM;AAAA,IAC5D,CAAC;AAED,UAAM,aAAa,SAAS,MAAM;AAChC,aAAO,MAAM,OAAO,MAAM,OAAO;AAAA,IACnC,CAAC;AAED,UAAM,EAAE,KAAK,aAAa,OAAO,KAAK;;AAIpC,aAAAA,UAAA,GAAAC,mBAyCM,OAzCN,YAyCM;AAAA,QAxCJC,YAuCSC,aAAA,MAAA;AAAA,2BAtCP,MAqCM;AAAA,YArCNC,mBAqCM,OArCN,YAqCM;AAAA,cApC0BC,MAAA,GAAA,KAA9BL,aAAAC,mBAMM,OANN,YAMM;AAAA,gBALJG,mBAIE,OAAA;AAAA,kBAHC,sBAAO,gDAAgD;AAAA,kBACvD,KAAKC,MAAA,GAAA;AAAA,kBACN,KAAI;AAAA,gBAAA;qBAKMA,MAAA,QAAA,KAFdL,UAAA,GAAAC,mBAWM,OAXN,YAWM;AAAA,gBAPJG,mBAMM,OANN,YAMM;AAAA,kBALJF,YAIEI,aAAA;AAAA,oBAHC,MAAM;AAAA,oBACN,aAAW,WAAA;AAAA,oBACZ,eAAY;AAAA,kBAAA;;;cAIlBF,mBAgBM,OAAA;AAAA,gBAhBA,qCAAsBC,MAAA,QAAA,IAAQ,SAAA,MAAA,EAAA;AAAA,cAAA;gBACY,QAAA,sBAA9CJ,mBAAqE,MAArE,YAAqEM,gBAAb,QAAA,KAAK,GAAA,CAAA;gBAGrD,QAAA,4BAFRN,mBAIE,OAAA;AAAA;kBAHA,OAAM;AAAA,kBAEN,WAAQI,MAAA,aAAA,EAAc,QAAA,WAAW;AAAA,gBAAA;gBAEnCH,YAQQM,aAAA;AAAA,kBAPL,MAAM,QAAA;AAAA,kBACP,OAAA;AAAA,kBACA,MAAK;AAAA,kBACL,SAAA;AAAA,kBACC,gBAAc,QAAA;AAAA,gBAAA;mCAEf,MAAW;AAAA,oDAAR,MAAA,KAAK,GAAA,CAAA;AAAA,kBAAA;;;;;;;;;;;;"}
|
|
@@ -78,7 +78,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
78
78
|
return openBlock(), createElementBlock("div", {
|
|
79
79
|
class: normalizeClass(`${containerStyle.value} ${bgColor.value}`)
|
|
80
80
|
}, [
|
|
81
|
-
unref(title) ||
|
|
81
|
+
unref(title) || __props.mandateLevel ? (openBlock(), createElementBlock("div", {
|
|
82
82
|
key: 0,
|
|
83
83
|
class: normalizeClass(`${topBarStyle.value} ${paddingTopStyle.value}`)
|
|
84
84
|
}, [
|
|
@@ -91,16 +91,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
91
91
|
}, null, 8, ["iconPath"])) : createCommentVNode("", true),
|
|
92
92
|
createElementVNode("span", _hoisted_1, toDisplayString(unref(title)), 1)
|
|
93
93
|
]),
|
|
94
|
-
|
|
94
|
+
__props.mandateLevel ? (openBlock(), createBlock(_sfc_main$2, {
|
|
95
95
|
key: 0,
|
|
96
|
-
mandateLevel:
|
|
96
|
+
mandateLevel: __props.mandateLevel
|
|
97
97
|
}, null, 8, ["mandateLevel"])) : createCommentVNode("", true)
|
|
98
98
|
], 2)) : createCommentVNode("", true),
|
|
99
99
|
createElementVNode("div", {
|
|
100
100
|
class: normalizeClass(`${boxPaddingStyle.value} `)
|
|
101
101
|
}, [
|
|
102
102
|
hasIntentions.value ? (openBlock(), createElementBlock("div", _hoisted_2, [
|
|
103
|
-
|
|
103
|
+
__props.labelIntentions ? (openBlock(), createElementBlock("h4", _hoisted_3, toDisplayString(__props.labelIntentions), 1)) : createCommentVNode("", true),
|
|
104
104
|
renderSlot(_ctx.$slots, "intentions"),
|
|
105
105
|
createVNode(_sfc_main$3)
|
|
106
106
|
])) : createCommentVNode("", true),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EpEdu.vue.js","sources":["../../../src/components/educationals/EpEdu.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { toRefs, computed, useSlots, type SetupContext } from \"vue\";\nimport { mediaVariants } from \"~/types/Medias\";\nimport EpIcon from \"~/components/basics/EpIcon.vue\";\nimport EpDivider from \"~/components/basics/EpDivider.vue\";\nimport EpScope from \"~/components/educationals/EpScope.vue\";\nimport { mdiLeadPencil } from \"@mdi/js\";\nimport type { EpEduProps } from \"~/types/educationals/EpEdu\";\n\nconst props = withDefaults(defineProps<EpEduProps>(), {\n title: null,\n type: \"neutral\",\n hideIcon: false,\n flat: true,\n labelIntentions: \"\",\n card: false\n});\n\n//get slots\nconst slots: SetupContext[\"slots\"] = useSlots();\n\nconst hasIntentions = computed(() => {\n return slots.intentions ? true : false;\n});\n\nconst hasActions = computed(() => {\n return slots.actions ? true : false;\n});\n\nconst renderIcon = computed(() => {\n if (props.icon) {\n return props.icon;\n }\n return mdiLeadPencil;\n});\n\nconst topBarStyle = computed(() => {\n return `${mediaVariants[props.type]} text-left ${\n props.flat ? \"\" : \"rounded-t-md\"\n } flex justify-between items-center `;\n});\n\nconst bottomBarStyle = computed(() => {\n return `${mediaVariants[props.type]} text-right`;\n});\n\nconst paddingTopStyle = computed(() => {\n if (props.type != \"neutral\") {\n return `px-5 py-2`;\n }\n});\n\nconst paddingBottomStyle = computed(() => {\n if (props.type != \"neutral\") {\n return `pr-5`;\n }\n});\nconst boxPaddingStyle = computed(() => {\n if (props.type != \"neutral\") {\n return `px-5`;\n }\n});\n\nconst containerStyle = computed(() => {\n if (hasActions.value || hasIntentions.value || props.title) {\n return ` overflow-hidden ${\n props.flat ? \"\" : \"shadow-md\"\n } flex flex-col justify-start h-full`;\n }\n return `flex flex-col justify-between`;\n});\n\n\nconst bgColor = computed(()=> {\n return props.card ? 'bg-surface-2 dark:bg-surface-2-dark rounded p-4' : ''\n})\n\n\n\nconst { title, hideIcon } = toRefs(props);\n</script>\n\n<template>\n <div :class=\"`${containerStyle} ${bgColor}`\">\n <div\n :class=\"`${topBarStyle} ${paddingTopStyle}`\"\n v-if=\"title || mandateLevel\"\n >\n <!-- <EpIcon :size=\"24\" :icon-path=\"mdiBookOpenVariant\"/> -->\n <h3>\n <EpIcon\n v-if=\"!hideIcon\"\n :iconPath=\"renderIcon\"\n size=\"24\"\n class=\"mr-2\"\n />\n <span class=\"font-bold align-middle\">{{ title }}</span>\n </h3>\n <EpScope v-if=\"mandateLevel\" :mandateLevel=\"mandateLevel\"></EpScope>\n </div>\n <div :class=\"`${boxPaddingStyle} `\">\n <div class=\"py-4\" v-if=\"hasIntentions\">\n <!-- <EpIcon :size=\"24\" :icon-path=\"mdiInformationOutline\"/> -->\n <h4\n v-if=\"labelIntentions\"\n class=\"font-light text-sm pb-1 tracking-wide\"\n >\n {{ labelIntentions }}\n </h4>\n <slot name=\"intentions\" />\n <EpDivider />\n </div>\n <div class=\"pt-2\">\n <slot name=\"content\" />\n </div>\n </div>\n <div\n :class=\"`${bottomBarStyle} ${paddingBottomStyle}`\"\n v-if=\"hasActions\"\n >\n <slot name=\"actions\" />\n </div>\n </div>\n</template>\n"],"names":["_createElementBlock","_normalizeClass","_unref","
|
|
1
|
+
{"version":3,"file":"EpEdu.vue.js","sources":["../../../src/components/educationals/EpEdu.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { toRefs, computed, useSlots, type SetupContext } from \"vue\";\nimport { mediaVariants } from \"~/types/Medias\";\nimport EpIcon from \"~/components/basics/EpIcon.vue\";\nimport EpDivider from \"~/components/basics/EpDivider.vue\";\nimport EpScope from \"~/components/educationals/EpScope.vue\";\nimport { mdiLeadPencil } from \"@mdi/js\";\nimport type { EpEduProps } from \"~/types/educationals/EpEdu\";\n\nconst props = withDefaults(defineProps<EpEduProps>(), {\n title: null,\n type: \"neutral\",\n hideIcon: false,\n flat: true,\n labelIntentions: \"\",\n card: false\n});\n\n//get slots\nconst slots: SetupContext[\"slots\"] = useSlots();\n\nconst hasIntentions = computed(() => {\n return slots.intentions ? true : false;\n});\n\nconst hasActions = computed(() => {\n return slots.actions ? true : false;\n});\n\nconst renderIcon = computed(() => {\n if (props.icon) {\n return props.icon;\n }\n return mdiLeadPencil;\n});\n\nconst topBarStyle = computed(() => {\n return `${mediaVariants[props.type]} text-left ${\n props.flat ? \"\" : \"rounded-t-md\"\n } flex justify-between items-center `;\n});\n\nconst bottomBarStyle = computed(() => {\n return `${mediaVariants[props.type]} text-right`;\n});\n\nconst paddingTopStyle = computed(() => {\n if (props.type != \"neutral\") {\n return `px-5 py-2`;\n }\n});\n\nconst paddingBottomStyle = computed(() => {\n if (props.type != \"neutral\") {\n return `pr-5`;\n }\n});\nconst boxPaddingStyle = computed(() => {\n if (props.type != \"neutral\") {\n return `px-5`;\n }\n});\n\nconst containerStyle = computed(() => {\n if (hasActions.value || hasIntentions.value || props.title) {\n return ` overflow-hidden ${\n props.flat ? \"\" : \"shadow-md\"\n } flex flex-col justify-start h-full`;\n }\n return `flex flex-col justify-between`;\n});\n\n\nconst bgColor = computed(()=> {\n return props.card ? 'bg-surface-2 dark:bg-surface-2-dark rounded p-4' : ''\n})\n\n\n\nconst { title, hideIcon } = toRefs(props);\n</script>\n\n<template>\n <div :class=\"`${containerStyle} ${bgColor}`\">\n <div\n :class=\"`${topBarStyle} ${paddingTopStyle}`\"\n v-if=\"title || mandateLevel\"\n >\n <!-- <EpIcon :size=\"24\" :icon-path=\"mdiBookOpenVariant\"/> -->\n <h3>\n <EpIcon\n v-if=\"!hideIcon\"\n :iconPath=\"renderIcon\"\n size=\"24\"\n class=\"mr-2\"\n />\n <span class=\"font-bold align-middle\">{{ title }}</span>\n </h3>\n <EpScope v-if=\"mandateLevel\" :mandateLevel=\"mandateLevel\"></EpScope>\n </div>\n <div :class=\"`${boxPaddingStyle} `\">\n <div class=\"py-4\" v-if=\"hasIntentions\">\n <!-- <EpIcon :size=\"24\" :icon-path=\"mdiInformationOutline\"/> -->\n <h4\n v-if=\"labelIntentions\"\n class=\"font-light text-sm pb-1 tracking-wide\"\n >\n {{ labelIntentions }}\n </h4>\n <slot name=\"intentions\" />\n <EpDivider />\n </div>\n <div class=\"pt-2\">\n <slot name=\"content\" />\n </div>\n </div>\n <div\n :class=\"`${bottomBarStyle} ${paddingBottomStyle}`\"\n v-if=\"hasActions\"\n >\n <slot name=\"actions\" />\n </div>\n </div>\n</template>\n"],"names":["_createElementBlock","_normalizeClass","_unref","_createElementVNode","_createBlock","EpIcon","_toDisplayString","EpScope","_openBlock","_renderSlot","_createVNode","EpDivider"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,UAAM,QAAQ;AAUd,UAAM,QAA+B,SAAA;AAErC,UAAM,gBAAgB,SAAS,MAAM;AACnC,aAAO,MAAM,aAAa,OAAO;AAAA,IACnC,CAAC;AAED,UAAM,aAAa,SAAS,MAAM;AAChC,aAAO,MAAM,UAAU,OAAO;AAAA,IAChC,CAAC;AAED,UAAM,aAAa,SAAS,MAAM;AAChC,UAAI,MAAM,MAAM;AACd,eAAO,MAAM;AAAA,MACf;AACA,aAAO;AAAA,IACT,CAAC;AAED,UAAM,cAAc,SAAS,MAAM;AACjC,aAAO,GAAG,cAAc,MAAM,IAAI,CAAC,eACjC,MAAM,OAAO,KAAK,cACpB;AAAA,IACF,CAAC;AAED,UAAM,iBAAiB,SAAS,MAAM;AACpC,aAAO,GAAG,cAAc,MAAM,IAAI,CAAC;AAAA,IACrC,CAAC;AAED,UAAM,kBAAkB,SAAS,MAAM;AACrC,UAAI,MAAM,QAAQ,WAAW;AAC3B,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AAED,UAAM,qBAAqB,SAAS,MAAM;AACxC,UAAI,MAAM,QAAQ,WAAW;AAC3B,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AACD,UAAM,kBAAkB,SAAS,MAAM;AACrC,UAAI,MAAM,QAAQ,WAAW;AAC3B,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AAED,UAAM,iBAAiB,SAAS,MAAM;AACpC,UAAI,WAAW,SAAS,cAAc,SAAS,MAAM,OAAO;AAC1D,eAAO,oBACL,MAAM,OAAO,KAAK,WACpB;AAAA,MACF;AACA,aAAO;AAAA,IACT,CAAC;AAGD,UAAM,UAAU,SAAS,MAAK;AAC3B,aAAO,MAAM,OAAO,oDAAoD;AAAA,IAC3E,CAAC;AAID,UAAM,EAAE,OAAO,aAAa,OAAO,KAAK;;0BAItCA,mBAuCM,OAAA;AAAA,QAvCA,OAAKC,eAAA,GAAK,eAAA,KAAc,IAAI,QAAA,KAAO,EAAA;AAAA,MAAA;QAG/BC,MAAA,KAAA,KAAS,QAAA,6BAFjBF,mBAeM,OAAA;AAAA;UAdH,OAAKC,eAAA,GAAK,YAAA,KAAW,IAAI,gBAAA,KAAe,EAAA;AAAA,QAAA;UAIzCE,mBAQK,MAAA,MAAA;AAAA,aANMD,MAAA,QAAA,kBADTE,YAKEC,aAAA;AAAA;cAHC,UAAU,WAAA;AAAA,cACX,MAAK;AAAA,cACL,OAAM;AAAA,YAAA;YAERF,mBAAuD,QAAvD,YAAuDG,gBAAfJ,MAAA,KAAA,CAAK,GAAA,CAAA;AAAA,UAAA;UAEhC,QAAA,6BAAfE,YAAoEG,aAAA;AAAA;YAAtC,cAAc,QAAA;AAAA,UAAA;;QAE9CJ,mBAeM,OAAA;AAAA,UAfA,yBAAU,gBAAA,KAAe,GAAA;AAAA,QAAA;UACL,cAAA,SAAxBK,UAAA,GAAAR,mBAUM,OAVN,YAUM;AAAA,YAPI,QAAA,gCADRA,mBAKK,MALL,YAKKM,gBADA,QAAA,eAAe,GAAA,CAAA;YAEpBG,WAA0B,KAAA,QAAA,YAAA;AAAA,YAC1BC,YAAaC,WAAA;AAAA,UAAA;UAEfR,mBAEM,OAFN,YAEM;AAAA,YADJM,WAAuB,KAAA,QAAA,SAAA;AAAA,UAAA;;QAKnB,WAAA,sBAFRT,mBAKM,OAAA;AAAA;UAJH,OAAKC,eAAA,GAAK,eAAA,KAAc,IAAI,mBAAA,KAAkB,EAAA;AAAA,QAAA;UAG/CQ,WAAuB,KAAA,QAAA,SAAA;AAAA,QAAA;;;;;"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { defineComponent, reactive, computed, h, createElementBlock, openBlock, createCommentVNode, createElementVNode, toDisplayString, Fragment, renderList, createBlock, resolveDynamicComponent } from "vue";
|
|
2
|
+
import { isHtml } from "../../composables/isHtml.js";
|
|
3
|
+
import { useRenderText } from "../../composables/useRenderText.js";
|
|
4
|
+
import _sfc_main$1 from "../forms/EpSelect.vue.js";
|
|
5
|
+
const _hoisted_1 = { class: "px-2" };
|
|
6
|
+
const _hoisted_2 = {
|
|
7
|
+
key: 0,
|
|
8
|
+
class: "font-bold text-center my-2 text-xl"
|
|
9
|
+
};
|
|
10
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
11
|
+
__name: "EpFillBlanks",
|
|
12
|
+
props: {
|
|
13
|
+
selects: {},
|
|
14
|
+
content: {},
|
|
15
|
+
title: {}
|
|
16
|
+
},
|
|
17
|
+
setup(__props) {
|
|
18
|
+
const props = __props;
|
|
19
|
+
const values = reactive({});
|
|
20
|
+
const refsMap = reactive({});
|
|
21
|
+
function parseHtmlToVNodes(html) {
|
|
22
|
+
const container = document.createElement("div");
|
|
23
|
+
container.innerHTML = html;
|
|
24
|
+
const nodes = [];
|
|
25
|
+
container.childNodes.forEach((node) => {
|
|
26
|
+
if (node.nodeType === 3) {
|
|
27
|
+
const text = node.textContent;
|
|
28
|
+
if (text && text.replace(/\s/g, "").length > 0) nodes.push(text);
|
|
29
|
+
} else if (node.nodeType === 1) {
|
|
30
|
+
const el = node;
|
|
31
|
+
if (el.classList.contains("ep-select")) {
|
|
32
|
+
const id = el.getAttribute("data-id");
|
|
33
|
+
if (id !== null) {
|
|
34
|
+
const selectProps = props.selects.filter((item) => item.id == id);
|
|
35
|
+
if (selectProps.length > 0) {
|
|
36
|
+
nodes.push(
|
|
37
|
+
h(
|
|
38
|
+
"div",
|
|
39
|
+
{
|
|
40
|
+
style: "display:inline-block; border-width: 2px; border-radius: 7px; min-width: 150px; margin: 3px;",
|
|
41
|
+
id,
|
|
42
|
+
ref: (el2) => {
|
|
43
|
+
if (el2) refsMap[id] = el2;
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
h(_sfc_main$1, {
|
|
47
|
+
block: false,
|
|
48
|
+
options: selectProps[0].options,
|
|
49
|
+
modelValue: values[id],
|
|
50
|
+
"onUpdate:modelValue": (val) => {
|
|
51
|
+
values[id] = val;
|
|
52
|
+
}
|
|
53
|
+
})
|
|
54
|
+
)
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
nodes.push(
|
|
61
|
+
h(
|
|
62
|
+
el.tagName.toLowerCase(),
|
|
63
|
+
getElementAttrs(el),
|
|
64
|
+
parseHtmlToVNodes(el.innerHTML)
|
|
65
|
+
)
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
return nodes;
|
|
70
|
+
}
|
|
71
|
+
const renderText = computed(() => {
|
|
72
|
+
if (!props.content) return [h("div")];
|
|
73
|
+
if (!isHtml(props.content)) {
|
|
74
|
+
return [h("div", { innerHTML: useRenderText(props.content) })];
|
|
75
|
+
}
|
|
76
|
+
const formatted = useRenderText(props.content);
|
|
77
|
+
return parseHtmlToVNodes(`<div> ${formatted} </div>`);
|
|
78
|
+
});
|
|
79
|
+
function getElementAttrs(el) {
|
|
80
|
+
const attrs = {};
|
|
81
|
+
for (const attr of Array.from(el.attributes)) {
|
|
82
|
+
attrs[attr.name] = attr.value;
|
|
83
|
+
}
|
|
84
|
+
if (el.tagName.toLowerCase() === "a") {
|
|
85
|
+
attrs.target = "_blank";
|
|
86
|
+
attrs.rel = "noopener noreferrer";
|
|
87
|
+
}
|
|
88
|
+
return attrs;
|
|
89
|
+
}
|
|
90
|
+
const validate = () => {
|
|
91
|
+
props.selects.forEach((select) => {
|
|
92
|
+
refsMap[select.id].style.borderColor = values[select.id] == select.correctValue ? "green" : "red";
|
|
93
|
+
});
|
|
94
|
+
};
|
|
95
|
+
return (_ctx, _cache) => {
|
|
96
|
+
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
97
|
+
__props.title ? (openBlock(), createElementBlock("h3", _hoisted_2, toDisplayString(__props.title), 1)) : createCommentVNode("", true),
|
|
98
|
+
createElementVNode("div", null, [
|
|
99
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(renderText.value, (node, i) => {
|
|
100
|
+
return openBlock(), createBlock(resolveDynamicComponent(node), { key: i });
|
|
101
|
+
}), 128))
|
|
102
|
+
]),
|
|
103
|
+
createElementVNode("div", { class: "flex items-center justify-around" }, [
|
|
104
|
+
createElementVNode("button", {
|
|
105
|
+
class: "bg-blue-500 text-white px-3 py-2 m-2 rounded-md text-center",
|
|
106
|
+
onClick: validate
|
|
107
|
+
}, " Valider ")
|
|
108
|
+
])
|
|
109
|
+
]);
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
export {
|
|
114
|
+
_sfc_main as default
|
|
115
|
+
};
|
|
116
|
+
//# sourceMappingURL=EpFillBlanks.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EpFillBlanks.vue.js","sources":["../../../src/components/educationals/EpFillBlanks.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, h, type VNode, reactive } from \"vue\";\nimport { isHtml } from \"~/composables/isHtml\";\nimport { useRenderText } from \"~/composables/useRenderText\";\nimport type { EpFillBlanksProps } from \"~/types/educationals/EpFillBlanks\";\nimport EpSelect from \"../forms/EpSelect.vue\";\n\n\nconst props = withDefaults(defineProps<EpFillBlanksProps>(), {});\n\nconst values = reactive<Record<string, any>>({});\nconst refsMap = reactive<Record<string, any>>({});\n\nfunction parseHtmlToVNodes(html: string): (VNode | string)[] {\n const container = document.createElement(\"div\");\n container.innerHTML = html;\n\n const nodes: (VNode | string)[] = [];\n\n container.childNodes.forEach((node) => {\n if (node.nodeType === 3) {\n // Text node\n const text = node.textContent;\n \n if (text && text.replace(/\\s/g, '').length > 0) nodes.push(text);\n } else if (node.nodeType === 1) {\n const el = node as HTMLElement;\n\n // Select part\n if(el.classList.contains(\"ep-select\")){\n const id = el.getAttribute(\"data-id\");\n if(id !== null) {\n const selectProps = props.selects.filter((item) => item.id == id);\n if(selectProps.length > 0) {\n nodes.push(\n h(\n \"div\",\n { \n style: \"display:inline-block; border-width: 2px; border-radius: 7px; min-width: 150px; margin: 3px;\", \n id,\n ref: (el) => {\n if (el) refsMap[id] = el;\n }\n },\n h(EpSelect, {\n block: false,\n options: selectProps[0].options,\n modelValue: values[id],\n 'onUpdate:modelValue': (val) => {\n values[id] = val;\n }\n })\n )\n );\n }\n }\n return;\n }\n\n nodes.push(\n h(\n el.tagName.toLowerCase(),\n getElementAttrs(el),\n parseHtmlToVNodes(el.innerHTML) \n )\n );\n }\n });\n\n return nodes;\n}\n\nconst renderText = computed(() => {\n if (!props.content) return [h(\"div\")];\n if (!isHtml(props.content)) {\n return [h(\"div\", { innerHTML: useRenderText(props.content) })];\n }\n\n const formatted = useRenderText(props.content)\n\n return parseHtmlToVNodes(`<div> ${formatted} </div>`);\n});\n\n\n//get attributes from element html \nfunction getElementAttrs(el: HTMLElement): Record<string, any> {\n const attrs: Record<string, any> = {};\n\n for (const attr of Array.from(el.attributes)) {\n attrs[attr.name] = attr.value;\n }\n\n if (el.tagName.toLowerCase() === \"a\") {\n attrs.target = \"_blank\";\n attrs.rel = \"noopener noreferrer\";\n }\n\n return attrs;\n}\n\nconst validate = () => {\n props.selects.forEach((select) => {\n refsMap[select.id].style.borderColor = (values[select.id] == select.correctValue) ? 'green' : 'red';\n })\n}\n\n</script>\n\n<template>\n <div class=\"px-2\">\n <h3 v-if=\"title\" class=\"font-bold text-center my-2 text-xl\">{{ title }}</h3>\n <div>\n <component :is=\"node\" v-for=\"(node, i) in renderText\" :key=\"i\" />\n </div>\n <div class=\"flex items-center justify-around\">\n <button\n class=\"bg-blue-500 text-white px-3 py-2 m-2 rounded-md text-center\"\n @click=\"validate\"\n >\n Valider\n </button>\n </div>\n </div>\n</template>\n"],"names":["el","EpSelect","_openBlock","_createElementBlock","_toDisplayString","_createElementVNode","_Fragment","_renderList","_createBlock","_resolveDynamicComponent"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EpFillBlanks.vue2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -2,7 +2,7 @@ import { defineComponent, toRefs, createElementBlock, openBlock, createElementVN
|
|
|
2
2
|
import _sfc_main$1 from "../basics/EpIcon.vue.js";
|
|
3
3
|
import Comp from "../interactions/EpAccordeon.vue.js";
|
|
4
4
|
import _sfc_main$3 from "../basics/EpImg.vue.js";
|
|
5
|
-
import _sfc_main$2 from "../tools/RenderTextNode.
|
|
5
|
+
import _sfc_main$2 from "../tools/RenderTextNode.vue.js";
|
|
6
6
|
const _hoisted_1 = { class: "lg:grid lg:grid-cols-12 lg:gap-8" };
|
|
7
7
|
const _hoisted_2 = { class: "lg:col-span-2" };
|
|
8
8
|
const _hoisted_3 = { class: "text-pretty text-3xl font-semibold tracking-tight sm:text-xl" };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent, createElementBlock, openBlock, createElementVNode, createBlock, createCommentVNode, createTextVNode, toDisplayString, createVNode } from "vue";
|
|
2
2
|
import _sfc_main$1 from "../basics/EpIcon.vue.js";
|
|
3
|
-
import _sfc_main$2 from "../tools/RenderTextNode.
|
|
3
|
+
import _sfc_main$2 from "../tools/RenderTextNode.vue.js";
|
|
4
4
|
const _hoisted_1 = { class: "lg:grid lg:grid-cols-12 lg:gap-8" };
|
|
5
5
|
const _hoisted_2 = { class: "lg:col-span-2" };
|
|
6
6
|
const _hoisted_3 = { class: "text-pretty text-3xl font-semibold tracking-tight sm:text-xl" };
|
|
@@ -23,20 +23,20 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
23
23
|
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
24
24
|
createElementVNode("div", _hoisted_2, [
|
|
25
25
|
createElementVNode("h2", _hoisted_3, [
|
|
26
|
-
|
|
26
|
+
__props.icon ? (openBlock(), createBlock(_sfc_main$1, {
|
|
27
27
|
key: 0,
|
|
28
|
-
"icon-path":
|
|
28
|
+
"icon-path": __props.icon,
|
|
29
29
|
size: "28",
|
|
30
30
|
extraClass: "mr-2"
|
|
31
31
|
}, null, 8, ["icon-path"])) : createCommentVNode("", true),
|
|
32
|
-
createTextVNode(" " + toDisplayString(
|
|
32
|
+
createTextVNode(" " + toDisplayString(__props.title), 1)
|
|
33
33
|
])
|
|
34
34
|
]),
|
|
35
35
|
createElementVNode("div", _hoisted_4, [
|
|
36
36
|
createElementVNode("div", _hoisted_5, [
|
|
37
|
-
|
|
37
|
+
__props.subtitle ? (openBlock(), createElementBlock("h3", _hoisted_6, toDisplayString(__props.subtitle), 1)) : createCommentVNode("", true),
|
|
38
38
|
createElementVNode("div", null, [
|
|
39
|
-
createVNode(_sfc_main$2, { content:
|
|
39
|
+
createVNode(_sfc_main$2, { content: __props.content }, null, 8, ["content"])
|
|
40
40
|
])
|
|
41
41
|
])
|
|
42
42
|
])
|