@eqproject/eqp-dynamic-module 2.10.67 → 2.10.69

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.
@@ -0,0 +1,78 @@
1
+ const SYSTEM_FONTS = new Set([
2
+ // Generici CSS
3
+ 'sans-serif', 'serif', 'monospace', 'cursive', 'fantasy', 'system-ui',
4
+ 'inherit', 'initial', 'unset', 'revert',
5
+ // Famiglie sistema Windows / Mac / Linux
6
+ '-apple-system', 'blinkmacsystemfont', 'segoe ui', 'helvetica neue',
7
+ 'helvetica', 'arial', 'verdana', 'tahoma', 'trebuchet ms', 'georgia',
8
+ 'times new roman', 'times', 'courier new', 'courier', 'lucida console',
9
+ 'lucida sans unicode', 'impact', 'comic sans ms', 'palatino linotype',
10
+ 'book antiqua', 'palatino', 'garamond', 'bookman',
11
+ ]);
12
+ const FIELD_CSS_KEYS = [
13
+ 'TextFieldStyleCSS', 'TextareaFieldStyleCSS', 'BooleanFieldStyleCSS',
14
+ 'DateFieldStyleCSS', 'NumericFieldStyleCSS', 'AttachmentFieldStyleCSS',
15
+ 'ImageFieldStyleCSS', 'ListValueFieldStyleCSS', 'ImageSelectorFieldStyleCSS',
16
+ 'LabelFieldStyleCSS', 'ImageWithMarkersFieldStyleCSS', 'ActionButtonFieldStyleCSS',
17
+ ];
18
+ function collectCssStrings(form) {
19
+ const result = [];
20
+ if (form.ThemeCSS)
21
+ result.push(form.ThemeCSS);
22
+ if (form.TitleCSS)
23
+ result.push(form.TitleCSS);
24
+ for (const field of form.Fields ?? []) {
25
+ const f = field;
26
+ if (f.FieldstyleCSS)
27
+ result.push(f.FieldstyleCSS);
28
+ if (f.LabelstyleCSS)
29
+ result.push(f.LabelstyleCSS);
30
+ for (const key of FIELD_CSS_KEYS) {
31
+ const cssObj = f[key];
32
+ if (cssObj && typeof cssObj === 'object') {
33
+ for (const val of Object.values(cssObj)) {
34
+ if (typeof val === 'string' && val)
35
+ result.push(val);
36
+ }
37
+ }
38
+ }
39
+ }
40
+ return result;
41
+ }
42
+ function extractGoogleFontNames(cssStrings) {
43
+ const found = new Set();
44
+ for (const css of cssStrings) {
45
+ const regex = /font-family\s*:\s*([^;]+)/gi;
46
+ let match;
47
+ while ((match = regex.exec(css)) !== null) {
48
+ for (const part of match[1].split(',')) {
49
+ const name = part.trim().replace(/^['"]|['"]$/g, '').trim();
50
+ if (name && !SYSTEM_FONTS.has(name.toLowerCase())) {
51
+ found.add(name);
52
+ }
53
+ }
54
+ }
55
+ }
56
+ return Array.from(found);
57
+ }
58
+ /**
59
+ * Scansiona tutte le stringhe CSS del form (ThemeCSS, TitleCSS, FieldStyleCSS tipizzati)
60
+ * ed inietta un <link> a Google Fonts per ogni font non-di-sistema trovato.
61
+ * Idempotente: non aggiunge link già presenti nel DOM.
62
+ */
63
+ export function injectGoogleFontsFromForm(form) {
64
+ if (!form || typeof document === 'undefined')
65
+ return;
66
+ const fonts = extractGoogleFontNames(collectCssStrings(form));
67
+ for (const font of fonts) {
68
+ const id = `gfont-${font.replace(/\s+/g, '-').toLowerCase()}`;
69
+ if (document.getElementById(id))
70
+ continue;
71
+ const link = document.createElement('link');
72
+ link.id = id;
73
+ link.rel = 'stylesheet';
74
+ link.href = `https://fonts.bunny.net/css2?family=${encodeURIComponent(font)}:ital,wght@0,400;0,700;1,400&display=swap`;
75
+ document.head.appendChild(link);
76
+ }
77
+ }
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLWZvbnRzLWluamVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvdXRpbHMvZ29vZ2xlLWZvbnRzLWluamVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUFTO0lBQ25DLGVBQWU7SUFDZixZQUFZLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVc7SUFDckUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUTtJQUN2Qyx5Q0FBeUM7SUFDekMsZUFBZSxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxnQkFBZ0I7SUFDbkUsV0FBVyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxTQUFTO0lBQ3BFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLGdCQUFnQjtJQUN0RSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLG1CQUFtQjtJQUNyRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTO0NBQ2xELENBQUMsQ0FBQztBQUVILE1BQU0sY0FBYyxHQUFHO0lBQ3JCLG1CQUFtQixFQUFFLHVCQUF1QixFQUFFLHNCQUFzQjtJQUNwRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSx5QkFBeUI7SUFDdEUsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUUsNEJBQTRCO0lBQzVFLG9CQUFvQixFQUFFLCtCQUErQixFQUFFLDJCQUEyQjtDQUNuRixDQUFDO0FBRUYsU0FBUyxpQkFBaUIsQ0FBQyxJQUFVO0lBQ25DLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUM1QixJQUFJLElBQUksQ0FBQyxRQUFRO1FBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENB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QUFDO1FBQ3ZILFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2pDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm0gfSBmcm9tICcuLi9tb2RlbHMvZm9ybS5tb2RlbCc7XG5cbmNvbnN0IFNZU1RFTV9GT05UUyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gIC8vIEdlbmVyaWNpIENTU1xuICAnc2Fucy1zZXJpZicsICdzZXJpZicsICdtb25vc3BhY2UnLCAnY3Vyc2l2ZScsICdmYW50YXN5JywgJ3N5c3RlbS11aScsXG4gICdpbmhlcml0JywgJ2luaXRpYWwnLCAndW5zZXQnLCAncmV2ZXJ0JyxcbiAgLy8gRmFtaWdsaWUgc2lzdGVtYSBXaW5kb3dzIC8gTWFjIC8gTGludXhcbiAgJy1hcHBsZS1zeXN0ZW0nLCAnYmxpbmttYWNzeXN0ZW1mb250JywgJ3NlZ29lIHVpJywgJ2hlbHZldGljYSBuZXVlJyxcbiAgJ2hlbHZldGljYScsICdhcmlhbCcsICd2ZXJkYW5hJywgJ3RhaG9tYScsICd0cmVidWNoZXQgbXMnLCAnZ2VvcmdpYScsXG4gICd0aW1lcyBuZXcgcm9tYW4nLCAndGltZXMnLCAnY291cmllciBuZXcnLCAnY291cmllcicsICdsdWNpZGEgY29uc29sZScsXG4gICdsdWNpZGEgc2FucyB1bmljb2RlJywgJ2ltcGFjdCcsICdjb21pYyBzYW5zIG1zJywgJ3BhbGF0aW5vIGxpbm90eXBlJyxcbiAgJ2Jvb2sgYW50aXF1YScsICdwYWxhdGlubycsICdnYXJhbW9uZCcsICdib29rbWFuJyxcbl0pO1xuXG5jb25zdCBGSUVMRF9DU1NfS0VZUyA9IFtcbiAgJ1RleHRGaWVsZFN0eWxlQ1NTJywgJ1RleHRhcmVhRmllbGRTdHlsZUNTUycsICdCb29sZWFuRmllbGRTdHlsZUNTUycsXG4gICdEYXRlRmllbGRTdHlsZUNTUycsICdOdW1lcmljRmllbGRTdHlsZUNTUycsICdBdHRhY2htZW50RmllbGRTdHlsZUNTUycsXG4gICdJbWFnZUZpZWxkU3R5bGVDU1MnLCAnTGlzdFZhbHVlRmllbGRTdHlsZUNTUycsICdJbWFnZVNlbGVjdG9yRmllbGRTdHlsZUNTUycsXG4gICdMYWJlbEZpZWxkU3R5bGVDU1MnLCAnSW1hZ2VXaXRoTWFya2Vyc0ZpZWxkU3R5bGVDU1MnLCAnQWN0aW9uQnV0dG9uRmllbGRTdHlsZUNTUycsXG5dO1xuXG5mdW5jdGlvbiBjb2xsZWN0Q3NzU3RyaW5ncyhmb3JtOiBGb3JtKTogc3RyaW5nW10ge1xuICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gIGlmIChmb3JtLlRoZW1lQ1NTKSByZXN1bHQucHVzaChmb3JtLlRoZW1lQ1NTKTtcbiAgaWYgKGZvcm0uVGl0bGVDU1MpIHJlc3VsdC5wdXNoKGZvcm0uVGl0bGVDU1MpO1xuICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZvcm0uRmllbGRzID8/IFtdKSB7XG4gICAgY29uc3QgZiA9IGZpZWxkIGFzIGFueTtcbiAgICBpZiAoZi5GaWVsZHN0eWxlQ1NTKSByZXN1bHQucHVzaChmLkZpZWxkc3R5bGVDU1MpO1xuICAgIGlmIChmLkxhYmVsc3R5bGVDU1MpIHJlc3VsdC5wdXNoKGYuTGFiZWxzdHlsZUNTUyk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgRklFTERfQ1NTX0tFWVMpIHtcbiAgICAgIGNvbnN0IGNzc09iaiA9IGZba2V5XTtcbiAgICAgIGlmIChjc3NPYmogJiYgdHlwZW9mIGNzc09iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgT2JqZWN0LnZhbHVlcyhjc3NPYmopKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIHZhbCkgcmVzdWx0LnB1c2godmFsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBleHRyYWN0R29vZ2xlRm9udE5hbWVzKGNzc1N0cmluZ3M6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICBjb25zdCBmb3VuZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IGNzcyBvZiBjc3NTdHJpbmdzKSB7XG4gICAgY29uc3QgcmVnZXggPSAvZm9udC1mYW1pbHlcXHMqOlxccyooW147XSspL2dpO1xuICAgIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbDtcbiAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyhjc3MpKSAhPT0gbnVsbCkge1xuICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIG1hdGNoWzFdLnNwbGl0KCcsJykpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHBhcnQudHJpbSgpLnJlcGxhY2UoL15bJ1wiXXxbJ1wiXSQvZywgJycpLnRyaW0oKTtcbiAgICAgICAgaWYgKG5hbWUgJiYgIVNZU1RFTV9GT05UUy5oYXMobmFtZS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgIGZvdW5kLmFkZChuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShmb3VuZCk7XG59XG5cbi8qKlxuICogU2NhbnNpb25hIHR1dHRlIGxlIHN0cmluZ2hlIENTUyBkZWwgZm9ybSAoVGhlbWVDU1MsIFRpdGxlQ1NTLCBGaWVsZFN0eWxlQ1NTIHRpcGl6emF0aSlcbiAqIGVkIGluaWV0dGEgdW4gPGxpbms+IGEgR29vZ2xlIEZvbnRzIHBlciBvZ25pIGZvbnQgbm9uLWRpLXNpc3RlbWEgdHJvdmF0by5cbiAqIElkZW1wb3RlbnRlOiBub24gYWdnaXVuZ2UgbGluayBnacOgIHByZXNlbnRpIG5lbCBET00uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RHb29nbGVGb250c0Zyb21Gb3JtKGZvcm06IEZvcm0gfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gIGlmICghZm9ybSB8fCB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gIGNvbnN0IGZvbnRzID0gZXh0cmFjdEdvb2dsZUZvbnROYW1lcyhjb2xsZWN0Q3NzU3RyaW5ncyhmb3JtKSk7XG4gIGZvciAoY29uc3QgZm9udCBvZiBmb250cykge1xuICAgIGNvbnN0IGlkID0gYGdmb250LSR7Zm9udC5yZXBsYWNlKC9cXHMrL2csICctJykudG9Mb3dlckNhc2UoKX1gO1xuICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgbGluay5pZCA9IGlkO1xuICAgIGxpbmsucmVsID0gJ3N0eWxlc2hlZXQnO1xuICAgIGxpbmsuaHJlZiA9IGBodHRwczovL2ZvbnRzLmJ1bm55Lm5ldC9jc3MyP2ZhbWlseT0ke2VuY29kZVVSSUNvbXBvbmVudChmb250KX06aXRhbCx3Z2h0QDAsNDAwOzAsNzAwOzEsNDAwJmRpc3BsYXk9c3dhcGA7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbiAgfVxufVxuIl19