mypgs 1.6.0 → 2.0.0
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/AGENTS.md +2 -2
- package/assets/javascript/components/_accordion.js +2 -2
- package/assets/javascript/components/_modals.js +159 -136
- package/assets/javascript/components/_notifications.js +19 -9
- package/assets/javascript/components/_search.js +2 -2
- package/assets/javascript/components/_slides.js +66 -32
- package/assets/javascript/components/_stepTabs.js +4 -4
- package/assets/javascript/components/_steps.js +2 -2
- package/assets/javascript/components/_summary.js +2 -2
- package/assets/javascript/functions/_formValidate.js +97 -53
- package/assets/javascript/functions/_scrollY.js +10 -10
- package/assets/javascript/layout/_header.js +3 -0
- package/assets/scss/base/_html.scss +2 -2
- package/assets/scss/base/_variables.scss +2 -2
- package/assets/scss/components/_form.scss +2 -2
- package/assets/scss/components/_notification.scss +23 -30
- package/assets/scss/components/_search.scss +27 -21
- package/assets/scss/layout/_pageShell.scss +18 -15
- package/assets/scss/mixin/_mx-form.scss +7 -7
- package/{templates/html → demo}/demo.html +1 -1
- package/demo/demo.js +240 -0
- package/dist/css/index.css +86 -92
- package/dist/css/index.css.map +1 -1
- package/dist/css/index.min.css +1 -1
- package/dist/javascript/index.js +356 -255
- package/dist/javascript/index.js.map +1 -1
- package/dist/javascript/index.min.js +1 -1
- package/docs/componenti-e-markup.md +26 -27
- package/docs/components/accordion.md +61 -0
- package/docs/components/badges.md +67 -0
- package/docs/components/breadcumbs.md +43 -0
- package/docs/components/button.md +59 -0
- package/docs/components/card.md +50 -0
- package/docs/components/dropdown.md +135 -0
- package/docs/components/form.md +113 -0
- package/docs/components/logo.md +36 -0
- package/docs/components/menu.md +90 -0
- package/docs/components/modal.md +131 -0
- package/docs/components/notification.md +81 -0
- package/docs/components/search.md +117 -0
- package/docs/components/slides.md +85 -0
- package/docs/components/stepTabs.md +93 -0
- package/docs/components/steps.md +56 -0
- package/docs/components/summary.md +49 -0
- package/docs/components/table.md +42 -0
- package/docs/components/tooltip.md +53 -0
- package/docs/helper-javascript.md +68 -3
- package/docs/layout/body.md +41 -0
- package/docs/layout/flex.md +116 -0
- package/docs/layout/footer.md +71 -0
- package/docs/layout/grid.md +116 -0
- package/docs/layout/header.md +116 -0
- package/docs/layout/pageShell.md +94 -0
- package/docs/layout/section.md +69 -0
- package/docs/patterns/cookieConsent.md +89 -0
- package/package.json +2 -1
- package/scripts/generate-component-docs.js +557 -0
- package/templates/html/components/accordion.html +33 -4
- package/templates/html/components/badges.html +23 -0
- package/templates/html/components/breadcumbs.html +14 -0
- package/templates/html/components/button.html +22 -0
- package/templates/html/components/card.html +20 -0
- package/templates/html/components/dropdown.html +34 -0
- package/templates/html/components/form.html +82 -4
- package/templates/html/components/logo.html +21 -0
- package/templates/html/components/menu.html +33 -6
- package/templates/html/components/modal.html +44 -0
- package/templates/html/components/notification.html +68 -32
- package/templates/html/components/search.html +76 -0
- package/templates/html/components/slides.html +43 -0
- package/templates/html/components/stepTabs.html +47 -0
- package/templates/html/components/steps.html +24 -0
- package/templates/html/components/summary.html +27 -0
- package/templates/html/components/table.html +12 -0
- package/templates/html/components/tooltip.html +35 -0
- package/templates/html/layout/body.html +20 -5
- package/templates/html/layout/flex.html +20 -0
- package/templates/html/layout/footer.html +29 -1
- package/templates/html/layout/grid.html +20 -0
- package/templates/html/layout/header.html +41 -0
- package/templates/html/layout/pageShell.html +19 -0
- package/templates/html/layout/section.html +32 -10
- package/templates/html/patterns/cookieConsent.html +31 -0
- package/templates/react/components/form.jsx +3 -3
- package/templates/react/components/notification.jsx +4 -4
- package/templates/react/patterns/footer.jsx +1 -1
- package/templates/html/demo.js +0 -130
- /package/{templates/html → demo}/demo.css +0 -0
|
@@ -1,3 +1,50 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
/**
|
|
3
|
+
* @title Step Tabs
|
|
4
|
+
* @description Procedura guidata a schede con avanzamento sequenziale, indicatori generati, controlli di navigazione e possibilità di bloccare uno step.
|
|
5
|
+
*
|
|
6
|
+
* @pgs
|
|
7
|
+
* - stepTabs: identifica il root della procedura guidata.
|
|
8
|
+
* - stepTabs-dots: identifica il contenitore degli indicatori di avanzamento.
|
|
9
|
+
* - stepTabs-dots-dot: identifica ogni indicatore creato dinamicamente.
|
|
10
|
+
* - stepTabs-container: contiene nell'ordine tutte le schede della procedura.
|
|
11
|
+
* - tab: identifica una singola scheda navigabile.
|
|
12
|
+
* - stepTabs-prev: identifica il controllo per tornare allo step precedente.
|
|
13
|
+
* - stepTabs-restart: identifica il controllo che riavvia la procedura dal primo step.
|
|
14
|
+
* - stepTabs-next: identifica il controllo per avanzare allo step successivo.
|
|
15
|
+
*
|
|
16
|
+
* @pgs-option
|
|
17
|
+
* - tabIcon: su ogni tab usa tabIcon[classe] con una singola classe Font Awesome per l'indicatore corrispondente; il fallback è fa-circle.
|
|
18
|
+
* - step: viene applicata a ogni indicatore generato con la sintassi step[indice] per conservarne l'indice zero-based.
|
|
19
|
+
* - buttonReverse: inverte testo e icona sul pulsante successivo e appartiene al componente button.
|
|
20
|
+
*
|
|
21
|
+
* @pgs-state
|
|
22
|
+
* - is-active: identifica la scheda corrente e il relativo indicatore.
|
|
23
|
+
* - is-completed: identifica gli indicatori degli step già completati e nuovamente selezionabili.
|
|
24
|
+
* - is-locked: applicato a un tab impedisce di avanzare finché lo step resta bloccato.
|
|
25
|
+
*
|
|
26
|
+
* @api
|
|
27
|
+
* - pgs.stepTabs.init(root): inizializza le procedure non ancora registrate dentro Document o Element indicato.
|
|
28
|
+
* - pgs.stepTabs.api(element): restituisce l'istanza associata a un root stepTabs inizializzato.
|
|
29
|
+
* - instance.restart(): torna al primo tab e ripristina i blocchi dichiarati inizialmente.
|
|
30
|
+
* - instance.goTo(index, scroll): attiva il tab indicato, aggiorna controlli e indicatori e opzionalmente scorre al componente.
|
|
31
|
+
* - instance.next(): attiva il tab successivo entro i limiti disponibili.
|
|
32
|
+
* - instance.prev(): attiva il tab precedente entro i limiti disponibili.
|
|
33
|
+
* - instance.toggleLock(index, lock): aggiunge o rimuove is-locked dal tab indicato e aggiorna i controlli.
|
|
34
|
+
* - instance.refresh(): riesegue l'inizializzazione nel contenitore della procedura e restituisce l'istanza.
|
|
35
|
+
* - instance.getCurrent(): restituisce l'indice del tab corrente.
|
|
36
|
+
* - instance.getState(): restituisce un oggetto con indice corrente e numero totale di tab.
|
|
37
|
+
*
|
|
38
|
+
* @related
|
|
39
|
+
* - flexColumnElements: organizza verticalmente le aree principali del componente.
|
|
40
|
+
* - flexColumnTexts: organizza il contenuto testuale di ogni tab.
|
|
41
|
+
* - flexRow: dispone sulla stessa riga i controlli di navigazione.
|
|
42
|
+
* - button: applica lo stile standard ai controlli precedente, riavvio e successivo.
|
|
43
|
+
*
|
|
44
|
+
* @return Procedura HTML a tre schede con indicatori e controlli di navigazione.
|
|
45
|
+
*/
|
|
46
|
+
-->
|
|
47
|
+
|
|
1
48
|
<div pgs="stepTabs flexColumnElements">
|
|
2
49
|
<div pgs="stepTabs-dots" aria-label="Avanzamento"></div>
|
|
3
50
|
|
|
@@ -1,3 +1,27 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
/**
|
|
3
|
+
* @title Steps
|
|
4
|
+
* @description Elenco ordinato di passaggi che presenta numero, contenuto e linea di collegamento, aggiungendo a runtime gli elementi strutturali mancanti.
|
|
5
|
+
*
|
|
6
|
+
* @pgs
|
|
7
|
+
* - steps: identifica la lista ordinata inizializzata dal modulo steps.
|
|
8
|
+
* - steps-step: identifica ogni passaggio della sequenza.
|
|
9
|
+
* - steps-step-circle: identifica l'indicatore numerico, creato automaticamente se assente.
|
|
10
|
+
* - steps-step-content: identifica il contenuto testuale del passaggio.
|
|
11
|
+
* - steps-step-line: identifica la linea di collegamento aggiunta dinamicamente a ogni passaggio.
|
|
12
|
+
*
|
|
13
|
+
* @api
|
|
14
|
+
* - pgs.steps.init(root): inizializza le liste steps non ancora registrate dentro Document o Element indicato.
|
|
15
|
+
* - pgs.steps.api(element): restituisce l'istanza associata a un root steps inizializzato.
|
|
16
|
+
* - instance.steps(): restituisce un array con tutti gli elementi steps-step.
|
|
17
|
+
* - instance.getStep(index): restituisce lo step corrispondente all'indice indicato.
|
|
18
|
+
* - instance.getTotal(): restituisce il numero totale di step.
|
|
19
|
+
* - instance.refresh(): reinizializza la lista, ricrea gli elementi mancanti e restituisce la nuova istanza.
|
|
20
|
+
*
|
|
21
|
+
* @return Lista ordinata HTML di passaggi numerati completata dal modulo JavaScript.
|
|
22
|
+
*/
|
|
23
|
+
-->
|
|
24
|
+
|
|
1
25
|
<ol pgs="steps">
|
|
2
26
|
<li pgs="steps-step">
|
|
3
27
|
<span pgs="steps-step-circle">1</span>
|
|
@@ -1,3 +1,30 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
/**
|
|
3
|
+
* @title Summary
|
|
4
|
+
* @description Componente che limita inizialmente un testo lungo a tre righe e mostra il controllo di espansione solo quando il contenuto eccede tale altezza.
|
|
5
|
+
*
|
|
6
|
+
* @pgs
|
|
7
|
+
* - summary: identifica il root inizializzato dal modulo summary.
|
|
8
|
+
* - summary-content: identifica il contenuto misurato e ridimensionato.
|
|
9
|
+
* - summary-button: identifica il controllo per mostrare più o meno contenuto.
|
|
10
|
+
*
|
|
11
|
+
* @pgs-state
|
|
12
|
+
* - overflow: indica che il contenuto supera l'altezza contratta e richiede il controllo.
|
|
13
|
+
* - open: indica che tutto il contenuto è espanso e visibile.
|
|
14
|
+
*
|
|
15
|
+
* @api
|
|
16
|
+
* - pgs.summary.init(root): inizializza i summary non ancora registrati dentro Document o Element indicato.
|
|
17
|
+
* - pgs.summary.api(element): restituisce l'istanza associata a un root summary inizializzato.
|
|
18
|
+
* - instance.open(): espande il contenuto quando supera l'altezza contratta.
|
|
19
|
+
* - instance.close(): richiude il contenuto alla dimensione prevista.
|
|
20
|
+
* - instance.toggle(): inverte lo stato espanso o contratto.
|
|
21
|
+
* - instance.refresh(): ricalcola overflow e altezza conservando lo stato corrente.
|
|
22
|
+
* - instance.isOpen(): restituisce true quando il contenuto è espanso.
|
|
23
|
+
*
|
|
24
|
+
* @return Struttura HTML con contenuto espandibile e pulsante sincronizzato tramite ARIA.
|
|
25
|
+
*/
|
|
26
|
+
-->
|
|
27
|
+
|
|
1
28
|
<div pgs="summary">
|
|
2
29
|
<div pgs="summary-content">
|
|
3
30
|
<p>
|
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
/**
|
|
3
|
+
* @title Table
|
|
4
|
+
* @description Contenitore responsive per una tabella semantica con intestazioni e righe di dati coerenti con gli stili del design system.
|
|
5
|
+
*
|
|
6
|
+
* @pgs
|
|
7
|
+
* - table: identifica il wrapper che gestisce presentazione e scorrimento della tabella nativa.
|
|
8
|
+
*
|
|
9
|
+
* @return Tabella HTML completa racchiusa nel contenitore PGS dedicato.
|
|
10
|
+
*/
|
|
11
|
+
-->
|
|
12
|
+
|
|
1
13
|
<div pgs="table">
|
|
2
14
|
<table>
|
|
3
15
|
<thead>
|
|
@@ -1,3 +1,38 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
/**
|
|
3
|
+
* @title Tooltip
|
|
4
|
+
* @description Variante compatta del dropdown che mostra un breve pannello informativo controllato da un pulsante a icona.
|
|
5
|
+
*
|
|
6
|
+
* @pgs
|
|
7
|
+
* - tooltip: identifica il root della variante tooltip.
|
|
8
|
+
* - tooltip-button: identifica il controllo specifico del tooltip.
|
|
9
|
+
* - tooltip-content: identifica il contenuto informativo del tooltip.
|
|
10
|
+
*
|
|
11
|
+
* @pgs-option
|
|
12
|
+
* - position: può essere applicata al root condiviso con sintassi position[lato allineamento] per modificare la posizione ereditata dal dropdown.
|
|
13
|
+
*
|
|
14
|
+
* @pgs-state
|
|
15
|
+
* - open: viene gestito dal modulo dropdown sul root per mostrare o nascondere il tooltip.
|
|
16
|
+
*
|
|
17
|
+
* @api
|
|
18
|
+
* - pgs.dropdown.init(root): inizializza il tooltip perché il suo root condivide il token dropdown.
|
|
19
|
+
* - pgs.dropdown.api(element): restituisce l'istanza dropdown associata al root del tooltip.
|
|
20
|
+
* - instance.open(): apre il contenuto informativo.
|
|
21
|
+
* - instance.close(): chiude il contenuto informativo.
|
|
22
|
+
* - instance.toggle(): inverte la visibilità del tooltip.
|
|
23
|
+
* - instance.refresh(): reinizializza il contesto e ricalcola il posizionamento.
|
|
24
|
+
* - instance.isOpen(): restituisce true quando il tooltip è aperto.
|
|
25
|
+
*
|
|
26
|
+
* @related
|
|
27
|
+
* - dropdown: fornisce apertura, chiusura e posizionamento del tooltip.
|
|
28
|
+
* - dropdown-button: collega il pulsante al comportamento dropdown.
|
|
29
|
+
* - dropdown-content: collega il pannello al comportamento dropdown.
|
|
30
|
+
* - buttonMini: presenta il controllo come pulsante a icona di dimensione minima.
|
|
31
|
+
*
|
|
32
|
+
* @return Tooltip HTML composto tramite i token condivisi del dropdown.
|
|
33
|
+
*/
|
|
34
|
+
-->
|
|
35
|
+
|
|
1
36
|
<span pgs="dropdown tooltip">
|
|
2
37
|
<button pgs="dropdown-button buttonMini tooltip-button" title="open-tooltip" type="button">
|
|
3
38
|
<i class="fa-solid fa-info"></i>
|
|
@@ -1,3 +1,23 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
/**
|
|
3
|
+
* @title Body
|
|
4
|
+
* @description Documento HTML di base che abilita MyPGS, configura i metadati essenziali e applica al body le varianti condivise di sfondo, testo e titoli.
|
|
5
|
+
*
|
|
6
|
+
* @pgs
|
|
7
|
+
* - htmlBase: applica le regole fondamentali all'elemento html.
|
|
8
|
+
* - initP: abilita gli stili di layout, componenti e pattern racchiusi nel namespace MyPGS.
|
|
9
|
+
* - bodyBase: applica struttura e spaziatura di base al body.
|
|
10
|
+
* - bodyImg: abilita le regole condivise per le immagini contenute nella pagina.
|
|
11
|
+
* - bodyText: abilita tipografia e spaziatura del testo.
|
|
12
|
+
* - bodyHeading: abilita la gerarchia tipografica dei titoli.
|
|
13
|
+
*
|
|
14
|
+
* @pgs-state
|
|
15
|
+
* - darkmode: viene applicato dinamicamente a html e body per attivare il tema scuro.
|
|
16
|
+
*
|
|
17
|
+
* @return Scheletro HTML completo necessario per inizializzare la libreria MyPGS.
|
|
18
|
+
*/
|
|
19
|
+
-->
|
|
20
|
+
|
|
1
21
|
<!DOCTYPE html>
|
|
2
22
|
<html lang="it-IT" pgs="htmlBase initP">
|
|
3
23
|
|
|
@@ -9,11 +29,6 @@
|
|
|
9
29
|
<meta name="theme-color" content="">
|
|
10
30
|
<meta name="apple-mobile-web-app-status-bar-color" content="">
|
|
11
31
|
|
|
12
|
-
<!-- Fonts -->
|
|
13
|
-
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
14
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
15
|
-
<link href="https://fonts.googleapis.com/css2?family=Urbanist:ital,wght@0,100..900;1,100..900&display=swap" rel="stylesheet">
|
|
16
|
-
|
|
17
32
|
</head>
|
|
18
33
|
|
|
19
34
|
<body pgs="bodyBase bodyImg bodyText bodyHeading" >
|
|
@@ -1,3 +1,23 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
/**
|
|
3
|
+
* @title Flex
|
|
4
|
+
* @description Esempi di layout flex responsive che distribuiscono da due a sei elementi per riga adattando automaticamente la disposizione allo spazio disponibile.
|
|
5
|
+
*
|
|
6
|
+
* @pgs
|
|
7
|
+
* - flex-2: crea una distribuzione responsive fino a due elementi per riga.
|
|
8
|
+
* - flex-3: crea una distribuzione responsive fino a tre elementi per riga.
|
|
9
|
+
* - flex-4: crea una distribuzione responsive fino a quattro elementi per riga.
|
|
10
|
+
* - flex-6: crea una distribuzione responsive fino a sei elementi per riga.
|
|
11
|
+
*
|
|
12
|
+
* @related
|
|
13
|
+
* - container: definisce il contesto contenitore dell'introduzione.
|
|
14
|
+
* - flexColumnTexts: organizza verticalmente e distanzia testi e contenuti delle card.
|
|
15
|
+
* - card: rende visibili le celle dimostrative del layout flex.
|
|
16
|
+
*
|
|
17
|
+
* @return Raccolta HTML dei layout flex responsive a due, tre, quattro e sei elementi.
|
|
18
|
+
*/
|
|
19
|
+
-->
|
|
20
|
+
|
|
1
21
|
<div pgs="container flexColumnTexts">
|
|
2
22
|
<strong>Sezione standard</strong>
|
|
3
23
|
<p>Contenuto centrato dentro una sezione MyPGS.</p>
|
|
@@ -1,3 +1,31 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
/**
|
|
3
|
+
* @title Footer
|
|
4
|
+
* @description Piè di pagina completo con controllo tema, area di brand, navigazione, contenuti informativi e collegamento alle preferenze cookie.
|
|
5
|
+
*
|
|
6
|
+
* @pgs
|
|
7
|
+
* - footer: identifica il contenitore principale del piè di pagina.
|
|
8
|
+
* - footer-top: identifica la sezione superiore con brand e contenuti.
|
|
9
|
+
* - footer-top-content: identifica il layout interno responsive della sezione superiore.
|
|
10
|
+
* - footer-brand: identifica il gruppo dedicato al marchio.
|
|
11
|
+
* - footer-brand-motto: identifica il testo descrittivo associato al marchio.
|
|
12
|
+
* - footer-content: identifica una colonna informativa del footer.
|
|
13
|
+
* - footer-legal: identifica la sezione inferiore dedicata alle informazioni legali.
|
|
14
|
+
* - footer-legal-content: identifica il contenuto della sezione legale.
|
|
15
|
+
*
|
|
16
|
+
* @related
|
|
17
|
+
* - button: presenta i controlli del tema e delle preferenze cookie come pulsanti.
|
|
18
|
+
* - toggleDarkmode: collega il controllo al gestore globale del tema chiaro o scuro.
|
|
19
|
+
* - section: applica alle aree superiore e legale la struttura condivisa delle sezioni.
|
|
20
|
+
* - flex-3: distribuisce in modo responsive le colonne della parte superiore.
|
|
21
|
+
* - logo: inserisce il marchio nel footer.
|
|
22
|
+
* - logo-text: usa la variante testuale del logo.
|
|
23
|
+
* - cookieConsent-actionOpen: apre il pannello delle preferenze del pattern Cookie Consent.
|
|
24
|
+
*
|
|
25
|
+
* @return Struttura HTML completa del footer con brand, menu e area legale.
|
|
26
|
+
*/
|
|
27
|
+
-->
|
|
28
|
+
|
|
1
29
|
<footer pgs="footer">
|
|
2
30
|
<button pgs="button toggleDarkmode" type="button" aria-label="Cambia tema">
|
|
3
31
|
<i class="fa-solid fa-moon"></i>
|
|
@@ -14,7 +42,7 @@
|
|
|
14
42
|
|
|
15
43
|
<div pgs="footer-content">
|
|
16
44
|
<h2>Menu</h2>
|
|
17
|
-
<nav
|
|
45
|
+
<nav aria-label="Menu footer">
|
|
18
46
|
<ul>
|
|
19
47
|
<li><a href="/">Home</a></li>
|
|
20
48
|
<li><a href="/contatti">Contatti</a></li>
|
|
@@ -1,3 +1,23 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
/**
|
|
3
|
+
* @title Grid
|
|
4
|
+
* @description Esempi di griglie responsive che distribuiscono da due a sei colonne mantenendo gap e ridimensionamento coerenti con il design system.
|
|
5
|
+
*
|
|
6
|
+
* @pgs
|
|
7
|
+
* - grid-2: crea una griglia responsive fino a due colonne.
|
|
8
|
+
* - grid-3: crea una griglia responsive fino a tre colonne.
|
|
9
|
+
* - grid-4: crea una griglia responsive fino a quattro colonne.
|
|
10
|
+
* - grid-6: crea una griglia responsive fino a sei colonne.
|
|
11
|
+
*
|
|
12
|
+
* @related
|
|
13
|
+
* - container: definisce il contesto contenitore dell'introduzione.
|
|
14
|
+
* - flexColumnTexts: organizza e distanzia i testi introduttivi e delle card.
|
|
15
|
+
* - card: rende visibili le celle dimostrative delle griglie.
|
|
16
|
+
*
|
|
17
|
+
* @return Raccolta HTML delle griglie responsive a due, tre, quattro e sei colonne.
|
|
18
|
+
*/
|
|
19
|
+
-->
|
|
20
|
+
|
|
1
21
|
<div pgs="container flexColumnTexts">
|
|
2
22
|
<strong>Sezione standard</strong>
|
|
3
23
|
<p>Contenuto centrato dentro una sezione MyPGS.</p>
|
|
@@ -1,3 +1,44 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
/**
|
|
3
|
+
* @title Header
|
|
4
|
+
* @description Intestazione responsive che misura lo spazio disponibile, alterna contenuti desktop e mobile e integra menu, tema scuro e navigazione modale.
|
|
5
|
+
*
|
|
6
|
+
* @pgs
|
|
7
|
+
* - header: identifica l'intestazione principale osservata dal modulo JavaScript.
|
|
8
|
+
* - header-element: identifica il gruppo interno misurato per determinare il passaggio alla modalità mobile.
|
|
9
|
+
* - header-element-alwaysOn: identifica l'area iniziale sempre visibile.
|
|
10
|
+
* - header-element-onlyDesktop: identifica i contenuti mostrati soltanto quando il menu desktop è attivo.
|
|
11
|
+
* - header-element-onlyMobile: identifica i contenuti mostrati soltanto in modalità mobile.
|
|
12
|
+
* - header-element-alwaysOnLast: identifica l'area finale sempre visibile.
|
|
13
|
+
* - header-element-hamburger: identifica il gruppo della navigazione mobile.
|
|
14
|
+
* - header-element-hamburger-button: identifica il controllo hamburger specifico dell'header.
|
|
15
|
+
*
|
|
16
|
+
* @pgs-option
|
|
17
|
+
* - horizontal: dispone orizzontalmente il menu desktop correlato.
|
|
18
|
+
* - vertical: dispone verticalmente il menu mobile correlato.
|
|
19
|
+
* - menuHeader: adatta entrambi i menu al contesto dell'header.
|
|
20
|
+
* - containerPGS: sul wrapper modal usa containerPGS[header] per spostare il dialog nell'intestazione.
|
|
21
|
+
* - right: sul dialog della navigazione mobile presenta il contenuto dal lato destro.
|
|
22
|
+
*
|
|
23
|
+
* @pgs-state
|
|
24
|
+
* - mobileActive: viene applicato a header e header-element quando larghezza o viewport richiedono la navigazione mobile.
|
|
25
|
+
*
|
|
26
|
+
* @related
|
|
27
|
+
* - logo: inserisce il marchio nell'area iniziale.
|
|
28
|
+
* - logo-text: usa la variante testuale del logo.
|
|
29
|
+
* - menu: fornisce la navigazione desktop e mobile.
|
|
30
|
+
* - buttonIcon: presenta i controlli tema e hamburger come pulsanti a icona.
|
|
31
|
+
* - toggleDarkmode: collega il controllo al gestore globale del tema.
|
|
32
|
+
* - modal: fornisce apertura e chiusura della navigazione mobile.
|
|
33
|
+
* - modal-button: apre il pannello mobile.
|
|
34
|
+
* - modal-close: chiude il pannello mobile e condivide il controllo hamburger.
|
|
35
|
+
* - modal-dialog: identifica il dialog della navigazione mobile.
|
|
36
|
+
* - modal-dialog-content: identifica il pannello interno della navigazione mobile.
|
|
37
|
+
*
|
|
38
|
+
* @return Header HTML completo con navigazione desktop e pannello mobile laterale.
|
|
39
|
+
*/
|
|
40
|
+
-->
|
|
41
|
+
|
|
1
42
|
<header pgs="header">
|
|
2
43
|
<div pgs="header-element">
|
|
3
44
|
<div pgs="header-element-alwaysOn">
|
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
/**
|
|
3
|
+
* @title Page Shell
|
|
4
|
+
* @description Layout di pagina responsive che combina un contenuto principale con zero, una o due barre laterali scorrevoli, adattandone larghezza e posizione.
|
|
5
|
+
*
|
|
6
|
+
* @pgs
|
|
7
|
+
* - pageShell: identifica il contenitore che calcola la composizione di main e aside.
|
|
8
|
+
* - pageShell-aside: identifica una barra laterale posizionabile prima o dopo il contenuto.
|
|
9
|
+
* - pageShell-aside-scroll: identifica l'area interna che può restare visibile durante lo scorrimento.
|
|
10
|
+
* - pageShell-content: identifica il contenuto principale della pagina.
|
|
11
|
+
*
|
|
12
|
+
* @related
|
|
13
|
+
* - flexColumnTexts: organizza i testi contenuti nelle barre laterali.
|
|
14
|
+
* - flexColumnElements: organizza verticalmente gli elementi delle sezioni principali.
|
|
15
|
+
*
|
|
16
|
+
* @return Quattro configurazioni HTML di page shell con due, una o nessuna barra laterale.
|
|
17
|
+
*/
|
|
18
|
+
-->
|
|
19
|
+
|
|
1
20
|
<div pgs="pageShell">
|
|
2
21
|
<aside pgs="pageShell-aside">
|
|
3
22
|
<div pgs="pageShell-aside-scroll">
|
|
@@ -1,40 +1,62 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
/**
|
|
3
|
+
* @title Section
|
|
4
|
+
* @description Varianti di sezione che controllano larghezza, padding e trattamento di contenuti specifici mantenendo la spaziatura verticale condivisa.
|
|
5
|
+
*
|
|
6
|
+
* @pgs
|
|
7
|
+
* - section: identifica la sezione standard con contenuto centrato.
|
|
8
|
+
* - sectionFull: identifica una sezione estesa a tutta la larghezza disponibile.
|
|
9
|
+
* - sectionSpecificity: identifica una sezione che applica una struttura specifica al relativo figlio.
|
|
10
|
+
* - sectionSpecificity-child: identifica il contenuto figlio gestito dalla variante sectionSpecificity.
|
|
11
|
+
* - sectionMax: identifica una sezione con larghezza massima estesa.
|
|
12
|
+
* - sectionNoPadding: identifica una sezione priva del padding standard.
|
|
13
|
+
*
|
|
14
|
+
* @related
|
|
15
|
+
* - flexColumnSections: distanzia verticalmente tutte le sezioni dell'esempio.
|
|
16
|
+
* - flexColumnElements: organizza verticalmente gli elementi principali di ogni sezione.
|
|
17
|
+
* - flexColumnTexts: organizza e distanzia i contenuti interni.
|
|
18
|
+
* - card-img: riutilizza il trattamento delle immagini card nelle sezioni dimostrative.
|
|
19
|
+
* - imgCover: adatta le immagini alla larghezza della sezione.
|
|
20
|
+
*
|
|
21
|
+
* @return Raccolta HTML delle varianti di section disponibili.
|
|
22
|
+
*/
|
|
23
|
+
-->
|
|
24
|
+
|
|
1
25
|
<div pgs="flexColumnSections">
|
|
2
26
|
<section pgs="section flexColumnElements">
|
|
3
|
-
<div pgs="
|
|
27
|
+
<div pgs="flexColumnTexts">
|
|
4
28
|
<strong>Sezione standard</strong>
|
|
5
29
|
<p>Contenuto centrato dentro una sezione MyPGS.</p>
|
|
6
30
|
</div>
|
|
7
31
|
</section>
|
|
8
32
|
|
|
9
33
|
<section pgs="sectionFull flexColumnElements">
|
|
10
|
-
<div pgs="
|
|
34
|
+
<div pgs="flexColumnTexts">
|
|
11
35
|
<strong>Sezione full-width</strong>
|
|
12
36
|
<p>Contenuto centrato dentro una sezione MyPGS.</p>
|
|
13
37
|
</div>
|
|
14
38
|
</section>
|
|
15
39
|
|
|
16
40
|
<section pgs="sectionSpecificity flexColumnElements">
|
|
17
|
-
<div pgs="
|
|
18
|
-
<
|
|
19
|
-
<p>Contenuto centrato dentro una sezione MyPGS.</p>
|
|
41
|
+
<div pgs="flexColumnTexts">
|
|
42
|
+
<img pgs="card-img imgCover" src="https://placehold.co/800x200?text=Hero" alt="Immagine segnaposto">
|
|
20
43
|
</div>
|
|
21
|
-
<div pgs="sectionSpecificity-child
|
|
44
|
+
<div pgs="sectionSpecificity-child flexColumnTexts">
|
|
22
45
|
<strong>Sezione specificità-child</strong>
|
|
23
46
|
<p>Contenuto centrato dentro una sezione MyPGS.</p>
|
|
24
47
|
</div>
|
|
25
48
|
</section>
|
|
26
49
|
|
|
27
50
|
<section pgs="sectionMax flexColumnElements" style="background-color: var(--color-primary-soft)">
|
|
28
|
-
<div pgs="
|
|
51
|
+
<div pgs="flexColumnTexts">
|
|
29
52
|
<strong>Sezione max-width</strong>
|
|
30
53
|
<p>Contenuto centrato dentro una sezione MyPGS.</p>
|
|
31
54
|
</div>
|
|
32
55
|
</section>
|
|
33
56
|
|
|
34
57
|
<section pgs="sectionNoPadding flexColumnElements">
|
|
35
|
-
<div pgs="
|
|
36
|
-
<
|
|
37
|
-
<p>Contenuto centrato dentro una sezione MyPGS.</p>
|
|
58
|
+
<div pgs="flexColumnTexts">
|
|
59
|
+
<img pgs="card-img imgCover" src="https://placehold.co/800x500?text=HI!" alt="Immagine segnaposto">
|
|
38
60
|
</div>
|
|
39
61
|
</section>
|
|
40
62
|
</div>
|
|
@@ -1,3 +1,34 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
/**
|
|
3
|
+
* @title Cookie Consent
|
|
4
|
+
* @description Pattern accessibile per raccogliere e memorizzare il consenso ai cookie analitici, applicare le preferenze e caricare Google Analytics solo quando autorizzato.
|
|
5
|
+
*
|
|
6
|
+
* @pgs
|
|
7
|
+
* - cookieConsent: identifica il pannello principale inizializzato dal pattern JavaScript.
|
|
8
|
+
* - cookieConsent-panel: identifica il gruppo delle preferenze configurabili.
|
|
9
|
+
* - cookieConsent-featureEssential: identifica la riga dei cookie tecnici sempre attivi.
|
|
10
|
+
* - cookieConsent-panel-badge: identifica l'indicatore dello stato dei cookie tecnici.
|
|
11
|
+
* - cookieConsent-featureAnalytics: identifica la riga dei cookie analitici opzionali.
|
|
12
|
+
* - cookieConsent-toggleAnalytics: identifica il controllo che abilita il consenso analytics.
|
|
13
|
+
* - cookieConsent-actionReject: applica le preferenze selezionate senza accettare automaticamente analytics.
|
|
14
|
+
* - cookieConsent-actionAccept: accetta tutti i cookie disponibili.
|
|
15
|
+
* - cookieConsent-actionOpen: identifica controlli esterni che riaprono il pannello delle preferenze.
|
|
16
|
+
* - cookieConsent-gaUnavailable: token runtime applicato al root quando manca un measurement ID utilizzabile.
|
|
17
|
+
* - cookieConsent-accepted: token runtime applicato al root quando analytics è consentito.
|
|
18
|
+
* - cookieConsent-declined: token runtime applicato al root quando analytics non è consentito.
|
|
19
|
+
*
|
|
20
|
+
* @related
|
|
21
|
+
* - flexColumn: organizza verticalmente il pannello delle preferenze.
|
|
22
|
+
* - flexRow: dispone righe e azioni del pannello.
|
|
23
|
+
* - nowrap: impedisce il ritorno a capo nella riga dei cookie essenziali.
|
|
24
|
+
* - toggle: presenta il consenso analytics come interruttore.
|
|
25
|
+
* - button: presenta l'azione di selezione con lo stile standard.
|
|
26
|
+
* - buttonStrong: presenta l'accettazione completa come azione primaria.
|
|
27
|
+
*
|
|
28
|
+
* @return Pannello HTML di consenso con preferenze tecniche e analytics, azioni e attributi accessibili.
|
|
29
|
+
*/
|
|
30
|
+
-->
|
|
31
|
+
|
|
1
32
|
<section id="pgs-cookieConsent" pgs="cookieConsent" role="dialog" aria-modal="true" data-ga-id="G-XXXXXXXXXX" hidden tabindex="-1">
|
|
2
33
|
<p><i class="fa-duotone fa-solid fa-cookie-bite"></i> Cookie e privacy <br></p>
|
|
3
34
|
<h2>La tua privacy prima di tutto</h2>
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
export default function Form() {
|
|
2
2
|
return (
|
|
3
|
-
<form pgs="form" action="#" method="post">
|
|
3
|
+
<form pgs="form formValidate" action="#" method="post">
|
|
4
4
|
<label pgs="label" htmlFor="form-name">
|
|
5
5
|
Nome
|
|
6
6
|
</label>
|
|
7
|
-
<input id="form-name" pgs="input" type="text" name="name" placeholder="Mario Rossi" required
|
|
7
|
+
<input id="form-name" pgs="input" pgs-option="message[Inserisci il nome]" type="text" name="name" placeholder="Mario Rossi" required />
|
|
8
8
|
|
|
9
9
|
<label pgs="label" htmlFor="form-email">
|
|
10
10
|
Email
|
|
11
11
|
</label>
|
|
12
|
-
<input id="form-email" pgs="input" type="email" name="email" placeholder="nome@example.com" required
|
|
12
|
+
<input id="form-email" pgs="input" pgs-option="message[Inserisci una email valida]" type="email" name="email" placeholder="nome@example.com" required />
|
|
13
13
|
|
|
14
14
|
<label pgs="label" htmlFor="form-message">
|
|
15
15
|
Messaggio
|
|
@@ -9,7 +9,7 @@ const notificationData = {
|
|
|
9
9
|
};
|
|
10
10
|
|
|
11
11
|
const toastData = {
|
|
12
|
-
title: "
|
|
12
|
+
title: "Benvenuto",
|
|
13
13
|
message: "Messaggio",
|
|
14
14
|
element: "toast",
|
|
15
15
|
type: "info",
|
|
@@ -22,10 +22,10 @@ export default function Notification() {
|
|
|
22
22
|
return (
|
|
23
23
|
<>
|
|
24
24
|
<div pgs="notification" aria-live="polite"></div>
|
|
25
|
-
<div pgs="toast" aria-live="polite"></div>
|
|
25
|
+
<div pgs="notification" pgs-option="toast" aria-live="polite"></div>
|
|
26
26
|
|
|
27
|
-
<div pgs="hidden notificationTrigger"
|
|
28
|
-
<div pgs="hidden notificationTrigger"
|
|
27
|
+
<div pgs="hidden notificationTrigger" pgs-option={`notification[${JSON.stringify(notificationData)}]`}></div>
|
|
28
|
+
<div pgs="hidden notificationTrigger" pgs-option={`notification[${JSON.stringify(toastData)}]`}></div>
|
|
29
29
|
</>
|
|
30
30
|
);
|
|
31
31
|
}
|
package/templates/html/demo.js
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
const templateFiles = [
|
|
3
|
-
"components/summary.html",
|
|
4
|
-
"components/menu.html",
|
|
5
|
-
"components/tooltip.html",
|
|
6
|
-
"components/modal.html",
|
|
7
|
-
"components/stepTabs.html",
|
|
8
|
-
"components/accordion.html",
|
|
9
|
-
"components/badges.html",
|
|
10
|
-
"components/breadcumbs.html",
|
|
11
|
-
"components/button.html",
|
|
12
|
-
"components/card.html",
|
|
13
|
-
"components/dropdown.html",
|
|
14
|
-
"components/tooltip.html",
|
|
15
|
-
"components/form.html",
|
|
16
|
-
"components/logo.html",
|
|
17
|
-
"components/search.html",
|
|
18
|
-
"components/slides.html",
|
|
19
|
-
"components/steps.html",
|
|
20
|
-
"components/table.html",
|
|
21
|
-
"components/notification.html",
|
|
22
|
-
"layout/body.html",
|
|
23
|
-
"layout/section.html",
|
|
24
|
-
"layout/flex.html",
|
|
25
|
-
"layout/grid.html",
|
|
26
|
-
"layout/pageShell.html",
|
|
27
|
-
"layout/footer.html",
|
|
28
|
-
"layout/header.html",
|
|
29
|
-
"patterns/cookieConsent.html",
|
|
30
|
-
];
|
|
31
|
-
|
|
32
|
-
function getTemplateTitle(path) {
|
|
33
|
-
return path.replace(".html", "").replace("/", " / ")
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
function renderSourceTemplate(section, html) {
|
|
37
|
-
const pre = document.createElement("pre");
|
|
38
|
-
const code = document.createElement("code");
|
|
39
|
-
code.textContent = html.trim();
|
|
40
|
-
pre.append(code);
|
|
41
|
-
section.append(pre);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
function renderTemplate(section, path, html) {
|
|
45
|
-
const content = document.createElement("div");
|
|
46
|
-
content.setAttribute("pgs", "container flexColumnElements");
|
|
47
|
-
content.innerHTML = html;
|
|
48
|
-
section.append(content);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
function renderLayout(root, path, html) {
|
|
52
|
-
const template = document.createElement("template");
|
|
53
|
-
template.innerHTML = html.trim();
|
|
54
|
-
root.append(template.content.cloneNode(true));
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
function renderTitle(section, path) {
|
|
58
|
-
const title = document.createElement("p");
|
|
59
|
-
title.classList.add("template-title");
|
|
60
|
-
title.innerHTML = "<strong>" + getTemplateTitle(path) + "</strong>";
|
|
61
|
-
section.append(title);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
async function loadTemplate(path) {
|
|
65
|
-
const response = await fetch(path);
|
|
66
|
-
if (!response.ok) throw new Error(`${path}: ${response.status}`);
|
|
67
|
-
return response.text();
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
function loadPgsJavascript() {
|
|
71
|
-
const script = document.createElement("script");
|
|
72
|
-
script.src = "../../dist/javascript/index.js";
|
|
73
|
-
document.body.append(script);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
async function bootDemo() {
|
|
77
|
-
const BEEFORE = document.getElementById("templates-demo-before");
|
|
78
|
-
const MAIN = document.getElementById("templates-demo-main");
|
|
79
|
-
const AFTER = document.getElementById("templates-demo-after");
|
|
80
|
-
|
|
81
|
-
for (const path of templateFiles) {
|
|
82
|
-
const isHeader = path === "layout/header.html";
|
|
83
|
-
const isfooter = path === "layout/footer.html";
|
|
84
|
-
const isBody = path === "layout/body.html";
|
|
85
|
-
|
|
86
|
-
if (isHeader || isfooter) {
|
|
87
|
-
try {
|
|
88
|
-
const html = await loadTemplate(path);
|
|
89
|
-
renderLayout(isHeader ? BEEFORE : AFTER, path, html);
|
|
90
|
-
} catch (error) {
|
|
91
|
-
const message = document.createElement("p");
|
|
92
|
-
message.textContent = `Template non caricato: ${error.message}`;
|
|
93
|
-
layoutRoot.append(message);
|
|
94
|
-
}
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
const section = document.createElement("section");
|
|
99
|
-
section.setAttribute("pgs", "section flexColumnElements");
|
|
100
|
-
section.dataset.template = path;
|
|
101
|
-
renderTitle(section, path);
|
|
102
|
-
|
|
103
|
-
if (isBody) {
|
|
104
|
-
const html = await loadTemplate(path);
|
|
105
|
-
renderSourceTemplate(section, html);
|
|
106
|
-
MAIN.append(section);
|
|
107
|
-
continue
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
try {
|
|
111
|
-
const html = await loadTemplate(path);
|
|
112
|
-
renderTemplate(section, path, html);
|
|
113
|
-
} catch (error) {
|
|
114
|
-
const message = document.createElement("p");
|
|
115
|
-
message.textContent = `Template non caricato: ${error.message}`;
|
|
116
|
-
section.append(message);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
MAIN.append(section);
|
|
120
|
-
|
|
121
|
-
if (path == "layout/section.html" || path == "layout/pageShell.html") {
|
|
122
|
-
section.style.display = "contents";
|
|
123
|
-
Array.from(section.children).forEach(c => c.style.width = "100%");
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
loadPgsJavascript();
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
bootDemo();
|
|
File without changes
|