mypgs 1.0.0 → 1.1.5

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 (59) hide show
  1. package/README.md +124 -11
  2. package/assets/javascript/_pgs.js +18 -3
  3. package/assets/javascript/components/_dropdown.js +3 -2
  4. package/assets/javascript/components/_slides.js +3 -3
  5. package/assets/javascript/components/_stepTabs.js +157 -0
  6. package/assets/javascript/index.js +1 -1
  7. package/assets/javascript/pgs.d.ts +47 -16
  8. package/assets/scss/base/_body.scss +3 -2
  9. package/assets/scss/base/_general.scss +46 -43
  10. package/assets/scss/base/_heading.scss +17 -15
  11. package/assets/scss/components/_accordion.scss +1 -0
  12. package/assets/scss/components/_dropdown.scss +19 -26
  13. package/assets/scss/components/_notification.scss +4 -4
  14. package/assets/scss/components/_searchbar.scss +2 -2
  15. package/assets/scss/components/_slides.scss +5 -4
  16. package/assets/scss/components/_stepTabs.scss +58 -0
  17. package/assets/scss/components/_steps.scss +4 -3
  18. package/assets/scss/components/_table.scss +1 -1
  19. package/assets/scss/components/_tooltip.scss +11 -6
  20. package/assets/scss/index.scss +29 -32
  21. package/assets/scss/layout/_gap.scss +3 -0
  22. package/assets/scss/mixin/_mx-button.scss +64 -41
  23. package/assets/scss/mixin/_mx-menu.scss +1 -1
  24. package/dist/css/index.css +2149 -1729
  25. package/dist/css/index.css.map +1 -1
  26. package/dist/css/index.min.css +1 -1
  27. package/dist/index.d.ts +45 -15
  28. package/dist/javascript/index.js +139 -100
  29. package/dist/javascript/index.js.map +1 -1
  30. package/dist/javascript/index.min.js +1 -1
  31. package/package.json +2 -2
  32. package/pgs-html-suggestions.vsix +0 -0
  33. package/templates/components/md-accordion.html +23 -0
  34. package/templates/components/md-breadcumbs.html +8 -8
  35. package/templates/components/md-button.html +29 -0
  36. package/templates/components/md-card.html +23 -0
  37. package/templates/components/md-dropdown.html +16 -0
  38. package/templates/components/md-form.html +26 -0
  39. package/templates/components/md-logo.html +7 -0
  40. package/templates/components/md-menu.html +39 -5
  41. package/templates/components/md-modal.html +19 -0
  42. package/templates/components/md-notification.html +4 -1
  43. package/templates/components/md-searchbar.html +6 -1
  44. package/templates/components/md-slides.html +33 -0
  45. package/templates/components/md-stepTabs.html +36 -0
  46. package/templates/components/md-steps.html +25 -0
  47. package/templates/components/md-table.html +24 -0
  48. package/templates/components/md-tooltip.html +1 -0
  49. package/templates/demo.css +51 -0
  50. package/templates/demo.html +24 -0
  51. package/templates/demo.js +141 -0
  52. package/templates/layout/md-body.html +1 -1
  53. package/templates/layout/md-cookieConsent.html +2 -2
  54. package/templates/layout/md-footer.html +21 -2
  55. package/templates/layout/md-header.html +22 -2
  56. package/templates/layout/md-pageShell.html +22 -0
  57. package/templates/layout/md-section.html +25 -0
  58. package/assets/javascript/components/_tabs.js +0 -134
  59. package/assets/scss/components/_tabs.scss +0 -69
@@ -1,26 +1,46 @@
1
1
  <header pgs="header">
2
2
  <div pgs="header-element">
3
3
  <div pgs="header-element-alwaysOn">
4
+ <a aria-label="Logo" pgs="logo" href="/">
5
+ <span pgs="logo-text">MyPGS</span>
6
+ </a>
4
7
  </div>
5
8
 
6
9
  <div pgs="header-element-onlyDesktop">
10
+ <nav pgs="menuHorizontal" aria-label="Menu principale">
11
+ <ul>
12
+ <li><a href="/">Home</a></li>
13
+ <li><a href="#componenti">Componenti</a></li>
14
+ <li><a href="#layout">Layout</a></li>
15
+ </ul>
16
+ </nav>
7
17
  </div>
8
18
 
9
19
  <div pgs="header-element-onlyMobile">
10
20
  </div>
11
21
 
12
22
  <div pgs="header-element-alwaysOnLast">
23
+ <button pgs="buttonIcon toggleDarkmode" type="button" aria-label="Cambia tema">
24
+ <i class="fa-solid fa-moon"></i>
25
+ </button>
13
26
  </div>
14
27
 
15
28
  <div pgs="header-element-hamburger modal" pgs-option="containerPGS[header] ">
16
29
 
17
- <button pgs="buttonIcon modal-button modal-close header-element-hamburger-button" type="button" title="menu">
30
+ <button pgs="buttonIcon modal-button header-element-hamburger-button" type="button" title="Menu">
18
31
  <span pgs="header-element-hamburger-row"></span>
19
32
  <span pgs="header-element-hamburger-row"></span>
20
33
  </button>
21
34
 
22
35
  <dialog pgs="header-mobile-dialog" pgs-option="right ">
23
36
  <div pgs="modal-dialog-content header-mobile-content">
37
+ <nav pgs="menuVertical" aria-label="Menu mobile">
38
+ <ul>
39
+ <li><a href="/">Home</a></li>
40
+ <li><a href="#componenti">Componenti</a></li>
41
+ <li><a href="#layout">Layout</a></li>
42
+ </ul>
43
+ </nav>
24
44
  </div>
25
45
  </dialog>
26
46
  </div>
@@ -40,4 +60,4 @@
40
60
  document.querySelector("[pgs~=header-element]").setAttribute("data-header-mobileActive", "true");
41
61
  }
42
62
  </script>
43
- </header>
63
+ </header>
@@ -0,0 +1,22 @@
1
+ <div pgs="pageShell">
2
+ <aside pgs="pageShell-asideLeft aside">
3
+ <nav pgs="menuVertical" aria-label="Navigazione laterale">
4
+ <ul>
5
+ <li><a href="#sezione-uno">Sezione uno</a></li>
6
+ <li><a href="#sezione-due">Sezione due</a></li>
7
+ </ul>
8
+ </nav>
9
+ </aside>
10
+
11
+ <main pgs="pageShell-content main">
12
+ <section pgs="section flexColumnElements" id="sezione-uno">
13
+ <p>Contenuto principale della pagina.</p>
14
+ </section>
15
+ </main>
16
+
17
+ <aside pgs="pageShell-asideRight aside">
18
+ <div pgs="card flexColumnTexts">
19
+ <p>Box laterale</p>
20
+ </div>
21
+ </aside>
22
+ </div>
@@ -0,0 +1,25 @@
1
+ <section pgs="section flexColumnElements">
2
+ <div pgs="container flexColumnTexts">
3
+ <h2>Sezione standard</h2>
4
+ <p>Contenuto centrato dentro una sezione MyPGS.</p>
5
+ </div>
6
+ </section>
7
+
8
+ <section pgs="sectionFull flexColumnElements">
9
+ <div pgs="grid-3">
10
+ <article pgs="card flexColumnTexts">
11
+ <h3>Colonna uno</h3>
12
+ <p>Contenuto della prima colonna.</p>
13
+ </article>
14
+
15
+ <article pgs="card flexColumnTexts">
16
+ <h3>Colonna due</h3>
17
+ <p>Contenuto della seconda colonna.</p>
18
+ </article>
19
+
20
+ <article pgs="card flexColumnTexts">
21
+ <h3>Colonna tre</h3>
22
+ <p>Contenuto della terza colonna.</p>
23
+ </article>
24
+ </div>
25
+ </section>
@@ -1,134 +0,0 @@
1
- const API = new WeakMap();
2
- PGS_tabs()
3
-
4
- export function PGS_tabs() {
5
- pgs(document).querySelectorAll("tabs").forEach(tabsWizard => {
6
-
7
- //= INIT
8
- // if (tabsWizard.getAttribute("data-initialize") == "true") return;
9
- // tabsWizard.setAttribute("data-initialize", "true");
10
-
11
- //= SELECTOR
12
- const prev = pgs(tabsWizard).querySelector("tabs-prev")
13
- const next = pgs(tabsWizard).querySelector("tabs-next")
14
- const restart = pgs(tabsWizard).querySelector("tabs-restart")
15
- const dots = pgs(tabsWizard).querySelector("tabs-dots")
16
- const tabsContainer = pgs(tabsWizard).querySelector("tabs-container");
17
- const allTab = pgs(tabsContainer).querySelectorAll("tab");
18
-
19
- //= SETTING
20
- const total = allTab.length;
21
- const defaultTabLocked = Array.from(allTab).filter(tab => tab.getAttribute("data-tab-locked") === "true")
22
- let current = 0;
23
- prev.disabled = true;
24
-
25
- //- CREAZIONE DOTS
26
- const tabDots = [];
27
- if (dots) {
28
- dots.innerHTML = "";
29
-
30
- allTab.forEach((tab, index) => {
31
-
32
- const iconClass = tab.getAttribute("data-tab-icon") || "fa-circle";
33
-
34
- const dot = document.createElement("button");
35
- dot.type = "button";
36
- dot.className = "tab-dot";
37
- dot.setAttribute("data-step", index);
38
- dot.innerHTML = `<i class="fa-solid ${iconClass}"></i>`;
39
-
40
- dot.addEventListener("click", () => {
41
- if (dot.classList.contains("is-completed")) {
42
- goTo(index, true);
43
- }
44
- });
45
-
46
- dots.appendChild(dot);
47
- tabDots.push(dot);
48
- });
49
- }
50
-
51
- //+ DOTS
52
- function updateDots() {
53
- tabDots.forEach((dot, i) => {
54
- dot.classList.toggle("is-active", i === current);
55
- dot.classList.toggle("is-completed", i < current);
56
- });
57
- }
58
-
59
- //+ Step
60
- function goTo(index) {
61
- current = Math.min(Math.max(index, 0), total - 1);
62
- const tab = allTab[current]
63
-
64
- prev.disabled = (current === 0);
65
- next.disabled = (current === total - 1 || tab.getAttribute("data-tab-locked") === "true");
66
-
67
- allTab.forEach((tab, i) => tab.classList.toggle("is-active", i === current));
68
- tab?.focus();
69
- tabsWizard?.scrollIntoView({ behavior: "smooth", block: "start" });
70
- updateDots();
71
- tabsWizard.dispatchEvent(new CustomEvent('tabs:change', { detail: { current, total } }));
72
- }
73
-
74
- //+ restart
75
- function restartTab() {
76
- goTo(0);
77
- defaultTabLocked.forEach(tab => tab.setAttribute("data-tab-locked", "true"));
78
- }
79
-
80
- //= INIT
81
- goTo(0);
82
-
83
- //= data-tab-locked
84
- const observer = new MutationObserver(() => goTo(current));
85
- allTab?.forEach(tabEl => observer.observe(tabEl, { attributes: true, attributeFilter: ["data-tab-locked"], }));
86
-
87
-
88
- //= Click su Avanti/Indietro
89
- prev?.addEventListener("click", e => goTo(current - 1));
90
- next?.addEventListener("click", e => goTo(current + 1));
91
- restart?.addEventListener("click", e => restartTab(), { capture: true });
92
-
93
- //-(API)
94
- // tabsWizard.addEventListener("tabs:reset", () => restartTab());
95
- API.set(tabsWizard, {
96
- restart: restartTab,
97
- goTo,
98
- next: () => goTo(current + 1),
99
- prev: () => goTo(current - 1),
100
- toggleLock: (step, lock = true) => typeof step === "number" && allTab[step] && (allTab[step].setAttribute("data-tab-locked", lock.toString()), goTo(current)),
101
- getCurrent: () => current,
102
- getState: () => ({ current, total }),
103
- });
104
- });
105
- }
106
-
107
- export function PGS_tabs_api(selector) {
108
- return API.get(selector);
109
- }
110
-
111
-
112
- /*
113
- / EXAMPLE
114
- // vai allo step 2
115
- w.dispatchEvent(new CustomEvent("tabs:go", { detail: { step: 2 } }));
116
-
117
- // next
118
- w.dispatchEvent(new CustomEvent("tabs:next"));
119
-
120
- // prev
121
- w.dispatchEvent(new CustomEvent("tabs:prev"));
122
-
123
- // reset a 0 senza relock
124
- w.dispatchEvent(new CustomEvent("tabs:reset"));
125
-
126
- // lock step 3
127
- w.dispatchEvent(new CustomEvent("tabs:toggle-lock", { detail: { step: 3, lock: true } }));
128
-
129
- // unlock step 3
130
- w.dispatchEvent(new CustomEvent("tabs:toggle-lock", { detail: { step: 3, lock: false } }));
131
-
132
- // leggi stato
133
- w.dispatchEvent(new CustomEvent("tabs:get", { detail: { reply: (state) => console.log(state) } }));
134
- */
@@ -1,69 +0,0 @@
1
- [pgs~=tabs] {
2
- [pgs~=tabs-container] {
3
- [pgs~=tab] {
4
- display: none;
5
-
6
- &.is-active {
7
- display: flex;
8
- }
9
- }
10
- }
11
-
12
- [pgs~=tabs-next] {
13
- --button-background: var(--color-primary);
14
- color: var(--color-whiteFixed);
15
- --button-padding: var(--button-size) var(--button-size) var(--button-size) calc(var(--button-size) + var(--button-size) / 2);
16
- }
17
-
18
- [pgs~=tabs-dots] {
19
- display: flex;
20
- gap: var(--gap-texts);
21
- justify-content: space-between;
22
- align-items: center;
23
- position: relative;
24
- margin-inline: 10%;
25
- margin-block: var(--gap-texts);
26
- isolation: isolate;
27
-
28
- &::before {
29
- content: "";
30
- width: 100%;
31
- border-bottom: var(--border-complete);
32
- position: absolute;
33
- top: 50%;
34
- z-index: -1;
35
- }
36
-
37
- .tab-dot {
38
- padding: 12px;
39
- border-radius: 50%;
40
- aspect-ratio: 1;
41
- border: none;
42
- background: light-dark(var(--color-background), var(--color-box-transparent));
43
- transition: all 0.2s ease;
44
-
45
- i {
46
- --fa-size: 2.2rem;
47
- --fa-primary-color: var(--color-black);
48
- --fa-secondary-color: var(--color-black);
49
- color: var(--color-black);
50
- }
51
- }
52
-
53
- .tab-dot.is-completed {
54
- cursor: pointer;
55
- background: var(--color-primary-soft);
56
- }
57
-
58
- .tab-dot.is-active {
59
- background: var(--color-primary);
60
- scale: 1.2;
61
-
62
- i {
63
- --fa-primary-color: var(--color-whiteFixed);
64
- --fa-secondary-color: var(--color-whiteFixed);
65
- color: var(--color-whiteFixed);
66
- }
67
- }
68
- }
69
- }