@cooperco/cooper-component-library 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/package.json +85 -0
- package/src/assets/main.css +155 -0
- package/src/assets/theme.css +67 -0
- package/src/assets/usercard.jpg +0 -0
- package/src/assets/vue.svg +1 -0
- package/src/components/Accordion.vue +33 -0
- package/src/components/AccordionItem.vue +53 -0
- package/src/components/CTA.vue +39 -0
- package/src/components/CarouselModule.vue +46 -0
- package/src/components/ContainerCollectionModule.vue +33 -0
- package/src/components/ContainerModule.vue +116 -0
- package/src/components/ContentAndImage.vue +34 -0
- package/src/components/ContentMediaModule.vue +50 -0
- package/src/components/ContentModule.vue +51 -0
- package/src/components/FooterNavigation.vue +57 -0
- package/src/components/IconChevron.vue +107 -0
- package/src/components/Image.vue +15 -0
- package/src/components/LogoCollectionModule.vue +30 -0
- package/src/components/LogoContainerModule.vue +30 -0
- package/src/components/NavigationElement.vue +92 -0
- package/src/components/PrimaryNavigation.vue +68 -0
- package/src/components/SplitModule.vue +42 -0
- package/src/components/Testimonial.vue +48 -0
- package/src/components/TestimonialModule.vue +48 -0
- package/src/components/TileCollection.vue +37 -0
- package/src/components/TileCollectionModule.vue +45 -0
- package/src/components/TileContent.vue +105 -0
- package/src/components/Video.vue +18 -0
- package/src/components/types/Accordion.ts +18 -0
- package/src/components/types/AccordionItem.ts +19 -0
- package/src/components/types/CTA.ts +13 -0
- package/src/components/types/CarouselModule.ts +21 -0
- package/src/components/types/ContainerCollectionModule.ts +12 -0
- package/src/components/types/ContainerModule.ts +35 -0
- package/src/components/types/ContentAndImage.ts +14 -0
- package/src/components/types/ContentMediaModule.ts +14 -0
- package/src/components/types/ContentModule.ts +21 -0
- package/src/components/types/FooterNavigation.ts +12 -0
- package/src/components/types/Image.ts +12 -0
- package/src/components/types/LogoCollectionModule.ts +12 -0
- package/src/components/types/LogoContainerModule.ts +12 -0
- package/src/components/types/NavigationElement.ts +19 -0
- package/src/components/types/PrimaryNavigation.ts +10 -0
- package/src/components/types/SplitModule.ts +16 -0
- package/src/components/types/Testimonial.ts +17 -0
- package/src/components/types/TileCollection.ts +14 -0
- package/src/components/types/TileContent.ts +34 -0
- package/src/components/types/Video.ts +8 -0
- package/src/components/types/index.ts +10 -0
- package/src/presets/aura/accordion/index.js +81 -0
- package/src/presets/aura/autocomplete/index.js +280 -0
- package/src/presets/aura/avatar/index.js +46 -0
- package/src/presets/aura/badge/index.js +43 -0
- package/src/presets/aura/badgedirective/index.js +49 -0
- package/src/presets/aura/blockui/index.js +8 -0
- package/src/presets/aura/breadcrumb/index.js +63 -0
- package/src/presets/aura/button/index.js +511 -0
- package/src/presets/aura/calendar/index.js +702 -0
- package/src/presets/aura/card/index.js +53 -0
- package/src/presets/aura/carousel/index.js +160 -0
- package/src/presets/aura/cascadeselect/index.js +220 -0
- package/src/presets/aura/checkbox/index.js +107 -0
- package/src/presets/aura/chip/index.js +45 -0
- package/src/presets/aura/chips/index.js +126 -0
- package/src/presets/aura/colorpicker/index.js +132 -0
- package/src/presets/aura/confirmpopup/index.js +111 -0
- package/src/presets/aura/contextmenu/index.js +132 -0
- package/src/presets/aura/datatable/index.js +1290 -0
- package/src/presets/aura/dataview/index.js +40 -0
- package/src/presets/aura/deferred/index.js +3 -0
- package/src/presets/aura/dialog/index.js +250 -0
- package/src/presets/aura/divider/index.js +72 -0
- package/src/presets/aura/dock/index.js +97 -0
- package/src/presets/aura/dropdown/index.js +297 -0
- package/src/presets/aura/fieldset/index.js +95 -0
- package/src/presets/aura/fileupload/index.js +175 -0
- package/src/presets/aura/floatlabel/index.js +26 -0
- package/src/presets/aura/galleria/index.js +353 -0
- package/src/presets/aura/global.js +90 -0
- package/src/presets/aura/iconfield/index.js +22 -0
- package/src/presets/aura/image/index.js +206 -0
- package/src/presets/aura/index.js +181 -0
- package/src/presets/aura/inlinemessage/index.js +46 -0
- package/src/presets/aura/inplace/index.js +27 -0
- package/src/presets/aura/inputgroup/index.js +5 -0
- package/src/presets/aura/inputgroupaddon/index.js +28 -0
- package/src/presets/aura/inputmask/index.js +47 -0
- package/src/presets/aura/inputnumber/index.js +293 -0
- package/src/presets/aura/inputotp/index.js +69 -0
- package/src/presets/aura/inputswitch/index.js +94 -0
- package/src/presets/aura/inputtext/index.js +63 -0
- package/src/presets/aura/knob/index.js +47 -0
- package/src/presets/aura/listbox/index.js +158 -0
- package/src/presets/aura/megamenu/index.js +206 -0
- package/src/presets/aura/menu/index.js +122 -0
- package/src/presets/aura/menubar/index.js +184 -0
- package/src/presets/aura/message/index.js +112 -0
- package/src/presets/aura/metergroup/index.js +110 -0
- package/src/presets/aura/multiselect/index.js +579 -0
- package/src/presets/aura/orderlist/index.js +281 -0
- package/src/presets/aura/organizationchart/index.js +142 -0
- package/src/presets/aura/overlaypanel/index.js +34 -0
- package/src/presets/aura/paginator/index.js +566 -0
- package/src/presets/aura/panel/index.js +102 -0
- package/src/presets/aura/panelmenu/index.js +130 -0
- package/src/presets/aura/password/index.js +143 -0
- package/src/presets/aura/picklist/index.js +718 -0
- package/src/presets/aura/progressbar/index.js +64 -0
- package/src/presets/aura/progressspinner/index.js +51 -0
- package/src/presets/aura/radiobutton/index.js +121 -0
- package/src/presets/aura/rating/index.js +95 -0
- package/src/presets/aura/ripple/index.js +6 -0
- package/src/presets/aura/scrollpanel/index.js +77 -0
- package/src/presets/aura/scrolltop/index.js +45 -0
- package/src/presets/aura/selectbutton/index.js +66 -0
- package/src/presets/aura/sidebar/index.js +160 -0
- package/src/presets/aura/skeleton/index.js +19 -0
- package/src/presets/aura/slider/index.js +144 -0
- package/src/presets/aura/speeddial/index.js +579 -0
- package/src/presets/aura/splitbutton/index.js +1185 -0
- package/src/presets/aura/splitter/index.js +71 -0
- package/src/presets/aura/stepper/index.js +183 -0
- package/src/presets/aura/steps/index.js +117 -0
- package/src/presets/aura/tabmenu/index.js +75 -0
- package/src/presets/aura/tabview/index.js +162 -0
- package/src/presets/aura/tag/index.js +44 -0
- package/src/presets/aura/terminal/index.js +60 -0
- package/src/presets/aura/textarea/index.js +49 -0
- package/src/presets/aura/tieredmenu/index.js +125 -0
- package/src/presets/aura/timeline/index.js +114 -0
- package/src/presets/aura/toast/index.js +151 -0
- package/src/presets/aura/togglebutton/index.js +98 -0
- package/src/presets/aura/toolbar/index.js +28 -0
- package/src/presets/aura/tooltip/index.js +73 -0
- package/src/presets/aura/tree/index.js +294 -0
- package/src/presets/aura/treeselect/index.js +404 -0
- package/src/presets/aura/treetable/index.js +513 -0
- package/src/presets/aura/tristatecheckbox/index.js +121 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { ContentMediaModule } from './types/ContentMediaModule'
|
|
3
|
+
import { VariantOptions } from '../types'
|
|
4
|
+
import { computed } from 'vue'
|
|
5
|
+
import ContentModule from './ContentModule.vue'
|
|
6
|
+
|
|
7
|
+
const props = defineProps<ContentMediaModule>()
|
|
8
|
+
|
|
9
|
+
const variantValue = computed(() => {
|
|
10
|
+
return VariantOptions[props.variant]
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
const computedStyle = computed(() => {
|
|
14
|
+
return {
|
|
15
|
+
'background-color': props.backgroundColor ?? 'transparent',
|
|
16
|
+
color: props.textColor ?? 'inherit',
|
|
17
|
+
}
|
|
18
|
+
})
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<template>
|
|
22
|
+
<component
|
|
23
|
+
:is="isChild ? 'div' : 'section'"
|
|
24
|
+
:style="computedStyle"
|
|
25
|
+
class="content-media-module"
|
|
26
|
+
>
|
|
27
|
+
<div
|
|
28
|
+
class="content-media-container flex flex-row gap-5 relative"
|
|
29
|
+
:class="{ container: variantValue != VariantOptions.Hero }"
|
|
30
|
+
>
|
|
31
|
+
<img
|
|
32
|
+
v-if="media"
|
|
33
|
+
class="media"
|
|
34
|
+
:class="{ 'w-screen': variantValue == VariantOptions.Hero }"
|
|
35
|
+
:src="media.src"
|
|
36
|
+
:alt="media.altTag"
|
|
37
|
+
:height="media.height"
|
|
38
|
+
:width="media.width"
|
|
39
|
+
/>
|
|
40
|
+
|
|
41
|
+
<ContentModule
|
|
42
|
+
class="content"
|
|
43
|
+
:class="{
|
|
44
|
+
absolute: variantValue == VariantOptions.Hero,
|
|
45
|
+
}"
|
|
46
|
+
:="content"
|
|
47
|
+
/>
|
|
48
|
+
</div>
|
|
49
|
+
</component>
|
|
50
|
+
</template>
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { ContentModule } from './types/ContentModule'
|
|
3
|
+
import CTA from './CTA.vue'
|
|
4
|
+
import { computed } from 'vue'
|
|
5
|
+
|
|
6
|
+
const props = defineProps<ContentModule>()
|
|
7
|
+
|
|
8
|
+
const computedStyle = computed(() => {
|
|
9
|
+
return {
|
|
10
|
+
'background-color': props.backgroundColor ?? 'transparent',
|
|
11
|
+
color: props.textColor ?? 'inherit',
|
|
12
|
+
}
|
|
13
|
+
})
|
|
14
|
+
const computedClassname = computed(
|
|
15
|
+
() => `content-module p-5 ${props.class ?? ''}`
|
|
16
|
+
)
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<template>
|
|
20
|
+
<div :class="computedClassname" :style="computedStyle">
|
|
21
|
+
<div :class="`content-module-container mx-auto ${pt?.container ?? ''}`">
|
|
22
|
+
<img
|
|
23
|
+
v-if="logo"
|
|
24
|
+
:src="logo.src"
|
|
25
|
+
:alt="logo.alt"
|
|
26
|
+
:class="`${pt?.logo ?? ''}`"
|
|
27
|
+
/>
|
|
28
|
+
<h2
|
|
29
|
+
v-if="headline"
|
|
30
|
+
:class="`content-module-headline ${pt?.headline ?? ''}`"
|
|
31
|
+
>
|
|
32
|
+
{{ headline }}
|
|
33
|
+
</h2>
|
|
34
|
+
<h2
|
|
35
|
+
v-if="subHeadline"
|
|
36
|
+
:class="`content-module-subHeadline ${pt?.subHeadline ?? ''}`"
|
|
37
|
+
>
|
|
38
|
+
{{ subHeadline }}
|
|
39
|
+
</h2>
|
|
40
|
+
<p
|
|
41
|
+
v-if="description"
|
|
42
|
+
:class="`content-module-description ${pt?.description ?? ''}`"
|
|
43
|
+
>
|
|
44
|
+
{{ description }}
|
|
45
|
+
</p>
|
|
46
|
+
<div v-if="CTAs" :class="`content-module-ctas ${pt?.ctas ?? ''}`">
|
|
47
|
+
<CTA v-for="(item, index) in CTAs" v-bind="item" />
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
</template>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type FooterNavigation } from './types/FooterNavigation'
|
|
3
|
+
import NavigationElement from './NavigationElement.vue'
|
|
4
|
+
import { computed } from 'vue'
|
|
5
|
+
|
|
6
|
+
const props = defineProps<FooterNavigation>()
|
|
7
|
+
|
|
8
|
+
const computedStyle = computed(() => {
|
|
9
|
+
return {
|
|
10
|
+
'background-color': props.backgroundColor ?? 'transparent',
|
|
11
|
+
color: props.textColor ?? 'inherit',
|
|
12
|
+
}
|
|
13
|
+
})
|
|
14
|
+
</script>
|
|
15
|
+
<template>
|
|
16
|
+
<footer class="w-full p-5" :style="computedStyle">
|
|
17
|
+
<div class="container flex flex-col mx-auto">
|
|
18
|
+
<div class="flex justify-between flex-col sm:flex-row p-5 gap-4">
|
|
19
|
+
<a href="/" class="footer-navigation-logo text-center">
|
|
20
|
+
<img
|
|
21
|
+
v-if="logo"
|
|
22
|
+
class="min-h-[95px] min-w-[100px] w-[100px] h-[95px]"
|
|
23
|
+
:="logo"
|
|
24
|
+
/>
|
|
25
|
+
{{ title }}
|
|
26
|
+
</a>
|
|
27
|
+
<div
|
|
28
|
+
v-if="navigation"
|
|
29
|
+
class="footer-navigation px-2 pt-2 pb-4 sm:flex sm:p-0 sm:space-x-2 md:space-x-4 space-y-5 sm:space-y-0"
|
|
30
|
+
>
|
|
31
|
+
<NavigationElement
|
|
32
|
+
v-for="(item, index) in navigation"
|
|
33
|
+
:class="`footer-nav-item-${index}`"
|
|
34
|
+
role="menuitem"
|
|
35
|
+
tabindex="-1"
|
|
36
|
+
:="{ ...item, isChild: false, elementType: 'footer' }"
|
|
37
|
+
/>
|
|
38
|
+
</div>
|
|
39
|
+
<div
|
|
40
|
+
v-if="socialMediaRef"
|
|
41
|
+
class="flex flex-wrap footer-social space-x-2"
|
|
42
|
+
>
|
|
43
|
+
<a
|
|
44
|
+
v-for="(item, index) in socialMediaRef"
|
|
45
|
+
:class="`footer-social-item-${index}`"
|
|
46
|
+
:href="item?.url?.link"
|
|
47
|
+
>
|
|
48
|
+
<img :="item.icon" />
|
|
49
|
+
</a>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
<hr />
|
|
53
|
+
<!-- switch to rich text if we go forward with this -->
|
|
54
|
+
<div v-if="legalText" class="footer-legal py-5" v-html="legalText" />
|
|
55
|
+
</div>
|
|
56
|
+
</footer>
|
|
57
|
+
</template>
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { computed } from 'vue'
|
|
3
|
+
const props = defineProps({
|
|
4
|
+
bold: {
|
|
5
|
+
type: Boolean,
|
|
6
|
+
default: false,
|
|
7
|
+
},
|
|
8
|
+
orientation: {
|
|
9
|
+
type: String,
|
|
10
|
+
default: 'right',
|
|
11
|
+
},
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
const orientClass = computed(() => {
|
|
15
|
+
return 'orient-' + props.orientation
|
|
16
|
+
})
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<template>
|
|
20
|
+
<i>
|
|
21
|
+
<svg
|
|
22
|
+
v-if="!props.bold"
|
|
23
|
+
:class="orientClass"
|
|
24
|
+
xwidth="19px"
|
|
25
|
+
xheight="35px"
|
|
26
|
+
height="1em"
|
|
27
|
+
viewBox="0 0 19 35"
|
|
28
|
+
version="1.1"
|
|
29
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
30
|
+
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
31
|
+
>
|
|
32
|
+
<title>icon-arrow-lg</title>
|
|
33
|
+
<defs>
|
|
34
|
+
<path
|
|
35
|
+
id="path-1"
|
|
36
|
+
d="M366,124.5 C366,124.907277 365.845623,125.313759 365.536079,125.624786 L349.70258,141.534057 C349.084282,142.155314 348.08123,142.155314 347.463724,141.534057 C346.845425,140.9128 346.845425,139.905743 347.463724,139.284486 L362.177794,124.5 L347.463724,109.715514 C346.845425,109.094257 346.845425,108.0872 347.463724,107.465943 C348.082022,106.844686 349.085074,106.844686 349.70258,107.465943 L365.536079,123.375214 C365.845623,123.686241 366,124.092723 366,124.5"
|
|
37
|
+
></path>
|
|
38
|
+
</defs>
|
|
39
|
+
<g id="r4" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
40
|
+
<g
|
|
41
|
+
id="CCB_Sperm-Donor_HP_M_R4"
|
|
42
|
+
transform="translate(-380.000000, -2753.000000)"
|
|
43
|
+
>
|
|
44
|
+
<g id="TESTIMONIALS" transform="translate(0.000000, 2175.000000)">
|
|
45
|
+
<g id="Group-15" transform="translate(33.000000, 471.000000)">
|
|
46
|
+
<mask id="mask-2" fill="white">
|
|
47
|
+
<use xlink:href="#path-1"></use>
|
|
48
|
+
</mask>
|
|
49
|
+
<use
|
|
50
|
+
id="icon-arrow-lg"
|
|
51
|
+
fill="currentcolor"
|
|
52
|
+
xlink:href="#path-1"
|
|
53
|
+
></use>
|
|
54
|
+
</g>
|
|
55
|
+
</g>
|
|
56
|
+
</g>
|
|
57
|
+
</g>
|
|
58
|
+
</svg>
|
|
59
|
+
<svg
|
|
60
|
+
v-if="props.bold"
|
|
61
|
+
:class="orientClass"
|
|
62
|
+
xwidth="7px"
|
|
63
|
+
xheight="10px"
|
|
64
|
+
height="1em"
|
|
65
|
+
viewBox="0 0 7 10"
|
|
66
|
+
version="1.1"
|
|
67
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
68
|
+
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
69
|
+
>
|
|
70
|
+
<title>icon-arrow</title>
|
|
71
|
+
<g id="r4" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
72
|
+
<g
|
|
73
|
+
id="CCB_Sperm-Donor_Location_1_D_R4"
|
|
74
|
+
transform="translate(-182.000000, -2023.000000)"
|
|
75
|
+
fill="currentcolor"
|
|
76
|
+
>
|
|
77
|
+
<g id="Group-2" transform="translate(120.000000, 409.000000)">
|
|
78
|
+
<g id="Group" transform="translate(0.000000, 90.000000)">
|
|
79
|
+
<g id="LOS-ALTOS" transform="translate(60.000000, 1294.000000)">
|
|
80
|
+
<g id="ADDRESS" transform="translate(0.000000, 12.000000)">
|
|
81
|
+
<g id="Group-19" transform="translate(2.696552, 214.000000)">
|
|
82
|
+
<path
|
|
83
|
+
id="icon-arrow"
|
|
84
|
+
d="M5.59137931,8.92855676 C5.59137931,9.13884623 5.51349799,9.34872498 5.35733597,9.50931713 L1.36342228,13.6165333 C1.05149763,13.9373069 0.545868153,13.9373069 0.233943494,13.6165333 C-0.0779811647,13.2957597 -0.0779811647,12.7757862 0.233943494,12.4550126 L3.66271839,8.92855676 L0.233943494,5.40210093 C-0.0779811647,5.08132735 -0.0779811647,4.56135377 0.233943494,4.24058019 C0.545868153,3.9198066 1.05149763,3.9198066 1.36342228,4.24058019 L5.35733597,8.34779639 C5.51349799,8.50838854 5.59137931,8.71826729 5.59137931,8.92855676 Z"
|
|
85
|
+
></path>
|
|
86
|
+
</g>
|
|
87
|
+
</g>
|
|
88
|
+
</g>
|
|
89
|
+
</g>
|
|
90
|
+
</g>
|
|
91
|
+
</g>
|
|
92
|
+
</g>
|
|
93
|
+
</svg>
|
|
94
|
+
</i>
|
|
95
|
+
</template>
|
|
96
|
+
|
|
97
|
+
<style scoped>
|
|
98
|
+
.orient-up {
|
|
99
|
+
transform: rotate(-90deg);
|
|
100
|
+
}
|
|
101
|
+
.orient-down {
|
|
102
|
+
transform: rotate(90deg);
|
|
103
|
+
}
|
|
104
|
+
.orient-left {
|
|
105
|
+
transform: rotate(180deg);
|
|
106
|
+
}
|
|
107
|
+
</style>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { LogoCollectionModule } from './types/LogoCollectionModule'
|
|
3
|
+
import { computed } from 'vue'
|
|
4
|
+
|
|
5
|
+
const props = defineProps<LogoCollectionModule>()
|
|
6
|
+
|
|
7
|
+
const computedStyle = computed(() => {
|
|
8
|
+
return {
|
|
9
|
+
'background-color': props.backgroundColor ?? 'transparent',
|
|
10
|
+
color: props.textColor ?? 'inherit',
|
|
11
|
+
}
|
|
12
|
+
})
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<template>
|
|
16
|
+
<section :style="computedStyle" class="logo-module">
|
|
17
|
+
<div :class="`container mx-auto ${pt?.container ?? ''}`">
|
|
18
|
+
<h2 v-if="headline" :class="`logo-module-headline ${pt?.headline ?? ''}`">
|
|
19
|
+
{{ headline }}
|
|
20
|
+
</h2>
|
|
21
|
+
<div
|
|
22
|
+
v-if="modules"
|
|
23
|
+
:class="`logo-module-content flex flex-wrap justify-evenly gap-2 ${pt?.content ?? ''}`"
|
|
24
|
+
>
|
|
25
|
+
<Image v-for="image in modules" v-bind="image" />
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
</section>
|
|
29
|
+
</template>
|
|
30
|
+
./types/LogoCollectionModule
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { LogoContainerModule } from './types/LogoContainerModule'
|
|
3
|
+
import { computed } from 'vue'
|
|
4
|
+
|
|
5
|
+
const props = defineProps<LogoContainerModule>()
|
|
6
|
+
|
|
7
|
+
const computedStyle = computed(() => {
|
|
8
|
+
return {
|
|
9
|
+
'background-color': props.backgroundColor ?? 'transparent',
|
|
10
|
+
color: props.textColor ?? 'inherit',
|
|
11
|
+
}
|
|
12
|
+
})
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<template>
|
|
16
|
+
<section :style="computedStyle" class="logo-module">
|
|
17
|
+
<div :class="`container mx-auto ${pt?.container ?? ''}`">
|
|
18
|
+
<h2 v-if="headline" :class="`logo-module-headline ${pt?.headline ?? ''}`">
|
|
19
|
+
{{ headline }}
|
|
20
|
+
</h2>
|
|
21
|
+
<div
|
|
22
|
+
v-if="modules"
|
|
23
|
+
:class="`logo-module-content flex flex-wrap justify-evenly gap-2 ${pt?.content ?? ''}`"
|
|
24
|
+
>
|
|
25
|
+
<Image v-for="image in modules" v-bind="image" />
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
</section>
|
|
29
|
+
</template>
|
|
30
|
+
./types/LogoContainerModule
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import {
|
|
3
|
+
NavigationElement as NavigationElementT,
|
|
4
|
+
NavigationElementType,
|
|
5
|
+
} from './types/NavigationElement'
|
|
6
|
+
import { computed, ref } from 'vue'
|
|
7
|
+
import IconChevron from './IconChevron.vue'
|
|
8
|
+
import { RouterLink } from 'vue-router'
|
|
9
|
+
|
|
10
|
+
const props = defineProps<NavigationElementT>()
|
|
11
|
+
|
|
12
|
+
// Update to support url vs page
|
|
13
|
+
const url = computed(() => {
|
|
14
|
+
if (props.linkRef?.page) {
|
|
15
|
+
return `/${props.linkRef?.page}`
|
|
16
|
+
}
|
|
17
|
+
return props?.linkRef?.link
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
const elementTypeValue = computed(() => {
|
|
21
|
+
console.log(props.title, props.isChild)
|
|
22
|
+
return NavigationElementType[props.elementType ?? 'header']
|
|
23
|
+
})
|
|
24
|
+
const showSubNavigation = ref(false)
|
|
25
|
+
const builtClassname = computed(
|
|
26
|
+
() =>
|
|
27
|
+
`relative m-0 ${props.class ?? ''} ${props.isChild ? 'sub-' : ''}navigation-element`
|
|
28
|
+
)
|
|
29
|
+
</script>
|
|
30
|
+
|
|
31
|
+
<template>
|
|
32
|
+
<component :is="isChild ? 'li' : 'div'" :class="builtClassname">
|
|
33
|
+
<component
|
|
34
|
+
v-if="
|
|
35
|
+
elementTypeValue === NavigationElementType.header ||
|
|
36
|
+
(isChild && (url || subNavigation))
|
|
37
|
+
"
|
|
38
|
+
:is="url || isChild ? RouterLink : 'button'"
|
|
39
|
+
:to="url"
|
|
40
|
+
class="flex items-center hover:underline"
|
|
41
|
+
:class="{
|
|
42
|
+
'whitespace-nowrap': elementTypeValue === NavigationElementType.header,
|
|
43
|
+
}"
|
|
44
|
+
aria-expanded="true"
|
|
45
|
+
aria-haspopup="true"
|
|
46
|
+
@click.prevent="showSubNavigation = !showSubNavigation"
|
|
47
|
+
>
|
|
48
|
+
{{ title }}
|
|
49
|
+
<IconChevron
|
|
50
|
+
v-if="!isChild && subNavigation && !(url || isChild)"
|
|
51
|
+
class="ps-2 text-xs"
|
|
52
|
+
:orientation="showSubNavigation ? 'up' : 'down'"
|
|
53
|
+
:bold="true"
|
|
54
|
+
/>
|
|
55
|
+
</component>
|
|
56
|
+
<h2
|
|
57
|
+
v-else-if="elementTypeValue == NavigationElementType.footer"
|
|
58
|
+
class="mb-2 font-bold"
|
|
59
|
+
>
|
|
60
|
+
{{ title }}
|
|
61
|
+
</h2>
|
|
62
|
+
|
|
63
|
+
<ul
|
|
64
|
+
v-if="!isChild && subNavigation"
|
|
65
|
+
:class="{
|
|
66
|
+
hidden:
|
|
67
|
+
!showSubNavigation &&
|
|
68
|
+
elementTypeValue == NavigationElementType.header,
|
|
69
|
+
'sm:absolute left-0 z-10 sm:mt-2 space-y-2 origin-top-right rounded-md ring-opacity-5 focus:outline-none sm:shadow-lg sm:ring-1 sm:ring-white sm:bg-white p-5':
|
|
70
|
+
elementTypeValue == NavigationElementType.header,
|
|
71
|
+
}"
|
|
72
|
+
role="menu"
|
|
73
|
+
aria-orientation="vertical"
|
|
74
|
+
aria-labelledby="menu-button"
|
|
75
|
+
tabindex="-1"
|
|
76
|
+
>
|
|
77
|
+
<NavigationElement
|
|
78
|
+
v-for="(item, index) in subNavigation"
|
|
79
|
+
:key="item.title"
|
|
80
|
+
class="ms-3 sm:ms-0"
|
|
81
|
+
:class="`sub-navigation-element-item-${index}`"
|
|
82
|
+
role="menuitem"
|
|
83
|
+
tabindex="-1"
|
|
84
|
+
:="{ ...item, elementType, isChild: true }"
|
|
85
|
+
/>
|
|
86
|
+
</ul>
|
|
87
|
+
|
|
88
|
+
<template v-if="htmlRef">
|
|
89
|
+
<div v-html="htmlRef" />
|
|
90
|
+
</template>
|
|
91
|
+
</component>
|
|
92
|
+
</template>
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { PrimaryNavigation } from './types/PrimaryNavigation'
|
|
3
|
+
import Image from './Image.vue'
|
|
4
|
+
import NavigationElement from './NavigationElement.vue'
|
|
5
|
+
import { ref, computed } from 'vue'
|
|
6
|
+
|
|
7
|
+
const props = defineProps<PrimaryNavigation>()
|
|
8
|
+
const isOpen = ref(true)
|
|
9
|
+
const computedStyle = computed(() => {
|
|
10
|
+
return {
|
|
11
|
+
'background-color': props.backgroundColor ?? 'white',
|
|
12
|
+
color: props.textColor ?? 'inherit',
|
|
13
|
+
}
|
|
14
|
+
})
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
<header
|
|
19
|
+
class="primary-navigation-header sticky top-0 z-50 p-5 shadow-2xl"
|
|
20
|
+
:style="computedStyle"
|
|
21
|
+
>
|
|
22
|
+
<div class="container sm:flex sm:justify-between sm:items-center mx-auto">
|
|
23
|
+
<div class="flex items-center justify-between py-3 sm:p-0">
|
|
24
|
+
<a
|
|
25
|
+
href="/"
|
|
26
|
+
class="primary-navigation-logo flex items-center h-12 sm:h-16 ps-5"
|
|
27
|
+
>
|
|
28
|
+
<Image v-bind="logo" />
|
|
29
|
+
</a>
|
|
30
|
+
<div class="sm:hidden">
|
|
31
|
+
<button @click="isOpen = !isOpen" type="button" class="block">
|
|
32
|
+
<svg class="h-6 w-6 fill-current" viewBox="0 0 24 24">
|
|
33
|
+
<!-- Hamburger SVG path-->
|
|
34
|
+
<path
|
|
35
|
+
v-if="isOpen"
|
|
36
|
+
fill-rule="evenodd"
|
|
37
|
+
d="M18.278 16.864a1 1 0 0 1-1.414 1.414l-4.829-4.828-4.828 4.828a1 1 0 0 1-1.414-1.414l4.828-4.829-4.828-4.828a1 1 0 0 1 1.414-1.414l4.829 4.828 4.828-4.828a1 1 0 1 1 1.414 1.414l-4.828 4.829 4.828 4.828z"
|
|
38
|
+
/>
|
|
39
|
+
<!-- X SVG path -->
|
|
40
|
+
<path
|
|
41
|
+
v-if="!isOpen"
|
|
42
|
+
fill-rule="evenodd"
|
|
43
|
+
d="M4 5h16a1 1 0 0 1 0 2H4a1 1 0 1 1 0-2zm0 6h16a1 1 0 0 1 0 2H4a1 1 0 0 1 0-2zm0 6h16a1 1 0 0 1 0 2H4a1 1 0 0 1 0-2z"
|
|
44
|
+
/>
|
|
45
|
+
</svg>
|
|
46
|
+
</button>
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
<nav
|
|
50
|
+
v-if="navigation"
|
|
51
|
+
class="primary-navigation items-center px-2 pt-2 pb-4 sm:flex gap-4 sm:justify-evenly sm:p-0"
|
|
52
|
+
:class="isOpen ? 'block' : 'hidden'"
|
|
53
|
+
>
|
|
54
|
+
<NavigationElement
|
|
55
|
+
v-for="(item, index) in navigation"
|
|
56
|
+
role="menuitem"
|
|
57
|
+
tabindex="-1"
|
|
58
|
+
:="{
|
|
59
|
+
...item,
|
|
60
|
+
class: `primary-nav-item-${index} ${item.class}`,
|
|
61
|
+
isChild: false,
|
|
62
|
+
elementType: 'header',
|
|
63
|
+
}"
|
|
64
|
+
/>
|
|
65
|
+
</nav>
|
|
66
|
+
</div>
|
|
67
|
+
</header>
|
|
68
|
+
</template>
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed } from 'vue'
|
|
3
|
+
import { SplitModule } from './types/SplitModule'
|
|
4
|
+
|
|
5
|
+
const props = defineProps<SplitModule>()
|
|
6
|
+
|
|
7
|
+
const computedStyle = computed(() => {
|
|
8
|
+
return {
|
|
9
|
+
'background-color': props.backgroundColor ?? 'transparent',
|
|
10
|
+
'background-image': `url(${props.backgroundImage ?? ''})`,
|
|
11
|
+
'background-size': 'cover',
|
|
12
|
+
}
|
|
13
|
+
})
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<template>
|
|
17
|
+
<section class="split-module" :style="computedStyle">
|
|
18
|
+
<h2 :class="`headline ${pt?.headline ?? ''}`">{{ headline }}</h2>
|
|
19
|
+
<div
|
|
20
|
+
:class="`split-module-content flex justify-evenly gap-4 mx-auto ${pt?.content ?? ''}`"
|
|
21
|
+
>
|
|
22
|
+
<component
|
|
23
|
+
v-if="start"
|
|
24
|
+
:is="start.__typename"
|
|
25
|
+
v-bind="start"
|
|
26
|
+
class="split-module-left"
|
|
27
|
+
/>
|
|
28
|
+
<component
|
|
29
|
+
v-if="center"
|
|
30
|
+
:is="center.__typename"
|
|
31
|
+
v-bind="center"
|
|
32
|
+
class="split-module-center"
|
|
33
|
+
/>
|
|
34
|
+
<component
|
|
35
|
+
v-if="end"
|
|
36
|
+
:is="end.__typename"
|
|
37
|
+
v-bind="end"
|
|
38
|
+
class="split-module-right"
|
|
39
|
+
/>
|
|
40
|
+
</div>
|
|
41
|
+
</section>
|
|
42
|
+
</template>
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { Testimonial } from './types/Testimonial'
|
|
3
|
+
import { MediaOptions } from '../types'
|
|
4
|
+
import { computed } from 'vue'
|
|
5
|
+
|
|
6
|
+
const props = defineProps<Testimonial>()
|
|
7
|
+
|
|
8
|
+
const mediaTypeValue = computed(() => {
|
|
9
|
+
if (!props.media) {
|
|
10
|
+
return null
|
|
11
|
+
}
|
|
12
|
+
return MediaOptions[props.media.mediaType]
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
const computedStyle = computed(() => {
|
|
16
|
+
return {
|
|
17
|
+
'background-color': props.backgroundColor ?? 'transparent',
|
|
18
|
+
color: props.textColor ?? 'inherit',
|
|
19
|
+
}
|
|
20
|
+
})
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<template>
|
|
24
|
+
<div class="testimonial p-5" :style="computedStyle">
|
|
25
|
+
<div
|
|
26
|
+
:class="`container mx-auto flex flex-col items-center lg:flex-row gap-5 ${pt?.container ?? ''}`"
|
|
27
|
+
>
|
|
28
|
+
<div v-if="media" :class="`testimonial-media ${pt?.media}`">
|
|
29
|
+
<component :is="mediaTypeValue" :="media" />
|
|
30
|
+
</div>
|
|
31
|
+
<div
|
|
32
|
+
v-if="headline || quote"
|
|
33
|
+
:class="`testimonial-text ${pt?.text ?? ''}`"
|
|
34
|
+
>
|
|
35
|
+
<h3
|
|
36
|
+
v-if="headline"
|
|
37
|
+
:class="`testimonial-headline ${pt?.headline ?? ''}`"
|
|
38
|
+
>
|
|
39
|
+
{{ headline }}
|
|
40
|
+
</h3>
|
|
41
|
+
|
|
42
|
+
<p v-if="quote" :class="`testimonial-quote ${pt?.quote ?? ''}`">
|
|
43
|
+
{{ quote }}
|
|
44
|
+
</p>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
</template>
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { Testimonial } from './types/Testimonial'
|
|
3
|
+
import { MediaOptions } from '../types'
|
|
4
|
+
import { computed } from 'vue'
|
|
5
|
+
|
|
6
|
+
const props = defineProps<Testimonial>()
|
|
7
|
+
|
|
8
|
+
const mediaTypeValue = computed(() => {
|
|
9
|
+
if (!props.media) {
|
|
10
|
+
return null
|
|
11
|
+
}
|
|
12
|
+
return MediaOptions[props.media.mediaType]
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
const computedStyle = computed(() => {
|
|
16
|
+
return {
|
|
17
|
+
'background-color': props.backgroundColor ?? 'transparent',
|
|
18
|
+
color: props.textColor ?? 'inherit',
|
|
19
|
+
}
|
|
20
|
+
})
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<template>
|
|
24
|
+
<div class="testimonial p-5" :style="computedStyle">
|
|
25
|
+
<div
|
|
26
|
+
:class="`container mx-auto flex flex-col items-center lg:flex-row gap-5 ${pt?.container ?? ''}`"
|
|
27
|
+
>
|
|
28
|
+
<div v-if="media" :class="`testimonial-media ${pt?.media}`">
|
|
29
|
+
<component :is="mediaTypeValue" :="media" />
|
|
30
|
+
</div>
|
|
31
|
+
<div
|
|
32
|
+
v-if="headline || quote"
|
|
33
|
+
:class="`testimonial-text ${pt?.text ?? ''}`"
|
|
34
|
+
>
|
|
35
|
+
<h3
|
|
36
|
+
v-if="headline"
|
|
37
|
+
:class="`testimonial-headline ${pt?.headline ?? ''}`"
|
|
38
|
+
>
|
|
39
|
+
{{ headline }}
|
|
40
|
+
</h3>
|
|
41
|
+
|
|
42
|
+
<p v-if="quote" :class="`testimonial-quote ${pt?.quote ?? ''}`">
|
|
43
|
+
{{ quote }}
|
|
44
|
+
</p>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
</template>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { TileCollection } from './types/TileCollection'
|
|
3
|
+
import TileContent from './TileContent.vue'
|
|
4
|
+
import { computed } from 'vue'
|
|
5
|
+
|
|
6
|
+
const props = defineProps<TileCollection>()
|
|
7
|
+
|
|
8
|
+
const computedStyle = computed(() => {
|
|
9
|
+
return {
|
|
10
|
+
'background-color': props.backgroundColor ?? 'transparent',
|
|
11
|
+
color: props.textColor ?? 'inherit',
|
|
12
|
+
}
|
|
13
|
+
})
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<template>
|
|
17
|
+
<section :class="`tile-collection ${variant}`" :style="computedStyle">
|
|
18
|
+
<div :class="`container mx-auto ${pt?.container ?? ''}`">
|
|
19
|
+
<h2
|
|
20
|
+
v-if="headline"
|
|
21
|
+
:class="`tile-collection-headline ${pt?.headline ?? ''}`"
|
|
22
|
+
>
|
|
23
|
+
{{ headline }}
|
|
24
|
+
</h2>
|
|
25
|
+
<ul
|
|
26
|
+
v-if="modules"
|
|
27
|
+
:class="`tile-collection-content flex flex-col md:flex-row justify-center gap-3 ${pt?.content ?? ''}`"
|
|
28
|
+
>
|
|
29
|
+
<TileContent
|
|
30
|
+
v-for="(item, index) in modules"
|
|
31
|
+
:class="`tile-collection-content-item-${index}`"
|
|
32
|
+
:="item"
|
|
33
|
+
/>
|
|
34
|
+
</ul>
|
|
35
|
+
</div>
|
|
36
|
+
</section>
|
|
37
|
+
</template>
|