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.
Files changed (88) hide show
  1. package/AGENTS.md +2 -2
  2. package/assets/javascript/components/_accordion.js +2 -2
  3. package/assets/javascript/components/_modals.js +159 -136
  4. package/assets/javascript/components/_notifications.js +19 -9
  5. package/assets/javascript/components/_search.js +2 -2
  6. package/assets/javascript/components/_slides.js +66 -32
  7. package/assets/javascript/components/_stepTabs.js +4 -4
  8. package/assets/javascript/components/_steps.js +2 -2
  9. package/assets/javascript/components/_summary.js +2 -2
  10. package/assets/javascript/functions/_formValidate.js +97 -53
  11. package/assets/javascript/functions/_scrollY.js +10 -10
  12. package/assets/javascript/layout/_header.js +3 -0
  13. package/assets/scss/base/_html.scss +2 -2
  14. package/assets/scss/base/_variables.scss +2 -2
  15. package/assets/scss/components/_form.scss +2 -2
  16. package/assets/scss/components/_notification.scss +23 -30
  17. package/assets/scss/components/_search.scss +27 -21
  18. package/assets/scss/layout/_pageShell.scss +18 -15
  19. package/assets/scss/mixin/_mx-form.scss +7 -7
  20. package/{templates/html → demo}/demo.html +1 -1
  21. package/demo/demo.js +240 -0
  22. package/dist/css/index.css +86 -92
  23. package/dist/css/index.css.map +1 -1
  24. package/dist/css/index.min.css +1 -1
  25. package/dist/javascript/index.js +356 -255
  26. package/dist/javascript/index.js.map +1 -1
  27. package/dist/javascript/index.min.js +1 -1
  28. package/docs/componenti-e-markup.md +26 -27
  29. package/docs/components/accordion.md +61 -0
  30. package/docs/components/badges.md +67 -0
  31. package/docs/components/breadcumbs.md +43 -0
  32. package/docs/components/button.md +59 -0
  33. package/docs/components/card.md +50 -0
  34. package/docs/components/dropdown.md +135 -0
  35. package/docs/components/form.md +113 -0
  36. package/docs/components/logo.md +36 -0
  37. package/docs/components/menu.md +90 -0
  38. package/docs/components/modal.md +131 -0
  39. package/docs/components/notification.md +81 -0
  40. package/docs/components/search.md +117 -0
  41. package/docs/components/slides.md +85 -0
  42. package/docs/components/stepTabs.md +93 -0
  43. package/docs/components/steps.md +56 -0
  44. package/docs/components/summary.md +49 -0
  45. package/docs/components/table.md +42 -0
  46. package/docs/components/tooltip.md +53 -0
  47. package/docs/helper-javascript.md +68 -3
  48. package/docs/layout/body.md +41 -0
  49. package/docs/layout/flex.md +116 -0
  50. package/docs/layout/footer.md +71 -0
  51. package/docs/layout/grid.md +116 -0
  52. package/docs/layout/header.md +116 -0
  53. package/docs/layout/pageShell.md +94 -0
  54. package/docs/layout/section.md +69 -0
  55. package/docs/patterns/cookieConsent.md +89 -0
  56. package/package.json +2 -1
  57. package/scripts/generate-component-docs.js +557 -0
  58. package/templates/html/components/accordion.html +33 -4
  59. package/templates/html/components/badges.html +23 -0
  60. package/templates/html/components/breadcumbs.html +14 -0
  61. package/templates/html/components/button.html +22 -0
  62. package/templates/html/components/card.html +20 -0
  63. package/templates/html/components/dropdown.html +34 -0
  64. package/templates/html/components/form.html +82 -4
  65. package/templates/html/components/logo.html +21 -0
  66. package/templates/html/components/menu.html +33 -6
  67. package/templates/html/components/modal.html +44 -0
  68. package/templates/html/components/notification.html +68 -32
  69. package/templates/html/components/search.html +76 -0
  70. package/templates/html/components/slides.html +43 -0
  71. package/templates/html/components/stepTabs.html +47 -0
  72. package/templates/html/components/steps.html +24 -0
  73. package/templates/html/components/summary.html +27 -0
  74. package/templates/html/components/table.html +12 -0
  75. package/templates/html/components/tooltip.html +35 -0
  76. package/templates/html/layout/body.html +20 -5
  77. package/templates/html/layout/flex.html +20 -0
  78. package/templates/html/layout/footer.html +29 -1
  79. package/templates/html/layout/grid.html +20 -0
  80. package/templates/html/layout/header.html +41 -0
  81. package/templates/html/layout/pageShell.html +19 -0
  82. package/templates/html/layout/section.html +32 -10
  83. package/templates/html/patterns/cookieConsent.html +31 -0
  84. package/templates/react/components/form.jsx +3 -3
  85. package/templates/react/components/notification.jsx +4 -4
  86. package/templates/react/patterns/footer.jsx +1 -1
  87. package/templates/html/demo.js +0 -130
  88. /package/{templates/html → demo}/demo.css +0 -0
@@ -0,0 +1,135 @@
1
+ <!-- File generato automaticamente da templates/html/components/dropdown.html. Modificare templates/html/components/dropdown.html e rieseguire npm run docs:generate. -->
2
+
3
+ # Dropdown
4
+
5
+ Componente a comparsa che associa un controllo a un contenuto posizionato rispetto al trigger e gestisce apertura, chiusura, click esterno ed Escape.
6
+
7
+ ## PGS
8
+
9
+ - `dropdown`: identifica il contenitore inizializzato dal modulo dropdown.
10
+ - `dropdown-button`: identifica il controllo che apre o chiude il contenuto.
11
+ - `dropdown-content`: identifica il pannello posizionato rispetto al controllo.
12
+
13
+ ## PGS Options
14
+
15
+ - `position`: configura il root come position[lato allineamento]; lato accetta top, right, bottom o left e l'allineamento compatibile accetta top, right, bottom, left o center. Il valore predefinito è bottom center.
16
+ - `buttonReverse`: inverte testo e icona sui pulsanti di esempio e appartiene al componente button.
17
+
18
+ ## PGS States
19
+
20
+ - `open`: indica che il dropdown è aperto e che il contenuto è visibile.
21
+
22
+ ## API JavaScript
23
+
24
+ - `pgs.dropdown.init(root)`: inizializza i dropdown non ancora registrati dentro Document o Element indicato.
25
+ - `pgs.dropdown.api(element)`: restituisce l'istanza associata a un root dropdown inizializzato.
26
+ - `instance.open()`: apre il dropdown, chiudendo eventuali altri dropdown aperti.
27
+ - `instance.close()`: chiude il dropdown corrente.
28
+ - `instance.toggle()`: inverte lo stato aperto o chiuso.
29
+ - `instance.refresh()`: reinizializza il contesto e ricalcola il posizionamento del contenuto.
30
+ - `instance.isOpen()`: restituisce true quando il dropdown è aperto.
31
+
32
+ ## Elementi correlati
33
+
34
+ - `flexRow`: dispone i diversi esempi di posizionamento sulla stessa riga flessibile.
35
+ - `button`: applica lo stile standard ai controlli del dropdown.
36
+
37
+ ## Output
38
+
39
+ Serie di dropdown HTML che dimostra le direzioni di posizionamento supportate.
40
+
41
+ ## Esempio
42
+
43
+ ```html
44
+ <div pgs="flexRow">
45
+
46
+ <span pgs="dropdown">
47
+ <button pgs="dropdown-button button" pgs-option="buttonReverse" type="button">
48
+ Bottom center
49
+ <i class="fa-solid fa-chevron-down" aria-hidden="true"></i>
50
+ </button>
51
+
52
+ <div pgs="dropdown-content">
53
+ Contenuto bottom center
54
+ </div>
55
+ </span>
56
+
57
+ <span pgs="dropdown" pgs-option="position[top left]">
58
+ <button pgs="dropdown-button button" pgs-option="buttonReverse" type="button">
59
+ Top left
60
+ <i class="fa-solid fa-chevron-down" aria-hidden="true"></i>
61
+ </button>
62
+
63
+ <div pgs="dropdown-content">
64
+ Contenuto top left
65
+ </div>
66
+ </span>
67
+
68
+ <span pgs="dropdown" pgs-option="position[top center]">
69
+ <button pgs="dropdown-button button" pgs-option="buttonReverse" type="button">
70
+ Top center
71
+ <i class="fa-solid fa-chevron-down" aria-hidden="true"></i>
72
+ </button>
73
+
74
+ <div pgs="dropdown-content">
75
+ Contenuto top center
76
+ </div>
77
+ </span>
78
+
79
+ <span pgs="dropdown" pgs-option="position[top right]">
80
+ <button pgs="dropdown-button button" pgs-option="buttonReverse" type="button">
81
+ Top right
82
+ <i class="fa-solid fa-chevron-down" aria-hidden="true"></i>
83
+ </button>
84
+
85
+ <div pgs="dropdown-content">
86
+ Contenuto top right
87
+ </div>
88
+ </span>
89
+
90
+ <span pgs="dropdown" pgs-option="position[bottom left]">
91
+ <button pgs="dropdown-button button" pgs-option="buttonReverse" type="button">
92
+ Bottom left
93
+ <i class="fa-solid fa-chevron-down" aria-hidden="true"></i>
94
+ </button>
95
+
96
+ <div pgs="dropdown-content">
97
+ Contenuto bottom left
98
+ </div>
99
+ </span>
100
+
101
+ <span pgs="dropdown" pgs-option="position[bottom right]">
102
+ <button pgs="dropdown-button button" pgs-option="buttonReverse" type="button">
103
+ Bottom right
104
+ <i class="fa-solid fa-chevron-down" aria-hidden="true"></i>
105
+ </button>
106
+
107
+ <div pgs="dropdown-content">
108
+ Contenuto bottom right
109
+ </div>
110
+ </span>
111
+
112
+ <span pgs="dropdown" pgs-option="position[left center]">
113
+ <button pgs="dropdown-button button" pgs-option="buttonReverse" type="button">
114
+ Left center
115
+ <i class="fa-solid fa-chevron-down" aria-hidden="true"></i>
116
+ </button>
117
+
118
+ <div pgs="dropdown-content">
119
+ Contenuto left center
120
+ </div>
121
+ </span>
122
+
123
+ <span pgs="dropdown" pgs-option="position[right center]">
124
+ <button pgs="dropdown-button button" pgs-option="buttonReverse" type="button">
125
+ Right center
126
+ <i class="fa-solid fa-chevron-down" aria-hidden="true"></i>
127
+ </button>
128
+
129
+ <div pgs="dropdown-content">
130
+ Contenuto right center
131
+ </div>
132
+ </span>
133
+
134
+ </div>
135
+ ```
@@ -0,0 +1,113 @@
1
+ <!-- File generato automaticamente da templates/html/components/form.html. Modificare templates/html/components/form.html e rieseguire npm run docs:generate. -->
2
+
3
+ # Form
4
+
5
+ Struttura di modulo con etichette, campi testuali, textarea e controllo toggle compatibile con i vincoli HTML e con regole personalizzate di PGS_formValidate.
6
+
7
+ ## PGS
8
+
9
+ - `form`: identifica il contenitore del modulo e applica il layout dei campi.
10
+ - `formValidate`: abilita gli stili associati agli stati di validazione gestiti dalla utility JavaScript.
11
+ - `label`: identifica le etichette associate ai controlli.
12
+ - `input`: applica lo stile condiviso agli input testuali.
13
+ - `textarea`: applica lo stile condiviso all'area di testo.
14
+ - `toggle`: presenta una checkbox come controllo a due stati.
15
+
16
+ ## PGS Options
17
+
18
+ - `message`: definisce il messaggio specifico del campo con la sintassi message[Testo del messaggio].
19
+ - `error`: viene applicata a runtime al form e ai campi che non superano la validazione.
20
+ - `success`: viene applicata a runtime al form quando la validazione ha esito positivo.
21
+
22
+ ## API JavaScript
23
+
24
+ - `new pgs.formValidate(form, options)`: crea una utility associata direttamente al form, aggiunge automaticamente novalidate e accetta fieldError, fieldsError e success in options.message; i messaggi restano modificabili tramite instance.message.
25
+ - `instance.validator(callback, eventName)`: intercetta l'evento indicato, previene il comportamento predefinito, valida il form, mostra il messaggio di successo e richiama callback solo quando è valido; eventName usa submit come valore predefinito.
26
+ - `instance.validate()`: valida i campi required, aggiorna gli attributi di stato e restituisce true o false.
27
+ - `instance.success(text)`: valida il form e mostra un toast positivo quando non sono presenti errori.
28
+ - `instance.addNewRule(rule)`: aggiunge una funzione che restituisce uno o più campi non validi; validate applica automaticamente addFieldError a ciascun campo.
29
+ - `instance.addFieldError(field, index, total)`: marca un campo come non valido; mostra il messaggio specifico per un solo errore o un messaggio riepilogativo per più errori.
30
+ - `instance.removeFieldError(field)`: rimuove lo stato di errore dal campo indicato.
31
+
32
+ ## Elementi correlati
33
+
34
+ - `buttonStrong`: presenta l'invio del modulo come azione primaria.
35
+
36
+ ## Output
37
+
38
+ Modulo HTML completo con campi required e script di esempio per una regola personalizzata, la validazione e il messaggio di successo.
39
+
40
+ ## Esempio
41
+
42
+ ```html
43
+ <form pgs="form formValidate" action="#" method="post">
44
+ <label pgs="label" for="form-name">
45
+ Nome
46
+ </label>
47
+ <input id="form-name" pgs="input" pgs-option="message[Inserisci il nome]" type="text" name="name" placeholder="Mario Rossi" required>
48
+
49
+ <label pgs="label" for="form-email">
50
+ Email
51
+ </label>
52
+ <input id="form-email" pgs="input" pgs-option="message[Inserisci una email valida]" type="email" name="email" placeholder="nome@example.com" required>
53
+
54
+ <label pgs="label" for="form-password">
55
+ Password
56
+ </label>
57
+ <input id="form-password" pgs="input" pgs-option="message[Inserisci una password]" type="password" name="password" autocomplete="new-password" required>
58
+
59
+ <label pgs="label" for="form-confirm-password">
60
+ Conferma password
61
+ </label>
62
+ <input id="form-confirm-password" pgs="input" pgs-option="message[Conferma la password]" type="password" name="confirmPassword" autocomplete="new-password" required>
63
+
64
+ <label pgs="label" for="form-message">
65
+ Messaggio
66
+ </label>
67
+ <textarea id="form-message" pgs="textarea" name="message" rows="5" placeholder="Scrivi il messaggio" required></textarea>
68
+
69
+ <label pgs="toggle">
70
+ <span>Accetto la privacy policy</span>
71
+ <input type="checkbox" name="privacy" required>
72
+ </label>
73
+
74
+ <button pgs="buttonStrong" type="submit">
75
+ <i class="fa-solid fa-paper-plane" aria-hidden="true"></i>
76
+ Invia
77
+ </button>
78
+ </form>
79
+
80
+ <script type="module">
81
+ import { pgs } from "mypgs";
82
+
83
+ const form = pgs(document).querySelector("form");
84
+
85
+ const password = form.querySelector('input[name="password"]');
86
+ const confirmPassword = form.querySelector('input[name="confirmPassword"]');
87
+ if (!password || !confirmPassword) return;
88
+
89
+ const formValidate = new pgs.formValidate(form, {
90
+ message: {
91
+ fieldError: "Completa questo campo",
92
+ fieldsError: "Completa tutti i campi obbligatori",
93
+ success: "Inviato con successo"
94
+ }
95
+ });
96
+
97
+ //== new roules
98
+ formValidate.addNewRule(() => {
99
+ if (password.value && confirmPassword.value && password.value !== confirmPassword.value) {
100
+ pgs(confirmPassword).option.setValueBrackets("message", "Le password non coincidono");
101
+ return [confirmPassword, password];
102
+ }
103
+ });
104
+
105
+ //== validate
106
+ formValidate.validator(event => {
107
+ const values = Object.fromEntries(new FormData(form));
108
+
109
+ // Sostituisci questo log con l'invio dei dati al tuo backend.
110
+ console.log(values);
111
+ }, "submit");
112
+ </script>
113
+ ```
@@ -0,0 +1,36 @@
1
+ <!-- File generato automaticamente da templates/html/components/logo.html. Modificare templates/html/components/logo.html e rieseguire npm run docs:generate. -->
2
+
3
+ # Logo
4
+
5
+ Componente per mostrare un logo grafico o testuale, con supporto alle varianti dell'immagine legate al tema scuro.
6
+
7
+ ## PGS
8
+
9
+ - `logo`: identifica il collegamento contenitore del marchio.
10
+ - `logo-image`: identifica l'immagine grafica del logo.
11
+ - `logo-text`: identifica la variante testuale del marchio.
12
+
13
+ ## PGS Options
14
+
15
+ - `logoDarkmode`: inverte l'immagine del logo quando lo stato globale darkmode è attivo.
16
+ - `logoDarkmodeFixed`: mantiene applicata l'inversione dell'immagine indipendentemente dal tema corrente.
17
+
18
+ ## PGS States
19
+
20
+ - `darkmode`: stato globale applicato al documento che attiva la variante logoDarkmode.
21
+
22
+ ## Output
23
+
24
+ Esempi HTML del logo grafico sensibile al tema e del logo testuale.
25
+
26
+ ## Esempio
27
+
28
+ ```html
29
+ <a aria-label="Logo" pgs="logo" pgs-option="logoDarkmode" href="/">
30
+ <img pgs="logo-image" src="https://placehold.co/240x80?text=MyPGS" alt="MyPGS">
31
+ </a>
32
+
33
+ <a aria-label="Logo testuale" pgs="logo" href="/">
34
+ <span pgs="logo-text">MyPGS</span>
35
+ </a>
36
+ ```
@@ -0,0 +1,90 @@
1
+ <!-- File generato automaticamente da templates/html/components/menu.html. Modificare templates/html/components/menu.html e rieseguire npm run docs:generate. -->
2
+
3
+ # Menu
4
+
5
+ Navigazione orizzontale o verticale che trasforma le voci con sottomenu in dropdown accessibili e inizializzati automaticamente.
6
+
7
+ ## PGS
8
+
9
+ - `menu`: identifica il contenitore di navigazione elaborato dal modulo menu.
10
+ - `menu-buttonIcon`: identifica il controllo creato dinamicamente accanto alle voci con sottomenu.
11
+
12
+ ## PGS Options
13
+
14
+ - `horizontal`: dispone il menu e i suoi elementi in orizzontale.
15
+ - `vertical`: dispone il menu e i suoi elementi in verticale.
16
+ - `menuHeader`: adatta spaziature e comportamento del menu quando è inserito nell'header.
17
+ - `position`: viene impostata come position[bottom right] sui dropdown creati per i sottomenu.
18
+
19
+ ## PGS States
20
+
21
+ - `open`: indica il sottomenu trasformato in dropdown attualmente aperto.
22
+
23
+ ## API JavaScript
24
+
25
+ - `pgs.menu.init(root)`: inizializza i menu non ancora registrati dentro Document o Element indicato e prepara i sottomenu.
26
+ - `pgs.menu.api(element)`: restituisce l'istanza associata a un root menu inizializzato.
27
+ - `instance.refresh()`: riesegue l'inizializzazione nel contenitore del menu e restituisce l'istanza.
28
+
29
+ ## Elementi correlati
30
+
31
+ - `dropdown`: viene aggiunto dinamicamente alle voci che contengono una lista annidata.
32
+ - `dropdown-button`: identifica il controllo dinamico del sottomenu.
33
+ - `buttonNohover`: neutralizza lo stile hover del controllo dinamico.
34
+ - `dropdown-content`: identifica la lista annidata mostrata come pannello dropdown.
35
+
36
+ ## Output
37
+
38
+ Due strutture nav complete per le varianti orizzontale e verticale del menu.
39
+
40
+ ## Esempio
41
+
42
+ ```html
43
+ <nav pgs="menu" pgs-option="horizontal" aria-label="Menu orizzontale">
44
+ <ul>
45
+ <li>
46
+ <a href="/" aria-current="page">
47
+ <i class="fa-solid fa-house" aria-hidden="true"></i>
48
+ <span>Home</span>
49
+ </a>
50
+ </li>
51
+ <li>
52
+ <a href="/servizi">
53
+ <i class="fa-solid fa-layer-group" aria-hidden="true"></i>
54
+ <span>Servizi</span>
55
+ </a>
56
+ <ul>
57
+ <li><a href="/servizi/uno">Servizio uno</a></li>
58
+ <li><a href="/servizi/due">Servizio due</a></li>
59
+ </ul>
60
+ </li>
61
+ </ul>
62
+ </nav>
63
+
64
+ <nav pgs="menu" pgs-option="vertical" aria-label="Menu verticale">
65
+ <ul>
66
+ <li>
67
+ <a href="/" aria-current="page">
68
+ <i class="fa-solid fa-house" aria-hidden="true"></i>
69
+ <span>Home</span>
70
+ </a>
71
+ </li>
72
+ <li>
73
+ <a href="/servizi">
74
+ <i class="fa-solid fa-layer-group" aria-hidden="true"></i>
75
+ <span>Servizi</span>
76
+ </a>
77
+ <ul>
78
+ <li><a href="/servizi/uno">Servizio uno</a></li>
79
+ <li><a href="/servizi/due">Servizio due</a></li>
80
+ </ul>
81
+ </li>
82
+ <li>
83
+ <a href="/about">
84
+ <i class="fa-solid fa-info-circle" aria-hidden="true"></i>
85
+ <span>about</span>
86
+ </a>
87
+ </li>
88
+ </ul>
89
+ </nav>
90
+ ```
@@ -0,0 +1,131 @@
1
+ <!-- File generato automaticamente da templates/html/components/modal.html. Modificare templates/html/components/modal.html e rieseguire npm run docs:generate. -->
2
+
3
+ # Modal
4
+
5
+ Componente che collega un pulsante a un dialog nativo, ne gestisce apertura e chiusura e può spostarlo in un contenitore configurato.
6
+
7
+ ## PGS
8
+
9
+ - `modal`: identifica il contenitore logico inizializzato dal modulo modal.
10
+ - `modal-button`: identifica il controllo di apertura della finestra.
11
+ - `dialog`: token aggiunto dinamicamente all'elemento dialog inizializzato.
12
+ - `modal-dialog`: identifica il dialog nativo dopo l'inizializzazione JavaScript.
13
+ - `modal-dialog-content`: identifica il contenitore visivo della finestra.
14
+ - `modal-dialog-content-header`: identifica l'intestazione che può ricevere il pulsante di chiusura automatico.
15
+ - `modal-dialog-content-scroll`: identifica l'area interna scorrevole.
16
+ - `modal-close`: identifica un controllo che chiude la finestra.
17
+
18
+ ## PGS Options
19
+
20
+ - `containerID`: sul root usa containerID[id] per spostare il dialog nell'elemento con l'id indicato.
21
+ - `containerPGS`: sul root usa containerPGS[token] per spostare il dialog nel primo elemento con quel token pgs.
22
+ - `disableBackdropClose`: sul root impedisce la chiusura tramite click sul backdrop.
23
+ - `history`: sul root sincronizza l'apertura con il parametro modal nella cronologia del browser e richiede un id sul pulsante.
24
+ - `topLevel`: sul dialog mantiene la finestra nel componente e usa showModal per una modale top-level.
25
+ - `left`: sul dialog posiziona e anima il contenuto dal lato sinistro.
26
+ - `right`: sul dialog posiziona e anima il contenuto dal lato destro.
27
+
28
+ ## API JavaScript
29
+
30
+ - `pgs.modal.init(root)`: inizializza le modali presenti nel Document o Element indicato; il valore predefinito è document.
31
+ - `pgs.modal.api(element)`: restituisce l'istanza associata a un root modal inizializzato.
32
+ - `instance.open()`: apre la finestra se non è già aperta.
33
+ - `instance.close()`: chiude la finestra se è aperta.
34
+ - `instance.toggle()`: apre la finestra oppure la chiude quando è già aperta.
35
+ - `instance.refresh()`: rilegge opzioni e collegamenti della modale, sostituisce listener e observer precedenti e restituisce la nuova API.
36
+ - `instance.isOpen()`: restituisce true quando l'elemento dialog possiede lo stato nativo open.
37
+
38
+ ## Elementi correlati
39
+
40
+ - `button`: presenta i controlli di apertura, chiusura e annullamento come pulsanti standard.
41
+ - `buttonStrong`: presenta l'azione di conferma con maggiore enfasi.
42
+ - `buttonClose`: viene aggiunto automaticamente al controllo di chiusura quando manca nel markup.
43
+ - `flexColumnElements`: organizza verticalmente il contenuto della modale di conferma.
44
+ - `flexRow`: dispone affiancate le azioni della modale di conferma.
45
+
46
+ ## Output
47
+
48
+ Quattro esempi basati su dialog nativo e un contenitore opzionale usato da containerID.
49
+
50
+ ## Esempio
51
+
52
+ ```html
53
+ <div pgs="modal" pgs-option="containerID[modal-container]">
54
+ <button pgs="modal-button button" type="button">
55
+ <i class="fa-solid fa-window-maximize"></i> Apri modale
56
+ </button>
57
+
58
+ <dialog>
59
+ <div pgs="modal-dialog-content">
60
+ <div pgs="modal-dialog-content-header">
61
+ <h3>Modale di esempio</h3>
62
+ </div>
63
+
64
+ <div pgs="modal-dialog-content-scroll">
65
+ <p>Contenuto della modale. Il bottone di chiusura viene aggiunto automaticamente se non presente.</p>
66
+ </div>
67
+ </div>
68
+ </dialog>
69
+ </div>
70
+
71
+ <div pgs="modal" pgs-option="containerID[modal-container]">
72
+ <button pgs="modal-button button" type="button">
73
+ <i class="fa-solid fa-window-maximize"></i> Apri modale right
74
+ </button>
75
+
76
+ <dialog pgs-option="right">
77
+ <div pgs="modal-dialog-content">
78
+ <div pgs="modal-dialog-content-header">
79
+ <h3>Modale laterale</h3>
80
+ </div>
81
+
82
+ <div pgs="modal-dialog-content-scroll">
83
+ <p>Contenuto della modale con <code>pgs-option="right"</code>.</p>
84
+ </div>
85
+ </div>
86
+ </dialog>
87
+ </div>
88
+
89
+ <div pgs="modal" pgs-option="containerID[modal-container]">
90
+ <button pgs="modal-button button" type="button">
91
+ <i class="fa-solid fa-window-maximize"></i> Apri modale left
92
+ </button>
93
+
94
+ <dialog pgs-option="left">
95
+ <div pgs="modal-dialog-content">
96
+ <div pgs="modal-dialog-content-header">
97
+ <h3>Modale laterale sinistra</h3>
98
+ </div>
99
+
100
+ <div pgs="modal-dialog-content-scroll">
101
+ <p>Contenuto della modale con <code>pgs-option="left"</code>.</p>
102
+ </div>
103
+ </div>
104
+ </dialog>
105
+ </div>
106
+
107
+ <div pgs="modal">
108
+ <button pgs="modal-button button" type="button">
109
+ <i class="fa-solid fa-floppy-disk"></i> Conferma salvataggio
110
+ </button>
111
+
112
+ <dialog pgs-option="topLevel">
113
+ <div pgs="modal-dialog-content">
114
+ <div pgs="modal-dialog-content-header">
115
+ <h3>Salvare le modifiche?</h3>
116
+ </div>
117
+
118
+ <div pgs="modal-dialog-content-scroll flexColumnElements">
119
+ <p>Hai modifiche non salvate. Conferma per applicarle oppure annulla per tornare alla pagina.</p>
120
+
121
+ <div pgs="flexRow">
122
+ <button pgs="button modal-close" type="button">Annulla</button>
123
+ <button pgs="buttonStrong" type="button">Salva modifiche</button>
124
+ </div>
125
+ </div>
126
+ </div>
127
+ </dialog>
128
+ </div>
129
+
130
+ <div id="modal-container"></div>
131
+ ```
@@ -0,0 +1,81 @@
1
+ <!-- File generato automaticamente da templates/html/components/notification.html. Modificare templates/html/components/notification.html e rieseguire npm run docs:generate. -->
2
+
3
+ # Notification
4
+
5
+ Sistema di notifiche persistenti o toast temporanei, generati dall'API oppure da una configurazione JSON dichiarativa contenuta nell'opzione notification.
6
+
7
+ ## PGS
8
+
9
+ - `notification`: identifica il contenitore delle notifiche, sia persistenti sia temporanee.
10
+ - `notificationTrigger`: identifica una configurazione dichiarativa elaborata e rimossa all'inizializzazione.
11
+ - `notification-element`: identifica ogni messaggio creato dinamicamente.
12
+ - `notification-element-title`: identifica il titolo generato del messaggio.
13
+ - `notification-element-content`: identifica il contenuto generato del messaggio.
14
+
15
+ ## PGS Options
16
+
17
+ - `toast`: sul contenitore notification abilita il posizionamento centrale e la sostituzione del messaggio temporaneo corrente.
18
+ - `notification`: contiene un oggetto JSON con title, message, element, type, icon, duration e link usando la sintassi notification[{...}].
19
+
20
+ ## PGS States
21
+
22
+ - `success`: applica la variante positiva al messaggio generato.
23
+ - `error`: applica la variante di errore e il ruolo alert.
24
+ - `warning`: applica la variante di avviso.
25
+ - `info`: applica la variante informativa predefinita.
26
+
27
+ ## API JavaScript
28
+
29
+ - `pgs.notification.trigger(root)`: elabora e rimuove i notificationTrigger dichiarativi presenti nel contesto indicato.
30
+ - `pgs.notification.alert.error(text, link, timeout, icon)`: crea una notifica persistente di errore, opzionalmente cliccabile e temporizzata.
31
+ - `pgs.notification.alert.success(text, link, timeout, icon)`: crea una notifica persistente di successo.
32
+ - `pgs.notification.alert.info(text, link, timeout, icon)`: crea una notifica persistente informativa.
33
+ - `pgs.notification.alert.warning(text, link, timeout, icon)`: crea una notifica persistente di avviso.
34
+ - `pgs.notification.alert.deleteAll()`: rimuove tutte le notifiche persistenti.
35
+ - `pgs.notification.toast.error(text, timeout, icon)`: crea un toast di errore sostituendo quello eventualmente presente.
36
+ - `pgs.notification.toast.success(text, timeout, icon)`: crea un toast di successo.
37
+ - `pgs.notification.toast.info(text, timeout, icon)`: crea un toast informativo.
38
+ - `pgs.notification.toast.warning(text, timeout, icon)`: crea un toast di avviso.
39
+ - `pgs.notification.toast.deleteAll()`: rimuove il toast corrente.
40
+
41
+ ## Elementi correlati
42
+
43
+ - `hidden`: nasconde i trigger dichiarativi prima che vengano elaborati.
44
+ - `buttonClose`: identifica il pulsante di rimozione aggiunto a ogni messaggio.
45
+
46
+ ## Output
47
+
48
+ Due contenitori notification, uno persistente e uno configurato con l'opzione toast, con trigger dichiarativi configurati tramite pgs-option.
49
+
50
+ ## Esempio
51
+
52
+ ```html
53
+ <div pgs="notification" aria-live="polite"></div>
54
+ <div pgs="notification" pgs-option="toast" aria-live="polite"></div>
55
+
56
+ <div pgs="hidden notificationTrigger" pgs-option='notification[{
57
+ "title": "Titolo",
58
+ "message": "Messaggio",
59
+ "element": "notification",
60
+ "type": "info",
61
+ "icon": null,
62
+ "duration": "-1",
63
+ "link": null
64
+ }]'></div>
65
+
66
+ <div pgs="hidden notificationTrigger" pgs-option='notification[{
67
+ "title": "Benvenuto",
68
+ "message": "Messaggio",
69
+ "element": "toast",
70
+ "type": "info",
71
+ "icon": null,
72
+ "duration": "3000",
73
+ "link": null
74
+ }]'></div>
75
+ <!--
76
+ <div
77
+ pgs="hidden notificationTrigger"
78
+ pgs-option='notification[{"title":"Titolo","message":"Messaggio","element":"notification","type":"info","icon":"<i class=\"fa-solid fa-rocket\"></i>","duration":"4000","link":"/pagina/"}]'>
79
+ </div>
80
+ -->
81
+ ```