@jumpgroup/jump-design-system 0.3.68 → 0.3.70
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/dist/cjs/{index-864e40de.js → index-230bcbae.js} +6 -2
- package/dist/cjs/index-230bcbae.js.map +1 -0
- package/dist/cjs/jump-accordion-group.cjs.entry.js +1 -1
- package/dist/cjs/jump-accordion.cjs.entry.js +1 -1
- package/dist/cjs/jump-badge.cjs.entry.js +1 -1
- package/dist/cjs/jump-button_2.cjs.entry.js +1 -1
- package/dist/cjs/jump-card-ecommerce-option.cjs.entry.js +1 -1
- package/dist/cjs/jump-card-ecommerce.cjs.entry.js +2 -2
- package/dist/cjs/jump-card-ecommerce.cjs.entry.js.map +1 -1
- package/dist/cjs/jump-card.cjs.entry.js +1 -1
- package/dist/cjs/jump-design-system.cjs.js +2 -2
- package/dist/cjs/jump-filter-checkbox.cjs.entry.js +1 -1
- package/dist/cjs/jump-filter-select.cjs.entry.js +70 -8
- package/dist/cjs/jump-filter-select.cjs.entry.js.map +1 -1
- package/dist/cjs/jump-filter-switch.cjs.entry.js +1 -1
- package/dist/cjs/jump-filter.cjs.entry.js +1 -1
- package/dist/cjs/jump-filtergroup.cjs.entry.js +1 -1
- package/dist/cjs/jump-navbar.cjs.entry.js +1 -1
- package/dist/cjs/jump-pagination-table.cjs.entry.js +1 -1
- package/dist/cjs/jump-pagination.cjs.entry.js +1 -1
- package/dist/cjs/jump-quantity.cjs.entry.js +1 -1
- package/dist/cjs/jump-search-bar-dropdown-item.cjs.entry.js +1 -1
- package/dist/cjs/jump-search-bar-mobile.cjs.entry.js +1 -1
- package/dist/cjs/jump-search-bar.cjs.entry.js +1 -1
- package/dist/cjs/jump-side-cart-example.cjs.entry.js +73 -0
- package/dist/cjs/jump-side-cart-example.cjs.entry.js.map +1 -0
- package/dist/cjs/jump-side-cart.cjs.entry.js +87 -0
- package/dist/cjs/jump-side-cart.cjs.entry.js.map +1 -0
- package/dist/cjs/jump-tab-item.cjs.entry.js +3 -3
- package/dist/cjs/jump-tab-panel.cjs.entry.js +2 -2
- package/dist/cjs/jump-tab.cjs.entry.js +2 -2
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/collection/collection-manifest.json +2 -0
- package/dist/collection/components/jump-card-ecommerce/jump-card-ecommerce.css +1 -0
- package/dist/collection/components/jump-card-ecommerce-option/jump-card-ecommerce-option.stories.js +1 -0
- package/dist/collection/components/jump-card-ecommerce-option/jump-card-ecommerce-option.stories.js.map +1 -1
- package/dist/collection/components/jump-filter-select/jump-filter-select.js +143 -8
- package/dist/collection/components/jump-filter-select/jump-filter-select.js.map +1 -1
- package/dist/collection/components/jump-side-cart/index.js +1 -0
- package/dist/collection/components/jump-side-cart/index.js.map +1 -0
- package/dist/collection/components/jump-side-cart/jump-side-cart.css +315 -0
- package/dist/collection/components/jump-side-cart/jump-side-cart.example.css +30 -0
- package/dist/collection/components/jump-side-cart/jump-side-cart.example.js +79 -0
- package/dist/collection/components/jump-side-cart/jump-side-cart.example.js.map +1 -0
- package/dist/collection/components/jump-side-cart/jump-side-cart.js +335 -0
- package/dist/collection/components/jump-side-cart/jump-side-cart.js.map +1 -0
- package/dist/collection/components/jump-side-cart/jump-side-cart.stories.js +134 -0
- package/dist/collection/components/jump-side-cart/jump-side-cart.stories.js.map +1 -0
- package/dist/collection/components/jump-tab/jump-tab.js +1 -1
- package/dist/collection/components/jump-tab-item/jump-tab-item.js +2 -2
- package/dist/collection/components/jump-tab-panel/jump-tab-panel.js +1 -1
- package/dist/components/jump-card-ecommerce.js +1 -1
- package/dist/components/jump-card-ecommerce.js.map +1 -1
- package/dist/components/jump-filter-select.js +73 -7
- package/dist/components/jump-filter-select.js.map +1 -1
- package/dist/components/jump-side-cart-example.d.ts +11 -0
- package/dist/components/jump-side-cart-example.js +97 -0
- package/dist/components/jump-side-cart-example.js.map +1 -0
- package/dist/components/jump-side-cart.d.ts +11 -0
- package/dist/components/jump-side-cart.js +8 -0
- package/dist/components/jump-side-cart.js.map +1 -0
- package/dist/components/jump-side-cart2.js +109 -0
- package/dist/components/jump-side-cart2.js.map +1 -0
- package/dist/components/jump-tab-item.js +2 -2
- package/dist/components/jump-tab-panel.js +1 -1
- package/dist/components/jump-tab.js +1 -1
- package/dist/esm/{index-7eb565cd.js → index-4363ffe4.js} +6 -2
- package/dist/esm/index-4363ffe4.js.map +1 -0
- package/dist/esm/jump-accordion-group.entry.js +1 -1
- package/dist/esm/jump-accordion.entry.js +1 -1
- package/dist/esm/jump-badge.entry.js +1 -1
- package/dist/esm/jump-button_2.entry.js +1 -1
- package/dist/esm/jump-card-ecommerce-option.entry.js +1 -1
- package/dist/esm/jump-card-ecommerce.entry.js +2 -2
- package/dist/esm/jump-card-ecommerce.entry.js.map +1 -1
- package/dist/esm/jump-card.entry.js +1 -1
- package/dist/esm/jump-design-system.js +3 -3
- package/dist/esm/jump-filter-checkbox.entry.js +1 -1
- package/dist/esm/jump-filter-select.entry.js +70 -8
- package/dist/esm/jump-filter-select.entry.js.map +1 -1
- package/dist/esm/jump-filter-switch.entry.js +1 -1
- package/dist/esm/jump-filter.entry.js +1 -1
- package/dist/esm/jump-filtergroup.entry.js +1 -1
- package/dist/esm/jump-navbar.entry.js +1 -1
- package/dist/esm/jump-pagination-table.entry.js +1 -1
- package/dist/esm/jump-pagination.entry.js +1 -1
- package/dist/esm/jump-quantity.entry.js +1 -1
- package/dist/esm/jump-search-bar-dropdown-item.entry.js +1 -1
- package/dist/esm/jump-search-bar-mobile.entry.js +1 -1
- package/dist/esm/jump-search-bar.entry.js +1 -1
- package/dist/esm/jump-side-cart-example.entry.js +69 -0
- package/dist/esm/jump-side-cart-example.entry.js.map +1 -0
- package/dist/esm/jump-side-cart.entry.js +83 -0
- package/dist/esm/jump-side-cart.entry.js.map +1 -0
- package/dist/esm/jump-tab-item.entry.js +3 -3
- package/dist/esm/jump-tab-panel.entry.js +2 -2
- package/dist/esm/jump-tab.entry.js +2 -2
- package/dist/esm/loader.js +3 -3
- package/dist/jump-design-system/jump-design-system.esm.js +1 -1
- package/dist/jump-design-system/jump-design-system.esm.js.map +1 -1
- package/dist/jump-design-system/p-0432b242.entry.js +2 -0
- package/dist/jump-design-system/p-0432b242.entry.js.map +1 -0
- package/dist/jump-design-system/{p-3b4127b0.entry.js → p-089b9c5c.entry.js} +2 -2
- package/dist/jump-design-system/p-0cc799f3.entry.js +2 -0
- package/dist/jump-design-system/p-0cdca5df.entry.js +2 -0
- package/dist/jump-design-system/{p-947d7f9a.entry.js → p-2e274d20.entry.js} +2 -2
- package/dist/jump-design-system/{p-d8bfd21c.entry.js → p-35f2032b.entry.js} +2 -2
- package/dist/jump-design-system/p-40ca24a6.js +3 -0
- package/dist/{esm/index-7eb565cd.js.map → jump-design-system/p-40ca24a6.js.map} +1 -1
- package/dist/jump-design-system/{p-ff8d70ab.entry.js → p-4706eba4.entry.js} +2 -2
- package/dist/jump-design-system/{p-79c78037.entry.js → p-617c7cd7.entry.js} +2 -2
- package/dist/jump-design-system/{p-201c09dd.entry.js → p-629ef0c7.entry.js} +2 -2
- package/dist/jump-design-system/{p-8d1d2af9.entry.js → p-66c79fb9.entry.js} +4 -4
- package/dist/jump-design-system/{p-98ef4924.entry.js → p-79e5dac6.entry.js} +2 -2
- package/dist/jump-design-system/{p-3c1076e0.entry.js → p-7a2bc23d.entry.js} +2 -2
- package/dist/jump-design-system/{p-d3b62e9b.entry.js → p-800fd60b.entry.js} +2 -2
- package/dist/jump-design-system/{p-94790673.entry.js → p-83b3a560.entry.js} +2 -2
- package/dist/jump-design-system/p-8f02eb5e.entry.js +2 -0
- package/dist/jump-design-system/p-8f02eb5e.entry.js.map +1 -0
- package/dist/jump-design-system/{p-90c51b48.entry.js → p-9035201c.entry.js} +2 -2
- package/dist/jump-design-system/{p-7dd5052b.entry.js → p-9279b124.entry.js} +2 -2
- package/dist/jump-design-system/{p-d94fabc1.entry.js → p-a0237406.entry.js} +2 -2
- package/dist/jump-design-system/{p-3e31b638.entry.js → p-a7d5e687.entry.js} +2 -2
- package/dist/jump-design-system/{p-8e0419b1.entry.js → p-b8b28d8b.entry.js} +2 -2
- package/dist/jump-design-system/p-cb9ab473.entry.js +2 -0
- package/dist/jump-design-system/{p-a05d9480.entry.js → p-e7b3ebb1.entry.js} +2 -2
- package/dist/jump-design-system/p-e7d1e3d8.entry.js +2 -0
- package/dist/jump-design-system/p-e7d1e3d8.entry.js.map +1 -0
- package/dist/jump-design-system/{p-469ccf77.entry.js → p-fa2a10bf.entry.js} +5 -5
- package/dist/jump-design-system/p-fa2a10bf.entry.js.map +1 -0
- package/dist/jump-design-system-elements.json +57 -0
- package/dist/types/components/jump-filter-select/jump-filter-select.d.ts +22 -0
- package/dist/types/components/jump-side-cart/index.d.ts +0 -0
- package/dist/types/components/jump-side-cart/jump-side-cart.d.ts +45 -0
- package/dist/types/components/jump-side-cart/jump-side-cart.example.d.ts +14 -0
- package/dist/types/components/jump-side-cart/jump-side-cart.stories.d.ts +43 -0
- package/dist/types/components.d.ts +93 -0
- package/package.json +1 -1
- package/dist/cjs/index-864e40de.js.map +0 -1
- package/dist/jump-design-system/p-0cbcc5b3.entry.js +0 -2
- package/dist/jump-design-system/p-39b82674.entry.js +0 -2
- package/dist/jump-design-system/p-469ccf77.entry.js.map +0 -1
- package/dist/jump-design-system/p-926c7bf0.entry.js +0 -2
- package/dist/jump-design-system/p-ad550de6.entry.js +0 -2
- package/dist/jump-design-system/p-ad550de6.entry.js.map +0 -1
- package/dist/jump-design-system/p-e516e812.js +0 -3
- package/dist/jump-design-system/p-e516e812.js.map +0 -1
- /package/dist/jump-design-system/{p-3b4127b0.entry.js.map → p-089b9c5c.entry.js.map} +0 -0
- /package/dist/jump-design-system/{p-0cbcc5b3.entry.js.map → p-0cc799f3.entry.js.map} +0 -0
- /package/dist/jump-design-system/{p-926c7bf0.entry.js.map → p-0cdca5df.entry.js.map} +0 -0
- /package/dist/jump-design-system/{p-947d7f9a.entry.js.map → p-2e274d20.entry.js.map} +0 -0
- /package/dist/jump-design-system/{p-d8bfd21c.entry.js.map → p-35f2032b.entry.js.map} +0 -0
- /package/dist/jump-design-system/{p-ff8d70ab.entry.js.map → p-4706eba4.entry.js.map} +0 -0
- /package/dist/jump-design-system/{p-79c78037.entry.js.map → p-617c7cd7.entry.js.map} +0 -0
- /package/dist/jump-design-system/{p-201c09dd.entry.js.map → p-629ef0c7.entry.js.map} +0 -0
- /package/dist/jump-design-system/{p-8d1d2af9.entry.js.map → p-66c79fb9.entry.js.map} +0 -0
- /package/dist/jump-design-system/{p-98ef4924.entry.js.map → p-79e5dac6.entry.js.map} +0 -0
- /package/dist/jump-design-system/{p-3c1076e0.entry.js.map → p-7a2bc23d.entry.js.map} +0 -0
- /package/dist/jump-design-system/{p-d3b62e9b.entry.js.map → p-800fd60b.entry.js.map} +0 -0
- /package/dist/jump-design-system/{p-94790673.entry.js.map → p-83b3a560.entry.js.map} +0 -0
- /package/dist/jump-design-system/{p-90c51b48.entry.js.map → p-9035201c.entry.js.map} +0 -0
- /package/dist/jump-design-system/{p-7dd5052b.entry.js.map → p-9279b124.entry.js.map} +0 -0
- /package/dist/jump-design-system/{p-d94fabc1.entry.js.map → p-a0237406.entry.js.map} +0 -0
- /package/dist/jump-design-system/{p-3e31b638.entry.js.map → p-a7d5e687.entry.js.map} +0 -0
- /package/dist/jump-design-system/{p-8e0419b1.entry.js.map → p-b8b28d8b.entry.js.map} +0 -0
- /package/dist/jump-design-system/{p-39b82674.entry.js.map → p-cb9ab473.entry.js.map} +0 -0
- /package/dist/jump-design-system/{p-a05d9480.entry.js.map → p-e7b3ebb1.entry.js.map} +0 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { h } from "@stencil/core";
|
|
2
|
+
export class JumpSideCartExample {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.handleUpdateQuantity = (event) => {
|
|
5
|
+
const { itemId, quantity } = event.detail;
|
|
6
|
+
this.cartItems = this.cartItems.map(item => item.id === itemId ? Object.assign(Object.assign({}, item), { quantity }) : item);
|
|
7
|
+
};
|
|
8
|
+
this.handleRemoveItem = (event) => {
|
|
9
|
+
const itemId = event.detail;
|
|
10
|
+
this.cartItems = this.cartItems.filter(item => item.id !== itemId);
|
|
11
|
+
};
|
|
12
|
+
this.handleCartClosed = () => {
|
|
13
|
+
this.isCartOpen = false;
|
|
14
|
+
};
|
|
15
|
+
this.handleCheckout = () => {
|
|
16
|
+
alert("Proceeding to checkout");
|
|
17
|
+
};
|
|
18
|
+
this.handleViewCart = () => {
|
|
19
|
+
alert("View cart clicked");
|
|
20
|
+
};
|
|
21
|
+
this.openCartFromRight = () => {
|
|
22
|
+
this.position = 'right';
|
|
23
|
+
this.isCartOpen = true;
|
|
24
|
+
};
|
|
25
|
+
this.openCartFromLeft = () => {
|
|
26
|
+
this.position = 'left';
|
|
27
|
+
this.isCartOpen = true;
|
|
28
|
+
};
|
|
29
|
+
this.isCartOpen = false;
|
|
30
|
+
this.position = 'right';
|
|
31
|
+
this.cartItems = [
|
|
32
|
+
{
|
|
33
|
+
id: "1",
|
|
34
|
+
name: "Prolife Grain Free Adult Sensitive Mini Manzo e Patate per Cani",
|
|
35
|
+
brand: "Prolife",
|
|
36
|
+
price: 15.00,
|
|
37
|
+
originalPrice: 30.00,
|
|
38
|
+
quantity: 1,
|
|
39
|
+
image: "/placeholder.svg?height=80&width=80",
|
|
40
|
+
description: "500 g"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
id: "2",
|
|
44
|
+
name: "Prolife Grain Free Adult Sensitive Mini Manzo e Patate per Cani",
|
|
45
|
+
brand: "Prolife",
|
|
46
|
+
price: 15.00,
|
|
47
|
+
quantity: 1,
|
|
48
|
+
image: "/placeholder.svg?height=80&width=80",
|
|
49
|
+
description: "500 g"
|
|
50
|
+
}
|
|
51
|
+
];
|
|
52
|
+
}
|
|
53
|
+
render() {
|
|
54
|
+
return (h("div", { key: '263ff4bc44226fca8d8e57c92097af18ddfe41db', class: "example-container" }, h("button", { key: '98787bd2f48f5ece860ac9b783a3ba06f479fd52', class: "example-button", onClick: this.openCartFromRight }, "Open Cart from Right"), h("button", { key: '355979d01f454baebd41f551ef9179c6ec2c8785', class: "example-button", onClick: this.openCartFromLeft }, "Open Cart from Left"), h("jump-side-cart", { key: '59a0cb733540119f856a6aad356862bfbb9e6f39', isOpen: this.isCartOpen, items: this.cartItems, position: this.position, discountThreshold: {
|
|
55
|
+
amount: 170,
|
|
56
|
+
percentage: 3
|
|
57
|
+
}, progressPercentage: 30, checkoutLabel: "Vai al Checkout", viewCartLabel: "Vedi carrello", onCartClosed: this.handleCartClosed, onItemQuantityChanged: this.handleUpdateQuantity, onItemRemoved: this.handleRemoveItem, onCheckoutClicked: this.handleCheckout, onViewCartClicked: this.handleViewCart })));
|
|
58
|
+
}
|
|
59
|
+
static get is() { return "jump-side-cart-example"; }
|
|
60
|
+
static get encapsulation() { return "shadow"; }
|
|
61
|
+
static get originalStyleUrls() {
|
|
62
|
+
return {
|
|
63
|
+
"$": ["jump-side-cart.example.scss"]
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
static get styleUrls() {
|
|
67
|
+
return {
|
|
68
|
+
"$": ["jump-side-cart.example.css"]
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
static get states() {
|
|
72
|
+
return {
|
|
73
|
+
"isCartOpen": {},
|
|
74
|
+
"position": {},
|
|
75
|
+
"cartItems": {}
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=jump-side-cart.example.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jump-side-cart.example.js","sourceRoot":"","sources":["../../../src/components/jump-side-cart/jump-side-cart.example.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, State, h } from '@stencil/core';\nimport type { CartItem } from './jump-side-cart';\n\n@Component({\n tag: 'jump-side-cart-example',\n styleUrl: 'jump-side-cart.example.scss',\n shadow: true,\n})\nexport class JumpSideCartExample {\n @State() isCartOpen: boolean = false;\n @State() position: 'left' | 'right' = 'right';\n @State() cartItems: CartItem[] = [\n {\n id: \"1\",\n name: \"Prolife Grain Free Adult Sensitive Mini Manzo e Patate per Cani\",\n brand: \"Prolife\",\n price: 15.00,\n originalPrice: 30.00,\n quantity: 1,\n image: \"/placeholder.svg?height=80&width=80\",\n description: \"500 g\"\n },\n {\n id: \"2\",\n name: \"Prolife Grain Free Adult Sensitive Mini Manzo e Patate per Cani\",\n brand: \"Prolife\",\n price: 15.00,\n quantity: 1,\n image: \"/placeholder.svg?height=80&width=80\",\n description: \"500 g\"\n }\n ];\n\n private handleUpdateQuantity = (event: CustomEvent<{itemId: string | number, quantity: number}>) => {\n const { itemId, quantity } = event.detail;\n this.cartItems = this.cartItems.map(item => \n item.id === itemId ? { ...item, quantity } : item\n );\n }\n\n private handleRemoveItem = (event: CustomEvent<string | number>) => {\n const itemId = event.detail;\n this.cartItems = this.cartItems.filter(item => item.id !== itemId);\n }\n\n private handleCartClosed = () => {\n this.isCartOpen = false;\n }\n\n private handleCheckout = () => {\n alert(\"Proceeding to checkout\");\n }\n\n private handleViewCart = () => {\n alert(\"View cart clicked\");\n }\n\n private openCartFromRight = () => {\n this.position = 'right';\n this.isCartOpen = true;\n }\n\n private openCartFromLeft = () => {\n this.position = 'left';\n this.isCartOpen = true;\n }\n\n render() {\n return (\n <div class=\"example-container\">\n <button \n class=\"example-button\"\n onClick={this.openCartFromRight}\n >\n Open Cart from Right\n </button>\n \n <button \n class=\"example-button\"\n onClick={this.openCartFromLeft}\n >\n Open Cart from Left\n </button>\n\n <jump-side-cart\n isOpen={this.isCartOpen}\n items={this.cartItems}\n position={this.position}\n discountThreshold={{\n amount: 170,\n percentage: 3\n }}\n progressPercentage={30}\n checkoutLabel=\"Vai al Checkout\"\n viewCartLabel=\"Vedi carrello\"\n onCartClosed={this.handleCartClosed}\n onItemQuantityChanged={this.handleUpdateQuantity}\n onItemRemoved={this.handleRemoveItem}\n onCheckoutClicked={this.handleCheckout}\n onViewCartClicked={this.handleViewCart}\n ></jump-side-cart>\n </div>\n );\n }\n}\n"]}
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
import { h } from "@stencil/core";
|
|
2
|
+
export class JumpSideCart {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.handleClose = () => {
|
|
5
|
+
this.cartClosed.emit();
|
|
6
|
+
};
|
|
7
|
+
this.handleQuantityChange = (itemId, newQuantity) => {
|
|
8
|
+
if (newQuantity < 1)
|
|
9
|
+
return;
|
|
10
|
+
this.cartItems = this.cartItems.map(item => item.id === itemId ? Object.assign(Object.assign({}, item), { quantity: newQuantity }) : item);
|
|
11
|
+
this.itemQuantityChanged.emit({ itemId, quantity: newQuantity });
|
|
12
|
+
};
|
|
13
|
+
this.handleRemoveItem = (itemId) => {
|
|
14
|
+
this.cartItems = this.cartItems.filter(item => item.id !== itemId);
|
|
15
|
+
this.itemRemoved.emit(itemId);
|
|
16
|
+
};
|
|
17
|
+
this.calculateSubtotal = () => {
|
|
18
|
+
return this.cartItems.reduce((total, item) => total + (item.price * item.quantity), 0);
|
|
19
|
+
};
|
|
20
|
+
this.calculateSavings = () => {
|
|
21
|
+
return this.cartItems.reduce((total, item) => {
|
|
22
|
+
if (item.originalPrice) {
|
|
23
|
+
return total + ((item.originalPrice - item.price) * item.quantity);
|
|
24
|
+
}
|
|
25
|
+
return total;
|
|
26
|
+
}, 0);
|
|
27
|
+
};
|
|
28
|
+
this.renderCartItem = (item) => {
|
|
29
|
+
return (h("div", { class: "cart-item", key: item.id }, h("div", { class: "cart-item__image" }, h("img", { src: item.image, alt: item.name })), h("div", { class: "cart-item__details" }, h("div", { class: "cart-item__brand" }, item.brand), h("div", { class: "cart-item__name" }, item.name), h("div", { class: "cart-item__description" }, item.description), h("div", { class: "cart-item__price" }, "\u20AC", item.price.toFixed(2), item.originalPrice && (h("span", { class: "cart-item__original-price" }, "\u20AC", item.originalPrice.toFixed(2))))), h("div", { class: "cart-item__controls" }, h("div", { class: "quantity-controls" }, h("button", { class: "quantity-btn", onClick: () => this.handleQuantityChange(item.id, item.quantity - 1), disabled: item.quantity <= 1 }, "-"), h("span", { class: "quantity" }, item.quantity), h("button", { class: "quantity-btn", onClick: () => this.handleQuantityChange(item.id, item.quantity + 1) }, "+")), h("button", { class: "remove-btn", onClick: () => this.handleRemoveItem(item.id) }, "Remove"))));
|
|
30
|
+
};
|
|
31
|
+
this.renderProgressBar = () => {
|
|
32
|
+
var _a, _b;
|
|
33
|
+
if (!this.discountThreshold && !this.freeShippingThreshold)
|
|
34
|
+
return null;
|
|
35
|
+
const threshold = ((_a = this.discountThreshold) === null || _a === void 0 ? void 0 : _a.amount) || this.freeShippingThreshold || 0;
|
|
36
|
+
const current = this.calculateSubtotal();
|
|
37
|
+
const percentage = Math.min((current / threshold) * 100, 100);
|
|
38
|
+
return (h("div", { class: "progress-section" }, h("div", { class: "progress-bar" }, h("div", { class: "progress-fill", style: { width: `${percentage}%` } })), h("div", { class: "progress-text" }, this.shippingInfo || (this.freeShippingThreshold ?
|
|
39
|
+
`€${Math.max(0, this.freeShippingThreshold - current).toFixed(2)} away from free shipping` :
|
|
40
|
+
`€${Math.max(0, threshold - current).toFixed(2)} away from ${(_b = this.discountThreshold) === null || _b === void 0 ? void 0 : _b.percentage}% discount`))));
|
|
41
|
+
};
|
|
42
|
+
this.isOpen = false;
|
|
43
|
+
this.position = 'right';
|
|
44
|
+
this.items = [];
|
|
45
|
+
this.discountThreshold = undefined;
|
|
46
|
+
this.freeShippingThreshold = undefined;
|
|
47
|
+
this.progressPercentage = 0;
|
|
48
|
+
this.checkoutLabel = 'Checkout';
|
|
49
|
+
this.viewCartLabel = 'View Cart';
|
|
50
|
+
this.shippingInfo = undefined;
|
|
51
|
+
this.cartItems = [];
|
|
52
|
+
}
|
|
53
|
+
componentWillLoad() {
|
|
54
|
+
this.cartItems = [...this.items];
|
|
55
|
+
}
|
|
56
|
+
componentWillUpdate() {
|
|
57
|
+
if (this.items !== this.cartItems) {
|
|
58
|
+
this.cartItems = [...this.items];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
render() {
|
|
62
|
+
if (!this.isOpen)
|
|
63
|
+
return null;
|
|
64
|
+
const subtotal = this.calculateSubtotal();
|
|
65
|
+
const savings = this.calculateSavings();
|
|
66
|
+
return (h("div", { class: `side-cart side-cart--${this.position} ${this.isOpen ? 'side-cart--open' : ''}` }, h("div", { class: "side-cart__overlay", onClick: this.handleClose }), h("div", { class: "side-cart__content" }, h("div", { class: "side-cart__header" }, h("h2", null, "Shopping Cart (", this.cartItems.length, ")"), h("button", { class: "close-btn", onClick: this.handleClose }, "\u00D7")), h("div", { class: "side-cart__body" }, this.cartItems.length === 0 ? (h("div", { class: "empty-cart" }, h("p", null, "Your cart is empty"))) : (h("div", { class: "cart-items" }, this.cartItems.map(item => this.renderCartItem(item)))), this.renderProgressBar()), this.cartItems.length > 0 && (h("div", { class: "side-cart__footer" }, h("div", { class: "totals" }, h("div", { class: "subtotal" }, h("span", null, "Subtotal:"), h("span", null, "\u20AC", subtotal.toFixed(2))), savings > 0 && (h("div", { class: "savings" }, h("span", null, "You save:"), h("span", null, "\u20AC", savings.toFixed(2))))), h("div", { class: "actions" }, h("button", { class: "btn btn--secondary", onClick: () => this.viewCartClicked.emit() }, this.viewCartLabel), h("button", { class: "btn btn--primary", onClick: () => this.checkoutClicked.emit() }, this.checkoutLabel)))))));
|
|
67
|
+
}
|
|
68
|
+
static get is() { return "jump-side-cart"; }
|
|
69
|
+
static get encapsulation() { return "shadow"; }
|
|
70
|
+
static get originalStyleUrls() {
|
|
71
|
+
return {
|
|
72
|
+
"$": ["jump-side-cart.scss"]
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
static get styleUrls() {
|
|
76
|
+
return {
|
|
77
|
+
"$": ["jump-side-cart.css"]
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
static get properties() {
|
|
81
|
+
return {
|
|
82
|
+
"isOpen": {
|
|
83
|
+
"type": "boolean",
|
|
84
|
+
"mutable": false,
|
|
85
|
+
"complexType": {
|
|
86
|
+
"original": "boolean",
|
|
87
|
+
"resolved": "boolean",
|
|
88
|
+
"references": {}
|
|
89
|
+
},
|
|
90
|
+
"required": false,
|
|
91
|
+
"optional": false,
|
|
92
|
+
"docs": {
|
|
93
|
+
"tags": [],
|
|
94
|
+
"text": ""
|
|
95
|
+
},
|
|
96
|
+
"attribute": "is-open",
|
|
97
|
+
"reflect": false,
|
|
98
|
+
"defaultValue": "false"
|
|
99
|
+
},
|
|
100
|
+
"position": {
|
|
101
|
+
"type": "string",
|
|
102
|
+
"mutable": false,
|
|
103
|
+
"complexType": {
|
|
104
|
+
"original": "'left' | 'right'",
|
|
105
|
+
"resolved": "\"left\" | \"right\"",
|
|
106
|
+
"references": {}
|
|
107
|
+
},
|
|
108
|
+
"required": false,
|
|
109
|
+
"optional": false,
|
|
110
|
+
"docs": {
|
|
111
|
+
"tags": [],
|
|
112
|
+
"text": ""
|
|
113
|
+
},
|
|
114
|
+
"attribute": "position",
|
|
115
|
+
"reflect": false,
|
|
116
|
+
"defaultValue": "'right'"
|
|
117
|
+
},
|
|
118
|
+
"items": {
|
|
119
|
+
"type": "unknown",
|
|
120
|
+
"mutable": false,
|
|
121
|
+
"complexType": {
|
|
122
|
+
"original": "CartItem[]",
|
|
123
|
+
"resolved": "CartItem[]",
|
|
124
|
+
"references": {
|
|
125
|
+
"CartItem": {
|
|
126
|
+
"location": "local",
|
|
127
|
+
"path": "/home/runner/work/jump-design-system/jump-design-system/src/components/jump-side-cart/jump-side-cart.tsx",
|
|
128
|
+
"id": "src/components/jump-side-cart/jump-side-cart.tsx::CartItem"
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
"required": false,
|
|
133
|
+
"optional": false,
|
|
134
|
+
"docs": {
|
|
135
|
+
"tags": [],
|
|
136
|
+
"text": ""
|
|
137
|
+
},
|
|
138
|
+
"defaultValue": "[]"
|
|
139
|
+
},
|
|
140
|
+
"discountThreshold": {
|
|
141
|
+
"type": "unknown",
|
|
142
|
+
"mutable": false,
|
|
143
|
+
"complexType": {
|
|
144
|
+
"original": "DiscountThreshold",
|
|
145
|
+
"resolved": "DiscountThreshold",
|
|
146
|
+
"references": {
|
|
147
|
+
"DiscountThreshold": {
|
|
148
|
+
"location": "local",
|
|
149
|
+
"path": "/home/runner/work/jump-design-system/jump-design-system/src/components/jump-side-cart/jump-side-cart.tsx",
|
|
150
|
+
"id": "src/components/jump-side-cart/jump-side-cart.tsx::DiscountThreshold"
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
"required": false,
|
|
155
|
+
"optional": true,
|
|
156
|
+
"docs": {
|
|
157
|
+
"tags": [],
|
|
158
|
+
"text": ""
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
"freeShippingThreshold": {
|
|
162
|
+
"type": "number",
|
|
163
|
+
"mutable": false,
|
|
164
|
+
"complexType": {
|
|
165
|
+
"original": "number",
|
|
166
|
+
"resolved": "number",
|
|
167
|
+
"references": {}
|
|
168
|
+
},
|
|
169
|
+
"required": false,
|
|
170
|
+
"optional": true,
|
|
171
|
+
"docs": {
|
|
172
|
+
"tags": [],
|
|
173
|
+
"text": ""
|
|
174
|
+
},
|
|
175
|
+
"attribute": "free-shipping-threshold",
|
|
176
|
+
"reflect": false
|
|
177
|
+
},
|
|
178
|
+
"progressPercentage": {
|
|
179
|
+
"type": "number",
|
|
180
|
+
"mutable": false,
|
|
181
|
+
"complexType": {
|
|
182
|
+
"original": "number",
|
|
183
|
+
"resolved": "number",
|
|
184
|
+
"references": {}
|
|
185
|
+
},
|
|
186
|
+
"required": false,
|
|
187
|
+
"optional": false,
|
|
188
|
+
"docs": {
|
|
189
|
+
"tags": [],
|
|
190
|
+
"text": ""
|
|
191
|
+
},
|
|
192
|
+
"attribute": "progress-percentage",
|
|
193
|
+
"reflect": false,
|
|
194
|
+
"defaultValue": "0"
|
|
195
|
+
},
|
|
196
|
+
"checkoutLabel": {
|
|
197
|
+
"type": "string",
|
|
198
|
+
"mutable": false,
|
|
199
|
+
"complexType": {
|
|
200
|
+
"original": "string",
|
|
201
|
+
"resolved": "string",
|
|
202
|
+
"references": {}
|
|
203
|
+
},
|
|
204
|
+
"required": false,
|
|
205
|
+
"optional": false,
|
|
206
|
+
"docs": {
|
|
207
|
+
"tags": [],
|
|
208
|
+
"text": ""
|
|
209
|
+
},
|
|
210
|
+
"attribute": "checkout-label",
|
|
211
|
+
"reflect": false,
|
|
212
|
+
"defaultValue": "'Checkout'"
|
|
213
|
+
},
|
|
214
|
+
"viewCartLabel": {
|
|
215
|
+
"type": "string",
|
|
216
|
+
"mutable": false,
|
|
217
|
+
"complexType": {
|
|
218
|
+
"original": "string",
|
|
219
|
+
"resolved": "string",
|
|
220
|
+
"references": {}
|
|
221
|
+
},
|
|
222
|
+
"required": false,
|
|
223
|
+
"optional": false,
|
|
224
|
+
"docs": {
|
|
225
|
+
"tags": [],
|
|
226
|
+
"text": ""
|
|
227
|
+
},
|
|
228
|
+
"attribute": "view-cart-label",
|
|
229
|
+
"reflect": false,
|
|
230
|
+
"defaultValue": "'View Cart'"
|
|
231
|
+
},
|
|
232
|
+
"shippingInfo": {
|
|
233
|
+
"type": "string",
|
|
234
|
+
"mutable": false,
|
|
235
|
+
"complexType": {
|
|
236
|
+
"original": "string",
|
|
237
|
+
"resolved": "string",
|
|
238
|
+
"references": {}
|
|
239
|
+
},
|
|
240
|
+
"required": false,
|
|
241
|
+
"optional": true,
|
|
242
|
+
"docs": {
|
|
243
|
+
"tags": [],
|
|
244
|
+
"text": ""
|
|
245
|
+
},
|
|
246
|
+
"attribute": "shipping-info",
|
|
247
|
+
"reflect": false
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
static get states() {
|
|
252
|
+
return {
|
|
253
|
+
"cartItems": {}
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
static get events() {
|
|
257
|
+
return [{
|
|
258
|
+
"method": "cartClosed",
|
|
259
|
+
"name": "cartClosed",
|
|
260
|
+
"bubbles": true,
|
|
261
|
+
"cancelable": true,
|
|
262
|
+
"composed": true,
|
|
263
|
+
"docs": {
|
|
264
|
+
"tags": [],
|
|
265
|
+
"text": ""
|
|
266
|
+
},
|
|
267
|
+
"complexType": {
|
|
268
|
+
"original": "void",
|
|
269
|
+
"resolved": "void",
|
|
270
|
+
"references": {}
|
|
271
|
+
}
|
|
272
|
+
}, {
|
|
273
|
+
"method": "itemQuantityChanged",
|
|
274
|
+
"name": "itemQuantityChanged",
|
|
275
|
+
"bubbles": true,
|
|
276
|
+
"cancelable": true,
|
|
277
|
+
"composed": true,
|
|
278
|
+
"docs": {
|
|
279
|
+
"tags": [],
|
|
280
|
+
"text": ""
|
|
281
|
+
},
|
|
282
|
+
"complexType": {
|
|
283
|
+
"original": "{itemId: string | number, quantity: number}",
|
|
284
|
+
"resolved": "{ itemId: string | number; quantity: number; }",
|
|
285
|
+
"references": {}
|
|
286
|
+
}
|
|
287
|
+
}, {
|
|
288
|
+
"method": "itemRemoved",
|
|
289
|
+
"name": "itemRemoved",
|
|
290
|
+
"bubbles": true,
|
|
291
|
+
"cancelable": true,
|
|
292
|
+
"composed": true,
|
|
293
|
+
"docs": {
|
|
294
|
+
"tags": [],
|
|
295
|
+
"text": ""
|
|
296
|
+
},
|
|
297
|
+
"complexType": {
|
|
298
|
+
"original": "string | number",
|
|
299
|
+
"resolved": "number | string",
|
|
300
|
+
"references": {}
|
|
301
|
+
}
|
|
302
|
+
}, {
|
|
303
|
+
"method": "checkoutClicked",
|
|
304
|
+
"name": "checkoutClicked",
|
|
305
|
+
"bubbles": true,
|
|
306
|
+
"cancelable": true,
|
|
307
|
+
"composed": true,
|
|
308
|
+
"docs": {
|
|
309
|
+
"tags": [],
|
|
310
|
+
"text": ""
|
|
311
|
+
},
|
|
312
|
+
"complexType": {
|
|
313
|
+
"original": "void",
|
|
314
|
+
"resolved": "void",
|
|
315
|
+
"references": {}
|
|
316
|
+
}
|
|
317
|
+
}, {
|
|
318
|
+
"method": "viewCartClicked",
|
|
319
|
+
"name": "viewCartClicked",
|
|
320
|
+
"bubbles": true,
|
|
321
|
+
"cancelable": true,
|
|
322
|
+
"composed": true,
|
|
323
|
+
"docs": {
|
|
324
|
+
"tags": [],
|
|
325
|
+
"text": ""
|
|
326
|
+
},
|
|
327
|
+
"complexType": {
|
|
328
|
+
"original": "void",
|
|
329
|
+
"resolved": "void",
|
|
330
|
+
"references": {}
|
|
331
|
+
}
|
|
332
|
+
}];
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
//# sourceMappingURL=jump-side-cart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jump-side-cart.js","sourceRoot":"","sources":["../../../src/components/jump-side-cart/jump-side-cart.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Prop, State, h, Event, EventEmitter } from '@stencil/core';\n\nexport interface CartItem {\n id: string | number;\n name: string;\n brand: string;\n price: number;\n originalPrice?: number;\n quantity: number;\n image: string;\n description: string;\n}\n\nexport interface DiscountThreshold {\n amount: number;\n percentage: number;\n}\n\n@Component({\n tag: 'jump-side-cart',\n styleUrl: 'jump-side-cart.scss',\n shadow: true,\n})\nexport class JumpSideCart {\n @Prop() isOpen: boolean = false;\n @Prop() position: 'left' | 'right' = 'right';\n @Prop() items: CartItem[] = [];\n @Prop() discountThreshold?: DiscountThreshold;\n @Prop() freeShippingThreshold?: number;\n @Prop() progressPercentage: number = 0;\n @Prop() checkoutLabel: string = 'Checkout';\n @Prop() viewCartLabel: string = 'View Cart';\n @Prop() shippingInfo?: string;\n\n @State() cartItems: CartItem[] = [];\n\n @Event() cartClosed: EventEmitter<void>;\n @Event() itemQuantityChanged: EventEmitter<{itemId: string | number, quantity: number}>;\n @Event() itemRemoved: EventEmitter<string | number>;\n @Event() checkoutClicked: EventEmitter<void>;\n @Event() viewCartClicked: EventEmitter<void>;\n\n componentWillLoad() {\n this.cartItems = [...this.items];\n }\n\n componentWillUpdate() {\n if (this.items !== this.cartItems) {\n this.cartItems = [...this.items];\n }\n }\n\n private handleClose = () => {\n this.cartClosed.emit();\n }\n\n private handleQuantityChange = (itemId: string | number, newQuantity: number) => {\n if (newQuantity < 1) return;\n \n this.cartItems = this.cartItems.map(item => \n item.id === itemId ? { ...item, quantity: newQuantity } : item\n );\n \n this.itemQuantityChanged.emit({ itemId, quantity: newQuantity });\n }\n\n private handleRemoveItem = (itemId: string | number) => {\n this.cartItems = this.cartItems.filter(item => item.id !== itemId);\n this.itemRemoved.emit(itemId);\n }\n\n private calculateSubtotal = (): number => {\n return this.cartItems.reduce((total, item) => total + (item.price * item.quantity), 0);\n }\n\n private calculateSavings = (): number => {\n return this.cartItems.reduce((total, item) => {\n if (item.originalPrice) {\n return total + ((item.originalPrice - item.price) * item.quantity);\n }\n return total;\n }, 0);\n }\n\n private renderCartItem = (item: CartItem) => {\n return (\n <div class=\"cart-item\" key={item.id}>\n <div class=\"cart-item__image\">\n <img src={item.image} alt={item.name} />\n </div>\n <div class=\"cart-item__details\">\n <div class=\"cart-item__brand\">{item.brand}</div>\n <div class=\"cart-item__name\">{item.name}</div>\n <div class=\"cart-item__description\">{item.description}</div>\n <div class=\"cart-item__price\">\n €{item.price.toFixed(2)}\n {item.originalPrice && (\n <span class=\"cart-item__original-price\">€{item.originalPrice.toFixed(2)}</span>\n )}\n </div>\n </div>\n <div class=\"cart-item__controls\">\n <div class=\"quantity-controls\">\n <button \n class=\"quantity-btn\"\n onClick={() => this.handleQuantityChange(item.id, item.quantity - 1)}\n disabled={item.quantity <= 1}\n >\n -\n </button>\n <span class=\"quantity\">{item.quantity}</span>\n <button \n class=\"quantity-btn\"\n onClick={() => this.handleQuantityChange(item.id, item.quantity + 1)}\n >\n +\n </button>\n </div>\n <button \n class=\"remove-btn\"\n onClick={() => this.handleRemoveItem(item.id)}\n >\n Remove\n </button>\n </div>\n </div>\n );\n }\n\n private renderProgressBar = () => {\n if (!this.discountThreshold && !this.freeShippingThreshold) return null;\n\n const threshold = this.discountThreshold?.amount || this.freeShippingThreshold || 0;\n const current = this.calculateSubtotal();\n const percentage = Math.min((current / threshold) * 100, 100);\n\n return (\n <div class=\"progress-section\">\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" style={{ width: `${percentage}%` }}></div>\n </div>\n <div class=\"progress-text\">\n {this.shippingInfo || (\n this.freeShippingThreshold ? \n `€${Math.max(0, this.freeShippingThreshold - current).toFixed(2)} away from free shipping` :\n `€${Math.max(0, threshold - current).toFixed(2)} away from ${this.discountThreshold?.percentage}% discount`\n )}\n </div>\n </div>\n );\n }\n\n render() {\n if (!this.isOpen) return null;\n\n const subtotal = this.calculateSubtotal();\n const savings = this.calculateSavings();\n\n return (\n <div class={`side-cart side-cart--${this.position} ${this.isOpen ? 'side-cart--open' : ''}`}>\n <div class=\"side-cart__overlay\" onClick={this.handleClose}></div>\n \n <div class=\"side-cart__content\">\n <div class=\"side-cart__header\">\n <h2>Shopping Cart ({this.cartItems.length})</h2>\n <button class=\"close-btn\" onClick={this.handleClose}>×</button>\n </div>\n\n <div class=\"side-cart__body\">\n {this.cartItems.length === 0 ? (\n <div class=\"empty-cart\">\n <p>Your cart is empty</p>\n </div>\n ) : (\n <div class=\"cart-items\">\n {this.cartItems.map(item => this.renderCartItem(item))}\n </div>\n )}\n\n {this.renderProgressBar()}\n </div>\n\n {this.cartItems.length > 0 && (\n <div class=\"side-cart__footer\">\n <div class=\"totals\">\n <div class=\"subtotal\">\n <span>Subtotal:</span>\n <span>€{subtotal.toFixed(2)}</span>\n </div>\n {savings > 0 && (\n <div class=\"savings\">\n <span>You save:</span>\n <span>€{savings.toFixed(2)}</span>\n </div>\n )}\n </div>\n \n <div class=\"actions\">\n <button \n class=\"btn btn--secondary\"\n onClick={() => this.viewCartClicked.emit()}\n >\n {this.viewCartLabel}\n </button>\n <button \n class=\"btn btn--primary\"\n onClick={() => this.checkoutClicked.emit()}\n >\n {this.checkoutLabel}\n </button>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n }\n}\n"]}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
const meta = {
|
|
2
|
+
title: "Components/JumpSideCart",
|
|
3
|
+
tags: ["autodocs"],
|
|
4
|
+
parameters: {
|
|
5
|
+
layout: "fullscreen",
|
|
6
|
+
},
|
|
7
|
+
};
|
|
8
|
+
export default meta;
|
|
9
|
+
// Template for the cart
|
|
10
|
+
const CartTemplate = (args) => {
|
|
11
|
+
const container = document.createElement('div');
|
|
12
|
+
container.innerHTML = `
|
|
13
|
+
<div class="storybook-container">
|
|
14
|
+
<button class="storybook-button" id="open-cart-btn">Open Cart</button>
|
|
15
|
+
<jump-side-cart id="side-cart"></jump-side-cart>
|
|
16
|
+
</div>
|
|
17
|
+
<style>
|
|
18
|
+
.storybook-container {
|
|
19
|
+
padding: 2rem;
|
|
20
|
+
min-height: 100vh;
|
|
21
|
+
background: #f5f5f5;
|
|
22
|
+
display: flex;
|
|
23
|
+
align-items: center;
|
|
24
|
+
justify-content: center;
|
|
25
|
+
}
|
|
26
|
+
.storybook-button {
|
|
27
|
+
padding: 0.75rem 1.5rem;
|
|
28
|
+
background-color: #80bb55;
|
|
29
|
+
color: white;
|
|
30
|
+
border: none;
|
|
31
|
+
border-radius: 6px;
|
|
32
|
+
cursor: pointer;
|
|
33
|
+
font-weight: 500;
|
|
34
|
+
transition: background-color 0.2s ease;
|
|
35
|
+
}
|
|
36
|
+
.storybook-button:hover {
|
|
37
|
+
background-color: #68a03b;
|
|
38
|
+
}
|
|
39
|
+
</style>
|
|
40
|
+
`;
|
|
41
|
+
// Mock cart items
|
|
42
|
+
const mockItems = [
|
|
43
|
+
{
|
|
44
|
+
id: "1",
|
|
45
|
+
name: "Prolife Grain Free Adult Sensitive Mini Manzo e Patate per Cani",
|
|
46
|
+
brand: "Prolife",
|
|
47
|
+
price: 15.00,
|
|
48
|
+
originalPrice: 30.00,
|
|
49
|
+
quantity: 1,
|
|
50
|
+
image: "/placeholder.svg?height=80&width=80",
|
|
51
|
+
description: "500 g"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
id: "2",
|
|
55
|
+
name: "Prolife Grain Free Adult Sensitive Mini Manzo e Patate per Cani",
|
|
56
|
+
brand: "Prolife",
|
|
57
|
+
price: 15.00,
|
|
58
|
+
quantity: 1,
|
|
59
|
+
image: "/placeholder.svg?height=80&width=80",
|
|
60
|
+
description: "500 g"
|
|
61
|
+
}
|
|
62
|
+
];
|
|
63
|
+
// Set up the cart component
|
|
64
|
+
const sideCart = container.querySelector('#side-cart');
|
|
65
|
+
const button = container.querySelector('#open-cart-btn');
|
|
66
|
+
if (sideCart && button) {
|
|
67
|
+
// Apply args to the component
|
|
68
|
+
Object.keys(args).forEach(key => {
|
|
69
|
+
if (key === 'items') {
|
|
70
|
+
sideCart[key] = mockItems;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
sideCart[key] = args[key];
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
// Handle button click
|
|
77
|
+
button.addEventListener('click', () => {
|
|
78
|
+
sideCart['isOpen'] = true;
|
|
79
|
+
});
|
|
80
|
+
// Handle cart events
|
|
81
|
+
sideCart.addEventListener('cartClosed', () => {
|
|
82
|
+
sideCart['isOpen'] = false;
|
|
83
|
+
});
|
|
84
|
+
sideCart.addEventListener('checkoutClicked', () => {
|
|
85
|
+
alert('Proceeding to checkout');
|
|
86
|
+
});
|
|
87
|
+
sideCart.addEventListener('viewCartClicked', () => {
|
|
88
|
+
alert('View cart clicked');
|
|
89
|
+
});
|
|
90
|
+
sideCart.addEventListener('itemQuantityChanged', (event) => {
|
|
91
|
+
console.log('Quantity changed:', event['detail']);
|
|
92
|
+
});
|
|
93
|
+
sideCart.addEventListener('itemRemoved', (event) => {
|
|
94
|
+
console.log('Item removed:', event['detail']);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
return container;
|
|
98
|
+
};
|
|
99
|
+
export const RightSide = {
|
|
100
|
+
render: CartTemplate,
|
|
101
|
+
args: {
|
|
102
|
+
position: "right",
|
|
103
|
+
discountThreshold: {
|
|
104
|
+
amount: 170,
|
|
105
|
+
percentage: 3
|
|
106
|
+
},
|
|
107
|
+
progressPercentage: 30,
|
|
108
|
+
checkoutLabel: "Vai al Checkout",
|
|
109
|
+
viewCartLabel: "Vedi carrello"
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
export const LeftSide = {
|
|
113
|
+
render: CartTemplate,
|
|
114
|
+
args: {
|
|
115
|
+
position: "left",
|
|
116
|
+
discountThreshold: {
|
|
117
|
+
amount: 170,
|
|
118
|
+
percentage: 3
|
|
119
|
+
},
|
|
120
|
+
progressPercentage: 30,
|
|
121
|
+
checkoutLabel: "Vai al Checkout",
|
|
122
|
+
viewCartLabel: "Vedi carrello"
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
export const WithFreeShipping = {
|
|
126
|
+
render: CartTemplate,
|
|
127
|
+
args: {
|
|
128
|
+
position: "right",
|
|
129
|
+
freeShippingThreshold: 50,
|
|
130
|
+
progressPercentage: 100,
|
|
131
|
+
shippingInfo: "Spedizione gratuita!"
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
//# sourceMappingURL=jump-side-cart.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jump-side-cart.stories.js","sourceRoot":"","sources":["../../../src/components/jump-side-cart/jump-side-cart.stories.ts"],"names":[],"mappings":"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","sourcesContent":["const meta = {\n title: \"Components/JumpSideCart\",\n tags: [\"autodocs\"],\n parameters: {\n layout: \"fullscreen\",\n },\n};\n\nexport default meta;\n\n// Template for the cart\nconst CartTemplate = (args) => {\n const container = document.createElement('div');\n container.innerHTML = `\n <div class=\"storybook-container\">\n <button class=\"storybook-button\" id=\"open-cart-btn\">Open Cart</button>\n <jump-side-cart id=\"side-cart\"></jump-side-cart>\n </div>\n <style>\n .storybook-container {\n padding: 2rem;\n min-height: 100vh;\n background: #f5f5f5;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .storybook-button {\n padding: 0.75rem 1.5rem;\n background-color: #80bb55;\n color: white;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n font-weight: 500;\n transition: background-color 0.2s ease;\n }\n .storybook-button:hover {\n background-color: #68a03b;\n }\n </style>\n `;\n\n // Mock cart items\n const mockItems = [\n {\n id: \"1\",\n name: \"Prolife Grain Free Adult Sensitive Mini Manzo e Patate per Cani\",\n brand: \"Prolife\",\n price: 15.00,\n originalPrice: 30.00,\n quantity: 1,\n image: \"/placeholder.svg?height=80&width=80\",\n description: \"500 g\"\n },\n {\n id: \"2\",\n name: \"Prolife Grain Free Adult Sensitive Mini Manzo e Patate per Cani\",\n brand: \"Prolife\",\n price: 15.00,\n quantity: 1,\n image: \"/placeholder.svg?height=80&width=80\",\n description: \"500 g\"\n }\n ];\n\n // Set up the cart component\n const sideCart = container.querySelector('#side-cart');\n const button = container.querySelector('#open-cart-btn');\n \n if (sideCart && button) {\n // Apply args to the component\n Object.keys(args).forEach(key => {\n if (key === 'items') {\n sideCart[key] = mockItems;\n } else {\n sideCart[key] = args[key];\n }\n });\n\n // Handle button click\n button.addEventListener('click', () => {\n sideCart['isOpen'] = true;\n });\n\n // Handle cart events\n sideCart.addEventListener('cartClosed', () => {\n sideCart['isOpen'] = false;\n });\n\n sideCart.addEventListener('checkoutClicked', () => {\n alert('Proceeding to checkout');\n });\n\n sideCart.addEventListener('viewCartClicked', () => {\n alert('View cart clicked');\n });\n\n sideCart.addEventListener('itemQuantityChanged', (event) => {\n console.log('Quantity changed:', event['detail']);\n });\n\n sideCart.addEventListener('itemRemoved', (event) => {\n console.log('Item removed:', event['detail']);\n });\n }\n\n return container;\n};\n\nexport const RightSide = {\n render: CartTemplate,\n args: {\n position: \"right\",\n discountThreshold: {\n amount: 170,\n percentage: 3\n },\n progressPercentage: 30,\n checkoutLabel: \"Vai al Checkout\",\n viewCartLabel: \"Vedi carrello\"\n }\n};\n\nexport const LeftSide = {\n render: CartTemplate,\n args: {\n position: \"left\",\n discountThreshold: {\n amount: 170,\n percentage: 3\n },\n progressPercentage: 30,\n checkoutLabel: \"Vai al Checkout\",\n viewCartLabel: \"Vedi carrello\"\n }\n};\n\nexport const WithFreeShipping = {\n render: CartTemplate,\n args: {\n position: \"right\",\n freeShippingThreshold: 50,\n progressPercentage: 100,\n shippingInfo: \"Spedizione gratuita!\"\n }\n};\n"]}
|
|
@@ -66,7 +66,7 @@ export class JumpTab {
|
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
render() {
|
|
69
|
-
return (h(Host, { key: '
|
|
69
|
+
return (h(Host, { key: 'eb67c13009a3d5bb2ea7275c02a0cf4936496244', class: "JumpTab " + this.variant, id: this.tabGroupName, ref: (el) => { this.JumpTabEl = el; } }, h("div", { key: '2be879c8dc231a42c69457353855d52ef438339d', class: "Wrapper " + (this.fullBorder ? 'fullBorder' : '') }, h("div", { key: '7dcbffc75c62e3dd64ecf47f50f0b308c4882a04', class: "ContentWrapper ContentWrapper--Items", style: { '--alignment': this.getAlignment(this.alignment) } }, h("div", { key: '17c437c456684b5fcac81e5df964ac316c8b7371', class: "Content " + this.variant + " " + (this.disabled ? 'disabled' : '') + " " + (this.fullBorder ? 'fullBorder' : ''), style: { '--alignment': this.getAlignment(this.alignment) } }, h("slot", { key: '14b413cc2687aa73e848bb0bdccb2b9121d46fc3', name: "tab-item" }))), h("div", { key: 'fd9ed0cddc9fec9779b5a76e5a378bdd7f153c08', class: "ContentWrapper ContentWrapper--Panel" }, h("slot", { key: '0bd78d8369b8402f5e8d1182b82d0110209c57c2', name: "tab-content" })))));
|
|
70
70
|
}
|
|
71
71
|
getAlignment(alignment) {
|
|
72
72
|
switch (alignment) {
|
|
@@ -18,8 +18,8 @@ export class JumpTabItem {
|
|
|
18
18
|
this.variant = parentVariant;
|
|
19
19
|
}
|
|
20
20
|
render() {
|
|
21
|
-
return (h(Host, { key: '
|
|
22
|
-
h("jump-icon", { key: '
|
|
21
|
+
return (h(Host, { key: 'a4c96d6aa528be6ef7585117065610a4ab259477', ref: (el) => { this.tabEl = el; }, class: "JumpTabItem " + (this.active ? 'active' : '') + " " + (this.variant) + " " + (this.disabled ? 'disabled' : '') }, h("div", { key: '938011134a1e7b8b779529c98c82287e6074d544', class: "Content " + (this.iconName ? this.iconPosition : '') + " " + (this.variant) + " " + (this.active ? 'active' : '') + " " + (this.disabled ? 'disabled' : ''), onClick: () => this.changeTab(this.identifier), id: this.identifier }, (this.iconName && (this.variant == 'inline' || this.variant == 'boxed')) &&
|
|
22
|
+
h("jump-icon", { key: 'fc52b89c2dfe2e00928bf7df8231a1efed0934f5', library: "fa", category: "regular", name: this.iconName, size: "small" }), h("span", { key: '505a8245b25b7ea1f9c63221f344aba04ab438e1', class: "label" }, this.label))));
|
|
23
23
|
}
|
|
24
24
|
static get is() { return "jump-tab-item"; }
|
|
25
25
|
static get encapsulation() { return "shadow"; }
|
|
@@ -5,7 +5,7 @@ export class JumpTabPanel {
|
|
|
5
5
|
this.active = false;
|
|
6
6
|
}
|
|
7
7
|
render() {
|
|
8
|
-
return (h(Host, { key: '
|
|
8
|
+
return (h(Host, { key: 'd9f90af98ebb99d55241c3fef49e5d8e08f8540f', class: "JumpTabPanel", id: this.identifier }, h("div", { key: '6fc79b82988a87e0c3e13b08dcd08305e173eaab', class: "JumpTabPanel__Content " + (this.active ? 'active' : '') }, h("slot", { key: 'ac3bfea8a132096ae27e9fbd146e090626c72ff5' }))));
|
|
9
9
|
}
|
|
10
10
|
static get is() { return "jump-tab-panel"; }
|
|
11
11
|
static get encapsulation() { return "shadow"; }
|