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.
Files changed (52) hide show
  1. package/assets/javascript/_pgs.js +18 -3
  2. package/assets/javascript/components/_slides.js +3 -3
  3. package/assets/javascript/components/_stepTabs.js +157 -0
  4. package/assets/javascript/index.js +1 -1
  5. package/assets/scss/base/_body.scss +3 -2
  6. package/assets/scss/base/_general.scss +46 -43
  7. package/assets/scss/base/_heading.scss +17 -15
  8. package/assets/scss/components/_accordion.scss +1 -0
  9. package/assets/scss/components/_notification.scss +4 -4
  10. package/assets/scss/components/_searchbar.scss +2 -2
  11. package/assets/scss/components/_slides.scss +5 -4
  12. package/assets/scss/components/_stepTabs.scss +58 -0
  13. package/assets/scss/components/_steps.scss +4 -3
  14. package/assets/scss/components/_table.scss +1 -1
  15. package/assets/scss/components/_tooltip.scss +2 -5
  16. package/assets/scss/index.scss +29 -32
  17. package/assets/scss/layout/_gap.scss +3 -0
  18. package/assets/scss/mixin/_mx-button.scss +55 -32
  19. package/assets/scss/mixin/_mx-menu.scss +1 -1
  20. package/dist/css/index.css +2113 -1691
  21. package/dist/css/index.css.map +1 -1
  22. package/dist/css/index.min.css +1 -1
  23. package/dist/javascript/index.js +135 -97
  24. package/dist/javascript/index.js.map +1 -1
  25. package/dist/javascript/index.min.js +1 -1
  26. package/package.json +2 -2
  27. package/templates/components/md-accordion.html +23 -0
  28. package/templates/components/md-breadcumbs.html +8 -8
  29. package/templates/components/md-button.html +23 -0
  30. package/templates/components/md-card.html +21 -0
  31. package/templates/components/md-dropdown.html +16 -0
  32. package/templates/components/md-form.html +26 -0
  33. package/templates/components/md-logo.html +7 -0
  34. package/templates/components/md-menu.html +39 -5
  35. package/templates/components/md-modal.html +19 -0
  36. package/templates/components/md-notification.html +4 -1
  37. package/templates/components/md-searchbar.html +6 -1
  38. package/templates/components/md-slides.html +33 -0
  39. package/templates/components/md-stepTabs.html +36 -0
  40. package/templates/components/md-steps.html +25 -0
  41. package/templates/components/md-table.html +24 -0
  42. package/templates/demo.css +47 -0
  43. package/templates/demo.html +24 -0
  44. package/templates/demo.js +141 -0
  45. package/templates/layout/md-body.html +1 -1
  46. package/templates/layout/md-cookieConsent.html +2 -2
  47. package/templates/layout/md-footer.html +21 -2
  48. package/templates/layout/md-header.html +22 -2
  49. package/templates/layout/md-pageShell.html +22 -0
  50. package/templates/layout/md-section.html +25 -0
  51. package/assets/javascript/components/_tabs.js +0 -134
  52. package/assets/scss/components/_tabs.scss +0 -69
@@ -152,15 +152,30 @@ function pgs(root) {
152
152
  return api;
153
153
  };
154
154
 
155
- api.toggle = function (value) {
155
+ api.toggle = function (value, force) {
156
156
  const v = String(value).trim();
157
157
  if (!v) return false;
158
-
159
158
  const current = read();
160
- if (current.includes(v)) {
159
+ const exists = current.includes(v);
160
+
161
+ if (force !== undefined) {
162
+ if (force && !exists) {
163
+ current.push(v);
164
+ write(current);
165
+ }
166
+
167
+ if (!force && exists) {
168
+ write(current.filter(x => x !== v));
169
+ }
170
+
171
+ return !!force;
172
+ }
173
+
174
+ if (exists) {
161
175
  write(current.filter(x => x !== v));
162
176
  return false;
163
177
  }
178
+
164
179
  current.push(v);
165
180
  write(current);
166
181
  return true;
@@ -1013,8 +1028,8 @@ class PGS_Slides {
1013
1028
 
1014
1029
  //== PULSANTI
1015
1030
  if (!pgs(EL).querySelector('slides-prec') && !pgs(EL).querySelector('slides-next')) {
1016
- EL.insertAdjacentHTML("afterbegin", `<button pgs="slides-prec button" type="button" class="precButton" aria-label="slide precedente"> <span> <i class="fa-solid fa-arrow-left"></i></span></button>`);
1017
- EL.insertAdjacentHTML("beforeend", `<button pgs="slides-next button" type="button" class="nextButton" aria-label="prossima slide"> <span> <i class="fa-solid fa-arrow-right"></i></span></button>`);
1031
+ EL.insertAdjacentHTML("afterbegin", `<button pgs="slides-prec buttonIcon" type="button" class="precButton" aria-label="slide precedente"> <span> <i class="fa-solid fa-arrow-left"></i></span></button>`);
1032
+ EL.insertAdjacentHTML("beforeend", `<button pgs="slides-next buttonIcon" type="button" class="nextButton" aria-label="prossima slide"> <span> <i class="fa-solid fa-arrow-right"></i></span></button>`);
1018
1033
  }
1019
1034
 
1020
1035
  //== DOTS
@@ -1072,7 +1087,7 @@ class PGS_Slides {
1072
1087
  const isView = visiblePercent >= 0.98;
1073
1088
 
1074
1089
  //== SCROLL ANIMATION
1075
- if (!pgs(LI.target).option.contains('notScrollAnimation')) {
1090
+ if (!pgs(LI.target).option.contains('notScrollAnimation') && LI.target.firstElementChild) {
1076
1091
  LI.target.firstElementChild.style.setProperty('--visible-percent', `${visiblePercent}`);
1077
1092
  };
1078
1093
 
@@ -1168,82 +1183,42 @@ function PGS_slides_api(selector) {
1168
1183
 
1169
1184
  /***/ },
1170
1185
 
1171
- /***/ "./assets/javascript/components/_steps.js"
1172
- /*!************************************************!*\
1173
- !*** ./assets/javascript/components/_steps.js ***!
1174
- \************************************************/
1175
- (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1176
-
1177
- "use strict";
1178
- __webpack_require__.r(__webpack_exports__);
1179
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1180
- /* harmony export */ PGS_ol: () => (/* binding */ PGS_ol)
1181
- /* harmony export */ });
1182
-
1183
- function PGS_ol() {
1184
- pgs(document).querySelectorAll("steps").forEach(steps => {
1185
-
1186
- pgs(steps).querySelectorAll("steps-step").forEach((li, index) => {
1187
-
1188
- //= CIRCLE
1189
- let circleLi;
1190
- if (!pgs(li).querySelector("steps-step-circle")) {
1191
- circleLi = document.createElement("span");
1192
- pgs(circleLi).add("steps-step-circle")
1193
- circleLi.textContent = index + 1;
1194
- li.insertAdjacentElement("afterbegin", circleLi);
1195
- } else{
1196
- circleLi = pgs(li).querySelector("steps-step-circle");
1197
- }
1198
-
1199
- //= line
1200
- const line = document.createElement("span");
1201
- pgs(line).add("steps-step-line")
1202
- li.insertAdjacentElement("afterbegin", line);
1203
- });
1204
- });
1205
- }
1206
-
1207
- //# INIT PGS_ol
1208
- PGS_ol()
1209
-
1210
- /***/ },
1211
-
1212
- /***/ "./assets/javascript/components/_tabs.js"
1213
- /*!***********************************************!*\
1214
- !*** ./assets/javascript/components/_tabs.js ***!
1215
- \***********************************************/
1186
+ /***/ "./assets/javascript/components/_stepTabs.js"
1187
+ /*!***************************************************!*\
1188
+ !*** ./assets/javascript/components/_stepTabs.js ***!
1189
+ \***************************************************/
1216
1190
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1217
1191
 
1218
1192
  "use strict";
1219
1193
  __webpack_require__.r(__webpack_exports__);
1220
1194
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1221
- /* harmony export */ PGS_tabs: () => (/* binding */ PGS_tabs),
1195
+ /* harmony export */ PGS_stepTabs: () => (/* binding */ PGS_stepTabs),
1222
1196
  /* harmony export */ PGS_tabs_api: () => (/* binding */ PGS_tabs_api)
1223
1197
  /* harmony export */ });
1224
1198
  const API = new WeakMap();
1225
- PGS_tabs()
1199
+ PGS_stepTabs()
1226
1200
 
1227
- function PGS_tabs() {
1228
- pgs(document).querySelectorAll("tabs").forEach(tabsWizard => {
1229
-
1230
- //= INIT
1231
- // if (tabsWizard.getAttribute("data-initialize") == "true") return;
1232
- // tabsWizard.setAttribute("data-initialize", "true");
1201
+ function PGS_stepTabs() {
1202
+ pgs(document).querySelectorAll("stepTabs").forEach(tabsWizard => {
1203
+ if (tabsWizard.dataset.stepTabsInitialized === "true") return;
1204
+ tabsWizard.dataset.stepTabsInitialized = "true";
1233
1205
 
1234
1206
  //= SELECTOR
1235
- const prev = pgs(tabsWizard).querySelector("tabs-prev")
1236
- const next = pgs(tabsWizard).querySelector("tabs-next")
1237
- const restart = pgs(tabsWizard).querySelector("tabs-restart")
1238
- const dots = pgs(tabsWizard).querySelector("tabs-dots")
1239
- const tabsContainer = pgs(tabsWizard).querySelector("tabs-container");
1207
+ const prev = pgs(tabsWizard).querySelector("stepTabs-prev")
1208
+ const next = pgs(tabsWizard).querySelector("stepTabs-next")
1209
+ const restart = pgs(tabsWizard).querySelector("stepTabs-restart")
1210
+ const dots = pgs(tabsWizard).querySelector("stepTabs-dots")
1211
+ const tabsContainer = pgs(tabsWizard).querySelector("stepTabs-container");
1240
1212
  const allTab = pgs(tabsContainer).querySelectorAll("tab");
1241
1213
 
1242
1214
  //= SETTING
1243
1215
  const total = allTab.length;
1244
- const defaultTabLocked = Array.from(allTab).filter(tab => tab.getAttribute("data-tab-locked") === "true")
1216
+ const defaultTabLocked = Array.from(allTab).filter(tab => pgs(tab).state.contains("is-locked"))
1245
1217
  let current = 0;
1246
- prev.disabled = true;
1218
+ if (prev) prev.disabled = true;
1219
+ let isRendering = false;
1220
+
1221
+ if (!tabsContainer || total === 0) return;
1247
1222
 
1248
1223
  //- CREAZIONE DOTS
1249
1224
  const tabDots = [];
@@ -1251,17 +1226,15 @@ function PGS_tabs() {
1251
1226
  dots.innerHTML = "";
1252
1227
 
1253
1228
  allTab.forEach((tab, index) => {
1254
-
1255
1229
  const iconClass = tab.getAttribute("data-tab-icon") || "fa-circle";
1256
-
1257
1230
  const dot = document.createElement("button");
1258
1231
  dot.type = "button";
1259
- dot.className = "tab-dot";
1232
+ pgs(dot).add("stepTabs-dots-dot");
1260
1233
  dot.setAttribute("data-step", index);
1261
1234
  dot.innerHTML = `<i class="fa-solid ${iconClass}"></i>`;
1262
1235
 
1263
1236
  dot.addEventListener("click", () => {
1264
- if (dot.classList.contains("is-completed")) {
1237
+ if (pgs(dot).state.contains("is-completed")) {
1265
1238
  goTo(index, true);
1266
1239
  }
1267
1240
  });
@@ -1274,53 +1247,78 @@ function PGS_tabs() {
1274
1247
  //+ DOTS
1275
1248
  function updateDots() {
1276
1249
  tabDots.forEach((dot, i) => {
1277
- dot.classList.toggle("is-active", i === current);
1278
- dot.classList.toggle("is-completed", i < current);
1250
+ setState(dot, "is-active", i === current);
1251
+ setState(dot, "is-completed", i < current);
1279
1252
  });
1280
1253
  }
1281
1254
 
1255
+ //+ STATE
1256
+ function setState(element, state, active) {
1257
+ if (!element) return;
1258
+ const hasState = pgs(element).state.contains(state);
1259
+ if (active === hasState) return;
1260
+ pgs(element).state.toggle(state, active);
1261
+ }
1262
+
1263
+ //+ CONTROLS
1264
+ function updateControls() {
1265
+ const tab = allTab[current];
1266
+ if (prev) prev.disabled = current === 0;
1267
+ if (next) next.disabled = current === total - 1 || pgs(tab).state.contains("is-locked");
1268
+ }
1269
+
1282
1270
  //+ Step
1283
- function goTo(index) {
1271
+ function goTo(index, scroll = true) {
1284
1272
  current = Math.min(Math.max(index, 0), total - 1);
1285
1273
  const tab = allTab[current]
1286
1274
 
1287
- prev.disabled = (current === 0);
1288
- next.disabled = (current === total - 1 || tab.getAttribute("data-tab-locked") === "true");
1289
-
1290
- allTab.forEach((tab, i) => tab.classList.toggle("is-active", i === current));
1291
- tab?.focus();
1292
- tabsWizard?.scrollIntoView({ behavior: "smooth", block: "start" });
1275
+ isRendering = true;
1276
+ allTab.forEach((tab, i) => setState(tab, "is-active", i === current));
1277
+ updateControls();
1293
1278
  updateDots();
1294
- tabsWizard.dispatchEvent(new CustomEvent('tabs:change', { detail: { current, total } }));
1279
+ isRendering = false;
1280
+
1281
+ if (scroll && !tabsWizard.closest("dialog")) {
1282
+ tab?.focus();
1283
+ tabsWizard?.scrollIntoView({ behavior: "smooth", block: "start" });
1284
+ }
1285
+
1286
+ tabsWizard.dispatchEvent(new CustomEvent('stepTabs:change', { detail: { current, total } }));
1295
1287
  }
1296
1288
 
1297
1289
  //+ restart
1298
1290
  function restartTab() {
1299
1291
  goTo(0);
1300
- defaultTabLocked.forEach(tab => tab.setAttribute("data-tab-locked", "true"));
1292
+ defaultTabLocked.forEach(tab => pgs(tab).state.add("is-locked"));
1301
1293
  }
1302
1294
 
1303
1295
  //= INIT
1304
- goTo(0);
1296
+ goTo(0, false);
1305
1297
 
1306
1298
  //= data-tab-locked
1307
- const observer = new MutationObserver(() => goTo(current));
1308
- allTab?.forEach(tabEl => observer.observe(tabEl, { attributes: true, attributeFilter: ["data-tab-locked"], }));
1309
-
1299
+ const observer = new MutationObserver(() => {
1300
+ if (isRendering) return;
1301
+ updateControls();
1302
+ });
1303
+ allTab?.forEach(tabEl => observer.observe(tabEl, { attributes: true, attributeFilter: ["pgs-state"], }));
1310
1304
 
1311
1305
  //= Click su Avanti/Indietro
1312
1306
  prev?.addEventListener("click", e => goTo(current - 1));
1313
- next?.addEventListener("click", e => goTo(current + 1));
1307
+ next?.addEventListener("click", e => {
1308
+ updateControls();
1309
+ if (next.disabled) return;
1310
+ goTo(current + 1);
1311
+ });
1314
1312
  restart?.addEventListener("click", e => restartTab(), { capture: true });
1315
1313
 
1316
1314
  //-(API)
1317
- // tabsWizard.addEventListener("tabs:reset", () => restartTab());
1315
+ // tabsWizard.addEventListener("stepTabs:reset", () => restartTab());
1318
1316
  API.set(tabsWizard, {
1319
1317
  restart: restartTab,
1320
1318
  goTo,
1321
1319
  next: () => goTo(current + 1),
1322
1320
  prev: () => goTo(current - 1),
1323
- toggleLock: (step, lock = true) => typeof step === "number" && allTab[step] && (allTab[step].setAttribute("data-tab-locked", lock.toString()), goTo(current)),
1321
+ toggleLock: (step, lock = true) => typeof step === "number" && allTab[step] && (pgs(allTab[step]).state.toggle("is-locked", lock), goTo(current)),
1324
1322
  getCurrent: () => current,
1325
1323
  getState: () => ({ current, total }),
1326
1324
  });
@@ -1331,32 +1329,72 @@ function PGS_tabs_api(selector) {
1331
1329
  return API.get(selector);
1332
1330
  }
1333
1331
 
1334
-
1335
1332
  /*
1336
1333
  / EXAMPLE
1337
1334
  // vai allo step 2
1338
- w.dispatchEvent(new CustomEvent("tabs:go", { detail: { step: 2 } }));
1335
+ w.dispatchEvent(new CustomEvent("stepTabs:go", { detail: { step: 2 } }));
1339
1336
 
1340
1337
  // next
1341
- w.dispatchEvent(new CustomEvent("tabs:next"));
1338
+ w.dispatchEvent(new CustomEvent("stepTabs:next"));
1342
1339
 
1343
1340
  // prev
1344
- w.dispatchEvent(new CustomEvent("tabs:prev"));
1341
+ w.dispatchEvent(new CustomEvent("stepTabs:prev"));
1345
1342
 
1346
1343
  // reset a 0 senza relock
1347
- w.dispatchEvent(new CustomEvent("tabs:reset"));
1344
+ w.dispatchEvent(new CustomEvent("stepTabs:reset"));
1348
1345
 
1349
1346
  // lock step 3
1350
- w.dispatchEvent(new CustomEvent("tabs:toggle-lock", { detail: { step: 3, lock: true } }));
1347
+ w.dispatchEvent(new CustomEvent("stepTabs:toggle-lock", { detail: { step: 3, lock: true } }));
1351
1348
 
1352
1349
  // unlock step 3
1353
- w.dispatchEvent(new CustomEvent("tabs:toggle-lock", { detail: { step: 3, lock: false } }));
1350
+ w.dispatchEvent(new CustomEvent("stepTabs:toggle-lock", { detail: { step: 3, lock: false } }));
1354
1351
 
1355
1352
  // leggi stato
1356
- w.dispatchEvent(new CustomEvent("tabs:get", { detail: { reply: (state) => console.log(state) } }));
1353
+ w.dispatchEvent(new CustomEvent("stepTabs:get", { detail: { reply: (state) => console.log(state) } }));
1357
1354
  */
1358
1355
 
1359
1356
 
1357
+ /***/ },
1358
+
1359
+ /***/ "./assets/javascript/components/_steps.js"
1360
+ /*!************************************************!*\
1361
+ !*** ./assets/javascript/components/_steps.js ***!
1362
+ \************************************************/
1363
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1364
+
1365
+ "use strict";
1366
+ __webpack_require__.r(__webpack_exports__);
1367
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1368
+ /* harmony export */ PGS_ol: () => (/* binding */ PGS_ol)
1369
+ /* harmony export */ });
1370
+
1371
+ function PGS_ol() {
1372
+ pgs(document).querySelectorAll("steps").forEach(steps => {
1373
+
1374
+ pgs(steps).querySelectorAll("steps-step").forEach((li, index) => {
1375
+
1376
+ //= CIRCLE
1377
+ let circleLi;
1378
+ if (!pgs(li).querySelector("steps-step-circle")) {
1379
+ circleLi = document.createElement("span");
1380
+ pgs(circleLi).add("steps-step-circle")
1381
+ circleLi.textContent = index + 1;
1382
+ li.insertAdjacentElement("afterbegin", circleLi);
1383
+ } else{
1384
+ circleLi = pgs(li).querySelector("steps-step-circle");
1385
+ }
1386
+
1387
+ //= line
1388
+ const line = document.createElement("span");
1389
+ pgs(line).add("steps-step-line")
1390
+ li.insertAdjacentElement("afterbegin", line);
1391
+ });
1392
+ });
1393
+ }
1394
+
1395
+ //# INIT PGS_ol
1396
+ PGS_ol()
1397
+
1360
1398
  /***/ },
1361
1399
 
1362
1400
  /***/ "./assets/javascript/functions/_notifications.js"
@@ -2002,7 +2040,7 @@ __webpack_require__.r(__webpack_exports__);
2002
2040
  /* harmony import */ var _components_modals_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/_modals.js */ "./assets/javascript/components/_modals.js");
2003
2041
  /* harmony import */ var _components_slides_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./components/_slides.js */ "./assets/javascript/components/_slides.js");
2004
2042
  /* harmony import */ var _components_steps_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./components/_steps.js */ "./assets/javascript/components/_steps.js");
2005
- /* harmony import */ var _components_tabs_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./components/_tabs.js */ "./assets/javascript/components/_tabs.js");
2043
+ /* harmony import */ var _components_stepTabs_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./components/_stepTabs.js */ "./assets/javascript/components/_stepTabs.js");
2006
2044
  /* harmony import */ var _patterns_header_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./patterns/_header.js */ "./assets/javascript/patterns/_header.js");
2007
2045
  /* harmony import */ var _patterns_cookieConsent_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./patterns/_cookieConsent.js */ "./assets/javascript/patterns/_cookieConsent.js");
2008
2046
  /* harmony import */ var _patterns_cookieConsent_js__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_patterns_cookieConsent_js__WEBPACK_IMPORTED_MODULE_12__);