@jumpgroup/jump-design-system 0.3.24 → 0.3.26

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 (35) hide show
  1. package/dist/cjs/jump-card-ecommerce.cjs.entry.js +10 -13
  2. package/dist/cjs/jump-card-ecommerce.cjs.entry.js.map +1 -1
  3. package/dist/cjs/jump-design-system.cjs.js +1 -1
  4. package/dist/cjs/jump-filtergroup.cjs.entry.js +25 -15
  5. package/dist/cjs/jump-filtergroup.cjs.entry.js.map +1 -1
  6. package/dist/cjs/loader.cjs.js +1 -1
  7. package/dist/collection/components/jump-card-ecommerce/jump-card-ecommerce.js +10 -13
  8. package/dist/collection/components/jump-card-ecommerce/jump-card-ecommerce.js.map +1 -1
  9. package/dist/collection/components/jump-card-ecommerce-option/jump-card-ecommerce-option.stories.js +4 -0
  10. package/dist/collection/components/jump-card-ecommerce-option/jump-card-ecommerce-option.stories.js.map +1 -1
  11. package/dist/collection/components/jump-filtergroup/jump-filtergroup.css +23 -11
  12. package/dist/collection/components/jump-filtergroup/jump-filtergroup.js +28 -14
  13. package/dist/collection/components/jump-filtergroup/jump-filtergroup.js.map +1 -1
  14. package/dist/components/jump-card-ecommerce.js +10 -13
  15. package/dist/components/jump-card-ecommerce.js.map +1 -1
  16. package/dist/components/jump-filtergroup.js +28 -15
  17. package/dist/components/jump-filtergroup.js.map +1 -1
  18. package/dist/esm/jump-card-ecommerce.entry.js +10 -13
  19. package/dist/esm/jump-card-ecommerce.entry.js.map +1 -1
  20. package/dist/esm/jump-design-system.js +1 -1
  21. package/dist/esm/jump-filtergroup.entry.js +25 -15
  22. package/dist/esm/jump-filtergroup.entry.js.map +1 -1
  23. package/dist/esm/loader.js +1 -1
  24. package/dist/jump-design-system/jump-design-system.esm.js +1 -1
  25. package/dist/jump-design-system/jump-design-system.esm.js.map +1 -1
  26. package/dist/jump-design-system/p-273ff8ec.entry.js +2 -0
  27. package/dist/jump-design-system/p-273ff8ec.entry.js.map +1 -0
  28. package/dist/jump-design-system/{p-a6cb7a7f.entry.js → p-52754e07.entry.js} +2 -2
  29. package/dist/jump-design-system/p-52754e07.entry.js.map +1 -0
  30. package/dist/types/components/jump-card-ecommerce/jump-card-ecommerce.d.ts +1 -4
  31. package/dist/types/components/jump-filtergroup/jump-filtergroup.d.ts +3 -1
  32. package/package.json +1 -1
  33. package/dist/jump-design-system/p-a6cb7a7f.entry.js.map +0 -1
  34. package/dist/jump-design-system/p-fa75b346.entry.js +0 -2
  35. package/dist/jump-design-system/p-fa75b346.entry.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"names":["jumpCardEcommerceCss","JumpCardEcommerceStyle0","JumpCardEcommerce","addOption","e","props","detail","this","variations","Object","assign","onVariationSelected","currentValue","variationSelectEl","value","variation","find","code","selectedVariation","variationSelected","emit","componentWillLoad","componentDidLoad","jumpQuantityEl","querySelector","addEventListener","onQuantityChange","bind","quantity","getValue","then","formatPrices","disconnectedCallback","removeEventListener","_a","onToggleFavorite","favorite","toggleFavorite","productId","addProductToCart","addedToCart","length","payload","productAddToCart","setTimeout","waitingList","addToWaitingList","productWaitingList","locale","document","documentElement","lang","toUpperCase","priceFormatted","price","toLocaleString","minimumFractionDigits","maximumFractionDigits","salePriceFormatted","salePrice","render","backgroundClass","hasBackground","isMini","iconOnlyClass","onlyIconButton","justifyClass","outOfStock","hasImageOnHover","hoverImg","miniCard","calculateDiscount","discount","toFixed","h","Host","badge","class","variant","dimension","label","hasFavorite","favoriteHref","href","onClick","size","text","onlyIcon","slot","name","category","hasSlotForFavorite","link","img","videoSrc","src","alt","imgAlt","hoverImgAlt","autoplay","type","notificationUrl","notificationText","pill","productName","subtitle","currency","ref","el","onChange","filter","imgUrl","map","outOfStockText","waitingListText","addToCartText"],"sources":["src/components/jump-card-ecommerce/jump-card-ecommerce.scss?tag=jump-card-ecommerce&encapsulation=shadow","src/components/jump-card-ecommerce/jump-card-ecommerce.tsx"],"sourcesContent":[":host {\n --card-max-width: 450px;\n --jump-card-max-width-horizontal: 100%;\n --jump-card-color: var(--neutral-grey-primary);\n --jump-card-background: transparent;\n --jump-card-border-color: var(--neutral-grey-background);\n --jump-card-padding: 0.5rem;\n\n max-width: var(--card-max-width);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n position: relative;\n width: 100%;\n font-family: var(--ff-primary, 'Arial'), sans-serif;\n line-height: var(--lh-400, 1.3);\n background-color: var(--jump-card-background);\n color: var(--jump-card-color);\n\n .Footer,\n .Body {\n display: flex;\n width: 100%;\n }\n\n jump-badge {\n position: absolute;\n top: 1rem;\n left: 1rem;\n z-index: 2;\n\n &.hasBackground.iconOnly {\n top: calc(1rem + 8px);\n left: calc(1rem + 8px);\n }\n }\n\n .Favorite {\n position: absolute;\n top: 1rem;\n right: 1rem;\n z-index: 2;\n\n &.hasBackground.iconOnly {\n top: calc(1rem + 8px);\n right: calc(1rem + 8px);\n }\n }\n\n .Media {\n // aspect-ratio: 3/4;\n overflow: hidden;\n position: relative;\n border-radius: 3px;\n aspect-ratio: 1/1;\n\n .Images {\n height: 100%;\n margin: 0;\n position: relative;\n\n img {\n height: 100%;\n width: 100%;\n object-fit: cover;\n position: absolute;\n top: 0;\n left: 0;\n overflow: hidden;\n }\n\n &__Front {\n z-index: 1;\n transition: opacity 0.5s linear;\n cursor: pointer;\n }\n\n &.has-hover-image {\n &:hover .Images__Front {\n opacity: 0;\n }\n }\n }\n\n &.hasBackground {\n background-color: var(--neutral-white);\n\n &.iconOnly {\n border-top-left-radius: 6px;\n border-top-right-radius: 6px;\n padding: var(--jump-card-padding) var(--jump-card-padding) 0;\n\n img {\n border-radius: 6px;\n }\n }\n }\n\n &.iconOnly {\n border-bottom-right-radius: 0;\n }\n\n &.is-mini {\n max-width: 180px;\n }\n }\n\n .NotificationCart {\n display: none;\n position: absolute;\n bottom: 0px;\n width: 100%;\n padding: 2rem 1rem;\n background-color: hsl(0 0% 0% / 35%);\n box-sizing: border-box;\n z-index: 2;\n transform: translate3d(0, 0, 0);\n\n &.is-active {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n }\n\n .Content {\n &.hasBackground {\n background-color: var(--neutral-white);\n padding: calc(var(--jump-card-padding) * 2);\n }\n\n &.iconOnly {\n padding: calc(var(--jump-card-padding) * 2) var(--jump-card-padding);\n }\n\n &.is-mini {\n max-width: 180px;\n }\n }\n\n .Body {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n padding: var(--jump-card-padding) 0;\n\n & > * {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n\n & > * {\n flex: 0 1 auto;\n }\n }\n\n &.hasBackground {\n padding: 0 0 var(--jump-card-padding);\n }\n\n &.iconOnly {\n padding: 0;\n }\n\n &.is-mini {\n & > * {\n flex-direction: column;\n }\n\n padding: calc(var(--jump-card-padding) / 2) 0;\n }\n }\n\n .Product {\n font-size: var(--fs-400);\n }\n\n .Subtitle {\n font-size: var(--fs-300);\n color: var(--neutral-grey-secondary);\n line-height: 1.2;\n }\n\n .Footer {\n line-height: var(--lh-400);\n justify-content: end;\n padding: var(--jump-card-padding) 0;\n align-items: flex-end;\n\n &.justify-between {\n justify-content: space-between;\n }\n\n &.hasBackground {\n padding-bottom: 0;\n }\n\n &.iconOnly {\n padding: 0;\n }\n\n &.is-mini {\n padding: calc(var(--jump-card-padding) / 2) 0;\n }\n }\n\n .OutOfStock {\n justify-items: start;\n font-size: var(--fs-300);\n font-weight: var(--fw-900);\n color: var(--status-danger-standard);\n }\n\n .OnlyIconButton {\n position: absolute;\n bottom: 0;\n right: 0;\n background: var(--neutral-white);\n border-top-left-radius: 20px;\n padding: 8px 8px 0px 8px;\n z-index: 2;\n }\n\n .Price {\n position: relative;\n display: grid;\n grid-template-columns: auto auto;\n grid-template-rows: 1.5rem 1.5rem auto;\n justify-items: end;\n align-items: end;\n column-gap: 0.5rem;\n\n font-size: var(--fs-500);\n font-weight: var(--fw-900);\n line-height: var(--lh-400);\n\n & > * {\n display: inline-flex;\n }\n\n &__Regular {\n text-align: right;\n\n &.sale {\n text-decoration: line-through;\n color: var(--neutral-grey-secondary);\n font-weight: var(--fw-400);\n font-size: var(--fs-400);\n grid-column: 2;\n grid-row: 1;\n }\n }\n\n &__Sale {\n grid-column: 2;\n grid-row: 2;\n }\n\n &__Discount {\n color: var(--status-danger-standard);\n font-weight: var(--fw-400);\n font-size: var(--fs-300);\n grid-column: 1;\n grid-row: 1;\n }\n\n &.is-mini {\n display: flex;\n font-size: var(--fs-400);\n }\n }\n\n .SelectVariations {\n select {\n appearance: none;\n background-color: transparent;\n border: 1px solid var(--neutral-grey-secondary);\n border-radius: 3px;\n color: var(--neutral-grey-secondary);\n font-size: var(--fs-300);\n padding: 0.5rem 0.75rem;\n max-width: 100%;\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236B7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E\");\n background-position: right 0.5rem center;\n background-repeat: no-repeat;\n background-size: 1.5em 1.5em;\n padding-right: 2.5rem;\n -webkit-print-color-adjust: exact;\n }\n }\n}\n\n.slide-in-bottom {\n animation: slide-in-bottom 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;\n}\n\n.slide-out-bottom {\n animation: slide-out-bottom 0.5s cubic-bezier(0.55, 0.085, 0.68, 0.53) both;\n}\n\n.fade-in-out {\n animation-name: fade-in-out;\n animation-duration: 6s;\n animation-timing-function: ease-in-out;\n}\n\n@keyframes fade-in-out {\n from {\n opacity: 0;\n transform: translateY(100px);\n }\n\n 50% {\n opacity: 1;\n transform: translateY(0);\n }\n\n to {\n opacity: 0;\n transform: translateY(100px);\n }\n}\n","import { Component, Host, h, Prop, Event, EventEmitter, Element, State, Listen} from '@stencil/core';\n\ninterface Variation {\n code: string;\n imgUrl: string;\n label: string;\n taxonomy: string;\n // Add more keys as needed\n}\n\n@Component({\n tag: 'jump-card-ecommerce',\n styleUrl: 'jump-card-ecommerce.scss',\n shadow: true,\n})\nexport class JumpCardEcommerce {\n\n @Element() JumpCardEcommerce: HTMLElement;\n jumpQuantityEl;\n\n /* ---------------------- @PROPERTIES ------------------------- */\n\n /** Indicate if card has only icon button*/\n @Prop() onlyIconButton: boolean = false;\n\n /** Indicate if card has background*/\n @Prop() hasBackground: boolean = false;\n\n /** Indicates the badge of the card*/\n @Prop() badge: string;\n\n /** Indicates if the product is favorite */\n\n @Prop({mutable:true, reflect: true}) favorite: boolean = false;\n\n /** Indicate if the whislist is active in shop*/\n @Prop() hasFavorite: boolean = false;\n\n /** Indicate if the whislist will be slotted*/\n @Prop() hasSlotForFavorite: boolean = false;\n\n /** Indicates if the favorite button is render as an anchor, and define the url*/\n @Prop() favoriteHref: string;\n\n /** Indicates the link of the card*/\n @Prop() link: string;\n\n /** Indicates the image's src of the card*/\n @Prop() img: string ;\n\n /** Indicates the img's alt of the card*/\n @Prop() imgAlt: string;\n\n /** Indicates the over image's src of the card*/\n @Prop() hoverImg: string ;\n\n /** Indicates the hover img's alt of the card*/\n @Prop() hoverImgAlt: string;\n\n /** Indicates the videoSrc of the card*/\n @Prop() videoSrc: string;\n\n /** Indicates the notificationUrl of the card*/\n @Prop() notificationUrl: string;\n\n /** Indicates the notificationText of the card*/\n @Prop() notificationText: string = '';\n\n /** Indicates the title of the card*/\n @Prop() productName: string ;\n\n /** Indicates the subtitle of the card*/\n @Prop() subtitle: string;\n\n /** Indicates the ID of the product, can be also a SKU*/\n @Prop() productId: string ;\n\n /** Indicates the price of the card */\n @Prop() price: number;\n\n /** Indicates the sale price of the card */\n @Prop() salePrice: number;\n\n /** Indicates the currency of the card */\n @Prop() currency: string = '€';\n\n /** Indicates if the product is outOfStock */\n @Prop({mutable:true, reflect: true}) outOfStock: boolean = false;\n\n /** Indicates the outOfStockText of the product*/\n @Prop() outOfStockText: string;\n\n /** Indicates the button class of the add to cart / notification button */\n @Prop() addToCartText: string ;\n\n /** Indicates the button class of the add to cart / notification button */\n @Prop() waitingListText: string ;\n\n /** Indicate if the user request to be notified when te product is avaible*/\n @Prop() addToWaitingList: boolean = false;\n\n /** Indicate if the card is Mini Card*/\n @Prop() isMini: boolean = false;\n\n /* ---------------------- @STATE ------------------------- */\n\n /** Indicate if the product is added to cart --> non deve esserci nelle storie! */\n @Prop() addedToCart: boolean = false;\n\n @Prop() endAddedToCart: boolean = false;\n\n @State() variations: Variation[] = [];\n\n @State() selectedVariation: Variation;\n\n @State() priceFormatted: string;\n\n @State() salePriceFormatted: string;\n\n // è una proprietà che viene cambiata solo da dentro\n quantity: number;\n\n variationSelectEl: HTMLSelectElement;\n\n /* ---------------------- @EVENTS ------------------------- */\n\n @Event({eventName: 'jump-toggle-favorite'}) toggleFavorite: EventEmitter;\n\n @Event({eventName: 'jump-add-to-cart'}) productAddToCart: EventEmitter;\n\n @Event({eventName: 'jump-add-to-waiting-list'}) productWaitingList: EventEmitter;\n\n @Event({ eventName: 'jump-variation-selected' }) variationSelected: EventEmitter; // verificare se corretto: aggiungo un evento\n\n @Listen(\"jump-card-ecommerce-option-connected\")\n addOption(e) {\n let props = e.detail; // es {code: 'sku1', imageUrl: 'https://google.com/'}\n this.variations = [...this.variations, { ...props }];\n }\n\n onVariationSelected() {\n let currentValue = this.variationSelectEl.value;\n let variation = this.variations.find(\n (variation) => variation.code == currentValue,\n );\n this.selectedVariation = variation;\n this.variationSelected.emit(variation); // verificare se corretto: emetto l'evento\n }\n\n\n /* ---------------------- @LIFECYCLE ------------------------- */\n\n componentWillLoad() {}\n\n componentDidLoad() {\n this.jumpQuantityEl = this.JumpCardEcommerce.querySelector('jump-quantity');\n\n if(this.jumpQuantityEl){\n this.jumpQuantityEl.addEventListener('jump-change', this.onQuantityChange.bind(this));\n this.quantity = this.jumpQuantityEl.getValue().then((quantity) => {\n this.quantity = quantity;\n });\n }\n\n this.formatPrices();\n }\n\n disconnectedCallback() {\n this.jumpQuantityEl = this.JumpCardEcommerce.querySelector('jump-quantity');\n if(this.jumpQuantityEl){\n this.jumpQuantityEl.removeEventListener('jump-change',this.onQuantityChange);\n }\n }\n\n /* ---------------------- @METHODS ------------------------- */\n onQuantityChange(e) {\n this.quantity = e.detail.value ?? false;\n }\n\n onToggleFavorite() {\n this.favorite = !this.favorite;\n this.toggleFavorite.emit(\n {\n productId: this.productId,\n favorite: this.favorite\n }\n );\n }\n\n addProductToCart() {\n this.addedToCart = true;\n let variations = this.selectedVariation;\n if(!variations && this.variations.length > 0) {\n variations = this.variations[0];\n }\n\n const payload = {\n productId: this.productId,\n addedToCart: this.addedToCart,\n quantity: this.quantity ?? null,\n variation: variations ?? null\n };\n this.productAddToCart.emit(payload);\n\n setTimeout(() => {\n this.addedToCart = false;\n }, 6000);\n }\n\n waitingList() {\n this.addToWaitingList = true;\n this.productWaitingList.emit(\n {\n productId: this.productId,\n addToWaitingList: this.addToWaitingList\n }\n )\n }\n\n formatPrices() {\n let locale = document.documentElement.lang ?? 'it-IT';\n if(locale.length == 2) {\n locale = `${locale}-${locale.toUpperCase()}`;\n }\n\n // Format price with 2 decimal digits and in locale\n this.priceFormatted = this.price.toLocaleString(locale, {minimumFractionDigits: 2, maximumFractionDigits: 2});\n this.salePriceFormatted = this.salePrice.toLocaleString(locale, {minimumFractionDigits: 2, maximumFractionDigits: 2});\n }\n\n render() {\n const backgroundClass = this.hasBackground && !this.isMini ? 'hasBackground' : '';\n const iconOnlyClass = this.onlyIconButton && !this.isMini ? 'iconOnly' : '';\n const justifyClass = this.outOfStock ? 'justify-between' : '';\n const hasImageOnHover = this.hoverImg ? 'has-hover-image' : '';\n const miniCard = this.isMini ? 'is-mini' : '';\n\n function calculateDiscount(price: number, salePrice: number): string {\n const discount = ((price - salePrice) / price) * 100;\n return discount.toFixed(0);\n };\n\n return (\n <Host>\n { !this.isMini && this.badge ? <jump-badge class={`${backgroundClass} ${iconOnlyClass}`} variant=\"secondary\" dimension=\"small\" label={this.badge}></jump-badge> : ''}\n\n { !this.isMini && this.hasFavorite ?\n this.favoriteHref != '' ?\n <jump-button href={this.favoriteHref} onClick={ () => this.onToggleFavorite() } class={`Favorite ${backgroundClass} ${iconOnlyClass}`} variant={this.favorite ? 'primary' : 'neutral'} size=\"small\" text onlyIcon>\n <jump-icon slot=\"prefix\" name=\"heart\" category={this.favorite ? 'solid' : 'light'} size=\"medium\"></jump-icon>\n </jump-button>\n :\n <jump-button onClick={ () => this.onToggleFavorite() } class={`Favorite ${backgroundClass} ${iconOnlyClass}`} variant={this.favorite ? 'primary' : 'neutral'} size=\"small\" text onlyIcon>\n <jump-icon slot=\"prefix\" name=\"heart\" category={this.favorite ? 'solid' : 'light'} size=\"medium\"></jump-icon>\n </jump-button>\n :\n this.hasSlotForFavorite ? <div class=\"Favorite\"><slot name=\"favorite\"></slot> </div> : null\n }\n\n <div class={`Media ${iconOnlyClass} ${backgroundClass} ${miniCard}`}>\n <a href={this.link}>\n <figure class={`Images ${hasImageOnHover} `}>\n {this.img && !this.videoSrc ? <img class=\"Images__Front\" src={this.img} alt={this.imgAlt}></img> : ''}\n {this.hoverImg && !this.videoSrc ? <img class=\"Images__OnHover\" src={this.hoverImg} alt={this.hoverImgAlt}></img> : ''}\n </figure>\n {this.videoSrc && !this.img ?\n <video autoplay>\n <source src={this.videoSrc} type=\"video/mp4\"/>\n <source src={this.videoSrc} type=\"video/mov\"/>\n <source src={this.videoSrc} type=\"video/webm\"/>\n </video> : ''}\n </a>\n { !this.isMini ?\n <div class={`NotificationCart ${this.addedToCart == true ? 'is-active fade-in-out' : ''}`}>\n <jump-button href={this.notificationUrl} variant=\"white\" text>\n <jump-icon slot=\"prefix\" name=\"check\"></jump-icon>\n <span> {this.notificationText} </span>\n </jump-button>\n </div>\n : null}\n { !this.isMini && this.onlyIconButton ?\n <div class=\"OnlyIconButton\">\n <jump-button variant=\"secondary\" size=\"large\" pill onlyIcon onClick={() => this.addProductToCart()}>\n <jump-icon slot=\"prefix\" name='cart-shopping' category=\"regular\"></jump-icon>\n </jump-button>\n </div>\n : ''\n }\n </div>\n\n <div class={`Content ${backgroundClass} ${iconOnlyClass} ${miniCard}`}>\n <div class={`Body ${backgroundClass} ${iconOnlyClass} ${miniCard}`}>\n <div>\n <div class=\"Info\">\n <div class=\"Product\">{this.productName}</div>\n { !this.isMini && this.subtitle ? <div class=\"Subtitle\">{this.subtitle}</div> : null}\n </div>\n\n {this.price ?\n <div class={`Price ${miniCard}`}>\n {!this.isMini && this.salePrice && this.salePrice < this.price ?\n <div class=\"Price__Discount\"> {calculateDiscount(this.price, this.salePrice)}% </div>\n : null}\n\n {!this.isMini ?\n <div class={`Price__Regular ${this.salePrice && this.salePrice < this.price ? 'sale' : ''}`}>\n {this.currency}{this.priceFormatted}\n </div>\n :\n <div class={`Price__Regular`}>\n {this.currency}{ this.salePrice && this.salePrice < this.price ? this.salePriceFormatted : this.priceFormatted}\n </div>\n }\n\n {!this.isMini && this.salePrice && this.salePrice < this.price ?\n <div class=\"Price__Sale\">{this.currency}{this.salePriceFormatted}</div>\n : null}\n </div>\n : null}\n </div>\n\n {!this.isMini ?\n <div class=\"SelectVariations\">\n {this.variations.length != 0 ?\n <select\n ref={(el) => (this.variationSelectEl = el)} //salvo questo elemento in this.variationSelectEl\n onChange={() => {\n this.onVariationSelected();\n }}\n >\n {this.variations\n .filter((variation) => !variation.imgUrl)\n .map((variation) => (\n <option value={variation.code}>{variation.label}</option>\n ))}\n </select>\n : null }\n </div>\n : null}\n\n {!this.isMini ? <slot name=\"quantity\"></slot> : null}\n </div>\n\n <div class={`Footer ${justifyClass} ${backgroundClass} ${iconOnlyClass} ${miniCard}`}>\n\n {this.outOfStock ? <div class=\"OutOfStock\">{this.outOfStockText ? this.outOfStockText : 'Esaurito'}</div> : ''}\n\n { this.outOfStock ?\n <jump-button variant=\"secondary\" size=\"small\" text onClick={() => this.waitingList()}>\n <jump-icon slot=\"prefix\" name={!this.outOfStock ? 'cart-shopping' : 'bell'} category=\"regular\" size=\"small\"></jump-icon>\n {this.waitingListText ? this.waitingListText : 'Notifica disponibilità'}\n </jump-button> : ''\n }\n\n { !this.outOfStock && !this.onlyIconButton ?\n <jump-button variant=\"secondary\" size=\"small\" text onClick={() => this.addProductToCart()}>\n <jump-icon slot=\"prefix\" name={!this.outOfStock ? 'cart-shopping' : 'bell'} category=\"regular\" size=\"small\"></jump-icon>\n {this.addToCartText ? this.addToCartText : 'Aggiungi al carrello'}\n </jump-button> : ''\n }\n\n </div>\n\n </div>\n </Host>\n );\n }\n\n}\n"],"mappings":"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"}
@@ -79,15 +79,12 @@ export declare class JumpCardEcommerce {
79
79
  onVariationSelected(): void;
80
80
  componentWillLoad(): void;
81
81
  componentDidLoad(): void;
82
- /**
83
- * Format prices in locale currency
84
- */
85
- formatPrices(): void;
86
82
  disconnectedCallback(): void;
87
83
  onQuantityChange(e: any): void;
88
84
  onToggleFavorite(): void;
89
85
  addProductToCart(): void;
90
86
  waitingList(): void;
87
+ formatPrices(): void;
91
88
  render(): any;
92
89
  }
93
90
  export {};
@@ -5,6 +5,7 @@ export declare class JumpFiltergroup {
5
5
  lessLabel: string;
6
6
  maxElements: number;
7
7
  variant: 'accordion' | 'default';
8
+ label: string;
8
9
  values: string[];
9
10
  value: string;
10
11
  slotItems: any;
@@ -13,11 +14,12 @@ export declare class JumpFiltergroup {
13
14
  change: any;
14
15
  slotItemsWrapper: HTMLSlotElement;
15
16
  showMoreBtn: HTMLElement;
17
+ watchShowMore(newValue: boolean): void;
16
18
  getValues(): Promise<string[]>;
17
19
  getActiveAmount(): Promise<number>;
18
20
  getInputs(): Promise<any>;
19
21
  getName(): Promise<string>;
20
- toggleHiddenItems(showAll?: boolean): void;
22
+ toggleHiddenItems(): void;
21
23
  handleShowMore(): void;
22
24
  handleChange(event: Event): void;
23
25
  handleCheckboxChange(event: CustomEvent): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jumpgroup/jump-design-system",
3
- "version": "0.3.24",
3
+ "version": "0.3.26",
4
4
  "description": "Stencil Component Starter",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.js",
@@ -1 +0,0 @@
1
- {"version":3,"names":["jumpCardEcommerceCss","JumpCardEcommerceStyle0","JumpCardEcommerce","addOption","e","props","detail","this","variations","Object","assign","onVariationSelected","currentValue","variationSelectEl","value","variation","find","code","selectedVariation","variationSelected","emit","componentWillLoad","componentDidLoad","jumpQuantityEl","querySelector","addEventListener","onQuantityChange","bind","quantity","getValue","then","formatPrices","locale","_a","document","documentElement","lang","length","toUpperCase","priceFormatted","price","toLocaleString","minimumFractionDigits","maximumFractionDigits","salePriceFormatted","salePrice","disconnectedCallback","removeEventListener","onToggleFavorite","favorite","toggleFavorite","productId","addProductToCart","addedToCart","payload","productAddToCart","setTimeout","waitingList","addToWaitingList","productWaitingList","render","backgroundClass","hasBackground","isMini","iconOnlyClass","onlyIconButton","justifyClass","outOfStock","hasImageOnHover","hoverImg","miniCard","calculateDiscount","discount","toFixed","h","Host","badge","class","variant","dimension","label","hasFavorite","favoriteHref","href","onClick","size","text","onlyIcon","slot","name","category","hasSlotForFavorite","link","img","videoSrc","src","alt","imgAlt","hoverImgAlt","autoplay","type","notificationUrl","notificationText","pill","productName","subtitle","currency","ref","el","onChange","filter","imgUrl","map","outOfStockText","waitingListText","addToCartText"],"sources":["src/components/jump-card-ecommerce/jump-card-ecommerce.scss?tag=jump-card-ecommerce&encapsulation=shadow","src/components/jump-card-ecommerce/jump-card-ecommerce.tsx"],"sourcesContent":[":host {\n --card-max-width: 450px;\n --jump-card-max-width-horizontal: 100%;\n --jump-card-color: var(--neutral-grey-primary);\n --jump-card-background: transparent;\n --jump-card-border-color: var(--neutral-grey-background);\n --jump-card-padding: 0.5rem;\n\n max-width: var(--card-max-width);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n position: relative;\n width: 100%;\n font-family: var(--ff-primary, 'Arial'), sans-serif;\n line-height: var(--lh-400, 1.3);\n background-color: var(--jump-card-background);\n color: var(--jump-card-color);\n\n .Footer,\n .Body {\n display: flex;\n width: 100%;\n }\n\n jump-badge {\n position: absolute;\n top: 1rem;\n left: 1rem;\n z-index: 2;\n\n &.hasBackground.iconOnly {\n top: calc(1rem + 8px);\n left: calc(1rem + 8px);\n }\n }\n\n .Favorite {\n position: absolute;\n top: 1rem;\n right: 1rem;\n z-index: 2;\n\n &.hasBackground.iconOnly {\n top: calc(1rem + 8px);\n right: calc(1rem + 8px);\n }\n }\n\n .Media {\n // aspect-ratio: 3/4;\n overflow: hidden;\n position: relative;\n border-radius: 3px;\n aspect-ratio: 1/1;\n\n .Images {\n height: 100%;\n margin: 0;\n position: relative;\n\n img {\n height: 100%;\n width: 100%;\n object-fit: cover;\n position: absolute;\n top: 0;\n left: 0;\n overflow: hidden;\n }\n\n &__Front {\n z-index: 1;\n transition: opacity 0.5s linear;\n cursor: pointer;\n }\n\n &.has-hover-image {\n &:hover .Images__Front {\n opacity: 0;\n }\n }\n }\n\n &.hasBackground {\n background-color: var(--neutral-white);\n\n &.iconOnly {\n border-top-left-radius: 6px;\n border-top-right-radius: 6px;\n padding: var(--jump-card-padding) var(--jump-card-padding) 0;\n\n img {\n border-radius: 6px;\n }\n }\n }\n\n &.iconOnly {\n border-bottom-right-radius: 0;\n }\n\n &.is-mini {\n max-width: 180px;\n }\n }\n\n .NotificationCart {\n display: none;\n position: absolute;\n bottom: 0px;\n width: 100%;\n padding: 2rem 1rem;\n background-color: hsl(0 0% 0% / 35%);\n box-sizing: border-box;\n z-index: 2;\n transform: translate3d(0, 0, 0);\n\n &.is-active {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n }\n\n .Content {\n &.hasBackground {\n background-color: var(--neutral-white);\n padding: calc(var(--jump-card-padding) * 2);\n }\n\n &.iconOnly {\n padding: calc(var(--jump-card-padding) * 2) var(--jump-card-padding);\n }\n\n &.is-mini {\n max-width: 180px;\n }\n }\n\n .Body {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n padding: var(--jump-card-padding) 0;\n\n & > * {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n\n & > * {\n flex: 0 1 auto;\n }\n }\n\n &.hasBackground {\n padding: 0 0 var(--jump-card-padding);\n }\n\n &.iconOnly {\n padding: 0;\n }\n\n &.is-mini {\n & > * {\n flex-direction: column;\n }\n\n padding: calc(var(--jump-card-padding) / 2) 0;\n }\n }\n\n .Product {\n font-size: var(--fs-400);\n }\n\n .Subtitle {\n font-size: var(--fs-300);\n color: var(--neutral-grey-secondary);\n line-height: 1.2;\n }\n\n .Footer {\n line-height: var(--lh-400);\n justify-content: end;\n padding: var(--jump-card-padding) 0;\n align-items: flex-end;\n\n &.justify-between {\n justify-content: space-between;\n }\n\n &.hasBackground {\n padding-bottom: 0;\n }\n\n &.iconOnly {\n padding: 0;\n }\n\n &.is-mini {\n padding: calc(var(--jump-card-padding) / 2) 0;\n }\n }\n\n .OutOfStock {\n justify-items: start;\n font-size: var(--fs-300);\n font-weight: var(--fw-900);\n color: var(--status-danger-standard);\n }\n\n .OnlyIconButton {\n position: absolute;\n bottom: 0;\n right: 0;\n background: var(--neutral-white);\n border-top-left-radius: 20px;\n padding: 8px 8px 0px 8px;\n z-index: 2;\n }\n\n .Price {\n position: relative;\n display: grid;\n grid-template-columns: auto auto;\n grid-template-rows: 1.5rem 1.5rem auto;\n justify-items: end;\n align-items: end;\n column-gap: 0.5rem;\n\n font-size: var(--fs-500);\n font-weight: var(--fw-900);\n line-height: var(--lh-400);\n\n & > * {\n display: inline-flex;\n }\n\n &__Regular {\n text-align: right;\n\n &.sale {\n text-decoration: line-through;\n color: var(--neutral-grey-secondary);\n font-weight: var(--fw-400);\n font-size: var(--fs-400);\n grid-column: 2;\n grid-row: 1;\n }\n }\n\n &__Sale {\n grid-column: 2;\n grid-row: 2;\n }\n\n &__Discount {\n color: var(--status-danger-standard);\n font-weight: var(--fw-400);\n font-size: var(--fs-300);\n grid-column: 1;\n grid-row: 1;\n }\n\n &.is-mini {\n display: flex;\n font-size: var(--fs-400);\n }\n }\n\n .SelectVariations {\n select {\n appearance: none;\n background-color: transparent;\n border: 1px solid var(--neutral-grey-secondary);\n border-radius: 3px;\n color: var(--neutral-grey-secondary);\n font-size: var(--fs-300);\n padding: 0.5rem 0.75rem;\n max-width: 100%;\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236B7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E\");\n background-position: right 0.5rem center;\n background-repeat: no-repeat;\n background-size: 1.5em 1.5em;\n padding-right: 2.5rem;\n -webkit-print-color-adjust: exact;\n }\n }\n}\n\n.slide-in-bottom {\n animation: slide-in-bottom 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;\n}\n\n.slide-out-bottom {\n animation: slide-out-bottom 0.5s cubic-bezier(0.55, 0.085, 0.68, 0.53) both;\n}\n\n.fade-in-out {\n animation-name: fade-in-out;\n animation-duration: 6s;\n animation-timing-function: ease-in-out;\n}\n\n@keyframes fade-in-out {\n from {\n opacity: 0;\n transform: translateY(100px);\n }\n\n 50% {\n opacity: 1;\n transform: translateY(0);\n }\n\n to {\n opacity: 0;\n transform: translateY(100px);\n }\n}\n","import { Component, Host, h, Prop, Event, EventEmitter, Element, State, Listen} from '@stencil/core';\n\ninterface Variation {\n code: string;\n imgUrl: string;\n label: string;\n taxonomy: string;\n // Add more keys as needed\n}\n\n@Component({\n tag: 'jump-card-ecommerce',\n styleUrl: 'jump-card-ecommerce.scss',\n shadow: true,\n})\nexport class JumpCardEcommerce {\n\n @Element() JumpCardEcommerce: HTMLElement;\n jumpQuantityEl;\n\n /* ---------------------- @PROPERTIES ------------------------- */\n\n /** Indicate if card has only icon button*/\n @Prop() onlyIconButton: boolean = false;\n\n /** Indicate if card has background*/\n @Prop() hasBackground: boolean = false;\n\n /** Indicates the badge of the card*/\n @Prop() badge: string;\n\n /** Indicates if the product is favorite */\n\n @Prop({mutable:true, reflect: true}) favorite: boolean = false;\n\n /** Indicate if the whislist is active in shop*/\n @Prop() hasFavorite: boolean = false;\n\n /** Indicate if the whislist will be slotted*/\n @Prop() hasSlotForFavorite: boolean = false;\n\n /** Indicates if the favorite button is render as an anchor, and define the url*/\n @Prop() favoriteHref: string;\n\n /** Indicates the link of the card*/\n @Prop() link: string;\n\n /** Indicates the image's src of the card*/\n @Prop() img: string ;\n\n /** Indicates the img's alt of the card*/\n @Prop() imgAlt: string;\n\n /** Indicates the over image's src of the card*/\n @Prop() hoverImg: string ;\n\n /** Indicates the hover img's alt of the card*/\n @Prop() hoverImgAlt: string;\n\n /** Indicates the videoSrc of the card*/\n @Prop() videoSrc: string;\n\n /** Indicates the notificationUrl of the card*/\n @Prop() notificationUrl: string;\n\n /** Indicates the notificationText of the card*/\n @Prop() notificationText: string = '';\n\n /** Indicates the title of the card*/\n @Prop() productName: string ;\n\n /** Indicates the subtitle of the card*/\n @Prop() subtitle: string;\n\n /** Indicates the ID of the product, can be also a SKU*/\n @Prop() productId: string ;\n\n /** Indicates the price of the card */\n @Prop() price: number;\n\n /** Indicates the sale price of the card */\n @Prop() salePrice: number;\n\n /** Indicates the currency of the card */\n @Prop() currency: string = '€';\n\n /** Indicates if the product is outOfStock */\n @Prop({mutable:true, reflect: true}) outOfStock: boolean = false;\n\n /** Indicates the outOfStockText of the product*/\n @Prop() outOfStockText: string;\n\n /** Indicates the button class of the add to cart / notification button */\n @Prop() addToCartText: string ;\n\n /** Indicates the button class of the add to cart / notification button */\n @Prop() waitingListText: string ;\n\n /** Indicate if the user request to be notified when te product is avaible*/\n @Prop() addToWaitingList: boolean = false;\n\n /** Indicate if the card is Mini Card*/\n @Prop() isMini: boolean = false;\n\n /* ---------------------- @STATE ------------------------- */\n\n /** Indicate if the product is added to cart --> non deve esserci nelle storie! */\n @Prop() addedToCart: boolean = false;\n\n @Prop() endAddedToCart: boolean = false;\n\n @State() variations: Variation[] = [];\n\n @State() selectedVariation: Variation;\n\n @State() priceFormatted: string;\n @State() salePriceFormatted: string;\n\n // è una proprietà che viene cambiata solo da dentro\n quantity: number;\n\n variationSelectEl: HTMLSelectElement;\n\n /* ---------------------- @EVENTS ------------------------- */\n\n @Event({eventName: 'jump-toggle-favorite'}) toggleFavorite: EventEmitter;\n\n @Event({eventName: 'jump-add-to-cart'}) productAddToCart: EventEmitter;\n\n @Event({eventName: 'jump-add-to-waiting-list'}) productWaitingList: EventEmitter;\n\n @Event({ eventName: 'jump-variation-selected' }) variationSelected: EventEmitter; // verificare se corretto: aggiungo un evento\n\n @Listen(\"jump-card-ecommerce-option-connected\")\n addOption(e) {\n let props = e.detail; // es {code: 'sku1', imageUrl: 'https://google.com/'}\n this.variations = [...this.variations, { ...props }];\n }\n\n onVariationSelected() {\n let currentValue = this.variationSelectEl.value;\n let variation = this.variations.find(\n (variation) => variation.code == currentValue,\n );\n this.selectedVariation = variation;\n this.variationSelected.emit(variation); // verificare se corretto: emetto l'evento\n }\n\n\n /* ---------------------- @LIFECYCLE ------------------------- */\n\n componentWillLoad() {}\n\n componentDidLoad() {\n this.jumpQuantityEl = this.JumpCardEcommerce.querySelector('jump-quantity');\n\n if(this.jumpQuantityEl){\n this.jumpQuantityEl.addEventListener('jump-change', this.onQuantityChange.bind(this));\n this.quantity = this.jumpQuantityEl.getValue().then((quantity) => {\n this.quantity = quantity;\n });\n }\n this.formatPrices();\n }\n\n /**\n * Format prices in locale currency\n */\n formatPrices() {\n let locale = document.documentElement.lang ?? 'it-IT';\n if(locale.length == 2) {\n locale = `${locale}-${locale.toUpperCase()}`;\n }\n\n // Format price with 2 decimal digits and in locale\n this.priceFormatted = this.price.toLocaleString(locale, {minimumFractionDigits: 2, maximumFractionDigits: 2});\n this.salePriceFormatted = this.salePrice.toLocaleString(locale, {minimumFractionDigits: 2, maximumFractionDigits: 2});\n }\n\n disconnectedCallback() {\n this.jumpQuantityEl = this.JumpCardEcommerce.querySelector('jump-quantity');\n if(this.jumpQuantityEl){\n this.jumpQuantityEl.removeEventListener('jump-change',this.onQuantityChange);\n }\n }\n\n /* ---------------------- @METHODS ------------------------- */\n onQuantityChange(e) {\n this.quantity = e.detail.value ?? false;\n }\n\n onToggleFavorite() {\n this.favorite = !this.favorite;\n this.toggleFavorite.emit(\n {\n productId: this.productId,\n favorite: this.favorite\n }\n );\n }\n\n addProductToCart() {\n this.addedToCart = true;\n let variations = this.selectedVariation;\n if(!variations && this.variations.length > 0) {\n variations = this.variations[0];\n }\n\n const payload = {\n productId: this.productId,\n addedToCart: this.addedToCart,\n quantity: this.quantity ?? null,\n variation: variations ?? null\n };\n this.productAddToCart.emit(payload);\n\n setTimeout(() => {\n this.addedToCart = false;\n }, 6000);\n }\n\n waitingList() {\n this.addToWaitingList = true;\n this.productWaitingList.emit(\n {\n productId: this.productId,\n addToWaitingList: this.addToWaitingList\n }\n )\n }\n\n render() {\n const backgroundClass = this.hasBackground && !this.isMini ? 'hasBackground' : '';\n const iconOnlyClass = this.onlyIconButton && !this.isMini ? 'iconOnly' : '';\n const justifyClass = this.outOfStock ? 'justify-between' : '';\n const hasImageOnHover = this.hoverImg ? 'has-hover-image' : '';\n const miniCard = this.isMini ? 'is-mini' : '';\n\n function calculateDiscount(price: number, salePrice: number): string {\n const discount = ((price - salePrice) / price) * 100;\n return discount.toFixed(0);\n };\n\n return (\n <Host>\n { !this.isMini && this.badge ? <jump-badge class={`${backgroundClass} ${iconOnlyClass}`} variant=\"secondary\" dimension=\"small\" label={this.badge}></jump-badge> : ''}\n\n { !this.isMini && this.hasFavorite ?\n this.favoriteHref != '' ?\n <jump-button href={this.favoriteHref} onClick={ () => this.onToggleFavorite() } class={`Favorite ${backgroundClass} ${iconOnlyClass}`} variant={this.favorite ? 'primary' : 'neutral'} size=\"small\" text onlyIcon>\n <jump-icon slot=\"prefix\" name=\"heart\" category={this.favorite ? 'solid' : 'light'} size=\"medium\"></jump-icon>\n </jump-button>\n :\n <jump-button onClick={ () => this.onToggleFavorite() } class={`Favorite ${backgroundClass} ${iconOnlyClass}`} variant={this.favorite ? 'primary' : 'neutral'} size=\"small\" text onlyIcon>\n <jump-icon slot=\"prefix\" name=\"heart\" category={this.favorite ? 'solid' : 'light'} size=\"medium\"></jump-icon>\n </jump-button>\n :\n this.hasSlotForFavorite ? <div class=\"Favorite\"><slot name=\"favorite\"></slot> </div> : null\n }\n\n <div class={`Media ${iconOnlyClass} ${backgroundClass} ${miniCard}`}>\n <a href={this.link}>\n <figure class={`Images ${hasImageOnHover} `}>\n {this.img && !this.videoSrc ? <img class=\"Images__Front\" src={this.img} alt={this.imgAlt}></img> : ''}\n {this.hoverImg && !this.videoSrc ? <img class=\"Images__OnHover\" src={this.hoverImg} alt={this.hoverImgAlt}></img> : ''}\n </figure>\n {this.videoSrc && !this.img ?\n <video autoplay>\n <source src={this.videoSrc} type=\"video/mp4\"/>\n <source src={this.videoSrc} type=\"video/mov\"/>\n <source src={this.videoSrc} type=\"video/webm\"/>\n </video> : ''}\n </a>\n { !this.isMini ?\n <div class={`NotificationCart ${this.addedToCart == true ? 'is-active fade-in-out' : ''}`}>\n <jump-button href={this.notificationUrl} variant=\"white\" text>\n <jump-icon slot=\"prefix\" name=\"check\"></jump-icon>\n <span> {this.notificationText} </span>\n </jump-button>\n </div>\n : null}\n { !this.isMini && this.onlyIconButton ?\n <div class=\"OnlyIconButton\">\n <jump-button variant=\"secondary\" size=\"large\" pill onlyIcon onClick={() => this.addProductToCart()}>\n <jump-icon slot=\"prefix\" name='cart-shopping' category=\"regular\"></jump-icon>\n </jump-button>\n </div>\n : ''\n }\n </div>\n\n <div class={`Content ${backgroundClass} ${iconOnlyClass} ${miniCard}`}>\n <div class={`Body ${backgroundClass} ${iconOnlyClass} ${miniCard}`}>\n <div>\n <div class=\"Info\">\n <div class=\"Product\">{this.productName}</div>\n { !this.isMini && this.subtitle ? <div class=\"Subtitle\">{this.subtitle}</div> : null}\n </div>\n\n {this.price ?\n <div class={`Price ${miniCard}`}>\n {!this.isMini && this.salePrice && this.salePrice < this.price ?\n <div class=\"Price__Discount\"> {calculateDiscount(this.price, this.salePrice)}% </div>\n : null}\n\n {!this.isMini ?\n <div class={`Price__Regular ${this.salePrice && this.salePrice < this.price ? 'sale' : ''}`}>\n {this.currency}{this.priceFormatted}\n </div>\n :\n <div class={`Price__Regular`}>\n {this.currency}{ this.salePrice && this.salePrice < this.price ? this.salePriceFormatted : this.priceFormatted}\n </div>\n }\n\n {!this.isMini && this.salePrice && this.salePrice < this.price ?\n <div class=\"Price__Sale\">{this.currency}{this.salePriceFormatted}</div>\n : null}\n </div>\n : null}\n </div>\n\n {!this.isMini ?\n <div class=\"SelectVariations\">\n {this.variations.length != 0 ?\n <select\n ref={(el) => (this.variationSelectEl = el)} //salvo questo elemento in this.variationSelectEl\n onChange={() => {\n this.onVariationSelected();\n }}\n >\n {this.variations\n .filter((variation) => !variation.imgUrl)\n .map((variation) => (\n <option value={variation.code}>{variation.label}</option>\n ))}\n </select>\n : null }\n </div>\n : null}\n\n {!this.isMini ? <slot name=\"quantity\"></slot> : null}\n </div>\n\n <div class={`Footer ${justifyClass} ${backgroundClass} ${iconOnlyClass} ${miniCard}`}>\n\n {this.outOfStock ? <div class=\"OutOfStock\">{this.outOfStockText ? this.outOfStockText : 'Esaurito'}</div> : ''}\n\n { this.outOfStock ?\n <jump-button variant=\"secondary\" size=\"small\" text onClick={() => this.waitingList()}>\n <jump-icon slot=\"prefix\" name={!this.outOfStock ? 'cart-shopping' : 'bell'} category=\"regular\" size=\"small\"></jump-icon>\n {this.waitingListText ? this.waitingListText : 'Notifica disponibilità'}\n </jump-button> : ''\n }\n\n { !this.outOfStock && !this.onlyIconButton ?\n <jump-button variant=\"secondary\" size=\"small\" text onClick={() => this.addProductToCart()}>\n <jump-icon slot=\"prefix\" name={!this.outOfStock ? 'cart-shopping' : 'bell'} category=\"regular\" size=\"small\"></jump-icon>\n {this.addToCartText ? this.addToCartText : 'Aggiungi al carrello'}\n </jump-button> : ''\n }\n\n </div>\n\n </div>\n </Host>\n );\n }\n\n}\n"],"mappings":"gEAAA,MAAMA,EAAuB,68JAC7B,MAAAC,EAAeD,E,MCcFE,EAAiB,M,6QAQM,M,mBAGD,M,mCAOwB,M,iBAG1B,M,wBAGO,M,yNA2BH,G,wIAkBR,I,gBAGgC,M,gHAYvB,M,YAGV,M,iBAKK,M,oBAEG,M,gBAEC,G,iGAuBnC,SAAAC,CAAUC,GACR,IAAIC,EAAQD,EAAEE,OACdC,KAAKC,WAAa,IAAID,KAAKC,WAAUC,OAAAC,OAAA,GAAOL,G,CAG9C,mBAAAM,GACE,IAAIC,EAAeL,KAAKM,kBAAkBC,MAC1C,IAAIC,EAAYR,KAAKC,WAAWQ,MAC7BD,GAAcA,EAAUE,MAAQL,IAEnCL,KAAKW,kBAAoBH,EACzBR,KAAKY,kBAAkBC,KAAKL,E,CAM9B,iBAAAM,GAAiB,CAEjB,gBAAAC,GACEf,KAAKgB,eAAiBhB,KAAKL,kBAAkBsB,cAAc,iBAE3D,GAAGjB,KAAKgB,eAAe,CACrBhB,KAAKgB,eAAeE,iBAAiB,cAAgBlB,KAAKmB,iBAAiBC,KAAKpB,OAChFA,KAAKqB,SAAWrB,KAAKgB,eAAeM,WAAWC,MAAMF,IACnDrB,KAAKqB,SAAWA,CAAQ,G,CAG5BrB,KAAKwB,c,CAMP,YAAAA,G,MACE,IAAIC,GAASC,EAAAC,SAASC,gBAAgBC,QAAI,MAAAH,SAAA,EAAAA,EAAI,QAC9C,GAAGD,EAAOK,QAAU,EAAG,CACrBL,EAAS,GAAGA,KAAUA,EAAOM,e,CAI/B/B,KAAKgC,eAAiBhC,KAAKiC,MAAMC,eAAeT,EAAQ,CAACU,sBAAuB,EAAGC,sBAAuB,IAC1GpC,KAAKqC,mBAAqBrC,KAAKsC,UAAUJ,eAAeT,EAAQ,CAACU,sBAAuB,EAAGC,sBAAuB,G,CAGpH,oBAAAG,GACEvC,KAAKgB,eAAiBhB,KAAKL,kBAAkBsB,cAAc,iBAC3D,GAAGjB,KAAKgB,eAAe,CACrBhB,KAAKgB,eAAewB,oBAAoB,cAAcxC,KAAKmB,iB,EAK/D,gBAAAA,CAAiBtB,G,MACfG,KAAKqB,UAAWK,EAAA7B,EAAEE,OAAOQ,SAAK,MAAAmB,SAAA,EAAAA,EAAI,K,CAGpC,gBAAAe,GACEzC,KAAK0C,UAAY1C,KAAK0C,SACtB1C,KAAK2C,eAAe9B,KAClB,CACE+B,UAAW5C,KAAK4C,UAChBF,SAAU1C,KAAK0C,U,CAKrB,gBAAAG,G,MACE7C,KAAK8C,YAAc,KACnB,IAAI7C,EAAaD,KAAKW,kBACtB,IAAIV,GAAcD,KAAKC,WAAW6B,OAAS,EAAG,CAC5C7B,EAAaD,KAAKC,WAAW,E,CAG/B,MAAM8C,EAAU,CACdH,UAAW5C,KAAK4C,UAChBE,YAAa9C,KAAK8C,YAClBzB,UAAUK,EAAA1B,KAAKqB,YAAQ,MAAAK,SAAA,EAAAA,EAAI,KAC3BlB,UAAWP,IAAU,MAAVA,SAAU,EAAVA,EAAc,MAE3BD,KAAKgD,iBAAiBnC,KAAKkC,GAE3BE,YAAW,KACTjD,KAAK8C,YAAc,KAAK,GACvB,I,CAGL,WAAAI,GACElD,KAAKmD,iBAAmB,KACxBnD,KAAKoD,mBAAmBvC,KACtB,CACE+B,UAAW5C,KAAK4C,UAChBO,iBAAkBnD,KAAKmD,kB,CAK7B,MAAAE,GACE,MAAMC,EAAkBtD,KAAKuD,gBAAkBvD,KAAKwD,OAAS,gBAAkB,GAC/E,MAAMC,EAAgBzD,KAAK0D,iBAAmB1D,KAAKwD,OAAS,WAAa,GACzE,MAAMG,EAAe3D,KAAK4D,WAAa,kBAAoB,GAC3D,MAAMC,EAAkB7D,KAAK8D,SAAW,kBAAoB,GAC5D,MAAMC,EAAW/D,KAAKwD,OAAS,UAAY,GAE3C,SAASQ,EAAkB/B,EAAeK,GACxC,MAAM2B,GAAahC,EAAQK,GAAaL,EAAS,IACjD,OAAOgC,EAASC,QAAQ,E,CAG1B,OACEC,EAACC,EAAI,MACApE,KAAKwD,QAAUxD,KAAKqE,MAAQF,EAAA,cAAYG,MAAO,GAAGhB,KAAmBG,IAAiBc,QAAQ,YAAYC,UAAU,QAAQC,MAAOzE,KAAKqE,QAAuB,IAE/JrE,KAAKwD,QAAUxD,KAAK0E,YACrB1E,KAAK2E,cAAgB,GACrBR,EAAA,eAAaS,KAAM5E,KAAK2E,aAAcE,QAAU,IAAM7E,KAAKyC,mBAAqB6B,MAAO,YAAYhB,KAAmBG,IAAiBc,QAASvE,KAAK0C,SAAW,UAAY,UAAWoC,KAAK,QAAQC,KAAI,KAACC,SAAQ,MAC7Mb,EAAA,aAAWc,KAAK,SAASC,KAAK,QAAQC,SAAUnF,KAAK0C,SAAW,QAAU,QAASoC,KAAK,YAG5FX,EAAA,eAAaU,QAAU,IAAM7E,KAAKyC,mBAAqB6B,MAAO,YAAYhB,KAAmBG,IAAiBc,QAASvE,KAAK0C,SAAW,UAAY,UAAWoC,KAAK,QAAQC,KAAI,KAACC,SAAQ,MACpLb,EAAA,aAAWc,KAAK,SAASC,KAAK,QAAQC,SAAUnF,KAAK0C,SAAW,QAAU,QAASoC,KAAK,YAG5F9E,KAAKoF,mBAAqBjB,EAAA,OAAKG,MAAM,YAAWH,EAAA,QAAMe,KAAK,aAAkB,KAAU,KAGzFf,EAAA,OAAKG,MAAO,SAASb,KAAiBH,KAAmBS,KACvDI,EAAA,KAAGS,KAAM5E,KAAKqF,MACZlB,EAAA,UAAQG,MAAO,UAAUT,MACtB7D,KAAKsF,MAAQtF,KAAKuF,SAAWpB,EAAA,OAAKG,MAAM,gBAAgBkB,IAAKxF,KAAKsF,IAAKG,IAAKzF,KAAK0F,SAAiB,GAClG1F,KAAK8D,WAAa9D,KAAKuF,SAAWpB,EAAA,OAAKG,MAAM,kBAAkBkB,IAAKxF,KAAK8D,SAAU2B,IAAKzF,KAAK2F,cAAsB,IAErH3F,KAAKuF,WAAavF,KAAKsF,IACtBnB,EAAA,SAAOyB,SAAQ,MACbzB,EAAA,UAAQqB,IAAKxF,KAAKuF,SAAUM,KAAK,cACjC1B,EAAA,UAAQqB,IAAKxF,KAAKuF,SAAUM,KAAK,cACjC1B,EAAA,UAAQqB,IAAKxF,KAAKuF,SAAUM,KAAK,gBACxB,KAEZ7F,KAAKwD,OACNW,EAAA,OAAKG,MAAO,oBAAoBtE,KAAK8C,aAAe,KAAO,wBAA0B,MACnFqB,EAAA,eAAaS,KAAM5E,KAAK8F,gBAAiBvB,QAAQ,QAAQQ,KAAI,MAC3DZ,EAAA,aAAWc,KAAK,SAASC,KAAK,UAC9Bf,EAAA,gBAAQnE,KAAK+F,iBAAgB,OAGjC,MACC/F,KAAKwD,QAAUxD,KAAK0D,eACrBS,EAAA,OAAKG,MAAM,kBACTH,EAAA,eAAaI,QAAQ,YAAYO,KAAK,QAAQkB,KAAI,KAAChB,SAAQ,KAACH,QAAS,IAAM7E,KAAK6C,oBAC9EsB,EAAA,aAAWc,KAAK,SAASC,KAAK,gBAAgBC,SAAS,cAGzD,IAINhB,EAAA,OAAKG,MAAO,WAAWhB,KAAmBG,KAAiBM,KACzDI,EAAA,OAAKG,MAAO,QAAQhB,KAAmBG,KAAiBM,KACtDI,EAAA,WACEA,EAAA,OAAKG,MAAM,QACTH,EAAA,OAAKG,MAAM,WAAWtE,KAAKiG,cACxBjG,KAAKwD,QAAUxD,KAAKkG,SAAW/B,EAAA,OAAKG,MAAM,YAAYtE,KAAKkG,UAAkB,MAGjFlG,KAAKiC,MACJkC,EAAA,OAAKG,MAAO,SAASP,MACjB/D,KAAKwD,QAAUxD,KAAKsC,WAAatC,KAAKsC,UAAYtC,KAAKiC,MACvDkC,EAAA,OAAKG,MAAM,mBAAiB,IAAGN,EAAkBhE,KAAKiC,MAAOjC,KAAKsC,WAAU,MAC5E,MAEAtC,KAAKwD,OACLW,EAAA,OAAKG,MAAO,kBAAkBtE,KAAKsC,WAAatC,KAAKsC,UAAYtC,KAAKiC,MAAQ,OAAS,MACpFjC,KAAKmG,SAAUnG,KAAKgC,gBAGvBmC,EAAA,OAAKG,MAAO,kBACTtE,KAAKmG,SAAWnG,KAAKsC,WAAatC,KAAKsC,UAAYtC,KAAKiC,MAAQjC,KAAKqC,mBAAqBrC,KAAKgC,iBAIlGhC,KAAKwD,QAAUxD,KAAKsC,WAAatC,KAAKsC,UAAYtC,KAAKiC,MACvDkC,EAAA,OAAKG,MAAM,eAAetE,KAAKmG,SAAUnG,KAAKqC,oBAC9C,MAEF,OAGJrC,KAAKwD,OACLW,EAAA,OAAKG,MAAM,oBACRtE,KAAKC,WAAW6B,QAAU,EACzBqC,EAAA,UACEiC,IAAMC,GAAQrG,KAAKM,kBAAoB+F,EACvCC,SAAU,KACRtG,KAAKI,qBAAqB,GAG3BJ,KAAKC,WACHsG,QAAQ/F,IAAeA,EAAUgG,SACjCC,KAAKjG,GACJ2D,EAAA,UAAQ5D,MAAOC,EAAUE,MAAOF,EAAUiE,UAGhD,MAEJ,MAEAzE,KAAKwD,OAASW,EAAA,QAAMe,KAAK,aAAqB,MAGlDf,EAAA,OAAKG,MAAO,UAAUX,KAAgBL,KAAmBG,KAAiBM,KAEvE/D,KAAK4D,WAAaO,EAAA,OAAKG,MAAM,cAActE,KAAK0G,eAAiB1G,KAAK0G,eAAiB,YAAoB,GAE1G1G,KAAK4D,WACLO,EAAA,eAAaI,QAAQ,YAAYO,KAAK,QAAQC,KAAI,KAACF,QAAS,IAAM7E,KAAKkD,eACrEiB,EAAA,aAAWc,KAAK,SAASC,MAAOlF,KAAK4D,WAAa,gBAAkB,OAAQuB,SAAS,UAAUL,KAAK,UACnG9E,KAAK2G,gBAAkB3G,KAAK2G,gBAAkB,0BAChC,IAGhB3G,KAAK4D,aAAe5D,KAAK0D,eAC1BS,EAAA,eAAaI,QAAQ,YAAYO,KAAK,QAAQC,KAAI,KAACF,QAAS,IAAM7E,KAAK6C,oBACrEsB,EAAA,aAAWc,KAAK,SAASC,MAAOlF,KAAK4D,WAAa,gBAAkB,OAAQuB,SAAS,UAAUL,KAAK,UACnG9E,KAAK4G,cAAgB5G,KAAK4G,cAAgB,wBAC5B,K"}
@@ -1,2 +0,0 @@
1
- import{r as t,c as i,h as s,H as e}from"./p-d4c681a4.js";const h=":host{--hidden-display:none;display:block}:host h5{font-family:var(--ff-primary), serif;font-size:var(--fs-400);line-height:var(--lh-300);font-weight:var(--fw-900)}:host slot{display:flex;flex-direction:column;gap:0.25rem;margin-bottom:1rem}*[data-hide=true]{display:var(--hidden-display)}h5{margin:0 0 0.25rem}";const a=h;const n=class{constructor(s){t(this,s);this.change=i(this,"jump-filterchange",7);this.name="tax-name";this.heading="Titolo del filtro";this.otherLabel="Mostra altro";this.lessLabel="Mostra meno";this.maxElements=8;this.variant="default";this.values=[];this.value="";this.slotItems=undefined;this.inputs=[];this.showMore=true}async getValues(){return this.values}async getActiveAmount(){return this.values.length}async getInputs(){return this.inputs}async getName(){return this.name}toggleHiddenItems(t=true){this.slotItemsWrapper.assignedElements().forEach(((i,s)=>{if(s>this.maxElements&&!t){i.setAttribute("style","display: none")}else{i.setAttribute("style","display: initial")}}))}handleShowMore(){this.showMore=!this.showMore;this.toggleHiddenItems(this.showMore)}handleChange(t){const i=t.target;const s=i.value;if(i.tagName==="INPUT"){if(i.type==="checkbox"){if(i.checked){this.values.push(s)}else{const t=this.values.indexOf(s);if(t!==-1){this.values.splice(t,1)}}}else if(i.type==="radio"){this.value=s;this.values=[s]}}else if(i.tagName==="SELECT"){this.value=s;this.values=[s]}this.change.emit({name:this.name,values:this.values})}handleCheckboxChange(t){if(t.detail.checked&&!this.values.includes(t.detail.value)){this.values.push(t.detail.value)}else if(!t.detail.checked&&this.values.includes(t.detail.value)){const i=this.values.indexOf(t.detail.value);if(i!==-1){this.values.splice(i,1)}}this.change.emit({name:this.name,values:this.values})}componentDidLoad(){this.slotItems=this.slotItemsWrapper.assignedElements();this.slotItemsWrapper.addEventListener("change",this.handleChange.bind(this));this.slotItemsWrapper.addEventListener("jump-checkbox-change",this.handleCheckboxChange.bind(this));let t=0;this.slotItems.forEach((i=>{if(t>this.maxElements){i.style.display="none"}if(i.tagName==="INPUT"||i.tagName==="SELECT"){this.inputs.push(i);if(i.tagName==="INPUT"&&i.type==="radio"){i.name=this.name}}else{const t=i.querySelectorAll("input, select");if(t.length>0){t.forEach((t=>{this.inputs.push(t);if(t.tagName==="INPUT"&&t.type==="radio"){t.name=this.name}}))}}t++}))}render(){return s(e,{key:"045985358fca061c90927a20b4c151cfd2fa9f99"},this.heading&&s("h5",{key:"8555c17428efebcc4fe267556d058f344821125c"},this.heading),s("div",{key:"7053c6a0eb8df8242e7eec49c1eb08c81354b1d6",class:"filterGroup"},s("slot",{key:"22bef57eb5de8599d85950c8c54fd2d4b33380a1",ref:t=>this.slotItemsWrapper=t})),this.inputs.length>this.maxElements&&s("jump-button",{key:"59007765335212a6c5377dd74ed0111d8d19e290",variant:"primary",size:"small",text:true,name:this.showMore?this.otherLabel:this.lessLabel,"aria-label":this.showMore?this.otherLabel:this.lessLabel,ref:t=>{this.showMoreBtn=t},onClick:()=>this.handleShowMore()},this.showMore?this.otherLabel:this.lessLabel,s("jump-icon",{key:"cdb2ebb1458763cfd456eaf223213802a449ba96",slot:"suffix",name:this.showMore?"chevron-down":"chevron-up"})))}};n.style=a;export{n as jump_filtergroup};
2
- //# sourceMappingURL=p-fa75b346.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["jumpFiltergroupCss","JumpFiltergroupStyle0","JumpFiltergroup","getValues","this","values","getActiveAmount","length","getInputs","inputs","getName","name","toggleHiddenItems","showAll","slotItemsWrapper","assignedElements","forEach","item","index","maxElements","setAttribute","handleShowMore","showMore","handleChange","event","target","newValue","value","tagName","type","checked","push","indexOf","splice","change","emit","handleCheckboxChange","detail","includes","componentDidLoad","slotItems","addEventListener","bind","style","display","querySelectorAll","input","render","h","Host","key","heading","class","ref","el","variant","size","text","otherLabel","lessLabel","showMoreBtn","onClick","slot"],"sources":["src/components/jump-filtergroup/jump-filtergroup.scss?tag=jump-filtergroup&encapsulation=shadow","src/components/jump-filtergroup/jump-filtergroup.tsx"],"sourcesContent":[":host {\n --hidden-display: none;\n\n display: block;\n\n h5{\n font-family: var(--ff-primary), serif;\n font-size: var(--fs-400);\n line-height: var(--lh-300);\n font-weight: var(--fw-900);\n }\n\n slot {\n display: flex;\n flex-direction: column;\n gap: .25rem;\n margin-bottom: 1rem;\n }\n\n}\n\n*[data-hide=\"true\"] {\n display: var(--hidden-display);\n}\n\nh5 {\n margin: 0 0 .25rem;\n}\n\n//TODO: capire perché non prende questo stile\n\n\n","import { Component, Host, h, Prop, State, Event, Method } from '@stencil/core';\n\n@Component({\n tag: 'jump-filtergroup',\n styleUrl: 'jump-filtergroup.scss',\n shadow: true,\n})\nexport class JumpFiltergroup {\n @Prop() name: string = 'tax-name';\n @Prop() heading: string = 'Titolo del filtro';\n @Prop() otherLabel: string = 'Mostra altro';\n @Prop() lessLabel: string = 'Mostra meno';\n @Prop() maxElements: number = 8;\n //TODO: Add Accordion variant within jump-acccordion component\n @Prop() variant: 'accordion' | 'default' = 'default';\n\n @State() values: string[] = [];\n @State() value: string = '';\n @State() slotItems: any;\n @State() inputs: any = [];\n @State() showMore: boolean = true;\n\n @Event({ eventName: 'jump-filterchange' }) change;\n\n slotItemsWrapper: HTMLSlotElement;\n showMoreBtn: HTMLElement;\n\n @Method('getValues')\n async getValues() {\n return this.values;\n }\n\n @Method('getActiveAmount')\n async getActiveAmount() {\n return this.values.length;\n }\n\n @Method('getInputs')\n async getInputs() {\n return this.inputs;\n }\n\n @Method('getName')\n async getName() {\n return this.name;\n }\n\n toggleHiddenItems(showAll = true) {\n this.slotItemsWrapper.assignedElements().forEach((item, index) => {\n if (index > this.maxElements && !showAll) {\n item.setAttribute('style', 'display: none');\n } else {\n item.setAttribute('style', 'display: initial');\n }\n });\n }\n\n handleShowMore() {\n this.showMore = !this.showMore;\n this.toggleHiddenItems(this.showMore);\n }\n\n handleChange(event: Event) {\n const target = event.target as HTMLInputElement | HTMLSelectElement;\n const newValue = target.value;\n\n if (target.tagName === 'INPUT') {\n if (target.type === 'checkbox') {\n // @ts-ignore\n if (target.checked) {\n this.values.push(newValue);\n } else {\n const index = this.values.indexOf(newValue);\n if (index !== -1) {\n this.values.splice(index, 1);\n }\n }\n } else if (target.type === 'radio') {\n // Se è un input radio selezionato, imposta il valore e aggiorna this.values\n this.value = newValue;\n this.values = [newValue]; // Assicurati che this.values contenga solo il valore selezionato\n }\n } else if (target.tagName === 'SELECT') {\n // Se è un select, aggiorna semplicemente il valore\n this.value = newValue;\n this.values = [newValue];\n }\n\n // Emit event con i valori aggiornati\n this.change.emit({\n name: this.name,\n values: this.values,\n });\n }\n\n handleCheckboxChange(event: CustomEvent) {\n if (event.detail.checked && !this.values.includes(event.detail.value)) {\n this.values.push(event.detail.value);\n } else if (!event.detail.checked && this.values.includes(event.detail.value)) {\n const index = this.values.indexOf(event.detail.value);\n if (index !== -1) {\n this.values.splice(index, 1);\n }\n }\n this.change.emit({\n name: this.name,\n values: this.values,\n });\n }\n\n componentDidLoad() {\n this.slotItems = this.slotItemsWrapper.assignedElements();\n this.slotItemsWrapper.addEventListener('change', this.handleChange.bind(this));\n this.slotItemsWrapper.addEventListener('jump-checkbox-change', this.handleCheckboxChange.bind(this));\n\n let index = 0;\n this.slotItems.forEach((item) => {\n if (index > this.maxElements) {\n //item.setAttribute('data-hide', 'true');\n item.style.display = 'none';\n }\n if (item.tagName === 'INPUT' || item.tagName === 'SELECT') {\n this.inputs.push(item);\n if (item.tagName === 'INPUT' && item.type === 'radio') {\n item.name = this.name;\n }\n } else {\n const inputs = item.querySelectorAll('input, select');\n if (inputs.length > 0) {\n inputs.forEach((input) => {\n this.inputs.push(input);\n\n if (input.tagName === 'INPUT' && input.type === 'radio') {\n input.name = this.name;\n }\n });\n }\n }\n index++;\n });\n\n //this.toggleHiddenItems();\n }\n\n render() {\n return (\n <Host>\n {this.heading && <h5>{this.heading}</h5>}\n <div class=\"filterGroup\">\n <slot ref={(el) => (this.slotItemsWrapper = el as HTMLSlotElement)}></slot>\n </div>\n {this.inputs.length > this.maxElements &&\n <jump-button variant=\"primary\" size=\"small\" text name={this.showMore ? this.otherLabel : this.lessLabel}\n aria-label={this.showMore ? this.otherLabel : this.lessLabel}\n ref={(showMoreBtn) => {\n this.showMoreBtn = showMoreBtn;\n }}\n onClick={() => this.handleShowMore()}>\n {this.showMore ? this.otherLabel : this.lessLabel}\n <jump-icon slot=\"suffix\" name={this.showMore ? 'chevron-down' : 'chevron-up'}></jump-icon>\n </jump-button>\n }\n </Host>\n );\n }\n}\n"],"mappings":"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"}