<div class="c-fold">
    <div class="c-fold__summary">
        <p class="c-fold__summary-text">Non puoi più partire? Puoi annullare questo parcheggio e ottenere un voucher di pari importo fino alle [ore] del [giorno]</p>
        <button class="c-button c-button--ghost c-fold__summary-cta js-fr-dialogmodal-open" aria-controls="confirmation-dialog-voucher-request">Annulla ordine</button>
    </div>
</div>

<div class="c-dialog js-fr-dialogmodal c-dialog--medium" id="confirmation-dialog-voucher-request">
    <div class="c-dialog__inner js-fr-dialogmodal-modal" aria-labelledby="confirmation-dialog-voucher-request-dialog-title">
        <div role="document">

            <img src="../../images/svgs/stk_MyBLQ.svg" class="c-dialog__img" alt="">
            <p class="c-dialog__title" id="confirmation-dialog-voucher-request-dialog-title" aria-hidden="true">Stai annullando un ordine</p>
            <div class="c-dialog__text c-dialog__text--centered">
                <p>Come riportato nelle <a href="#" target="_blank">condizioni di vendita</a>, <strong>entro 24 ore prima dell’inizio della sosta</strong> acquistata puoi annullare l'ordine e ottenere un voucher digitale parcheggi, di importo pari al parcheggio non usufruito, spendibile entro un anno all'interno del nostro e-commerce, esclusivamente per l’acquisto di parcheggi.</p>
            </div>
            <div class="u-centered u-mt-space-16">
                <button type="button" class="c-button c-button--submit">

                    Sì, procedo

                </button>
                <div class="u-mt-space-16"><button type="button" class="c-button c-button--as-link u-color-night-100">

                        No, non mi interessa

                    </button></div>
            </div>

            <button type="button" class="c-dialog__close js-fr-dialogmodal-close" aria-label="Chiudi la modale">
                <svg class="c-icon c-icon--32">
                    <use xlink:href="#ic_close_black_24px"></use>
                </svg> </button>
        </div>
    </div>
</div>
<div class="c-fold{{#if modifier}} {{modifier}}{{/if}}">
  <div class="c-fold__summary">
    <p class="c-fold__summary-text">{{{ summary-text }}}</p>
    <button class="c-button c-button--ghost c-fold__summary-cta js-fr-dialogmodal-open" aria-controls="confirmation-dialog-voucher-request">Annulla ordine</button>
  </div>
</div>

{{!-- DIALOG --}}
{{#> @dialog confirmation-dialog }}
  <img src="{{ path '/images/svgs/stk_MyBLQ.svg' }}" class="c-dialog__img" alt="">
  <p class="c-dialog__title" id="{{ id }}-{{ dialog-labelledby }}" aria-hidden="true">{{ title }}</p>
  <div class="c-dialog__text c-dialog__text--centered">
    <p>Come riportato nelle <a href="#" target="_blank">condizioni di vendita</a>, <strong>entro 24 ore prima dell’inizio della sosta</strong> acquistata puoi annullare l'ordine e ottenere un voucher digitale parcheggi, di importo pari al parcheggio non usufruito, spendibile entro un anno all'interno del nostro e-commerce, esclusivamente per l’acquisto di parcheggi.</p>
  </div>
  <div class="u-centered u-mt-space-16">
    {{> @button btn-confirm }}
    <div class="u-mt-space-16">{{> @button btn-cancel }}</div>
  </div>
{{/@dialog}}
{{!-- END DIALOG --}}
{
  "summary-text": "Non puoi più partire? Puoi annullare questo parcheggio e ottenere un voucher di pari importo fino alle [ore] del [giorno]",
  "upsell-items": [
    {
      "item": {
        "name": "Lavaggio autovettura",
        "price-item": [
          {
            "label": "Prezzo min.",
            "value": "8,00 €"
          },
          {
            "label": "Prezzo max.",
            "value": "24,00 €"
          }
        ]
      }
    },
    {
      "item": {
        "name": "Pulitura interni",
        "price-item": [
          {
            "label": "Prezzo max.",
            "value": "24,00 €"
          }
        ]
      }
    }
  ],
  "footer-text": "Il pagamento di questi servizi avverrà solo una volta che ne avrai usufruito. Potrai pagarli presso il Presidio Parcheggi al piano terra del P2, prima del ritiro della tua auto",
  "confirmation-dialog": {
    "modifier": "c-dialog--medium",
    "id": "confirmation-dialog-voucher-request",
    "dialog-labelledby": "dialog-title",
    "title": "Stai annullando un ordine",
    "btn-confirm": {
      "name": "default",
      "type": "button",
      "text": "Sì, procedo",
      "modifier": "c-button--submit"
    },
    "btn-cancel": {
      "name": "default",
      "type": "button",
      "text": "No, non mi interessa",
      "modifier": "c-button--as-link u-color-night-100"
    }
  }
}
  • Content:
    .c-fold {
      background-color: secondary(basic-white, 100);
      padding: remify(16px);
      border-radius: 0 0 remify(20px) remify(20px);
      color: primary(night, 100);
      border: remify(1px) solid primary(night, 20);
      border-top: none;
    }
    
    .c-fold__summary {
      display: flex;
      gap: remify(16px);
      flex-direction: column;
      align-items: flex-start;
    
      @include min-screen(bp(tablet)) {
        flex-direction: row;
        align-items: center;
        justify-content: space-between;
      }
    
    }
    
    .c-fold .js-btn-fold-toggle,
    .c-fold .c-fold__summary-cta,
    .c-fold .c-button--ghost.c-fold__summary-cta {
      color: currentColor;
      flex-shrink: 0;
      @include font-scale(level-1-5, semibold);
      padding: remify(4px) remify(12px);
      border-radius: remify(8px);
    }
    
    .c-fold .c-fold__summary-cta {
      padding: 0;
    }
    
    .c-fold__details {
      display: none;
      flex-direction: column;
      gap: remify(16px);
      margin-top: remify(24px);
    
      @include min-screen(bp(tablet)) {
        gap: remify(32px);
        margin-top: remify(32px);
      }
    
    }
    
    .c-fold__details-items {
      display: flex;
      flex-direction: column;
      gap: remify(16px);
    }
    
    .c-fold__summary-text {
      color: primary(night, 100);
      @include font-scale(level-1-5);
    }
    
    .c-fold .c-voucher-main-form {
      padding: 0;
    }
    
    /*------------------------------------*\
      Modifier: c-fold--result
    \*------------------------------------*/
    .c-fold--result {
    
      .c-fold__summary {
        justify-content: initial;
        gap: remify(16px) remify(8px);
      }
    
      .refund-result {
        display: flex;
        align-items: center;
        gap: remify(4px);
      }
    
    }
  • URL: /components/raw/fold/_fold.scss
  • Filesystem Path: src/views/02-molecules/fold/_fold.scss
  • Size: 1.5 KB
  • Content:
    document.addEventListener('DOMContentLoaded', () => {
      // Find all fold containers and set them up
      const foldContainers = document.querySelectorAll('.c-fold');
    
      foldContainers.forEach(container => {
        // Find the essential parts of the component
        const toggleButton = container.querySelector('.js-btn-fold-toggle');
        const detailsSection = container.querySelector('.c-fold__details');
        
        // Find the optional close button
        const closeButton = container.querySelector('.js-btn-close-fold');
    
        // If there's no toggle button or details section, this isn't a valid fold component
        if (!toggleButton || !detailsSection) {
          return;
        }
    
        // Get button texts from data attributes
        const showText = toggleButton.dataset.showText;
        const hideText = toggleButton.dataset.hideText;
    
        // --- STATE MANAGEMENT FUNCTIONS ---
    
        const openDetails = () => {
          detailsSection.style.display = 'flex';
          toggleButton.textContent = hideText;
          toggleButton.setAttribute('aria-expanded', 'true');
          detailsSection.setAttribute('aria-hidden', 'false');
        };
    
        const closeDetails = () => {
          detailsSection.style.display = 'none';
          toggleButton.textContent = showText;
          toggleButton.setAttribute('aria-expanded', 'false');
          detailsSection.setAttribute('aria-hidden', 'true');
        };
        
        // --- INITIAL STATE ---
        
        // Start with the details section closed
        closeDetails();
    
        // --- EVENT LISTENERS ---
    
        // 1. Toggle Button (Open/Close)
        const toggleFoldHandler = (event) => {
          event.preventDefault();
          const isHidden = detailsSection.style.display === 'none';
          if (isHidden) {
            openDetails();
          } else {
            closeDetails();
          }
        };
    
        toggleButton.addEventListener('click', toggleFoldHandler);
        toggleButton.addEventListener('keydown', (event) => {
          if (event.key === 'Enter' || event.key === ' ') {
            toggleFoldHandler(event);
          }
        });
    
        // 2. Optional Close Button (Close Only)
        if (closeButton) {
          const closeFoldHandler = (event) => {
            event.preventDefault();
            closeDetails();
          };
    
          closeButton.addEventListener('click', closeFoldHandler);
          closeButton.addEventListener('keydown', (event) => {
            if (event.key === 'Enter' || event.key === ' ') {
              closeFoldHandler(event);
            }
          });
        }
      });
    }); 
  • URL: /components/raw/fold/fold.js
  • Filesystem Path: src/views/02-molecules/fold/fold.js
  • Size: 2.4 KB

No notes defined.