wuic-framework-lib 1.5.0 → 1.7.1

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 (27) hide show
  1. package/fesm2022/{wuic-framework-lib-chart-list.component-0J1ghIrS.mjs → wuic-framework-lib-chart-list.component-Dq9IEKsY.mjs} +50 -38
  2. package/fesm2022/{wuic-framework-lib-code-editor.component-C21mvjyr.mjs → wuic-framework-lib-code-editor.component-B6IpTSo8.mjs} +174 -274
  3. package/fesm2022/{wuic-framework-lib-designer.component-x10ZzUEy.mjs → wuic-framework-lib-designer.component-D6cbqNFg.mjs} +499 -581
  4. package/fesm2022/wuic-framework-lib-first-run-wizard.component-D1ZQUl-q.mjs +1630 -0
  5. package/fesm2022/{wuic-framework-lib-framework-docs.component-xTGLbEnp.mjs → wuic-framework-lib-framework-docs.component-C_o5r7pg.mjs} +4320 -1255
  6. package/fesm2022/{wuic-framework-lib-pivot-builder.component-BkFFjPm4.mjs → wuic-framework-lib-pivot-builder.component-DkWGzJpr.mjs} +580 -68
  7. package/fesm2022/{wuic-framework-lib-prompt-dialog-fallback-host.component-Bi-TrJB6.mjs → wuic-framework-lib-prompt-dialog-fallback-host.component-D29go5yA.mjs} +2 -2
  8. package/fesm2022/wuic-framework-lib-report-designer.component-DcpCWghx.mjs +380 -0
  9. package/fesm2022/wuic-framework-lib-report-scaffold-dialog.component-CgUjG7Bi.mjs +431 -0
  10. package/fesm2022/{wuic-framework-lib-report-viewer.component-BR-BfI2r.mjs → wuic-framework-lib-report-viewer.component-C4Opgl_M.mjs} +8 -13
  11. package/fesm2022/{wuic-framework-lib-scene3d-designer.component-BQzFxSXP.mjs → wuic-framework-lib-scene3d-designer.component-8l3vsyEb.mjs} +323 -88
  12. package/fesm2022/{wuic-framework-lib-scene3d-light-baker-gpu-0LjqhSNn.mjs → wuic-framework-lib-scene3d-light-baker-gpu-C1w-8Aai.mjs} +2 -2
  13. package/fesm2022/{wuic-framework-lib-scene3d-shader-effect-CQLWkuh1.mjs → wuic-framework-lib-scene3d-shader-effect-DjHyCAFK.mjs} +612 -32
  14. package/fesm2022/{wuic-framework-lib-scene3d-viewer.component-imoV3HOs.mjs → wuic-framework-lib-scene3d-viewer.component-nMSl5jbe.mjs} +149 -18
  15. package/fesm2022/{wuic-framework-lib-scheduler-list.component-xzlTEkoq.mjs → wuic-framework-lib-scheduler-list.component-Cvk3Zg0Q.mjs} +169 -53
  16. package/fesm2022/{wuic-framework-lib-spreadsheet-list-sf.component-CrS6fOGj.mjs → wuic-framework-lib-spreadsheet-list-sf.component-C1U7JPiq.mjs} +149 -108
  17. package/fesm2022/{wuic-framework-lib-stimulsoft-license.service-BIyxB4pO.mjs → wuic-framework-lib-stimulsoft-license.service-CsNNSFYs.mjs} +3 -3
  18. package/fesm2022/wuic-framework-lib-timeline-list.component-cZbPgNh1.mjs +805 -0
  19. package/fesm2022/{wuic-framework-lib-workflow-designer.component-5xtQ7-6z.mjs → wuic-framework-lib-workflow-designer.component-C_4RQGa0.mjs} +180 -150
  20. package/fesm2022/{wuic-framework-lib-wuic-framework-lib-3TZ-j-yL.mjs → wuic-framework-lib-wuic-framework-lib-BZZwta8b.mjs} +6785 -2347
  21. package/fesm2022/wuic-framework-lib.mjs +1 -1
  22. package/package.json +21 -2
  23. package/styles/_wuic-tokens.scss +82 -0
  24. package/styles/styles.scss +160 -0
  25. package/types/wuic-framework-lib.d.ts +4269 -2691
  26. package/fesm2022/wuic-framework-lib-first-run-wizard.component-BuSxs_CM.mjs +0 -1316
  27. package/fesm2022/wuic-framework-lib-report-designer.component-ZvB46-LV.mjs +0 -194
@@ -1,2 +1,2 @@
1
- export { s as AUTH_REDIRECT_REASON_KEY, t as AppSettingsEditorComponent, u as AuthSessionService, B as BooleanEditorComponent, v as BoundedRepeaterComponent, w as ButtonEditorComponent, x as CallbackPipe, y as CallbackPipe2, z as CarouselListComponent, E as CodeAreaEditorComponent, H as ColorEditorComponent, J as CrashReporterService, K as CustomAttributesService, N as CustomException, O as DataActionButtonComponent, Q as DataProviderOdataService, c as DataRepeaterComponent, b as DataSourceComponent, R as DateEditorComponent, S as DesignerRouteComponent, V as DictionaryEditorComponent, a as DynamicCompilerService, X as DynamicRowTemplateComponent, i as FieldEditorComponent, F as FilterBarComponent, o as FilterInfo, Y as FormatGridViewValuePipe, Z as GetSrcUploadPreviewPipe, G as GlobalHandler, _ as HtmlEditorComponent, $ as ImageWrapperComponent, I as ImportExportButtonComponent, a0 as IsSelectedRowPipe, a1 as KanbanListComponent, a2 as KanbanOptions, a3 as KanbanStatusColumnItem, a4 as LazyChartListComponent, a5 as LazyCodeEditorComponent, a6 as LazyDataActionButtonComponent, a7 as LazyDataSourceComponent, a8 as LazyFieldEditorComponent, a9 as LazyFirstRunWizardComponent, aa as LazyImageWrapperComponent, ab as LazyKanbanListComponent, ac as LazyMetaMenuComponent, ad as LazyPivotBuilderComponent, ae as LazyReportDesignerComponent, af as LazyReportViewerComponent, ag as LazySchedulerListComponent, ah as LazySpreadsheetListSfComponent, p as LicenseFeatureService, ai as ListGridComponent, aj as LookupEditorComponent, ak as MapListComponent, m as MetaInfo, al as MetaMenuComponent, g as MetadataEditorService, M as MetadataProviderService, e as MetadatiColonna, am as MetadatiTabella, an as NotificationBellComponent, ao as NotificationRealtimeService, ap as NumberEditorComponent, aq as PRIMARY_PALETTES, P as PagerComponent, d as ParametricDialogComponent, ar as PointFilterComponent, as as PropertyArrayEditorComponent, at as PropertyObjectEditorComponent, au as Scene3dDesignerRouteComponent, av as Scene3dViewerRouteComponent, aw as THEME_OPTIONS, ax as TextAreaEditorComponent, ay as TextEditorComponent, T as TranslationManagerService, az as TreeListComponent, aA as TreeViewSelectorComponent, aB as UploadDialogComponent, aC as UploadEditorComponent, U as UserInfoService, aD as ValidationRule, aE as ValueChangedPayload, aF as VisibleFieldListPipe, n as WUIC_SUPPRESS_GLOBAL_ERROR, aG as WidgetDefinition, aH as WorkflowDesignerRouteComponent, aI as WorkflowRunnerComponent, h as WorkflowRuntimeMetadataService, W as WtoolboxService, aJ as WuicAziendaSwitcherComponent, aK as WuicErrorDialogComponent, aL as WuicErrorInterceptor, aM as WuicFeatureDirective, aN as WuicFrozenColumnDirective, aO as WuicRagChatbotComponent, aP as WuicRagChatbotFabComponent, aQ as WuicRagService, aR as WuicRowTogglerDirective, aS as _PRIMENG_TABLE_DIRECTIVES_NAMES, aT as authExpiredInterceptor, aU as boundedRepeaterPendingChangesGuard, aV as featureRouteCanActivateGuard, aW as featureRouteCanMatchGuard, r as getThemeOptions, aX as getThemePrimaryHex, aY as inferTemplateFieldFromBaseClass, aZ as loadBooleanEditorComponent, a_ as loadButtonEditorComponent, a$ as loadCodeAreaEditorComponent, b0 as loadColorEditorComponent, b1 as loadDateEditorComponent, b2 as loadDictionaryEditorComponent, b3 as loadHtmlEditorComponent, b4 as loadLookupEditorComponent, b5 as loadNumberEditorComponent, b6 as loadPropertyArrayEditorComponent, b7 as loadPropertyObjectEditorComponent, b8 as loadTextAreaEditorComponent, b9 as loadTextEditorComponent, ba as loadTreeViewSelectorComponent, bb as loadUploadEditorComponent, bc as menuRouteAccessCanActivateGuard, bd as menuRouteAccessCanMatchGuard, be as routes, bf as scene3dDesignerPendingChangesGuard, bg as wuicErrorInterceptor } from './wuic-framework-lib-wuic-framework-lib-3TZ-j-yL.mjs';
1
+ export { w as AUTH_REDIRECT_REASON_KEY, x as AppHeaderComponent, y as AppHeaderConfigService, z as AppSettingsEditorComponent, B as AuthSessionService, E as BooleanEditorComponent, H as BoundedRepeaterComponent, J as ButtonEditorComponent, K as CUSTOM_THEMES_STORAGE_KEY, N as CallbackPipe, O as CallbackPipe2, Q as CarouselListComponent, R as CodeAreaEditorComponent, S as ColorEditorComponent, V as CrashReporterService, X as CustomAttributesService, Y as CustomException, Z as DEFAULT_FONT_STACK, _ as DEFAULT_THEME_STORAGE_KEY, $ as DEFAULT_THEME_VALUE, a0 as DataActionButtonComponent, a1 as DataProviderOdataService, c as DataRepeaterComponent, b as DataSourceComponent, a2 as DateEditorComponent, a3 as DesignerRouteComponent, a4 as DictionaryEditorComponent, a as DynamicCompilerService, a5 as DynamicRowTemplateComponent, k as FieldEditorComponent, F as FilterBarComponent, q as FilterInfo, a6 as FormatGridViewValuePipe, a7 as GetSrcUploadPreviewPipe, G as GlobalHandler, a8 as HtmlEditorComponent, a9 as ImageWrapperComponent, I as ImportExportButtonComponent, aa as IsSelectedRowPipe, ab as KanbanListComponent, ac as KanbanOptions, ad as KanbanStatusColumnItem, ae as LazyChartListComponent, af as LazyCodeEditorComponent, ag as LazyDataActionButtonComponent, ah as LazyDataSourceComponent, ai as LazyFieldEditorComponent, aj as LazyFirstRunWizardComponent, ak as LazyImageWrapperComponent, al as LazyKanbanListComponent, am as LazyMetaMenuComponent, an as LazyPivotBuilderComponent, ao as LazyReportDesignerComponent, ap as LazyReportViewerComponent, aq as LazySchedulerListComponent, ar as LazySpreadsheetListSfComponent, as as LazyTimelineListComponent, r as LicenseFeatureService, at as ListGridComponent, au as LookupEditorComponent, av as MapListComponent, o as MetaInfo, aw as MetaMenuComponent, i as MetadataEditorService, M as MetadataProviderService, g as MetadatiColonna, ax as MetadatiTabella, ay as NotificationBellComponent, az as NotificationRealtimeService, aA as NumberEditorComponent, aB as PALETTE_STOPS, aC as PREVIEW_RESTORE_KEY, aD as PRIMARY_PALETTES, P as PagerComponent, f as ParametricDialogComponent, aE as PerformanceInspectorComponent, aF as PointFilterComponent, aG as PropertyArrayEditorComponent, aH as PropertyObjectEditorComponent, aI as RAG_DESTRUCTIVE_KINDS, aJ as RouteMetricsDashboardComponent, aK as Scene3dDesignerRouteComponent, aL as Scene3dViewerRouteComponent, aM as THEME_MODE_STORAGE_KEY, aN as THEME_OPTIONS, aO as THEME_STORAGE_KEY, aP as TextAreaEditorComponent, aQ as TextEditorComponent, aR as ThemeBuilderComponent, aS as ThemeCatalogService, aT as ThemePreviewPanelComponent, aU as ThemeRuntimeService, aV as ThemeSelectorComponent, u as TimelineOptions, T as TranslationManagerService, aW as TreeListComponent, aX as TreeViewSelectorComponent, aY as UploadDialogComponent, aZ as UploadEditorComponent, U as UserInfoService, a_ as UserLanguageService, a$ as UserMenuComponent, b0 as ValidationRule, b1 as ValueChangedPayload, b2 as VisibleFieldListPipe, b3 as WUIC_FONT_CATALOG, p as WUIC_SUPPRESS_GLOBAL_ERROR, b4 as WidgetDefinition, b5 as WorkflowDesignerRouteComponent, b6 as WorkflowRunnerComponent, j as WorkflowRuntimeMetadataService, W as WtoolboxService, b7 as WuicAziendaSwitcherComponent, b8 as WuicErrorDialogComponent, b9 as WuicErrorInterceptor, ba as WuicFeatureDirective, bb as WuicFrozenColumnDirective, bc as WuicRagChatbotComponent, bd as WuicRagChatbotFabComponent, be as WuicRagService, bf as WuicRowTogglerDirective, bg as _PRIMENG_TABLE_DIRECTIVES_NAMES, bh as authExpiredInterceptor, bi as bestContrastColor, bj as boundedRepeaterPendingChangesGuard, bk as buildCustomPreset, bl as buildThemeValue, d as clampAlpha, bm as computeDataQualitySummary, bn as contrastRatio, bo as createDraftTheme, bp as featureRouteCanActivateGuard, bq as featureRouteCanMatchGuard, br as generatePrimaryPalette, bs as generateSurfacePalette, bt as getQualityInspectorOptions, v as getThemeOptions, bu as getThemePrimaryHex, bv as hexToOklch, bw as hexToRgb, bx as hsbaToRgbaString, by as inferTemplateFieldFromBaseClass, bz as isCustomThemeValue, bA as isDestructiveRagAction, bB as isRoutePersistenceEnabled, bC as loadBooleanEditorComponent, bD as loadButtonEditorComponent, bE as loadCodeAreaEditorComponent, bF as loadColorEditorComponent, bG as loadDateEditorComponent, bH as loadDictionaryEditorComponent, bI as loadHtmlEditorComponent, bJ as loadLookupEditorComponent, bK as loadNumberEditorComponent, bL as loadPropertyArrayEditorComponent, bM as loadPropertyObjectEditorComponent, bN as loadTextAreaEditorComponent, bO as loadTextEditorComponent, bP as loadTreeViewSelectorComponent, bQ as loadUploadEditorComponent, bR as menuRouteAccessCanActivateGuard, bS as menuRouteAccessCanMatchGuard, bT as nearestPrimaryName, bU as normalizeHex, bV as oklchToHex, bW as oklchToRgb, bX as resolveBackgroundCss, bY as resolveFontStack, bZ as resolveGridStrengths, b_ as resolveThemePreset, b$ as resolveThemePresetForOption, c0 as rgbToHex, c1 as rgbToOklch, c2 as rgbaToHsbaModel, c3 as routeMetricsClient, c4 as routes, c5 as scene3dDesignerPendingChangesGuard, c6 as themeBuilderPendingChangesGuard, t as toHsbaModel, e as toPersistedColor, c7 as wcagLevel, c8 as wuicErrorInterceptor } from './wuic-framework-lib-wuic-framework-lib-BZZwta8b.mjs';
2
2
  //# sourceMappingURL=wuic-framework-lib.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wuic-framework-lib",
3
- "version": "1.5.0",
3
+ "version": "1.7.1",
4
4
  "description": "Wuic Angular Framework Library",
5
5
  "author": "Wuic",
6
6
  "license": "MIT",
@@ -41,7 +41,12 @@
41
41
  "three": "^0.185.1",
42
42
  "primeflex": "^3.3.1",
43
43
  "primeicons": "^7.0.0",
44
- "primeng": ">=21.0.0"
44
+ "primeng": ">=21.0.0",
45
+ "@primeuix/styled": ">=0.7.0",
46
+ "@primeuix/themes": ">=2.0.0",
47
+ "three-gpu-pathtracer": "^0.0.24",
48
+ "three-mesh-bvh": "^0.9.10",
49
+ "@dimforge/rapier3d-compat": "^0.12.0"
45
50
  },
46
51
  "dependencies": {
47
52
  "stimulsoft-designer-angular": "^2026.1.7",
@@ -81,6 +86,20 @@
81
86
  "default": "./fesm2022/wuic-framework-lib-widget-loaders.mjs"
82
87
  }
83
88
  },
89
+ "peerDependenciesMeta": {
90
+ "three-gpu-pathtracer": {
91
+ "optional": true
92
+ },
93
+ "three-mesh-bvh": {
94
+ "optional": true
95
+ },
96
+ "@dimforge/rapier3d-compat": {
97
+ "optional": true
98
+ },
99
+ "three": {
100
+ "optional": true
101
+ }
102
+ },
84
103
  "module": "fesm2022/wuic-framework-lib.mjs",
85
104
  "typings": "types/wuic-framework-lib.d.ts",
86
105
  "type": "module"
@@ -0,0 +1,82 @@
1
+ // Token di design condivisi del framework (--wuic-*).
2
+ // Sono DERIVATI dai token semantici PrimeUIX (--p-*): commutano da soli al
3
+ // cambio tema/preset, in dark mode (darkModeSelector `.theme-dark` ricalcola i
4
+ // --p-*) e in alto contrasto (l'host rimappa i --p-* sui --hc-*). Per questo
5
+ // i componenti che usano --wuic-* NON devono aggiungere blocchi
6
+ // `:host-context(.theme-dark)` propri: la commutazione avviene qui, una volta.
7
+ // I fallback hex servono solo quando i --p-* non sono ancora installati
8
+ // (bootstrap primissimo paint) e replicano il light di default.
9
+
10
+ :root {
11
+ // Superfici
12
+ --wuic-surface: var(--p-content-background, #ffffff);
13
+ --wuic-surface-soft: var(--p-content-hover-background, #f8fafc);
14
+
15
+ // Bordi
16
+ --wuic-border: var(--p-content-border-color, #d9e2ec);
17
+ --wuic-border-soft: color-mix(in srgb, var(--wuic-border) 55%, var(--wuic-surface));
18
+
19
+ // Testo
20
+ --wuic-text: var(--p-text-color, #1f2937);
21
+ --wuic-text-muted: var(--p-text-muted-color, #64748b);
22
+
23
+ // Accent (colore primario del tema attivo)
24
+ --wuic-accent: var(--p-primary-color, #3b82f6);
25
+ --wuic-accent-contrast: var(--p-primary-contrast-color, #ffffff);
26
+ --wuic-accent-soft: color-mix(in srgb, var(--wuic-accent) 12%, var(--wuic-surface));
27
+
28
+ // Raggi
29
+ --wuic-radius-sm: var(--p-border-radius-sm, 4px);
30
+ --wuic-radius-md: var(--p-border-radius-md, 6px);
31
+ --wuic-radius-lg: var(--p-border-radius-lg, 10px);
32
+
33
+ // Ombre: non derivabili dai --p-* (PrimeUIX non espone shadow semantiche),
34
+ // quindi hanno l'unico override esplicito in `.theme-dark` qui sotto.
35
+ --wuic-shadow-1: 0 1px 3px rgba(15, 23, 42, 0.08);
36
+ --wuic-shadow-2: 0 10px 24px rgba(15, 23, 42, 0.08);
37
+
38
+ // Spaziature (pilotate anche dal tema "dense")
39
+ --wuic-space-1: 4px;
40
+ --wuic-space-2: 8px;
41
+ --wuic-space-3: 16px;
42
+
43
+ // Tipografia e sfondo pagina.
44
+ // NON derivano dai --p-*: PrimeUIX non ha token per font-family, per il
45
+ // font-size globale (esistono solo `formField.sm/lg.fontSize`) ne' per lo
46
+ // sfondo della pagina. Sono scritti dal Theme Builder via
47
+ // documentElement.style.setProperty e applicati in styles.scss.
48
+ //
49
+ // Il default dello stack NON e' neutro di proposito: senza font-family il
50
+ // browser cade sul serif di sistema (verificato: body in "Times New Roman"),
51
+ // che non e' mai stata una scelta di design del framework.
52
+ --wuic-font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
53
+ --wuic-font-scale: 16px;
54
+ --wuic-app-bg: var(--wuic-surface);
55
+ --wuic-app-bg-image: none;
56
+ --wuic-app-bg-overlay: transparent;
57
+ /* Resa dell'immagine di sfondo: `auto` + `repeat` per le texture,
58
+ `cover` per le foto a piena pagina. */
59
+ --wuic-app-bg-size: cover;
60
+ --wuic-app-bg-repeat: no-repeat;
61
+ --wuic-app-bg-position: center;
62
+ /* Durata della deriva del gradiente animato: lunga di proposito, deve
63
+ essere percepibile solo di sfuggita. */
64
+ --wuic-app-bg-anim-duration: 32s;
65
+ }
66
+
67
+ // Unico blocco dark globale: solo i token non derivabili dai --p-*.
68
+ :is(html, body).theme-dark {
69
+ --wuic-shadow-1: 0 1px 3px rgba(0, 0, 0, 0.35);
70
+ --wuic-shadow-2: 0 14px 30px rgba(0, 0, 0, 0.35);
71
+ }
72
+
73
+ // Densita' compatta: classe applicata su html/body dal theme selector (stesso
74
+ // meccanismo di `.theme-dark`) perche' definePreset() scrive solo --p-*.
75
+ // Solo spacing: i radius NON vanno ridefiniti qui — derivano gia' dai
76
+ // --p-border-radius-* che il preset Dense riduce, e un override creerebbe
77
+ // due fonti di verita' in conflitto.
78
+ :is(html, body).theme-dense {
79
+ --wuic-space-1: 2px;
80
+ --wuic-space-2: 5px;
81
+ --wuic-space-3: 10px;
82
+ }
@@ -1,3 +1,5 @@
1
+ @use 'wuic-tokens';
2
+
1
3
  $main_background: #fff;
2
4
 
3
5
  :root {
@@ -5,10 +7,30 @@ $main_background: #fff;
5
7
  --p-menubar-padding: 4px !important;
6
8
  }
7
9
 
10
+ /* Scala tipografica globale: PrimeNG dimensiona tutto in `rem`, quindi il
11
+ font-size di <html> e' l'unica leva che scala coerentemente testo, padding e
12
+ altezze dei componenti. Pilotato dal Theme Builder entro 12-18px. */
13
+ html {
14
+ font-size: var(--wuic-font-scale, 16px);
15
+ }
16
+
8
17
  html,
9
18
  body {
10
19
  margin: 0;
11
20
  height: 100%;
21
+ /* Sfondo pagina dai token: senza, html/body restano trasparenti e nei
22
+ webview/browser con canvas scuro la cornice attorno alla shell appare
23
+ nera. Con i token segue anche dark e high-contrast.
24
+ `--wuic-app-bg` permette al Theme Builder di sovrascrivere il colore
25
+ (o mettere un gradiente) senza toccare la superficie dei componenti. */
26
+ background-color: var(--wuic-app-bg, var(--wuic-surface, #ffffff));
27
+ background-image: var(--wuic-app-bg-image, none);
28
+ background-size: var(--wuic-app-bg-size, cover);
29
+ background-repeat: var(--wuic-app-bg-repeat, no-repeat);
30
+ background-position: var(--wuic-app-bg-position, center);
31
+ background-attachment: fixed;
32
+ color: var(--wuic-text, #1f2937);
33
+ font-family: var(--wuic-font-family);
12
34
  }
13
35
 
14
36
  body {
@@ -17,6 +39,88 @@ body {
17
39
  box-sizing: border-box;
18
40
  }
19
41
 
42
+ /* Deriva lenta del gradiente di sfondo (opt-in dal tema, classe messa da
43
+ `ThemeRuntimeService`).
44
+ *
45
+ * Si anima l'INCLINAZIONE del gradiente. Un `linear-gradient` non e'
46
+ * interpolabile di per se': la registrazione con `@property` dichiara
47
+ * `--wuic-app-bg-angle` come `<angle>`, ed e' quella dichiarazione a rendere
48
+ * la proprieta' animabile. Nei browser che non supportano `@property` la
49
+ * custom property resta al valore iniziale e il gradiente e' semplicemente
50
+ * fermo — degradazione voluta.
51
+ *
52
+ * L'oscillazione e' di +/- 28 gradi attorno all'inclinazione scelta
53
+ * dall'admin (`--wuic-app-bg-angle-base`): abbastanza per vedere i colori
54
+ * riorganizzarsi, non tanto da ribaltare il gradiente e stravolgere il tema. */
55
+ @property --wuic-app-bg-spin {
56
+ syntax: '<angle>';
57
+ inherits: true;
58
+ initial-value: 0deg;
59
+ }
60
+
61
+ /* L'animazione va su `html`, NON su `body`: il gradiente vive dentro
62
+ `--wuic-app-bg-image`, che `ThemeRuntimeService` dichiara su `html`, e il
63
+ `var(--wuic-app-bg-spin)` annidato si risolve sull'elemento che DICHIARA la
64
+ variabile. Animando su `body` lo spin cambiava (verificato) ma il gradiente
65
+ continuava a leggere il valore iniziale di `html`, restando fermo. */
66
+ html.wuic-bg-animated {
67
+ animation: wuic-app-bg-drift var(--wuic-app-bg-anim-duration, 32s) ease-in-out infinite alternate;
68
+ }
69
+
70
+ /* I due estremi sono LETTERALI, non `calc(var(...) ± delta)`: un keyframe il
71
+ cui valore contiene `var()` non viene interpolato (verificato: l'angolo
72
+ restava fermo al valore di partenza). L'inclinazione scelta dall'admin
73
+ entra quindi nel gradiente, non qui: il gradiente animato e' costruito come
74
+ `linear-gradient(calc(<base> + var(--wuic-app-bg-spin)), ...)` e questi
75
+ keyframe fanno oscillare il solo scostamento.
76
+ Ampiezza +/- 60 gradi: il movimento si vede, ma il gradiente non raggiunge
77
+ mai l'orientamento opposto (servirebbero 180 gradi di scostamento), quindi
78
+ i colori non si scambiano mai i lati e l'inclinazione impostata resta
79
+ riconoscibile per tutto il ciclo. */
80
+ @keyframes wuic-app-bg-drift {
81
+ from { --wuic-app-bg-spin: -60deg; }
82
+ to { --wuic-app-bg-spin: 60deg; }
83
+ }
84
+
85
+ /* Chi ha chiesto meno movimento non lo subisce: l'animazione e' continua e
86
+ copre l'intera finestra, cioe' il caso peggiore per chi soffre di motion
87
+ sickness. Il gradiente resta, fermo. */
88
+ @media (prefers-reduced-motion: reduce) {
89
+ html.wuic-bg-animated {
90
+ animation: none;
91
+ --wuic-app-bg-spin: 0deg;
92
+ }
93
+ }
94
+
95
+ /* Velo opzionale sopra l'immagine di sfondo: senza, un'immagine con molto
96
+ contrasto rende illeggibile il testo della shell. `pointer-events: none` e
97
+ z-index negativo perche' non deve mai intercettare i click. */
98
+ body::before {
99
+ content: '';
100
+ position: fixed;
101
+ inset: 0;
102
+ background: var(--wuic-app-bg-overlay, transparent);
103
+ pointer-events: none;
104
+ z-index: -1;
105
+ }
106
+
107
+ /* I controlli form nativi NON ereditano il font dal documento (default dello
108
+ user-agent: usano il font di sistema), per questo i bottoni restavano in
109
+ Arial mentre il resto della pagina cambiava. Regola classica di normalize.
110
+ Mirata ai soli elementi form: NON tocca gli <i>/<span> delle icon-font, che
111
+ restano su primeicons/Material Icons e continuano a mostrare i glifi.
112
+ (Una guardia con `font-family: revert` sulle icone sarebbe controproducente:
113
+ `revert` scarta anche la regola author di primeicons e le icone tornerebbero
114
+ a ereditare il font della pagina, cioe' esattamente il bug che dovrebbe
115
+ prevenire — verificato.) */
116
+ button,
117
+ input,
118
+ textarea,
119
+ select,
120
+ optgroup {
121
+ font-family: inherit;
122
+ }
123
+
20
124
  $widget_edit_popup_height: 90%;
21
125
  $widget_edit_popup_width: 75%;
22
126
 
@@ -70,6 +174,62 @@ a.p-menuitem-link {
70
174
  word-break: break-word;
71
175
  }
72
176
 
177
+ /* ── Posizioni header (tab "Header & Menu" di app-settings-editor) ──────────
178
+ Classi `wuic-header-pos-*` applicate su html/body da <wuic-app-header>
179
+ (stesso meccanismo di `theme-dark`). Targettano le convenzioni della shell
180
+ host (`.app-shell`, `.app-shell-header`, `.app-shell-content`): le install
181
+ che usano <wuic-app-header> ereditano i layout senza toccare la shell. */
182
+ :is(html, body).wuic-header-pos-bottom .app-shell {
183
+ flex-direction: column-reverse;
184
+ }
185
+
186
+ :is(html, body).wuic-header-pos-left .app-shell {
187
+ flex-direction: row;
188
+ }
189
+
190
+ :is(html, body).wuic-header-pos-right .app-shell {
191
+ flex-direction: row-reverse;
192
+ }
193
+
194
+ :is(html, body).wuic-header-pos-left .app-shell-header,
195
+ :is(html, body).wuic-header-pos-right .app-shell-header {
196
+ flex: 0 0 280px;
197
+ width: 280px;
198
+ min-width: 280px;
199
+ height: 100%;
200
+ overflow-y: auto;
201
+ overflow-x: visible;
202
+ }
203
+
204
+ /* La shell orizzontale usa `height: 0` sul content (trucco flex): in verticale
205
+ il content e' un fratello di riga e deve riempire l'altezza reale. */
206
+ :is(html, body).wuic-header-pos-left .app-shell-content,
207
+ :is(html, body).wuic-header-pos-right .app-shell-content {
208
+ height: 100%;
209
+ }
210
+
211
+ /* ── Submenu a colonna singola ("Multi-column submenus" OFF) ────────────────
212
+ Classe `wuic-submenu-singlecol` applicata da <wuic-app-header>. I submenu
213
+ grandi non stanno nel viewport: il primo livello diventa scrollabile e i
214
+ NESTED passano a inline/accordion — un flyout absolute dentro uno scroll
215
+ container verrebbe clippato (feedback 2026-08-07: "overflow auto rompe la
216
+ gestione del menu"). Scoped su .wuic-app-header-menu per non toccare gli
217
+ altri p-menubar della pagina (es. caption bar della list-grid). */
218
+ :is(html, body).wuic-submenu-singlecol .wuic-app-header-menu .p-menubar-root-list > .p-menubar-item > .p-menubar-submenu {
219
+ max-height: calc(100vh - 140px);
220
+ overflow-y: auto;
221
+ overflow-x: hidden;
222
+ }
223
+
224
+ :is(html, body).wuic-submenu-singlecol .wuic-app-header-menu .p-menubar-submenu .p-menubar-submenu {
225
+ position: static !important;
226
+ width: 100% !important;
227
+ min-width: 0;
228
+ box-shadow: none;
229
+ border: 0;
230
+ padding-left: 16px;
231
+ }
232
+
73
233
  .edit-form-button-bar {
74
234
  list-style-type: none;
75
235
  padding: 0;