@shopware/cms-base-layer 0.0.0-canary-20250116171244
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/LICENSE +21 -0
- package/README.md +144 -0
- package/components/SwCategoryNavigation.vue +44 -0
- package/components/SwCategoryNavigationLink.vue +57 -0
- package/components/SwContactForm.vue +392 -0
- package/components/SwListingProductPrice.vue +88 -0
- package/components/SwMedia3D.vue +34 -0
- package/components/SwNewsletterForm.vue +347 -0
- package/components/SwPagination.vue +106 -0
- package/components/SwProductAddToCart.vue +93 -0
- package/components/SwProductCard.vue +285 -0
- package/components/SwProductGallery.vue +39 -0
- package/components/SwProductListingFilter.vue +42 -0
- package/components/SwProductListingFilters.vue +292 -0
- package/components/SwProductPrice.vue +99 -0
- package/components/SwProductReviews.vue +99 -0
- package/components/SwProductUnits.vue +54 -0
- package/components/SwSharedPrice.vue +19 -0
- package/components/SwSlider.vue +328 -0
- package/components/SwVariantConfigurator.vue +116 -0
- package/components/listing-filters/SwFilterPrice.vue +160 -0
- package/components/listing-filters/SwFilterProperties.vue +123 -0
- package/components/listing-filters/SwFilterRating.vue +101 -0
- package/components/listing-filters/SwFilterShippingFree.vue +104 -0
- package/components/public/cms/CmsGenericBlock.md +27 -0
- package/components/public/cms/CmsGenericBlock.vue +63 -0
- package/components/public/cms/CmsGenericElement.md +31 -0
- package/components/public/cms/CmsGenericElement.vue +38 -0
- package/components/public/cms/CmsNoComponent.vue +27 -0
- package/components/public/cms/CmsPage.md +36 -0
- package/components/public/cms/CmsPage.vue +65 -0
- package/components/public/cms/block/CmsBlockCategoryNavigation.vue +16 -0
- package/components/public/cms/block/CmsBlockCenterText.vue +26 -0
- package/components/public/cms/block/CmsBlockCrossSelling.vue +15 -0
- package/components/public/cms/block/CmsBlockCustomForm.vue +17 -0
- package/components/public/cms/block/CmsBlockDefault.vue +14 -0
- package/components/public/cms/block/CmsBlockForm.vue +17 -0
- package/components/public/cms/block/CmsBlockGalleryBuybox.vue +25 -0
- package/components/public/cms/block/CmsBlockImage.vue +16 -0
- package/components/public/cms/block/CmsBlockImageBubbleRow.vue +32 -0
- package/components/public/cms/block/CmsBlockImageCover.vue +17 -0
- package/components/public/cms/block/CmsBlockImageFourColumn.vue +29 -0
- package/components/public/cms/block/CmsBlockImageGallery.vue +18 -0
- package/components/public/cms/block/CmsBlockImageHighlightRow.vue +27 -0
- package/components/public/cms/block/CmsBlockImageSimpleGrid.vue +24 -0
- package/components/public/cms/block/CmsBlockImageSlider.vue +17 -0
- package/components/public/cms/block/CmsBlockImageText.vue +19 -0
- package/components/public/cms/block/CmsBlockImageTextBubble.vue +51 -0
- package/components/public/cms/block/CmsBlockImageTextCover.vue +25 -0
- package/components/public/cms/block/CmsBlockImageTextGallery.vue +85 -0
- package/components/public/cms/block/CmsBlockImageTextRow.vue +43 -0
- package/components/public/cms/block/CmsBlockImageThreeColumn.vue +21 -0
- package/components/public/cms/block/CmsBlockImageThreeCover.vue +27 -0
- package/components/public/cms/block/CmsBlockImageTwoColumn.vue +25 -0
- package/components/public/cms/block/CmsBlockProductDescriptionReviews.vue +15 -0
- package/components/public/cms/block/CmsBlockProductHeading.vue +26 -0
- package/components/public/cms/block/CmsBlockProductListing.vue +17 -0
- package/components/public/cms/block/CmsBlockProductSlider.vue +16 -0
- package/components/public/cms/block/CmsBlockProductThreeColumn.vue +22 -0
- package/components/public/cms/block/CmsBlockSidebarFilter.vue +17 -0
- package/components/public/cms/block/CmsBlockText.vue +15 -0
- package/components/public/cms/block/CmsBlockTextHero.vue +15 -0
- package/components/public/cms/block/CmsBlockTextOnImage.vue +20 -0
- package/components/public/cms/block/CmsBlockTextTeaser.vue +16 -0
- package/components/public/cms/block/CmsBlockTextTeaserSection.vue +21 -0
- package/components/public/cms/block/CmsBlockTextThreeColumn.vue +22 -0
- package/components/public/cms/block/CmsBlockTextTwoColumn.vue +28 -0
- package/components/public/cms/block/CmsBlockVimeoVideo.vue +17 -0
- package/components/public/cms/block/CmsBlockYoutubeVideo.vue +17 -0
- package/components/public/cms/element/CmsElementBuyBox.md +1 -0
- package/components/public/cms/element/CmsElementBuyBox.vue +190 -0
- package/components/public/cms/element/CmsElementCategoryNavigation.md +1 -0
- package/components/public/cms/element/CmsElementCategoryNavigation.vue +167 -0
- package/components/public/cms/element/CmsElementCrossSelling.md +1 -0
- package/components/public/cms/element/CmsElementCrossSelling.vue +106 -0
- package/components/public/cms/element/CmsElementCustomForm.md +1 -0
- package/components/public/cms/element/CmsElementCustomForm.vue +27 -0
- package/components/public/cms/element/CmsElementForm.md +1 -0
- package/components/public/cms/element/CmsElementForm.vue +27 -0
- package/components/public/cms/element/CmsElementImage.md +1 -0
- package/components/public/cms/element/CmsElementImage.vue +105 -0
- package/components/public/cms/element/CmsElementImageGallery.md +1 -0
- package/components/public/cms/element/CmsElementImageGallery.vue +249 -0
- package/components/public/cms/element/CmsElementImageGallery3dPlaceholder.vue +53 -0
- package/components/public/cms/element/CmsElementImageSlider.md +1 -0
- package/components/public/cms/element/CmsElementImageSlider.vue +29 -0
- package/components/public/cms/element/CmsElementManufacturerLogo.md +1 -0
- package/components/public/cms/element/CmsElementManufacturerLogo.vue +11 -0
- package/components/public/cms/element/CmsElementProductBox.md +1 -0
- package/components/public/cms/element/CmsElementProductBox.vue +14 -0
- package/components/public/cms/element/CmsElementProductDescriptionReviews.md +1 -0
- package/components/public/cms/element/CmsElementProductDescriptionReviews.vue +109 -0
- package/components/public/cms/element/CmsElementProductListing.md +1 -0
- package/components/public/cms/element/CmsElementProductListing.vue +245 -0
- package/components/public/cms/element/CmsElementProductName.md +1 -0
- package/components/public/cms/element/CmsElementProductName.vue +10 -0
- package/components/public/cms/element/CmsElementProductSlider.md +1 -0
- package/components/public/cms/element/CmsElementProductSlider.vue +80 -0
- package/components/public/cms/element/CmsElementSidebarFilter.md +1 -0
- package/components/public/cms/element/CmsElementSidebarFilter.vue +12 -0
- package/components/public/cms/element/CmsElementText.md +1 -0
- package/components/public/cms/element/CmsElementText.vue +186 -0
- package/components/public/cms/element/CmsElementVimeoVideo.md +1 -0
- package/components/public/cms/element/CmsElementVimeoVideo.vue +63 -0
- package/components/public/cms/element/CmsElementYoutubeVideo.md +1 -0
- package/components/public/cms/element/CmsElementYoutubeVideo.vue +43 -0
- package/components/public/cms/section/CmsSectionDefault.md +3 -0
- package/components/public/cms/section/CmsSectionDefault.vue +21 -0
- package/components/public/cms/section/CmsSectionSidebar.md +3 -0
- package/components/public/cms/section/CmsSectionSidebar.vue +49 -0
- package/components/public/cms/skeleton/ProductCardSkeleton.vue +44 -0
- package/dist/index.d.mts +5 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.mjs +31 -0
- package/helpers/clientOnly.ts +11 -0
- package/helpers/html-to-vue/ast.ts +72 -0
- package/helpers/html-to-vue/getOptionsFromNode.test.ts +129 -0
- package/helpers/html-to-vue/getOptionsFromNode.ts +52 -0
- package/helpers/html-to-vue/renderToHtml.ts +45 -0
- package/helpers/html-to-vue/renderer.ts +56 -0
- package/helpers/media/isSpatial.ts +8 -0
- package/index.cjs +7 -0
- package/nuxt.config.ts +21 -0
- package/package.json +69 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type {
|
|
3
|
+
CmsBlockImageTextGallery,
|
|
4
|
+
CmsElementImage,
|
|
5
|
+
CmsElementText,
|
|
6
|
+
} from "@shopware/composables";
|
|
7
|
+
import { useCmsBlock } from "#imports";
|
|
8
|
+
import type { Schemas } from "#shopware";
|
|
9
|
+
|
|
10
|
+
const props = defineProps<{
|
|
11
|
+
content: CmsBlockImageTextGallery;
|
|
12
|
+
}>();
|
|
13
|
+
|
|
14
|
+
const { getSlotContent } = useCmsBlock(props.content);
|
|
15
|
+
|
|
16
|
+
const leftTextContent = getSlotContent("left-text") as CmsElementText;
|
|
17
|
+
const rightTextContent = getSlotContent("right-text") as CmsElementText;
|
|
18
|
+
const centerTextContent = getSlotContent("center-text") as CmsElementText;
|
|
19
|
+
|
|
20
|
+
const leftImageContent = getSlotContent("left-image") as CmsElementImage;
|
|
21
|
+
const rightImageContent = getSlotContent("right-image") as CmsElementImage;
|
|
22
|
+
const centerImageContent = getSlotContent("center-image") as CmsElementImage;
|
|
23
|
+
|
|
24
|
+
// TODO: useRouter
|
|
25
|
+
function onImageClick(
|
|
26
|
+
slotContent: Schemas["CmsSlot"] & {
|
|
27
|
+
data: {
|
|
28
|
+
url?: string;
|
|
29
|
+
newTab?: boolean;
|
|
30
|
+
};
|
|
31
|
+
},
|
|
32
|
+
) {
|
|
33
|
+
if (slotContent.data?.url) {
|
|
34
|
+
if (slotContent.data?.newTab) {
|
|
35
|
+
window.open(slotContent.data.url);
|
|
36
|
+
} else {
|
|
37
|
+
window.location.href = slotContent.data.url;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
</script>
|
|
42
|
+
<template>
|
|
43
|
+
<article
|
|
44
|
+
class="cms-block-image-text-gallery"
|
|
45
|
+
:style="{ backgroundColor: content.backgroundColor || '' }"
|
|
46
|
+
>
|
|
47
|
+
<div class="cms-block-image-text-gallery__container">
|
|
48
|
+
<div class="cms-block-image-text-gallery__container__column">
|
|
49
|
+
<CmsElementImage
|
|
50
|
+
:content="leftImageContent"
|
|
51
|
+
:style="{ cursor: leftImageContent.data?.url && 'pointer' }"
|
|
52
|
+
@click="onImageClick(leftImageContent)"
|
|
53
|
+
/>
|
|
54
|
+
<CmsElementText
|
|
55
|
+
:content="leftTextContent"
|
|
56
|
+
class="cms-block-imag)e-text-gallery__container__column--text"
|
|
57
|
+
/>
|
|
58
|
+
</div>
|
|
59
|
+
<div class="cms-block-image-text-gallery__container__column">
|
|
60
|
+
<CmsElementImage
|
|
61
|
+
:content="centerImageContent"
|
|
62
|
+
:style="{
|
|
63
|
+
cursor: centerImageContent.data?.url && 'pointer',
|
|
64
|
+
}"
|
|
65
|
+
@click="onImageClick(centerImageContent)"
|
|
66
|
+
/>
|
|
67
|
+
<CmsElementText
|
|
68
|
+
:content="centerTextContent"
|
|
69
|
+
class="cms-block-image-text-gallery__container__column--text"
|
|
70
|
+
/>
|
|
71
|
+
</div>
|
|
72
|
+
<div class="cms-block-image-text-gallery__container__column">
|
|
73
|
+
<CmsElementImage
|
|
74
|
+
:content="rightImageContent"
|
|
75
|
+
:style="{ cursor: rightImageContent.data?.url && 'pointer' }"
|
|
76
|
+
@click="onImageClick(rightImageContent)"
|
|
77
|
+
/>
|
|
78
|
+
<CmsElementText
|
|
79
|
+
:content="rightTextContent"
|
|
80
|
+
class="cms-block-image-text-gallery__container__column--text"
|
|
81
|
+
/>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
</article>
|
|
85
|
+
</template>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { CmsBlockImageTextRow } from "@shopware/composables";
|
|
3
|
+
import { useCmsBlock } from "#imports";
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
content: CmsBlockImageTextRow;
|
|
7
|
+
}>();
|
|
8
|
+
|
|
9
|
+
const { getSlotContent } = useCmsBlock(props.content);
|
|
10
|
+
|
|
11
|
+
const leftImageContent = getSlotContent("left-image");
|
|
12
|
+
const leftTextContent = getSlotContent("left-text");
|
|
13
|
+
const centerImageContent = getSlotContent("center-image");
|
|
14
|
+
const centerTextContent = getSlotContent("center-text");
|
|
15
|
+
const rightImageContent = getSlotContent("right-image");
|
|
16
|
+
const rightTextContent = getSlotContent("right-text");
|
|
17
|
+
</script>
|
|
18
|
+
<template>
|
|
19
|
+
<div class="cms-block-image-text-row grid md:grid-cols-3 gap-10">
|
|
20
|
+
<div class="cms-block-image-text-row__column">
|
|
21
|
+
<CmsGenericElement :content="leftImageContent" />
|
|
22
|
+
<CmsGenericElement :content="leftTextContent" />
|
|
23
|
+
</div>
|
|
24
|
+
<div class="cms-block-image-text-row__column">
|
|
25
|
+
<CmsGenericElement :content="centerImageContent" />
|
|
26
|
+
<CmsGenericElement :content="centerTextContent" />
|
|
27
|
+
</div>
|
|
28
|
+
<div class="cms-block-image-text-row__column">
|
|
29
|
+
<CmsGenericElement :content="rightImageContent" />
|
|
30
|
+
<CmsGenericElement :content="rightTextContent" />
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
</template>
|
|
34
|
+
|
|
35
|
+
<style scoped>
|
|
36
|
+
.cms-block-image-text-row .cms-element-image {
|
|
37
|
+
@apply object-cover;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.cms-block-image-text-row .cms-block-image-text-row__column div:first-child {
|
|
41
|
+
@apply mb-5;
|
|
42
|
+
}
|
|
43
|
+
</style>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { CmsBlockImageThreeColumn } from "@shopware/composables";
|
|
3
|
+
import { useCmsBlock } from "#imports";
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
content: CmsBlockImageThreeColumn;
|
|
7
|
+
}>();
|
|
8
|
+
|
|
9
|
+
const { getSlotContent } = useCmsBlock(props.content);
|
|
10
|
+
|
|
11
|
+
const leftContent = getSlotContent("left");
|
|
12
|
+
const rightContent = getSlotContent("right");
|
|
13
|
+
const centerContent = getSlotContent("center");
|
|
14
|
+
</script>
|
|
15
|
+
<template>
|
|
16
|
+
<div class="grid md:grid-cols-3 gap-10">
|
|
17
|
+
<CmsGenericElement :content="leftContent" />
|
|
18
|
+
<CmsGenericElement :content="centerContent" />
|
|
19
|
+
<CmsGenericElement :content="rightContent" />
|
|
20
|
+
</div>
|
|
21
|
+
</template>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { CmsBlockImageThreeCover } from "@shopware/composables";
|
|
3
|
+
import { useCmsBlock } from "#imports";
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
content: CmsBlockImageThreeCover;
|
|
7
|
+
}>();
|
|
8
|
+
|
|
9
|
+
const { getSlotContent } = useCmsBlock(props.content);
|
|
10
|
+
|
|
11
|
+
const leftContent = getSlotContent("left");
|
|
12
|
+
const rightContent = getSlotContent("right");
|
|
13
|
+
const centerContent = getSlotContent("center");
|
|
14
|
+
</script>
|
|
15
|
+
<template>
|
|
16
|
+
<div class="cms-block-image-three-cover grid md:grid-cols-3 gap-10">
|
|
17
|
+
<CmsGenericElement :content="leftContent" />
|
|
18
|
+
<CmsGenericElement :content="centerContent" />
|
|
19
|
+
<CmsGenericElement :content="rightContent" />
|
|
20
|
+
</div>
|
|
21
|
+
</template>
|
|
22
|
+
|
|
23
|
+
<style scoped>
|
|
24
|
+
.cms-block-image-three-cover .cms-element-image {
|
|
25
|
+
@apply aspect-square object-cover;
|
|
26
|
+
}
|
|
27
|
+
</style>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { CmsBlockImageTwoColumn } from "@shopware/composables";
|
|
3
|
+
import { useCmsBlock } from "#imports";
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
content: CmsBlockImageTwoColumn;
|
|
7
|
+
}>();
|
|
8
|
+
|
|
9
|
+
const { getSlotContent } = useCmsBlock(props.content);
|
|
10
|
+
|
|
11
|
+
const leftContent = getSlotContent("left");
|
|
12
|
+
const rightContent = getSlotContent("right");
|
|
13
|
+
</script>
|
|
14
|
+
<template>
|
|
15
|
+
<div class="cms-block-image-two-column grid md:grid-cols-2 gap-10">
|
|
16
|
+
<CmsGenericElement :content="leftContent" />
|
|
17
|
+
<CmsGenericElement :content="rightContent" />
|
|
18
|
+
</div>
|
|
19
|
+
</template>
|
|
20
|
+
|
|
21
|
+
<style scoped>
|
|
22
|
+
.cms-block-image-two-column .cms-element-image {
|
|
23
|
+
@apply object-cover;
|
|
24
|
+
}
|
|
25
|
+
</style>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { CmsBlockProductDescriptionReviews } from "@shopware/composables";
|
|
3
|
+
import { useCmsBlock } from "#imports";
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
content: CmsBlockProductDescriptionReviews;
|
|
7
|
+
}>();
|
|
8
|
+
const { getSlotContent } = useCmsBlock(props.content);
|
|
9
|
+
const slotContent = getSlotContent("content");
|
|
10
|
+
</script>
|
|
11
|
+
<template>
|
|
12
|
+
<div class="cms-block-product-description-reviews">
|
|
13
|
+
<CmsGenericElement :content="slotContent" />
|
|
14
|
+
</div>
|
|
15
|
+
</template>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { CmsBlockProductHeading } from "@shopware/composables";
|
|
3
|
+
import { useCmsBlock } from "#imports";
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
content: CmsBlockProductHeading;
|
|
7
|
+
}>();
|
|
8
|
+
|
|
9
|
+
const { getSlotContent } = useCmsBlock(props.content);
|
|
10
|
+
|
|
11
|
+
const leftContent = getSlotContent("left");
|
|
12
|
+
const rightContent = getSlotContent("right");
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<template>
|
|
16
|
+
<div class="cms-block-product-heading flex justify-between">
|
|
17
|
+
<CmsGenericElement :content="leftContent" />
|
|
18
|
+
<CmsGenericElement :content="rightContent" />
|
|
19
|
+
</div>
|
|
20
|
+
</template>
|
|
21
|
+
|
|
22
|
+
<style scoped>
|
|
23
|
+
.cms-block-product-heading .cms-element-image {
|
|
24
|
+
@apply max-w-[7.5rem] max-h-[7.5rem];
|
|
25
|
+
}
|
|
26
|
+
</style>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { CmsBlockProductListing } from "@shopware/composables";
|
|
3
|
+
import { useCmsBlock } from "#imports";
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
content: CmsBlockProductListing;
|
|
7
|
+
}>();
|
|
8
|
+
|
|
9
|
+
const { getSlotContent } = useCmsBlock(props.content);
|
|
10
|
+
const slotContent = getSlotContent("content");
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<template>
|
|
14
|
+
<div>
|
|
15
|
+
<CmsGenericElement v-if="slotContent" :content="slotContent" />
|
|
16
|
+
</div>
|
|
17
|
+
</template>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { CmsBlockProductSlider } from "@shopware/composables";
|
|
3
|
+
|
|
4
|
+
defineProps<{
|
|
5
|
+
content: CmsBlockProductSlider;
|
|
6
|
+
}>();
|
|
7
|
+
</script>
|
|
8
|
+
<template>
|
|
9
|
+
<div class="cms-block-product-slider">
|
|
10
|
+
<CmsGenericElement
|
|
11
|
+
v-for="slot in content.slots"
|
|
12
|
+
:key="slot.id"
|
|
13
|
+
:content="slot"
|
|
14
|
+
/>
|
|
15
|
+
</div>
|
|
16
|
+
</template>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { CmsBlockProductThreeColumn } from "@shopware/composables";
|
|
3
|
+
import { useCmsBlock } from "#imports";
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
content: CmsBlockProductThreeColumn;
|
|
7
|
+
}>();
|
|
8
|
+
|
|
9
|
+
const { getSlotContent } = useCmsBlock(props.content);
|
|
10
|
+
|
|
11
|
+
const leftContent = getSlotContent("left");
|
|
12
|
+
const rightContent = getSlotContent("right");
|
|
13
|
+
const centerContent = getSlotContent("center");
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<template>
|
|
17
|
+
<div class="grid md:grid-cols-3 gap-10 place-items-center">
|
|
18
|
+
<CmsGenericElement :content="leftContent" class="w-full" />
|
|
19
|
+
<CmsGenericElement :content="centerContent" class="w-full" />
|
|
20
|
+
<CmsGenericElement :content="rightContent" class="w-full" />
|
|
21
|
+
</div>
|
|
22
|
+
</template>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type {
|
|
3
|
+
CmsBlockSidebarFilter,
|
|
4
|
+
CmsElementSidebarFilter,
|
|
5
|
+
} from "@shopware/composables";
|
|
6
|
+
import { useCmsBlock } from "#imports";
|
|
7
|
+
|
|
8
|
+
const props = defineProps<{
|
|
9
|
+
content: CmsBlockSidebarFilter;
|
|
10
|
+
}>();
|
|
11
|
+
|
|
12
|
+
const { getSlotContent } = useCmsBlock(props.content);
|
|
13
|
+
const slotContent = getSlotContent("content") as CmsElementSidebarFilter;
|
|
14
|
+
</script>
|
|
15
|
+
<template>
|
|
16
|
+
<CmsElementSidebarFilter :content="slotContent" />
|
|
17
|
+
</template>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { CmsBlockText } from "@shopware/composables";
|
|
3
|
+
import { useCmsBlock } from "#imports";
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
content: CmsBlockText;
|
|
7
|
+
}>();
|
|
8
|
+
|
|
9
|
+
const { getSlotContent } = useCmsBlock(props.content);
|
|
10
|
+
|
|
11
|
+
const slotContent = getSlotContent("content");
|
|
12
|
+
</script>
|
|
13
|
+
<template>
|
|
14
|
+
<CmsGenericElement :content="slotContent" />
|
|
15
|
+
</template>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { CmsBlockTextHero } from "@shopware/composables";
|
|
3
|
+
import { useCmsBlock } from "#imports";
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
content: CmsBlockTextHero;
|
|
7
|
+
}>();
|
|
8
|
+
|
|
9
|
+
const { getSlotContent } = useCmsBlock(props.content);
|
|
10
|
+
|
|
11
|
+
const slotContent = getSlotContent("content");
|
|
12
|
+
</script>
|
|
13
|
+
<template>
|
|
14
|
+
<CmsGenericElement :content="slotContent" />
|
|
15
|
+
</template>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { CmsBlockTextOnImage } from "@shopware/composables";
|
|
3
|
+
import { useCmsBlock } from "#imports";
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
content: CmsBlockTextOnImage;
|
|
7
|
+
}>();
|
|
8
|
+
|
|
9
|
+
const { getSlotContent } = useCmsBlock(props.content);
|
|
10
|
+
|
|
11
|
+
const slotContent = getSlotContent("content");
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<template>
|
|
15
|
+
<CmsGenericElement
|
|
16
|
+
v-if="slotContent"
|
|
17
|
+
:content="slotContent"
|
|
18
|
+
class="cms-block-text-on-image min-h-md"
|
|
19
|
+
/>
|
|
20
|
+
</template>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { CmsBlockTextTeaser } from "@shopware/composables";
|
|
3
|
+
|
|
4
|
+
defineProps<{
|
|
5
|
+
content: CmsBlockTextTeaser;
|
|
6
|
+
}>();
|
|
7
|
+
</script>
|
|
8
|
+
<template>
|
|
9
|
+
<div>
|
|
10
|
+
<CmsGenericElement
|
|
11
|
+
v-for="slot in content.slots"
|
|
12
|
+
:key="slot.id"
|
|
13
|
+
:content="slot"
|
|
14
|
+
/>
|
|
15
|
+
</div>
|
|
16
|
+
</template>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { CmsBlockTextTeaserSection } from "@shopware/composables";
|
|
3
|
+
|
|
4
|
+
defineProps<{
|
|
5
|
+
content: CmsBlockTextTeaserSection;
|
|
6
|
+
}>();
|
|
7
|
+
</script>
|
|
8
|
+
<template>
|
|
9
|
+
<div class="container mx-auto flex pt-6 pb-6">
|
|
10
|
+
<CmsGenericElement
|
|
11
|
+
v-for="(slot, i) in content.slots"
|
|
12
|
+
:key="slot.id"
|
|
13
|
+
:content="slot"
|
|
14
|
+
class="cms-block-text-teaser-section flex"
|
|
15
|
+
:class="{
|
|
16
|
+
'flex-basis-1/3 flex-col ': i == 0,
|
|
17
|
+
'pl-4 flex-basis-2/3': i == 1,
|
|
18
|
+
}"
|
|
19
|
+
/>
|
|
20
|
+
</div>
|
|
21
|
+
</template>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { CmsBlockTextThreeColumn } from "@shopware/composables";
|
|
3
|
+
import { useCmsBlock } from "#imports";
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
content: CmsBlockTextThreeColumn;
|
|
7
|
+
}>();
|
|
8
|
+
|
|
9
|
+
const { getSlotContent } = useCmsBlock(props.content);
|
|
10
|
+
|
|
11
|
+
const leftContent = getSlotContent("left");
|
|
12
|
+
const rightContent = getSlotContent("right");
|
|
13
|
+
const centerContent = getSlotContent("center");
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<template>
|
|
17
|
+
<article class="grid md:grid-cols-3 gap-4">
|
|
18
|
+
<CmsGenericElement :content="leftContent" class="" />
|
|
19
|
+
<CmsGenericElement :content="centerContent" class="" />
|
|
20
|
+
<CmsGenericElement :content="rightContent" class="" />
|
|
21
|
+
</article>
|
|
22
|
+
</template>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { CmsBlockTextTwoColumn } from "@shopware/composables";
|
|
3
|
+
import { useCmsBlock } from "#imports";
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
content: CmsBlockTextTwoColumn;
|
|
7
|
+
}>();
|
|
8
|
+
|
|
9
|
+
const { getSlotContent } = useCmsBlock(props.content);
|
|
10
|
+
|
|
11
|
+
const leftContent = getSlotContent("left");
|
|
12
|
+
const rightContent = getSlotContent("right");
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<template>
|
|
16
|
+
<article
|
|
17
|
+
class="cms-block-text-two-column flex justify-center gap-5 md:gap-20"
|
|
18
|
+
>
|
|
19
|
+
<CmsGenericElement
|
|
20
|
+
:content="leftContent"
|
|
21
|
+
class="w-1/2 cms-block-text-two-column__text"
|
|
22
|
+
/>
|
|
23
|
+
<CmsGenericElement
|
|
24
|
+
:content="rightContent"
|
|
25
|
+
class="w-1/2 cms-block-text-two-column__text"
|
|
26
|
+
/>
|
|
27
|
+
</article>
|
|
28
|
+
</template>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { CmsBlockVimeoVideo } from "@shopware/composables";
|
|
3
|
+
import { useCmsBlock } from "#imports";
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
content: CmsBlockVimeoVideo;
|
|
7
|
+
}>();
|
|
8
|
+
|
|
9
|
+
const { getSlotContent } = useCmsBlock(props.content);
|
|
10
|
+
|
|
11
|
+
const slotContent = getSlotContent("video");
|
|
12
|
+
</script>
|
|
13
|
+
<template>
|
|
14
|
+
<div class="cms-block-vimeo-video relative">
|
|
15
|
+
<CmsGenericElement :content="slotContent" />
|
|
16
|
+
</div>
|
|
17
|
+
</template>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { CmsBlockYoutubeVideo } from "@shopware/composables";
|
|
3
|
+
import { useCmsBlock } from "#imports";
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
content: CmsBlockYoutubeVideo;
|
|
7
|
+
}>();
|
|
8
|
+
|
|
9
|
+
const { getSlotContent } = useCmsBlock(props.content);
|
|
10
|
+
|
|
11
|
+
const slotContent = getSlotContent("video");
|
|
12
|
+
</script>
|
|
13
|
+
<template>
|
|
14
|
+
<div class="cms-block-youtube-video relative">
|
|
15
|
+
<CmsGenericElement :content="slotContent" />
|
|
16
|
+
</div>
|
|
17
|
+
</template>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Render a product including prices, basic information and add to cart button
|