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.
- package/README.md +124 -11
- package/assets/javascript/_pgs.js +18 -3
- package/assets/javascript/components/_dropdown.js +3 -2
- 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/javascript/pgs.d.ts +47 -16
- 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/_dropdown.scss +19 -26
- 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 +11 -6
- package/assets/scss/index.scss +29 -32
- package/assets/scss/layout/_gap.scss +3 -0
- package/assets/scss/mixin/_mx-button.scss +64 -41
- package/assets/scss/mixin/_mx-menu.scss +1 -1
- package/dist/css/index.css +2149 -1729
- package/dist/css/index.css.map +1 -1
- package/dist/css/index.min.css +1 -1
- package/dist/index.d.ts +45 -15
- package/dist/javascript/index.js +139 -100
- package/dist/javascript/index.js.map +1 -1
- package/dist/javascript/index.min.js +1 -1
- package/package.json +2 -2
- package/pgs-html-suggestions.vsix +0 -0
- package/templates/components/md-accordion.html +23 -0
- package/templates/components/md-breadcumbs.html +8 -8
- package/templates/components/md-button.html +29 -0
- package/templates/components/md-card.html +23 -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/components/md-tooltip.html +1 -0
- package/templates/demo.css +51 -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
package/README.md
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
# MyPGS
|
|
2
2
|
|
|
3
|
-
Libreria frontend
|
|
3
|
+
Libreria frontend condivisa per componenti, layout e pattern basati sull'attributo `pgs`.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Contiene sorgenti SCSS, mixin, comportamenti JavaScript, template HTML di esempio e asset compilati pronti all'uso. Puo' essere usata sia importando direttamente CSS e JavaScript compilati, sia importando gli SCSS sorgenti dentro il build del progetto che la utilizza.
|
|
6
|
+
|
|
7
|
+
## Installazione come dipendenza
|
|
8
|
+
|
|
9
|
+
Da registry npm, se pubblicata:
|
|
6
10
|
|
|
7
11
|
```bash
|
|
8
12
|
npm install mypgs
|
|
@@ -10,24 +14,133 @@ npm install mypgs
|
|
|
10
14
|
|
|
11
15
|
## Utilizzo
|
|
12
16
|
|
|
13
|
-
|
|
17
|
+
### JavaScript
|
|
18
|
+
|
|
19
|
+
Importa la libreria nell'entrypoint JavaScript del progetto:
|
|
14
20
|
|
|
15
21
|
```js
|
|
16
|
-
import "mypgs";
|
|
17
|
-
|
|
22
|
+
import * as mypgs from "mypgs";
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
L'entrypoint di MyPGS inizializza:
|
|
26
|
+
|
|
27
|
+
- helper globale `pgs`
|
|
28
|
+
- dark mode
|
|
29
|
+
- gestione oggetti PGS
|
|
30
|
+
- accordion
|
|
31
|
+
- dropdown
|
|
32
|
+
- menu
|
|
33
|
+
- modali
|
|
34
|
+
- slides
|
|
35
|
+
- steps
|
|
36
|
+
- step tabs
|
|
37
|
+
- notifiche
|
|
38
|
+
- header
|
|
39
|
+
- cookie consent
|
|
40
|
+
|
|
41
|
+
Il bundle finale viene generato dal progetto che importa `mypgs`, in base alla propria configurazione Webpack o al proprio bundler.
|
|
42
|
+
|
|
43
|
+
### SCSS
|
|
44
|
+
|
|
45
|
+
Per integrare MyPGS nel build SCSS del progetto, importa mixin e stili sorgenti da `node_modules`:
|
|
46
|
+
|
|
47
|
+
```scss
|
|
48
|
+
@import "../../node_modules/mypgs/assets/scss/mixin/mixin.scss";
|
|
49
|
+
@import "../../node_modules/mypgs/assets/scss/index.scss";
|
|
18
50
|
```
|
|
19
51
|
|
|
20
|
-
|
|
52
|
+
Se servono solo i mixin, importa solo il file dedicato:
|
|
53
|
+
|
|
54
|
+
```scss
|
|
55
|
+
@import "../../node_modules/mypgs/assets/scss/mixin/mixin.scss";
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Molti layout, componenti e pattern sono inclusi sotto `[pgs~=initP]`, quindi il markup principale deve abilitare la libreria così:
|
|
59
|
+
|
|
60
|
+
```html
|
|
61
|
+
<html pgs="htmlBase initP">
|
|
62
|
+
<body pgs="bodyBase bodyImg bodyText bodyHeading">
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Markup PGS
|
|
66
|
+
|
|
67
|
+
I componenti vengono attivati usando token nell'attributo `pgs`, per esempio:
|
|
68
|
+
|
|
69
|
+
```html
|
|
70
|
+
<nav pgs="menuHorizontal"></nav>
|
|
71
|
+
<button pgs="button modal-button"></button>
|
|
72
|
+
<div pgs="accordion">
|
|
73
|
+
<button pgs="accordion-button"></button>
|
|
74
|
+
<div pgs="accordion-content"></div>
|
|
75
|
+
</div>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Gli stessi token devono restare coerenti tra markup, SCSS e JavaScript.
|
|
21
79
|
|
|
22
80
|
## Contenuto del pacchetto
|
|
23
81
|
|
|
24
|
-
- `
|
|
25
|
-
- `
|
|
26
|
-
- `
|
|
27
|
-
- `dist/
|
|
82
|
+
- `assets/scss/`: sorgenti SCSS, mixin, base, layout, componenti e pattern
|
|
83
|
+
- `assets/javascript/`: sorgenti JavaScript dei comportamenti PGS
|
|
84
|
+
- `templates/`: esempi HTML dei componenti e dei layout
|
|
85
|
+
- `dist/javascript/index.js`: bundle JavaScript non minificato
|
|
86
|
+
- `dist/javascript/index.min.js`: bundle JavaScript minificato
|
|
87
|
+
- `dist/css/index.css`: CSS compilato non minificato
|
|
88
|
+
- `dist/css/index.min.css`: CSS compilato minificato
|
|
89
|
+
- `dist/index.d.ts`: dichiarazioni TypeScript esportate dal pacchetto
|
|
90
|
+
|
|
91
|
+
## Export npm
|
|
92
|
+
|
|
93
|
+
Il pacchetto espone:
|
|
94
|
+
|
|
95
|
+
```json
|
|
96
|
+
{
|
|
97
|
+
".": "./dist/javascript/index.js",
|
|
98
|
+
"./style.css": "./dist/css/index.css",
|
|
99
|
+
"./style.min.css": "./dist/css/index.min.css"
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Uso diretto degli asset compilati:
|
|
104
|
+
|
|
105
|
+
```js
|
|
106
|
+
import "mypgs";
|
|
107
|
+
import "mypgs/style.css";
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
In alternativa, puoi importare gli SCSS sorgenti direttamente nel build del progetto quando vuoi ottenere un unico CSS finale.
|
|
28
111
|
|
|
29
112
|
## Sviluppo
|
|
30
113
|
|
|
114
|
+
Build una tantum:
|
|
115
|
+
|
|
31
116
|
```bash
|
|
32
|
-
npm run
|
|
117
|
+
npm run start
|
|
33
118
|
```
|
|
119
|
+
|
|
120
|
+
Build in watch mode:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
npm run "start watch"
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Per preparare un archivio locale installabile in un altro progetto:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
npm pack
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Quando modifichi MyPGS e vuoi provarlo in un progetto che la usa:
|
|
133
|
+
|
|
134
|
+
1. ricompila MyPGS con `npm run start`
|
|
135
|
+
2. crea un nuovo archivio con `npm pack`
|
|
136
|
+
3. copia o aggiorna il `.tgz` usato dal progetto
|
|
137
|
+
4. esegui `npm install` nel progetto
|
|
138
|
+
5. ricompila il progetto
|
|
139
|
+
|
|
140
|
+
## Convenzioni
|
|
141
|
+
|
|
142
|
+
- Usa l'attributo `pgs` per collegare markup, CSS e JavaScript.
|
|
143
|
+
- Mantieni i token PGS coerenti tra template HTML, componenti, moduli e script.
|
|
144
|
+
- Metti in MyPGS solo stili e comportamenti riutilizzabili.
|
|
145
|
+
- Mantieni nel progetto finale gli stili e le personalizzazioni specifiche.
|
|
146
|
+
- Esporta in `dist/` prima di creare il pacchetto locale `.tgz`.
|
|
@@ -138,15 +138,30 @@ export function pgs(root) {
|
|
|
138
138
|
return api;
|
|
139
139
|
};
|
|
140
140
|
|
|
141
|
-
api.toggle = function (value) {
|
|
141
|
+
api.toggle = function (value, force) {
|
|
142
142
|
const v = String(value).trim();
|
|
143
143
|
if (!v) return false;
|
|
144
|
-
|
|
145
144
|
const current = read();
|
|
146
|
-
|
|
145
|
+
const exists = current.includes(v);
|
|
146
|
+
|
|
147
|
+
if (force !== undefined) {
|
|
148
|
+
if (force && !exists) {
|
|
149
|
+
current.push(v);
|
|
150
|
+
write(current);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (!force && exists) {
|
|
154
|
+
write(current.filter(x => x !== v));
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return !!force;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (exists) {
|
|
147
161
|
write(current.filter(x => x !== v));
|
|
148
162
|
return false;
|
|
149
163
|
}
|
|
164
|
+
|
|
150
165
|
current.push(v);
|
|
151
166
|
write(current);
|
|
152
167
|
return true;
|
|
@@ -34,9 +34,10 @@ export function pgs_dropdown() {
|
|
|
34
34
|
CSS.supports("position-anchor: --dropdown-anchor") &&
|
|
35
35
|
CSS.supports("position-area: bottom") &&
|
|
36
36
|
CSS.supports("top: anchor(bottom)");
|
|
37
|
+
const USE_FALLBACK_POSITIONING = pgs(DROPDOWN).contains("tooltip") || !HAS_ANCHOR_POSITIONING;
|
|
37
38
|
|
|
38
39
|
const updatePopoverPosition = () => {
|
|
39
|
-
if (
|
|
40
|
+
if (!USE_FALLBACK_POSITIONING) return;
|
|
40
41
|
|
|
41
42
|
const buttonRect = BUTTON.getBoundingClientRect();
|
|
42
43
|
const style = getComputedStyle(DROPDOWN);
|
|
@@ -71,7 +72,7 @@ export function pgs_dropdown() {
|
|
|
71
72
|
};
|
|
72
73
|
|
|
73
74
|
BUTTON.addEventListener("click", e => {
|
|
74
|
-
if (
|
|
75
|
+
if (!USE_FALLBACK_POSITIONING) return;
|
|
75
76
|
|
|
76
77
|
e.preventDefault();
|
|
77
78
|
if (CONTENT.matches(":popover-open")) {
|
|
@@ -30,8 +30,8 @@ class PGS_Slides {
|
|
|
30
30
|
|
|
31
31
|
//== PULSANTI
|
|
32
32
|
if (!pgs(EL).querySelector('slides-prec') && !pgs(EL).querySelector('slides-next')) {
|
|
33
|
-
EL.insertAdjacentHTML("afterbegin", `<button pgs="slides-prec
|
|
34
|
-
EL.insertAdjacentHTML("beforeend", `<button pgs="slides-next
|
|
33
|
+
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>`);
|
|
34
|
+
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>`);
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
//== DOTS
|
|
@@ -89,7 +89,7 @@ class PGS_Slides {
|
|
|
89
89
|
const isView = visiblePercent >= 0.98;
|
|
90
90
|
|
|
91
91
|
//== SCROLL ANIMATION
|
|
92
|
-
if (!pgs(LI.target).option.contains('notScrollAnimation')) {
|
|
92
|
+
if (!pgs(LI.target).option.contains('notScrollAnimation') && LI.target.firstElementChild) {
|
|
93
93
|
LI.target.firstElementChild.style.setProperty('--visible-percent', `${visiblePercent}`);
|
|
94
94
|
};
|
|
95
95
|
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
const API = new WeakMap();
|
|
2
|
+
PGS_stepTabs()
|
|
3
|
+
|
|
4
|
+
export function PGS_stepTabs() {
|
|
5
|
+
pgs(document).querySelectorAll("stepTabs").forEach(tabsWizard => {
|
|
6
|
+
if (tabsWizard.dataset.stepTabsInitialized === "true") return;
|
|
7
|
+
tabsWizard.dataset.stepTabsInitialized = "true";
|
|
8
|
+
|
|
9
|
+
//= SELECTOR
|
|
10
|
+
const prev = pgs(tabsWizard).querySelector("stepTabs-prev")
|
|
11
|
+
const next = pgs(tabsWizard).querySelector("stepTabs-next")
|
|
12
|
+
const restart = pgs(tabsWizard).querySelector("stepTabs-restart")
|
|
13
|
+
const dots = pgs(tabsWizard).querySelector("stepTabs-dots")
|
|
14
|
+
const tabsContainer = pgs(tabsWizard).querySelector("stepTabs-container");
|
|
15
|
+
const allTab = pgs(tabsContainer).querySelectorAll("tab");
|
|
16
|
+
|
|
17
|
+
//= SETTING
|
|
18
|
+
const total = allTab.length;
|
|
19
|
+
const defaultTabLocked = Array.from(allTab).filter(tab => pgs(tab).state.contains("is-locked"))
|
|
20
|
+
let current = 0;
|
|
21
|
+
if (prev) prev.disabled = true;
|
|
22
|
+
let isRendering = false;
|
|
23
|
+
|
|
24
|
+
if (!tabsContainer || total === 0) return;
|
|
25
|
+
|
|
26
|
+
//- CREAZIONE DOTS
|
|
27
|
+
const tabDots = [];
|
|
28
|
+
if (dots) {
|
|
29
|
+
dots.innerHTML = "";
|
|
30
|
+
|
|
31
|
+
allTab.forEach((tab, index) => {
|
|
32
|
+
const iconClass = pgs(tab).option.getValueBrackets("tabIcon") || "fa-circle";
|
|
33
|
+
const dot = document.createElement("button");
|
|
34
|
+
dot.type = "button";
|
|
35
|
+
pgs(dot).add("stepTabs-dots-dot");
|
|
36
|
+
dot.setAttribute("data-step", index);
|
|
37
|
+
dot.innerHTML = `<i class="fa-solid ${iconClass}"></i>`;
|
|
38
|
+
|
|
39
|
+
dot.addEventListener("click", () => {
|
|
40
|
+
if (pgs(dot).state.contains("is-completed")) {
|
|
41
|
+
goTo(index, true);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
dots.appendChild(dot);
|
|
46
|
+
tabDots.push(dot);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
//+ DOTS
|
|
51
|
+
function updateDots() {
|
|
52
|
+
tabDots.forEach((dot, i) => {
|
|
53
|
+
setState(dot, "is-active", i === current);
|
|
54
|
+
setState(dot, "is-completed", i < current);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
//+ STATE
|
|
59
|
+
function setState(element, state, active) {
|
|
60
|
+
if (!element) return;
|
|
61
|
+
const hasState = pgs(element).state.contains(state);
|
|
62
|
+
if (active === hasState) return;
|
|
63
|
+
pgs(element).state.toggle(state, active);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
//+ CONTROLS
|
|
67
|
+
function updateControls() {
|
|
68
|
+
const tab = allTab[current];
|
|
69
|
+
if (prev) prev.disabled = current === 0;
|
|
70
|
+
if (next) next.disabled = current === total - 1 || pgs(tab).state.contains("is-locked");
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
//+ Step
|
|
74
|
+
function goTo(index, scroll = true) {
|
|
75
|
+
current = Math.min(Math.max(index, 0), total - 1);
|
|
76
|
+
const tab = allTab[current]
|
|
77
|
+
|
|
78
|
+
isRendering = true;
|
|
79
|
+
allTab.forEach((tab, i) => setState(tab, "is-active", i === current));
|
|
80
|
+
updateControls();
|
|
81
|
+
updateDots();
|
|
82
|
+
isRendering = false;
|
|
83
|
+
|
|
84
|
+
if (scroll && !tabsWizard.closest("dialog")) {
|
|
85
|
+
tab?.focus();
|
|
86
|
+
tabsWizard?.scrollIntoView({ behavior: "smooth", block: "start" });
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
tabsWizard.dispatchEvent(new CustomEvent('stepTabs:change', { detail: { current, total } }));
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
//+ restart
|
|
93
|
+
function restartTab() {
|
|
94
|
+
goTo(0);
|
|
95
|
+
defaultTabLocked.forEach(tab => pgs(tab).state.add("is-locked"));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
//= INIT
|
|
99
|
+
goTo(0, false);
|
|
100
|
+
|
|
101
|
+
//= data-tab-locked
|
|
102
|
+
const observer = new MutationObserver(() => {
|
|
103
|
+
if (isRendering) return;
|
|
104
|
+
updateControls();
|
|
105
|
+
});
|
|
106
|
+
allTab?.forEach(tabEl => observer.observe(tabEl, { attributes: true, attributeFilter: ["pgs-state"], }));
|
|
107
|
+
|
|
108
|
+
//= Click su Avanti/Indietro
|
|
109
|
+
prev?.addEventListener("click", e => goTo(current - 1));
|
|
110
|
+
next?.addEventListener("click", e => {
|
|
111
|
+
updateControls();
|
|
112
|
+
if (next.disabled) return;
|
|
113
|
+
goTo(current + 1);
|
|
114
|
+
});
|
|
115
|
+
restart?.addEventListener("click", e => restartTab(), { capture: true });
|
|
116
|
+
|
|
117
|
+
//-(API)
|
|
118
|
+
// tabsWizard.addEventListener("stepTabs:reset", () => restartTab());
|
|
119
|
+
API.set(tabsWizard, {
|
|
120
|
+
restart: restartTab,
|
|
121
|
+
goTo,
|
|
122
|
+
next: () => goTo(current + 1),
|
|
123
|
+
prev: () => goTo(current - 1),
|
|
124
|
+
toggleLock: (step, lock = true) => typeof step === "number" && allTab[step] && (pgs(allTab[step]).state.toggle("is-locked", lock), goTo(current)),
|
|
125
|
+
getCurrent: () => current,
|
|
126
|
+
getState: () => ({ current, total }),
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export function PGS_tabs_api(selector) {
|
|
132
|
+
return API.get(selector);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/*
|
|
136
|
+
/ EXAMPLE
|
|
137
|
+
// vai allo step 2
|
|
138
|
+
w.dispatchEvent(new CustomEvent("stepTabs:go", { detail: { step: 2 } }));
|
|
139
|
+
|
|
140
|
+
// next
|
|
141
|
+
w.dispatchEvent(new CustomEvent("stepTabs:next"));
|
|
142
|
+
|
|
143
|
+
// prev
|
|
144
|
+
w.dispatchEvent(new CustomEvent("stepTabs:prev"));
|
|
145
|
+
|
|
146
|
+
// reset a 0 senza relock
|
|
147
|
+
w.dispatchEvent(new CustomEvent("stepTabs:reset"));
|
|
148
|
+
|
|
149
|
+
// lock step 3
|
|
150
|
+
w.dispatchEvent(new CustomEvent("stepTabs:toggle-lock", { detail: { step: 3, lock: true } }));
|
|
151
|
+
|
|
152
|
+
// unlock step 3
|
|
153
|
+
w.dispatchEvent(new CustomEvent("stepTabs:toggle-lock", { detail: { step: 3, lock: false } }));
|
|
154
|
+
|
|
155
|
+
// leggi stato
|
|
156
|
+
w.dispatchEvent(new CustomEvent("stepTabs:get", { detail: { reply: (state) => console.log(state) } }));
|
|
157
|
+
*/
|
|
@@ -13,7 +13,7 @@ import "./components/_menu.js"
|
|
|
13
13
|
import "./components/_modals.js";
|
|
14
14
|
import "./components/_slides.js"
|
|
15
15
|
import "./components/_steps.js";
|
|
16
|
-
import "./components/
|
|
16
|
+
import "./components/_stepTabs.js";
|
|
17
17
|
|
|
18
18
|
//= patterns
|
|
19
19
|
import "./patterns/_header.js";
|
|
@@ -1,23 +1,54 @@
|
|
|
1
1
|
declare global {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
value:
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
type PgsSelectorValue = string | string[];
|
|
3
|
+
type PgsStateValue = string | string[];
|
|
4
|
+
|
|
5
|
+
interface PgsQueryableApi {
|
|
6
|
+
querySelector(value: PgsSelectorValue): Element | null;
|
|
7
|
+
querySelectorAll(value: PgsSelectorValue): NodeListOf<Element>;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
interface PgsStateApi {
|
|
11
|
+
(...values: PgsStateValue[]): PgsStateApi;
|
|
12
|
+
add(...values: PgsStateValue[]): PgsStateApi;
|
|
13
|
+
remove(...values: PgsStateValue[]): PgsStateApi;
|
|
14
|
+
toggle(value: string, force?: boolean): boolean;
|
|
15
|
+
contains(value: string): boolean;
|
|
16
|
+
value: string | null;
|
|
10
17
|
}
|
|
11
18
|
|
|
12
|
-
interface
|
|
13
|
-
|
|
19
|
+
interface PgsOptionApi {
|
|
20
|
+
contains(key: string): boolean;
|
|
21
|
+
getValueBrackets(key: string): string | undefined;
|
|
22
|
+
value: string | null;
|
|
14
23
|
}
|
|
15
24
|
|
|
16
|
-
interface
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
25
|
+
interface PgsElementApi extends PgsQueryableApi {
|
|
26
|
+
(): PgsElementApi;
|
|
27
|
+
add(...values: string[]): PgsElementApi;
|
|
28
|
+
remove(...values: string[]): PgsElementApi;
|
|
29
|
+
toggle(value: string, force?: boolean): boolean;
|
|
30
|
+
contains(value: string): boolean;
|
|
31
|
+
value: string | null;
|
|
32
|
+
state: PgsStateApi;
|
|
33
|
+
option: PgsOptionApi;
|
|
34
|
+
modules: PgsOptionApi;
|
|
21
35
|
}
|
|
36
|
+
|
|
37
|
+
interface PgsDocumentApi extends PgsQueryableApi {
|
|
38
|
+
(): PgsDocumentApi;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
type PgsApi = PgsElementApi | PgsDocumentApi;
|
|
42
|
+
|
|
43
|
+
interface PgsFunction {
|
|
44
|
+
(root: Document): PgsDocumentApi;
|
|
45
|
+
(root: Element): PgsElementApi;
|
|
46
|
+
(root: Document | Element): PgsApi;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
interface PgsBag extends PgsElementApi {}
|
|
50
|
+
|
|
51
|
+
var pgs: PgsFunction;
|
|
22
52
|
}
|
|
23
|
-
|
|
53
|
+
|
|
54
|
+
export {};
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
//== IMG
|
|
44
44
|
[pgs~="bodyImg"] {
|
|
45
45
|
i {
|
|
46
|
-
line-height: 1.2
|
|
46
|
+
line-height: 1.2;
|
|
47
47
|
font-size: var(--fa-size);
|
|
48
48
|
transition: color 300ms;
|
|
49
49
|
|
|
@@ -113,9 +113,10 @@
|
|
|
113
113
|
a {
|
|
114
114
|
text-decoration: none;
|
|
115
115
|
overflow-wrap: anywhere;
|
|
116
|
+
color: var(--color-black);
|
|
116
117
|
|
|
117
118
|
&:hover {
|
|
118
|
-
color: color-mix(in srgb, var(--color-link) 100%, var(--color-
|
|
119
|
+
color: color-mix(in srgb, var(--color-link) 100%, var(--color-white) 50%);
|
|
119
120
|
text-decoration: underline;
|
|
120
121
|
}
|
|
121
122
|
|
|
@@ -1,58 +1,61 @@
|
|
|
1
1
|
//# GENERAL
|
|
2
|
-
[pgs~=
|
|
3
|
-
[pgs~=cardImg] {
|
|
4
|
-
@include card();
|
|
2
|
+
[pgs~=initP] {
|
|
5
3
|
|
|
6
|
-
[pgs~=card
|
|
7
|
-
|
|
4
|
+
[pgs~=card],
|
|
5
|
+
[pgs~=cardImg] {
|
|
6
|
+
@include card();
|
|
7
|
+
|
|
8
|
+
[pgs~=card-img] {
|
|
9
|
+
@include card-insideImg();
|
|
10
|
+
}
|
|
8
11
|
}
|
|
9
|
-
}
|
|
10
12
|
|
|
11
|
-
[pgs~=boxtext] {
|
|
12
|
-
|
|
13
|
-
}
|
|
13
|
+
[pgs~=boxtext] {
|
|
14
|
+
@include boxtext();
|
|
15
|
+
}
|
|
14
16
|
|
|
15
|
-
[pgs~=darkmode] {
|
|
16
|
-
|
|
17
|
-
}
|
|
17
|
+
[pgs~=darkmode] {
|
|
18
|
+
color-scheme: dark;
|
|
19
|
+
}
|
|
18
20
|
|
|
19
|
-
[pgs~=lightmode] {
|
|
20
|
-
|
|
21
|
-
}
|
|
21
|
+
[pgs~=lightmode] {
|
|
22
|
+
color-scheme: light;
|
|
23
|
+
}
|
|
22
24
|
|
|
23
|
-
[pgs~=imgCover] {
|
|
24
|
-
|
|
25
|
-
}
|
|
25
|
+
[pgs~=imgCover] {
|
|
26
|
+
object-fit: cover;
|
|
27
|
+
}
|
|
26
28
|
|
|
27
|
-
[pgs~=imgContain] {
|
|
28
|
-
|
|
29
|
-
}
|
|
29
|
+
[pgs~=imgContain] {
|
|
30
|
+
object-fit: contain;
|
|
31
|
+
}
|
|
30
32
|
|
|
31
|
-
[pgs~=borderRadius] {
|
|
32
|
-
|
|
33
|
-
}
|
|
33
|
+
[pgs~=borderRadius] {
|
|
34
|
+
border-radius: var(--border-radius);
|
|
35
|
+
}
|
|
34
36
|
|
|
35
|
-
[pgs~=borderRadiusInput] {
|
|
36
|
-
|
|
37
|
-
}
|
|
37
|
+
[pgs~=borderRadiusInput] {
|
|
38
|
+
border-radius: var(--border-radius-input);
|
|
39
|
+
}
|
|
38
40
|
|
|
39
|
-
[pgs~=borderRadiusExternal] {
|
|
40
|
-
|
|
41
|
-
}
|
|
41
|
+
[pgs~=borderRadiusExternal] {
|
|
42
|
+
border-radius: var(--border-radius-external);
|
|
43
|
+
}
|
|
42
44
|
|
|
43
|
-
[pgs~=blur] {
|
|
44
|
-
|
|
45
|
-
}
|
|
45
|
+
[pgs~=blur] {
|
|
46
|
+
backdrop-filter: var(--blur);
|
|
47
|
+
}
|
|
46
48
|
|
|
47
|
-
[pgs~=appearanceNone] {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
49
|
+
[pgs~=appearanceNone] {
|
|
50
|
+
all: unset;
|
|
51
|
+
appearance: none;
|
|
52
|
+
}
|
|
51
53
|
|
|
52
|
-
[pgs~=pointer] {
|
|
53
|
-
|
|
54
|
-
}
|
|
54
|
+
[pgs~=pointer] {
|
|
55
|
+
cursor: pointer;
|
|
56
|
+
}
|
|
55
57
|
|
|
56
|
-
[pgs~=hidden] {
|
|
57
|
-
|
|
58
|
-
}
|
|
58
|
+
[pgs~=hidden] {
|
|
59
|
+
display: none !important;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
//# HEADING
|
|
2
|
-
[pgs~=
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
[pgs~=initP] {
|
|
3
|
+
[pgs~=h1] {
|
|
4
|
+
@include h1();
|
|
5
|
+
}
|
|
5
6
|
|
|
6
|
-
[pgs~=h2] {
|
|
7
|
-
|
|
8
|
-
}
|
|
7
|
+
[pgs~=h2] {
|
|
8
|
+
@include h2();
|
|
9
|
+
}
|
|
9
10
|
|
|
10
|
-
[pgs~=h3] {
|
|
11
|
-
|
|
12
|
-
}
|
|
11
|
+
[pgs~=h3] {
|
|
12
|
+
@include h3();
|
|
13
|
+
}
|
|
13
14
|
|
|
14
|
-
[pgs~=h4] {
|
|
15
|
-
|
|
16
|
-
}
|
|
15
|
+
[pgs~=h4] {
|
|
16
|
+
@include h4();
|
|
17
|
+
}
|
|
17
18
|
|
|
18
|
-
[pgs~=h5] {
|
|
19
|
-
|
|
20
|
-
}
|
|
19
|
+
[pgs~=h5] {
|
|
20
|
+
@include h5();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
line-height: inherit;
|
|
30
30
|
text-align: inherit;
|
|
31
31
|
border-radius: var(--border-radius-input);
|
|
32
|
+
align-items: center;
|
|
32
33
|
width: 100%;
|
|
33
34
|
$url: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512'%3E%3Cpath d='M371.515%20229.055L219.516%20373.033C211.797%20380.344%20201.891%20384%20192%20384S172.203%20380.344%20164.484%20373.033L12.485%20229.055C-3.546%20213.87%20-4.233%20188.561%2010.97%20172.532C26.157%20156.472%2051.485%20155.785%2067.516%20171.001L192%20288.921L316.484%20171.001C332.499%20155.754%20357.827%20156.441%20373.03%20172.532C388.233%20188.561%20387.546%20213.87%20371.515%20229.055Z'/%3E%3C/svg%3E");
|
|
34
35
|
|