ep-lib-ts 1.0.63 → 1.0.65
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 -54
- package/dist/components/basics/EpAvatar.vue.js.map +1 -1
- package/dist/components/basics/EpAvatar.vue2.js +54 -1
- package/dist/components/basics/EpAvatar.vue2.js.map +1 -1
- package/dist/components/basics/EpBadge.vue2.js +1 -10
- package/dist/components/basics/EpBadge.vue2.js.map +1 -1
- package/dist/components/basics/EpCard.vue.js +29 -41
- package/dist/components/basics/EpCard.vue.js.map +1 -1
- package/dist/components/basics/EpDivider.vue.js +2 -3
- package/dist/components/basics/EpDivider.vue.js.map +1 -1
- package/dist/components/basics/EpFlex.vue.js.map +1 -1
- package/dist/components/basics/EpHoverCard.vue.js +13 -31
- package/dist/components/basics/EpHoverCard.vue.js.map +1 -1
- package/dist/components/basics/EpImg.vue.js +5 -3
- package/dist/components/basics/EpImg.vue.js.map +1 -1
- package/dist/components/basics/EpListItem.vue.js +1 -1
- package/dist/components/basics/EpListItem.vue.js.map +1 -1
- package/dist/components/basics/EpSpinner.vue.js +1 -2
- package/dist/components/basics/EpSpinner.vue.js.map +1 -1
- package/dist/components/basics/EpStackedList.vue.js +3 -3
- package/dist/components/basics/EpStackedList.vue.js.map +1 -1
- package/dist/components/basics/EpTable.vue.js +4 -4
- package/dist/components/basics/EpTable.vue.js.map +1 -1
- package/dist/components/basics/EpText.vue.js +4 -3
- package/dist/components/basics/EpText.vue.js.map +1 -1
- package/dist/components/educationals/EpBranchingScenario.vue.js +1 -1
- package/dist/components/educationals/EpBranchingScenario.vue2.js +1 -1
- package/dist/components/educationals/EpBranchingScenario.vue2.js.map +1 -1
- package/dist/components/educationals/EpEdu.vue.js +10 -6
- package/dist/components/educationals/EpEdu.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 +36 -28
- package/dist/components/educationals/EpReading.vue.js.map +1 -1
- package/dist/components/educationals/EpResource.vue.js +1 -1
- package/dist/components/educationals/EpResource.vue.js.map +1 -1
- package/dist/components/educationals/EpSpecificObjective.vue.js +7 -8
- package/dist/components/educationals/EpSpecificObjective.vue.js.map +1 -1
- package/dist/components/forms/EpRadioSummative.vue2.js +1 -1
- package/dist/components/forms/EpRadioSummative.vue2.js.map +1 -1
- package/dist/components/interactions/EpAccordeon.vue.js +1 -1
- package/dist/components/interactions/EpAccordeon.vue2.js +4 -7
- package/dist/components/interactions/EpAccordeon.vue2.js.map +1 -1
- package/dist/components/interactions/EpContentSlider.vue.js +7 -8
- package/dist/components/interactions/EpContentSlider.vue.js.map +1 -1
- package/dist/components/interactions/EpModal.vue.js +3 -3
- package/dist/components/interactions/EpModal.vue.js.map +1 -1
- package/dist/components/interactions/EpQuestion.vue.js +1 -1
- package/dist/components/interactions/EpQuestion.vue.js.map +1 -1
- package/dist/components/interactions/EpSummativeTable.vue.js +2 -2
- package/dist/components/interactions/EpSummativeTable.vue.js.map +1 -1
- package/dist/components/interactions/EpTooltip.vue.js.map +1 -1
- package/dist/components/interactions/{EpTooltip.vue3.js → EpTooltip.vue2.js} +1 -2
- package/dist/components/interactions/EpTooltip.vue2.js.map +1 -0
- package/dist/components/medias/EpAudio.vue.js +1 -2
- package/dist/components/medias/EpAudio.vue.js.map +1 -1
- package/dist/components/medias/EpCarousel.vue.js +197 -5
- package/dist/components/medias/EpCarousel.vue.js.map +1 -1
- package/dist/components/medias/EpCarousel.vue2.js +1 -196
- package/dist/components/medias/EpCarousel.vue2.js.map +1 -1
- package/dist/components/medias/EpHierarchy.vue.js +1 -1
- package/dist/components/medias/EpHierarchy.vue2.js +7 -7
- package/dist/components/medias/EpHierarchy.vue2.js.map +1 -1
- package/dist/components/medias/EpLink.vue.js +1 -5
- package/dist/components/medias/EpLink.vue.js.map +1 -1
- package/dist/components/medias/EpSensibleImage.vue.js +1 -1
- package/dist/components/medias/EpSensibleImage.vue2.js +2 -2
- package/dist/components/medias/EpSensibleImage.vue2.js.map +1 -1
- package/dist/components/medias/EpSoftware.vue.js +1 -1
- package/dist/components/medias/EpSoftware.vue.js.map +1 -1
- package/dist/components/medias/EpTerm.vue.js +4 -4
- package/dist/components/medias/EpTerm.vue.js.map +1 -1
- package/dist/components/medias/EpTimeLine.vue.js +5 -98
- package/dist/components/medias/EpTimeLine.vue.js.map +1 -1
- package/dist/components/medias/EpTimeLine.vue2.js +101 -0
- package/dist/components/medias/EpTimeLine.vue2.js.map +1 -0
- package/dist/components/medias/EpWordDef.vue.js +6 -6
- package/dist/components/medias/EpWordDef.vue.js.map +1 -1
- package/dist/components/signages/EpAlert.vue.js +1 -1
- package/dist/components/signages/EpAlert.vue2.js +1 -1
- package/dist/components/signages/EpAlert.vue2.js.map +1 -1
- package/dist/components/signages/EpHeader.vue.js +6 -6
- package/dist/components/signages/EpHeader.vue.js.map +1 -1
- package/dist/components/signages/EpQuote.vue.js +4 -4
- package/dist/components/signages/EpQuote.vue.js.map +1 -1
- package/dist/components/signages/EpSkeleton.vue.js +5 -40
- package/dist/components/signages/EpSkeleton.vue.js.map +1 -1
- package/dist/components/signages/EpSkeleton.vue2.js +43 -0
- package/dist/components/signages/EpSkeleton.vue2.js.map +1 -0
- package/dist/components/tools/Details.vue2.js +2 -3
- package/dist/components/tools/Details.vue2.js.map +1 -1
- package/dist/components/tools/DisplayBox.vue.js +5 -40
- package/dist/components/tools/DisplayBox.vue.js.map +1 -1
- package/dist/components/tools/DisplayBox.vue2.js +43 -0
- package/dist/components/tools/DisplayBox.vue2.js.map +1 -0
- package/dist/components/tools/TextMedia.vue2.js +2 -2
- package/dist/components/tools/TextMedia.vue2.js.map +1 -1
- package/dist/components/tools/TimelineItem.vue.js +1 -1
- package/dist/components/tools/TimelineItem.vue2.js +1 -1
- package/dist/components/tools/TimelineItem.vue2.js.map +1 -1
- package/dist/components/tools/TwoColsMedia.vue2.js +2 -2
- package/dist/components/tools/TwoColsMedia.vue2.js.map +1 -1
- package/dist/composables/useIcons.js +1 -1
- package/dist/composables/useIcons.js.map +1 -1
- package/dist/entry/interactions/EpTooltip.js +0 -1
- package/dist/entry/interactions/EpTooltip.js.map +1 -1
- package/dist/entry/medias/EpCarousel.js +2 -2
- package/dist/entry/medias/EpCarousel.js.map +1 -1
- package/dist/entry/medias/EpTimeLine.js +2 -3
- package/dist/entry/medias/EpTimeLine.js.map +1 -1
- package/dist/entry/signages/EpSkeleton.js +2 -3
- package/dist/entry/signages/EpSkeleton.js.map +1 -1
- package/dist/index.js +171 -173
- package/dist/index.js.map +1 -1
- package/dist/styles.css +655 -0
- package/dist/types/Accordeon.d.ts +1 -5
- package/dist/types/Accordeon.js +21 -25
- package/dist/types/Accordeon.js.map +1 -1
- package/dist/types/Alert.d.ts +2 -2
- package/dist/types/Alert.js +34 -34
- package/dist/types/Alert.js.map +1 -1
- package/dist/types/Btn.d.ts +0 -5
- package/dist/types/Btn.js +21 -26
- package/dist/types/Btn.js.map +1 -1
- package/dist/types/Chip.d.ts +0 -4
- package/dist/types/Chip.js +14 -18
- package/dist/types/Chip.js.map +1 -1
- package/dist/types/Colors.d.ts +1 -0
- package/dist/types/Hover.d.ts +1 -1
- package/dist/types/Medias.d.ts +0 -1
- package/dist/types/Medias.js +0 -1
- package/dist/types/Medias.js.map +1 -1
- package/dist/types/Radio.d.ts +0 -1
- package/dist/types/Radio.js +0 -1
- package/dist/types/Radio.js.map +1 -1
- package/dist/types/StackedList.d.ts +1 -1
- package/dist/types/StackedList.js.map +1 -1
- package/dist/types/Switch.d.ts +0 -1
- package/dist/types/Switch.js +0 -1
- package/dist/types/Switch.js.map +1 -1
- package/dist/types/basics/EpAvatar.d.ts +2 -10
- package/dist/types/basics/EpBadge.d.ts +2 -1
- package/dist/types/basics/EpCard.d.ts +3 -1
- package/dist/types/educationals/EpEdu.d.ts +1 -0
- package/dist/types/signages/EpBadge.d.ts +0 -1
- package/package.json +14 -17
- package/dist/components/interactions/EpTooltip.vue3.js.map +0 -1
- package/dist/components/medias/EpTimeLine.vue3.js +0 -6
- package/dist/components/medias/EpTimeLine.vue3.js.map +0 -1
- package/dist/components/signages/EpSkeleton.vue3.js +0 -6
- package/dist/components/signages/EpSkeleton.vue3.js.map +0 -1
- package/dist/components/tools/DisplayBox.vue3.js +0 -6
- package/dist/components/tools/DisplayBox.vue3.js.map +0 -1
- package/dist/composables/useColors.js +0 -135
- package/dist/composables/useColors.js.map +0 -1
- package/dist/style.css +0 -5212
|
@@ -1,199 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { mdiChevronLeftCircleOutline, mdiChevronRightCircleOutline } from "@mdi/js";
|
|
3
|
-
import _sfc_main$1 from "../basics/EpIcon.vue.js";
|
|
4
|
-
import _sfc_main$2 from "../basics/EpBtn.vue.js";
|
|
5
|
-
import _sfc_main$3 from "../interactions/EpModal.vue.js";
|
|
6
|
-
/* empty css */
|
|
7
|
-
import _sfc_main$4 from "../basics/EpImgCarousel.vue.js";
|
|
8
|
-
const _hoisted_1 = {
|
|
9
|
-
key: 0,
|
|
10
|
-
class: "text-xl font-semibold mt-10 mb-4 text-center"
|
|
11
|
-
};
|
|
12
|
-
const _hoisted_2 = { key: 1 };
|
|
13
|
-
const _hoisted_3 = { class: "flex items-center justify-center mb-2" };
|
|
14
|
-
const _hoisted_4 = { class: "bg-white dark:bg-dark shadow-xl p-4 lg:max-w-[800px] mx-auto border-solid border" };
|
|
15
|
-
const _hoisted_5 = ["src"];
|
|
16
|
-
const _hoisted_6 = {
|
|
17
|
-
key: 0,
|
|
18
|
-
class: "mt-2 text-sm text-center text-base-dark dark:text-white"
|
|
19
|
-
};
|
|
20
|
-
const _hoisted_7 = {
|
|
21
|
-
key: 1,
|
|
22
|
-
class: "flex justify-end mt-2"
|
|
23
|
-
};
|
|
24
|
-
const _hoisted_8 = ["innerHTML"];
|
|
25
|
-
const _hoisted_9 = { class: "flex justify-end" };
|
|
26
|
-
const _hoisted_10 = {
|
|
27
|
-
key: 3,
|
|
28
|
-
class: /* @__PURE__ */ normalizeClass(`columns-3xs mx-5 gap-2`)
|
|
29
|
-
};
|
|
30
|
-
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
31
|
-
__name: "EpCarousel",
|
|
32
|
-
props: {
|
|
33
|
-
carrouselImg: {},
|
|
34
|
-
title: {},
|
|
35
|
-
gallery: { type: Boolean, default: false },
|
|
36
|
-
puzzle: { type: Boolean, default: false },
|
|
37
|
-
sizeThumbnail: { default: "medium" },
|
|
38
|
-
isCenter: { type: Boolean, default: false },
|
|
39
|
-
labelClose: { default: "Fermer" },
|
|
40
|
-
labelRef: { default: "Référence" },
|
|
41
|
-
labelRefLib: { default: "Référence bibliographique" }
|
|
42
|
-
},
|
|
43
|
-
setup(__props) {
|
|
44
|
-
const props = __props;
|
|
45
|
-
const currentIndex = ref(0);
|
|
46
|
-
const dialog = ref(false);
|
|
47
|
-
const prevSlide = () => {
|
|
48
|
-
const isFirstSlide = currentIndex.value === 0;
|
|
49
|
-
const newIndex = isFirstSlide ? props.carrouselImg.length - 1 : currentIndex.value - 1;
|
|
50
|
-
currentIndex.value = newIndex;
|
|
51
|
-
};
|
|
52
|
-
const nextSlide = () => {
|
|
53
|
-
const isTheLastSlide = currentIndex.value === props.carrouselImg.length - 1;
|
|
54
|
-
const newIndex = isTheLastSlide ? 0 : currentIndex.value + 1;
|
|
55
|
-
currentIndex.value = newIndex;
|
|
56
|
-
};
|
|
57
|
-
const isCenterStyle = computed(() => {
|
|
58
|
-
return props.isCenter ? "justify-center" : "";
|
|
59
|
-
});
|
|
60
|
-
const managedIndex = ref(0);
|
|
61
|
-
const managedInfoModal = ref({ src: "", caption: "", bib: "" });
|
|
62
|
-
const newFocus = (index) => {
|
|
63
|
-
managedIndex.value = index;
|
|
64
|
-
managedInfoModal.value = {
|
|
65
|
-
src: props.carrouselImg[index].src,
|
|
66
|
-
caption: props.carrouselImg[index].caption,
|
|
67
|
-
bib: props.carrouselImg[index].bib
|
|
68
|
-
};
|
|
69
|
-
};
|
|
70
|
-
const managedPrevSlide = () => {
|
|
71
|
-
const isFirstSlide = managedIndex.value === 0;
|
|
72
|
-
const newIndex = isFirstSlide ? props.carrouselImg.length - 1 : managedIndex.value - 1;
|
|
73
|
-
managedIndex.value = newIndex;
|
|
74
|
-
managedInfoModal.value = {
|
|
75
|
-
src: props.carrouselImg[newIndex].src,
|
|
76
|
-
caption: props.carrouselImg[newIndex].caption,
|
|
77
|
-
bib: props.carrouselImg[newIndex].bib
|
|
78
|
-
};
|
|
79
|
-
};
|
|
80
|
-
const managedNextSlide = () => {
|
|
81
|
-
const isTheLastSlide = managedIndex.value === props.carrouselImg.length - 1;
|
|
82
|
-
const newIndex = isTheLastSlide ? 0 : managedIndex.value + 1;
|
|
83
|
-
managedIndex.value = newIndex;
|
|
84
|
-
managedInfoModal.value = {
|
|
85
|
-
src: props.carrouselImg[newIndex].src,
|
|
86
|
-
caption: props.carrouselImg[newIndex].caption,
|
|
87
|
-
bib: props.carrouselImg[newIndex].bib
|
|
88
|
-
};
|
|
89
|
-
};
|
|
90
|
-
const { carrouselImg, sizeThumbnail } = toRefs(props);
|
|
91
|
-
return (_ctx, _cache) => {
|
|
92
|
-
var _a, _b;
|
|
93
|
-
return openBlock(), createElementBlock(Fragment, null, [
|
|
94
|
-
props.title ? (openBlock(), createElementBlock("h2", _hoisted_1, toDisplayString(props.title), 1)) : createCommentVNode("", true),
|
|
95
|
-
!_ctx.gallery ? (openBlock(), createElementBlock("div", _hoisted_2, [
|
|
96
|
-
createElementVNode("div", _hoisted_3, [
|
|
97
|
-
createElementVNode("button", {
|
|
98
|
-
class: "p-2",
|
|
99
|
-
onClick: prevSlide
|
|
100
|
-
}, [
|
|
101
|
-
createVNode(_sfc_main$1, { "icon-path": unref(mdiChevronLeftCircleOutline) }, null, 8, ["icon-path"])
|
|
102
|
-
]),
|
|
103
|
-
createTextVNode(" " + toDisplayString(currentIndex.value + 1) + "/" + toDisplayString(unref(carrouselImg).length) + " ", 1),
|
|
104
|
-
createElementVNode("button", {
|
|
105
|
-
class: "p-2",
|
|
106
|
-
onClick: nextSlide
|
|
107
|
-
}, [
|
|
108
|
-
createVNode(_sfc_main$1, { "icon-path": unref(mdiChevronRightCircleOutline) }, null, 8, ["icon-path"])
|
|
109
|
-
])
|
|
110
|
-
]),
|
|
111
|
-
createElementVNode("div", _hoisted_4, [
|
|
112
|
-
createElementVNode("img", {
|
|
113
|
-
src: unref(carrouselImg)[currentIndex.value].src,
|
|
114
|
-
alt: "image",
|
|
115
|
-
class: "rounded-sm m-auto"
|
|
116
|
-
}, null, 8, _hoisted_5),
|
|
117
|
-
((_a = unref(carrouselImg)[currentIndex.value]) == null ? void 0 : _a.caption) ? (openBlock(), createElementBlock("div", _hoisted_6, toDisplayString(unref(carrouselImg)[currentIndex.value].caption), 1)) : createCommentVNode("", true),
|
|
118
|
-
((_b = unref(carrouselImg)[currentIndex.value]) == null ? void 0 : _b.bib) ? (openBlock(), createElementBlock("div", _hoisted_7, [
|
|
119
|
-
createVNode(_sfc_main$2, {
|
|
120
|
-
type: "primary",
|
|
121
|
-
onClick: _cache[0] || (_cache[0] = ($event) => dialog.value = true),
|
|
122
|
-
dark: ""
|
|
123
|
-
}, {
|
|
124
|
-
default: withCtx(() => [
|
|
125
|
-
createTextVNode(toDisplayString(_ctx.labelRef), 1)
|
|
126
|
-
]),
|
|
127
|
-
_: 1
|
|
128
|
-
})
|
|
129
|
-
])) : createCommentVNode("", true)
|
|
130
|
-
]),
|
|
131
|
-
createVNode(_sfc_main$3, {
|
|
132
|
-
modelValue: dialog.value,
|
|
133
|
-
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => dialog.value = $event),
|
|
134
|
-
title: _ctx.labelRefLib
|
|
135
|
-
}, {
|
|
136
|
-
default: withCtx(() => [
|
|
137
|
-
createElementVNode("div", {
|
|
138
|
-
innerHTML: unref(carrouselImg)[currentIndex.value].bib
|
|
139
|
-
}, null, 8, _hoisted_8),
|
|
140
|
-
createElementVNode("div", _hoisted_9, [
|
|
141
|
-
createVNode(_sfc_main$2, {
|
|
142
|
-
onClick: _cache[1] || (_cache[1] = ($event) => dialog.value = false),
|
|
143
|
-
type: "primary",
|
|
144
|
-
dark: ""
|
|
145
|
-
}, {
|
|
146
|
-
default: withCtx(() => [
|
|
147
|
-
createTextVNode(toDisplayString(_ctx.labelClose), 1)
|
|
148
|
-
]),
|
|
149
|
-
_: 1
|
|
150
|
-
})
|
|
151
|
-
])
|
|
152
|
-
]),
|
|
153
|
-
_: 1
|
|
154
|
-
}, 8, ["modelValue", "title"])
|
|
155
|
-
])) : !_ctx.puzzle ? (openBlock(), createElementBlock("div", {
|
|
156
|
-
key: 2,
|
|
157
|
-
class: normalizeClass(`flex flex-wrap ${isCenterStyle.value}`)
|
|
158
|
-
}, [
|
|
159
|
-
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(carrouselImg), (image, index) => {
|
|
160
|
-
return openBlock(), createBlock(_sfc_main$4, {
|
|
161
|
-
key: `image-${image == null ? void 0 : image.uid}`,
|
|
162
|
-
src: image.src,
|
|
163
|
-
bib: image.bib,
|
|
164
|
-
caption: image.caption,
|
|
165
|
-
"label-ref": _ctx.labelRef,
|
|
166
|
-
"label-close": _ctx.labelClose,
|
|
167
|
-
"size-thumbnail": unref(sizeThumbnail),
|
|
168
|
-
"managed-modal": "",
|
|
169
|
-
onNewFocus: ($event) => newFocus(index),
|
|
170
|
-
"info-modal": managedInfoModal.value,
|
|
171
|
-
onPrevSlide: managedPrevSlide,
|
|
172
|
-
onNextSlide: managedNextSlide
|
|
173
|
-
}, null, 8, ["src", "bib", "caption", "label-ref", "label-close", "size-thumbnail", "onNewFocus", "info-modal"]);
|
|
174
|
-
}), 128))
|
|
175
|
-
], 2)) : _ctx.puzzle ? (openBlock(), createElementBlock("div", _hoisted_10, [
|
|
176
|
-
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(carrouselImg), (image, index) => {
|
|
177
|
-
return openBlock(), createBlock(_sfc_main$4, {
|
|
178
|
-
key: `image-${image == null ? void 0 : image.uid}`,
|
|
179
|
-
src: image.src,
|
|
180
|
-
bib: image.bib,
|
|
181
|
-
caption: image.caption,
|
|
182
|
-
"label-ref": _ctx.labelRef,
|
|
183
|
-
"label-close": _ctx.labelClose,
|
|
184
|
-
puzzle: "",
|
|
185
|
-
"managed-modal": "",
|
|
186
|
-
onNewFocus: ($event) => newFocus(index),
|
|
187
|
-
"info-modal": managedInfoModal.value,
|
|
188
|
-
onPrevSlide: managedPrevSlide,
|
|
189
|
-
onNextSlide: managedNextSlide
|
|
190
|
-
}, null, 8, ["src", "bib", "caption", "label-ref", "label-close", "onNewFocus", "info-modal"]);
|
|
191
|
-
}), 128))
|
|
192
|
-
])) : createCommentVNode("", true)
|
|
193
|
-
], 64);
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
});
|
|
1
|
+
import _sfc_main from "./EpCarousel.vue.js";
|
|
197
2
|
export {
|
|
198
3
|
_sfc_main as default
|
|
199
4
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EpCarousel.vue2.js","sources":[
|
|
1
|
+
{"version":3,"file":"EpCarousel.vue2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _sfc_main from "./EpHierarchy.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-819ce9ba"]]);
|
|
5
5
|
export {
|
|
6
6
|
Comp as default
|
|
7
7
|
};
|
|
@@ -19,7 +19,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
19
19
|
labelClose: { default: "fermer" },
|
|
20
20
|
isCluster: { type: Boolean, default: false },
|
|
21
21
|
colorPath: { default: "stroke-yellow-400" },
|
|
22
|
-
colorRect: { default: "fill-
|
|
22
|
+
colorRect: { default: "fill-red-400" }
|
|
23
23
|
},
|
|
24
24
|
setup(__props) {
|
|
25
25
|
const props = __props;
|
|
@@ -40,7 +40,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
40
40
|
currentNode.value = null;
|
|
41
41
|
};
|
|
42
42
|
const components = /* @__PURE__ */ Object.assign({
|
|
43
|
-
"../basics/EpAvatar.vue": () => import("../basics/EpAvatar.
|
|
43
|
+
"../basics/EpAvatar.vue": () => import("../basics/EpAvatar.vue.js"),
|
|
44
44
|
"../basics/EpBadge.vue": () => import("../basics/EpBadge.vue.js"),
|
|
45
45
|
"../basics/EpBtn.vue": () => import("../basics/EpBtn.vue2.js"),
|
|
46
46
|
"../basics/EpCard.vue": () => import("../basics/EpCard.vue2.js"),
|
|
@@ -62,7 +62,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
62
62
|
"../basics/EpText.vue": () => import("../basics/EpText.vue2.js"),
|
|
63
63
|
"./EpAudio.vue": () => import("./EpAudio.vue2.js"),
|
|
64
64
|
"./EpCardLink.vue": () => import("./EpCardLink.vue2.js"),
|
|
65
|
-
"./EpCarousel.vue": () => import("./EpCarousel.
|
|
65
|
+
"./EpCarousel.vue": () => import("./EpCarousel.vue2.js"),
|
|
66
66
|
"./EpHierarchy.vue": () => import("./EpHierarchy.vue.js"),
|
|
67
67
|
"./EpIframe.vue": () => import("./EpIframe.vue2.js"),
|
|
68
68
|
"./EpKatex.vue": () => import("./EpKatex.vue.js"),
|
|
@@ -73,7 +73,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
73
73
|
"./EpSoftware.vue": () => import("./EpSoftware.vue2.js"),
|
|
74
74
|
"./EpSvg.vue": () => import("./EpSvg.vue2.js"),
|
|
75
75
|
"./EpTerm.vue": () => import("./EpTerm.vue2.js"),
|
|
76
|
-
"./EpTimeLine.vue": () => import("./EpTimeLine.
|
|
76
|
+
"./EpTimeLine.vue": () => import("./EpTimeLine.vue.js"),
|
|
77
77
|
"./EpVideo.vue": () => import("./EpVideo.vue2.js"),
|
|
78
78
|
"./EpVideoPanopto.vue": () => import("./EpVideoPanopto.vue2.js"),
|
|
79
79
|
"./EpWordDef.vue": () => import("./EpWordDef.vue2.js"),
|
|
@@ -82,7 +82,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
82
82
|
"../signages/EpHeader.vue": () => import("../signages/EpHeader.vue2.js"),
|
|
83
83
|
"../signages/EpNothing.vue": () => import("../signages/EpNothing.vue.js"),
|
|
84
84
|
"../signages/EpQuote.vue": () => import("../signages/EpQuote.vue2.js"),
|
|
85
|
-
"../signages/EpSkeleton.vue": () => import("../signages/EpSkeleton.
|
|
85
|
+
"../signages/EpSkeleton.vue": () => import("../signages/EpSkeleton.vue.js")
|
|
86
86
|
});
|
|
87
87
|
const currentRenderComponent = computed(() => {
|
|
88
88
|
if (!currentNode.value || !currentNode.value.component) {
|
|
@@ -205,13 +205,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
205
205
|
createElementVNode("div", {
|
|
206
206
|
ref_key: "treeWrapper",
|
|
207
207
|
ref: treeWrapper,
|
|
208
|
-
class: "tree-wrapper mx-auto",
|
|
208
|
+
class: "ep-tree-wrapper mx-auto",
|
|
209
209
|
style: normalizeStyle({ maxHeight: maxH.value, maxWidth: maxW.value })
|
|
210
210
|
}, [
|
|
211
211
|
createElementVNode("div", {
|
|
212
212
|
ref_key: "treeContainer",
|
|
213
213
|
ref: treeContainer,
|
|
214
|
-
class: "tree-container"
|
|
214
|
+
class: "ep-tree-container"
|
|
215
215
|
}, null, 512)
|
|
216
216
|
], 4),
|
|
217
217
|
currentNode.value ? (openBlock(), createBlock(_sfc_main$1, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EpHierarchy.vue2.js","sources":["../../../src/components/medias/EpHierarchy.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, onMounted, computed, defineAsyncComponent } from \"vue\";\nimport {\n hierarchy,\n tree,\n cluster,\n type HierarchyPointLink,\n type HierarchyPointNode,\n} from \"d3-hierarchy\";\nimport * as d3 from \"d3-selection\";\nimport { linkVertical, linkHorizontal } from \"d3-shape\";\nimport * as d3Zoom from \"d3-zoom\";\nimport type { TreeNode } from \"~/types/Hierarchy\";\nimport type { NestedComponents } from \"~/types/Component\";\nimport { useComponent } from \"~/composables/useComponent\";\nimport EpModal from \"~/components/interactions/EpModal.vue\";\nimport EpBtn from \"~/components/basics/EpBtn.vue\";\nimport { useRenderText } from \"~/composables/useRenderText\";\nimport type { EpHierarchyProps } from \"~/types/medias/EpHierarchy\";\n\nconst props = withDefaults(defineProps<EpHierarchyProps>(), {\n labelClose: \"fermer\",\n maxWidth: 800,\n maxHeight: 600,\n isCluster: false,\n colorRect: \"fill-main-color-400\",\n colorPath: \"stroke-yellow-400\",\n});\n\nconst treeContainer = ref<HTMLDivElement | null>(null);\nconst treeWrapper = ref<HTMLDivElement | null>(null);\n\n/* control modal */\ntype ShowNode = {\n title: string;\n text?: string;\n component?: NestedComponents;\n};\n\nconst currentNode = ref<ShowNode | null>(null);\nconst showModal = ref(false);\n\nconst handleNodeClick = (node: TreeNode) => {\n currentNode.value = {\n title: node.name,\n text: node.text,\n component: node.component,\n };\n showModal.value = true;\n};\n\nconst closeModal = () => {\n showModal.value = false;\n currentNode.value = null;\n};\n//nested component\n\nconst components = import.meta.glob([\n \"./*.vue\", // all components in medias (same folder)\n \"../basics/*.vue\", // components/charts/\n \"../signages/*.vue\", // components/signages/\n]);\n\nconst currentRenderComponent = computed(() => {\n if (!currentNode.value || !currentNode.value.component) {\n return null;\n }\n\n const { path, name } = useComponent(currentNode.value.component.type);\n //console.log(path, name)\n let fullPath = \"\";\n if (path === \"medias\") {\n fullPath = `./${name}.vue`;\n } else {\n fullPath = `../${path}/${name}.vue`;\n }\n //console.log(fullPath)\n const loader = components[fullPath] as\n | (() => Promise<{ default: NestedComponents }>)\n | undefined;\n\n if (!loader) {\n console.warn(`Component not found: ${fullPath}`);\n return null; // or defineAsyncComponent(() => import('../fallbacks/EpNothing.vue'))\n }\n\n return defineAsyncComponent(loader);\n});\n\nonMounted(() => {\n if (!treeContainer.value) return;\n\n if (props.isCluster) {\n clusterView();\n } else {\n treeView();\n }\n});\n\nconst treeView = () => {\n const rectW = 130;\n const rectH = 40;\n const margin = { top: 40, right: 40, bottom: 40, left: 40 };\n\n const root = hierarchy<TreeNode>(props.nodes);\n //const totalLeafCount = root.leaves().length\n const width = Math.max(props.maxWidth);\n const height = props.maxHeight;\n\n const treeLayout = tree<TreeNode>().nodeSize([170, 100]); // [x spacing, y spacing]\n\n const treeData = treeLayout(root);\n\n const svg = d3\n .select(treeContainer.value)\n .append(\"svg\")\n .attr(\"width\", width)\n .attr(\"height\", height);\n\n const g = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${margin.left}, ${margin.top})`);\n\n const zoom = d3Zoom\n .zoom<SVGSVGElement, unknown>()\n .scaleExtent([0.5, 2])\n .on(\"zoom\", (event) => {\n g.attr(\"transform\", event.transform);\n });\n\n svg.call(zoom);\n\n const centerX = width / 2 - treeData.x;\n const centerY = 30; //height / 2 - treeData.y\n const identity = (d3Zoom as any).zoomIdentity;\n svg.call(zoom.transform, identity.translate(centerX, centerY));\n\n // Links\n const linkPath = linkVertical<\n HierarchyPointLink<TreeNode>,\n HierarchyPointNode<TreeNode>\n >()\n .x((d) => d.x)\n .y((d) => d.y);\n\n g.selectAll(\"path.link\")\n .data(treeData.links())\n .enter()\n .append(\"path\")\n .attr(\"d\", (d) => linkPath(d))\n .attr(\"class\", (d) => {\n const link = d.target.data.active\n ? `${props.colorPath} stroke-2`\n : \"stroke-black dark:stroke-white\";\n return `${link} link fill-none`;\n });\n\n // Nodes\n const node = g\n .selectAll(\"g.node\")\n .data(treeData.descendants())\n .enter()\n .append(\"g\")\n .attr(\"class\", \"node\")\n .attr(\"transform\", (d) => `translate(${d.x}, ${d.y})`)\n .style(\"cursor\", (d) =>\n d.data.component || d.data.text ? \"pointer\" : \"default\"\n )\n .each(function (d) {\n if (d.data.component || d.data.text) {\n d3.select(this).on(\"click\", (_event) => handleNodeClick(d.data));\n }\n });\n //.style('cursor', 'pointer')\n //.on('click', (_event, d) => handleNodeClick(d.data))\n\n node.each(function (d) {\n const group = d3.select(this);\n\n // Append text temporarily\n const text = group\n .append(\"text\")\n .attr(\"class\", \"text-sm font-semibold fill-black dark:fill-white\")\n .attr(\"text-anchor\", \"middle\")\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"dy\", \".35em\")\n .text(d.data.name);\n\n // Get bounding box to determine text size\n const bbox = (text.node() as SVGTextElement).getBBox();\n const paddingX = 10;\n const paddingY = 10;\n\n const width = bbox.width + paddingX * 2;\n const height = bbox.height + paddingY * 2;\n\n // Draw rect using text size\n group\n .insert(\"rect\", \"text\")\n .attr(\"class\", props.colorRect)\n .attr(\"x\", -width / 2)\n .attr(\"y\", -height / 2)\n .attr(\"width\", width)\n .attr(\"height\", height)\n .attr(\"rx\", 4)\n .attr(\"ry\", 4);\n });\n\n node\n .append(\"text\")\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"dy\", \".35em\")\n .attr(\"class\", \"text-sm font-semibold fill-white dark:fill-black\")\n .attr(\"text-anchor\", \"middle\")\n .text((d) => d.data.name)\n .style(\"pointer-events\", \"none\");\n};\n\nconst clusterView = () => {\n const rectW = 130;\n const rectH = 40;\n const margin = { top: 40, right: 40, bottom: 40, left: 40 };\n\n const root = hierarchy<TreeNode>(props.nodes);\n //const totalLeafCount = root.leaves().length\n const width = Math.max(props.maxWidth);\n const height = props.maxHeight;\n\n const treeLayout = cluster<TreeNode>().nodeSize([130, 130]); // [x spacing, y spacing]\n\n const treeData = treeLayout(root);\n\n const svg = d3\n .select(treeContainer.value)\n .append(\"svg\")\n .attr(\"width\", width)\n .attr(\"height\", height);\n\n const g = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${margin.left}, ${margin.top})`);\n\n const zoom = d3Zoom\n .zoom<SVGSVGElement, unknown>()\n .scaleExtent([0.1, 4])\n .on(\"zoom\", (event) => {\n g.attr(\"transform\", event.transform);\n });\n\n svg.call(zoom);\n\n const centerX = 30;\n const centerY = height / 2 - treeData.x;\n const identity = (d3Zoom as any).zoomIdentity;\n svg.call(zoom.transform, identity.translate(centerX, centerY));\n\n // Links\n const linkPath = linkHorizontal<\n HierarchyPointLink<TreeNode>,\n HierarchyPointNode<TreeNode>\n >()\n .x((d) => d.y)\n .y((d) => d.x);\n\n g.selectAll(\"path.link\")\n .data(treeData.links())\n .enter()\n .append(\"path\")\n .attr(\"d\", (d) => linkPath(d))\n .attr(\"class\", (d) => {\n const link = d.target.data.active\n ? `${props.colorPath} stroke-2`\n : \"stroke-black dark:stroke-white\";\n return `${link} link fill-none`;\n });\n\n // Nodes\n const node = g\n .selectAll(\"g.node\")\n .data(treeData.descendants())\n .enter()\n .append(\"g\")\n .attr(\"class\", \"node\")\n .attr(\"transform\", (d) => `translate(${d.y}, ${d.x})`)\n .style(\"cursor\", (d) =>\n d.data.component || d.data.text ? \"pointer\" : \"default\"\n )\n .each(function (d) {\n if (d.data.component || d.data.text) {\n d3.select(this).on(\"click\", (_event) => handleNodeClick(d.data));\n }\n });\n //.style('cursor', 'pointer')\n //.on('click', (_event, d) => handleNodeClick(d.data))\n\n node.each(function (d) {\n const group = d3.select(this);\n\n // Append text temporarily\n const text = group\n .append(\"text\")\n .attr(\"class\", \"text-sm font-semibold fill-black dark:fill-white\")\n .attr(\"text-anchor\", \"middle\")\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"dy\", \".35em\")\n .text(d.data.name);\n\n // Get bounding box to determine text size\n const bbox = (text.node() as SVGTextElement).getBBox();\n const paddingX = 10;\n const paddingY = 10;\n\n const width = bbox.width + paddingX * 2;\n const height = bbox.height + paddingY * 2;\n\n // Draw rect using text size\n group\n .insert(\"rect\", \"text\")\n .attr(\"class\", props.colorRect)\n .attr(\"x\", -width / 2)\n .attr(\"y\", -height / 2)\n .attr(\"width\", width)\n .attr(\"height\", height)\n .attr(\"rx\", 4)\n .attr(\"ry\", 4);\n });\n\n node\n .append(\"text\")\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"dy\", \".35em\")\n .attr(\"class\", \"text-sm font-semibold fill-white dark:fill-black\")\n .attr(\"text-anchor\", \"middle\")\n .text((d) => d.data.name)\n .style(\"pointer-events\", \"none\");\n};\n\nconst maxW = computed(() => {\n return `${props.maxWidth.toString()}px`;\n});\n\nconst maxH = computed(() => {\n return `${props.maxWidth.toString()}px`;\n});\n</script>\n\n<template>\n <div>\n <div\n ref=\"treeWrapper\"\n class=\"tree-wrapper mx-auto\"\n :style=\"{ maxHeight: maxH, maxWidth: maxW }\"\n >\n <div ref=\"treeContainer\" class=\"tree-container\" />\n </div>\n <EpModal v-model=\"showModal\" :title=\"currentNode.title\" v-if=\"currentNode\">\n <div v-if=\"currentNode.text\" v-html=\"useRenderText(currentNode.text)\" />\n <template v-if=\"currentRenderComponent && currentNode.component\">\n <component\n :is=\"currentRenderComponent\"\n v-bind=\"{ ...currentNode.component.data }\"\n />\n </template>\n <div class=\"flex justify-end\">\n <EpBtn @click=\"closeModal\" type=\"error\" outlined rounded>{{\n labelClose\n }}</EpBtn>\n </div>\n </EpModal>\n </div>\n</template>\n\n<style scoped>\n.tree-wrapper {\n overflow: auto;\n border: 1px solid #ddd;\n}\n\n.tree-container {\n width: 100%;\n overflow-x: auto;\n}\n</style>\n"],"names":["width","height","_createElementBlock","_createElementVNode","_normalizeStyle","_createBlock","EpModal","_unref","_openBlock","_resolveDynamicComponent","_normalizeProps","_mergeProps","_createVNode","EpBtn","labelClose"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EpHierarchy.vue2.js","sources":["../../../src/components/medias/EpHierarchy.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, onMounted, computed, defineAsyncComponent } from \"vue\";\nimport {\n hierarchy,\n tree,\n cluster,\n type HierarchyPointLink,\n type HierarchyPointNode,\n} from \"d3-hierarchy\";\nimport * as d3 from \"d3-selection\";\nimport { linkVertical, linkHorizontal } from \"d3-shape\";\nimport * as d3Zoom from \"d3-zoom\";\nimport type { TreeNode } from \"~/types/Hierarchy\";\nimport type { NestedComponents } from \"~/types/Component\";\nimport { useComponent } from \"~/composables/useComponent\";\nimport EpModal from \"~/components/interactions/EpModal.vue\";\nimport EpBtn from \"~/components/basics/EpBtn.vue\";\nimport { useRenderText } from \"~/composables/useRenderText\";\nimport type { EpHierarchyProps } from \"~/types/medias/EpHierarchy\";\n\nconst props = withDefaults(defineProps<EpHierarchyProps>(), {\n labelClose: \"fermer\",\n maxWidth: 800,\n maxHeight: 600,\n isCluster: false,\n colorRect: \"fill-red-400\",\n colorPath: \"stroke-yellow-400\",\n});\n\nconst treeContainer = ref<HTMLDivElement | null>(null);\nconst treeWrapper = ref<HTMLDivElement | null>(null);\n\n/* control modal */\ntype ShowNode = {\n title: string;\n text?: string;\n component?: NestedComponents;\n};\n\nconst currentNode = ref<ShowNode | null>(null);\nconst showModal = ref(false);\n\nconst handleNodeClick = (node: TreeNode) => {\n currentNode.value = {\n title: node.name,\n text: node.text,\n component: node.component,\n };\n showModal.value = true;\n};\n\nconst closeModal = () => {\n showModal.value = false;\n currentNode.value = null;\n};\n//nested component\n\nconst components = import.meta.glob([\n \"./*.vue\", // all components in medias (same folder)\n \"../basics/*.vue\", // components/charts/\n \"../signages/*.vue\", // components/signages/\n]);\n\nconst currentRenderComponent = computed(() => {\n if (!currentNode.value || !currentNode.value.component) {\n return null;\n }\n\n const { path, name } = useComponent(currentNode.value.component.type);\n //console.log(path, name)\n let fullPath = \"\";\n if (path === \"medias\") {\n fullPath = `./${name}.vue`;\n } else {\n fullPath = `../${path}/${name}.vue`;\n }\n //console.log(fullPath)\n const loader = components[fullPath] as\n | (() => Promise<{ default: NestedComponents }>)\n | undefined;\n\n if (!loader) {\n console.warn(`Component not found: ${fullPath}`);\n return null; // or defineAsyncComponent(() => import('../fallbacks/EpNothing.vue'))\n }\n\n return defineAsyncComponent(loader);\n});\n\nonMounted(() => {\n if (!treeContainer.value) return;\n\n if (props.isCluster) {\n clusterView();\n } else {\n treeView();\n }\n});\n\nconst treeView = () => {\n const rectW = 130;\n const rectH = 40;\n const margin = { top: 40, right: 40, bottom: 40, left: 40 };\n\n const root = hierarchy<TreeNode>(props.nodes);\n //const totalLeafCount = root.leaves().length\n const width = Math.max(props.maxWidth);\n const height = props.maxHeight;\n\n const treeLayout = tree<TreeNode>().nodeSize([170, 100]); // [x spacing, y spacing]\n\n const treeData = treeLayout(root);\n\n const svg = d3\n .select(treeContainer.value)\n .append(\"svg\")\n .attr(\"width\", width)\n .attr(\"height\", height);\n\n const g = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${margin.left}, ${margin.top})`);\n\n const zoom = d3Zoom\n .zoom<SVGSVGElement, unknown>()\n .scaleExtent([0.5, 2])\n .on(\"zoom\", (event) => {\n g.attr(\"transform\", event.transform);\n });\n\n svg.call(zoom);\n\n const centerX = width / 2 - treeData.x;\n const centerY = 30; //height / 2 - treeData.y\n const identity = (d3Zoom as any).zoomIdentity;\n svg.call(zoom.transform, identity.translate(centerX, centerY));\n\n // Links\n const linkPath = linkVertical<\n HierarchyPointLink<TreeNode>,\n HierarchyPointNode<TreeNode>\n >()\n .x((d) => d.x)\n .y((d) => d.y);\n\n g.selectAll(\"path.link\")\n .data(treeData.links())\n .enter()\n .append(\"path\")\n .attr(\"d\", (d) => linkPath(d))\n .attr(\"class\", (d) => {\n const link = d.target.data.active\n ? `${props.colorPath} stroke-2`\n : \"stroke-black dark:stroke-white\";\n return `${link} link fill-none`;\n });\n\n // Nodes\n const node = g\n .selectAll(\"g.node\")\n .data(treeData.descendants())\n .enter()\n .append(\"g\")\n .attr(\"class\", \"node\")\n .attr(\"transform\", (d) => `translate(${d.x}, ${d.y})`)\n .style(\"cursor\", (d) =>\n d.data.component || d.data.text ? \"pointer\" : \"default\"\n )\n .each(function (d) {\n if (d.data.component || d.data.text) {\n d3.select(this).on(\"click\", (_event) => handleNodeClick(d.data));\n }\n });\n //.style('cursor', 'pointer')\n //.on('click', (_event, d) => handleNodeClick(d.data))\n\n node.each(function (d) {\n const group = d3.select(this);\n\n // Append text temporarily\n const text = group\n .append(\"text\")\n .attr(\"class\", \"text-sm font-semibold fill-black dark:fill-white\")\n .attr(\"text-anchor\", \"middle\")\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"dy\", \".35em\")\n .text(d.data.name);\n\n // Get bounding box to determine text size\n const bbox = (text.node() as SVGTextElement).getBBox();\n const paddingX = 10;\n const paddingY = 10;\n\n const width = bbox.width + paddingX * 2;\n const height = bbox.height + paddingY * 2;\n\n // Draw rect using text size\n group\n .insert(\"rect\", \"text\")\n .attr(\"class\", props.colorRect)\n .attr(\"x\", -width / 2)\n .attr(\"y\", -height / 2)\n .attr(\"width\", width)\n .attr(\"height\", height)\n .attr(\"rx\", 4)\n .attr(\"ry\", 4);\n });\n\n node\n .append(\"text\")\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"dy\", \".35em\")\n .attr(\"class\", \"text-sm font-semibold fill-white dark:fill-black\")\n .attr(\"text-anchor\", \"middle\")\n .text((d) => d.data.name)\n .style(\"pointer-events\", \"none\");\n};\n\nconst clusterView = () => {\n const rectW = 130;\n const rectH = 40;\n const margin = { top: 40, right: 40, bottom: 40, left: 40 };\n\n const root = hierarchy<TreeNode>(props.nodes);\n //const totalLeafCount = root.leaves().length\n const width = Math.max(props.maxWidth);\n const height = props.maxHeight;\n\n const treeLayout = cluster<TreeNode>().nodeSize([130, 130]); // [x spacing, y spacing]\n\n const treeData = treeLayout(root);\n\n const svg = d3\n .select(treeContainer.value)\n .append(\"svg\")\n .attr(\"width\", width)\n .attr(\"height\", height);\n\n const g = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${margin.left}, ${margin.top})`);\n\n const zoom = d3Zoom\n .zoom<SVGSVGElement, unknown>()\n .scaleExtent([0.1, 4])\n .on(\"zoom\", (event) => {\n g.attr(\"transform\", event.transform);\n });\n\n svg.call(zoom);\n\n const centerX = 30;\n const centerY = height / 2 - treeData.x;\n const identity = (d3Zoom as any).zoomIdentity;\n svg.call(zoom.transform, identity.translate(centerX, centerY));\n\n // Links\n const linkPath = linkHorizontal<\n HierarchyPointLink<TreeNode>,\n HierarchyPointNode<TreeNode>\n >()\n .x((d) => d.y)\n .y((d) => d.x);\n\n g.selectAll(\"path.link\")\n .data(treeData.links())\n .enter()\n .append(\"path\")\n .attr(\"d\", (d) => linkPath(d))\n .attr(\"class\", (d) => {\n const link = d.target.data.active\n ? `${props.colorPath} stroke-2`\n : \"stroke-black dark:stroke-white\";\n return `${link} link fill-none`;\n });\n\n // Nodes\n const node = g\n .selectAll(\"g.node\")\n .data(treeData.descendants())\n .enter()\n .append(\"g\")\n .attr(\"class\", \"node\")\n .attr(\"transform\", (d) => `translate(${d.y}, ${d.x})`)\n .style(\"cursor\", (d) =>\n d.data.component || d.data.text ? \"pointer\" : \"default\"\n )\n .each(function (d) {\n if (d.data.component || d.data.text) {\n d3.select(this).on(\"click\", (_event) => handleNodeClick(d.data));\n }\n });\n //.style('cursor', 'pointer')\n //.on('click', (_event, d) => handleNodeClick(d.data))\n\n node.each(function (d) {\n const group = d3.select(this);\n\n // Append text temporarily\n const text = group\n .append(\"text\")\n .attr(\"class\", \"text-sm font-semibold fill-black dark:fill-white\")\n .attr(\"text-anchor\", \"middle\")\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"dy\", \".35em\")\n .text(d.data.name);\n\n // Get bounding box to determine text size\n const bbox = (text.node() as SVGTextElement).getBBox();\n const paddingX = 10;\n const paddingY = 10;\n\n const width = bbox.width + paddingX * 2;\n const height = bbox.height + paddingY * 2;\n\n // Draw rect using text size\n group\n .insert(\"rect\", \"text\")\n .attr(\"class\", props.colorRect)\n .attr(\"x\", -width / 2)\n .attr(\"y\", -height / 2)\n .attr(\"width\", width)\n .attr(\"height\", height)\n .attr(\"rx\", 4)\n .attr(\"ry\", 4);\n });\n\n node\n .append(\"text\")\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"dy\", \".35em\")\n .attr(\"class\", \"text-sm font-semibold fill-white dark:fill-black\")\n .attr(\"text-anchor\", \"middle\")\n .text((d) => d.data.name)\n .style(\"pointer-events\", \"none\");\n};\n\nconst maxW = computed(() => {\n return `${props.maxWidth.toString()}px`;\n});\n\nconst maxH = computed(() => {\n return `${props.maxWidth.toString()}px`;\n});\n</script>\n\n<template>\n <div>\n <div\n ref=\"treeWrapper\"\n class=\"ep-tree-wrapper mx-auto\"\n :style=\"{ maxHeight: maxH, maxWidth: maxW }\"\n >\n <div ref=\"treeContainer\" class=\"ep-tree-container\" />\n </div>\n <EpModal v-model=\"showModal\" :title=\"currentNode.title\" v-if=\"currentNode\">\n <div v-if=\"currentNode.text\" v-html=\"useRenderText(currentNode.text)\" />\n <template v-if=\"currentRenderComponent && currentNode.component\">\n <component\n :is=\"currentRenderComponent\"\n v-bind=\"{ ...currentNode.component.data }\"\n />\n </template>\n <div class=\"flex justify-end\">\n <EpBtn @click=\"closeModal\" type=\"error\" outlined rounded>{{\n labelClose\n }}</EpBtn>\n </div>\n </EpModal>\n </div>\n</template>\n\n<style scoped>\n.ep-tree-wrapper {\n overflow: auto;\n border: 1px solid #ddd;\n}\n\n.ep-tree-container {\n width: 100%;\n overflow-x: auto;\n}\n</style>\n"],"names":["width","height","_createElementBlock","_createElementVNode","_normalizeStyle","_createBlock","EpModal","_unref","_openBlock","_resolveDynamicComponent","_normalizeProps","_mergeProps","_createVNode","EpBtn","labelClose"],"mappings":"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"}
|
|
@@ -2,7 +2,6 @@ import { defineComponent, computed, toRefs, createBlock, openBlock, unref, creat
|
|
|
2
2
|
import _sfc_main$2 from "../basics/EpBtn.vue.js";
|
|
3
3
|
import { mdiLinkVariant } from "@mdi/js";
|
|
4
4
|
import _sfc_main$1 from "../educationals/EpEdu.vue.js";
|
|
5
|
-
import useColors from "../../composables/useColors.js";
|
|
6
5
|
import { useRenderText } from "../../composables/useRenderText.js";
|
|
7
6
|
const _hoisted_1 = ["innerHTML"];
|
|
8
7
|
const _hoisted_2 = { class: "flex justify-center" };
|
|
@@ -30,10 +29,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
30
29
|
return mdiLinkVariant;
|
|
31
30
|
});
|
|
32
31
|
const hoverColor = computed(() => {
|
|
33
|
-
return `absolute
|
|
34
|
-
"bg",
|
|
35
|
-
"primarydark"
|
|
36
|
-
)} bottom-0 w-0 left-1/2 h-full -translate-x-1/2 transition-all ease-in-out duration-300 group-hover:w-[105%] -z-[1] group-focus:w-[105%]`;
|
|
32
|
+
return `absolute bg bottom-0 w-0 left-1/2 h-full -translate-x-1/2 transition-all ease-in-out duration-300 group-hover:w-[105%] -z-[1] group-focus:w-[105%]`;
|
|
37
33
|
});
|
|
38
34
|
const { url, title, intentions, mandateLevel, hideIcon } = toRefs(props);
|
|
39
35
|
return (_ctx, _cache) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EpLink.vue.js","sources":["../../../src/components/medias/EpLink.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, toRefs } from \"vue\";\nimport EpBtn from \"~/components/basics/EpBtn.vue\";\nimport { mdiLinkVariant } from \"@mdi/js\";\nimport EpEdu from \"~/components/educationals/EpEdu.vue\";\nimport
|
|
1
|
+
{"version":3,"file":"EpLink.vue.js","sources":["../../../src/components/medias/EpLink.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, toRefs } from \"vue\";\nimport EpBtn from \"~/components/basics/EpBtn.vue\";\nimport { mdiLinkVariant } from \"@mdi/js\";\nimport EpEdu from \"~/components/educationals/EpEdu.vue\";\nimport { useRenderText } from \"~/composables/useRenderText\";\nimport type { EpLinkProps } from \"~/types/medias/EpLink\";\n\nconst props = withDefaults(defineProps<EpLinkProps>(), {\n type: \"neutral\",\n hideIcon: false,\n});\n\nconst renderIcon = computed(() => {\n if (props.icon) {\n return props.icon;\n }\n return mdiLinkVariant;\n});\n\nconst hoverColor = computed(() => {\n return `absolute bg bottom-0 w-0 left-1/2 h-full -translate-x-1/2 transition-all ease-in-out duration-300 group-hover:w-[105%] -z-[1] group-focus:w-[105%]`;\n});\n\nconst { url, title, intentions, mandateLevel, hideIcon } = toRefs(props);\n</script>\n\n<template>\n <EpEdu\n :title=\"labelCard\"\n :icon=\"renderIcon\"\n flat\n :hideIcon=\"hideIcon\"\n :mandateLevel=\"mandateLevel\"\n :labelIntentions=\"labelIntentions\"\n >\n <template #intentions v-if=\"intentions\">\n <div v-html=\"useRenderText(intentions)\" />\n </template>\n <template #content>\n <div class=\"flex justify-center\">\n <div class=\"w-4/5\">\n <EpBtn\n block\n rounded\n type=\"primary\"\n :prependIcon=\"renderIcon\"\n :href=\"url\"\n extraClass=\"group font-medium tracking-wide relative inline-flex justify-center overflow-hidden z-10 transition-all duration-300 ease-in-out \"\n >\n <div>\n <span class=\"font-medium tracking-wider\">{{ title }}</span>\n <span :class=\"hoverColor\" />\n </div>\n </EpBtn>\n </div>\n </div>\n </template>\n </EpEdu>\n</template>\n"],"names":["_createBlock","EpEdu","labelCard","_unref","labelIntentions","_createElementVNode","_createVNode","EpBtn","_toDisplayString"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAQA,UAAM,QAAQ;AAKd,UAAM,aAAa,SAAS,MAAM;AAChC,UAAI,MAAM,MAAM;AACd,eAAO,MAAM;AAAA,MACf;AACA,aAAO;AAAA,IACT,CAAC;AAED,UAAM,aAAa,SAAS,MAAM;AAChC,aAAO;AAAA,IACT,CAAC;AAED,UAAM,EAAE,KAAK,OAAO,YAAY,cAAc,SAAA,IAAa,OAAO,KAAK;;0BAIrEA,YA8BQC,aAAA;AAAA,QA7BL,OAAOC,KAAAA;AAAAA,QACP,MAAM,WAAA;AAAA,QACP,MAAA;AAAA,QACC,UAAUC,MAAA,QAAA;AAAA,QACV,cAAcA,MAAA,YAAA;AAAA,QACd,iBAAiBC,KAAAA;AAAAA,MAAAA;QAKP,iBACT,MAgBM;AAAA,UAhBNC,mBAgBM,OAhBN,YAgBM;AAAA,YAfJA,mBAcM,OAdN,YAcM;AAAA,cAbJC,YAYQC,aAAA;AAAA,gBAXN,OAAA;AAAA,gBACA,SAAA;AAAA,gBACA,MAAK;AAAA,gBACJ,aAAa,WAAA;AAAA,gBACb,MAAMJ,MAAA,GAAA;AAAA,gBACP,YAAW;AAAA,cAAA;iCAEX,MAGM;AAAA,kBAHNE,mBAGM,OAAA,MAAA;AAAA,oBAFJA,mBAA2D,QAA3D,YAA2DG,gBAAfL,MAAA,KAAA,CAAK,GAAA,CAAA;AAAA,oBACjDE,mBAA4B,QAAA;AAAA,sBAArB,sBAAO,WAAA,KAAU;AAAA,oBAAA;;;;;;;;;;QAhBNF,MAAA,UAAA;gBAAjB;AAAA,sBACT,MAA0C;AAAA,YAA1CE,mBAA0C,OAAA;AAAA,cAArC,WAAQF,MAAA,aAAA,EAAcA,MAAA,UAAA,CAAU;AAAA,YAAA;;;;;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _sfc_main from "./EpSensibleImage.vue2.js";
|
|
2
2
|
/* empty css */
|
|
3
3
|
import _export_sfc from "../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
-
const EpSensibleImage = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
4
|
+
const EpSensibleImage = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-b3ee44a0"]]);
|
|
5
5
|
export {
|
|
6
6
|
EpSensibleImage as default
|
|
7
7
|
};
|
|
@@ -30,8 +30,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
30
30
|
if (img && img.parentNode) {
|
|
31
31
|
const parent = img.parentNode;
|
|
32
32
|
if (parent instanceof HTMLElement) {
|
|
33
|
-
if (!parent.classList.contains("sensible-content")) {
|
|
34
|
-
parent.classList.add("sensible-content");
|
|
33
|
+
if (!parent.classList.contains("ep-sensible-content")) {
|
|
34
|
+
parent.classList.add("ep-sensible-content");
|
|
35
35
|
hasTarget.value = true;
|
|
36
36
|
parentRef.value = parent;
|
|
37
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EpSensibleImage.vue2.js","sources":["../../../src/components/medias/EpSensibleImage.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { watchEffect, ref } from \"vue\";\nimport EpImg from \"~/components/basics/EpImg.vue\";\nimport EpIcon from \"~/components/basics/EpIcon.vue\";\nimport { mdiEyeOffOutline } from \"@mdi/js\";\nimport { useRenderText } from \"~/composables/useRenderText\";\nimport type { EpSensibleImageProps } from \"~/types/medias/EpSensibleImage\";\n\nconst props = withDefaults(defineProps<EpSensibleImageProps>(), {\n alt: \"Image snfas\",\n cols: \"6\",\n label:\n \"<h5>Ce contenu est sensible</h5><p>Cliquez pour afficher l'image.</p>\",\n icon:mdiEyeOffOutline\n});\n\nconst epImg = ref<{ imgEl: HTMLImageElement | null } | null>(null);\nconst parentRef = ref<HTMLElement | null>(null);\nconst hasTarget = ref(false);\n\nwatchEffect(() => {\n const img = epImg.value?.imgEl;\n if (img && img.parentNode) {\n const parent = img.parentNode;\n\n // Placer le parent en position relative pour pouvoir positionner l’overlay\n if (parent instanceof HTMLElement) {\n if (!parent.classList.contains(\"sensible-content\")) {\n parent.classList.add(\"sensible-content\");\n hasTarget.value = true;\n parentRef.value = parent;\n }\n }\n }\n});\n\nconst show = ref(false);\nconst toggleShow = () => {\n if (!show.value) {\n show.value = true;\n }\n};\n</script>\n\n<template>\n <div class=\"relative\">\n <EpImg\n ref=\"epImg\"\n :src=\"src\"\n :alt=\"alt\"\n :height=\"height\"\n :width=\"width\"\n :caption=\"caption\"\n :bib=\"bib\"\n :title=\"title\"\n :cols=\"cols\"\n :no-modal=\"noModal\"\n />\n\n <!-- Overlay -->\n <Teleport v-if=\"hasTarget\" :to=\"parentRef\">\n <div\n v-if=\"!show\"\n id=\"overlay\"\n class=\"text-white absolute z-3 top-0 left-0 w-full h-full inset-0 bg-black/50 backdrop-blur-2xl flex flex-col gap-2 justify-center items-center text-center\"\n @click=\"toggleShow\"\n >\n <EpIcon\n :size=\"`${Number(cols) <= 2 ? '45' : '60'}`\"\n :icon-path=\"icon\"\n />\n <div\n :class=\"`${\n Number(cols) <= 2 ? 'hidden md:block' : 'md:text-base'\n } text-xs overflow-auto md:p-1`\"\n v-if=\"Number(cols) > 1\"\n v-html=\"useRenderText(label)\"\n />\n </div>\n </Teleport>\n </div>\n</template>\n\n<style scoped>\n.sensible-content {\n position: relative;\n}\n</style>\n"],"names":["_openBlock","_createElementBlock","_createVNode","EpImg","src","alt","height","width","caption","bib","title","cols","noModal","_createBlock","_Teleport","EpIcon","icon","_normalizeClass","_unref","label"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAgBA,UAAM,QAAQ,IAA+C,IAAI;AACjE,UAAM,YAAY,IAAwB,IAAI;AAC9C,UAAM,YAAY,IAAI,KAAK;AAE3B,gBAAY,MAAM;;AAChB,YAAM,OAAM,WAAM,UAAN,mBAAa;AACzB,UAAI,OAAO,IAAI,YAAY;AACzB,cAAM,SAAS,IAAI;AAGnB,YAAI,kBAAkB,aAAa;AACjC,cAAI,CAAC,OAAO,UAAU,SAAS,
|
|
1
|
+
{"version":3,"file":"EpSensibleImage.vue2.js","sources":["../../../src/components/medias/EpSensibleImage.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { watchEffect, ref } from \"vue\";\nimport EpImg from \"~/components/basics/EpImg.vue\";\nimport EpIcon from \"~/components/basics/EpIcon.vue\";\nimport { mdiEyeOffOutline } from \"@mdi/js\";\nimport { useRenderText } from \"~/composables/useRenderText\";\nimport type { EpSensibleImageProps } from \"~/types/medias/EpSensibleImage\";\n\nconst props = withDefaults(defineProps<EpSensibleImageProps>(), {\n alt: \"Image snfas\",\n cols: \"6\",\n label:\n \"<h5>Ce contenu est sensible</h5><p>Cliquez pour afficher l'image.</p>\",\n icon:mdiEyeOffOutline\n});\n\nconst epImg = ref<{ imgEl: HTMLImageElement | null } | null>(null);\nconst parentRef = ref<HTMLElement | null>(null);\nconst hasTarget = ref(false);\n\nwatchEffect(() => {\n const img = epImg.value?.imgEl;\n if (img && img.parentNode) {\n const parent = img.parentNode;\n\n // Placer le parent en position relative pour pouvoir positionner l’overlay\n if (parent instanceof HTMLElement) {\n if (!parent.classList.contains(\"ep-sensible-content\")) {\n parent.classList.add(\"ep-sensible-content\");\n hasTarget.value = true;\n parentRef.value = parent;\n }\n }\n }\n});\n\nconst show = ref(false);\nconst toggleShow = () => {\n if (!show.value) {\n show.value = true;\n }\n};\n</script>\n\n<template>\n <div class=\"relative\">\n <EpImg\n ref=\"epImg\"\n :src=\"src\"\n :alt=\"alt\"\n :height=\"height\"\n :width=\"width\"\n :caption=\"caption\"\n :bib=\"bib\"\n :title=\"title\"\n :cols=\"cols\"\n :no-modal=\"noModal\"\n />\n\n <!-- Overlay -->\n <Teleport v-if=\"hasTarget\" :to=\"parentRef\">\n <div\n v-if=\"!show\"\n id=\"overlay\"\n class=\"text-white absolute z-3 top-0 left-0 w-full h-full inset-0 bg-black/50 backdrop-blur-2xl flex flex-col gap-2 justify-center items-center text-center\"\n @click=\"toggleShow\"\n >\n <EpIcon\n :size=\"`${Number(cols) <= 2 ? '45' : '60'}`\"\n :icon-path=\"icon\"\n />\n <div\n :class=\"`${\n Number(cols) <= 2 ? 'hidden md:block' : 'md:text-base'\n } text-xs overflow-auto md:p-1`\"\n v-if=\"Number(cols) > 1\"\n v-html=\"useRenderText(label)\"\n />\n </div>\n </Teleport>\n </div>\n</template>\n\n<style scoped>\n.ep-sensible-content {\n position: relative;\n}\n</style>\n"],"names":["_openBlock","_createElementBlock","_createVNode","EpImg","src","alt","height","width","caption","bib","title","cols","noModal","_createBlock","_Teleport","EpIcon","icon","_normalizeClass","_unref","label"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAgBA,UAAM,QAAQ,IAA+C,IAAI;AACjE,UAAM,YAAY,IAAwB,IAAI;AAC9C,UAAM,YAAY,IAAI,KAAK;AAE3B,gBAAY,MAAM;;AAChB,YAAM,OAAM,WAAM,UAAN,mBAAa;AACzB,UAAI,OAAO,IAAI,YAAY;AACzB,cAAM,SAAS,IAAI;AAGnB,YAAI,kBAAkB,aAAa;AACjC,cAAI,CAAC,OAAO,UAAU,SAAS,qBAAqB,GAAG;AACrD,mBAAO,UAAU,IAAI,qBAAqB;AAC1C,sBAAU,QAAQ;AAClB,sBAAU,QAAQ;AAAA,UACpB;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAM,OAAO,IAAI,KAAK;AACtB,UAAM,aAAa,MAAM;AACvB,UAAI,CAAC,KAAK,OAAO;AACf,aAAK,QAAQ;AAAA,MACf;AAAA,IACF;;AAIE,aAAAA,UAAA,GAAAC,mBAmCM,OAnCN,YAmCM;AAAA,QAlCJC,YAWEC,aAAA;AAAA,mBAVI;AAAA,UAAJ,KAAI;AAAA,UACH,KAAKC,KAAAA;AAAAA,UACL,KAAKC,KAAAA;AAAAA,UACL,QAAQC,KAAAA;AAAAA,UACR,OAAOC,KAAAA;AAAAA,UACP,SAASC,KAAAA;AAAAA,UACT,KAAKC,KAAAA;AAAAA,UACL,OAAOC,KAAAA;AAAAA,UACP,MAAMC,KAAAA;AAAAA,UACN,YAAUC,KAAAA;AAAAA,QAAAA;QAIG,UAAA,sBAAhBC,YAmBWC,UAAA;AAAA;UAnBiB,IAAI,UAAA;AAAA,QAAA;WAErB,KAAA,sBADTb,mBAiBM,OAAA;AAAA;YAfJ,IAAG;AAAA,YACH,OAAM;AAAA,YACL,SAAO;AAAA,UAAA;YAERC,YAGEa,aAAA;AAAA,cAFC,MAAI,GAAK,OAAOJ,KAAAA,IAAI,KAAA,IAAA,OAAA,IAAA;AAAA,cACpB,aAAWK,KAAAA;AAAAA,YAAAA;YAMN,OAAOL,KAAAA,IAAI,IAAA,kBAJnBV,mBAME,OAAA;AAAA;cALC,OAAKgB,eAAA,GAAkB,OAAON,KAAAA,IAAI,KAAA,IAAA,oBAAA;cAInC,WAAQO,MAAA,aAAA,EAAcC,KAAAA,KAAK;AAAA,YAAA;;;;;;;"}
|
|
@@ -6,7 +6,7 @@ import _sfc_main$1 from "../educationals/EpEdu.vue.js";
|
|
|
6
6
|
import { useRenderText } from "../../composables/useRenderText.js";
|
|
7
7
|
import { mdiLaptop, mdiOpenInNew } from "@mdi/js";
|
|
8
8
|
const _hoisted_1 = ["innerHTML"];
|
|
9
|
-
const _hoisted_2 = { class: "flex flex-col items-center border rounded-lg
|
|
9
|
+
const _hoisted_2 = { class: "flex flex-col items-center border rounded-lg ep-surface-2 md:flex-row mt-2" };
|
|
10
10
|
const _hoisted_3 = ["src", "alt"];
|
|
11
11
|
const _hoisted_4 = {
|
|
12
12
|
key: 1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EpSoftware.vue.js","sources":["../../../src/components/medias/EpSoftware.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { toRefs, computed } from \"vue\";\nimport EpIcon from \"~/components/basics/EpIcon.vue\";\nimport EpBtn from \"~/components/basics/EpBtn.vue\";\nimport EpChip from \"~/components/basics/EpChip.vue\";\nimport EpEdu from \"~/components/educationals/EpEdu.vue\";\nimport { useRenderText } from \"~/composables/useRenderText\";\nimport { mdiLaptop } from \"@mdi/js\";\nimport { mdiOpenInNew } from \"@mdi/js\";\nimport type { EpSoftwareProps } from \"~/types/medias/EpSoftware\";\n\nconst props = withDefaults(defineProps<EpSoftwareProps>(), {\n icon: \"mdiLaptop\",\n hideCover: false,\n intentions: \"\",\n cover: \"\",\n type: \"base\",\n hideIcon: false,\n labelAccess: \"Accéder au logiciel\",\n});\n\nconst old_image =\n \"https://live.staticflickr.com/4868/45940268562_c5f7fdd06b_q.jpg\";\n\nconst hasCover = computed(() => {\n if (props.cover === old_image || props.cover.trim().length === 0) {\n return false;\n }\n return true;\n});\n\nconst {\n title,\n intentions,\n cover,\n hideCover,\n version,\n labelCard,\n hideIcon,\n mandateLevel,\n url,\n} = toRefs(props);\n</script>\n\n<template>\n <EpEdu\n :title=\"labelCard\"\n :labelIntentions=\"labelIntentions\"\n :icon=\"mdiLaptop\"\n flat\n :type=\"type\"\n :hideIcon=\"hideIcon\"\n :mandateLevel=\"mandateLevel\"\n >\n <template #intentions v-if=\"intentions\">\n <div v-html=\"useRenderText(intentions)\" />\n </template>\n <template #content>\n <div\n class=\"flex flex-col items-center border rounded-lg
|
|
1
|
+
{"version":3,"file":"EpSoftware.vue.js","sources":["../../../src/components/medias/EpSoftware.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { toRefs, computed } from \"vue\";\nimport EpIcon from \"~/components/basics/EpIcon.vue\";\nimport EpBtn from \"~/components/basics/EpBtn.vue\";\nimport EpChip from \"~/components/basics/EpChip.vue\";\nimport EpEdu from \"~/components/educationals/EpEdu.vue\";\nimport { useRenderText } from \"~/composables/useRenderText\";\nimport { mdiLaptop } from \"@mdi/js\";\nimport { mdiOpenInNew } from \"@mdi/js\";\nimport type { EpSoftwareProps } from \"~/types/medias/EpSoftware\";\n\nconst props = withDefaults(defineProps<EpSoftwareProps>(), {\n icon: \"mdiLaptop\",\n hideCover: false,\n intentions: \"\",\n cover: \"\",\n type: \"base\",\n hideIcon: false,\n labelAccess: \"Accéder au logiciel\",\n});\n\nconst old_image =\n \"https://live.staticflickr.com/4868/45940268562_c5f7fdd06b_q.jpg\";\n\nconst hasCover = computed(() => {\n if (props.cover === old_image || props.cover.trim().length === 0) {\n return false;\n }\n return true;\n});\n\nconst {\n title,\n intentions,\n cover,\n hideCover,\n version,\n labelCard,\n hideIcon,\n mandateLevel,\n url,\n} = toRefs(props);\n</script>\n\n<template>\n <EpEdu\n :title=\"labelCard\"\n :labelIntentions=\"labelIntentions\"\n :icon=\"mdiLaptop\"\n flat\n :type=\"type\"\n :hideIcon=\"hideIcon\"\n :mandateLevel=\"mandateLevel\"\n >\n <template #intentions v-if=\"intentions\">\n <div v-html=\"useRenderText(intentions)\" />\n </template>\n <template #content>\n <div\n class=\"flex flex-col items-center border rounded-lg ep-surface-2 md:flex-row mt-2\"\n >\n <template v-if=\"!hideCover\">\n <img\n v-if=\"hasCover\"\n class=\"h-24 w-full rounded-t-lg object-cover md:h-auto md:w-24 md:rounded-none md:rounded-l-lg\"\n :src=\"cover\"\n :alt=\"`image de la lecture ${title}`\"\n />\n <div\n v-else\n class=\"h-96 w-full rounded-t-lg md:h-auto md:w-56 md:rounded-none md:rounded-l-lg flex justify-center items-center text-base-dark dark:text-white\"\n >\n <EpIcon :icon-path=\"mdiLaptop\" size=\"95\" />\n </div>\n </template>\n <div class=\"w-full\">\n <div class=\"w-full px-5\">\n <div class=\"flex justify-between items-center rounded-t-md p-2\">\n <h4>\n {{ title }}\n <EpChip size=\"small\" type=\"primary\" v-if=\"version\">{{\n version\n }}</EpChip>\n </h4>\n <EpBtn\n v-if=\"url\"\n rounded\n type=\"primary\"\n :prependIcon=\"mdiOpenInNew\"\n :href=\"url\"\n >{{ labelAccess }}</EpBtn\n >\n </div>\n </div>\n </div>\n </div>\n </template>\n <template #actions></template>\n </EpEdu>\n</template>\n"],"names":["_createBlock","EpEdu","_unref","labelIntentions","type","_createElementVNode","_createElementBlock","_Fragment","_openBlock","_createVNode","EpIcon","_createTextVNode","_toDisplayString","EpChip","EpBtn","labelAccess"],"mappings":";;;;;;;;;;;;;;;;;AAqBA,MAAM,YACJ;;;;;;;;;;;;;;;;;;AAXF,UAAM,QAAQ;AAad,UAAM,WAAW,SAAS,MAAM;AAC9B,UAAI,MAAM,UAAU,aAAa,MAAM,MAAM,KAAA,EAAO,WAAW,GAAG;AAChE,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT,CAAC;AAED,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,OAAO,KAAK;;0BAIdA,YAqDQC,aAAA;AAAA,QApDL,OAAOC,MAAA,SAAA;AAAA,QACP,iBAAiBC,KAAAA;AAAAA,QACjB,MAAMD,MAAA,SAAA;AAAA,QACP,MAAA;AAAA,QACC,MAAME,KAAAA;AAAAA,QACN,UAAUF,MAAA,QAAA;AAAA,QACV,cAAcA,MAAA,YAAA;AAAA,MAAA;QAKJ,iBACT,MAqCM;AAAA,UArCNG,mBAqCM,OArCN,YAqCM;AAAA,aAlCaH,MAAA,SAAA,kBAAjBI,mBAaWC,UAAA,EAAA,KAAA,KAAA;AAAA,cAXD,SAAA,sBADRD,mBAKE,OAAA;AAAA;gBAHA,OAAM;AAAA,gBACL,KAAKJ,MAAA,KAAA;AAAA,gBACL,4BAA4BA,MAAA,KAAA,CAAK;AAAA,cAAA,4BAEpCM,UAAA,GAAAF,mBAKM,OALN,YAKM;AAAA,gBADJG,YAA2CC,aAAA;AAAA,kBAAlC,aAAWR,MAAA,SAAA;AAAA,kBAAW,MAAK;AAAA,gBAAA;;;YAGxCG,mBAmBM,OAnBN,YAmBM;AAAA,cAlBJA,mBAiBM,OAjBN,YAiBM;AAAA,gBAhBJA,mBAeM,OAfN,YAeM;AAAA,kBAdJA,mBAKK,MAAA,MAAA;AAAA,oBAJAM,gBAAAC,gBAAAV,MAAA,KAAA,CAAK,IAAG,KACX,CAAA;AAAA,oBAA0CA,MAAA,OAAA,kBAA1CF,YAEWa,aAAA;AAAA;sBAFH,MAAK;AAAA,sBAAQ,MAAK;AAAA,oBAAA;uCAAyB,MAEjD;AAAA,wDADAX,MAAA,OAAA,CAAO,GAAA,CAAA;AAAA,sBAAA;;;;kBAIHA,MAAA,GAAA,kBADRF,YAOCc,aAAA;AAAA;oBALC,SAAA;AAAA,oBACA,MAAK;AAAA,oBACJ,aAAaZ,MAAA,YAAA;AAAA,oBACb,MAAMA,MAAA,GAAA;AAAA,kBAAA;qCACN,MAAiB;AAAA,sDAAda,KAAAA,WAAW,GAAA,CAAA;AAAA,oBAAA;;;;;;;;QAOhB,iBAAX,MAA8B,EAAA;AAAA;;QA3CFb,MAAA,UAAA;gBAAjB;AAAA,sBACT,MAA0C;AAAA,YAA1CG,mBAA0C,OAAA;AAAA,cAArC,WAAQH,MAAA,aAAA,EAAcA,MAAA,UAAA,CAAU;AAAA,YAAA;;;;;;;;"}
|
|
@@ -7,7 +7,7 @@ import _sfc_main$2 from "../interactions/EpModal.vue.js";
|
|
|
7
7
|
/* empty css */
|
|
8
8
|
import _sfc_main$3 from "../basics/EpDivider.vue.js";
|
|
9
9
|
import _sfc_main$5 from "../basics/EpBtn.vue.js";
|
|
10
|
-
const _hoisted_1 = { class: "relative
|
|
10
|
+
const _hoisted_1 = { class: "relative" };
|
|
11
11
|
const _hoisted_2 = { class: "mb-2 flex items-center justify-between" };
|
|
12
12
|
const _hoisted_3 = { class: "font-bold text-2xl" };
|
|
13
13
|
const _hoisted_4 = { class: "text-sm font-light text-error italic" };
|
|
@@ -16,7 +16,7 @@ const _hoisted_5 = {
|
|
|
16
16
|
class: "text-xs"
|
|
17
17
|
};
|
|
18
18
|
const _hoisted_6 = { class: "mb-4 flex items-center justify-between" };
|
|
19
|
-
const _hoisted_7 = { class: "text-primary font-bold" };
|
|
19
|
+
const _hoisted_7 = { class: "ep-text-primary font-bold" };
|
|
20
20
|
const _hoisted_8 = {
|
|
21
21
|
key: 0,
|
|
22
22
|
class: "text-xs"
|
|
@@ -97,9 +97,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
97
97
|
return openBlock(), createElementBlock(Fragment, null, [
|
|
98
98
|
createElementVNode("span", {
|
|
99
99
|
onClick: toggleModal,
|
|
100
|
-
class: "cursor-pointer
|
|
100
|
+
class: "cursor-pointer ep-surface-2 ring-1 ep-ring-primary ring-inset ep-hover-bg-primary ep-btn-text-primary-outline ep-hover-btn-text-primary-outline px-2 py-1 m-1 rounded group overflow-hidden relative"
|
|
101
101
|
}, [
|
|
102
|
-
_cache[2] || (_cache[2] = createElementVNode("span", { class: "absolute top-0 left-0 flex w-full h-0 mb-0 transition-all duration-300 ease-out transform translate-y-0
|
|
102
|
+
_cache[2] || (_cache[2] = createElementVNode("span", { class: "absolute top-0 left-0 flex w-full h-0 mb-0 transition-all duration-300 ease-out transform translate-y-0 group-hover:h-full opacity-90" }, null, -1)),
|
|
103
103
|
createElementVNode("span", _hoisted_1, [
|
|
104
104
|
createTextVNode(toDisplayString(_ctx.word) + " ", 1),
|
|
105
105
|
createVNode(_sfc_main$1, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EpTerm.vue.js","sources":["../../../src/components/medias/EpTerm.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, toRefs, computed } from \"vue\";\nimport { useRouter } from \"vue-router\";\nimport { mdiBookmarkMultipleOutline } from \"@mdi/js\";\nimport EpImg from \"~/components/basics/EpImg.vue\";\nimport EpIcon from \"~/components/basics/EpIcon.vue\";\nimport EpModal from \"~/components/interactions/EpModal.vue\";\nimport EpDivider from \"~/components/basics/EpDivider.vue\";\nimport EpBtn from \"~/components/basics/EpBtn.vue\";\nimport type { EpTermProps } from \"~/types/medias/EpTerm\";\n\nconst props = withDefaults(defineProps<EpTermProps>(), {\n term: \"test\",\n variations: \"\",\n relations: \"\",\n idrelation: \"\",\n labelDefinition: \"Définition\",\n labelDomain: \"Domaine\",\n labelVariations: \"Variations\",\n labelRelations: \"Relations\",\n labelClose: \"Fermer\",\n});\n\nconst show = ref(false);\n\nconst subtitle = computed(() => {\n if (props.term !== props.word) {\n return `(${props.word})`;\n }\n return null;\n});\n\nconst renderVariations = computed(() => {\n let renderVariations = null;\n let valueprops = props.variations?.trim();\n if (valueprops?.length > 0) {\n renderVariations = valueprops.split(\",\");\n }\n return renderVariations;\n});\n\nconst renderRelations = computed(() => {\n let renderRelations = null;\n let valueprops = props.relations?.trim();\n if (valueprops?.length > 0) {\n renderRelations = valueprops.split(\",\");\n }\n return renderRelations;\n});\n\nconst router = useRouter();\nconst goto = (term: string) => {\n if (router.hasRoute(\"glossary\")) {\n router.push({ path: \"/glossary\", query: { word: term } });\n }\n //console.log(router.hasRoute('signages'))\n //\n};\n// const relationsID = computed(() => {\n// let relationsID = null;\n// let valueprops = props.idrelation?.trim();\n// if (valueprops?.length > 0) {\n// relationsID = valueprops.split(\",\");\n// }\n// return relationsID;\n// });\n\nconst renderDomain = computed(() => {\n if (props.domain === \"null\") {\n return null;\n }\n return props.domain;\n});\n\nconst toggleModal = () => {\n show.value = !show.value;\n};\n/*\nconst el = (contentref:any) => {\n const contentHtml = contentref.innerHTML \n const renderHtml = useRenderText(contentHtml)\n contentref.innerHTML = renderHtml\n}*/\n\nconst { term, graminfo, src } = toRefs(props);\n</script>\n\n<template>\n <span\n @click=\"toggleModal\"\n class=\"cursor-pointer
|
|
1
|
+
{"version":3,"file":"EpTerm.vue.js","sources":["../../../src/components/medias/EpTerm.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, toRefs, computed } from \"vue\";\nimport { useRouter } from \"vue-router\";\nimport { mdiBookmarkMultipleOutline } from \"@mdi/js\";\nimport EpImg from \"~/components/basics/EpImg.vue\";\nimport EpIcon from \"~/components/basics/EpIcon.vue\";\nimport EpModal from \"~/components/interactions/EpModal.vue\";\nimport EpDivider from \"~/components/basics/EpDivider.vue\";\nimport EpBtn from \"~/components/basics/EpBtn.vue\";\nimport type { EpTermProps } from \"~/types/medias/EpTerm\";\n\nconst props = withDefaults(defineProps<EpTermProps>(), {\n term: \"test\",\n variations: \"\",\n relations: \"\",\n idrelation: \"\",\n labelDefinition: \"Définition\",\n labelDomain: \"Domaine\",\n labelVariations: \"Variations\",\n labelRelations: \"Relations\",\n labelClose: \"Fermer\",\n});\n\nconst show = ref(false);\n\nconst subtitle = computed(() => {\n if (props.term !== props.word) {\n return `(${props.word})`;\n }\n return null;\n});\n\nconst renderVariations = computed(() => {\n let renderVariations = null;\n let valueprops = props.variations?.trim();\n if (valueprops?.length > 0) {\n renderVariations = valueprops.split(\",\");\n }\n return renderVariations;\n});\n\nconst renderRelations = computed(() => {\n let renderRelations = null;\n let valueprops = props.relations?.trim();\n if (valueprops?.length > 0) {\n renderRelations = valueprops.split(\",\");\n }\n return renderRelations;\n});\n\nconst router = useRouter();\nconst goto = (term: string) => {\n if (router.hasRoute(\"glossary\")) {\n router.push({ path: \"/glossary\", query: { word: term } });\n }\n //console.log(router.hasRoute('signages'))\n //\n};\n// const relationsID = computed(() => {\n// let relationsID = null;\n// let valueprops = props.idrelation?.trim();\n// if (valueprops?.length > 0) {\n// relationsID = valueprops.split(\",\");\n// }\n// return relationsID;\n// });\n\nconst renderDomain = computed(() => {\n if (props.domain === \"null\") {\n return null;\n }\n return props.domain;\n});\n\nconst toggleModal = () => {\n show.value = !show.value;\n};\n/*\nconst el = (contentref:any) => {\n const contentHtml = contentref.innerHTML \n const renderHtml = useRenderText(contentHtml)\n contentref.innerHTML = renderHtml\n}*/\n\nconst { term, graminfo, src } = toRefs(props);\n</script>\n\n<template>\n <span\n @click=\"toggleModal\"\n class=\"cursor-pointer ep-surface-2 ring-1 ep-ring-primary ring-inset ep-hover-bg-primary ep-btn-text-primary-outline ep-hover-btn-text-primary-outline px-2 py-1 m-1 rounded group overflow-hidden relative\"\n >\n <span\n class=\"absolute top-0 left-0 flex w-full h-0 mb-0 transition-all duration-300 ease-out transform translate-y-0 group-hover:h-full opacity-90\"\n />\n <span class=\"relative\"\n >{{ word }}\n <EpIcon :icon-path=\"mdiBookmarkMultipleOutline\" size=\"18\" />\n </span>\n </span>\n\n <EpModal v-model=\"show\" size=\"compact\">\n <div class=\"mb-2 flex items-center justify-between\">\n <div>\n <h3 class=\"font-bold text-2xl\">\n {{ term }}\n <span class=\"text-sm font-light text-error italic\">{{\n graminfo\n }}</span>\n </h3>\n <h4 class=\"text-xs\" v-if=\"subtitle\">{{ subtitle }}</h4>\n </div>\n <div>\n <EpIcon :icon-path=\"mdiBookmarkMultipleOutline\" />\n </div>\n </div>\n <EpDivider color=\"primary\" margin=\"mb-2\"></EpDivider>\n <div class=\"mb-4 flex items-center justify-between\">\n <h3 class=\"ep-text-primary font-bold\">{{ labelDefinition }}</h3>\n <span class=\"text-xs\" v-if=\"renderDomain\"\n >{{ labelDomain }} :\n <span class=\"font-bold\">{{ renderDomain }}</span></span\n >\n </div>\n <!-- <div v-html=\"renderText\"/> -->\n <div>\n <slot />\n </div>\n <EpImg v-if=\"src\" :src=\"src\"></EpImg>\n\n <EpDivider v-if=\"renderVariations || renderRelations\"></EpDivider>\n <div class=\"text-sm mt-2\" v-if=\"renderVariations\">\n <span class=\"mr-2 font-bold\">{{ labelVariations }} :</span>\n <span v-for=\"(variation, i) in renderVariations\" :key=\"`variation-${i}`\">\n {{ variation }}{{ renderVariations.length > i + 1 ? \", \" : \".\" }}\n </span>\n </div>\n <div class=\"text-sm mt-2\" v-if=\"renderRelations\">\n <span class=\"mr-2 font-bold\">{{ labelRelations }} :</span>\n <template v-for=\"(relation, i) in renderRelations\" :key=\"`relation-${i}`\">\n <EpBtn\n size=\"small\"\n rounded\n extra-class=\"mr-2\"\n @click=\"goto(relation)\"\n >{{ relation }}</EpBtn\n >\n </template>\n </div>\n <div class=\"flex justify-end\">\n <EpBtn type=\"error\" outlined @click=\"show = false\" rounded>{{\n labelClose\n }}</EpBtn>\n </div>\n </EpModal>\n</template>\n"],"names":["renderVariations","renderRelations","term","_createElementVNode","word","_createVNode","EpIcon","_unref","EpModal","_createTextVNode","_toDisplayString","_createElementBlock","EpDivider","labelDefinition","_openBlock","labelDomain","_renderSlot","_createBlock","EpImg","labelVariations","_Fragment","_renderList","labelRelations","EpBtn","labelClose"],"mappings":"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"}
|