@ikas/code-components-mcp 1.4.0-beta.16 → 1.4.0-beta.160
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/data/framework.json +103 -16
- package/data/migration.json +10 -4
- package/data/section-templates/account-info-section/children/AccountFavorites/ikas-config-snippet.json +13 -0
- package/data/section-templates/account-info-section/ikas-config-snippet.json +19 -0
- package/data/section-templates/add-to-cart/ikas-config-snippet.json +17 -0
- package/data/section-templates/add-to-cart/index.tsx +16 -2
- package/data/section-templates/add-to-cart/sub-components/QuantitySelector/index.tsx +11 -3
- package/data/section-templates/add-to-cart/utils/cartLimits.ts +23 -0
- package/data/section-templates/blog-home-section/ikas-config-snippet.json +2 -0
- package/data/section-templates/blog-post-section/ikas-config-snippet.json +2 -0
- package/data/section-templates/bundle-products/hooks/useBundleProducts.ts +7 -6
- package/data/section-templates/bundle-products/ikas-config-snippet.json +20 -0
- package/data/section-templates/cart-section/sub-components/CartItem/index.tsx +57 -24
- package/data/section-templates/cart-section/sub-components/CartItem/styles.css +14 -0
- package/data/section-templates/cart-section/sub-components/QuantitySelector/index.tsx +11 -3
- package/data/section-templates/category-images-section/children/CategoryImageItem/ikas-config-snippet.json +4 -0
- package/data/section-templates/category-images-section/ikas-config-snippet.json +15 -0
- package/data/section-templates/category-list-section/children/CardProductName/ikas-config-snippet.json +2 -1
- package/data/section-templates/category-list-section/ikas-config-snippet.json +21 -0
- package/data/section-templates/component-renderer/ikas-config-snippet.json +13 -0
- package/data/section-templates/favorites/ikas-config-snippet.json +18 -1
- package/data/section-templates/features-section/ikas-config-snippet.json +13 -0
- package/data/section-templates/footer-section/ikas-config-snippet.json +15 -0
- package/data/section-templates/header-section/children/Announcements/ikas-config-snippet.json +7 -0
- package/data/section-templates/header-section/children/CookieBar/ikas-config-snippet.json +3 -0
- package/data/section-templates/header-section/children/Navbar/ikas-config-snippet.json +27 -0
- package/data/section-templates/header-section/ikas-config-snippet.json +13 -0
- package/data/section-templates/header-section/sub-components/CartItem/index.tsx +57 -24
- package/data/section-templates/header-section/sub-components/CartItem/styles.css +14 -0
- package/data/section-templates/header-section/sub-components/QuantitySelector/index.tsx +11 -3
- package/data/section-templates/hero-slider-section/children/HeroSliderItem/ikas-config-snippet.json +18 -0
- package/data/section-templates/hero-slider-section/ikas-config-snippet.json +13 -0
- package/data/section-templates/image-handling/ikas-config-snippet.json +53 -0
- package/data/section-templates/login-section/ikas-config-snippet.json +2 -0
- package/data/section-templates/navigation/ikas-config-snippet.json +27 -0
- package/data/section-templates/navigation/sub-components/CartItem/index.tsx +57 -24
- package/data/section-templates/navigation/sub-components/CartItem/styles.css +14 -0
- package/data/section-templates/navigation/sub-components/QuantitySelector/index.tsx +11 -3
- package/data/section-templates/product-detail-section/children/ProductDetailAddToCart/ikas-config-snippet.json +17 -0
- package/data/section-templates/product-detail-section/children/ProductDetailAddToCart/index.tsx +16 -2
- package/data/section-templates/product-detail-section/children/ProductDetailBackInStock/components/BackInStockForm/index.tsx +92 -0
- package/data/section-templates/product-detail-section/children/ProductDetailBackInStock/ikas-config-snippet.json +175 -0
- package/data/section-templates/product-detail-section/children/ProductDetailBackInStock/index.tsx +141 -0
- package/data/section-templates/product-detail-section/children/ProductDetailBackInStock/styles.css +47 -0
- package/data/section-templates/product-detail-section/children/ProductDetailBackInStock/types.ts +25 -0
- package/data/section-templates/product-detail-section/children/ProductDetailBundleFurniture/ikas-config-snippet.json +18 -0
- package/data/section-templates/product-detail-section/children/ProductDetailBundleProduct/ikas-config-snippet.json +20 -0
- package/data/section-templates/product-detail-section/children/ProductDetailDescription/ikas-config-snippet.json +27 -0
- package/data/section-templates/product-detail-section/children/ProductDetailFeatures/ikas-config-snippet.json +29 -0
- package/data/section-templates/product-detail-section/children/ProductDetailNameFavorite/ikas-config-snippet.json +18 -1
- package/data/section-templates/product-detail-section/children/ProductDetailOffer/ikas-config-snippet.json +20 -0
- package/data/section-templates/product-detail-section/children/ProductDetailOptionSet/ikas-config-snippet.json +16 -0
- package/data/section-templates/product-detail-section/children/ProductDetailPrices/ikas-config-snippet.json +16 -0
- package/data/section-templates/product-detail-section/children/ProductDetailProductGroup/ikas-config-snippet.json +16 -0
- package/data/section-templates/product-detail-section/children/ProductDetailSku/ikas-config-snippet.json +16 -0
- package/data/section-templates/product-detail-section/children/ProductDetailVariant/ikas-config-snippet.json +17 -0
- package/data/section-templates/product-detail-section/hooks/useBundleProducts.ts +7 -6
- package/data/section-templates/product-detail-section/ikas-config-snippet.json +53 -0
- package/data/section-templates/product-detail-section/sub-components/Modal/index.tsx +120 -0
- package/data/section-templates/product-detail-section/sub-components/Modal/styles.css +70 -0
- package/data/section-templates/product-detail-section/sub-components/QuantitySelector/index.tsx +11 -3
- package/data/section-templates/product-detail-section/utils/cartLimits.ts +23 -0
- package/data/section-templates/product-pricing/ikas-config-snippet.json +16 -0
- package/data/section-templates/product-slider-section/children/CardProductName/ikas-config-snippet.json +2 -1
- package/data/section-templates/product-slider-section/ikas-config-snippet.json +17 -0
- package/data/section-templates/register-section/ikas-config-snippet.json +2 -0
- package/data/section-templates/variant-selection/ikas-config-snippet.json +17 -0
- package/data/storefront-api.json +239 -27
- package/data/storefront-types.json +9071 -5740
- package/dist/index.js +1242 -28
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -5,20 +5,27 @@ interface Props {
|
|
|
5
5
|
value: number;
|
|
6
6
|
onChange: (value: number) => void;
|
|
7
7
|
size?: "default" | "sm";
|
|
8
|
+
min?: number;
|
|
9
|
+
max?: number;
|
|
8
10
|
}
|
|
9
11
|
|
|
10
12
|
export default function QuantitySelector({
|
|
11
13
|
value,
|
|
12
14
|
onChange,
|
|
13
15
|
size = "default",
|
|
16
|
+
min = 1,
|
|
17
|
+
max,
|
|
14
18
|
}: Props) {
|
|
19
|
+
const canDecrease = value > min;
|
|
20
|
+
const canIncrease = max == null || value < max;
|
|
21
|
+
|
|
15
22
|
return (
|
|
16
23
|
<div className={cx("kombos-pd__qty", size === "sm" && "kombos-pd__qty--sm")}>
|
|
17
24
|
<button
|
|
18
25
|
type="button"
|
|
19
26
|
className="kombos-pd__qty-btn"
|
|
20
|
-
onClick={() => onChange(Math.max(
|
|
21
|
-
disabled={
|
|
27
|
+
onClick={() => onChange(Math.max(min, value - 1))}
|
|
28
|
+
disabled={!canDecrease}
|
|
22
29
|
aria-label="Decrease quantity"
|
|
23
30
|
>
|
|
24
31
|
<MinusSVG />
|
|
@@ -31,7 +38,8 @@ export default function QuantitySelector({
|
|
|
31
38
|
<button
|
|
32
39
|
type="button"
|
|
33
40
|
className="kombos-pd__qty-btn"
|
|
34
|
-
onClick={() => onChange(value + 1)}
|
|
41
|
+
onClick={() => onChange(max == null ? value + 1 : Math.min(max, value + 1))}
|
|
42
|
+
disabled={!canIncrease}
|
|
35
43
|
aria-label="Increase quantity"
|
|
36
44
|
>
|
|
37
45
|
<PlusSVG />
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
"displayName": "Dark Overlay",
|
|
25
25
|
"type": "BOOLEAN",
|
|
26
26
|
"required": false,
|
|
27
|
+
"defaultValue": false,
|
|
27
28
|
"groupId": "desktop"
|
|
28
29
|
},
|
|
29
30
|
{
|
|
@@ -39,6 +40,7 @@
|
|
|
39
40
|
"displayName": "Image Fit",
|
|
40
41
|
"type": "ENUM",
|
|
41
42
|
"required": false,
|
|
43
|
+
"defaultValue": "Cover",
|
|
42
44
|
"groupId": "desktop",
|
|
43
45
|
"enumTypeId": "{{ENUM_ID:ObjectFit}}"
|
|
44
46
|
},
|
|
@@ -61,6 +63,7 @@
|
|
|
61
63
|
"displayName": "Dark Overlay",
|
|
62
64
|
"type": "BOOLEAN",
|
|
63
65
|
"required": false,
|
|
66
|
+
"defaultValue": false,
|
|
64
67
|
"groupId": "mobile"
|
|
65
68
|
},
|
|
66
69
|
{
|
|
@@ -76,6 +79,7 @@
|
|
|
76
79
|
"displayName": "Image Fit",
|
|
77
80
|
"type": "ENUM",
|
|
78
81
|
"required": false,
|
|
82
|
+
"defaultValue": "Cover",
|
|
79
83
|
"groupId": "mobile",
|
|
80
84
|
"enumTypeId": "{{ENUM_ID:ObjectFit}}"
|
|
81
85
|
}
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"displayName": "Title Color",
|
|
19
19
|
"type": "COLOR",
|
|
20
20
|
"required": false,
|
|
21
|
+
"defaultValue": "#14141a",
|
|
21
22
|
"groupId": "content"
|
|
22
23
|
},
|
|
23
24
|
{
|
|
@@ -41,6 +42,7 @@
|
|
|
41
42
|
"displayName": "Mobile Column Count",
|
|
42
43
|
"type": "ENUM",
|
|
43
44
|
"required": false,
|
|
45
|
+
"defaultValue": "One",
|
|
44
46
|
"groupId": "appearance",
|
|
45
47
|
"enumTypeId": "{{ENUM_ID:NumberOfColumns}}"
|
|
46
48
|
},
|
|
@@ -49,6 +51,19 @@
|
|
|
49
51
|
"displayName": "Categories",
|
|
50
52
|
"type": "COMPONENT_LIST",
|
|
51
53
|
"required": false,
|
|
54
|
+
"defaultValue": {
|
|
55
|
+
"components": [
|
|
56
|
+
{
|
|
57
|
+
"codeComponentId": "nb34u3yu-category-image-item"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"codeComponentId": "nb34u3yu-category-image-item"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"codeComponentId": "nb34u3yu-category-image-item"
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
},
|
|
52
67
|
"filteredComponentIds": [
|
|
53
68
|
"<id-of-CategoryImageItem>"
|
|
54
69
|
]
|
|
@@ -111,6 +111,7 @@
|
|
|
111
111
|
"displayName": "Show Filters",
|
|
112
112
|
"type": "BOOLEAN",
|
|
113
113
|
"required": false,
|
|
114
|
+
"defaultValue": false,
|
|
114
115
|
"groupId": "filters"
|
|
115
116
|
},
|
|
116
117
|
{
|
|
@@ -118,6 +119,7 @@
|
|
|
118
119
|
"displayName": "Show Search",
|
|
119
120
|
"type": "BOOLEAN",
|
|
120
121
|
"required": false,
|
|
122
|
+
"defaultValue": false,
|
|
121
123
|
"groupId": "filters"
|
|
122
124
|
},
|
|
123
125
|
{
|
|
@@ -125,6 +127,7 @@
|
|
|
125
127
|
"displayName": "Image Aspect Ratio",
|
|
126
128
|
"type": "ENUM",
|
|
127
129
|
"required": false,
|
|
130
|
+
"defaultValue": "Square",
|
|
128
131
|
"groupId": "image-settings",
|
|
129
132
|
"enumTypeId": "{{ENUM_ID:AspectRatio}}"
|
|
130
133
|
},
|
|
@@ -133,6 +136,7 @@
|
|
|
133
136
|
"displayName": "Image Fit",
|
|
134
137
|
"type": "ENUM",
|
|
135
138
|
"required": false,
|
|
139
|
+
"defaultValue": "Cover",
|
|
136
140
|
"groupId": "image-settings",
|
|
137
141
|
"enumTypeId": "{{ENUM_ID:ObjectFit}}"
|
|
138
142
|
},
|
|
@@ -141,6 +145,7 @@
|
|
|
141
145
|
"displayName": "Infinite Scroll",
|
|
142
146
|
"type": "BOOLEAN",
|
|
143
147
|
"required": false,
|
|
148
|
+
"defaultValue": false,
|
|
144
149
|
"groupId": "pagination"
|
|
145
150
|
},
|
|
146
151
|
{
|
|
@@ -164,6 +169,7 @@
|
|
|
164
169
|
"displayName": "Hide Add to Cart Button",
|
|
165
170
|
"type": "BOOLEAN",
|
|
166
171
|
"required": false,
|
|
172
|
+
"defaultValue": false,
|
|
167
173
|
"groupId": "card-settings"
|
|
168
174
|
},
|
|
169
175
|
{
|
|
@@ -171,6 +177,19 @@
|
|
|
171
177
|
"displayName": "Components",
|
|
172
178
|
"type": "COMPONENT_LIST",
|
|
173
179
|
"required": false,
|
|
180
|
+
"defaultValue": {
|
|
181
|
+
"components": [
|
|
182
|
+
{
|
|
183
|
+
"codeComponentId": "nb34u3yu-card-product-name"
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"codeComponentId": "nb34u3yu-card-product-variants"
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"codeComponentId": "nb34u3yu-card-product-price"
|
|
190
|
+
}
|
|
191
|
+
]
|
|
192
|
+
},
|
|
174
193
|
"privateVarMap": {
|
|
175
194
|
"product": {
|
|
176
195
|
"id": "pvm_1772808304776_3",
|
|
@@ -188,6 +207,7 @@
|
|
|
188
207
|
"displayName": "Hide Breadcrumb",
|
|
189
208
|
"type": "BOOLEAN",
|
|
190
209
|
"required": false,
|
|
210
|
+
"defaultValue": false,
|
|
191
211
|
"groupId": "appearance"
|
|
192
212
|
},
|
|
193
213
|
{
|
|
@@ -195,6 +215,7 @@
|
|
|
195
215
|
"displayName": "Is This a Brand Page?",
|
|
196
216
|
"type": "BOOLEAN",
|
|
197
217
|
"required": false,
|
|
218
|
+
"defaultValue": false,
|
|
198
219
|
"groupId": "data"
|
|
199
220
|
},
|
|
200
221
|
{
|
|
@@ -10,6 +10,19 @@
|
|
|
10
10
|
"displayName": "Components",
|
|
11
11
|
"type": "COMPONENT_LIST",
|
|
12
12
|
"required": false,
|
|
13
|
+
"defaultValue": {
|
|
14
|
+
"components": [
|
|
15
|
+
{
|
|
16
|
+
"codeComponentId": "nb34u3yu-announcements"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"codeComponentId": "nb34u3yu-navbar"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"codeComponentId": "nb34u3yu-cookie-bar"
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
},
|
|
13
26
|
"filteredComponentIds": [
|
|
14
27
|
"<id-of-Navbar>",
|
|
15
28
|
"<id-of-Announcements>",
|
|
@@ -16,6 +16,10 @@
|
|
|
16
16
|
"displayName": "Top Spacing",
|
|
17
17
|
"type": "TYPE",
|
|
18
18
|
"required": false,
|
|
19
|
+
"defaultValue": {
|
|
20
|
+
"value": 0,
|
|
21
|
+
"unit": "px"
|
|
22
|
+
},
|
|
19
23
|
"groupId": "mobile",
|
|
20
24
|
"typeId": "@ikas/bp-storefront-models-MarginTopStyleType"
|
|
21
25
|
},
|
|
@@ -24,6 +28,10 @@
|
|
|
24
28
|
"displayName": "Bottom Spacing",
|
|
25
29
|
"type": "TYPE",
|
|
26
30
|
"required": false,
|
|
31
|
+
"defaultValue": {
|
|
32
|
+
"value": 0,
|
|
33
|
+
"unit": "px"
|
|
34
|
+
},
|
|
27
35
|
"groupId": "mobile",
|
|
28
36
|
"typeId": "@ikas/bp-storefront-models-MarginBottomStyleType"
|
|
29
37
|
},
|
|
@@ -32,6 +40,10 @@
|
|
|
32
40
|
"displayName": "Top Spacing",
|
|
33
41
|
"type": "TYPE",
|
|
34
42
|
"required": false,
|
|
43
|
+
"defaultValue": {
|
|
44
|
+
"value": 0,
|
|
45
|
+
"unit": "px"
|
|
46
|
+
},
|
|
35
47
|
"groupId": "desktop",
|
|
36
48
|
"typeId": "@ikas/bp-storefront-models-MarginTopStyleType"
|
|
37
49
|
},
|
|
@@ -40,6 +52,10 @@
|
|
|
40
52
|
"displayName": "Bottom Spacing",
|
|
41
53
|
"type": "TYPE",
|
|
42
54
|
"required": false,
|
|
55
|
+
"defaultValue": {
|
|
56
|
+
"value": 0,
|
|
57
|
+
"unit": "px"
|
|
58
|
+
},
|
|
43
59
|
"groupId": "desktop",
|
|
44
60
|
"typeId": "@ikas/bp-storefront-models-MarginBottomStyleType"
|
|
45
61
|
},
|
|
@@ -47,7 +63,8 @@
|
|
|
47
63
|
"name": "hideFavoriteButton",
|
|
48
64
|
"displayName": "Hide Favorite Button",
|
|
49
65
|
"type": "BOOLEAN",
|
|
50
|
-
"required": false
|
|
66
|
+
"required": false,
|
|
67
|
+
"defaultValue": false
|
|
51
68
|
}
|
|
52
69
|
],
|
|
53
70
|
"propGroups": [
|
|
@@ -17,6 +17,19 @@
|
|
|
17
17
|
"displayName": "Specifications",
|
|
18
18
|
"type": "COMPONENT_LIST",
|
|
19
19
|
"required": false,
|
|
20
|
+
"defaultValue": {
|
|
21
|
+
"components": [
|
|
22
|
+
{
|
|
23
|
+
"codeComponentId": "nb34u3yu-feature-item"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"codeComponentId": "nb34u3yu-feature-item"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"codeComponentId": "nb34u3yu-feature-item"
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
},
|
|
20
33
|
"filteredComponentIds": [
|
|
21
34
|
"<id-of-FeatureItem>"
|
|
22
35
|
]
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
"displayName": "Link Color",
|
|
40
40
|
"type": "COLOR",
|
|
41
41
|
"required": false,
|
|
42
|
+
"defaultValue": "#2e2e33",
|
|
42
43
|
"groupId": "appearance"
|
|
43
44
|
},
|
|
44
45
|
{
|
|
@@ -46,6 +47,7 @@
|
|
|
46
47
|
"displayName": "Link Hover Color",
|
|
47
48
|
"type": "COLOR",
|
|
48
49
|
"required": false,
|
|
50
|
+
"defaultValue": "#14141a",
|
|
49
51
|
"groupId": "appearance"
|
|
50
52
|
},
|
|
51
53
|
{
|
|
@@ -75,6 +77,19 @@
|
|
|
75
77
|
"displayName": "Social Media Icons",
|
|
76
78
|
"type": "COMPONENT_LIST",
|
|
77
79
|
"required": false,
|
|
80
|
+
"defaultValue": {
|
|
81
|
+
"components": [
|
|
82
|
+
{
|
|
83
|
+
"codeComponentId": "nb34u3yu-social-media-icon"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"codeComponentId": "nb34u3yu-social-media-icon"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"codeComponentId": "nb34u3yu-social-media-icon"
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
},
|
|
78
93
|
"filteredComponentIds": [
|
|
79
94
|
"<id-of-SocialMediaIcon>"
|
|
80
95
|
]
|
package/data/section-templates/header-section/children/Announcements/ikas-config-snippet.json
CHANGED
|
@@ -26,6 +26,13 @@
|
|
|
26
26
|
"displayName": "Announcements",
|
|
27
27
|
"type": "COMPONENT_LIST",
|
|
28
28
|
"required": false,
|
|
29
|
+
"defaultValue": {
|
|
30
|
+
"components": [
|
|
31
|
+
{
|
|
32
|
+
"codeComponentId": "nb34u3yu-announcement"
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
},
|
|
29
36
|
"filteredComponentIds": [
|
|
30
37
|
"<id-of-Announcement>"
|
|
31
38
|
]
|
|
@@ -42,6 +42,7 @@
|
|
|
42
42
|
"displayName": "Background Color",
|
|
43
43
|
"type": "COLOR",
|
|
44
44
|
"required": false,
|
|
45
|
+
"defaultValue": "rgba(0, 0, 0, 0.7)",
|
|
45
46
|
"groupId": "appearance"
|
|
46
47
|
},
|
|
47
48
|
{
|
|
@@ -49,6 +50,7 @@
|
|
|
49
50
|
"displayName": "Text Color",
|
|
50
51
|
"type": "COLOR",
|
|
51
52
|
"required": false,
|
|
53
|
+
"defaultValue": "#ffffff",
|
|
52
54
|
"groupId": "appearance"
|
|
53
55
|
},
|
|
54
56
|
{
|
|
@@ -56,6 +58,7 @@
|
|
|
56
58
|
"displayName": "Button Text Color",
|
|
57
59
|
"type": "COLOR",
|
|
58
60
|
"required": false,
|
|
61
|
+
"defaultValue": "#ffffff",
|
|
59
62
|
"groupId": "appearance"
|
|
60
63
|
}
|
|
61
64
|
],
|
|
@@ -17,6 +17,10 @@
|
|
|
17
17
|
"displayName": "Desktop Logo Size",
|
|
18
18
|
"type": "TYPE",
|
|
19
19
|
"required": false,
|
|
20
|
+
"defaultValue": {
|
|
21
|
+
"value": 60,
|
|
22
|
+
"unit": "px"
|
|
23
|
+
},
|
|
20
24
|
"groupId": "logo-settings",
|
|
21
25
|
"typeId": "@ikas/bp-storefront-models-HeightStyleType"
|
|
22
26
|
},
|
|
@@ -25,6 +29,10 @@
|
|
|
25
29
|
"displayName": "Mobile Logo Size",
|
|
26
30
|
"type": "TYPE",
|
|
27
31
|
"required": false,
|
|
32
|
+
"defaultValue": {
|
|
33
|
+
"value": 48,
|
|
34
|
+
"unit": "px"
|
|
35
|
+
},
|
|
28
36
|
"groupId": "logo-settings",
|
|
29
37
|
"typeId": "@ikas/bp-storefront-models-HeightStyleType"
|
|
30
38
|
},
|
|
@@ -40,6 +48,7 @@
|
|
|
40
48
|
"displayName": "Link Color",
|
|
41
49
|
"type": "COLOR",
|
|
42
50
|
"required": false,
|
|
51
|
+
"defaultValue": "#2e2e33",
|
|
43
52
|
"groupId": "navigation"
|
|
44
53
|
},
|
|
45
54
|
{
|
|
@@ -54,6 +63,7 @@
|
|
|
54
63
|
"displayName": "Link Color",
|
|
55
64
|
"type": "COLOR",
|
|
56
65
|
"required": false,
|
|
66
|
+
"defaultValue": "#2e2e33",
|
|
57
67
|
"groupId": "colored-links"
|
|
58
68
|
},
|
|
59
69
|
{
|
|
@@ -140,6 +150,7 @@
|
|
|
140
150
|
"displayName": "Hide Add to Cart Button",
|
|
141
151
|
"type": "BOOLEAN",
|
|
142
152
|
"required": false,
|
|
153
|
+
"defaultValue": false,
|
|
143
154
|
"groupId": "search-card-settings"
|
|
144
155
|
},
|
|
145
156
|
{
|
|
@@ -219,6 +230,19 @@
|
|
|
219
230
|
"displayName": "Components",
|
|
220
231
|
"type": "COMPONENT_LIST",
|
|
221
232
|
"required": false,
|
|
233
|
+
"defaultValue": {
|
|
234
|
+
"components": [
|
|
235
|
+
{
|
|
236
|
+
"codeComponentId": "nb34u3yu-card-product-name"
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
"codeComponentId": "nb34u3yu-card-product-variants"
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
"codeComponentId": "nb34u3yu-card-product-price"
|
|
243
|
+
}
|
|
244
|
+
]
|
|
245
|
+
},
|
|
222
246
|
"privateVarMap": {
|
|
223
247
|
"product": {
|
|
224
248
|
"id": "pvm_1772803767210_2",
|
|
@@ -236,6 +260,7 @@
|
|
|
236
260
|
"displayName": "Image Ratio",
|
|
237
261
|
"type": "ENUM",
|
|
238
262
|
"required": false,
|
|
263
|
+
"defaultValue": "Square",
|
|
239
264
|
"groupId": "search-image",
|
|
240
265
|
"enumTypeId": "{{ENUM_ID:AspectRatio}}"
|
|
241
266
|
},
|
|
@@ -244,6 +269,7 @@
|
|
|
244
269
|
"displayName": "Image Fit",
|
|
245
270
|
"type": "ENUM",
|
|
246
271
|
"required": false,
|
|
272
|
+
"defaultValue": "Cover",
|
|
247
273
|
"groupId": "search-image",
|
|
248
274
|
"enumTypeId": "{{ENUM_ID:ObjectFit}}"
|
|
249
275
|
},
|
|
@@ -260,6 +286,7 @@
|
|
|
260
286
|
"displayName": "Enable Sticky",
|
|
261
287
|
"type": "BOOLEAN",
|
|
262
288
|
"required": false,
|
|
289
|
+
"defaultValue": false,
|
|
263
290
|
"description": "When enabled, the navbar stays fixed at the top of the page and remains visible while scrolling",
|
|
264
291
|
"groupId": "settings"
|
|
265
292
|
},
|
|
@@ -10,6 +10,19 @@
|
|
|
10
10
|
"displayName": "Components",
|
|
11
11
|
"type": "COMPONENT_LIST",
|
|
12
12
|
"required": false,
|
|
13
|
+
"defaultValue": {
|
|
14
|
+
"components": [
|
|
15
|
+
{
|
|
16
|
+
"codeComponentId": "nb34u3yu-announcements"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"codeComponentId": "nb34u3yu-navbar"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"codeComponentId": "nb34u3yu-cookie-bar"
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
},
|
|
13
26
|
"filteredComponentIds": [
|
|
14
27
|
"<id-of-Navbar>",
|
|
15
28
|
"<id-of-Announcements>",
|
|
@@ -14,6 +14,8 @@ import {
|
|
|
14
14
|
getOrderLineItemFormattedOverridenPriceWithQuantity,
|
|
15
15
|
hasOrderLineItemDiscount,
|
|
16
16
|
getOrderLineItemOverridenPriceWithQuantity,
|
|
17
|
+
cartStore,
|
|
18
|
+
isOrderLineItemAutoCreated,
|
|
17
19
|
} from "@ikas/bp-storefront";
|
|
18
20
|
import { resolveAspectRatio, resolveObjectFit } from "../../utils/media";
|
|
19
21
|
import { cx } from "../../utils/cx";
|
|
@@ -25,6 +27,7 @@ interface CartItemProps {
|
|
|
25
27
|
variant?: "sidebar" | "page";
|
|
26
28
|
aspectRatio?: AspectRatio;
|
|
27
29
|
objectFit?: ObjectFit;
|
|
30
|
+
giftLabel?: string;
|
|
28
31
|
}
|
|
29
32
|
|
|
30
33
|
const CartItem = observer(function CartItem({
|
|
@@ -33,9 +36,25 @@ const CartItem = observer(function CartItem({
|
|
|
33
36
|
variant = "sidebar",
|
|
34
37
|
aspectRatio,
|
|
35
38
|
objectFit,
|
|
39
|
+
giftLabel = "Gift",
|
|
36
40
|
}: CartItemProps) {
|
|
37
41
|
const isPage = variant === "page";
|
|
38
42
|
|
|
43
|
+
// Lines a campaign added automatically (e.g. a "buy 1 get 1" gift) cannot be
|
|
44
|
+
// edited or removed on their own, so render them read-only with a badge.
|
|
45
|
+
const isAutoCreated =
|
|
46
|
+
!!cartStore.cart && isOrderLineItemAutoCreated(cartStore.cart, item);
|
|
47
|
+
const giftBadge = isAutoCreated ? (
|
|
48
|
+
<span className="kombos-cart-item__gift-badge text-xs-medium">
|
|
49
|
+
{giftLabel}
|
|
50
|
+
</span>
|
|
51
|
+
) : null;
|
|
52
|
+
const staticQuantity = (
|
|
53
|
+
<span className="kombos-cart-item__qty-static text-sm-medium">
|
|
54
|
+
×{item.quantity}
|
|
55
|
+
</span>
|
|
56
|
+
);
|
|
57
|
+
|
|
39
58
|
const mediaStyle: Record<string, string> = {
|
|
40
59
|
aspectRatio: resolveAspectRatio(aspectRatio),
|
|
41
60
|
objectFit: resolveObjectFit(objectFit),
|
|
@@ -103,6 +122,7 @@ const CartItem = observer(function CartItem({
|
|
|
103
122
|
<a href={href} className={nameClass}>
|
|
104
123
|
{item.variant?.name}
|
|
105
124
|
</a>
|
|
125
|
+
{giftBadge}
|
|
106
126
|
{variantValues.length > 0 && (
|
|
107
127
|
<p className="kombos-cart-item__variant-text text-sm-regular">
|
|
108
128
|
{variantValues
|
|
@@ -113,19 +133,22 @@ const CartItem = observer(function CartItem({
|
|
|
113
133
|
</p>
|
|
114
134
|
)}
|
|
115
135
|
</div>
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
136
|
+
{!isAutoCreated && (
|
|
137
|
+
<button
|
|
138
|
+
className="kombos-cart-item__remove"
|
|
139
|
+
onClick={() => onRemove(item)}
|
|
140
|
+
aria-label="Remove"
|
|
141
|
+
>
|
|
142
|
+
<TrashSVG />
|
|
143
|
+
</button>
|
|
144
|
+
)}
|
|
123
145
|
</div>
|
|
124
146
|
) : (
|
|
125
147
|
<>
|
|
126
148
|
<a href={href} className={nameClass}>
|
|
127
149
|
{item.variant?.name}
|
|
128
150
|
</a>
|
|
151
|
+
{giftBadge}
|
|
129
152
|
|
|
130
153
|
{variantValues.length > 0 && (
|
|
131
154
|
<div className="kombos-cart-item__variants">
|
|
@@ -151,11 +174,15 @@ const CartItem = observer(function CartItem({
|
|
|
151
174
|
|
|
152
175
|
{isPage ? (
|
|
153
176
|
<div className="kombos-cart-item__bottom">
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
177
|
+
{isAutoCreated ? (
|
|
178
|
+
staticQuantity
|
|
179
|
+
) : (
|
|
180
|
+
<QuantitySelector
|
|
181
|
+
size="sm"
|
|
182
|
+
value={item.quantity}
|
|
183
|
+
onChange={(qty) => changeItemQuantity(item, qty)}
|
|
184
|
+
/>
|
|
185
|
+
)}
|
|
159
186
|
<div className="kombos-cart-item__prices">
|
|
160
187
|
{hasDiscount && (
|
|
161
188
|
<span className="kombos-cart-item__original-price text-sm-regular-strike">
|
|
@@ -193,18 +220,24 @@ const CartItem = observer(function CartItem({
|
|
|
193
220
|
</div>
|
|
194
221
|
|
|
195
222
|
<div className="kombos-cart-item__actions">
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
223
|
+
{isAutoCreated ? (
|
|
224
|
+
staticQuantity
|
|
225
|
+
) : (
|
|
226
|
+
<>
|
|
227
|
+
<QuantitySelector
|
|
228
|
+
size="sm"
|
|
229
|
+
value={item.quantity}
|
|
230
|
+
onChange={(qty) => changeItemQuantity(item, qty)}
|
|
231
|
+
/>
|
|
232
|
+
<button
|
|
233
|
+
className="kombos-cart-item__remove"
|
|
234
|
+
onClick={() => onRemove(item)}
|
|
235
|
+
aria-label="Remove"
|
|
236
|
+
>
|
|
237
|
+
<TrashSVG />
|
|
238
|
+
</button>
|
|
239
|
+
</>
|
|
240
|
+
)}
|
|
208
241
|
</div>
|
|
209
242
|
</>
|
|
210
243
|
)}
|
|
@@ -168,3 +168,17 @@
|
|
|
168
168
|
flex-shrink: 0;
|
|
169
169
|
}
|
|
170
170
|
|
|
171
|
+
/* Auto-created (campaign gift) line: badge + read-only quantity */
|
|
172
|
+
.kombos-cart-item__gift-badge {
|
|
173
|
+
display: inline-flex;
|
|
174
|
+
align-self: flex-start;
|
|
175
|
+
padding: 0.125rem 0.5rem;
|
|
176
|
+
border-radius: 999px;
|
|
177
|
+
background: var(--kombos-gray-100);
|
|
178
|
+
color: var(--kombos-gray-500);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.kombos-cart-item__qty-static {
|
|
182
|
+
color: var(--kombos-gray-500);
|
|
183
|
+
}
|
|
184
|
+
|
|
@@ -5,20 +5,27 @@ interface Props {
|
|
|
5
5
|
value: number;
|
|
6
6
|
onChange: (value: number) => void;
|
|
7
7
|
size?: "default" | "sm";
|
|
8
|
+
min?: number;
|
|
9
|
+
max?: number;
|
|
8
10
|
}
|
|
9
11
|
|
|
10
12
|
export default function QuantitySelector({
|
|
11
13
|
value,
|
|
12
14
|
onChange,
|
|
13
15
|
size = "default",
|
|
16
|
+
min = 1,
|
|
17
|
+
max,
|
|
14
18
|
}: Props) {
|
|
19
|
+
const canDecrease = value > min;
|
|
20
|
+
const canIncrease = max == null || value < max;
|
|
21
|
+
|
|
15
22
|
return (
|
|
16
23
|
<div className={cx("kombos-pd__qty", size === "sm" && "kombos-pd__qty--sm")}>
|
|
17
24
|
<button
|
|
18
25
|
type="button"
|
|
19
26
|
className="kombos-pd__qty-btn"
|
|
20
|
-
onClick={() => onChange(Math.max(
|
|
21
|
-
disabled={
|
|
27
|
+
onClick={() => onChange(Math.max(min, value - 1))}
|
|
28
|
+
disabled={!canDecrease}
|
|
22
29
|
aria-label="Decrease quantity"
|
|
23
30
|
>
|
|
24
31
|
<MinusSVG />
|
|
@@ -31,7 +38,8 @@ export default function QuantitySelector({
|
|
|
31
38
|
<button
|
|
32
39
|
type="button"
|
|
33
40
|
className="kombos-pd__qty-btn"
|
|
34
|
-
onClick={() => onChange(value + 1)}
|
|
41
|
+
onClick={() => onChange(max == null ? value + 1 : Math.min(max, value + 1))}
|
|
42
|
+
disabled={!canIncrease}
|
|
35
43
|
aria-label="Increase quantity"
|
|
36
44
|
>
|
|
37
45
|
<PlusSVG />
|