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,117 @@
1
+ <!-- File generato automaticamente da templates/html/components/search.html. Modificare templates/html/components/search.html e rieseguire npm run docs:generate. -->
2
+
3
+ # Search
4
+
5
+ Ricerca componibile con suggerimenti asincroni o locali, navigazione da tastiera, selezione, annullamento richieste e attributi ARIA gestiti dal modulo search.
6
+
7
+ ## PGS
8
+
9
+ - `search`: identifica il form inizializzato come ricerca con suggerimenti.
10
+ - `search-suggestions`: identifica la lista opzionale che riceve i risultati.
11
+ - `search-suggestions-item`: identifica ogni risultato creato dinamicamente nella lista.
12
+ - `search-modal`: identifica la variante di ricerca inserita in una modale per dispositivi mobili.
13
+ - `search-mobile`: identifica il contenitore interno della ricerca mobile.
14
+
15
+ ## PGS Options
16
+
17
+ - `containerPGS`: sul wrapper modal usa containerPGS[header] per spostare il dialog nell'header.
18
+
19
+ ## PGS States
20
+
21
+ - `open`: sul root search indica che la lista dei suggerimenti è aperta.
22
+ - `loading`: sul root search indica una sorgente dati in caricamento.
23
+ - `error`: sul root search indica che il recupero dei suggerimenti è fallito.
24
+ - `selected`: sul risultato generato indica l'elemento attivo durante la navigazione.
25
+
26
+ ## API JavaScript
27
+
28
+ - `pgs.search.init(root)`: inizializza le ricerche non ancora registrate dentro Document o Element indicato.
29
+ - `pgs.search.api(element)`: restituisce l'istanza associata a un form search inizializzato.
30
+ - `instance.configure(options)`: aggiorna minLength, debounce, limit, submitOnSelect, searchOnFocus, source e onSelect e restituisce l'istanza.
31
+ - `instance.setSource(source)`: configura una sorgente array o funzione asincrona per i suggerimenti.
32
+ - `instance.search(query)`: esegue subito la ricerca e restituisce una Promise con i suggerimenti normalizzati.
33
+ - `instance.open()`: apre la lista quando sono disponibili risultati.
34
+ - `instance.close()`: chiude la lista e azzera la selezione attiva.
35
+ - `instance.clear()`: rimuove risultati e selezione e chiude la lista.
36
+ - `instance.cancel()`: annulla debounce e richiesta attiva.
37
+ - `instance.select(index, submit)`: seleziona un risultato, emette pgs:search:select e può inviare il form.
38
+ - `instance.refresh()`: ripete la ricerca usando il valore corrente dell'input.
39
+ - `instance.destroy()`: rimuove listener, annulla le operazioni e scollega l'istanza.
40
+ - `instance.items()`: restituisce una copia dei suggerimenti correnti.
41
+ - `instance.isOpen()`: restituisce true quando la lista dei suggerimenti è aperta.
42
+ - `instance.isLoading()`: restituisce true durante il caricamento della sorgente.
43
+ - `instance.setActiveIndex(index)`: imposta il suggerimento attivo e aggiorna selezione e attributi ARIA.
44
+
45
+ ## Elementi correlati
46
+
47
+ - `buttonNohover`: applica al form l'aspetto compatto condiviso con i controlli button.
48
+ - `modal`: fornisce il contenitore e il comportamento della variante mobile.
49
+ - `modal-button`: apre la ricerca mobile.
50
+ - `modal-close`: chiude la ricerca mobile.
51
+ - `buttonIcon`: presenta apertura e chiusura come pulsanti a icona.
52
+ - `flexRow`: organizza il contenuto della variante mobile e gli elementi dei suggerimenti generati.
53
+ - `section`: applica la spaziatura di sezione alla ricerca mobile.
54
+
55
+ ## Output
56
+
57
+ Form di ricerca autonomo, variante mobile integrata in una modal e script di esempio con sorgente locale.
58
+
59
+ ## Esempio
60
+
61
+ ```html
62
+ <form pgs="buttonNohover search" autocomplete="off" action="" method="get">
63
+ <button type="submit" title="Cerca"><i class="fa-solid fa-search"></i></button>
64
+ <input type="search" name="s" placeholder="Cerca" value="">
65
+ <ul pgs="search-suggestions"></ul>
66
+ </form>
67
+
68
+ <div pgs="modal search-modal" pgs-option="containerPGS[header]">
69
+
70
+ <button type="button" pgs="modal-button buttonIcon" title="Cerca">
71
+ <i class="fa-solid fa-search"></i>
72
+ </button>
73
+
74
+ <dialog>
75
+ <div pgs="flexRow section search-mobile">
76
+
77
+ <form pgs="buttonNohover search" autocomplete="off" action="/" method="get">
78
+ <button type="submit" title="Cerca">
79
+ <i class="fa-solid fa-search"></i>
80
+ </button>
81
+
82
+ <input type="search" name="s" placeholder="Cerca" value="">
83
+ <ul pgs="search-suggestions"></ul>
84
+ </form>
85
+
86
+ <button type="button" pgs="modal-close buttonIcon">
87
+ <i class="fa-solid fa-close"></i>
88
+ </button>
89
+
90
+ </div>
91
+ </dialog>
92
+ </div>
93
+
94
+ <script type="module">
95
+ import { pgs } from "mypgs";
96
+
97
+ const components = [
98
+ { label: "Accordion", value: "/componenti/accordion", data: { category: "component" } },
99
+ { label: "Dropdown", value: "/componenti/dropdown", data: { category: "component" } },
100
+ { label: "Modal", value: "/componenti/modal", data: { category: "component" } },
101
+ { label: "Search", value: "/componenti/search", data: { category: "component" } },
102
+ { label: "Page Shell", value: "/layout/page-shell", data: { category: "layout" } },
103
+ ];
104
+
105
+ pgs(document).querySelectorAll("search").forEach(search => {
106
+ pgs.search.api(search)?.configure({
107
+ minLength: 1,
108
+ debounce: 150,
109
+ limit: 5,
110
+ source: components,
111
+ onSelect: ({ item, value }) => {
112
+ console.log(`Selezionato ${item.label}: ${value}`);
113
+ },
114
+ });
115
+ });
116
+ </script>
117
+ ```
@@ -0,0 +1,85 @@
1
+ <!-- File generato automaticamente da templates/html/components/slides.html. Modificare templates/html/components/slides.html e rieseguire npm run docs:generate. -->
2
+
3
+ # Slides
4
+
5
+ Carosello orizzontale che osserva gli elementi visibili e crea automaticamente controlli precedente, successivo e indicatori di posizione.
6
+
7
+ ## PGS
8
+
9
+ - `slides`: identifica il root inizializzato dal modulo slides.
10
+ - `slides-container`: identifica la lista orizzontale degli elementi scorrevoli.
11
+ - `slides-prec`: identifica il pulsante precedente creato dinamicamente.
12
+ - `slides-next`: identifica il pulsante successivo creato dinamicamente.
13
+ - `slides-dots`: identifica il contenitore degli indicatori creato dinamicamente.
14
+
15
+ ## PGS Options
16
+
17
+ - `singleScroll`: usa un solo elemento visibile come riferimento per la navigazione precedente e successiva.
18
+ - `shadowDesktop`: abilita l'ombreggiatura laterale del carosello sui layout desktop.
19
+ - `notScrollAnimation`: applicata a un elemento li disabilita l'animazione visiva basata sulla percentuale di visibilità.
20
+ - `notScrollWithMouse`: sul root disabilita la gestione dello scorrimento orizzontale tramite mouse.
21
+
22
+ ## API JavaScript
23
+
24
+ - `pgs.slides.init(root)`: inizializza il root stesso quando è un carosello e tutti i caroselli discendenti non ancora registrati; il valore predefinito è document.
25
+ - `pgs.slides.api(element)`: restituisce l'istanza associata a un root slides inizializzato.
26
+ - `instance.previous()`: porta in vista la slide precedente.
27
+ - `instance.next()`: porta in vista la slide successiva.
28
+ - `instance.goTo(index)`: porta in vista la slide con l'indice indicato.
29
+ - `instance.getCurrentIndexes()`: restituisce gli indici delle slide attualmente visibili.
30
+ - `instance.getCurrentElements()`: restituisce gli elementi slide attualmente visibili.
31
+ - `instance.getTotal()`: restituisce il numero totale di slide.
32
+ - `instance.isAtStart()`: restituisce true quando la prima slide è visibile.
33
+ - `instance.isAtEnd()`: restituisce true quando l'ultima slide è visibile.
34
+ - `instance.refresh()`: sincronizza controlli e dots, sostituisce listener e observer precedenti e restituisce la nuova API.
35
+
36
+ ## Elementi correlati
37
+
38
+ - `card`: usa card come contenuto dimostrativo di ogni slide.
39
+ - `card-img`: identifica l'immagine delle card dimostrative.
40
+ - `imgCover`: adatta le immagini allo spazio disponibile.
41
+ - `flexColumn`: organizza verticalmente ogni card.
42
+ - `flexColumnTexts`: applica la spaziatura ai testi delle card.
43
+ - `buttonIcon`: viene applicato ai controlli precedente e successivo generati.
44
+
45
+ ## Output
46
+
47
+ Lista di slide basate su card, completata a runtime con pulsanti e indicatori.
48
+
49
+ ## Esempio
50
+
51
+ ```html
52
+ <div pgs="slides" pgs-option="singleScroll shadowDesktop">
53
+ <ul pgs="slides-container">
54
+ <li>
55
+ <article pgs="card flexColumn">
56
+ <img pgs="card-img imgCover" src="https://placehold.co/800x500?text=Slide+1" alt="Slide 1">
57
+ <div pgs="flexColumnTexts">
58
+ <h3>Slide uno</h3>
59
+ <p>Contenuto della prima slide.</p>
60
+ </div>
61
+ </article>
62
+ </li>
63
+
64
+ <li>
65
+ <article pgs="card flexColumn">
66
+ <img pgs="card-img imgCover" src="https://placehold.co/800x500?text=Slide+2" alt="Slide 2">
67
+ <div pgs="flexColumnTexts">
68
+ <h3>Slide due</h3>
69
+ <p>Contenuto della seconda slide.</p>
70
+ </div>
71
+ </article>
72
+ </li>
73
+
74
+ <li>
75
+ <article pgs="card flexColumn">
76
+ <img pgs="card-img imgCover" src="https://placehold.co/800x500?text=Slide+3" alt="Slide 3">
77
+ <div pgs="flexColumnTexts">
78
+ <h3>Slide tre</h3>
79
+ <p>Contenuto della terza slide.</p>
80
+ </div>
81
+ </article>
82
+ </li>
83
+ </ul>
84
+ </div>
85
+ ```
@@ -0,0 +1,93 @@
1
+ <!-- File generato automaticamente da templates/html/components/stepTabs.html. Modificare templates/html/components/stepTabs.html e rieseguire npm run docs:generate. -->
2
+
3
+ # Step Tabs
4
+
5
+ Procedura guidata a schede con avanzamento sequenziale, indicatori generati, controlli di navigazione e possibilità di bloccare uno step.
6
+
7
+ ## PGS
8
+
9
+ - `stepTabs`: identifica il root della procedura guidata.
10
+ - `stepTabs-dots`: identifica il contenitore degli indicatori di avanzamento.
11
+ - `stepTabs-dots-dot`: identifica ogni indicatore creato dinamicamente.
12
+ - `stepTabs-container`: contiene nell'ordine tutte le schede della procedura.
13
+ - `tab`: identifica una singola scheda navigabile.
14
+ - `stepTabs-prev`: identifica il controllo per tornare allo step precedente.
15
+ - `stepTabs-restart`: identifica il controllo che riavvia la procedura dal primo step.
16
+ - `stepTabs-next`: identifica il controllo per avanzare allo step successivo.
17
+
18
+ ## PGS Options
19
+
20
+ - `tabIcon`: su ogni tab usa tabIcon[classe] con una singola classe Font Awesome per l'indicatore corrispondente; il fallback è fa-circle.
21
+ - `step`: viene applicata a ogni indicatore generato con la sintassi step[indice] per conservarne l'indice zero-based.
22
+ - `buttonReverse`: inverte testo e icona sul pulsante successivo e appartiene al componente button.
23
+
24
+ ## PGS States
25
+
26
+ - `is-active`: identifica la scheda corrente e il relativo indicatore.
27
+ - `is-completed`: identifica gli indicatori degli step già completati e nuovamente selezionabili.
28
+ - `is-locked`: applicato a un tab impedisce di avanzare finché lo step resta bloccato.
29
+
30
+ ## API JavaScript
31
+
32
+ - `pgs.stepTabs.init(root)`: inizializza le procedure non ancora registrate dentro Document o Element indicato.
33
+ - `pgs.stepTabs.api(element)`: restituisce l'istanza associata a un root stepTabs inizializzato.
34
+ - `instance.restart()`: torna al primo tab e ripristina i blocchi dichiarati inizialmente.
35
+ - `instance.goTo(index, scroll)`: attiva il tab indicato, aggiorna controlli e indicatori e opzionalmente scorre al componente.
36
+ - `instance.next()`: attiva il tab successivo entro i limiti disponibili.
37
+ - `instance.prev()`: attiva il tab precedente entro i limiti disponibili.
38
+ - `instance.toggleLock(index, lock)`: aggiunge o rimuove is-locked dal tab indicato e aggiorna i controlli.
39
+ - `instance.refresh()`: riesegue l'inizializzazione nel contenitore della procedura e restituisce l'istanza.
40
+ - `instance.getCurrent()`: restituisce l'indice del tab corrente.
41
+ - `instance.getState()`: restituisce un oggetto con indice corrente e numero totale di tab.
42
+
43
+ ## Elementi correlati
44
+
45
+ - `flexColumnElements`: organizza verticalmente le aree principali del componente.
46
+ - `flexColumnTexts`: organizza il contenuto testuale di ogni tab.
47
+ - `flexRow`: dispone sulla stessa riga i controlli di navigazione.
48
+ - `button`: applica lo stile standard ai controlli precedente, riavvio e successivo.
49
+
50
+ ## Output
51
+
52
+ Procedura HTML a tre schede con indicatori e controlli di navigazione.
53
+
54
+ ## Esempio
55
+
56
+ ```html
57
+ <div pgs="stepTabs flexColumnElements">
58
+ <div pgs="stepTabs-dots" aria-label="Avanzamento"></div>
59
+
60
+ <div pgs="stepTabs-container">
61
+ <section pgs="tab flexColumnTexts" tabindex="-1" pgs-option="tabIcon[fa-user]">
62
+ <h3>Dati personali</h3>
63
+ <p>Contenuto del primo tab.</p>
64
+ </section>
65
+
66
+ <section pgs="tab flexColumnTexts" tabindex="-1" pgs-option="tabIcon[fa-list-check]">
67
+ <h3>Preferenze</h3>
68
+ <p>Contenuto del secondo tab.</p>
69
+ </section>
70
+
71
+ <section pgs="tab flexColumnTexts" tabindex="-1" pgs-option="tabIcon[fa-check]">
72
+ <h3>Conferma</h3>
73
+ <p>Contenuto del terzo tab.</p>
74
+ </section>
75
+ </div>
76
+
77
+ <div pgs="flexRow">
78
+ <button pgs="stepTabs-prev button" type="button">
79
+ <i class="fa-solid fa-arrow-left" aria-hidden="true"></i>
80
+ Indietro
81
+ </button>
82
+
83
+ <button pgs="stepTabs-restart button" type="button">
84
+ Ricomincia
85
+ </button>
86
+
87
+ <button pgs="stepTabs-next button" pgs-option="buttonReverse" type="button">
88
+ Avanti
89
+ <i class="fa-solid fa-arrow-right" aria-hidden="true"></i>
90
+ </button>
91
+ </div>
92
+ </div>
93
+ ```
@@ -0,0 +1,56 @@
1
+ <!-- File generato automaticamente da templates/html/components/steps.html. Modificare templates/html/components/steps.html e rieseguire npm run docs:generate. -->
2
+
3
+ # Steps
4
+
5
+ Elenco ordinato di passaggi che presenta numero, contenuto e linea di collegamento, aggiungendo a runtime gli elementi strutturali mancanti.
6
+
7
+ ## PGS
8
+
9
+ - `steps`: identifica la lista ordinata inizializzata dal modulo steps.
10
+ - `steps-step`: identifica ogni passaggio della sequenza.
11
+ - `steps-step-circle`: identifica l'indicatore numerico, creato automaticamente se assente.
12
+ - `steps-step-content`: identifica il contenuto testuale del passaggio.
13
+ - `steps-step-line`: identifica la linea di collegamento aggiunta dinamicamente a ogni passaggio.
14
+
15
+ ## API JavaScript
16
+
17
+ - `pgs.steps.init(root)`: inizializza le liste steps non ancora registrate dentro Document o Element indicato.
18
+ - `pgs.steps.api(element)`: restituisce l'istanza associata a un root steps inizializzato.
19
+ - `instance.steps()`: restituisce un array con tutti gli elementi steps-step.
20
+ - `instance.getStep(index)`: restituisce lo step corrispondente all'indice indicato.
21
+ - `instance.getTotal()`: restituisce il numero totale di step.
22
+ - `instance.refresh()`: reinizializza la lista, ricrea gli elementi mancanti e restituisce la nuova istanza.
23
+
24
+ ## Output
25
+
26
+ Lista ordinata HTML di passaggi numerati completata dal modulo JavaScript.
27
+
28
+ ## Esempio
29
+
30
+ ```html
31
+ <ol pgs="steps">
32
+ <li pgs="steps-step">
33
+ <span pgs="steps-step-circle">1</span>
34
+ <div pgs="steps-step-content">
35
+ <h3>Primo step</h3>
36
+ <p>Descrizione del primo passaggio.</p>
37
+ </div>
38
+ </li>
39
+
40
+ <li pgs="steps-step">
41
+ <span pgs="steps-step-circle">2</span>
42
+ <div pgs="steps-step-content">
43
+ <h3>Secondo step</h3>
44
+ <p>Descrizione del secondo passaggio.</p>
45
+ </div>
46
+ </li>
47
+
48
+ <li pgs="steps-step">
49
+ <span pgs="steps-step-circle">3</span>
50
+ <div pgs="steps-step-content">
51
+ <h3>Terzo step</h3>
52
+ <p>Descrizione del terzo passaggio.</p>
53
+ </div>
54
+ </li>
55
+ </ol>
56
+ ```
@@ -0,0 +1,49 @@
1
+ <!-- File generato automaticamente da templates/html/components/summary.html. Modificare templates/html/components/summary.html e rieseguire npm run docs:generate. -->
2
+
3
+ # Summary
4
+
5
+ Componente che limita inizialmente un testo lungo a tre righe e mostra il controllo di espansione solo quando il contenuto eccede tale altezza.
6
+
7
+ ## PGS
8
+
9
+ - `summary`: identifica il root inizializzato dal modulo summary.
10
+ - `summary-content`: identifica il contenuto misurato e ridimensionato.
11
+ - `summary-button`: identifica il controllo per mostrare più o meno contenuto.
12
+
13
+ ## PGS States
14
+
15
+ - `overflow`: indica che il contenuto supera l'altezza contratta e richiede il controllo.
16
+ - `open`: indica che tutto il contenuto è espanso e visibile.
17
+
18
+ ## API JavaScript
19
+
20
+ - `pgs.summary.init(root)`: inizializza i summary non ancora registrati dentro Document o Element indicato.
21
+ - `pgs.summary.api(element)`: restituisce l'istanza associata a un root summary inizializzato.
22
+ - `instance.open()`: espande il contenuto quando supera l'altezza contratta.
23
+ - `instance.close()`: richiude il contenuto alla dimensione prevista.
24
+ - `instance.toggle()`: inverte lo stato espanso o contratto.
25
+ - `instance.refresh()`: ricalcola overflow e altezza conservando lo stato corrente.
26
+ - `instance.isOpen()`: restituisce true quando il contenuto è espanso.
27
+
28
+ ## Output
29
+
30
+ Struttura HTML con contenuto espandibile e pulsante sincronizzato tramite ARIA.
31
+
32
+ ## Esempio
33
+
34
+ ```html
35
+ <div pgs="summary">
36
+ <div pgs="summary-content">
37
+ <p>
38
+ Questo testo dimostrativo e' abbastanza lungo da occupare piu righe e mostrare il comportamento del componente summary. Il contenuto puo includere testo, link e altri elementi inline senza richiedere markup aggiuntivo.
39
+ </p>
40
+ <p>
41
+ Quando il contenuto supera tre righe viene mostrato un pulsante per espandere o richiudere l'area visibile.
42
+ </p>
43
+ </div>
44
+
45
+ <button pgs="summary-button" type="button">
46
+ Mostra di più
47
+ </button>
48
+ </div>
49
+ ```
@@ -0,0 +1,42 @@
1
+ <!-- File generato automaticamente da templates/html/components/table.html. Modificare templates/html/components/table.html e rieseguire npm run docs:generate. -->
2
+
3
+ # Table
4
+
5
+ Contenitore responsive per una tabella semantica con intestazioni e righe di dati coerenti con gli stili del design system.
6
+
7
+ ## PGS
8
+
9
+ - `table`: identifica il wrapper che gestisce presentazione e scorrimento della tabella nativa.
10
+
11
+ ## Output
12
+
13
+ Tabella HTML completa racchiusa nel contenitore PGS dedicato.
14
+
15
+ ## Esempio
16
+
17
+ ```html
18
+ <div pgs="table">
19
+ <table>
20
+ <thead>
21
+ <tr>
22
+ <th>Nome</th>
23
+ <th>Stato</th>
24
+ <th>Data</th>
25
+ </tr>
26
+ </thead>
27
+
28
+ <tbody>
29
+ <tr>
30
+ <td>Elemento uno</td>
31
+ <td>Attivo</td>
32
+ <td>2026-01-01</td>
33
+ </tr>
34
+ <tr>
35
+ <td>Elemento due</td>
36
+ <td>Bozza</td>
37
+ <td>2026-02-01</td>
38
+ </tr>
39
+ </tbody>
40
+ </table>
41
+ </div>
42
+ ```
@@ -0,0 +1,53 @@
1
+ <!-- File generato automaticamente da templates/html/components/tooltip.html. Modificare templates/html/components/tooltip.html e rieseguire npm run docs:generate. -->
2
+
3
+ # Tooltip
4
+
5
+ Variante compatta del dropdown che mostra un breve pannello informativo controllato da un pulsante a icona.
6
+
7
+ ## PGS
8
+
9
+ - `tooltip`: identifica il root della variante tooltip.
10
+ - `tooltip-button`: identifica il controllo specifico del tooltip.
11
+ - `tooltip-content`: identifica il contenuto informativo del tooltip.
12
+
13
+ ## PGS Options
14
+
15
+ - `position`: può essere applicata al root condiviso con sintassi position[lato allineamento] per modificare la posizione ereditata dal dropdown.
16
+
17
+ ## PGS States
18
+
19
+ - `open`: viene gestito dal modulo dropdown sul root per mostrare o nascondere il tooltip.
20
+
21
+ ## API JavaScript
22
+
23
+ - `pgs.dropdown.init(root)`: inizializza il tooltip perché il suo root condivide il token dropdown.
24
+ - `pgs.dropdown.api(element)`: restituisce l'istanza dropdown associata al root del tooltip.
25
+ - `instance.open()`: apre il contenuto informativo.
26
+ - `instance.close()`: chiude il contenuto informativo.
27
+ - `instance.toggle()`: inverte la visibilità del tooltip.
28
+ - `instance.refresh()`: reinizializza il contesto e ricalcola il posizionamento.
29
+ - `instance.isOpen()`: restituisce true quando il tooltip è aperto.
30
+
31
+ ## Elementi correlati
32
+
33
+ - `dropdown`: fornisce apertura, chiusura e posizionamento del tooltip.
34
+ - `dropdown-button`: collega il pulsante al comportamento dropdown.
35
+ - `dropdown-content`: collega il pannello al comportamento dropdown.
36
+ - `buttonMini`: presenta il controllo come pulsante a icona di dimensione minima.
37
+
38
+ ## Output
39
+
40
+ Tooltip HTML composto tramite i token condivisi del dropdown.
41
+
42
+ ## Esempio
43
+
44
+ ```html
45
+ <span pgs="dropdown tooltip">
46
+ <button pgs="dropdown-button buttonMini tooltip-button" title="open-tooltip" type="button">
47
+ <i class="fa-solid fa-info"></i>
48
+ </button>
49
+ <div pgs="dropdown-content tooltip-content">
50
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Iusto hic, id consectetur facilis et, iste animi minima quidem praesentium omnis quod. Quidem provident ad cum aut reprehenderit laboriosam eum placeat.
51
+ </div>
52
+ </span>
53
+ ```
@@ -11,6 +11,21 @@ pgs(modal).remove("custom-token");
11
11
  pgs(modal).toggle("custom-token", true);
12
12
  ```
13
13
 
14
+ ## API dell'helper `pgs`
15
+
16
+ Ricerca disponibile su `Document` ed `Element`:
17
+
18
+ - `pgs(root).querySelector(token)`: restituisce il primo discendente che contiene il token `pgs` richiesto.
19
+ - `pgs(root).querySelectorAll(token)`: restituisce tutti i discendenti corrispondenti; accetta anche un array o token separati da virgola.
20
+
21
+ Manipolazione disponibile quando `root` è un `Element`:
22
+
23
+ - `pgs(element).add(...tokens)`: aggiunge token evitando duplicati e restituisce l'helper.
24
+ - `pgs(element).remove(...tokens)`: rimuove i token indicati e restituisce l'helper.
25
+ - `pgs(element).toggle(token, force)`: inverte o forza la presenza del token e restituisce lo stato risultante.
26
+ - `pgs(element).contains(token)`: verifica la presenza esatta del token.
27
+ - `pgs(element).value`: legge o sostituisce il valore completo dell'attributo `pgs`.
28
+
14
29
  Stati runtime:
15
30
 
16
31
  ```js
@@ -19,6 +34,12 @@ pgs(modal).state.toggle("open", false);
19
34
  pgs(modal).state.contains("open");
20
35
  ```
21
36
 
37
+ - `state.add(...states)` oppure `state(...states)`: aggiunge uno o più stati.
38
+ - `state.remove(...states)`: rimuove gli stati indicati.
39
+ - `state.toggle(state, force)`: inverte o forza uno stato e restituisce il risultato.
40
+ - `state.contains(state)`: verifica se lo stato è presente.
41
+ - `state.value`: legge o sostituisce l'intero attributo `pgs-state`.
42
+
22
43
  Opzioni:
23
44
 
24
45
  ```js
@@ -26,6 +47,14 @@ pgs(modal).option.contains("history");
26
47
  pgs(modal).option.getValueBrackets("containerID");
27
48
  ```
28
49
 
50
+ - `option.add(...options)`: aggiunge opzioni semplici o parametrizzate.
51
+ - `option.remove(...keys)`: rimuove le opzioni usando la relativa chiave.
52
+ - `option.toggle(option, force)`: inverte o forza un'opzione.
53
+ - `option.contains(key)`: verifica la presenza di una chiave anche quando possiede un payload.
54
+ - `option.getValueBrackets(key)`: restituisce il contenuto tra parentesi quadre oppure `undefined`.
55
+ - `option.setValueBrackets(key, value)`: imposta o sostituisce una singola opzione parametrizzata.
56
+ - `option.value`: legge o sostituisce l'intero attributo `pgs-option`.
57
+
29
58
  Esempio markup con opzioni:
30
59
 
31
60
  ```html
@@ -64,6 +93,7 @@ Serve per usare i moduli direttamente da `pgs`:
64
93
 
65
94
  ```js
66
95
  pgs.registerModules({
96
+ svg: PGS_svg,
67
97
  accordion: PGS_accordion,
68
98
  dropdown: PGS_dropdown,
69
99
  menu: PGS_menu,
@@ -73,6 +103,7 @@ pgs.registerModules({
73
103
  slides: PGS_slides,
74
104
  stepTabs: PGS_stepTabs,
75
105
  steps: PGS_steps,
106
+ summary: PGS_summary,
76
107
  formValidate: PGS_formValidate,
77
108
  scrollHorizontal: PGS_scrollHorizontal,
78
109
  });
@@ -89,6 +120,7 @@ pgs.slides.api(slidesEl)?.next();
89
120
 
90
121
  Shortcut disponibili dopo `import "mypgs"`:
91
122
 
123
+ - `pgs.svg`
92
124
  - `pgs.accordion`
93
125
  - `pgs.dropdown`
94
126
  - `pgs.menu`
@@ -98,9 +130,36 @@ Shortcut disponibili dopo `import "mypgs"`:
98
130
  - `pgs.slides`
99
131
  - `pgs.stepTabs`
100
132
  - `pgs.steps`
133
+ - `pgs.summary`
101
134
  - `pgs.formValidate`
102
135
  - `pgs.scrollHorizontal`
103
136
 
137
+ ## Riferimento API per componente
138
+
139
+ Le firme, i parametri e la funzione di ogni metodo sono generati dai commenti nei template:
140
+
141
+ - [Accordion](components/accordion.md#api-javascript)
142
+ - [Dropdown](components/dropdown.md#api-javascript)
143
+ - [Form validation](components/form.md#api-javascript)
144
+ - [Menu](components/menu.md#api-javascript)
145
+ - [Modal](components/modal.md#api-javascript)
146
+ - [Notification](components/notification.md#api-javascript)
147
+ - [Search](components/search.md#api-javascript)
148
+ - [Slides](components/slides.md#api-javascript)
149
+ - [Step Tabs](components/stepTabs.md#api-javascript)
150
+ - [Steps](components/steps.md#api-javascript)
151
+ - [Summary](components/summary.md#api-javascript)
152
+ - [Tooltip tramite Dropdown](components/tooltip.md#api-javascript)
153
+
154
+ I componenti non elencati non espongono attualmente un'API JavaScript specifica.
155
+
156
+ ## Utility JavaScript pubbliche
157
+
158
+ - `pgs.scrollHorizontal(element, speed)`: converte lo scroll verticale della rotella in scorrimento orizzontale quando il contenitore può ancora muoversi nella direzione richiesta e restituisce una funzione che rimuove il listener.
159
+ - `pgs.svg.applyColorsSVG(isDarkMode)`: aggiorna i colori degli SVG caricati tramite `object` e marcati con `svgChangeColor`.
160
+ - `pgs.svg.applyColorsLottie(isDarkMode)`: aggiorna i colori degli SVG interni ai player Lottie marcati con `lottieChangeColor`.
161
+ - `pgs.svg.eventChangeColor`: contiene il nome dell'evento `pgs:svg:changeColor` ascoltato dal modulo SVG.
162
+
104
163
  ## Struttura dei moduli componente
105
164
 
106
165
  I componenti con istanze seguono questo schema:
@@ -112,16 +171,22 @@ export const PGS_modal = {
112
171
  };
113
172
  ```
114
173
 
115
- - `PGS_name`: nome ufficiale del modulo per il registro legacy.
116
- - `init`: inizializza o reinizializza markup, utile dopo contenuti dinamici.
174
+ Le funzioni `PGS_modal_init` e `PGS_modal_api` restano interne al modulo: l'unico export del file è `PGS_modal`. Lo stesso criterio vale per gli altri componenti.
175
+
176
+ - `init`: inizializza o reinizializza il markup nel `Document` o `Element` ricevuto; senza argomenti usa `document`.
117
177
  - `api`: recupera l'API di una singola istanza gia' inizializzata.
118
178
 
119
179
  Esempio:
120
180
 
121
181
  ```js
122
182
  pgs.modal.init();
123
- pgs.modal.init(container);
124
183
  pgs.modal.api(modalEl)?.open();
125
184
  ```
126
185
 
127
186
  `PGS_notification` e' un caso diverso: funziona piu' come service/helper e espone `alert`, `toast` e `trigger`.
187
+
188
+ ## Registro ed estensione
189
+
190
+ - `pgs.registerModules(modules)`: espone un oggetto di moduli direttamente come proprietà di `pgs` e impedisce sovrascritture incompatibili.
191
+ - `pgs.registerImport(...modules)`: registra moduli nel registro nominato usato dalle integrazioni avanzate.
192
+ - `pgs.import(...names)`: recupera dal registro i moduli richiesti e genera un errore per i nomi non registrati.
@@ -0,0 +1,41 @@
1
+ <!-- File generato automaticamente da templates/html/layout/body.html. Modificare templates/html/layout/body.html e rieseguire npm run docs:generate. -->
2
+
3
+ # Body
4
+
5
+ Documento HTML di base che abilita MyPGS, configura i metadati essenziali e applica al body le varianti condivise di sfondo, testo e titoli.
6
+
7
+ ## PGS
8
+
9
+ - `htmlBase`: applica le regole fondamentali all'elemento html.
10
+ - `initP`: abilita gli stili di layout, componenti e pattern racchiusi nel namespace MyPGS.
11
+ - `bodyBase`: applica struttura e spaziatura di base al body.
12
+ - `bodyImg`: abilita le regole condivise per le immagini contenute nella pagina.
13
+ - `bodyText`: abilita tipografia e spaziatura del testo.
14
+ - `bodyHeading`: abilita la gerarchia tipografica dei titoli.
15
+
16
+ ## PGS States
17
+
18
+ - `darkmode`: viene applicato dinamicamente a html e body per attivare il tema scuro.
19
+
20
+ ## Output
21
+
22
+ Scheletro HTML completo necessario per inizializzare la libreria MyPGS.
23
+
24
+ ## Esempio
25
+
26
+ ```html
27
+ <!DOCTYPE html>
28
+ <html lang="it-IT" pgs="htmlBase initP">
29
+
30
+ <head>
31
+ <meta charset="UTF-8">
32
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
33
+
34
+ <!-- Colori Browsers -->
35
+ <meta name="theme-color" content="">
36
+ <meta name="apple-mobile-web-app-status-bar-color" content="">
37
+
38
+ </head>
39
+
40
+ <body pgs="bodyBase bodyImg bodyText bodyHeading" >
41
+ ```