@eqproject/eqp-dynamic-module 2.11.4 → 2.11.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/USERGUIDE.md +437 -437
- package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +143 -13
- package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +76 -3
- package/esm2020/lib/components/private/add-formula-field/add-formula-field.component.mjs +74 -13
- package/esm2020/lib/components/private/dynamic-module-field-extra-fix/dynamic-module-field-extra-fix.component.mjs +14 -2
- package/esm2020/lib/components/private/field-graphics-editor/field-graphics-editor.component.mjs +735 -0
- package/esm2020/lib/components/private/form-records/list-form-record/list-form-record.component.mjs +1 -1
- package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +1 -1
- package/esm2020/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.mjs +1 -1
- package/esm2020/lib/components/private/graphs/graph/graph.component.mjs +3 -3
- package/esm2020/lib/eqp-dynamic-module.module.mjs +4 -1
- package/esm2020/lib/utils/css-color.mjs +101 -0
- package/esm2020/lib/utils/css-declarations.mjs +119 -0
- package/esm2020/lib/utils/css-property-catalog.mjs +134 -0
- package/esm2020/lib/utils/field-style-catalog.mjs +491 -0
- package/esm2020/public-api.mjs +6 -1
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +2062 -195
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +2020 -195
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +39 -0
- package/lib/components/private/add-form-field/add-form-field.component.d.ts +19 -0
- package/lib/components/private/add-formula-field/add-formula-field.component.d.ts +5 -1
- package/lib/components/private/field-graphics-editor/field-graphics-editor.component.d.ts +192 -0
- package/lib/eqp-dynamic-module.module.d.ts +66 -65
- package/lib/utils/css-color.d.ts +15 -0
- package/lib/utils/css-declarations.d.ts +23 -0
- package/lib/utils/css-property-catalog.d.ts +36 -0
- package/lib/utils/field-style-catalog.d.ts +130 -0
- package/package.json +1 -1
- package/public-api.d.ts +5 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversioni fra i valori colore CSS (nomi, #hex, rgb(), rgba(), hsl()) e la coppia
|
|
3
|
+
* "hex + opacità" richiesta dai controlli <input type="color"> + slider dell'editor grafico.
|
|
4
|
+
*
|
|
5
|
+
* La normalizzazione sfrutta il parser colori del browser attraverso un canvas: assegnando
|
|
6
|
+
* un valore a fillStyle si ottiene indietro "#rrggbb" oppure "rgba(r, g, b, a)".
|
|
7
|
+
*/
|
|
8
|
+
let sharedContext;
|
|
9
|
+
function getContext() {
|
|
10
|
+
if (sharedContext !== undefined) {
|
|
11
|
+
return sharedContext;
|
|
12
|
+
}
|
|
13
|
+
try {
|
|
14
|
+
sharedContext = document.createElement('canvas').getContext('2d');
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
sharedContext = null;
|
|
18
|
+
}
|
|
19
|
+
return sharedContext;
|
|
20
|
+
}
|
|
21
|
+
/** Normalizza un colore CSS in "#rrggbb" o "rgba(r, g, b, a)". Null se non interpretabile. */
|
|
22
|
+
function normalizeColor(value) {
|
|
23
|
+
const input = (value || '').trim();
|
|
24
|
+
if (!input) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
const ctx = getContext();
|
|
28
|
+
if (!ctx) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
// Doppio tentativo con due valori di partenza diversi: se il valore non è un colore
|
|
33
|
+
// valido fillStyle resta invariato, e i due risultati differiscono.
|
|
34
|
+
ctx.fillStyle = '#000000';
|
|
35
|
+
ctx.fillStyle = input;
|
|
36
|
+
const first = ctx.fillStyle;
|
|
37
|
+
ctx.fillStyle = '#ffffff';
|
|
38
|
+
ctx.fillStyle = input;
|
|
39
|
+
const second = ctx.fillStyle;
|
|
40
|
+
return first === second ? first : null;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** Componente hex del colore, da usare come valore di <input type="color"> */
|
|
47
|
+
export function cssColorToHex(value, fallback = '#000000') {
|
|
48
|
+
const normalized = normalizeColor(value);
|
|
49
|
+
if (!normalized) {
|
|
50
|
+
return fallback;
|
|
51
|
+
}
|
|
52
|
+
if (normalized.startsWith('#')) {
|
|
53
|
+
return normalized.slice(0, 7);
|
|
54
|
+
}
|
|
55
|
+
const parts = normalized.replace(/^rgba?\(/, '').replace(/\)$/, '').split(',');
|
|
56
|
+
if (parts.length < 3) {
|
|
57
|
+
return fallback;
|
|
58
|
+
}
|
|
59
|
+
const toHex = (n) => Math.max(0, Math.min(255, Math.round(Number(n))))
|
|
60
|
+
.toString(16).padStart(2, '0');
|
|
61
|
+
return `#${toHex(parts[0])}${toHex(parts[1])}${toHex(parts[2])}`;
|
|
62
|
+
}
|
|
63
|
+
/** Opacità del colore in percentuale (0-100); 100 se il colore è opaco o non interpretabile */
|
|
64
|
+
export function cssColorToAlphaPercent(value) {
|
|
65
|
+
const normalized = normalizeColor(value);
|
|
66
|
+
if (!normalized || !normalized.startsWith('rgba')) {
|
|
67
|
+
return 100;
|
|
68
|
+
}
|
|
69
|
+
const parts = normalized.replace(/^rgba\(/, '').replace(/\)$/, '').split(',');
|
|
70
|
+
if (parts.length < 4) {
|
|
71
|
+
return 100;
|
|
72
|
+
}
|
|
73
|
+
const alpha = Number(parts[3]);
|
|
74
|
+
if (isNaN(alpha)) {
|
|
75
|
+
return 100;
|
|
76
|
+
}
|
|
77
|
+
return Math.round(Math.max(0, Math.min(1, alpha)) * 100);
|
|
78
|
+
}
|
|
79
|
+
/** Ricompone un valore CSS da hex + opacità: "#rrggbb" se opaco, altrimenti "rgba(...)" */
|
|
80
|
+
export function buildCssColor(hex, alphaPercent) {
|
|
81
|
+
const clean = (hex || '#000000').trim();
|
|
82
|
+
const percent = Math.max(0, Math.min(100, Math.round(alphaPercent ?? 100)));
|
|
83
|
+
if (percent >= 100) {
|
|
84
|
+
return clean;
|
|
85
|
+
}
|
|
86
|
+
const match = /^#?([0-9a-f]{6})$/i.exec(clean);
|
|
87
|
+
if (!match) {
|
|
88
|
+
return clean;
|
|
89
|
+
}
|
|
90
|
+
const int = parseInt(match[1], 16);
|
|
91
|
+
const r = (int >> 16) & 255;
|
|
92
|
+
const g = (int >> 8) & 255;
|
|
93
|
+
const b = int & 255;
|
|
94
|
+
const alpha = Number((percent / 100).toFixed(2));
|
|
95
|
+
return `rgba(${r}, ${g}, ${b}, ${alpha})`;
|
|
96
|
+
}
|
|
97
|
+
/** True se il valore è interpretabile come colore (serve a decidere se abilitare la pastiglia) */
|
|
98
|
+
export function isCssColor(value) {
|
|
99
|
+
return normalizeColor(value) != null;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLWNvbG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvdXRpbHMvY3NzLWNvbG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILElBQUksYUFBMEQsQ0FBQztBQUUvRCxTQUFTLFVBQVU7SUFDZixJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUU7UUFBRSxPQUFPLGFBQWEsQ0FBQztLQUFFO0lBQzFELElBQUk7UUFDQSxhQUFhLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDckU7SUFBQyxNQUFNO1FBQ0osYUFBYSxHQUFHLElBQUksQ0FBQztLQUN4QjtJQUNELE9BQU8sYUFBYSxDQUFDO0FBQ3pCLENBQUM7QUFFRCw4RkFBOEY7QUFDOUYsU0FBUyxjQUFjLENBQUMsS0FBYTtJQUNqQyxNQUFNLEtBQUssR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQyxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQUUsT0FBTyxJQUFJLENBQUM7S0FBRTtJQUU1QixNQUFNLEdBQUcsR0FBRyxVQUFVLEVBQUUsQ0FBQztJQUN6QixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQUUsT0FBTyxJQUFJLENBQUM7S0FBRTtJQUUxQixJQUFJO1FBQ0Esb0ZBQW9GO1FBQ3BGLG9FQUFvRTtRQUNwRSxHQUFHLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMxQixHQUFHLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN0QixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsU0FBbUIsQ0FBQztRQUV0QyxHQUFHLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMxQixHQUFHLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN0QixN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QUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVFLElBQUksT0FBTyxJQUFJLEdBQUcsRUFBRTtRQUFFLE9BQU8sS0FBSyxDQUFDO0tBQUU7SUFFckMsTUFBTSxLQUFLLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFBRSxPQUFPLEtBQUssQ0FBQztLQUFFO0lBRTdCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzVCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUMzQixNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ3BCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUM7QUFDOUMsQ0FBQztBQUVELGtHQUFrRztBQUNsRyxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQWE7SUFDcEMsT0FBTyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQ29udmVyc2lvbmkgZnJhIGkgdmFsb3JpIGNvbG9yZSBDU1MgKG5vbWksICNoZXgsIHJnYigpLCByZ2JhKCksIGhzbCgpKSBlIGxhIGNvcHBpYVxyXG4gKiBcImhleCArIG9wYWNpdMOgXCIgcmljaGllc3RhIGRhaSBjb250cm9sbGkgPGlucHV0IHR5cGU9XCJjb2xvclwiPiArIHNsaWRlciBkZWxsJ2VkaXRvciBncmFmaWNvLlxyXG4gKlxyXG4gKiBMYSBub3JtYWxpenphemlvbmUgc2ZydXR0YSBpbCBwYXJzZXIgY29sb3JpIGRlbCBicm93c2VyIGF0dHJhdmVyc28gdW4gY2FudmFzOiBhc3NlZ25hbmRvXHJcbiAqIHVuIHZhbG9yZSBhIGZpbGxTdHlsZSBzaSBvdHRpZW5lIGluZGlldHJvIFwiI3JyZ2diYlwiIG9wcHVyZSBcInJnYmEociwgZywgYiwgYSlcIi5cclxuICovXHJcblxyXG5sZXQgc2hhcmVkQ29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbmZ1bmN0aW9uIGdldENvbnRleHQoKTogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCB7XHJcbiAgICBpZiAoc2hhcmVkQ29udGV4dCAhPT0gdW5kZWZpbmVkKSB7IHJldHVybiBzaGFyZWRDb250ZXh0OyB9XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHNoYXJlZENvbnRleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgICAgc2hhcmVkQ29udGV4dCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2hhcmVkQ29udGV4dDtcclxufVxyXG5cclxuLyoqIE5vcm1hbGl6emEgdW4gY29sb3JlIENTUyBpbiBcIiNycmdnYmJcIiBvIFwicmdiYShyLCBnLCBiLCBhKVwiLiBOdWxsIHNlIG5vbiBpbnRlcnByZXRhYmlsZS4gKi9cclxuZnVuY3Rpb24gbm9ybWFsaXplQ29sb3IodmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgY29uc3QgaW5wdXQgPSAodmFsdWUgfHwgJycpLnRyaW0oKTtcclxuICAgIGlmICghaW5wdXQpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICBjb25zdCBjdHggPSBnZXRDb250ZXh0KCk7XHJcbiAgICBpZiAoIWN0eCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgICAgLy8gRG9wcGlvIHRlbnRhdGl2byBjb24gZHVlIHZhbG9yaSBkaSBwYXJ0ZW56YSBkaXZlcnNpOiBzZSBpbCB2YWxvcmUgbm9uIMOoIHVuIGNvbG9yZVxyXG4gICAgICAgIC8vIHZhbGlkbyBmaWxsU3R5bGUgcmVzdGEgaW52YXJpYXRvLCBlIGkgZHVlIHJpc3VsdGF0aSBkaWZmZXJpc2Nvbm8uXHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjMDAwMDAwJztcclxuICAgICAgICBjdHguZmlsbFN0eWxlID0gaW5wdXQ7XHJcbiAgICAgICAgY29uc3QgZmlyc3QgPSBjdHguZmlsbFN0eWxlIGFzIHN0cmluZztcclxuXHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICcjZmZmZmZmJztcclxuICAgICAgICBjdHguZmlsbFN0eWxlID0gaW5wdXQ7XHJcbiAgICAgICAgY29uc3Qgc2Vjb25kID0gY3R4LmZpbGxTdHlsZSBhcyBzdHJpbmc7XHJcblxyXG4gICAgICAgIHJldHVybiBmaXJzdCA9PT0gc2Vjb25kID8gZmlyc3QgOiBudWxsO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKiBDb21wb25lbnRlIGhleCBkZWwgY29sb3JlLCBkYSB1c2FyZSBjb21lIHZhbG9yZSBkaSA8aW5wdXQgdHlwZT1cImNvbG9yXCI+ICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjc3NDb2xvclRvSGV4KHZhbHVlOiBzdHJpbmcsIGZhbGxiYWNrOiBzdHJpbmcgPSAnIzAwMDAwMCcpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUNvbG9yKHZhbHVlKTtcclxuICAgIGlmICghbm9ybWFsaXplZCkgeyByZXR1cm4gZmFsbGJhY2s7IH1cclxuICAgIGlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgoJyMnKSkgeyByZXR1cm4gbm9ybWFsaXplZC5zbGljZSgwLCA3KTsgfVxyXG5cclxuICAgIGNvbnN0IHBhcnRzID0gbm9ybWFsaXplZC5yZXBsYWNlKC9ecmdiYT9cXCgvLCAnJykucmVwbGFjZSgvXFwpJC8sICcnKS5zcGxpdCgnLCcpO1xyXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA8IDMpIHsgcmV0dXJuIGZhbGxiYWNrOyB9XHJcblxyXG4gICAgY29uc3QgdG9IZXggPSAobjogc3RyaW5nKSA9PiBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQoTnVtYmVyKG4pKSkpXHJcbiAgICAgICAgLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgcmV0dXJuIGAjJHt0b0hleChwYXJ0c1swXSl9JHt0b0hleChwYXJ0c1sxXSl9JHt0b0hleChwYXJ0c1syXSl9YDtcclxufVxyXG5cclxuLyoqIE9wYWNpdMOgIGRlbCBjb2xvcmUgaW4gcGVyY2VudHVhbGUgKDAtMTAwKTsgMTAwIHNlIGlsIGNvbG9yZSDDqCBvcGFjbyBvIG5vbiBpbnRlcnByZXRhYmlsZSAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3NzQ29sb3JUb0FscGhhUGVyY2VudCh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVDb2xvcih2YWx1ZSk7XHJcbiAgICBpZiAoIW5vcm1hbGl6ZWQgfHwgIW5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgncmdiYScpKSB7IHJldHVybiAxMDA7IH1cclxuXHJcbiAgICBjb25zdCBwYXJ0cyA9IG5vcm1hbGl6ZWQucmVwbGFjZSgvXnJnYmFcXCgvLCAnJykucmVwbGFjZSgvXFwpJC8sICcnKS5zcGxpdCgnLCcpO1xyXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA8IDQpIHsgcmV0dXJuIDEwMDsgfVxyXG5cclxuICAgIGNvbnN0IGFscGhhID0gTnVtYmVyKHBhcnRzWzNdKTtcclxuICAgIGlmIChpc05hTihhbHBoYSkpIHsgcmV0dXJuIDEwMDsgfVxyXG4gICAgcmV0dXJuIE1hdGgucm91bmQoTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgYWxwaGEpKSAqIDEwMCk7XHJcbn1cclxuXHJcbi8qKiBSaWNvbXBvbmUgdW4gdmFsb3JlIENTUyBkYSBoZXggKyBvcGFjaXTDoDogXCIjcnJnZ2JiXCIgc2Ugb3BhY28sIGFsdHJpbWVudGkgXCJyZ2JhKC4uLilcIiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRDc3NDb2xvcihoZXg6IHN0cmluZywgYWxwaGFQZXJjZW50OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY2xlYW4gPSAoaGV4IHx8ICcjMDAwMDAwJykudHJpbSgpO1xyXG4gICAgY29uc3QgcGVyY2VudCA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZChhbHBoYVBlcmNlbnQgPz8gMTAwKSkpO1xyXG4gICAgaWYgKHBlcmNlbnQgPj0gMTAwKSB7IHJldHVybiBjbGVhbjsgfVxyXG5cclxuICAgIGNvbnN0IG1hdGNoID0gL14jPyhbMC05YS1mXXs2fSkkL2kuZXhlYyhjbGVhbik7XHJcbiAgICBpZiAoIW1hdGNoKSB7IHJldHVybiBjbGVhbjsgfVxyXG5cclxuICAgIGNvbnN0IGludCA9IHBhcnNlSW50KG1hdGNoWzFdLCAxNik7XHJcbiAgICBjb25zdCByID0gKGludCA+PiAxNikgJiAyNTU7XHJcbiAgICBjb25zdCBnID0gKGludCA+PiA4KSAmIDI1NTtcclxuICAgIGNvbnN0IGIgPSBpbnQgJiAyNTU7XHJcbiAgICBjb25zdCBhbHBoYSA9IE51bWJlcigocGVyY2VudCAvIDEwMCkudG9GaXhlZCgyKSk7XHJcbiAgICByZXR1cm4gYHJnYmEoJHtyfSwgJHtnfSwgJHtifSwgJHthbHBoYX0pYDtcclxufVxyXG5cclxuLyoqIFRydWUgc2UgaWwgdmFsb3JlIMOoIGludGVycHJldGFiaWxlIGNvbWUgY29sb3JlIChzZXJ2ZSBhIGRlY2lkZXJlIHNlIGFiaWxpdGFyZSBsYSBwYXN0aWdsaWEpICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Nzc0NvbG9yKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBub3JtYWxpemVDb2xvcih2YWx1ZSkgIT0gbnVsbDtcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility per leggere/scrivere singole proprietà dentro una stringa di dichiarazioni CSS
|
|
3
|
+
* (il formato usato dalle mappe *FieldStyleCSS: "color:red;font-size:14px").
|
|
4
|
+
*
|
|
5
|
+
* Tutte le funzioni preservano le proprietà che non vengono toccate, così i CSS scritti
|
|
6
|
+
* a mano o generati dall'AI non vengono persi quando si modifica una singola proprietà
|
|
7
|
+
* dall'editor grafico.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Divide una stringa CSS sui ";" di primo livello, ignorando quelli dentro
|
|
11
|
+
* parentesi (es. rgba(0,0,0,.5)) o stringhe (es. url("a;b")).
|
|
12
|
+
*/
|
|
13
|
+
function splitTopLevel(css, separator) {
|
|
14
|
+
const parts = [];
|
|
15
|
+
let depth = 0;
|
|
16
|
+
let quote = null;
|
|
17
|
+
let current = '';
|
|
18
|
+
for (let i = 0; i < css.length; i++) {
|
|
19
|
+
const ch = css[i];
|
|
20
|
+
if (quote) {
|
|
21
|
+
current += ch;
|
|
22
|
+
if (ch === quote && css[i - 1] !== '\\') {
|
|
23
|
+
quote = null;
|
|
24
|
+
}
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (ch === '"' || ch === "'") {
|
|
28
|
+
quote = ch;
|
|
29
|
+
current += ch;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (ch === '(') {
|
|
33
|
+
depth++;
|
|
34
|
+
current += ch;
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (ch === ')') {
|
|
38
|
+
depth = Math.max(0, depth - 1);
|
|
39
|
+
current += ch;
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (ch === separator && depth === 0) {
|
|
43
|
+
parts.push(current);
|
|
44
|
+
current = '';
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
current += ch;
|
|
48
|
+
}
|
|
49
|
+
parts.push(current);
|
|
50
|
+
return parts;
|
|
51
|
+
}
|
|
52
|
+
/** Trasforma "color:red;font-size:14px" in [{prop:'color',value:'red'},...] mantenendo l'ordine */
|
|
53
|
+
export function parseCssDeclarations(css) {
|
|
54
|
+
if (!css) {
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
const result = [];
|
|
58
|
+
splitTopLevel(css, ';').forEach((chunk) => {
|
|
59
|
+
const trimmed = chunk.trim();
|
|
60
|
+
if (!trimmed) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
// Il primo ":" separa sempre proprietà e valore (eventuali ":" successivi,
|
|
64
|
+
// es. in url(http://...), restano nel valore).
|
|
65
|
+
const colonIndex = trimmed.indexOf(':');
|
|
66
|
+
if (colonIndex <= 0) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const prop = trimmed.slice(0, colonIndex).trim().toLowerCase();
|
|
70
|
+
const value = trimmed.slice(colonIndex + 1).trim();
|
|
71
|
+
if (!prop || !value) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
result.push({ prop, value });
|
|
75
|
+
});
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
/** Trasforma [{prop,value}] in "color: red; font-size: 14px;" */
|
|
79
|
+
export function serializeCssDeclarations(declarations) {
|
|
80
|
+
if (!declarations || declarations.length === 0) {
|
|
81
|
+
return '';
|
|
82
|
+
}
|
|
83
|
+
return declarations
|
|
84
|
+
.filter((d) => d && d.prop && d.value)
|
|
85
|
+
.map((d) => `${d.prop}: ${d.value};`)
|
|
86
|
+
.join(' ');
|
|
87
|
+
}
|
|
88
|
+
/** Legge il valore di una singola proprietà; stringa vuota se non presente */
|
|
89
|
+
export function getCssDeclaration(css, prop) {
|
|
90
|
+
const target = (prop || '').toLowerCase();
|
|
91
|
+
const found = parseCssDeclarations(css).find((d) => d.prop === target);
|
|
92
|
+
return found ? found.value : '';
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Imposta (o rimuove, se il valore è vuoto) una singola proprietà, lasciando
|
|
96
|
+
* intatte tutte le altre. Le proprietà nuove vengono accodate in fondo.
|
|
97
|
+
*/
|
|
98
|
+
export function setCssDeclaration(css, prop, value) {
|
|
99
|
+
const target = (prop || '').toLowerCase();
|
|
100
|
+
if (!target) {
|
|
101
|
+
return css ?? '';
|
|
102
|
+
}
|
|
103
|
+
const declarations = parseCssDeclarations(css);
|
|
104
|
+
const newValue = (value ?? '').trim();
|
|
105
|
+
const index = declarations.findIndex((d) => d.prop === target);
|
|
106
|
+
if (!newValue) {
|
|
107
|
+
if (index >= 0) {
|
|
108
|
+
declarations.splice(index, 1);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else if (index >= 0) {
|
|
112
|
+
declarations[index].value = newValue;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
declarations.push({ prop: target, value: newValue });
|
|
116
|
+
}
|
|
117
|
+
return serializeCssDeclarations(declarations);
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLWRlY2xhcmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL3V0aWxzL2Nzcy1kZWNsYXJhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQU9IOzs7R0FHRztBQUNILFNBQVMsYUFBYSxDQUFDLEdBQVcsRUFBRSxTQUFpQjtJQUNqRCxNQUFNLEtBQUssR0FBa0IsRUFBRSxDQUFDO0lBQ2hDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNkLElBQUksS0FBSyxHQUFrQixJQUFJLENBQUM7SUFDaEMsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBRWpCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2pDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsQixJQUFJLEtBQUssRUFBRTtZQUNQLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDZCxJQUFJLEVBQUUsS0FBSyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQUUsS0FBSyxHQUFHLElBQUksQ0FBQzthQUFFO1lBQzFELFNBQVM7U0FDWjtRQUVELElBQUksRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFO1lBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFBQyxTQUFTO1NBQUU7UUFDdEUsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFO1lBQUUsS0FBSyxFQUFFLENBQUM7WUFBQyxPQUFPLElBQUksRUFBRSxDQUFDO1lBQUMsU0FBUztTQUFFO1FBQ3JELElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtZQUFFLEtB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SCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsR0FBVyxFQUFFLElBQVksRUFBRSxLQUFhO0lBQ3RFLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzFDLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFBRSxPQUFPLEdBQUcsSUFBSSxFQUFFLENBQUM7S0FBRTtJQUVsQyxNQUFNLFlBQVksR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDO0lBRS9ELElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDWCxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztTQUFFO0tBQ3JEO1NBQU0sSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1FBQ25CLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO0tBQ3hDO1NBQU07UUFDSCxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztLQUN4RDtJQUVELE9BQU8sd0JBQXdCLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDbEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBVdGlsaXR5IHBlciBsZWdnZXJlL3Njcml2ZXJlIHNpbmdvbGUgcHJvcHJpZXTDoCBkZW50cm8gdW5hIHN0cmluZ2EgZGkgZGljaGlhcmF6aW9uaSBDU1NcclxuICogKGlsIGZvcm1hdG8gdXNhdG8gZGFsbGUgbWFwcGUgKkZpZWxkU3R5bGVDU1M6IFwiY29sb3I6cmVkO2ZvbnQtc2l6ZToxNHB4XCIpLlxyXG4gKlxyXG4gKiBUdXR0ZSBsZSBmdW56aW9uaSBwcmVzZXJ2YW5vIGxlIHByb3ByaWV0w6AgY2hlIG5vbiB2ZW5nb25vIHRvY2NhdGUsIGNvc8OsIGkgQ1NTIHNjcml0dGlcclxuICogYSBtYW5vIG8gZ2VuZXJhdGkgZGFsbCdBSSBub24gdmVuZ29ubyBwZXJzaSBxdWFuZG8gc2kgbW9kaWZpY2EgdW5hIHNpbmdvbGEgcHJvcHJpZXTDoFxyXG4gKiBkYWxsJ2VkaXRvciBncmFmaWNvLlxyXG4gKi9cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3NzRGVjbGFyYXRpb24ge1xyXG4gICAgcHJvcDogc3RyaW5nO1xyXG4gICAgdmFsdWU6IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIERpdmlkZSB1bmEgc3RyaW5nYSBDU1Mgc3VpIFwiO1wiIGRpIHByaW1vIGxpdmVsbG8sIGlnbm9yYW5kbyBxdWVsbGkgZGVudHJvXHJcbiAqIHBhcmVudGVzaSAoZXMuIHJnYmEoMCwwLDAsLjUpKSBvIHN0cmluZ2hlIChlcy4gdXJsKFwiYTtiXCIpKS5cclxuICovXHJcbmZ1bmN0aW9uIHNwbGl0VG9wTGV2ZWwoY3NzOiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBwYXJ0czogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gICAgbGV0IGRlcHRoID0gMDtcclxuICAgIGxldCBxdW90ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICBsZXQgY3VycmVudCA9ICcnO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3NzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgY2ggPSBjc3NbaV07XHJcblxyXG4gICAgICAgIGlmIChxdW90ZSkge1xyXG4gICAgICAgICAgICBjdXJyZW50ICs9IGNoO1xyXG4gICAgICAgICAgICBpZiAoY2ggPT09IHF1b3RlICYmIGNzc1tpIC0gMV0gIT09ICdcXFxcJykgeyBxdW90ZSA9IG51bGw7IH1cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2ggPT09ICdcIicgfHwgY2ggPT09IFwiJ1wiKSB7IHF1b3RlID0gY2g7IGN1cnJlbnQgKz0gY2g7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgaWYgKGNoID09PSAnKCcpIHsgZGVwdGgrKzsgY3VycmVudCArPSBjaDsgY29udGludWU7IH1cclxuICAgICAgICBpZiAoY2ggPT09ICcpJykgeyBkZXB0aCA9IE1hdGgubWF4KDAsIGRlcHRoIC0gMSk7IGN1cnJlbnQgKz0gY2g7IGNvbnRpbnVlOyB9XHJcblxyXG4gICAgICAgIGlmIChjaCA9PT0gc2VwYXJhdG9yICYmIGRlcHRoID09PSAwKSB7IHBhcnRzLnB1c2goY3VycmVudCk7IGN1cnJlbnQgPSAnJzsgY29udGludWU7IH1cclxuXHJcbiAgICAgICAgY3VycmVudCArPSBjaDtcclxuICAgIH1cclxuXHJcbiAgICBwYXJ0cy5wdXNoKGN1cnJlbnQpO1xyXG4gICAgcmV0dXJuIHBhcnRzO1xyXG59XHJcblxyXG4vKiogVHJhc2Zvcm1hIFwiY29sb3I6cmVkO2ZvbnQtc2l6ZToxNHB4XCIgaW4gW3twcm9wOidjb2xvcicsdmFsdWU6J3JlZCd9LC4uLl0gbWFudGVuZW5kbyBsJ29yZGluZSAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDc3NEZWNsYXJhdGlvbnMoY3NzOiBzdHJpbmcpOiBBcnJheTxDc3NEZWNsYXJhdGlvbj4ge1xyXG4gICAgaWYgKCFjc3MpIHsgcmV0dXJuIFtdOyB9XHJcblxyXG4gICAgY29uc3QgcmVzdWx0OiBBcnJheTxDc3NEZWNsYXJhdGlvbj4gPSBbXTtcclxuXHJcbiAgICBzcGxpdFRvcExldmVsKGNzcywgJzsnKS5mb3JFYWNoKChjaHVuaykgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSBjaHVuay50cmltKCk7XHJcbiAgICAgICAgaWYgKCF0cmltbWVkKSB7IHJldHVybjsgfVxyXG5cclxuICAgICAgICAvLyBJbCBwcmltbyBcIjpcIiBzZXBhcmEgc2VtcHJlIHByb3ByaWV0w6AgZSB2YWxvcmUgKGV2ZW50dWFsaSBcIjpcIiBzdWNjZXNzaXZpLFxyXG4gICAgICAgIC8vIGVzLiBpbiB1cmwoaHR0cDovLy4uLiksIHJlc3Rhbm8gbmVsIHZhbG9yZSkuXHJcbiAgICAgICAgY29uc3QgY29sb25JbmRleCA9IHRyaW1tZWQuaW5kZXhPZignOicpO1xyXG4gICAgICAgIGlmIChjb2xvbkluZGV4IDw9IDApIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgICAgIGNvbnN0IHByb3AgPSB0cmltbWVkLnNsaWNlKDAsIGNvbG9uSW5kZXgpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdHJpbW1lZC5zbGljZShjb2xvbkluZGV4ICsgMSkudHJpbSgpO1xyXG4gICAgICAgIGlmICghcHJvcCB8fCAhdmFsdWUpIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgICAgIHJlc3VsdC5wdXNoKHsgcHJvcCwgdmFsdWUgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG4vKiogVHJhc2Zvcm1hIFt7cHJvcCx2YWx1ZX1dIGluIFwiY29sb3I6IHJlZDsgZm9udC1zaXplOiAxNHB4O1wiICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVDc3NEZWNsYXJhdGlvbnMoZGVjbGFyYXRpb25zOiBBcnJheTxDc3NEZWNsYXJhdGlvbj4pOiBzdHJpbmcge1xyXG4gICAgaWYgKCFkZWNsYXJhdGlvbnMgfHwgZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJyc7IH1cclxuICAgIHJldHVybiBkZWNsYXJhdGlvbnNcclxuICAgICAgICAuZmlsdGVyKChkKSA9PiBkICYmIGQucHJvcCAmJiBkLnZhbHVlKVxyXG4gICAgICAgIC5tYXAoKGQpID0+IGAke2QucHJvcH06ICR7ZC52YWx1ZX07YClcclxuICAgICAgICAuam9pbignICcpO1xyXG59XHJcblxyXG4vKiogTGVnZ2UgaWwgdmFsb3JlIGRpIHVuYSBzaW5nb2xhIHByb3ByaWV0w6A7IHN0cmluZ2EgdnVvdGEgc2Ugbm9uIHByZXNlbnRlICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDc3NEZWNsYXJhdGlvbihjc3M6IHN0cmluZywgcHJvcDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IChwcm9wIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgY29uc3QgZm91bmQgPSBwYXJzZUNzc0RlY2xhcmF0aW9ucyhjc3MpLmZpbmQoKGQpID0+IGQucHJvcCA9PT0gdGFyZ2V0KTtcclxuICAgIHJldHVybiBmb3VuZCA/IGZvdW5kLnZhbHVlIDogJyc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJbXBvc3RhIChvIHJpbXVvdmUsIHNlIGlsIHZhbG9yZSDDqCB2dW90bykgdW5hIHNpbmdvbGEgcHJvcHJpZXTDoCwgbGFzY2lhbmRvXHJcbiAqIGludGF0dGUgdHV0dGUgbGUgYWx0cmUuIExlIHByb3ByaWV0w6AgbnVvdmUgdmVuZ29ubyBhY2NvZGF0ZSBpbiBmb25kby5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRDc3NEZWNsYXJhdGlvbihjc3M6IHN0cmluZywgcHJvcDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IChwcm9wIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKCF0YXJnZXQpIHsgcmV0dXJuIGNzcyA/PyAnJzsgfVxyXG5cclxuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHBhcnNlQ3NzRGVjbGFyYXRpb25zKGNzcyk7XHJcbiAgICBjb25zdCBuZXdWYWx1ZSA9ICh2YWx1ZSA/PyAnJykudHJpbSgpO1xyXG4gICAgY29uc3QgaW5kZXggPSBkZWNsYXJhdGlvbnMuZmluZEluZGV4KChkKSA9PiBkLnByb3AgPT09IHRhcmdldCk7XHJcblxyXG4gICAgaWYgKCFuZXdWYWx1ZSkge1xyXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7IGRlY2xhcmF0aW9ucy5zcGxpY2UoaW5kZXgsIDEpOyB9XHJcbiAgICB9IGVsc2UgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICBkZWNsYXJhdGlvbnNbaW5kZXhdLnZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRlY2xhcmF0aW9ucy5wdXNoKHsgcHJvcDogdGFyZ2V0LCB2YWx1ZTogbmV3VmFsdWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNlcmlhbGl6ZUNzc0RlY2xhcmF0aW9ucyhkZWNsYXJhdGlvbnMpO1xyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Catalogo delle proprietà CSS modificabili dall'editor grafico dei campi.
|
|
3
|
+
*
|
|
4
|
+
* Ogni proprietà dichiara che tipo di controllo mostrare (colore, misura con slider,
|
|
5
|
+
* elenco di valori, testo libero). Le proprietà non presenti in questo catalogo restano
|
|
6
|
+
* comunque modificabili a mano dalle caselle CSS del dialog di modifica campo e non
|
|
7
|
+
* vengono mai perse dall'editor.
|
|
8
|
+
*/
|
|
9
|
+
/** Proprietà mostrate sempre: coprono il 90% delle personalizzazioni */
|
|
10
|
+
export const CSS_CORE_PROPERTIES = [
|
|
11
|
+
{ prop: 'background-color', label: 'Sfondo', type: 'color', group: 'Aspetto' },
|
|
12
|
+
{ prop: 'color', label: 'Colore testo', type: 'color', group: 'Testo' },
|
|
13
|
+
{ prop: 'font-size', label: 'Dimensione testo', type: 'size', group: 'Testo', min: 8, max: 48, step: 1, unit: 'px' },
|
|
14
|
+
{
|
|
15
|
+
prop: 'font-weight', label: 'Spessore testo', type: 'select', group: 'Testo',
|
|
16
|
+
options: [
|
|
17
|
+
{ value: 'normal', label: 'Normale' },
|
|
18
|
+
{ value: 'bold', label: 'Grassetto' },
|
|
19
|
+
{ value: '300', label: 'Leggero (300)' },
|
|
20
|
+
{ value: '500', label: 'Medio (500)' },
|
|
21
|
+
{ value: '600', label: 'Semi-grassetto (600)' },
|
|
22
|
+
{ value: '800', label: 'Extra (800)' },
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
{ prop: 'border-radius', label: 'Angoli arrotondati', type: 'size', group: 'Bordo', min: 0, max: 40, step: 1, unit: 'px' },
|
|
26
|
+
{ prop: 'border-width', label: 'Spessore bordo', type: 'size', group: 'Bordo', min: 0, max: 12, step: 1, unit: 'px' },
|
|
27
|
+
{ prop: 'border-color', label: 'Colore bordo', type: 'color', group: 'Bordo' },
|
|
28
|
+
{
|
|
29
|
+
prop: 'border-style', label: 'Tipo bordo', type: 'select', group: 'Bordo',
|
|
30
|
+
options: [
|
|
31
|
+
{ value: 'none', label: 'Nessuno' },
|
|
32
|
+
{ value: 'solid', label: 'Continuo' },
|
|
33
|
+
{ value: 'dashed', label: 'Tratteggiato' },
|
|
34
|
+
{ value: 'dotted', label: 'Puntinato' },
|
|
35
|
+
{ value: 'double', label: 'Doppio' },
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
{ prop: 'padding', label: 'Spaziatura interna', type: 'text', group: 'Spaziatura', placeholder: 'es. 8px 12px' },
|
|
39
|
+
];
|
|
40
|
+
/** Proprietà aggiuntive, mostrate solo aprendo "Altre proprietà" */
|
|
41
|
+
export const CSS_EXTRA_PROPERTIES = [
|
|
42
|
+
{ prop: 'opacity', label: 'Opacità', type: 'size', group: 'Aspetto', min: 0, max: 1, step: 0.05, unit: '' },
|
|
43
|
+
{ prop: 'background', label: 'Sfondo avanzato', type: 'text', group: 'Aspetto', placeholder: 'es. linear-gradient(...)' },
|
|
44
|
+
{ prop: 'box-shadow', label: 'Ombra', type: 'text', group: 'Aspetto', placeholder: 'es. 0 2px 6px rgba(0,0,0,.2)' },
|
|
45
|
+
{
|
|
46
|
+
prop: 'text-align', label: 'Allineamento testo', type: 'select', group: 'Testo',
|
|
47
|
+
options: [
|
|
48
|
+
{ value: 'left', label: 'Sinistra' },
|
|
49
|
+
{ value: 'center', label: 'Centro' },
|
|
50
|
+
{ value: 'right', label: 'Destra' },
|
|
51
|
+
{ value: 'justify', label: 'Giustificato' },
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
prop: 'text-transform', label: 'Maiuscole/minuscole', type: 'select', group: 'Testo',
|
|
56
|
+
options: [
|
|
57
|
+
{ value: 'none', label: 'Come scritto' },
|
|
58
|
+
{ value: 'uppercase', label: 'TUTTO MAIUSCOLO' },
|
|
59
|
+
{ value: 'lowercase', label: 'tutto minuscolo' },
|
|
60
|
+
{ value: 'capitalize', label: 'Iniziali Maiuscole' },
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
prop: 'font-style', label: 'Corsivo', type: 'select', group: 'Testo',
|
|
65
|
+
options: [
|
|
66
|
+
{ value: 'normal', label: 'Normale' },
|
|
67
|
+
{ value: 'italic', label: 'Corsivo' },
|
|
68
|
+
],
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
prop: 'text-decoration', label: 'Decorazione testo', type: 'select', group: 'Testo',
|
|
72
|
+
options: [
|
|
73
|
+
{ value: 'none', label: 'Nessuna' },
|
|
74
|
+
{ value: 'underline', label: 'Sottolineato' },
|
|
75
|
+
{ value: 'line-through', label: 'Barrato' },
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
{ prop: 'font-family', label: 'Font', type: 'text', group: 'Testo', placeholder: 'es. Roboto, sans-serif' },
|
|
79
|
+
{ prop: 'letter-spacing', label: 'Spaziatura lettere', type: 'size', group: 'Testo', min: -2, max: 10, step: 0.5, unit: 'px' },
|
|
80
|
+
{ prop: 'line-height', label: 'Interlinea', type: 'size', group: 'Testo', min: 0.8, max: 3, step: 0.1, unit: '' },
|
|
81
|
+
{ prop: 'margin', label: 'Spaziatura esterna', type: 'text', group: 'Spaziatura', placeholder: 'es. 0 0 8px 0' },
|
|
82
|
+
{ prop: 'width', label: 'Larghezza', type: 'text', group: 'Spaziatura', placeholder: 'es. 100%' },
|
|
83
|
+
{ prop: 'height', label: 'Altezza', type: 'text', group: 'Spaziatura', placeholder: 'es. 40px' },
|
|
84
|
+
{ prop: 'min-height', label: 'Altezza minima', type: 'text', group: 'Spaziatura', placeholder: 'es. 40px' },
|
|
85
|
+
{ prop: 'gap', label: 'Distanza tra elementi', type: 'size', group: 'Layout', min: 0, max: 40, step: 1, unit: 'px' },
|
|
86
|
+
{
|
|
87
|
+
prop: 'display', label: 'Visualizzazione', type: 'select', group: 'Layout',
|
|
88
|
+
options: [
|
|
89
|
+
{ value: 'block', label: 'Blocco' },
|
|
90
|
+
{ value: 'inline-block', label: 'Blocco in linea' },
|
|
91
|
+
{ value: 'flex', label: 'Flex' },
|
|
92
|
+
{ value: 'none', label: 'Nascosto' },
|
|
93
|
+
],
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
prop: 'justify-content', label: 'Allineamento orizzontale', type: 'select', group: 'Layout',
|
|
97
|
+
options: [
|
|
98
|
+
{ value: 'flex-start', label: 'Inizio' },
|
|
99
|
+
{ value: 'center', label: 'Centro' },
|
|
100
|
+
{ value: 'flex-end', label: 'Fine' },
|
|
101
|
+
{ value: 'space-between', label: 'Distribuito' },
|
|
102
|
+
],
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
prop: 'align-items', label: 'Allineamento verticale', type: 'select', group: 'Layout',
|
|
106
|
+
options: [
|
|
107
|
+
{ value: 'flex-start', label: 'Alto' },
|
|
108
|
+
{ value: 'center', label: 'Centro' },
|
|
109
|
+
{ value: 'flex-end', label: 'Basso' },
|
|
110
|
+
{ value: 'stretch', label: 'Estendi' },
|
|
111
|
+
],
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
prop: 'cursor', label: 'Puntatore', type: 'select', group: 'Layout',
|
|
115
|
+
options: [
|
|
116
|
+
{ value: 'default', label: 'Normale' },
|
|
117
|
+
{ value: 'pointer', label: 'Mano' },
|
|
118
|
+
{ value: 'not-allowed', label: 'Vietato' },
|
|
119
|
+
{ value: 'text', label: 'Testo' },
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
{ prop: 'transition', label: 'Transizione', type: 'text', group: 'Effetti', placeholder: 'es. all .2s ease' },
|
|
123
|
+
{ prop: 'transform', label: 'Trasformazione', type: 'text', group: 'Effetti', placeholder: 'es. scale(1.05)' },
|
|
124
|
+
];
|
|
125
|
+
export const CSS_ALL_PROPERTIES = CSS_CORE_PROPERTIES.concat(CSS_EXTRA_PROPERTIES);
|
|
126
|
+
export function getCssPropertyDef(prop) {
|
|
127
|
+
const target = (prop || '').toLowerCase();
|
|
128
|
+
return CSS_ALL_PROPERTIES.find((p) => p.prop === target) ?? null;
|
|
129
|
+
}
|
|
130
|
+
/** Definizione di ripiego per una proprietà scritta a mano e non catalogata */
|
|
131
|
+
export function buildCustomCssPropertyDef(prop) {
|
|
132
|
+
return { prop: (prop || '').toLowerCase(), label: prop, type: 'text', group: 'Personalizzate' };
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLXByb3BlcnR5LWNhdGFsb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi91dGlscy9jc3MtcHJvcGVydHktY2F0YWxvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBcUJILHdFQUF3RTtBQUN4RSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBMEI7SUFDdEQsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7SUFDOUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO0lBQ3ZFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7SUFDcEg7UUFDSSxJQUFJLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPO1FBQzVFLE9BQU8sRUFBRTtZQUNMLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO1lBQ3JDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFO1lBQ3JDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFO1lBQ3hDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsYUFB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QUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDckUsQ0FBQztBQUVELCtFQUErRTtBQUMvRSxNQUFNLFVBQVUseUJBQXlCLENBQUMsSUFBWTtJQUNsRCxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztBQUNwRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENhdGFsb2dvIGRlbGxlIHByb3ByaWV0w6AgQ1NTIG1vZGlmaWNhYmlsaSBkYWxsJ2VkaXRvciBncmFmaWNvIGRlaSBjYW1waS5cclxuICpcclxuICogT2duaSBwcm9wcmlldMOgIGRpY2hpYXJhIGNoZSB0aXBvIGRpIGNvbnRyb2xsbyBtb3N0cmFyZSAoY29sb3JlLCBtaXN1cmEgY29uIHNsaWRlcixcclxuICogZWxlbmNvIGRpIHZhbG9yaSwgdGVzdG8gbGliZXJvKS4gTGUgcHJvcHJpZXTDoCBub24gcHJlc2VudGkgaW4gcXVlc3RvIGNhdGFsb2dvIHJlc3Rhbm9cclxuICogY29tdW5xdWUgbW9kaWZpY2FiaWxpIGEgbWFubyBkYWxsZSBjYXNlbGxlIENTUyBkZWwgZGlhbG9nIGRpIG1vZGlmaWNhIGNhbXBvIGUgbm9uXHJcbiAqIHZlbmdvbm8gbWFpIHBlcnNlIGRhbGwnZWRpdG9yLlxyXG4gKi9cclxuXHJcbmV4cG9ydCB0eXBlIENzc0NvbnRyb2xUeXBlID0gJ2NvbG9yJyB8ICdzaXplJyB8ICdzZWxlY3QnIHwgJ3RleHQnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDc3NQcm9wZXJ0eURlZiB7XHJcbiAgICAvKiogTm9tZSBkZWxsYSBwcm9wcmlldMOgIENTUywgbWludXNjb2xvIChlcy4gXCJiYWNrZ3JvdW5kLWNvbG9yXCIpICovXHJcbiAgICBwcm9wOiBzdHJpbmc7XHJcbiAgICBsYWJlbDogc3RyaW5nO1xyXG4gICAgdHlwZTogQ3NzQ29udHJvbFR5cGU7XHJcbiAgICAvKiogR3J1cHBvIGRpIGFwcGFydGVuZW56YSwgdXNhdG8gcGVyIHJhZ2dydXBwYXJlIGxlIHJpZ2hlIGEgdmlkZW8gKi9cclxuICAgIGdyb3VwOiBzdHJpbmc7XHJcbiAgICAvKiogU29sbyBwZXIgdHlwZSAnc2l6ZScgKi9cclxuICAgIG1pbj86IG51bWJlcjtcclxuICAgIG1heD86IG51bWJlcjtcclxuICAgIHN0ZXA/OiBudW1iZXI7XHJcbiAgICB1bml0Pzogc3RyaW5nO1xyXG4gICAgLyoqIFNvbG8gcGVyIHR5cGUgJ3NlbGVjdCcgKi9cclxuICAgIG9wdGlvbnM/OiBBcnJheTx7IHZhbHVlOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfT47XHJcbiAgICBwbGFjZWhvbGRlcj86IHN0cmluZztcclxufVxyXG5cclxuLyoqIFByb3ByaWV0w6AgbW9zdHJhdGUgc2VtcHJlOiBjb3Byb25vIGlsIDkwJSBkZWxsZSBwZXJzb25hbGl6emF6aW9uaSAqL1xyXG5leHBvcnQgY29uc3QgQ1NTX0NPUkVfUFJPUEVSVElFUzogQXJyYXk8Q3NzUHJvcGVydHlEZWY+ID0gW1xyXG4gICAgeyBwcm9wOiAnYmFja2dyb3VuZC1jb2xvcicsIGxhYmVsOiAnU2ZvbmRvJywgdHlwZTogJ2NvbG9yJywgZ3JvdXA6ICdBc3BldHRvJyB9LFxyXG4gICAgeyBwcm9wOiAnY29sb3InLCBsYWJlbDogJ0NvbG9yZSB0ZXN0bycsIHR5cGU6ICdjb2xvcicsIGdyb3VwOiAnVGVzdG8nIH0sXHJcbiAgICB7IHByb3A6ICdmb250LXNpemUnLCBsYWJlbDogJ0RpbWVuc2lvbmUgdGVzdG8nLCB0eXBlOiAnc2l6ZScsIGdyb3VwOiAnVGVzdG8nLCBtaW46IDgsIG1heDogNDgsIHN0ZXA6IDEsIHVuaXQ6ICdweCcgfSxcclxuICAgIHtcclxuICAgICAgICBwcm9wOiAnZm9udC13ZWlnaHQnLCBsYWJlbDogJ1NwZXNzb3JlIHRlc3RvJywgdHlwZTogJ3NlbGVjdCcsIGdyb3VwOiAnVGVzdG8nLFxyXG4gICAgICAgIG9wdGlvbnM6IFtcclxuICAgICAgICAgICAgeyB2YWx1ZTogJ25vcm1hbCcsIGxhYmVsOiAnTm9ybWFsZScgfSxcclxuICAgICAgICAgICAgeyB2YWx1ZTogJ2JvbGQnLCBsYWJlbDogJ0dyYXNzZXR0bycgfSxcclxuICAgICAgICAgICAgeyB2YWx1ZTogJzMwMCcsIGxhYmVsOiAnTGVnZ2VybyAoMzAwKScgfSxcclxuICAgICAgICAgICAgeyB2YWx1ZTogJzUwMCcsIGxhYmVsOiAnTWVkaW8gKDUwMCknIH0sXHJcbiAgICAgICAgICAgIHsgdmFsdWU6ICc2MDAnLCBsYWJlbDogJ1NlbWktZ3Jhc3NldHRvICg2MDApJyB9LFxyXG4gICAgICAgICAgICB7IHZhbHVlOiAnODAwJywgbGFiZWw6ICdFeHRyYSAoODAwKScgfSxcclxuICAgICAgICBdLFxyXG4gICAgfSxcclxuICAgIHsgcHJvcDogJ2JvcmRlci1yYWRpdXMnLCBsYWJlbDogJ0FuZ29saSBhcnJvdG9uZGF0aScsIHR5cGU6ICdzaXplJywgZ3JvdXA6ICdCb3JkbycsIG1pbjogMCwgbWF4OiA0MCwgc3RlcDogMSwgdW5pdDogJ3B4JyB9LFxyXG4gICAgeyBwcm9wOiAnYm9yZGVyLXdpZHRoJywgbGFiZWw6ICdTcGVzc29yZSBib3JkbycsIHR5cGU6ICdzaXplJywgZ3JvdXA6ICdCb3JkbycsIG1pbjogMCwgbWF4OiAxMiwgc3RlcDogMSwgdW5pdDogJ3B4JyB9LFxyXG4gICAgeyBwcm9wOiAnYm9yZGVyLWNvbG9yJywgbGFiZWw6ICdDb2xvcmUgYm9yZG8nLCB0eXBlOiAnY29sb3InLCBncm91cDogJ0JvcmRvJyB9LFxyXG4gICAge1xyXG4gICAgICAgIHByb3A6ICdib3JkZXItc3R5bGUnLCBsYWJlbDogJ1RpcG8gYm9yZG8nLCB0eXBlOiAnc2VsZWN0JywgZ3JvdXA6ICdCb3JkbycsXHJcbiAgICAgICAgb3B0aW9uczogW1xyXG4gICAgICAgICAgICB7IHZhbHVlOiAnbm9uZScsIGxhYmVsOiAnTmVzc3VubycgfSxcclxuICAgICAgICAgICAgeyB2YWx1ZTogJ3NvbGlkJywgbGFiZWw6ICdDb250aW51bycgfSxcclxuICAgICAgICAgICAgeyB2YWx1ZTogJ2Rhc2hlZCcsIGxhYmVsOiAnVHJhdHRlZ2dpYXRvJyB9LFxyXG4gICAgICAgICAgICB7IHZhbHVlOiAnZG90dGVkJywgbGFiZWw6ICdQdW50aW5hdG8nIH0sXHJcbiAgICAgICAgICAgIHsgdmFsdWU6ICdkb3VibGUnLCBsYWJlbDogJ0RvcHBpbycgfSxcclxuICAgICAgICBdLFxyXG4gICAgfSxcclxuICAgIHsgcHJvcDogJ3BhZGRpbmcnLCBsYWJlbDogJ1NwYXppYXR1cmEgaW50ZXJuYScsIHR5cGU6ICd0ZXh0JywgZ3JvdXA6ICdTcGF6aWF0dXJhJywgcGxhY2Vob2xkZXI6ICdlcy4gOHB4IDEycHgnIH0sXHJcbl07XHJcblxyXG4vKiogUHJvcHJpZXTDoCBhZ2dpdW50aXZlLCBtb3N0cmF0ZSBzb2xvIGFwcmVuZG8gXCJBbHRyZSBwcm9wcmlldMOgXCIgKi9cclxuZXhwb3J0IGNvbnN0IENTU19FWFRSQV9QUk9QRVJUSUVTOiBBcnJheTxDc3NQcm9wZXJ0eURlZj4gPSBbXHJcbiAgICB7IHByb3A6ICdvcGFjaXR5JywgbGFiZWw6ICdPcGFjaXTDoCcsIHR5cGU6ICdzaXplJywgZ3JvdXA6ICdBc3BldHRvJywgbWluOiAwLCBtYXg6IDEsIHN0ZXA6IDAuMDUsIHVuaXQ6ICcnIH0sXHJcbiAgICB7IHByb3A6ICdiYWNrZ3JvdW5kJywgbGFiZWw6ICdTZm9uZG8gYXZhbnphdG8nLCB0eXBlOiAndGV4dCcsIGdyb3VwOiAnQXNwZXR0bycsIHBsYWNlaG9sZGVyOiAnZXMuIGxpbmVhci1ncmFkaWVudCguLi4pJyB9LFxyXG4gICAgeyBwcm9wOiAnYm94LXNoYWRvdycsIGxhYmVsOiAnT21icmEnLCB0eXBlOiAndGV4dCcsIGdyb3VwOiAnQXNwZXR0bycsIHBsYWNlaG9sZGVyOiAnZXMuIDAgMnB4IDZweCByZ2JhKDAsMCwwLC4yKScgfSxcclxuICAgIHtcclxuICAgICAgICBwcm9wOiAndGV4dC1hbGlnbicsIGxhYmVsOiAnQWxsaW5lYW1lbnRvIHRlc3RvJywgdHlwZTogJ3NlbGVjdCcsIGdyb3VwOiAnVGVzdG8nLFxyXG4gICAgICAgIG9wdGlvbnM6IFtcclxuICAgICAgICAgICAgeyB2YWx1ZTogJ2xlZnQnLCBsYWJlbDogJ1NpbmlzdHJhJyB9LFxyXG4gICAgICAgICAgICB7IHZhbHVlOiAnY2VudGVyJywgbGFiZWw6ICdDZW50cm8nIH0sXHJcbiAgICAgICAgICAgIHsgdmFsdWU6ICdyaWdodCcsIGxhYmVsOiAnRGVzdHJhJyB9LFxyXG4gICAgICAgICAgICB7IHZhbHVlOiAnanVzdGlmeScsIGxhYmVsOiAnR2l1c3RpZmljYXRvJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHByb3A6ICd0ZXh0LXRyYW5zZm9ybScsIGxhYmVsOiAnTWFpdXNjb2xlL21pbnVzY29sZScsIHR5cGU6ICdzZWxlY3QnLCBncm91cDogJ1Rlc3RvJyxcclxuICAgICAgICBvcHRpb25zOiBbXHJcbiAgICAgICAgICAgIHsgdmFsdWU6ICdub25lJywgbGFiZWw6ICdDb21lIHNjcml0dG8nIH0sXHJcbiAgICAgICAgICAgIHsgdmFsdWU6ICd1cHBlcmNhc2UnLCBsYWJlbDogJ1RVVFRPIE1BSVVTQ09MTycgfSxcclxuICAgICAgICAgICAgeyB2YWx1ZTogJ2xvd2VyY2FzZScsIGxhYmVsOiAndHV0dG8gbWludXNjb2xvJyB9LFxyXG4gICAgICAgICAgICB7IHZhbHVlOiAnY2FwaXRhbGl6ZScsIGxhYmVsOiAnSW5pemlhbGkgTWFpdXNjb2xlJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHByb3A6ICdmb250LXN0eWxlJywgbGFiZWw6ICdDb3JzaXZvJywgdHlwZTogJ3NlbGVjdCcsIGdyb3VwOiAnVGVzdG8nLFxyXG4gICAgICAgIG9wdGlvbnM6IFtcclxuICAgICAgICAgICAgeyB2YWx1ZTogJ25vcm1hbCcsIGxhYmVsOiAnTm9ybWFsZScgfSxcclxuICAgICAgICAgICAgeyB2YWx1ZTogJ2l0YWxpYycsIGxhYmVsOiAnQ29yc2l2bycgfSxcclxuICAgICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBwcm9wOiAndGV4dC1kZWNvcmF0aW9uJywgbGFiZWw6ICdEZWNvcmF6aW9uZSB0ZXN0bycsIHR5cGU6ICdzZWxlY3QnLCBncm91cDogJ1Rlc3RvJyxcclxuICAgICAgICBvcHRpb25zOiBbXHJcbiAgICAgICAgICAgIHsgdmFsdWU6ICdub25lJywgbGFiZWw6ICdOZXNzdW5hJyB9LFxyXG4gICAgICAgICAgICB7IHZhbHVlOiAndW5kZXJsaW5lJywgbGFiZWw6ICdTb3R0b2xpbmVhdG8nIH0sXHJcbiAgICAgICAgICAgIHsgdmFsdWU6ICdsaW5lLXRocm91Z2gnLCBsYWJlbDogJ0JhcnJhdG8nIH0sXHJcbiAgICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7IHByb3A6ICdmb250LWZhbWlseScsIGxhYmVsOiAnRm9udCcsIHR5cGU6ICd0ZXh0JywgZ3JvdXA6ICdUZXN0bycsIHBsYWNlaG9sZGVyOiAnZXMuIFJvYm90bywgc2Fucy1zZXJpZicgfSxcclxuICAgIHsgcHJvcDogJ2xldHRlci1zcGFjaW5nJywgbGFiZWw6ICdTcGF6aWF0dXJhIGxldHRlcmUnLCB0eXBlOiAnc2l6ZScsIGdyb3VwOiAnVGVzdG8nLCBtaW46IC0yLCBtYXg6IDEwLCBzdGVwOiAwLjUsIHVuaXQ6ICdweCcgfSxcclxuICAgIHsgcHJvcDogJ2xpbmUtaGVpZ2h0JywgbGFiZWw6ICdJbnRlcmxpbmVhJywgdHlwZTogJ3NpemUnLCBncm91cDogJ1Rlc3RvJywgbWluOiAwLjgsIG1heDogMywgc3RlcDogMC4xLCB1bml0OiAnJyB9LFxyXG4gICAgeyBwcm9wOiAnbWFyZ2luJywgbGFiZWw6ICdTcGF6aWF0dXJhIGVzdGVybmEnLCB0eXBlOiAndGV4dCcsIGdyb3VwOiAnU3BhemlhdHVyYScsIHBsYWNlaG9sZGVyOiAnZXMuIDAgMCA4cHggMCcgfSxcclxuICAgIHsgcHJvcDogJ3dpZHRoJywgbGFiZWw6ICdMYXJnaGV6emEnLCB0eXBlOiAndGV4dCcsIGdyb3VwOiAnU3BhemlhdHVyYScsIHBsYWNlaG9sZGVyOiAnZXMuIDEwMCUnIH0sXHJcbiAgICB7IHByb3A6ICdoZWlnaHQnLCBsYWJlbDogJ0FsdGV6emEnLCB0eXBlOiAndGV4dCcsIGdyb3VwOiAnU3BhemlhdHVyYScsIHBsYWNlaG9sZGVyOiAnZXMuIDQwcHgnIH0sXHJcbiAgICB7IHByb3A6ICdtaW4taGVpZ2h0JywgbGFiZWw6ICdBbHRlenphIG1pbmltYScsIHR5cGU6ICd0ZXh0JywgZ3JvdXA6ICdTcGF6aWF0dXJhJywgcGxhY2Vob2xkZXI6ICdlcy4gNDBweCcgfSxcclxuICAgIHsgcHJvcDogJ2dhcCcsIGxhYmVsOiAnRGlzdGFuemEgdHJhIGVsZW1lbnRpJywgdHlwZTogJ3NpemUnLCBncm91cDogJ0xheW91dCcsIG1pbjogMCwgbWF4OiA0MCwgc3RlcDogMSwgdW5pdDogJ3B4JyB9LFxyXG4gICAge1xyXG4gICAgICAgIHByb3A6ICdkaXNwbGF5JywgbGFiZWw6ICdWaXN1YWxpenphemlvbmUnLCB0eXBlOiAnc2VsZWN0JywgZ3JvdXA6ICdMYXlvdXQnLFxyXG4gICAgICAgIG9wdGlvbnM6IFtcclxuICAgICAgICAgICAgeyB2YWx1ZTogJ2Jsb2NrJywgbGFiZWw6ICdCbG9jY28nIH0sXHJcbiAgICAgICAgICAgIHsgdmFsdWU6ICdpbmxpbmUtYmxvY2snLCBsYWJlbDogJ0Jsb2NjbyBpbiBsaW5lYScgfSxcclxuICAgICAgICAgICAgeyB2YWx1ZTogJ2ZsZXgnLCBsYWJlbDogJ0ZsZXgnIH0sXHJcbiAgICAgICAgICAgIHsgdmFsdWU6ICdub25lJywgbGFiZWw6ICdOYXNjb3N0bycgfSxcclxuICAgICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBwcm9wOiAnanVzdGlmeS1jb250ZW50JywgbGFiZWw6ICdBbGxpbmVhbWVudG8gb3JpenpvbnRhbGUnLCB0eXBlOiAnc2VsZWN0JywgZ3JvdXA6ICdMYXlvdXQnLFxyXG4gICAgICAgIG9wdGlvbnM6IFtcclxuICAgICAgICAgICAgeyB2YWx1ZTogJ2ZsZXgtc3RhcnQnLCBsYWJlbDogJ0luaXppbycgfSxcclxuICAgICAgICAgICAgeyB2YWx1ZTogJ2NlbnRlcicsIGxhYmVsOiAnQ2VudHJvJyB9LFxyXG4gICAgICAgICAgICB7IHZhbHVlOiAnZmxleC1lbmQnLCBsYWJlbDogJ0ZpbmUnIH0sXHJcbiAgICAgICAgICAgIHsgdmFsdWU6ICdzcGFjZS1iZXR3ZWVuJywgbGFiZWw6ICdEaXN0cmlidWl0bycgfSxcclxuICAgICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBwcm9wOiAnYWxpZ24taXRlbXMnLCBsYWJlbDogJ0FsbGluZWFtZW50byB2ZXJ0aWNhbGUnLCB0eXBlOiAnc2VsZWN0JywgZ3JvdXA6ICdMYXlvdXQnLFxyXG4gICAgICAgIG9wdGlvbnM6IFtcclxuICAgICAgICAgICAgeyB2YWx1ZTogJ2ZsZXgtc3RhcnQnLCBsYWJlbDogJ0FsdG8nIH0sXHJcbiAgICAgICAgICAgIHsgdmFsdWU6ICdjZW50ZXInLCBsYWJlbDogJ0NlbnRybycgfSxcclxuICAgICAgICAgICAgeyB2YWx1ZTogJ2ZsZXgtZW5kJywgbGFiZWw6ICdCYXNzbycgfSxcclxuICAgICAgICAgICAgeyB2YWx1ZTogJ3N0cmV0Y2gnLCBsYWJlbDogJ0VzdGVuZGknIH0sXHJcbiAgICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgcHJvcDogJ2N1cnNvcicsIGxhYmVsOiAnUHVudGF0b3JlJywgdHlwZTogJ3NlbGVjdCcsIGdyb3VwOiAnTGF5b3V0JyxcclxuICAgICAgICBvcHRpb25zOiBbXHJcbiAgICAgICAgICAgIHsgdmFsdWU6ICdkZWZhdWx0JywgbGFiZWw6ICdOb3JtYWxlJyB9LFxyXG4gICAgICAgICAgICB7IHZhbHVlOiAncG9pbnRlcicsIGxhYmVsOiAnTWFubycgfSxcclxuICAgICAgICAgICAgeyB2YWx1ZTogJ25vdC1hbGxvd2VkJywgbGFiZWw6ICdWaWV0YXRvJyB9LFxyXG4gICAgICAgICAgICB7IHZhbHVlOiAndGV4dCcsIGxhYmVsOiAnVGVzdG8nIH0sXHJcbiAgICAgICAgXSxcclxuICAgIH0sXHJcbiAgICB7IHByb3A6ICd0cmFuc2l0aW9uJywgbGFiZWw6ICdUcmFuc2l6aW9uZScsIHR5cGU6ICd0ZXh0JywgZ3JvdXA6ICdFZmZldHRpJywgcGxhY2Vob2xkZXI6ICdlcy4gYWxsIC4ycyBlYXNlJyB9LFxyXG4gICAgeyBwcm9wOiAndHJhbnNmb3JtJywgbGFiZWw6ICdUcmFzZm9ybWF6aW9uZScsIHR5cGU6ICd0ZXh0JywgZ3JvdXA6ICdFZmZldHRpJywgcGxhY2Vob2xkZXI6ICdlcy4gc2NhbGUoMS4wNSknIH0sXHJcbl07XHJcblxyXG5leHBvcnQgY29uc3QgQ1NTX0FMTF9QUk9QRVJUSUVTOiBBcnJheTxDc3NQcm9wZXJ0eURlZj4gPSBDU1NfQ09SRV9QUk9QRVJUSUVTLmNvbmNhdChDU1NfRVhUUkFfUFJPUEVSVElFUyk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3NzUHJvcGVydHlEZWYocHJvcDogc3RyaW5nKTogQ3NzUHJvcGVydHlEZWYgfCBudWxsIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IChwcm9wIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIENTU19BTExfUFJPUEVSVElFUy5maW5kKChwKSA9PiBwLnByb3AgPT09IHRhcmdldCkgPz8gbnVsbDtcclxufVxyXG5cclxuLyoqIERlZmluaXppb25lIGRpIHJpcGllZ28gcGVyIHVuYSBwcm9wcmlldMOgIHNjcml0dGEgYSBtYW5vIGUgbm9uIGNhdGFsb2dhdGEgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ3VzdG9tQ3NzUHJvcGVydHlEZWYocHJvcDogc3RyaW5nKTogQ3NzUHJvcGVydHlEZWYge1xyXG4gICAgcmV0dXJuIHsgcHJvcDogKHByb3AgfHwgJycpLnRvTG93ZXJDYXNlKCksIGxhYmVsOiBwcm9wLCB0eXBlOiAndGV4dCcsIGdyb3VwOiAnUGVyc29uYWxpenphdGUnIH07XHJcbn1cclxuIl19
|