ep-lib-ts 1.0.79 → 1.0.80
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/educationals/EpBranchingScenario.vue.js +1 -1
- package/dist/components/educationals/EpBranchingScenario.vue2.js +25 -6
- package/dist/components/educationals/EpBranchingScenario.vue2.js.map +1 -1
- package/dist/components/tools/Details.vue.js +4 -3
- package/dist/components/tools/Details.vue.js.map +1 -1
- package/dist/components/tools/TextMedia.vue.js +3 -3
- package/dist/components/tools/TextMedia.vue.js.map +1 -1
- package/dist/style.css +67 -67
- package/dist/types/educationals/EpBranchingScenario.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _sfc_main from "./EpBranchingScenario.vue2.js";
|
|
2
2
|
/* empty css */
|
|
3
3
|
import _export_sfc from "../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
-
const Comp = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
4
|
+
const Comp = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-6f6eb558"]]);
|
|
5
5
|
export {
|
|
6
6
|
Comp as default
|
|
7
7
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent, ref, computed, createElementBlock, openBlock, createElementVNode, normalizeStyle, createCommentVNode, toDisplayString, createVNode, withCtx, unref, normalizeClass, createTextVNode, Fragment, renderList
|
|
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
4
|
import _sfc_main$4 from "../tools/Details.vue.js";
|
|
@@ -66,6 +66,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
66
66
|
labelShowFullPath: { default: "Voir le parcours au complet" },
|
|
67
67
|
labelClose: { default: "Fermer" },
|
|
68
68
|
labelRestart: { default: "Recommencer" },
|
|
69
|
+
labelBtnFinish: { default: "Fin du scénario" },
|
|
69
70
|
colorPath: { default: "stroke-yellow-400" },
|
|
70
71
|
colorRect: { default: "fill-main-color-400" },
|
|
71
72
|
isCluster: { type: Boolean }
|
|
@@ -100,6 +101,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
100
101
|
const lastOption = path.value[path.value.length - 1];
|
|
101
102
|
if (lastOption) {
|
|
102
103
|
currentOption.value = lastOption;
|
|
104
|
+
isTheLastOne.value = false;
|
|
103
105
|
} else {
|
|
104
106
|
currentOption.value = props.decisionTree;
|
|
105
107
|
}
|
|
@@ -108,17 +110,22 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
108
110
|
currentOption.value = null;
|
|
109
111
|
isIntroductoryPart.value = true;
|
|
110
112
|
path.value = [];
|
|
113
|
+
isTheLastOne.value = false;
|
|
111
114
|
};
|
|
115
|
+
const isTheLastOne = ref(false);
|
|
112
116
|
const nextSlide = (option) => {
|
|
113
117
|
path.value.push(option);
|
|
114
|
-
if (option.children && option.children.length > 0) {
|
|
118
|
+
if (option.children && option.children.length > 0 && !isTheLastOne.value) {
|
|
115
119
|
currentOption.value = option;
|
|
116
120
|
} else {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
userPath.value = convertOptionToTreeNode(props.decisionTree, path.value);
|
|
121
|
+
isTheLastOne.value = true;
|
|
122
|
+
currentOption.value = option;
|
|
120
123
|
}
|
|
121
124
|
};
|
|
125
|
+
const finish = () => {
|
|
126
|
+
currentOption.value = null;
|
|
127
|
+
userPath.value = convertOptionToTreeNode(props.decisionTree, path.value);
|
|
128
|
+
};
|
|
122
129
|
function convertOptionToTreeNode(option, path2) {
|
|
123
130
|
var _a, _b;
|
|
124
131
|
const isActive = path2.includes(option);
|
|
@@ -207,7 +214,19 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
207
214
|
]),
|
|
208
215
|
_: 2
|
|
209
216
|
}, 1032, ["onClick"]);
|
|
210
|
-
}), 128))
|
|
217
|
+
}), 128)),
|
|
218
|
+
isTheLastOne.value ? (openBlock(), createBlock(_sfc_main$1, {
|
|
219
|
+
key: 0,
|
|
220
|
+
rounded: "",
|
|
221
|
+
type: "primary",
|
|
222
|
+
class: "flex-1 min-w-[120px] sm:min-w-[160px] max-w-xs",
|
|
223
|
+
onClick: finish
|
|
224
|
+
}, {
|
|
225
|
+
default: withCtx(() => [
|
|
226
|
+
createTextVNode(toDisplayString(_ctx.labelBtnFinish), 1)
|
|
227
|
+
]),
|
|
228
|
+
_: 1
|
|
229
|
+
})) : createCommentVNode("", true)
|
|
211
230
|
])
|
|
212
231
|
], 2)
|
|
213
232
|
])) : (openBlock(), createElementBlock("div", _hoisted_8, [
|
|
@@ -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 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 } 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};\n\nconst nextSlide = (option: TreeNode) => {\n //currentSlide.value++\n path.value.push(option);\n if (option.children && option.children.length > 0) {\n currentOption.value = option; // drill into next level\n } else {\n currentOption.value = null; // reached the end (leaf node)\n console.log(path.value)\n userPath.value = convertOptionToTreeNode(props.decisionTree, path.value);\n }\n\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 </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","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","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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"}
|
|
@@ -5,6 +5,7 @@ import _sfc_main$4 from "../basics/EpBtn.vue.js";
|
|
|
5
5
|
import _sfc_main$3 from "../basics/EpDivider.vue.js";
|
|
6
6
|
import _sfc_main$2 from "./TextMedia.vue.js";
|
|
7
7
|
const _hoisted_1 = { class: "flex justify-end" };
|
|
8
|
+
const _hoisted_2 = { class: "text-white dark:text-neutral-900" };
|
|
8
9
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
9
10
|
__name: "Details",
|
|
10
11
|
props: {
|
|
@@ -23,11 +24,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
23
24
|
createVNode(_sfc_main$1, {
|
|
24
25
|
modelValue: showModal.value,
|
|
25
26
|
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => showModal.value = $event),
|
|
26
|
-
title: _ctx.
|
|
27
|
+
title: _ctx.title
|
|
27
28
|
}, {
|
|
28
29
|
default: withCtx(() => [
|
|
29
30
|
createVNode(_sfc_main$2, {
|
|
30
|
-
text: _ctx.
|
|
31
|
+
text: _ctx.content,
|
|
31
32
|
media: _ctx.media,
|
|
32
33
|
"text-left": ""
|
|
33
34
|
}, null, 8, ["text", "media"]),
|
|
@@ -48,7 +49,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
48
49
|
]),
|
|
49
50
|
_: 1
|
|
50
51
|
}, 8, ["modelValue", "title"]),
|
|
51
|
-
createElementVNode("p",
|
|
52
|
+
createElementVNode("p", _hoisted_2, toDisplayString(_ctx.title), 1)
|
|
52
53
|
]);
|
|
53
54
|
};
|
|
54
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Details.vue.js","sources":["../../../src/components/tools/Details.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport EpModal from \"~/components/interactions/EpModal.vue\";\nimport type { NestedComponents } from \"~/types/Component\";\nimport EpBtn from \"~/components/basics/EpBtn.vue\";\nimport EpDivider from \"~/components/basics/EpDivider.vue\";\nimport TextMedia from \"./TextMedia.vue\";\nconst showModal = ref(false);\n\ninterface Props {\n title?: string;\n content: string;\n labelClose?: string;\n media?: NestedComponents;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n title: \"Voir détails\",\n labelClose: \"Fermer\",\n});\n</script>\n\n<template>\n <div\n class=\"cursor-pointer rounded bg-primary py-2 px-4 flex flex-col items-center\"\n @click=\"showModal = true\"\n >\n <EpModal v-model=\"showModal\" :title=\"
|
|
1
|
+
{"version":3,"file":"Details.vue.js","sources":["../../../src/components/tools/Details.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport EpModal from \"~/components/interactions/EpModal.vue\";\nimport type { NestedComponents } from \"~/types/Component\";\nimport EpBtn from \"~/components/basics/EpBtn.vue\";\nimport EpDivider from \"~/components/basics/EpDivider.vue\";\nimport TextMedia from \"./TextMedia.vue\";\nconst showModal = ref(false);\n\ninterface Props {\n title?: string;\n content: string;\n labelClose?: string;\n media?: NestedComponents;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n title: \"Voir détails\",\n labelClose: \"Fermer\",\n});\n</script>\n\n<template>\n <div\n class=\"cursor-pointer rounded bg-primary py-2 px-4 flex flex-col items-center\"\n @click=\"showModal = true\"\n >\n <EpModal v-model=\"showModal\" :title=\"title\">\n <TextMedia :text=\"content\" :media=\"media\" text-left />\n <EpDivider />\n <div class=\"flex justify-end\">\n <EpBtn type=\"error\" rounded size=\"small\" @click=\"showModal = false\">\n {{ labelClose }}\n </EpBtn>\n </div>\n </EpModal>\n <p class=\"text-white dark:text-neutral-900\">{{ title }}</p>\n </div>\n</template>\n"],"names":["_createElementBlock","_createVNode","EpModal","title","TextMedia","content","media","EpDivider","_createElementVNode","EpBtn","labelClose","_toDisplayString"],"mappings":";;;;;;;;;;;;;;;;;AAOA,UAAM,YAAY,IAAI,KAAK;;0BAgBzBA,mBAcM,OAAA;AAAA,QAbJ,OAAM;AAAA,QACL,+CAAO,UAAA,QAAS;AAAA,MAAA;QAEjBC,YAQUC,aAAA;AAAA,sBARQ,UAAA;AAAA,uEAAA,UAAS,QAAA;AAAA,UAAG,OAAOC,KAAAA;AAAAA,QAAAA;2BACnC,MAAsD;AAAA,YAAtDF,YAAsDG,aAAA;AAAA,cAA1C,MAAMC,KAAAA;AAAAA,cAAU,OAAOC,KAAAA;AAAAA,cAAO,aAAA;AAAA,YAAA;YAC1CL,YAAaM,WAAA;AAAA,YACbC,mBAIM,OAJN,YAIM;AAAA,cAHJP,YAEQQ,aAAA;AAAA,gBAFD,MAAK;AAAA,gBAAQ,SAAA;AAAA,gBAAQ,MAAK;AAAA,gBAAS,+CAAO,UAAA,QAAS;AAAA,cAAA;iCACxD,MAAgB;AAAA,kDAAbC,KAAAA,UAAU,GAAA,CAAA;AAAA,gBAAA;;;;;;;QAInBF,mBAA2D,KAA3D,YAA2DG,gBAAZR,KAAAA,KAAK,GAAA,CAAA;AAAA,MAAA;;;;"}
|
|
@@ -30,15 +30,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
30
30
|
const colsStyle = computed(() => {
|
|
31
31
|
return props.cols ? "flex items-center justify-center gap-1" : "";
|
|
32
32
|
});
|
|
33
|
-
|
|
34
|
-
return props.textLeft ? "" : "
|
|
33
|
+
computed(() => {
|
|
34
|
+
return props.textLeft ? "text-red-900" : "text-red-700";
|
|
35
35
|
});
|
|
36
36
|
return (_ctx, _cache) => {
|
|
37
37
|
return openBlock(), createElementBlock("div", {
|
|
38
38
|
class: normalizeClass(colsStyle.value)
|
|
39
39
|
}, [
|
|
40
40
|
createElementVNode("div", {
|
|
41
|
-
class: normalizeClass(`w-full
|
|
41
|
+
class: normalizeClass(`w-full ${_ctx.flexCol ? "flex flex-col" : ""}`),
|
|
42
42
|
innerHTML: unref(useRenderText)(_ctx.text)
|
|
43
43
|
}, null, 10, _hoisted_1),
|
|
44
44
|
currentRenderComponent.value && _ctx.media ? (openBlock(), createElementBlock("div", _hoisted_2, [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextMedia.vue.js","sources":["../../../src/components/tools/TextMedia.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, defineAsyncComponent } from \"vue\";\nimport { useRenderText } from \"~/composables/useRenderText\";\nimport { useComponent } from \"~/composables/useComponent\";\nimport type { NestedComponents } from \"~/types/Component\";\n\ninterface Props {\n media?: NestedComponents;\n flexCol?: boolean;\n text: string;\n cols?: boolean;\n textLeft?: boolean;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n flexCol: false\n});\n\nconst currentRenderComponent = computed(() => {\n if (props.media) {\n const componentToLoad = useComponent(props.media.type);\n return defineAsyncComponent(\n () => import(`../${componentToLoad.path}/${componentToLoad.name}.vue`)\n );\n }\n return null;\n});\n\nconst colsStyle = computed(() => {\n return props.cols ? \"flex items-center justify-center gap-1\" : \"\";\n});\n\nconst alignText = computed(() => {\n return props.textLeft ? \"\" : \"
|
|
1
|
+
{"version":3,"file":"TextMedia.vue.js","sources":["../../../src/components/tools/TextMedia.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, defineAsyncComponent } from \"vue\";\nimport { useRenderText } from \"~/composables/useRenderText\";\nimport { useComponent } from \"~/composables/useComponent\";\nimport type { NestedComponents } from \"~/types/Component\";\n\ninterface Props {\n media?: NestedComponents;\n flexCol?: boolean;\n text: string;\n cols?: boolean;\n textLeft?: boolean;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n flexCol: false\n});\n\nconst currentRenderComponent = computed(() => {\n if (props.media) {\n const componentToLoad = useComponent(props.media.type);\n return defineAsyncComponent(\n () => import(`../${componentToLoad.path}/${componentToLoad.name}.vue`)\n );\n }\n return null;\n});\n\nconst colsStyle = computed(() => {\n return props.cols ? \"flex items-center justify-center gap-1\" : \"\";\n});\n\nconst alignText = computed(() => {\n return props.textLeft ? \"text-red-900\" : \"text-red-700\";\n});\n</script>\n\n<template>\n <div :class=\"colsStyle\">\n <div :class=\"`w-full ${(flexCol ? 'flex flex-col' : '')}`\" v-html=\"useRenderText(text)\" />\n <div class=\"w-full\" v-if=\"currentRenderComponent && media\">\n <component :is=\"currentRenderComponent\" v-bind=\"{ ...media.data, card:true }\" />\n </div>\n </div>\n</template>\n"],"names":["_createElementBlock","_createElementVNode","flexCol","_unref","text","media","_openBlock","_createBlock","_resolveDynamicComponent","_normalizeProps","_guardReactiveProps"],"mappings":"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"}
|
package/dist/style.css
CHANGED
|
@@ -1,22 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
|
|
3
|
-
font-size: 1.6em;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
.ep-info-box[data-v-64f3d0d8] a {
|
|
8
|
-
text-decoration: underline;
|
|
9
|
-
font-weight: 500;
|
|
10
|
-
}
|
|
11
|
-
/*$vite$:1*/
|
|
12
|
-
|
|
13
|
-
.shape[data-v-4a99873e] {
|
|
14
|
-
height: var(--e4ec2c0a);
|
|
15
|
-
width: var(--3f346a72);
|
|
16
|
-
}
|
|
17
|
-
/*$vite$:1*/
|
|
18
|
-
|
|
19
|
-
@keyframes fade-e9edfa2f {
|
|
2
|
+
@keyframes fade-6f6eb558 {
|
|
20
3
|
0% {
|
|
21
4
|
opacity: 0;
|
|
22
5
|
}
|
|
@@ -24,7 +7,7 @@
|
|
|
24
7
|
opacity: 1;
|
|
25
8
|
}
|
|
26
9
|
}
|
|
27
|
-
@keyframes scale-
|
|
10
|
+
@keyframes scale-6f6eb558 {
|
|
28
11
|
0% {
|
|
29
12
|
transform: scale(0.5);
|
|
30
13
|
opacity: 0;
|
|
@@ -34,7 +17,7 @@
|
|
|
34
17
|
opacity: 1;
|
|
35
18
|
}
|
|
36
19
|
}
|
|
37
|
-
@keyframes slideY-
|
|
20
|
+
@keyframes slideY-6f6eb558 {
|
|
38
21
|
0% {
|
|
39
22
|
transform: translateY(-100%);
|
|
40
23
|
opacity: 0;
|
|
@@ -46,14 +29,68 @@
|
|
|
46
29
|
}
|
|
47
30
|
|
|
48
31
|
/* Transition animation */
|
|
49
|
-
.fade[data-v-
|
|
50
|
-
animation: fade-
|
|
32
|
+
.fade[data-v-6f6eb558] {
|
|
33
|
+
animation: fade-6f6eb558 1s;
|
|
34
|
+
}
|
|
35
|
+
.scale[data-v-6f6eb558] {
|
|
36
|
+
animation: scale-6f6eb558 1s;
|
|
37
|
+
}
|
|
38
|
+
.slideY[data-v-6f6eb558] {
|
|
39
|
+
animation: slideY-6f6eb558 1s;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
.shape[data-v-4a99873e] {
|
|
44
|
+
height: var(--e4ec2c0a);
|
|
45
|
+
width: var(--3f346a72);
|
|
46
|
+
}
|
|
47
|
+
/*$vite$:1*/
|
|
48
|
+
|
|
49
|
+
.katex[data-v-a9b6227c] {
|
|
50
|
+
font-size: 1.6em;
|
|
51
|
+
}
|
|
52
|
+
/*$vite$:1*/
|
|
53
|
+
|
|
54
|
+
.eptimeline-list-enter-active[data-v-6ad2fc60],
|
|
55
|
+
.eptimeline-list-leave-active[data-v-6ad2fc60] {
|
|
56
|
+
transition: all 0.5s ease;
|
|
57
|
+
}
|
|
58
|
+
.eptimeline-list-enter-from[data-v-6ad2fc60],
|
|
59
|
+
.eptimeline-list-leave-to[data-v-6ad2fc60] {
|
|
60
|
+
opacity: 0;
|
|
61
|
+
transform: translateX(30px);
|
|
62
|
+
}
|
|
63
|
+
/*$vite$:1*/
|
|
64
|
+
|
|
65
|
+
pre {
|
|
66
|
+
white-space: break-spaces;
|
|
67
|
+
}
|
|
68
|
+
/*$vite$:1*/
|
|
69
|
+
|
|
70
|
+
.ep-accordeon-content[data-v-9a4f2570] {
|
|
71
|
+
transition: max-height 0.2s ease-out;
|
|
72
|
+
overflow: hidden;
|
|
73
|
+
}
|
|
74
|
+
/*$vite$:1*/
|
|
75
|
+
|
|
76
|
+
.ep-sensible-content[data-v-b3ee44a0] {
|
|
77
|
+
position: relative;
|
|
78
|
+
}
|
|
79
|
+
/*$vite$:1*/
|
|
80
|
+
|
|
81
|
+
.ep-tree-wrapper[data-v-482cff9d] {
|
|
82
|
+
overflow: auto;
|
|
83
|
+
border: 1px solid #ddd;
|
|
51
84
|
}
|
|
52
|
-
.
|
|
53
|
-
|
|
85
|
+
.ep-tree-container[data-v-482cff9d] {
|
|
86
|
+
width: 100%;
|
|
87
|
+
overflow-x: auto;
|
|
54
88
|
}
|
|
55
|
-
|
|
56
|
-
|
|
89
|
+
/*$vite$:1*/
|
|
90
|
+
|
|
91
|
+
.ep-info-box[data-v-64f3d0d8] a {
|
|
92
|
+
text-decoration: underline;
|
|
93
|
+
font-weight: 500;
|
|
57
94
|
}
|
|
58
95
|
/*$vite$:1*/
|
|
59
96
|
|
|
@@ -73,12 +110,6 @@
|
|
|
73
110
|
}
|
|
74
111
|
/*$vite$:1*/
|
|
75
112
|
|
|
76
|
-
.ep-accordeon-content[data-v-9a4f2570] {
|
|
77
|
-
transition: max-height 0.2s ease-out;
|
|
78
|
-
overflow: hidden;
|
|
79
|
-
}
|
|
80
|
-
/*$vite$:1*/
|
|
81
|
-
|
|
82
113
|
.ep-modal-mask {
|
|
83
114
|
position: fixed;
|
|
84
115
|
z-index: 6998;
|
|
@@ -118,34 +149,10 @@
|
|
|
118
149
|
}
|
|
119
150
|
/*$vite$:1*/
|
|
120
151
|
|
|
121
|
-
.
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
.eptimeline-list-enter-from[data-v-6ad2fc60],
|
|
126
|
-
.eptimeline-list-leave-to[data-v-6ad2fc60] {
|
|
127
|
-
opacity: 0;
|
|
128
|
-
transform: translateX(30px);
|
|
129
|
-
}
|
|
130
|
-
/*$vite$:1*/
|
|
131
|
-
|
|
132
|
-
.ep-tree-wrapper[data-v-482cff9d] {
|
|
133
|
-
overflow: auto;
|
|
134
|
-
border: 1px solid #ddd;
|
|
135
|
-
}
|
|
136
|
-
.ep-tree-container[data-v-482cff9d] {
|
|
137
|
-
width: 100%;
|
|
138
|
-
overflow-x: auto;
|
|
139
|
-
}
|
|
140
|
-
/*$vite$:1*/
|
|
141
|
-
|
|
142
|
-
.ep-sensible-content[data-v-b3ee44a0] {
|
|
143
|
-
position: relative;
|
|
144
|
-
}
|
|
145
|
-
/*$vite$:1*/
|
|
146
|
-
|
|
147
|
-
pre {
|
|
148
|
-
white-space: break-spaces;
|
|
152
|
+
.ep-display-box[data-v-4e1d2bd1] {
|
|
153
|
+
z-index: 9999;
|
|
154
|
+
position: absolute;
|
|
155
|
+
right: 12rem;
|
|
149
156
|
}
|
|
150
157
|
/*$vite$:1*/
|
|
151
158
|
|
|
@@ -164,11 +171,4 @@ pre {
|
|
|
164
171
|
.katex-render[data-v-0d66d7fc] .katex-display {
|
|
165
172
|
font-size: 1.5em;
|
|
166
173
|
}
|
|
167
|
-
/*$vite$:1*/
|
|
168
|
-
|
|
169
|
-
.ep-display-box[data-v-4e1d2bd1] {
|
|
170
|
-
z-index: 9999;
|
|
171
|
-
position: absolute;
|
|
172
|
-
right: 12rem;
|
|
173
|
-
}
|
|
174
174
|
/*$vite$:1*/
|