@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.
Files changed (124) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +144 -0
  3. package/components/SwCategoryNavigation.vue +44 -0
  4. package/components/SwCategoryNavigationLink.vue +57 -0
  5. package/components/SwContactForm.vue +392 -0
  6. package/components/SwListingProductPrice.vue +88 -0
  7. package/components/SwMedia3D.vue +34 -0
  8. package/components/SwNewsletterForm.vue +347 -0
  9. package/components/SwPagination.vue +106 -0
  10. package/components/SwProductAddToCart.vue +93 -0
  11. package/components/SwProductCard.vue +285 -0
  12. package/components/SwProductGallery.vue +39 -0
  13. package/components/SwProductListingFilter.vue +42 -0
  14. package/components/SwProductListingFilters.vue +292 -0
  15. package/components/SwProductPrice.vue +99 -0
  16. package/components/SwProductReviews.vue +99 -0
  17. package/components/SwProductUnits.vue +54 -0
  18. package/components/SwSharedPrice.vue +19 -0
  19. package/components/SwSlider.vue +328 -0
  20. package/components/SwVariantConfigurator.vue +116 -0
  21. package/components/listing-filters/SwFilterPrice.vue +160 -0
  22. package/components/listing-filters/SwFilterProperties.vue +123 -0
  23. package/components/listing-filters/SwFilterRating.vue +101 -0
  24. package/components/listing-filters/SwFilterShippingFree.vue +104 -0
  25. package/components/public/cms/CmsGenericBlock.md +27 -0
  26. package/components/public/cms/CmsGenericBlock.vue +63 -0
  27. package/components/public/cms/CmsGenericElement.md +31 -0
  28. package/components/public/cms/CmsGenericElement.vue +38 -0
  29. package/components/public/cms/CmsNoComponent.vue +27 -0
  30. package/components/public/cms/CmsPage.md +36 -0
  31. package/components/public/cms/CmsPage.vue +65 -0
  32. package/components/public/cms/block/CmsBlockCategoryNavigation.vue +16 -0
  33. package/components/public/cms/block/CmsBlockCenterText.vue +26 -0
  34. package/components/public/cms/block/CmsBlockCrossSelling.vue +15 -0
  35. package/components/public/cms/block/CmsBlockCustomForm.vue +17 -0
  36. package/components/public/cms/block/CmsBlockDefault.vue +14 -0
  37. package/components/public/cms/block/CmsBlockForm.vue +17 -0
  38. package/components/public/cms/block/CmsBlockGalleryBuybox.vue +25 -0
  39. package/components/public/cms/block/CmsBlockImage.vue +16 -0
  40. package/components/public/cms/block/CmsBlockImageBubbleRow.vue +32 -0
  41. package/components/public/cms/block/CmsBlockImageCover.vue +17 -0
  42. package/components/public/cms/block/CmsBlockImageFourColumn.vue +29 -0
  43. package/components/public/cms/block/CmsBlockImageGallery.vue +18 -0
  44. package/components/public/cms/block/CmsBlockImageHighlightRow.vue +27 -0
  45. package/components/public/cms/block/CmsBlockImageSimpleGrid.vue +24 -0
  46. package/components/public/cms/block/CmsBlockImageSlider.vue +17 -0
  47. package/components/public/cms/block/CmsBlockImageText.vue +19 -0
  48. package/components/public/cms/block/CmsBlockImageTextBubble.vue +51 -0
  49. package/components/public/cms/block/CmsBlockImageTextCover.vue +25 -0
  50. package/components/public/cms/block/CmsBlockImageTextGallery.vue +85 -0
  51. package/components/public/cms/block/CmsBlockImageTextRow.vue +43 -0
  52. package/components/public/cms/block/CmsBlockImageThreeColumn.vue +21 -0
  53. package/components/public/cms/block/CmsBlockImageThreeCover.vue +27 -0
  54. package/components/public/cms/block/CmsBlockImageTwoColumn.vue +25 -0
  55. package/components/public/cms/block/CmsBlockProductDescriptionReviews.vue +15 -0
  56. package/components/public/cms/block/CmsBlockProductHeading.vue +26 -0
  57. package/components/public/cms/block/CmsBlockProductListing.vue +17 -0
  58. package/components/public/cms/block/CmsBlockProductSlider.vue +16 -0
  59. package/components/public/cms/block/CmsBlockProductThreeColumn.vue +22 -0
  60. package/components/public/cms/block/CmsBlockSidebarFilter.vue +17 -0
  61. package/components/public/cms/block/CmsBlockText.vue +15 -0
  62. package/components/public/cms/block/CmsBlockTextHero.vue +15 -0
  63. package/components/public/cms/block/CmsBlockTextOnImage.vue +20 -0
  64. package/components/public/cms/block/CmsBlockTextTeaser.vue +16 -0
  65. package/components/public/cms/block/CmsBlockTextTeaserSection.vue +21 -0
  66. package/components/public/cms/block/CmsBlockTextThreeColumn.vue +22 -0
  67. package/components/public/cms/block/CmsBlockTextTwoColumn.vue +28 -0
  68. package/components/public/cms/block/CmsBlockVimeoVideo.vue +17 -0
  69. package/components/public/cms/block/CmsBlockYoutubeVideo.vue +17 -0
  70. package/components/public/cms/element/CmsElementBuyBox.md +1 -0
  71. package/components/public/cms/element/CmsElementBuyBox.vue +190 -0
  72. package/components/public/cms/element/CmsElementCategoryNavigation.md +1 -0
  73. package/components/public/cms/element/CmsElementCategoryNavigation.vue +167 -0
  74. package/components/public/cms/element/CmsElementCrossSelling.md +1 -0
  75. package/components/public/cms/element/CmsElementCrossSelling.vue +106 -0
  76. package/components/public/cms/element/CmsElementCustomForm.md +1 -0
  77. package/components/public/cms/element/CmsElementCustomForm.vue +27 -0
  78. package/components/public/cms/element/CmsElementForm.md +1 -0
  79. package/components/public/cms/element/CmsElementForm.vue +27 -0
  80. package/components/public/cms/element/CmsElementImage.md +1 -0
  81. package/components/public/cms/element/CmsElementImage.vue +105 -0
  82. package/components/public/cms/element/CmsElementImageGallery.md +1 -0
  83. package/components/public/cms/element/CmsElementImageGallery.vue +249 -0
  84. package/components/public/cms/element/CmsElementImageGallery3dPlaceholder.vue +53 -0
  85. package/components/public/cms/element/CmsElementImageSlider.md +1 -0
  86. package/components/public/cms/element/CmsElementImageSlider.vue +29 -0
  87. package/components/public/cms/element/CmsElementManufacturerLogo.md +1 -0
  88. package/components/public/cms/element/CmsElementManufacturerLogo.vue +11 -0
  89. package/components/public/cms/element/CmsElementProductBox.md +1 -0
  90. package/components/public/cms/element/CmsElementProductBox.vue +14 -0
  91. package/components/public/cms/element/CmsElementProductDescriptionReviews.md +1 -0
  92. package/components/public/cms/element/CmsElementProductDescriptionReviews.vue +109 -0
  93. package/components/public/cms/element/CmsElementProductListing.md +1 -0
  94. package/components/public/cms/element/CmsElementProductListing.vue +245 -0
  95. package/components/public/cms/element/CmsElementProductName.md +1 -0
  96. package/components/public/cms/element/CmsElementProductName.vue +10 -0
  97. package/components/public/cms/element/CmsElementProductSlider.md +1 -0
  98. package/components/public/cms/element/CmsElementProductSlider.vue +80 -0
  99. package/components/public/cms/element/CmsElementSidebarFilter.md +1 -0
  100. package/components/public/cms/element/CmsElementSidebarFilter.vue +12 -0
  101. package/components/public/cms/element/CmsElementText.md +1 -0
  102. package/components/public/cms/element/CmsElementText.vue +186 -0
  103. package/components/public/cms/element/CmsElementVimeoVideo.md +1 -0
  104. package/components/public/cms/element/CmsElementVimeoVideo.vue +63 -0
  105. package/components/public/cms/element/CmsElementYoutubeVideo.md +1 -0
  106. package/components/public/cms/element/CmsElementYoutubeVideo.vue +43 -0
  107. package/components/public/cms/section/CmsSectionDefault.md +3 -0
  108. package/components/public/cms/section/CmsSectionDefault.vue +21 -0
  109. package/components/public/cms/section/CmsSectionSidebar.md +3 -0
  110. package/components/public/cms/section/CmsSectionSidebar.vue +49 -0
  111. package/components/public/cms/skeleton/ProductCardSkeleton.vue +44 -0
  112. package/dist/index.d.mts +5 -0
  113. package/dist/index.d.ts +5 -0
  114. package/dist/index.mjs +31 -0
  115. package/helpers/clientOnly.ts +11 -0
  116. package/helpers/html-to-vue/ast.ts +72 -0
  117. package/helpers/html-to-vue/getOptionsFromNode.test.ts +129 -0
  118. package/helpers/html-to-vue/getOptionsFromNode.ts +52 -0
  119. package/helpers/html-to-vue/renderToHtml.ts +45 -0
  120. package/helpers/html-to-vue/renderer.ts +56 -0
  121. package/helpers/media/isSpatial.ts +8 -0
  122. package/index.cjs +7 -0
  123. package/nuxt.config.ts +21 -0
  124. 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