@ecored-sena/base-kit 0.0.1

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 (67) hide show
  1. package/README.md +1 -0
  2. package/package.json +49 -0
  3. package/plugin/components/AccordionRED.vue +78 -0
  4. package/plugin/components/AcordionA.vue +78 -0
  5. package/plugin/components/Audio.vue +20 -0
  6. package/plugin/components/BannerHero.vue +104 -0
  7. package/plugin/components/CarouselCard.vue +70 -0
  8. package/plugin/components/CarouselRED.vue +65 -0
  9. package/plugin/components/Complementario.vue +81 -0
  10. package/plugin/components/Creditos.vue +101 -0
  11. package/plugin/components/Dialogo.vue +30 -0
  12. package/plugin/components/DialogoActividad.vue +274 -0
  13. package/plugin/components/DialogoBurbuja.vue +46 -0
  14. package/plugin/components/DialogoChat.vue +88 -0
  15. package/plugin/components/Footer.vue +42 -0
  16. package/plugin/components/GlobalComponents.js +39 -0
  17. package/plugin/components/Glosario.vue +100 -0
  18. package/plugin/components/ImagenInfografica.vue +100 -0
  19. package/plugin/components/ImagenInfograficaB.vue +68 -0
  20. package/plugin/components/Inicio.vue +128 -0
  21. package/plugin/components/LineaTiempoA.vue +30 -0
  22. package/plugin/components/LineaTiempoB.vue +36 -0
  23. package/plugin/components/LineaTiempoC.vue +95 -0
  24. package/plugin/components/LineaTiempoD.vue +51 -0
  25. package/plugin/components/LineaTiempoE.vue +25 -0
  26. package/plugin/components/ModalA.vue +22 -0
  27. package/plugin/components/PasosA.vue +59 -0
  28. package/plugin/components/PasosB.vue +90 -0
  29. package/plugin/components/Referencias.vue +45 -0
  30. package/plugin/components/ScrollHorizontal.vue +105 -0
  31. package/plugin/components/Separador.vue +12 -0
  32. package/plugin/components/SlyderA.vue +65 -0
  33. package/plugin/components/SlyderB.vue +48 -0
  34. package/plugin/components/SlyderC.vue +53 -0
  35. package/plugin/components/SlyderD.vue +50 -0
  36. package/plugin/components/SlyderE.vue +58 -0
  37. package/plugin/components/SlyderF.vue +141 -0
  38. package/plugin/components/TabsA.vue +44 -0
  39. package/plugin/components/TabsB.vue +40 -0
  40. package/plugin/components/TabsC.vue +39 -0
  41. package/plugin/components/TarjetaAudio.vue +65 -0
  42. package/plugin/components/TimeLineRED.vue +51 -0
  43. package/plugin/components/actividad/ActividadController.vue +34 -0
  44. package/plugin/components/actividad/actividadCompletar/ActividadCompletar.vue +283 -0
  45. package/plugin/components/actividad/actividadCompletar/ActividadCompletarFooter.vue +63 -0
  46. package/plugin/components/actividad/actividadCompletar/ActividadParrafo.vue +218 -0
  47. package/plugin/components/actividad/actividadCompletar/ActividadResultados.vue +215 -0
  48. package/plugin/components/actividad/actividadCuestionario/Actividad.vue +222 -0
  49. package/plugin/components/actividad/actividadCuestionario/ActividadBarraAvance.vue +116 -0
  50. package/plugin/components/actividad/actividadCuestionario/ActividadPregunta.vue +146 -0
  51. package/plugin/components/actividad/actividadCuestionario/ActividadResultados.vue +215 -0
  52. package/plugin/components/audioMixins.js +73 -0
  53. package/plugin/components/componentSlotMixins.js +87 -0
  54. package/plugin/components/dialogoMixins.js +28 -0
  55. package/plugin/components/globalMixins.js +11 -0
  56. package/plugin/components/plantilla/Accesibilidad.vue +101 -0
  57. package/plugin/components/plantilla/AsideMenu.vue +242 -0
  58. package/plugin/components/plantilla/BannerInterno.vue +66 -0
  59. package/plugin/components/plantilla/BannerPrincipal.vue +104 -0
  60. package/plugin/components/plantilla/BarraAvance.vue +379 -0
  61. package/plugin/components/plantilla/Curso.vue +12 -0
  62. package/plugin/components/plantilla/Footer.vue +42 -0
  63. package/plugin/components/plantilla/Header.vue +152 -0
  64. package/plugin/components/plantilla/ScrollHorizontal.vue +105 -0
  65. package/plugin/components/plantillaMixins.js +34 -0
  66. package/plugin/components/slyderMixins.js +18 -0
  67. package/plugin/plugin.js +49 -0
@@ -0,0 +1,105 @@
1
+ <template lang="pug">
2
+ .horizontal-scroll__wrapper(ref="hContainer")
3
+ .horizontal-scroll(
4
+ :class="[{'horizontal-scroll--item-fw':itemFullWidth},{'row':row}]"
5
+ :style="[{transform: `translate(${scrollVal}px,0px)`}]"
6
+ )
7
+ slot
8
+ </template>
9
+
10
+ <script>
11
+ export default {
12
+ name: 'ScrollHorizontal',
13
+ props: {
14
+ selectedId: {
15
+ type: String,
16
+ default: '',
17
+ },
18
+ itemFullWidth: {
19
+ type: Boolean,
20
+ default: false,
21
+ },
22
+ row: {
23
+ type: Boolean,
24
+ default: false,
25
+ },
26
+ },
27
+ data() {
28
+ return {
29
+ scrollVal: 0,
30
+ ids: [],
31
+ }
32
+ },
33
+ watch: {
34
+ selectedId(newVal) {
35
+ if (newVal.length) {
36
+ this.scroll()
37
+ }
38
+ },
39
+ },
40
+ mounted() {
41
+ this.getCords()
42
+ this.scroll()
43
+ window.addEventListener('resize', this.scroll)
44
+ },
45
+ updated() {
46
+ this.getCords()
47
+ },
48
+ beforeDestroy() {
49
+ window.removeEventListener('resize', this.scroll)
50
+ },
51
+ methods: {
52
+ scroll() {
53
+ const selectedElementId = this.ids.find(
54
+ item => item.id === this.selectedId,
55
+ )?.id
56
+ const selectedElement = document.getElementById(selectedElementId)
57
+ if (
58
+ !Object.keys(this.$slots.default).length ||
59
+ !this.selectedId.length ||
60
+ selectedElement === null
61
+ )
62
+ return
63
+ const container = this.$refs.hContainer
64
+ const scrollContentTotalWidth =
65
+ selectedElement.offsetWidth * this.ids.length
66
+ let newScrollVal = selectedElement.offsetLeft
67
+ const elementsFitInContainer =
68
+ container.offsetWidth / selectedElement.offsetWidth
69
+ if (
70
+ elementsFitInContainer > 1 &&
71
+ scrollContentTotalWidth - newScrollVal < container.offsetWidth
72
+ ) {
73
+ newScrollVal = scrollContentTotalWidth - container.offsetWidth
74
+ }
75
+ this.scrollVal = this.ids.length === 1 ? 0 : -newScrollVal
76
+ },
77
+ getCords() {
78
+ if (this.$slots.default) {
79
+ this.ids = this.$slots.default.map(element => ({
80
+ id: element.elm.id,
81
+ key: element.key,
82
+ }))
83
+ }
84
+ },
85
+ },
86
+ }
87
+ </script>
88
+
89
+ <style lang="sass" scoped>
90
+ .horizontal-scroll__wrapper
91
+ overflow: hidden
92
+ .horizontal-scroll
93
+ display: flex
94
+ transition: transform 0.5s ease-in-out
95
+ align-items: center
96
+ flex-wrap: nowrap
97
+ &:not(.row)
98
+ width: 100%
99
+ &--item-fw
100
+ & ::v-deep > div
101
+ flex-grow: 0
102
+ flex-shrink: 0
103
+ width: 100%
104
+ margin: 0 !important
105
+ </style>
@@ -0,0 +1,12 @@
1
+ <template lang="pug">
2
+ .separador-container
3
+ .separador
4
+ </template>
5
+
6
+ <script>
7
+ export default {
8
+ name: 'Separador',
9
+ }
10
+ </script>
11
+
12
+ <style lang="sass"></style>
@@ -0,0 +1,65 @@
1
+ <template lang="pug">
2
+ .slyder-a
3
+ .slyder-a__tipo-a(v-if="tipo === 'a'")
4
+ .slyder-a__btn--sigt(
5
+ v-if="navObj.next"
6
+ @click="selected = navObj.next"
7
+ @mouseover="mostrarIndicador = false"
8
+ )
9
+ .indicador__container.indicador--left(v-if="mostrarIndicador")
10
+ .indicador--click
11
+ .slyder-a__btn--atrs(v-if="navObj.back" @click="selected = navObj.back")
12
+ .slyder-a__bullets
13
+ .slyder-a__bullets__item(
14
+ v-for="bullet in elements"
15
+ :key="'sl-blt-key-'+bullet.id"
16
+ :class="{'slyder-a__bullets__item--active' : selected === bullet.id}"
17
+ @click="selected = bullet.id"
18
+ )
19
+ ScrollHorizontal(v-if="elements.length && rendered" :selectedId="'sl-' + selected" item-full-width)
20
+ .slyder-a__item(
21
+ v-for="item in elements"
22
+ :key="'sl-key-'+item.id"
23
+ :id="'sl-'+item.id"
24
+ v-child="item.elm"
25
+ )
26
+ .slyder-a__tipo-b.mt-3(v-if="tipo === 'b'")
27
+ .slyder-a__btn--atrs(:class="{'hide' : !navObj.back}" @click="selected = navObj.back")
28
+
29
+ .slyder-a__bullets
30
+ .slyder-a__bullets__item(
31
+ v-for="bullet in elements"
32
+ :key="'sl-blt-key-'+bullet.id"
33
+ :class="{'slyder-a__bullets__item--active' : selected === bullet.id}"
34
+ @click="selected = bullet.id"
35
+ )
36
+ .slyder-a__btn--sigt(
37
+ :class="{'hide' : !navObj.next}"
38
+ @click="selected = navObj.next"
39
+ @mouseover="mostrarIndicador = false"
40
+ )
41
+ .indicador__container.indicador--left(v-if="mostrarIndicador")
42
+ .indicador--click
43
+ .hidden-slot
44
+ slot
45
+ </template>
46
+
47
+ <script>
48
+ import componentSlotMixins from './componentSlotMixins'
49
+ export default {
50
+ name: 'SlyderA',
51
+ mixins: [componentSlotMixins],
52
+ props: {
53
+ tipo: {
54
+ type: String,
55
+ default: 'a',
56
+ },
57
+ },
58
+ data: () => ({
59
+ mostrarIndicador: true,
60
+ secuencial: true,
61
+ }),
62
+ }
63
+ </script>
64
+
65
+ <style lang="sass"></style>
@@ -0,0 +1,48 @@
1
+ <template lang="pug">
2
+ .slyder-b
3
+ ScrollHorizontal(v-if="datos.length" :selectedId="selected" item-full-width)
4
+ .slyder-b__slyde(
5
+ v-for="(item,index) in datos"
6
+ :key="'key-'+getId(index)"
7
+ :id="getId(index)"
8
+ )
9
+ .row
10
+ .col-lg-8.order-lg-2.mb-4.mb-lg-0
11
+ figure.slyder-b__img
12
+ img(:src='item.imagen', :alt='item.leyendaImagen')
13
+ figcaption(v-if="item.leyendaImagen" v-html="item.leyendaImagen")
14
+
15
+ .col-lg-4.order-lg-1
16
+ h3(v-if="item.hasOwnProperty('titulo')" v-html="item.titulo")
17
+ p.mb-3(v-html="item.texto")
18
+ .slyder__action
19
+ .slyder__pagination {{index+1}}/{{datos.length}}
20
+ a.slyder__btn(v-if="index -1 >= 0" @click="selected = getId(index -1)")
21
+ i.fas.fa-angle-left
22
+ a.slyder__btn(
23
+ v-if="index != datos.length -1"
24
+ @click="selected = getId(index +1)"
25
+ @mouseover="mostrarIndicador = false"
26
+ )
27
+ i.fas.fa-angle-right
28
+ .indicador__container(v-if="mostrarIndicador && index === 0")
29
+ .indicador--click.indicador--sm
30
+ </template>
31
+
32
+ <script>
33
+ import ScrollHorizontal from './ScrollHorizontal'
34
+ import slyderMixins from './slyderMixins'
35
+ export default {
36
+ name: 'SlyderB',
37
+ components: { ScrollHorizontal },
38
+ mixins: [slyderMixins],
39
+ data: () => ({
40
+ mostrarIndicador: true,
41
+ }),
42
+ mounted() {
43
+ this.selected = this.getId(0)
44
+ },
45
+ }
46
+ </script>
47
+
48
+ <style lang="sass"></style>
@@ -0,0 +1,53 @@
1
+ <template lang="pug">
2
+ .slyder-c
3
+ ScrollHorizontal(v-if="datos.length" :selectedId="selected" item-full-width)
4
+ .slyder-c__slyde(
5
+ v-for="(item,index) in datos"
6
+ :key="'key-'+getId(index)"
7
+ :id="getId(index)"
8
+ )
9
+ .slyder-c__imagen.mb-4
10
+ figure.slyder-c__img
11
+ img(:src='item.imagen', :alt='item.leyendaImagen')
12
+ figcaption(v-if="item.leyendaImagen") {{item.leyendaImagen}}
13
+ .slyder-c__content
14
+ .slyder-c__content__header.mb-4
15
+ .row
16
+ .col
17
+ h3.mb-2.mb-md-0(v-if="item.hasOwnProperty('titulo')" v-html="item.titulo")
18
+ .col-auto
19
+ .slyder__action
20
+ .slyder__pagination {{index+1}}/{{datos.length}}
21
+ a.slyder__btn(v-if="index -1 >= 0" @click="selected = getId(index -1)")
22
+ i.fas.fa-angle-left
23
+ a.slyder__btn(
24
+ v-if="index != datos.length -1"
25
+ @click="selected = getId(index +1)"
26
+ @mouseover="mostrarIndicador = false"
27
+ )
28
+ i.fas.fa-angle-right
29
+ .indicador__container.indicador--left(v-if="mostrarIndicador && index === 0")
30
+ .indicador--click.indicador--sm
31
+
32
+ .slyder-c__content__body
33
+ p.mb-3(v-html="item.texto")
34
+
35
+ </template>
36
+
37
+ <script>
38
+ import slyderMixins from './slyderMixins'
39
+ import ScrollHorizontal from './ScrollHorizontal'
40
+ export default {
41
+ name: 'SlyderC',
42
+ components: { ScrollHorizontal },
43
+ mixins: [slyderMixins],
44
+ data: () => ({
45
+ mostrarIndicador: true,
46
+ }),
47
+ mounted() {
48
+ this.selected = this.getId(0)
49
+ },
50
+ }
51
+ </script>
52
+
53
+ <style lang="sass"></style>
@@ -0,0 +1,50 @@
1
+ <template lang="pug">
2
+ .slyder-d
3
+ ScrollHorizontal(v-if="datos.length" :selectedId="selected" item-full-width)
4
+ .slyder-d__slyde(
5
+ v-for="(item,index) in datos"
6
+ :key="'key-'+getId(index)"
7
+ :id="getId(index)"
8
+ )
9
+ .slyder-d__imagen.mb-4
10
+ figure.slyder-d__img
11
+ img(:src='item.imagen', :alt='item.leyendaImagen')
12
+
13
+ .slyder-d__content
14
+ .row
15
+ .col-md-8.col-lg-6
16
+ .slyder-d__content__card.p-4
17
+ h3(v-if="item.hasOwnProperty('titulo')" v-html="item.titulo")
18
+ p.mb-3(v-html="item.texto")
19
+ .slyder__action
20
+ .slyder__pagination {{index+1}}/{{datos.length}}
21
+ a.slyder__btn(v-if="index -1 >= 0" @click="selected = getId(index -1)")
22
+ i.fas.fa-angle-left
23
+ a.slyder__btn(
24
+ v-if="index != datos.length -1"
25
+ @click="selected = getId(index +1)"
26
+ @mouseover="mostrarIndicador = false"
27
+ )
28
+ i.fas.fa-angle-right
29
+ .indicador__container(v-if="mostrarIndicador && index === 0")
30
+ .indicador--click.indicador--sm
31
+
32
+ </template>
33
+
34
+ <script>
35
+ import slyderMixins from './slyderMixins'
36
+ import ScrollHorizontal from './ScrollHorizontal'
37
+ export default {
38
+ name: 'SlyderD',
39
+ components: { ScrollHorizontal },
40
+ mixins: [slyderMixins],
41
+ data: () => ({
42
+ mostrarIndicador: true,
43
+ }),
44
+ mounted() {
45
+ this.selected = this.getId(0)
46
+ },
47
+ }
48
+ </script>
49
+
50
+ <style lang="sass"></style>
@@ -0,0 +1,58 @@
1
+ <template lang="pug">
2
+ .slyder-e
3
+ ScrollHorizontal(v-if="elements.length && rendered" :selectedId="'sl-' + selected" item-full-width)
4
+ .slyder-e__slyde(
5
+ v-for="(item, index) in elements"
6
+ :key="'sl-key-'+item.id"
7
+ :id="'sl-'+item.id"
8
+ )
9
+ .slyder-e__content(
10
+ v-child="item.elm"
11
+ )
12
+ .slyder-e__actions.d-flex.p-2(
13
+ :class="[{'justify-content-center' : indicadores === 'centro'},{'justify-content-end' : indicadores === 'derecha'}]"
14
+ )
15
+ .slyder__action
16
+ .slyder__pagination {{index+1}}/{{elements.length}}
17
+ a.slyder__btn(
18
+ v-if="navObj.back"
19
+ @click="selected = navObj.back"
20
+ @mouseover="mostrarIndicador = false"
21
+ )
22
+ i.fas.fa-angle-left
23
+ a.slyder__btn(
24
+ v-if="navObj.next"
25
+ @click="selected = navObj.next"
26
+ @mouseover="mostrarIndicador = false"
27
+ )
28
+ i.fas.fa-angle-right
29
+ .indicador__container.indicador--left(v-if="mostrarIndicador && index === 0")
30
+ .indicador--click.indicador--sm
31
+
32
+ .hidden-slot
33
+ slot
34
+ </template>
35
+
36
+ <script>
37
+ import ScrollHorizontal from './ScrollHorizontal'
38
+ import componentSlotMixins from './componentSlotMixins'
39
+ export default {
40
+ name: 'SlyderE',
41
+ components: { ScrollHorizontal },
42
+ mixins: [componentSlotMixins],
43
+ props: {
44
+ indicadores: {
45
+ type: String,
46
+ default: 'izquierda',
47
+ validator: value =>
48
+ ['izquierda', 'centro', 'derecha'].indexOf(value) !== -1,
49
+ },
50
+ },
51
+ data: () => ({
52
+ mostrarIndicador: true,
53
+ secuencial: true,
54
+ }),
55
+ }
56
+ </script>
57
+
58
+ <style lang="sass"></style>
@@ -0,0 +1,141 @@
1
+ <template lang="pug">
2
+
3
+ .slyder-f
4
+ .slyder-f__btn.pe-3(
5
+ @click="clickAnterior"
6
+ :class="{ 'is-disabled': isFirst }"
7
+ )
8
+ i.fas.fa-chevron-left
9
+
10
+ .slyder-f__main(:id="'slyder-f-' + mainId")
11
+ ScrollHorizontal(
12
+ v-if="elements.length && rendered"
13
+ :selectedId="'sl-' + selected"
14
+ row
15
+ )
16
+ .slyder-f__slyde(
17
+ v-for="(item, index) in elements"
18
+ :key="'sl-key-'+item.id"
19
+ :id="'sl-'+item.id"
20
+ :class="columnas"
21
+ v-child="item.elm"
22
+ )
23
+
24
+ .slyder-f__btn.ps-3(
25
+ @click="clickSiguiente"
26
+ :class="{ 'is-disabled': isLast }"
27
+ )
28
+ i.fas.fa-chevron-right
29
+
30
+ .hidden-slot
31
+ slot
32
+ </template>
33
+
34
+ <script>
35
+ import ScrollHorizontal from './ScrollHorizontal'
36
+ import componentSlotMixins from './componentSlotMixins'
37
+ import slyderMixins from './slyderMixins'
38
+ export default {
39
+ name: 'SlyderF',
40
+ components: { ScrollHorizontal },
41
+ mixins: [componentSlotMixins, slyderMixins],
42
+ props: {
43
+ columnas: {
44
+ type: String,
45
+ default: '',
46
+ },
47
+ },
48
+ computed: {
49
+ isFirst() {
50
+ if (!this.elements.length) return true
51
+ return this.selected === this.elements[0].id
52
+ },
53
+ isLast() {
54
+ if (!this.elements.length) return true
55
+ //const visibleCount = this.getVisibleCardsCount()
56
+ const visibles = this.getVisibleSlides()
57
+ console.log('visibles', visibles)
58
+
59
+ const ids = this.elements.map(e => e.id)
60
+ const idx = ids.indexOf(this.selected)
61
+ return idx >= ids.length - visibles
62
+ },
63
+ },
64
+ methods: {
65
+ clickAnterior() {
66
+ const ids = this.elements.map(element => element.id)
67
+ const idxOfSelected = ids.indexOf(this.selected)
68
+ if (idxOfSelected > 0) {
69
+ this.selected = ids[idxOfSelected - 1]
70
+ }
71
+ },
72
+ clickSiguiente() {
73
+ if (this.isLast) return
74
+ const ids = this.elements.map(e => e.id)
75
+ const idx = ids.indexOf(this.selected)
76
+ if (idx < ids.length - 1) {
77
+ this.selected = ids[idx + 1]
78
+ }
79
+ },
80
+ getVisibleCardsCount() {
81
+ const width = window.innerWidth
82
+ // Simula Bootstrap: xl ≥ 1200px, lg ≥ 992px
83
+ if (width >= 1200) return 3 // col-xl-3
84
+ if (width >= 992) return 2 // col-lg-4
85
+ if (width >= 768) return 2 // supongamos col-md-6
86
+ return 1 // móviles
87
+ },
88
+ getVisibleSlides() {
89
+ const clases = this.columnas.split(' ')
90
+ let cols = 12 // valor por defecto
91
+
92
+ // Definir breakpoints de Bootstrap
93
+ const width = window.innerWidth
94
+ let claseActiva = null
95
+
96
+ // Buscar la clase más específica según el ancho
97
+ if (width >= 1200) {
98
+ claseActiva = clases.find(c => c.startsWith('col-xl-'))
99
+ }
100
+ if (!claseActiva && width >= 992) {
101
+ claseActiva = clases.find(c => c.startsWith('col-lg-'))
102
+ }
103
+ if (!claseActiva && width >= 768) {
104
+ claseActiva = clases.find(c => c.startsWith('col-md-'))
105
+ }
106
+ if (!claseActiva && width >= 576) {
107
+ claseActiva = clases.find(c => c.startsWith('col-sm-'))
108
+ }
109
+ if (!claseActiva) {
110
+ claseActiva = clases.find(
111
+ c => c.startsWith('col-') && !c.match(/col-(sm|md|lg|xl)-/),
112
+ )
113
+ }
114
+
115
+ // Extraer el número de columnas de la clase activa
116
+ if (claseActiva) {
117
+ const match = claseActiva.match(/col(?:-(?:sm|md|lg|xl))?-(\d+)/)
118
+ if (match) {
119
+ cols = parseInt(match[1])
120
+ }
121
+ }
122
+
123
+ // Calcular cuántos slides caben
124
+ return Math.floor(12 / cols)
125
+ },
126
+ mounted() {
127
+ if (this.elements.length && !this.selected) {
128
+ this.selected = this.elements[0].id
129
+ }
130
+ // Opcional: recalcular al cambiar el tamaño de pantalla
131
+ window.addEventListener('resize', this.$forceUpdate)
132
+ },
133
+ },
134
+ }
135
+ </script>
136
+
137
+ <style lang="sass">
138
+ .slyder-f__btn.is-disabled
139
+ opacity: 0.1
140
+ pointer-events: none
141
+ </style>
@@ -0,0 +1,44 @@
1
+ <template lang="pug">
2
+ .tabs-a
3
+ .row
4
+ .col-lg-4.col-xl-3
5
+ .row
6
+ .col-sm-6.col-lg-12.mb-3(
7
+ v-for="(elm,index) of elements"
8
+ :key="'tabs-menu-'+elm.id"
9
+ )
10
+ button.tabs-a__tab(
11
+ :class="{'tabs-a__tab__selected': selected === elm.id}"
12
+ @click="selected = elm.id"
13
+ @mouseover="mostrarIndicador = mostrarIndicador && index >= 1 ? false : mostrarIndicador"
14
+ )
15
+ .tabs-a__tab__text(v-html="elm.titulo")
16
+ .indicador__container(v-if="mostrarIndicador && index === 1")
17
+ .indicador--click
18
+
19
+ .col-lg-8.col-xl-9
20
+ .tabs-a__content-item(
21
+ v-for="elm of elements"
22
+ :key="'tabs-a-content-'+elm.id"
23
+ v-show="selected === elm.id"
24
+ :class="{'tabs-a__content-item--active' : selected === elm.id}"
25
+ v-child="elm.elm"
26
+ )
27
+
28
+ .hidden-slot
29
+ slot
30
+
31
+ </template>
32
+
33
+ <script>
34
+ import componentSlotMixins from './componentSlotMixins'
35
+ export default {
36
+ name: 'TabsA',
37
+ mixins: [componentSlotMixins],
38
+ data: () => ({
39
+ mostrarIndicador: true,
40
+ }),
41
+ }
42
+ </script>
43
+
44
+ <style lang="sass"></style>
@@ -0,0 +1,40 @@
1
+ <template lang="pug">
2
+ .tabs-b
3
+ .tabs-b__header.row.m-0
4
+ .col-6.col-sm-4.col-lg.tabs-b__tab(
5
+ v-for="(elm,index) of elements"
6
+ :key="'tabs-b-menu-'+elm.id"
7
+ :class="{'tabs-b__tab--active' : selected === elm.id}"
8
+ @click="selected = elm.id"
9
+ @mouseover="mostrarIndicador = mostrarIndicador && index >= 1 ? false : mostrarIndicador"
10
+ )
11
+ .indicador__container(v-if="mostrarIndicador && index === 1")
12
+ .indicador--click
13
+ .tabs-b__tab__icon(v-if="elm.icono")
14
+ img(:src="elm.icono")
15
+ .tabs-b__tab__title
16
+ span(v-html="elm.titulo")
17
+
18
+ .tabs-b__content-item(
19
+ v-for="elm of elements"
20
+ :key="'tabs-content-'+elm.id"
21
+ v-show="selected === elm.id"
22
+ v-child="elm.elm"
23
+ )
24
+
25
+ .hidden-slot
26
+ slot
27
+ </template>
28
+
29
+ <script>
30
+ import componentSlotMixins from './componentSlotMixins'
31
+ export default {
32
+ name: 'TabsB',
33
+ mixins: [componentSlotMixins],
34
+ data: () => ({
35
+ mostrarIndicador: true,
36
+ }),
37
+ }
38
+ </script>
39
+
40
+ <style lang="sass"></style>
@@ -0,0 +1,39 @@
1
+ <template lang="pug">
2
+ .tabs-c
3
+ .tabs-c__header
4
+ .row.m-0
5
+ .col-sm-6.col-lg-4.col-xl.tabs-c__tab.py-3(
6
+ v-for="(elm,index) of elements"
7
+ :key="'tabs-c-menu-'+elm.id"
8
+ :class="{'tabs-c__tab--active' : selected === elm.id}"
9
+ @click="selected = elm.id"
10
+ role="button"
11
+ @mouseover="mostrarIndicador = mostrarIndicador && index >= 1 ? false : mostrarIndicador"
12
+ )
13
+ .indicador__container(v-if="mostrarIndicador && index === 1")
14
+ .indicador--click
15
+ span(v-html="elm.titulo")
16
+ .tabs-c__content-item(
17
+ v-for="elm of elements"
18
+ :key="'tabs-content-'+elm.id"
19
+ v-show="selected === elm.id"
20
+ v-child="elm.elm"
21
+ )
22
+
23
+ .hidden-slot
24
+ slot
25
+
26
+ </template>
27
+
28
+ <script>
29
+ import componentSlotMixins from './componentSlotMixins'
30
+ export default {
31
+ name: 'TabsC',
32
+ mixins: [componentSlotMixins],
33
+ data: () => ({
34
+ mostrarIndicador: true,
35
+ }),
36
+ }
37
+ </script>
38
+
39
+ <style lang="sass"></style>