mypgs 1.0.0 → 1.1.2
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/assets/javascript/_pgs.js +18 -3
- package/assets/javascript/components/_slides.js +3 -3
- package/assets/javascript/components/_stepTabs.js +157 -0
- package/assets/javascript/index.js +1 -1
- package/assets/scss/base/_body.scss +3 -2
- package/assets/scss/base/_general.scss +46 -43
- package/assets/scss/base/_heading.scss +17 -15
- package/assets/scss/components/_accordion.scss +1 -0
- package/assets/scss/components/_notification.scss +4 -4
- package/assets/scss/components/_searchbar.scss +2 -2
- package/assets/scss/components/_slides.scss +5 -4
- package/assets/scss/components/_stepTabs.scss +58 -0
- package/assets/scss/components/_steps.scss +4 -3
- package/assets/scss/components/_table.scss +1 -1
- package/assets/scss/components/_tooltip.scss +2 -5
- package/assets/scss/index.scss +29 -32
- package/assets/scss/layout/_gap.scss +3 -0
- package/assets/scss/mixin/_mx-button.scss +55 -32
- package/assets/scss/mixin/_mx-menu.scss +1 -1
- package/dist/css/index.css +2113 -1691
- package/dist/css/index.css.map +1 -1
- package/dist/css/index.min.css +1 -1
- package/dist/javascript/index.js +135 -97
- package/dist/javascript/index.js.map +1 -1
- package/dist/javascript/index.min.js +1 -1
- package/package.json +2 -2
- package/templates/components/md-accordion.html +23 -0
- package/templates/components/md-breadcumbs.html +8 -8
- package/templates/components/md-button.html +23 -0
- package/templates/components/md-card.html +21 -0
- package/templates/components/md-dropdown.html +16 -0
- package/templates/components/md-form.html +26 -0
- package/templates/components/md-logo.html +7 -0
- package/templates/components/md-menu.html +39 -5
- package/templates/components/md-modal.html +19 -0
- package/templates/components/md-notification.html +4 -1
- package/templates/components/md-searchbar.html +6 -1
- package/templates/components/md-slides.html +33 -0
- package/templates/components/md-stepTabs.html +36 -0
- package/templates/components/md-steps.html +25 -0
- package/templates/components/md-table.html +24 -0
- package/templates/demo.css +47 -0
- package/templates/demo.html +24 -0
- package/templates/demo.js +141 -0
- package/templates/layout/md-body.html +1 -1
- package/templates/layout/md-cookieConsent.html +2 -2
- package/templates/layout/md-footer.html +21 -2
- package/templates/layout/md-header.html +22 -2
- package/templates/layout/md-pageShell.html +22 -0
- package/templates/layout/md-section.html +25 -0
- package/assets/javascript/components/_tabs.js +0 -134
- 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
|
|
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
|
-
}
|