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.
Files changed (156) hide show
  1. package/dist/components/basics/EpAvatar.vue.js +1 -54
  2. package/dist/components/basics/EpAvatar.vue.js.map +1 -1
  3. package/dist/components/basics/EpAvatar.vue2.js +54 -1
  4. package/dist/components/basics/EpAvatar.vue2.js.map +1 -1
  5. package/dist/components/basics/EpBadge.vue2.js +1 -10
  6. package/dist/components/basics/EpBadge.vue2.js.map +1 -1
  7. package/dist/components/basics/EpCard.vue.js +29 -41
  8. package/dist/components/basics/EpCard.vue.js.map +1 -1
  9. package/dist/components/basics/EpDivider.vue.js +2 -3
  10. package/dist/components/basics/EpDivider.vue.js.map +1 -1
  11. package/dist/components/basics/EpFlex.vue.js.map +1 -1
  12. package/dist/components/basics/EpHoverCard.vue.js +13 -31
  13. package/dist/components/basics/EpHoverCard.vue.js.map +1 -1
  14. package/dist/components/basics/EpImg.vue.js +5 -3
  15. package/dist/components/basics/EpImg.vue.js.map +1 -1
  16. package/dist/components/basics/EpListItem.vue.js +1 -1
  17. package/dist/components/basics/EpListItem.vue.js.map +1 -1
  18. package/dist/components/basics/EpSpinner.vue.js +1 -2
  19. package/dist/components/basics/EpSpinner.vue.js.map +1 -1
  20. package/dist/components/basics/EpStackedList.vue.js +3 -3
  21. package/dist/components/basics/EpStackedList.vue.js.map +1 -1
  22. package/dist/components/basics/EpTable.vue.js +4 -4
  23. package/dist/components/basics/EpTable.vue.js.map +1 -1
  24. package/dist/components/basics/EpText.vue.js +4 -3
  25. package/dist/components/basics/EpText.vue.js.map +1 -1
  26. package/dist/components/educationals/EpBranchingScenario.vue.js +1 -1
  27. package/dist/components/educationals/EpBranchingScenario.vue2.js +1 -1
  28. package/dist/components/educationals/EpBranchingScenario.vue2.js.map +1 -1
  29. package/dist/components/educationals/EpEdu.vue.js +10 -6
  30. package/dist/components/educationals/EpEdu.vue.js.map +1 -1
  31. package/dist/components/educationals/EpObjective.vue.js +3 -3
  32. package/dist/components/educationals/EpObjective.vue.js.map +1 -1
  33. package/dist/components/educationals/EpReading.vue.js +36 -28
  34. package/dist/components/educationals/EpReading.vue.js.map +1 -1
  35. package/dist/components/educationals/EpResource.vue.js +1 -1
  36. package/dist/components/educationals/EpResource.vue.js.map +1 -1
  37. package/dist/components/educationals/EpSpecificObjective.vue.js +7 -8
  38. package/dist/components/educationals/EpSpecificObjective.vue.js.map +1 -1
  39. package/dist/components/forms/EpRadioSummative.vue2.js +1 -1
  40. package/dist/components/forms/EpRadioSummative.vue2.js.map +1 -1
  41. package/dist/components/interactions/EpAccordeon.vue.js +1 -1
  42. package/dist/components/interactions/EpAccordeon.vue2.js +4 -7
  43. package/dist/components/interactions/EpAccordeon.vue2.js.map +1 -1
  44. package/dist/components/interactions/EpContentSlider.vue.js +7 -8
  45. package/dist/components/interactions/EpContentSlider.vue.js.map +1 -1
  46. package/dist/components/interactions/EpModal.vue.js +3 -3
  47. package/dist/components/interactions/EpModal.vue.js.map +1 -1
  48. package/dist/components/interactions/EpQuestion.vue.js +1 -1
  49. package/dist/components/interactions/EpQuestion.vue.js.map +1 -1
  50. package/dist/components/interactions/EpSummativeTable.vue.js +2 -2
  51. package/dist/components/interactions/EpSummativeTable.vue.js.map +1 -1
  52. package/dist/components/interactions/EpTooltip.vue.js.map +1 -1
  53. package/dist/components/interactions/{EpTooltip.vue3.js → EpTooltip.vue2.js} +1 -2
  54. package/dist/components/interactions/EpTooltip.vue2.js.map +1 -0
  55. package/dist/components/medias/EpAudio.vue.js +1 -2
  56. package/dist/components/medias/EpAudio.vue.js.map +1 -1
  57. package/dist/components/medias/EpCarousel.vue.js +197 -5
  58. package/dist/components/medias/EpCarousel.vue.js.map +1 -1
  59. package/dist/components/medias/EpCarousel.vue2.js +1 -196
  60. package/dist/components/medias/EpCarousel.vue2.js.map +1 -1
  61. package/dist/components/medias/EpHierarchy.vue.js +1 -1
  62. package/dist/components/medias/EpHierarchy.vue2.js +7 -7
  63. package/dist/components/medias/EpHierarchy.vue2.js.map +1 -1
  64. package/dist/components/medias/EpLink.vue.js +1 -5
  65. package/dist/components/medias/EpLink.vue.js.map +1 -1
  66. package/dist/components/medias/EpSensibleImage.vue.js +1 -1
  67. package/dist/components/medias/EpSensibleImage.vue2.js +2 -2
  68. package/dist/components/medias/EpSensibleImage.vue2.js.map +1 -1
  69. package/dist/components/medias/EpSoftware.vue.js +1 -1
  70. package/dist/components/medias/EpSoftware.vue.js.map +1 -1
  71. package/dist/components/medias/EpTerm.vue.js +4 -4
  72. package/dist/components/medias/EpTerm.vue.js.map +1 -1
  73. package/dist/components/medias/EpTimeLine.vue.js +5 -98
  74. package/dist/components/medias/EpTimeLine.vue.js.map +1 -1
  75. package/dist/components/medias/EpTimeLine.vue2.js +101 -0
  76. package/dist/components/medias/EpTimeLine.vue2.js.map +1 -0
  77. package/dist/components/medias/EpWordDef.vue.js +6 -6
  78. package/dist/components/medias/EpWordDef.vue.js.map +1 -1
  79. package/dist/components/signages/EpAlert.vue.js +1 -1
  80. package/dist/components/signages/EpAlert.vue2.js +1 -1
  81. package/dist/components/signages/EpAlert.vue2.js.map +1 -1
  82. package/dist/components/signages/EpHeader.vue.js +6 -6
  83. package/dist/components/signages/EpHeader.vue.js.map +1 -1
  84. package/dist/components/signages/EpQuote.vue.js +4 -4
  85. package/dist/components/signages/EpQuote.vue.js.map +1 -1
  86. package/dist/components/signages/EpSkeleton.vue.js +5 -40
  87. package/dist/components/signages/EpSkeleton.vue.js.map +1 -1
  88. package/dist/components/signages/EpSkeleton.vue2.js +43 -0
  89. package/dist/components/signages/EpSkeleton.vue2.js.map +1 -0
  90. package/dist/components/tools/Details.vue2.js +2 -3
  91. package/dist/components/tools/Details.vue2.js.map +1 -1
  92. package/dist/components/tools/DisplayBox.vue.js +5 -40
  93. package/dist/components/tools/DisplayBox.vue.js.map +1 -1
  94. package/dist/components/tools/DisplayBox.vue2.js +43 -0
  95. package/dist/components/tools/DisplayBox.vue2.js.map +1 -0
  96. package/dist/components/tools/TextMedia.vue2.js +2 -2
  97. package/dist/components/tools/TextMedia.vue2.js.map +1 -1
  98. package/dist/components/tools/TimelineItem.vue.js +1 -1
  99. package/dist/components/tools/TimelineItem.vue2.js +1 -1
  100. package/dist/components/tools/TimelineItem.vue2.js.map +1 -1
  101. package/dist/components/tools/TwoColsMedia.vue2.js +2 -2
  102. package/dist/components/tools/TwoColsMedia.vue2.js.map +1 -1
  103. package/dist/composables/useIcons.js +1 -1
  104. package/dist/composables/useIcons.js.map +1 -1
  105. package/dist/entry/interactions/EpTooltip.js +0 -1
  106. package/dist/entry/interactions/EpTooltip.js.map +1 -1
  107. package/dist/entry/medias/EpCarousel.js +2 -2
  108. package/dist/entry/medias/EpCarousel.js.map +1 -1
  109. package/dist/entry/medias/EpTimeLine.js +2 -3
  110. package/dist/entry/medias/EpTimeLine.js.map +1 -1
  111. package/dist/entry/signages/EpSkeleton.js +2 -3
  112. package/dist/entry/signages/EpSkeleton.js.map +1 -1
  113. package/dist/index.js +171 -173
  114. package/dist/index.js.map +1 -1
  115. package/dist/styles.css +655 -0
  116. package/dist/types/Accordeon.d.ts +1 -5
  117. package/dist/types/Accordeon.js +21 -25
  118. package/dist/types/Accordeon.js.map +1 -1
  119. package/dist/types/Alert.d.ts +2 -2
  120. package/dist/types/Alert.js +34 -34
  121. package/dist/types/Alert.js.map +1 -1
  122. package/dist/types/Btn.d.ts +0 -5
  123. package/dist/types/Btn.js +21 -26
  124. package/dist/types/Btn.js.map +1 -1
  125. package/dist/types/Chip.d.ts +0 -4
  126. package/dist/types/Chip.js +14 -18
  127. package/dist/types/Chip.js.map +1 -1
  128. package/dist/types/Colors.d.ts +1 -0
  129. package/dist/types/Hover.d.ts +1 -1
  130. package/dist/types/Medias.d.ts +0 -1
  131. package/dist/types/Medias.js +0 -1
  132. package/dist/types/Medias.js.map +1 -1
  133. package/dist/types/Radio.d.ts +0 -1
  134. package/dist/types/Radio.js +0 -1
  135. package/dist/types/Radio.js.map +1 -1
  136. package/dist/types/StackedList.d.ts +1 -1
  137. package/dist/types/StackedList.js.map +1 -1
  138. package/dist/types/Switch.d.ts +0 -1
  139. package/dist/types/Switch.js +0 -1
  140. package/dist/types/Switch.js.map +1 -1
  141. package/dist/types/basics/EpAvatar.d.ts +2 -10
  142. package/dist/types/basics/EpBadge.d.ts +2 -1
  143. package/dist/types/basics/EpCard.d.ts +3 -1
  144. package/dist/types/educationals/EpEdu.d.ts +1 -0
  145. package/dist/types/signages/EpBadge.d.ts +0 -1
  146. package/package.json +14 -17
  147. package/dist/components/interactions/EpTooltip.vue3.js.map +0 -1
  148. package/dist/components/medias/EpTimeLine.vue3.js +0 -6
  149. package/dist/components/medias/EpTimeLine.vue3.js.map +0 -1
  150. package/dist/components/signages/EpSkeleton.vue3.js +0 -6
  151. package/dist/components/signages/EpSkeleton.vue3.js.map +0 -1
  152. package/dist/components/tools/DisplayBox.vue3.js +0 -6
  153. package/dist/components/tools/DisplayBox.vue3.js.map +0 -1
  154. package/dist/composables/useColors.js +0 -135
  155. package/dist/composables/useColors.js.map +0 -1
  156. package/dist/style.css +0 -5212
@@ -1,199 +1,4 @@
1
- import { defineComponent, ref, computed, toRefs, createElementBlock, openBlock, Fragment, createCommentVNode, toDisplayString, createElementVNode, createVNode, createTextVNode, unref, withCtx, normalizeClass, renderList, createBlock } from "vue";
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":["../../../src/components/medias/EpCarousel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { toRefs, ref, computed } from \"vue\";\nimport { mdiChevronLeftCircleOutline } from \"@mdi/js\";\nimport { mdiChevronRightCircleOutline } from \"@mdi/js\";\nimport type { InfoModal } from \"~/types/Image\";\nimport EpIcon from \"~/components/basics/EpIcon.vue\";\nimport EpBtn from \"~/components/basics/EpBtn.vue\";\nimport EpModal from \"~/components/interactions/EpModal.vue\";\nimport EpImgCarousel from \"~/components/basics/EpImgCarousel.vue\";\nimport type { EpCarouselProps } from \"~/types/medias/EpCarousel\";\n\nconst props = withDefaults(defineProps<EpCarouselProps>(), {\n gallery: false,\n isCenter: false,\n puzzle: false,\n sizeThumbnail: \"medium\",\n labelRef: \"Référence\",\n labelClose: \"Fermer\",\n labelRefLib: \"Référence bibliographique\",\n});\n\n// Logique Carousel normal\nconst currentIndex = ref<number>(0);\nconst dialog = ref<boolean>(false);\n\nconst prevSlide = () => {\n const isFirstSlide = currentIndex.value === 0;\n const newIndex = isFirstSlide\n ? props.carrouselImg.length - 1\n : currentIndex.value - 1;\n currentIndex.value = newIndex;\n};\n\nconst nextSlide = () => {\n const isTheLastSlide = currentIndex.value === props.carrouselImg.length - 1;\n const newIndex = isTheLastSlide ? 0 : currentIndex.value + 1;\n currentIndex.value = newIndex;\n};\n\nconst isCenterStyle = computed(() => {\n return props.isCenter ? \"justify-center\" : \"\";\n});\n\n// Logique Carousel gallery\nconst managedIndex = ref(0);\nconst managedInfoModal = ref({ src: \"\", caption: \"\", bib: \"\" } as InfoModal);\n\nconst newFocus = (index: number) => {\n managedIndex.value = index;\n managedInfoModal.value = {\n src: props.carrouselImg[index].src,\n caption: props.carrouselImg[index].caption,\n bib: props.carrouselImg[index].bib,\n };\n};\n\nconst managedPrevSlide = () => {\n const isFirstSlide = managedIndex.value === 0;\n const newIndex = isFirstSlide\n ? props.carrouselImg.length - 1\n : managedIndex.value - 1;\n managedIndex.value = newIndex;\n managedInfoModal.value = {\n src: props.carrouselImg[newIndex].src,\n caption: props.carrouselImg[newIndex].caption,\n bib: props.carrouselImg[newIndex].bib,\n };\n};\n\nconst managedNextSlide = () => {\n const isTheLastSlide = managedIndex.value === props.carrouselImg.length - 1;\n const newIndex = isTheLastSlide ? 0 : managedIndex.value + 1;\n managedIndex.value = newIndex;\n managedInfoModal.value = {\n src: props.carrouselImg[newIndex].src,\n caption: props.carrouselImg[newIndex].caption,\n bib: props.carrouselImg[newIndex].bib,\n };\n};\n\nconst { carrouselImg, sizeThumbnail } = toRefs(props);\n</script>\n\n<template>\n <h2 v-if=\"props.title\" class=\"text-xl font-semibold mt-10 mb-4 text-center\">\n {{ props.title }}\n </h2>\n\n <div v-if=\"!gallery\">\n <div class=\"flex items-center justify-center mb-2\">\n <button class=\"p-2\" @click=\"prevSlide\">\n <EpIcon :icon-path=\"mdiChevronLeftCircleOutline\" />\n </button>\n {{ currentIndex + 1 }}/{{ carrouselImg.length }}\n <button class=\"p-2\" @click=\"nextSlide\">\n <EpIcon :icon-path=\"mdiChevronRightCircleOutline\" />\n </button>\n </div>\n <div\n class=\"bg-white dark:bg-dark shadow-xl p-4 lg:max-w-[800px] mx-auto border-solid border\"\n >\n <!-- <div class=\"max-w-[800px] h-[550px] m-auto relative\">\n <div\n class=\"w-full h-full bg-center duration-500\"\n :style=\"`background-image:url('${carrouselImg[currentIndex].src}')`\"\n />\n </div> -->\n\n <img\n :src=\"carrouselImg[currentIndex].src\"\n alt=\"image\"\n class=\"rounded-sm m-auto\"\n />\n\n <div\n v-if=\"carrouselImg[currentIndex]?.caption\"\n class=\"mt-2 text-sm text-center text-base-dark dark:text-white\"\n >\n {{ carrouselImg[currentIndex].caption }}\n </div>\n <div v-if=\"carrouselImg[currentIndex]?.bib\" class=\"flex justify-end mt-2\">\n <EpBtn type=\"primary\" @click=\"dialog = true\" dark>{{ labelRef }}</EpBtn>\n </div>\n </div>\n <EpModal v-model=\"dialog\" :title=\"labelRefLib\">\n <div v-html=\"carrouselImg[currentIndex].bib\" />\n <div class=\"flex justify-end\">\n <EpBtn @click=\"dialog = false\" type=\"primary\" dark>{{\n labelClose\n }}</EpBtn>\n </div>\n </EpModal>\n </div>\n\n <div v-else-if=\"!puzzle\" :class=\"`flex flex-wrap ${isCenterStyle}`\">\n <template\n v-for=\"(image, index) in carrouselImg\"\n :key=\"`image-${image?.uid}`\"\n >\n <EpImgCarousel\n :src=\"image.src\"\n :bib=\"image.bib\"\n :caption=\"image.caption\"\n :label-ref=\"labelRef\"\n :label-close=\"labelClose\"\n :size-thumbnail=\"sizeThumbnail\"\n managed-modal\n @new-focus=\"newFocus(index)\"\n :info-modal=\"managedInfoModal\"\n @prev-slide=\"managedPrevSlide\"\n @next-slide=\"managedNextSlide\"\n ></EpImgCarousel>\n </template>\n </div>\n\n <div v-else-if=\"puzzle\" :class=\"`columns-3xs mx-5 gap-2`\">\n <template\n v-for=\"(image, index) in carrouselImg\"\n :key=\"`image-${image?.uid}`\"\n >\n <EpImgCarousel\n :src=\"image.src\"\n :bib=\"image.bib\"\n :caption=\"image.caption\"\n :label-ref=\"labelRef\"\n :label-close=\"labelClose\"\n puzzle\n managed-modal\n @new-focus=\"newFocus(index)\"\n :info-modal=\"managedInfoModal\"\n @prev-slide=\"managedPrevSlide\"\n @next-slide=\"managedNextSlide\"\n ></EpImgCarousel>\n </template>\n </div>\n</template>\n\n<style scoped>\n.v-enter-active,\n.v-leave-active {\n transition: opacity 0.5s ease;\n}\n\n.v-enter-from,\n.v-leave-to {\n opacity: 0;\n}\n</style>\n"],"names":["_openBlock","_createElementBlock","_toDisplayString","gallery","_createElementVNode","_createVNode","EpIcon","_unref","EpBtn","labelRef","EpModal","labelRefLib","labelClose","puzzle","_Fragment","_renderList","_createBlock","EpImgCarousel"],"mappings":"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"}
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-e6e970a9"]]);
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-main-color-400" }
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.vue2.js"),
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.vue.js"),
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.vue3.js"),
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.vue3.js")
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 ${useColors(
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 useColors from \"~/composables/useColors\";\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 ${useColors(\n \"bg\",\n \"primary\" + \"dark\"\n )} 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":";;;;;;;;;;;;;;;;;;;;;;;;AASA,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,YAAY;AAAA,QACjB;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IACH,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
+ {"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-6b4321d5"]]);
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,kBAAkB,GAAG;AAClD,mBAAO,UAAU,IAAI,kBAAkB;AACvC,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;;;;;;;"}
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 bg-base-light md:flex-row mt-2 dark:bg-dark" };
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 bg-base-light md:flex-row mt-2 dark:bg-dark\"\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;;;;;;;;"}
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 group-hover:text-white" };
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 border-primary dark:border-main-color-500 border dark:text-main-color-500 text-primary px-2 py-1 rounded group overflow-hidden relative"
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 bg-primary dark:bg-main-color-500 group-hover:h-full opacity-90" }, null, -1)),
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 border-primary dark:border-main-color-500 border dark:text-main-color-500 text-primary px-2 py-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 bg-primary dark:bg-main-color-500 group-hover:h-full opacity-90\"\n />\n <span class=\"relative group-hover:text-white\"\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=\"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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"}
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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"}