@propeller-commerce/propeller-v2-vue-ui 0.3.14

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 (129) hide show
  1. package/CHANGELOG.md +549 -0
  2. package/LICENSE +21 -0
  3. package/MIGRATION.md +178 -0
  4. package/README.md +282 -0
  5. package/STYLING.md +119 -0
  6. package/dist/ProductVideos.vue_vue_type_script_setup_true_lang-BSXOpWBD.js +1706 -0
  7. package/dist/ProductVideos.vue_vue_type_script_setup_true_lang-BSXOpWBD.js.map +1 -0
  8. package/dist/ProductVideos.vue_vue_type_script_setup_true_lang-cfRT3L_k.cjs +1705 -0
  9. package/dist/ProductVideos.vue_vue_type_script_setup_true_lang-cfRT3L_k.cjs.map +1 -0
  10. package/dist/__mocks__/decorators.d.ts +17 -0
  11. package/dist/__mocks__/fixtures.d.ts +43 -0
  12. package/dist/__mocks__/mockServices.d.ts +7 -0
  13. package/dist/components/AccountIconAndMenu.vue.d.ts +152 -0
  14. package/dist/components/ActionCode.vue.d.ts +29 -0
  15. package/dist/components/AddToCart.vue.d.ts +122 -0
  16. package/dist/components/AddToFavorite.vue.d.ts +19 -0
  17. package/dist/components/AddressCard.vue.d.ts +169 -0
  18. package/dist/components/AddressSelector.vue.d.ts +30 -0
  19. package/dist/components/Breadcrumbs.vue.d.ts +69 -0
  20. package/dist/components/CartBonusItems.vue.d.ts +21 -0
  21. package/dist/components/CartCarriers.vue.d.ts +24 -0
  22. package/dist/components/CartIconAndSidebar.vue.d.ts +104 -0
  23. package/dist/components/CartItem.vue.d.ts +178 -0
  24. package/dist/components/CartOverview.vue.d.ts +41 -0
  25. package/dist/components/CartPaymethods.vue.d.ts +23 -0
  26. package/dist/components/CartSummary.vue.d.ts +58 -0
  27. package/dist/components/CategoryDescription.vue.d.ts +29 -0
  28. package/dist/components/CategoryShortDescription.vue.d.ts +18 -0
  29. package/dist/components/ClusterCard.vue.d.ts +251 -0
  30. package/dist/components/ClusterConfigurator.vue.d.ts +41 -0
  31. package/dist/components/ClusterInfo.vue.d.ts +73 -0
  32. package/dist/components/ClusterJsonLd.vue.d.ts +10 -0
  33. package/dist/components/ClusterOptions.vue.d.ts +44 -0
  34. package/dist/components/CompanySwitcher.vue.d.ts +18 -0
  35. package/dist/components/DeliveryDate.vue.d.ts +27 -0
  36. package/dist/components/FavoriteListDetails.vue.d.ts +94 -0
  37. package/dist/components/FavoriteListItem.vue.d.ts +141 -0
  38. package/dist/components/FavoriteLists.vue.d.ts +73 -0
  39. package/dist/components/ForgotPassword.vue.d.ts +35 -0
  40. package/dist/components/GridFilters.vue.d.ts +64 -0
  41. package/dist/components/GridPagination.vue.d.ts +34 -0
  42. package/dist/components/GridTitle.vue.d.ts +22 -0
  43. package/dist/components/GridToolbar.vue.d.ts +117 -0
  44. package/dist/components/ItemListJsonLd.vue.d.ts +10 -0
  45. package/dist/components/ItemStock.vue.d.ts +31 -0
  46. package/dist/components/ItemsOverview.vue.d.ts +40 -0
  47. package/dist/components/LoginForm.vue.d.ts +139 -0
  48. package/dist/components/Menu.vue.d.ts +73 -0
  49. package/dist/components/OrderActions.vue.d.ts +25 -0
  50. package/dist/components/OrderBonusItems.vue.d.ts +19 -0
  51. package/dist/components/OrderItemCard.vue.d.ts +47 -0
  52. package/dist/components/OrderList.vue.d.ts +66 -0
  53. package/dist/components/OrderShipments.vue.d.ts +11 -0
  54. package/dist/components/OrderSummary.vue.d.ts +49 -0
  55. package/dist/components/OrderTotals.vue.d.ts +34 -0
  56. package/dist/components/PriceToggle.vue.d.ts +24 -0
  57. package/dist/components/ProductBulkPrices.vue.d.ts +35 -0
  58. package/dist/components/ProductBundles.vue.d.ts +88 -0
  59. package/dist/components/ProductCard.vue.d.ts +332 -0
  60. package/dist/components/ProductDescription.vue.d.ts +30 -0
  61. package/dist/components/ProductDownloads.vue.d.ts +22 -0
  62. package/dist/components/ProductGallery.vue.d.ts +25 -0
  63. package/dist/components/ProductGrid.vue.d.ts +290 -0
  64. package/dist/components/ProductInfo.vue.d.ts +179 -0
  65. package/dist/components/ProductJsonLd.vue.d.ts +10 -0
  66. package/dist/components/ProductPrice.vue.d.ts +42 -0
  67. package/dist/components/ProductShortDescription.vue.d.ts +18 -0
  68. package/dist/components/ProductSlider.vue.d.ts +176 -0
  69. package/dist/components/ProductSpecifications.vue.d.ts +37 -0
  70. package/dist/components/ProductTabs.vue.d.ts +83 -0
  71. package/dist/components/ProductVideos.vue.d.ts +22 -0
  72. package/dist/components/PropellerProvider.vue.d.ts +40 -0
  73. package/dist/components/PurchaseAuthorizationConfigurator.vue.d.ts +44 -0
  74. package/dist/components/PurchaseAuthorizationRequests.vue.d.ts +50 -0
  75. package/dist/components/QuoteActions.vue.d.ts +22 -0
  76. package/dist/components/RegisterForm.vue.d.ts +87 -0
  77. package/dist/components/SearchBar.vue.d.ts +71 -0
  78. package/dist/components/UserDetails.vue.d.ts +44 -0
  79. package/dist/components/defaults/DefaultProductBadges.vue.d.ts +3 -0
  80. package/dist/components/defaults/DefaultProductImage.vue.d.ts +3 -0
  81. package/dist/components/defaults/DefaultProductSurcharges.vue.d.ts +3 -0
  82. package/dist/composables/shared/usePagination.d.ts +19 -0
  83. package/dist/composables/shared/useServiceFetch.d.ts +9 -0
  84. package/dist/composables/shared/useUserIdentity.d.ts +13 -0
  85. package/dist/composables/shared/utils/cartInit.d.ts +18 -0
  86. package/dist/composables/shared/utils/fetchActiveCart.d.ts +10 -0
  87. package/dist/composables/shared/utils/mergeAnonymousCart.d.ts +12 -0
  88. package/dist/composables/vue/useAddress.d.ts +50 -0
  89. package/dist/composables/vue/useAuth.d.ts +80 -0
  90. package/dist/composables/vue/useCart.d.ts +64 -0
  91. package/dist/composables/vue/useCheckout.d.ts +41 -0
  92. package/dist/composables/vue/useClusterConfigurator.d.ts +26 -0
  93. package/dist/composables/vue/useCompany.d.ts +31 -0
  94. package/dist/composables/vue/useFavorites.d.ts +39 -0
  95. package/dist/composables/vue/useInfraProps.d.ts +27 -0
  96. package/dist/composables/vue/useMenu.d.ts +24 -0
  97. package/dist/composables/vue/useOrders.d.ts +64 -0
  98. package/dist/composables/vue/useProductBundles.d.ts +37 -0
  99. package/dist/composables/vue/useProductInfo.d.ts +33 -0
  100. package/dist/composables/vue/useProductSearch.d.ts +49 -0
  101. package/dist/composables/vue/useProductSlider.d.ts +31 -0
  102. package/dist/composables/vue/useProductSpecs.d.ts +24 -0
  103. package/dist/composables/vue/usePurchaseAuthorization.d.ts +102 -0
  104. package/dist/composables/vue/useResolvedProps.d.ts +42 -0
  105. package/dist/composables/vue/useServices.d.ts +13 -0
  106. package/dist/context/ProductGridContext.d.ts +59 -0
  107. package/dist/context/PropellerContext.d.ts +51 -0
  108. package/dist/index-BN8nyGRL.js +518 -0
  109. package/dist/index-BN8nyGRL.js.map +1 -0
  110. package/dist/index-CrrZsxTR.cjs +517 -0
  111. package/dist/index-CrrZsxTR.cjs.map +1 -0
  112. package/dist/index.cjs +20086 -0
  113. package/dist/index.cjs.map +1 -0
  114. package/dist/index.d.ts +109 -0
  115. package/dist/index.js +20088 -0
  116. package/dist/index.js.map +1 -0
  117. package/dist/plugin.d.ts +67 -0
  118. package/dist/pure.cjs +16 -0
  119. package/dist/pure.cjs.map +1 -0
  120. package/dist/pure.d.ts +37 -0
  121. package/dist/pure.js +16 -0
  122. package/dist/pure.js.map +1 -0
  123. package/dist/shared.cjs +50 -0
  124. package/dist/shared.cjs.map +1 -0
  125. package/dist/shared.d.ts +14 -0
  126. package/dist/shared.js +50 -0
  127. package/dist/shared.js.map +1 -0
  128. package/dist/styles.css +2 -0
  129. package/package.json +91 -0
@@ -0,0 +1,24 @@
1
+ export interface PriceToggleProps {
2
+ /**
3
+ * Label text shown beside the toggle.
4
+ * Defaults to 'Prices:'.
5
+ */
6
+ label?: string;
7
+ /** Translated labels keyed by the slugs used inside the component
8
+ * (`pricesLabel`, `inclVat`, `exclVat`). Missing keys fall back to English. */
9
+ labels?: Record<string, string>;
10
+ /**
11
+ * Initial state of the toggle.
12
+ * Defaults to true (incl. VAT).
13
+ */
14
+ initialState?: boolean;
15
+ /**
16
+ * Required callback fired when the toggle is switched.
17
+ * Receives the new state: true = incl. VAT, false = excl. VAT.
18
+ */
19
+ inclExclVatSwitched: (on: boolean) => void;
20
+ /** Extra CSS class applied to the root element. */
21
+ className?: string;
22
+ }
23
+ declare const _default: import('vue').DefineComponent<PriceToggleProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<PriceToggleProps> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
24
+ export default _default;
@@ -0,0 +1,35 @@
1
+ import { ProductPrice, Contact, Customer } from '@propeller-commerce/propeller-sdk-v2';
2
+ export interface ProductBulkPricesProps {
3
+ /**
4
+ * Bulk price tiers from the product.
5
+ * Obtain from `product.bulkPrices`.
6
+ */
7
+ bulkPrices: ProductPrice[];
8
+ /** Currency symbol to display. Defaults to '€'. */
9
+ currency?: string;
10
+ /**
11
+ * When true, net price (incl. tax) is the leading price.
12
+ * Defaults to false — gross (excl. VAT) is shown.
13
+ * Note: in the Propeller SDK `price.gross` = excl. VAT, `price.net` = incl. VAT.
14
+ */
15
+ includeTax?: boolean;
16
+ /**
17
+ * Controls portal visibility mode.
18
+ * 'semi-closed' — component is hidden for anonymous users.
19
+ * Defaults to 'open'.
20
+ */
21
+ portalMode?: string;
22
+ /** Authenticated user — used for semi-closed visibility. */
23
+ user?: Contact | Customer | null;
24
+ /** Tax zone code. Defaults to 'NL'. */
25
+ taxZone?: string;
26
+ /**
27
+ * Override any UI string.
28
+ * Available keys: title, quantityFrom, price, inclTax, exclTax
29
+ */
30
+ labels?: Record<string, string>;
31
+ /** Extra CSS class applied to the root element. */
32
+ className?: string;
33
+ }
34
+ declare const _default: import('vue').DefineComponent<ProductBulkPricesProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<ProductBulkPricesProps> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
35
+ export default _default;
@@ -0,0 +1,88 @@
1
+ import { Bundle, Cart, Contact, Customer, GraphQLClient } from '@propeller-commerce/propeller-sdk-v2';
2
+ export interface ProductBundlesProps {
3
+ /** GraphQL client instance used to fetch bundle data. */
4
+ graphqlClient: GraphQLClient;
5
+ /** Currency symbol to display. Defaults to '€'. */
6
+ currency?: string;
7
+ /** ID of the product whose bundles should be fetched. */
8
+ productId: number;
9
+ /** Language code used for content (e.g. 'NL', 'EN'). */
10
+ language: string;
11
+ /** Tax zone code used for pricing (e.g. 'NL'). */
12
+ taxZone: string;
13
+ /**
14
+ * When true, net price (incl. tax) is the leading price.
15
+ * Note: in the Propeller SDK `price.gross` = excl. VAT, `price.net` = incl. VAT.
16
+ */
17
+ includeTax?: boolean;
18
+ /**
19
+ * Controls portal visibility mode.
20
+ * 'semi-closed' — prices and add-to-cart are hidden for anonymous users.
21
+ * Defaults to 'open'.
22
+ */
23
+ portalMode?: string;
24
+ /** Authenticated user — used for semi-closed visibility check. */
25
+ user?: Contact | Customer | null;
26
+ /** Active company ID from the company switcher.
27
+ * Overrides user's default company for cart creation and lookup.
28
+ * If not provided, the user's default company is used.
29
+ */
30
+ companyId?: number;
31
+ /** Cart ID — required when onAddToCart is not provided */
32
+ cartId?: string;
33
+ /**
34
+ * Callback to handle a new cart being created.
35
+ * WARNING: If not provided the component create new carts on every add-to-cart.
36
+ */
37
+ onCartCreated?: (cart: Cart) => void;
38
+ /**
39
+ * If true a new cart is created if no cart ID is provided.
40
+ * Defaults to false.
41
+ */
42
+ createCart?: boolean;
43
+ /** When true, stock availability is validated before adding to cart. */
44
+ stockValidation?: boolean;
45
+ /**
46
+ * When true, the individual bundle items are listed inside each bundle card.
47
+ * Defaults to true.
48
+ */
49
+ showIndividualItems?: boolean;
50
+ /** Additional configuration object passed through to the component. */
51
+ configuration?: any;
52
+ /**
53
+ * Layout variant for the bundle display.
54
+ * - 'vertical' — stacked layout
55
+ * - 'horizontal' — side-by-side (default)
56
+ * - 'compact' — condensed, hides individual items
57
+ */
58
+ layout?: "vertical" | "horizontal" | "compact";
59
+ /**
60
+ * Override any UI string.
61
+ * Available keys: title, condition_ALL, condition_EP, leaderItem,
62
+ * youSave, adding, addToCart, loginToSeePrices, addedToCart,
63
+ * modalTitle, continueShopping, proceedToCheckout, noCartId
64
+ */
65
+ labels?: Record<string, string>;
66
+ /**
67
+ * When true a modal popup is shown after a successful add-to-cart
68
+ * with buttons to continue shopping or proceed to checkout.
69
+ * Defaults to false (only a brief inline toast is shown).
70
+ */
71
+ showModal?: boolean;
72
+ /** Callback fired when the "Proceed to checkout" modal button is clicked */
73
+ onProceedToCheckout?: () => void;
74
+ /**
75
+ * Callback triggered before adding the bundle to cart.
76
+ */
77
+ beforeBundleAddToCart?: (bundleId: string, quantity: number) => boolean;
78
+ /** Called when the user clicks "Add bundle to cart". Receives bundleId and quantity (always 1). */
79
+ onAddBundleToCart?: (bundleId: string, quantity: number) => void;
80
+ /**
81
+ * Callback triggered after adding the bundle to cart.
82
+ */
83
+ afterBundleAddToCart?: (cart: Cart, bundle?: Bundle) => void;
84
+ /** Extra CSS class applied to the root wrapper element. */
85
+ className?: string;
86
+ }
87
+ declare const _default: import('vue').DefineComponent<ProductBundlesProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<ProductBundlesProps> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
88
+ export default _default;
@@ -0,0 +1,332 @@
1
+ import { Component } from 'vue';
2
+ import { GraphQLClient, Product, Contact, Customer, Cart, CartMainItem, CartChildItemInput } from '@propeller-commerce/propeller-sdk-v2';
3
+ export interface ProductCardProps {
4
+ /** The product object to display */
5
+ product: Product;
6
+ /** Currency symbol to display. Defaults to '€'. */
7
+ currency?: string;
8
+ /** Show the product name. Defaults to true. */
9
+ showName?: boolean;
10
+ /** Show the product image. Defaults to true. */
11
+ showImage?: boolean;
12
+ /** Show the product short description. Defaults to false. */
13
+ showShortDescription?: boolean;
14
+ /** Show the product SKU. Defaults to true. */
15
+ showSku?: boolean;
16
+ /** Show the product manufacturer. Defaults to false. */
17
+ showManufacturer?: boolean;
18
+ /**
19
+ * Show the stock / availability widget below the product name.
20
+ * Uses the embedded `ItemStock` component driven by `product.inventory`.
21
+ * Defaults to false.
22
+ */
23
+ showStock?: boolean;
24
+ /**
25
+ * Show only the availability indicator (Available / Not available) inside ItemStock.
26
+ * Only relevant when `showStock` is true.
27
+ * Defaults to true.
28
+ */
29
+ showAvailability?: boolean;
30
+ /**
31
+ * Show the price below the product name.
32
+ * Defaults to true.
33
+ */
34
+ showPrice?: boolean;
35
+ /**
36
+ * Show the AddToCart component.
37
+ * Defaults to true.
38
+ */
39
+ allowAddToCart?: boolean;
40
+ /**
41
+ * Label overrides forwarded to the embedded ItemStock component.
42
+ * Keys: inStock, outOfStock, lowStock, available, notAvailable, pieces
43
+ */
44
+ stockLabels?: Record<string, string>;
45
+ /** Translated labels forwarded to the embedded `<ProductPrice>` display.
46
+ * See `ProductPriceProps.labels` for slugs (inclTax, exclTax, loginToSeePrices). */
47
+ priceLabels?: Record<string, string>;
48
+ /**
49
+ * Attribute codes/names to look up and display as badge overlays on the product image.
50
+ * Each code is resolved against `product.attributes.items[].attributeDescription.code`
51
+ * (or `.name`). Attributes with no matching value are silently omitted.
52
+ * Example: ['new', 'sale']
53
+ */
54
+ imageLabels?: string[];
55
+ /**
56
+ * Attribute codes/names to look up and display as extra text rows below the product name.
57
+ * Resolved the same way as `imageLabels`.
58
+ * Example: ['brand', 'color']
59
+ */
60
+ textLabels?: string[];
61
+ /**
62
+ * Override any UI string.
63
+ * Available keys: addToFavorites, removeFromFavorites
64
+ */
65
+ labels?: Record<string, string>;
66
+ /** Renders a heart-icon toggle button on the product image. Defaults to false. */
67
+ enableAddFavorite?: boolean;
68
+ /**
69
+ * Called whenever the favourite state is toggled.
70
+ * The second argument indicates the new state: `true` = added, `false` = removed.
71
+ */
72
+ onToggleFavorite?: (product: Product, isFavorite: boolean) => void;
73
+ /**
74
+ * Called when the product name or image is clicked.
75
+ * When provided, the default `<a>` navigation is prevented so the consumer
76
+ * can use framework-specific routing (e.g. Next.js `router.push`).
77
+ */
78
+ onProductClick?: (product: Product) => void;
79
+ /**
80
+ * When true, tax-inclusive price (net) is the leading price.
81
+ * When false, tax-exclusive price (gross) is shown.
82
+ * Defaults to false.
83
+ */
84
+ includeTax?: boolean;
85
+ /** Number of grid columns — when 1 the card renders as a compact horizontal row. */
86
+ columns?: number;
87
+ /** Extra CSS class applied to the root element. */
88
+ className?: string;
89
+ /**
90
+ * URL pattern controlling which segments appear in product links.
91
+ * Tokens: page → 'product', id → productId, slug → slug value.
92
+ * Examples: 'page/id/slug' (default) | 'page/slug' | 'page/id'
93
+ * Defaults to 'page/id/slug' when omitted.
94
+ */
95
+ urlPattern?: string;
96
+ /** Initialised Propeller SDK GraphQL client (required by embedded AddToCart). */
97
+ graphqlClient: GraphQLClient;
98
+ /** Authenticated user — used for cart creation / lookup. */
99
+ user: Contact | Customer | null;
100
+ /** ID of an existing cart to add items to. */
101
+ cartId?: string;
102
+ /** Config object providing imageSearchFiltersGrid and imageVariantFiltersSmall. */
103
+ configuration?: any;
104
+ /** Cluster ID for configurable products. */
105
+ clusterId?: number;
106
+ /** Product IDs of selected cluster child options. */
107
+ childItems?: number[];
108
+ /** Free-text notes attached to the cart item. */
109
+ notes?: string;
110
+ /** Custom unit price override. Omit to use calculated price. */
111
+ price?: number;
112
+ /**
113
+ * When true and no cartId is available, the embedded AddToCart automatically
114
+ * looks up or creates a cart. Always pair with onCartCreated.
115
+ */
116
+ createCart?: boolean;
117
+ /** Called after a new cart is created internally by AddToCart. */
118
+ onCartCreated?: (cart: Cart) => void;
119
+ /**
120
+ * Fully replaces the internal CartService.addItemToCart call inside AddToCart.
121
+ * Must return a Cart object.
122
+ */
123
+ onAddToCart?: (product: Product, clusterId?: number, quantity?: number, childItems?: CartChildItemInput[], notes?: string, price?: number, showModal?: boolean) => Cart;
124
+ /** Called after every successful add-to-cart. Receives the updated cart and the added item. */
125
+ afterAddToCart?: (cart: Cart, item?: CartMainItem) => void;
126
+ /**
127
+ * When true the embedded AddToCart shows a modal after a successful add
128
+ * instead of the default toast notification. Defaults to false.
129
+ */
130
+ showModal?: boolean;
131
+ /**
132
+ * Renders − and + buttons beside the quantity input in AddToCart.
133
+ * Defaults to true.
134
+ */
135
+ allowIncrDecr?: boolean;
136
+ /** Validate stock before adding to cart. Defaults to false. */
137
+ enableStockValidation?: boolean;
138
+ /** Language code forwarded to CartService operations. Defaults to 'NL'. */
139
+ language?: string;
140
+ /**
141
+ * Active company ID from the company switcher.
142
+ * When provided, overrides the user's default company for cart creation and lookup.
143
+ */
144
+ companyId?: number;
145
+ /** Called when the user clicks "Proceed to checkout" inside the AddToCart modal. */
146
+ onProceedToCheckout?: () => void;
147
+ /** Called when the user clicks "Request a Quote" inside the AddToCart modal. */
148
+ onRequestQuoteClick?: (cart: Cart) => void;
149
+ /** Label overrides for UI strings
150
+ *
151
+ * available labels:
152
+ * - outOfStock
153
+ * - noCartId
154
+ * - errorAdding
155
+ * - addedToCart
156
+ * - modalTitle
157
+ * - quantity
158
+ * - continueShopping
159
+ * - proceedToCheckout
160
+ * - requestQuoteButton
161
+ * - add
162
+ * - adding
163
+ */
164
+ addToCartLabels?: Record<string, string>;
165
+ priceComponent?: Component;
166
+ stockComponent?: Component;
167
+ addToCartComponent?: Component;
168
+ imageComponent?: Component;
169
+ badgesComponent?: Component;
170
+ favoriteComponent?: Component;
171
+ }
172
+ interface ProductCardState {
173
+ isFavorite: boolean;
174
+ includeTax: boolean;
175
+ priceListener: any;
176
+ getProductName: () => string;
177
+ getProductSku: () => string;
178
+ getProductImageUrl: () => string;
179
+ getProductPrice: () => string;
180
+ getProductUrl: () => string;
181
+ getProductShortDescription: () => string;
182
+ getProductManufacturer: () => string;
183
+ getLabel: (key: string, fallback: string) => string;
184
+ getAttributeValue: (code: string) => string;
185
+ handleProductClick: (e: any) => void;
186
+ handleToggleFavorite: (e: any) => void;
187
+ isRow: () => boolean;
188
+ computedImageLabels: () => string[];
189
+ computedTextLabels: () => {
190
+ name: string;
191
+ value: string;
192
+ }[];
193
+ }
194
+ declare function handleNavigate(): void;
195
+ declare function handleProductClick(e: any): ReturnType<ProductCardState["handleProductClick"]>;
196
+ declare function handleToggleFavorite(e: any): ReturnType<ProductCardState["handleToggleFavorite"]>;
197
+ declare function __VLS_template(): {
198
+ attrs: Partial<{}>;
199
+ slots: {
200
+ image?(_: {
201
+ product: Product;
202
+ language: string | undefined;
203
+ imageUrl: string;
204
+ imageSearchFilters: any;
205
+ imageVariantFilters: any;
206
+ onNavigate: typeof handleNavigate;
207
+ }): any;
208
+ badges?(_: {
209
+ product: Product;
210
+ imageLabels: string[];
211
+ labels: Record<string, string> | undefined;
212
+ }): any;
213
+ favorite?(_: {
214
+ product: Product;
215
+ isFavorite: boolean;
216
+ toggle: typeof handleToggleFavorite;
217
+ labels: Record<string, string> | undefined;
218
+ }): any;
219
+ sku?(_: {
220
+ product: Product;
221
+ sku: string;
222
+ }): any;
223
+ sku?(_: {
224
+ product: Product;
225
+ sku: string;
226
+ }): any;
227
+ name?(_: {
228
+ product: Product;
229
+ productUrl: string;
230
+ handleProductClick: typeof handleProductClick;
231
+ linkable: boolean;
232
+ name: string;
233
+ onNavigate: typeof handleNavigate;
234
+ }): any;
235
+ name?(_: {
236
+ product: Product;
237
+ productUrl: string;
238
+ handleProductClick: typeof handleProductClick;
239
+ linkable: boolean;
240
+ name: string;
241
+ onNavigate: typeof handleNavigate;
242
+ }): any;
243
+ textLabels?(_: {
244
+ product: Product;
245
+ values: {
246
+ name: string;
247
+ value: string;
248
+ }[];
249
+ }): any;
250
+ textLabels?(_: {
251
+ product: Product;
252
+ values: {
253
+ name: string;
254
+ value: string;
255
+ }[];
256
+ }): any;
257
+ manufacturer?(_: {
258
+ product: Product;
259
+ manufacturer: string;
260
+ }): any;
261
+ manufacturer?(_: {
262
+ product: Product;
263
+ manufacturer: string;
264
+ }): any;
265
+ shortDescription?(_: {
266
+ product: Product;
267
+ text: string;
268
+ }): any;
269
+ shortDescription?(_: {
270
+ product: Product;
271
+ text: string;
272
+ }): any;
273
+ stock?(_: {
274
+ product: Product;
275
+ inventory: import('@propeller-commerce/propeller-sdk-v2').ProductInventory | undefined;
276
+ showAvailability: boolean;
277
+ labels: Record<string, string> | undefined;
278
+ }): any;
279
+ stock?(_: {
280
+ product: Product;
281
+ inventory: import('@propeller-commerce/propeller-sdk-v2').ProductInventory | undefined;
282
+ showAvailability: boolean;
283
+ labels: Record<string, string> | undefined;
284
+ }): any;
285
+ price?(_: {
286
+ product: Product;
287
+ price: import('@propeller-commerce/propeller-sdk-v2').ProductPrice;
288
+ includeTax: boolean;
289
+ currency: string | undefined;
290
+ labels: Record<string, string> | undefined;
291
+ }): any;
292
+ price?(_: {
293
+ product: Product;
294
+ price: import('@propeller-commerce/propeller-sdk-v2').ProductPrice;
295
+ includeTax: boolean;
296
+ currency: string | undefined;
297
+ labels: Record<string, string> | undefined;
298
+ }): any;
299
+ addToCart?(_: {
300
+ product: Product;
301
+ cartId: string | undefined;
302
+ labels: Record<string, string> | undefined;
303
+ }): any;
304
+ addToCart?(_: {
305
+ product: Product;
306
+ cartId: string | undefined;
307
+ labels: Record<string, string> | undefined;
308
+ }): any;
309
+ };
310
+ refs: {};
311
+ rootEl: HTMLDivElement;
312
+ };
313
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
314
+ declare const __VLS_component: import('vue').DefineComponent<ProductCardProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<ProductCardProps> & Readonly<{}>, {
315
+ showPrice: boolean;
316
+ showStock: boolean;
317
+ showAvailability: boolean;
318
+ enableAddFavorite: boolean;
319
+ allowAddToCart: boolean;
320
+ showSku: boolean;
321
+ showName: boolean;
322
+ showImage: boolean;
323
+ showShortDescription: boolean;
324
+ showManufacturer: boolean;
325
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
326
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
327
+ export default _default;
328
+ type __VLS_WithTemplateSlots<T, S> = T & {
329
+ new (): {
330
+ $slots: S;
331
+ };
332
+ };
@@ -0,0 +1,30 @@
1
+ import { Product, Cluster } from '@propeller-commerce/propeller-sdk-v2';
2
+ export interface ProductDescriptionProps {
3
+ /**
4
+ * Product or Cluster object.
5
+ * The component reads `product.descriptions` (an array of LocalizedString)
6
+ * and renders the matching language entry as HTML.
7
+ */
8
+ product: Product | Cluster;
9
+ /**
10
+ * Language code used to resolve the correct localised description.
11
+ * Defaults to 'NL'.
12
+ */
13
+ language?: string;
14
+ /**
15
+ * When true, the description is initially collapsed to `maxLength` characters.
16
+ * A "Read more" / "Read less" toggle is shown.
17
+ * Defaults to false.
18
+ */
19
+ collapsed?: boolean;
20
+ /**
21
+ * Maximum number of characters shown when collapsed.
22
+ * Set to 0 to display the entire description without truncation.
23
+ * Defaults to 0.
24
+ */
25
+ maxLength?: number;
26
+ /** Extra CSS class applied to the root element. */
27
+ className?: string;
28
+ }
29
+ declare const _default: import('vue').DefineComponent<ProductDescriptionProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<ProductDescriptionProps> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
30
+ export default _default;
@@ -0,0 +1,22 @@
1
+ import { PaginatedMediaDocumentResponse } from '@propeller-commerce/propeller-sdk-v2';
2
+ export interface ProductDownloadsProps {
3
+ /**
4
+ * Media documents for the product.
5
+ * Obtain from `product.media?.documents` — may be undefined when the
6
+ * product has no documents; the component renders an empty state.
7
+ */
8
+ downloads?: PaginatedMediaDocumentResponse;
9
+ /**
10
+ * Language code used to resolve the correct localised document URL and label.
11
+ */
12
+ language: string;
13
+ /**
14
+ * Override any UI string.
15
+ * Available keys: title, download, empty
16
+ */
17
+ labels?: Record<string, string>;
18
+ /** Extra CSS class applied to the root element. */
19
+ className?: string;
20
+ }
21
+ declare const _default: import('vue').DefineComponent<ProductDownloadsProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<ProductDownloadsProps> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
22
+ export default _default;
@@ -0,0 +1,25 @@
1
+ export interface ProductGalleryProps {
2
+ /**
3
+ * Array of image URLs to display.
4
+ * Obtain from: `product.media?.images?.items?.[0]?.imageVariants?.map(v => v.url)`
5
+ * Component is in skeleton/loading state when this is an empty array.
6
+ */
7
+ images: string[];
8
+ /** Show image thumbnails below the main image. Defaults to true. */
9
+ showThumbnails?: boolean;
10
+ /** Enable cursor-zoom-in hint on the main image. Defaults to true. */
11
+ enableZoom?: boolean;
12
+ /** Enable fullscreen lightbox when clicking the main image. Defaults to true. */
13
+ enableLightbox?: boolean;
14
+ /** Extra CSS class applied to the root element. */
15
+ className?: string;
16
+ /** Translated labels keyed by the slugs used inside the component (see
17
+ * `getLabel` calls). Missing keys fall back to the English defaults. */
18
+ labels?: Record<string, string>;
19
+ }
20
+ declare const _default: import('vue').DefineComponent<ProductGalleryProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<ProductGalleryProps> & Readonly<{}>, {
21
+ showThumbnails: boolean;
22
+ enableZoom: boolean;
23
+ enableLightbox: boolean;
24
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
25
+ export default _default;