@arsedizioni/ars-utils 22.5.37 → 22.5.39

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 (45) hide show
  1. package/README.md +11 -5
  2. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +15 -15
  3. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +44 -44
  4. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
  5. package/fesm2022/arsedizioni-ars-utils-core.date.mjs +11 -82
  6. package/fesm2022/arsedizioni-ars-utils-core.date.mjs.map +1 -1
  7. package/fesm2022/arsedizioni-ars-utils-core.markdown.mjs +3 -3
  8. package/fesm2022/arsedizioni-ars-utils-core.mjs +48 -48
  9. package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
  10. package/fesm2022/arsedizioni-ars-utils-core.validators.mjs +42 -42
  11. package/fesm2022/arsedizioni-ars-utils-core.validators.mjs.map +1 -1
  12. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +15 -15
  13. package/fesm2022/arsedizioni-ars-utils-support.common.mjs +9 -9
  14. package/fesm2022/arsedizioni-ars-utils-ui.controls.date.mjs +118 -0
  15. package/fesm2022/arsedizioni-ars-utils-ui.controls.date.mjs.map +1 -0
  16. package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs +17 -378
  17. package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs.map +1 -1
  18. package/fesm2022/arsedizioni-ars-utils-ui.controls.tree.mjs +368 -0
  19. package/fesm2022/arsedizioni-ars-utils-ui.controls.tree.mjs.map +1 -0
  20. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs +18 -18
  21. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs.map +1 -1
  22. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs +12 -12
  23. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs.map +1 -1
  24. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs +10 -10
  25. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs.map +1 -1
  26. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs +12 -12
  27. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs.map +1 -1
  28. package/fesm2022/arsedizioni-ars-utils-ui.files.mjs +12 -12
  29. package/fesm2022/arsedizioni-ars-utils-ui.files.mjs.map +1 -1
  30. package/fesm2022/arsedizioni-ars-utils-ui.filters.mjs +3 -3
  31. package/fesm2022/arsedizioni-ars-utils-ui.help.mjs +9 -9
  32. package/fesm2022/arsedizioni-ars-utils-ui.mjs +61 -61
  33. package/fesm2022/arsedizioni-ars-utils-ui.navigation.mjs +3 -3
  34. package/fesm2022/arsedizioni-ars-utils-ui.notifications.mjs +6 -6
  35. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +6 -6
  36. package/fesm2022/arsedizioni-ars-utils-ui.paginator.mjs +3 -3
  37. package/fesm2022/arsedizioni-ars-utils-ui.shell.mjs +9 -9
  38. package/fesm2022/arsedizioni-ars-utils-ui.tinymce.mjs +9 -9
  39. package/package.json +9 -1
  40. package/types/arsedizioni-ars-utils-clipper.ui.d.ts +3 -2
  41. package/types/arsedizioni-ars-utils-core.date.d.ts +4 -37
  42. package/types/arsedizioni-ars-utils-ui.controls.d.ts +3 -147
  43. package/types/arsedizioni-ars-utils-ui.controls.date.d.ts +49 -0
  44. package/types/arsedizioni-ars-utils-ui.controls.tree.d.ts +136 -0
  45. package/types/arsedizioni-ars-utils-ui.navigation.d.ts +1 -1
@@ -116,10 +116,10 @@ class ShellBusyComponent {
116
116
  this.progress.set(progress);
117
117
  this.progressMode.set(progress > 0 ? 'determinate' : progressMode);
118
118
  }
119
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ShellBusyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
120
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.3", type: ShellBusyComponent, isStandalone: true, selector: "ars-shell-busy", host: { properties: { "class.ars-hidden": "!visible()", "class.ars-dark": "dark()" } }, ngImport: i0, template: "<div class=\"scrim\"></div>\n\n@if (type() === 'hourglass' || type() === 'wait') {\n<div class=\"bare\">\n <svg class=\"hourglass\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M6 2h12v6l-4 4 4 4v6H6v-6l4-4-4-4zm2 2v3.2l4 4 4-4V4zm0 16h8v-3.2l-4-4-4 4z\" />\n </svg>\n @if (type() === 'hourglass' && message()) {\n <div class=\"message\" [innerHTML]=\"message() | safeHtml\"></div>\n }\n</div>\n} @else {\n<div class=\"panel\" role=\"status\" aria-live=\"polite\">\n @if (message()) {\n <div class=\"message\" [innerHTML]=\"message() | safeHtml\"></div>\n }\n\n @if (type() === 'bar') {\n <div class=\"bar\" [class.indeterminate]=\"progressMode() === 'indeterminate'\">\n <div class=\"bar-fill\" [style.width.%]=\"progressMode() === 'determinate' ? progress() : null\"></div>\n </div>\n } @else if (type() === 'spinner') {\n <svg class=\"spinner\" [class.indeterminate]=\"progressMode() === 'indeterminate'\" viewBox=\"0 0 70 70\"\n aria-hidden=\"true\">\n <circle class=\"track\" cx=\"35\" cy=\"35\" r=\"31.5\"></circle>\n <circle class=\"arc\" cx=\"35\" cy=\"35\" r=\"31.5\" [style.stroke-dasharray]=\"circumference\"\n [style.stroke-dashoffset]=\"progressMode() === 'determinate' ? dashOffset() : null\"></circle>\n </svg>\n }\n\n @if (progress() > 0) {\n <div class=\"percent\"><b>{{ progress() }}%</b></div>\n }\n</div>\n}\n", styles: [":host{--_surface: var(--ars-shell-dialog-background-color, var(--mat-sys-surface-container-high, #e6eae8));--_on-surface: var(--ars-color-text, var(--mat-sys-on-surface, #191c1b));--_scrim: var(--ars-shell-busy-scrim-color, rgba(0, 0, 0, .28));--_primary: var(--ars-color-primary, var(--mat-sys-primary, #006a60));--_track: var(--ars-shell-busy-track-color, var(--mat-sys-surface-container-highest, #d5dbd8));--_bare: var(--ars-shell-busy-bare-color, #ffffff);color-scheme:light;margin:0;border:0;padding:0;background:none;color:inherit;overflow:visible;width:100%;height:100%;position:fixed;inset:0;z-index:var(--ars-shell-busy-z-index, 1090);display:flex;align-items:center;justify-content:center;font-family:var(--mat-sys-body-medium-font, Roboto, sans-serif);color:var(--_on-surface)}:host(.ars-dark){--_surface: var(--ars-shell-dialog-background-color, var(--mat-sys-surface-container-high, #282a29));--_on-surface: var(--ars-color-text, var(--mat-sys-on-surface, #e0e2e5));--_scrim: var(--ars-shell-busy-scrim-color, rgba(0, 0, 0, .45));--_primary: var(--ars-color-primary, var(--mat-sys-primary, #67d9c9));--_track: var(--ars-shell-busy-track-color, var(--mat-sys-surface-container-highest, #3a3d3c));color-scheme:dark}:host::backdrop{display:none}:host(.ars-hidden){display:none}.scrim{position:absolute;inset:0;background:var(--_scrim);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:ars-busy-fade .2s cubic-bezier(0,0,.2,1)}@keyframes ars-busy-fade{0%{opacity:0}to{opacity:1}}.panel{position:relative;min-width:250px;max-width:calc(100% - 24px);margin:12px;padding:24px;border-radius:var(--ars-shell-dialog-radius, 24px);background:var(--_surface);box-shadow:var(--ars-shell-dialog-elevation, 0 4px 8px 0 rgba(0, 0, 0, .2), 0 6px 20px 0 rgba(0, 0, 0, .19));text-align:center}.bare{position:relative;display:flex;flex-direction:column;align-items:center;color:var(--_bare)}.message{font-size:larger;font-weight:600;padding-bottom:15px;text-align:center}.bare .message{padding-top:15px;padding-bottom:0}.percent{padding-top:8px;font-size:smaller}.bar{position:relative;max-width:350px;height:4px;margin:15px auto 0;overflow:hidden;border-radius:2px;background:var(--_track)}.bar-fill{position:absolute;inset:0 auto 0 0;width:0;border-radius:inherit;background:var(--_primary);transition:width .12s linear}.bar.indeterminate .bar-fill{width:40%;transition:none;animation:ars-busy-bar 1.6s cubic-bezier(.65,.02,.35,1) infinite}@keyframes ars-busy-bar{0%{left:-40%}to{left:100%}}.spinner{display:block;width:70px;height:70px;margin:15px auto 0;transform:rotate(-90deg)}.spinner circle{fill:none;stroke-width:7;stroke-linecap:round}.spinner .track{stroke:var(--_track)}.spinner .arc{stroke:var(--_primary);transition:stroke-dashoffset .12s linear}.spinner.indeterminate{animation:ars-busy-rotate 1.4s linear infinite}.spinner.indeterminate .arc{transition:none;stroke-dashoffset:0;animation:ars-busy-dash 1.4s ease-in-out infinite}@keyframes ars-busy-rotate{0%{transform:rotate(-90deg)}to{transform:rotate(270deg)}}@keyframes ars-busy-dash{0%{stroke-dasharray:15 183}50%{stroke-dasharray:145 53}to{stroke-dasharray:15 183}}.hourglass{width:80px;height:80px;fill:currentColor;animation:ars-busy-hourglass 3s linear infinite}@keyframes ars-busy-hourglass{0%{transform:rotate(360deg)}to{transform:rotate(0)}}@media(prefers-reduced-motion:reduce){.scrim{animation:none}.bar.indeterminate .bar-fill,.spinner.indeterminate,.spinner.indeterminate .arc,.hourglass{animation-duration:4s}}\n"], dependencies: [{ kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
119
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ShellBusyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
120
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: ShellBusyComponent, isStandalone: true, selector: "ars-shell-busy", host: { properties: { "class.ars-hidden": "!visible()", "class.ars-dark": "dark()" } }, ngImport: i0, template: "<div class=\"scrim\"></div>\n\n@if (type() === 'hourglass' || type() === 'wait') {\n<div class=\"bare\">\n <svg class=\"hourglass\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M6 2h12v6l-4 4 4 4v6H6v-6l4-4-4-4zm2 2v3.2l4 4 4-4V4zm0 16h8v-3.2l-4-4-4 4z\" />\n </svg>\n @if (type() === 'hourglass' && message()) {\n <div class=\"message\" [innerHTML]=\"message() | safeHtml\"></div>\n }\n</div>\n} @else {\n<div class=\"panel\" role=\"status\" aria-live=\"polite\">\n @if (message()) {\n <div class=\"message\" [innerHTML]=\"message() | safeHtml\"></div>\n }\n\n @if (type() === 'bar') {\n <div class=\"bar\" [class.indeterminate]=\"progressMode() === 'indeterminate'\">\n <div class=\"bar-fill\" [style.width.%]=\"progressMode() === 'determinate' ? progress() : null\"></div>\n </div>\n } @else if (type() === 'spinner') {\n <svg class=\"spinner\" [class.indeterminate]=\"progressMode() === 'indeterminate'\" viewBox=\"0 0 70 70\"\n aria-hidden=\"true\">\n <circle class=\"track\" cx=\"35\" cy=\"35\" r=\"31.5\"></circle>\n <circle class=\"arc\" cx=\"35\" cy=\"35\" r=\"31.5\" [style.stroke-dasharray]=\"circumference\"\n [style.stroke-dashoffset]=\"progressMode() === 'determinate' ? dashOffset() : null\"></circle>\n </svg>\n }\n\n @if (progress() > 0) {\n <div class=\"percent\"><b>{{ progress() }}%</b></div>\n }\n</div>\n}\n", styles: [":host{--_surface: var(--ars-shell-dialog-background-color, var(--mat-sys-surface-container-high, #e6eae8));--_on-surface: var(--ars-color-text, var(--mat-sys-on-surface, #191c1b));--_scrim: var(--ars-shell-busy-scrim-color, rgba(0, 0, 0, .28));--_primary: var(--ars-color-primary, var(--mat-sys-primary, #006a60));--_track: var(--ars-shell-busy-track-color, var(--mat-sys-surface-container-highest, #d5dbd8));--_bare: var(--ars-shell-busy-bare-color, #ffffff);color-scheme:light;margin:0;border:0;padding:0;background:none;color:inherit;overflow:visible;width:100%;height:100%;position:fixed;inset:0;z-index:var(--ars-shell-busy-z-index, 1090);display:flex;align-items:center;justify-content:center;font-family:var(--mat-sys-body-medium-font, Roboto, sans-serif);color:var(--_on-surface)}:host(.ars-dark){--_surface: var(--ars-shell-dialog-background-color, var(--mat-sys-surface-container-high, #282a29));--_on-surface: var(--ars-color-text, var(--mat-sys-on-surface, #e0e2e5));--_scrim: var(--ars-shell-busy-scrim-color, rgba(0, 0, 0, .45));--_primary: var(--ars-color-primary, var(--mat-sys-primary, #67d9c9));--_track: var(--ars-shell-busy-track-color, var(--mat-sys-surface-container-highest, #3a3d3c));color-scheme:dark}:host::backdrop{display:none}:host(.ars-hidden){display:none}.scrim{position:absolute;inset:0;background:var(--_scrim);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:ars-busy-fade .2s cubic-bezier(0,0,.2,1)}@keyframes ars-busy-fade{0%{opacity:0}to{opacity:1}}.panel{position:relative;min-width:250px;max-width:calc(100% - 24px);margin:12px;padding:24px;border-radius:var(--ars-shell-dialog-radius, 24px);background:var(--_surface);box-shadow:var(--ars-shell-dialog-elevation, 0 4px 8px 0 rgba(0, 0, 0, .2), 0 6px 20px 0 rgba(0, 0, 0, .19));text-align:center}.bare{position:relative;display:flex;flex-direction:column;align-items:center;color:var(--_bare)}.message{font-size:larger;font-weight:600;padding-bottom:15px;text-align:center}.bare .message{padding-top:15px;padding-bottom:0}.percent{padding-top:8px;font-size:smaller}.bar{position:relative;max-width:350px;height:4px;margin:15px auto 0;overflow:hidden;border-radius:2px;background:var(--_track)}.bar-fill{position:absolute;inset:0 auto 0 0;width:0;border-radius:inherit;background:var(--_primary);transition:width .12s linear}.bar.indeterminate .bar-fill{width:40%;transition:none;animation:ars-busy-bar 1.6s cubic-bezier(.65,.02,.35,1) infinite}@keyframes ars-busy-bar{0%{left:-40%}to{left:100%}}.spinner{display:block;width:70px;height:70px;margin:15px auto 0;transform:rotate(-90deg)}.spinner circle{fill:none;stroke-width:7;stroke-linecap:round}.spinner .track{stroke:var(--_track)}.spinner .arc{stroke:var(--_primary);transition:stroke-dashoffset .12s linear}.spinner.indeterminate{animation:ars-busy-rotate 1.4s linear infinite}.spinner.indeterminate .arc{transition:none;stroke-dashoffset:0;animation:ars-busy-dash 1.4s ease-in-out infinite}@keyframes ars-busy-rotate{0%{transform:rotate(-90deg)}to{transform:rotate(270deg)}}@keyframes ars-busy-dash{0%{stroke-dasharray:15 183}50%{stroke-dasharray:145 53}to{stroke-dasharray:15 183}}.hourglass{width:80px;height:80px;fill:currentColor;animation:ars-busy-hourglass 3s linear infinite}@keyframes ars-busy-hourglass{0%{transform:rotate(360deg)}to{transform:rotate(0)}}@media(prefers-reduced-motion:reduce){.scrim{animation:none}.bar.indeterminate .bar-fill,.spinner.indeterminate,.spinner.indeterminate .arc,.hourglass{animation-duration:4s}}\n"], dependencies: [{ kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
121
121
  }
122
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ShellBusyComponent, decorators: [{
122
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ShellBusyComponent, decorators: [{
123
123
  type: Component,
124
124
  args: [{ selector: 'ars-shell-busy', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [SafeHtmlPipe], host: { '[class.ars-hidden]': '!visible()', '[class.ars-dark]': 'dark()' }, template: "<div class=\"scrim\"></div>\n\n@if (type() === 'hourglass' || type() === 'wait') {\n<div class=\"bare\">\n <svg class=\"hourglass\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M6 2h12v6l-4 4 4 4v6H6v-6l4-4-4-4zm2 2v3.2l4 4 4-4V4zm0 16h8v-3.2l-4-4-4 4z\" />\n </svg>\n @if (type() === 'hourglass' && message()) {\n <div class=\"message\" [innerHTML]=\"message() | safeHtml\"></div>\n }\n</div>\n} @else {\n<div class=\"panel\" role=\"status\" aria-live=\"polite\">\n @if (message()) {\n <div class=\"message\" [innerHTML]=\"message() | safeHtml\"></div>\n }\n\n @if (type() === 'bar') {\n <div class=\"bar\" [class.indeterminate]=\"progressMode() === 'indeterminate'\">\n <div class=\"bar-fill\" [style.width.%]=\"progressMode() === 'determinate' ? progress() : null\"></div>\n </div>\n } @else if (type() === 'spinner') {\n <svg class=\"spinner\" [class.indeterminate]=\"progressMode() === 'indeterminate'\" viewBox=\"0 0 70 70\"\n aria-hidden=\"true\">\n <circle class=\"track\" cx=\"35\" cy=\"35\" r=\"31.5\"></circle>\n <circle class=\"arc\" cx=\"35\" cy=\"35\" r=\"31.5\" [style.stroke-dasharray]=\"circumference\"\n [style.stroke-dashoffset]=\"progressMode() === 'determinate' ? dashOffset() : null\"></circle>\n </svg>\n }\n\n @if (progress() > 0) {\n <div class=\"percent\"><b>{{ progress() }}%</b></div>\n }\n</div>\n}\n", styles: [":host{--_surface: var(--ars-shell-dialog-background-color, var(--mat-sys-surface-container-high, #e6eae8));--_on-surface: var(--ars-color-text, var(--mat-sys-on-surface, #191c1b));--_scrim: var(--ars-shell-busy-scrim-color, rgba(0, 0, 0, .28));--_primary: var(--ars-color-primary, var(--mat-sys-primary, #006a60));--_track: var(--ars-shell-busy-track-color, var(--mat-sys-surface-container-highest, #d5dbd8));--_bare: var(--ars-shell-busy-bare-color, #ffffff);color-scheme:light;margin:0;border:0;padding:0;background:none;color:inherit;overflow:visible;width:100%;height:100%;position:fixed;inset:0;z-index:var(--ars-shell-busy-z-index, 1090);display:flex;align-items:center;justify-content:center;font-family:var(--mat-sys-body-medium-font, Roboto, sans-serif);color:var(--_on-surface)}:host(.ars-dark){--_surface: var(--ars-shell-dialog-background-color, var(--mat-sys-surface-container-high, #282a29));--_on-surface: var(--ars-color-text, var(--mat-sys-on-surface, #e0e2e5));--_scrim: var(--ars-shell-busy-scrim-color, rgba(0, 0, 0, .45));--_primary: var(--ars-color-primary, var(--mat-sys-primary, #67d9c9));--_track: var(--ars-shell-busy-track-color, var(--mat-sys-surface-container-highest, #3a3d3c));color-scheme:dark}:host::backdrop{display:none}:host(.ars-hidden){display:none}.scrim{position:absolute;inset:0;background:var(--_scrim);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:ars-busy-fade .2s cubic-bezier(0,0,.2,1)}@keyframes ars-busy-fade{0%{opacity:0}to{opacity:1}}.panel{position:relative;min-width:250px;max-width:calc(100% - 24px);margin:12px;padding:24px;border-radius:var(--ars-shell-dialog-radius, 24px);background:var(--_surface);box-shadow:var(--ars-shell-dialog-elevation, 0 4px 8px 0 rgba(0, 0, 0, .2), 0 6px 20px 0 rgba(0, 0, 0, .19));text-align:center}.bare{position:relative;display:flex;flex-direction:column;align-items:center;color:var(--_bare)}.message{font-size:larger;font-weight:600;padding-bottom:15px;text-align:center}.bare .message{padding-top:15px;padding-bottom:0}.percent{padding-top:8px;font-size:smaller}.bar{position:relative;max-width:350px;height:4px;margin:15px auto 0;overflow:hidden;border-radius:2px;background:var(--_track)}.bar-fill{position:absolute;inset:0 auto 0 0;width:0;border-radius:inherit;background:var(--_primary);transition:width .12s linear}.bar.indeterminate .bar-fill{width:40%;transition:none;animation:ars-busy-bar 1.6s cubic-bezier(.65,.02,.35,1) infinite}@keyframes ars-busy-bar{0%{left:-40%}to{left:100%}}.spinner{display:block;width:70px;height:70px;margin:15px auto 0;transform:rotate(-90deg)}.spinner circle{fill:none;stroke-width:7;stroke-linecap:round}.spinner .track{stroke:var(--_track)}.spinner .arc{stroke:var(--_primary);transition:stroke-dashoffset .12s linear}.spinner.indeterminate{animation:ars-busy-rotate 1.4s linear infinite}.spinner.indeterminate .arc{transition:none;stroke-dashoffset:0;animation:ars-busy-dash 1.4s ease-in-out infinite}@keyframes ars-busy-rotate{0%{transform:rotate(-90deg)}to{transform:rotate(270deg)}}@keyframes ars-busy-dash{0%{stroke-dasharray:15 183}50%{stroke-dasharray:145 53}to{stroke-dasharray:15 183}}.hourglass{width:80px;height:80px;fill:currentColor;animation:ars-busy-hourglass 3s linear infinite}@keyframes ars-busy-hourglass{0%{transform:rotate(360deg)}to{transform:rotate(0)}}@media(prefers-reduced-motion:reduce){.scrim{animation:none}.bar.indeterminate .bar-fill,.spinner.indeterminate,.spinner.indeterminate .arc,.hourglass{animation-duration:4s}}\n"] }]
125
125
  }], ctorParameters: () => [] });
@@ -305,10 +305,10 @@ class ShellMessageComponent {
305
305
  // the user for, and the text is on screen anyway.
306
306
  }
307
307
  }
308
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ShellMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
309
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.3", type: ShellMessageComponent, isStandalone: true, selector: "ars-shell-message", outputs: { closed: "closed" }, host: { listeners: { "document:keydown": "onKeydown($event)" }, properties: { "class.ars-dark": "dark()" } }, viewQueries: [{ propertyName: "panel", first: true, predicate: ["panel"], descendants: true, isSignal: true }, { propertyName: "okButton", first: true, predicate: ["ok"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"scrim\" (click)=\"close()\"></div>\n\n<div #panel class=\"panel\" role=\"alertdialog\" aria-modal=\"true\" [attr.aria-labelledby]=\"titleId\"\n [style.max-width.px]=\"data().width\">\n\n <h2 class=\"title\" [id]=\"titleId\" [innerHTML]=\"data().title | safeHtml\"></h2>\n\n <div class=\"content\">\n @if (data().message) {\n <div class=\"message\" [innerHTML]=\"data().message | safeHtml\"></div>\n }\n @if (data().details) {\n <div class=\"details-box\" [class.open]=\"detailsOpen()\">\n <button type=\"button\" class=\"details-header\" (click)=\"toggleDetails()\"\n [attr.aria-expanded]=\"detailsOpen()\" [attr.aria-controls]=\"detailsId\">\n <span class=\"details-label\">Dettaglio</span>\n <svg class=\"chevron\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6z\" />\n </svg>\n </button>\n <div class=\"details-body\">\n <div class=\"details\" [id]=\"detailsId\" [attr.aria-hidden]=\"!detailsOpen()\">\n <div class=\"details-text\" [innerHTML]=\"data().details | safeHtml\"></div>\n </div>\n </div>\n </div>\n }\n </div>\n\n <div class=\"actions\">\n <button type=\"button\" class=\"icon-button\" (click)=\"copy()\"\n [title]=\"copied() ? 'Copiato negli appunti' : 'Copia negli appunti'\" aria-label=\"Copia negli appunti\">\n @if (copied()) {\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M9 16.2 4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4z\" /></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path\n d=\"M16 1H4a2 2 0 0 0-2 2v14h2V3h12zm3 4H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m0 16H8V7h11z\" /></svg>\n }\n </button>\n <button #ok type=\"button\" class=\"flat-button\" (click)=\"close()\">{{ data().okCaption }}</button>\n </div>\n</div>\n", styles: [":host{--_surface: var(--ars-shell-dialog-background-color, var(--mat-sys-surface-container-high, #e6eae8));--_on-surface: var(--ars-color-text, var(--mat-sys-on-surface, #191c1b));--_secondary: var(--ars-color-secondary, var(--mat-sys-on-surface-variant, #4a635f));--_divider: var(--ars-color-divider, #757d87);--_scrim: var(--ars-shell-dialog-scrim-color, rgba(0, 0, 0, .24));--_primary: var(--ars-button-background-color, var(--mat-sys-primary, #006a60));--_on-primary: var(--ars-color-on-primary, var(--mat-sys-on-primary, #ffffff));--_hover: var(--ars-item-hover-background-color, rgba(0, 0, 0, .08));--_sunken: var(--ars-shell-dialog-sunken-background-color, rgba(0, 0, 0, .05));color-scheme:light;margin:0;border:0;padding:0;background:none;color:inherit;overflow:visible;width:100%;height:100%;position:fixed;inset:0;z-index:var(--ars-shell-dialog-z-index, 1100);display:flex;align-items:center;justify-content:center;box-sizing:border-box}:host(.ars-dark){--_surface: var(--ars-shell-dialog-background-color, var(--mat-sys-surface-container-high, #282a29));--_on-surface: var(--ars-color-text, var(--mat-sys-on-surface, #e0e2e5));--_secondary: var(--ars-color-secondary, var(--mat-sys-on-surface-variant, #b1ccc6));--_scrim: var(--ars-shell-dialog-scrim-color, rgba(0, 0, 0, .45));--_primary: var(---ars-button-background-color, var(--mat-sys-primary, #67d9c9));--_on-primary: var(--ars-color-on-primary, var(--mat-sys-on-primary, #00382f));--_hover: var(--ars-item-hover-background-color, rgba(255, 255, 255, .08));--_sunken: var(--ars-shell-dialog-sunken-background-color, rgba(0, 0, 0, .22));color-scheme:dark}:host::backdrop{display:none}.scrim{position:absolute;inset:0;background:var(--_scrim);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:ars-shell-fade .2s cubic-bezier(0,0,.2,1)}.panel{position:relative;display:flex;flex-direction:column;width:100%;min-width:0;margin:12px;max-height:calc(100% - 24px);box-sizing:border-box;border-radius:var(--ars-shell-dialog-radius, 28px);background:var(--_surface);color:var(--_on-surface);box-shadow:var(--ars-shell-dialog-elevation, 0 4px 8px 3px rgba(0, 0, 0, .15), 0 1px 3px 0 rgba(0, 0, 0, .3));font-family:var(--mat-sys-body-medium-font, Roboto, sans-serif);text-align:left;animation:ars-shell-enter .15s cubic-bezier(0,0,.2,1)}.title{margin:0;padding:24px 24px 16px;font:var(--mat-sys-headline-small, 400 24px/32px Roboto, sans-serif);color:inherit}.content{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;padding:0;font:var(--mat-sys-body-medium, 400 14px/20px Roboto, sans-serif)}.message{flex:0 1 auto;min-height:0;padding:0 24px 24px;overflow-y:auto;overscroll-behavior:contain}.details-box{flex:0 1000 auto;min-height:0;display:flex;flex-direction:column;margin:0 16px 4px;border-radius:12px;background:transparent;transition:background-color .2s cubic-bezier(0,0,.2,1)}.details-box.open{background:var(--_sunken)}.details-header{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;height:44px;padding:0 8px;border-radius:12px;background:transparent;color:var(--_secondary);text-align:left}.details-header:hover{background:var(--_hover)}.details-label{font-size:.75em;letter-spacing:.06em;text-transform:uppercase}.chevron{width:20px;height:20px;fill:currentColor;transition:transform .2s cubic-bezier(0,0,.2,1)}.details-box.open .chevron{transform:rotate(180deg)}.details-body{display:grid;grid-template-rows:0fr;min-height:0;max-height:320px;transition:grid-template-rows .2s cubic-bezier(0,0,.2,1)}.details-box.open .details-body{grid-template-rows:1fr}.details{min-height:0;overflow:hidden}.details-box.open .details{overflow-y:auto;overscroll-behavior:contain}.details-text{padding:0 8px 12px;font-size:.85em}.actions{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:16px 24px 24px}button{font-family:inherit;cursor:pointer;border:none}button:focus-visible{outline:none!important;box-shadow:none!important}.icon-button{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border-radius:50%;background:transparent;color:inherit}.icon-button svg{width:24px;height:24px;fill:currentColor}.icon-button:hover,.icon-button:focus-visible{background:var(--_hover)!important}.flat-button{height:40px;padding:0 24px;border-radius:20px;background:var(--_primary);color:var(--_on-primary);font:var(--mat-sys-label-large, 500 14px/20px Roboto, sans-serif)}.flat-button:hover,.flat-button:focus-visible{filter:brightness(1.08)!important}@keyframes ars-shell-fade{0%{opacity:0}to{opacity:1}}@keyframes ars-shell-enter{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.scrim,.panel{animation:none}.details-box,.details-body,.chevron{transition:none}}\n"], dependencies: [{ kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
308
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ShellMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
309
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: ShellMessageComponent, isStandalone: true, selector: "ars-shell-message", outputs: { closed: "closed" }, host: { listeners: { "document:keydown": "onKeydown($event)" }, properties: { "class.ars-dark": "dark()" } }, viewQueries: [{ propertyName: "panel", first: true, predicate: ["panel"], descendants: true, isSignal: true }, { propertyName: "okButton", first: true, predicate: ["ok"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"scrim\" (click)=\"close()\"></div>\n\n<div #panel class=\"panel\" role=\"alertdialog\" aria-modal=\"true\" [attr.aria-labelledby]=\"titleId\"\n [style.max-width.px]=\"data().width\">\n\n <h2 class=\"title\" [id]=\"titleId\" [innerHTML]=\"data().title | safeHtml\"></h2>\n\n <div class=\"content\">\n @if (data().message) {\n <div class=\"message\" [innerHTML]=\"data().message | safeHtml\"></div>\n }\n @if (data().details) {\n <div class=\"details-box\" [class.open]=\"detailsOpen()\">\n <button type=\"button\" class=\"details-header\" (click)=\"toggleDetails()\"\n [attr.aria-expanded]=\"detailsOpen()\" [attr.aria-controls]=\"detailsId\">\n <span class=\"details-label\">Dettaglio</span>\n <svg class=\"chevron\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6z\" />\n </svg>\n </button>\n <div class=\"details-body\">\n <div class=\"details\" [id]=\"detailsId\" [attr.aria-hidden]=\"!detailsOpen()\">\n <div class=\"details-text\" [innerHTML]=\"data().details | safeHtml\"></div>\n </div>\n </div>\n </div>\n }\n </div>\n\n <div class=\"actions\">\n <button type=\"button\" class=\"icon-button\" (click)=\"copy()\"\n [title]=\"copied() ? 'Copiato negli appunti' : 'Copia negli appunti'\" aria-label=\"Copia negli appunti\">\n @if (copied()) {\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M9 16.2 4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4z\" /></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path\n d=\"M16 1H4a2 2 0 0 0-2 2v14h2V3h12zm3 4H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m0 16H8V7h11z\" /></svg>\n }\n </button>\n <button #ok type=\"button\" class=\"flat-button\" (click)=\"close()\">{{ data().okCaption }}</button>\n </div>\n</div>\n", styles: [":host{--_surface: var(--ars-shell-dialog-background-color, var(--mat-sys-surface-container-high, #e6eae8));--_on-surface: var(--ars-color-text, var(--mat-sys-on-surface, #191c1b));--_secondary: var(--ars-color-secondary, var(--mat-sys-on-surface-variant, #4a635f));--_divider: var(--ars-color-divider, #757d87);--_scrim: var(--ars-shell-dialog-scrim-color, rgba(0, 0, 0, .24));--_primary: var(--ars-button-background-color, var(--mat-sys-primary, #006a60));--_on-primary: var(--ars-color-on-primary, var(--mat-sys-on-primary, #ffffff));--_hover: var(--ars-item-hover-background-color, rgba(0, 0, 0, .08));--_sunken: var(--ars-shell-dialog-sunken-background-color, rgba(0, 0, 0, .05));color-scheme:light;margin:0;border:0;padding:0;background:none;color:inherit;overflow:visible;width:100%;height:100%;position:fixed;inset:0;z-index:var(--ars-shell-dialog-z-index, 1100);display:flex;align-items:center;justify-content:center;box-sizing:border-box}:host(.ars-dark){--_surface: var(--ars-shell-dialog-background-color, var(--mat-sys-surface-container-high, #282a29));--_on-surface: var(--ars-color-text, var(--mat-sys-on-surface, #e0e2e5));--_secondary: var(--ars-color-secondary, var(--mat-sys-on-surface-variant, #b1ccc6));--_scrim: var(--ars-shell-dialog-scrim-color, rgba(0, 0, 0, .45));--_primary: var(---ars-button-background-color, var(--mat-sys-primary, #67d9c9));--_on-primary: var(--ars-color-on-primary, var(--mat-sys-on-primary, #00382f));--_hover: var(--ars-item-hover-background-color, rgba(255, 255, 255, .08));--_sunken: var(--ars-shell-dialog-sunken-background-color, rgba(0, 0, 0, .22));color-scheme:dark}:host::backdrop{display:none}.scrim{position:absolute;inset:0;background:var(--_scrim);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:ars-shell-fade .2s cubic-bezier(0,0,.2,1)}.panel{position:relative;display:flex;flex-direction:column;width:100%;min-width:0;margin:12px;max-height:calc(100% - 24px);box-sizing:border-box;border-radius:var(--ars-shell-dialog-radius, 28px);background:var(--_surface);color:var(--_on-surface);box-shadow:var(--ars-shell-dialog-elevation, 0 4px 8px 3px rgba(0, 0, 0, .15), 0 1px 3px 0 rgba(0, 0, 0, .3));font-family:var(--mat-sys-body-medium-font, Roboto, sans-serif);text-align:left;animation:ars-shell-enter .15s cubic-bezier(0,0,.2,1)}.title{margin:0;padding:24px 24px 16px;font:var(--mat-sys-headline-small, 400 24px/32px Roboto, sans-serif);color:inherit}.content{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;padding:0;font:var(--mat-sys-body-medium, 400 14px/20px Roboto, sans-serif)}.message{flex:0 1 auto;min-height:0;padding:0 24px 24px;overflow-y:auto;overscroll-behavior:contain}.details-box{flex:0 1000 auto;min-height:0;display:flex;flex-direction:column;margin:0 16px 4px;border-radius:12px;background:transparent;transition:background-color .2s cubic-bezier(0,0,.2,1)}.details-box.open{background:var(--_sunken)}.details-header{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;height:44px;padding:0 8px;border-radius:12px;background:transparent;color:var(--_secondary);text-align:left}.details-header:hover{background:var(--_hover)}.details-label{font-size:.75em;letter-spacing:.06em;text-transform:uppercase}.chevron{width:20px;height:20px;fill:currentColor;transition:transform .2s cubic-bezier(0,0,.2,1)}.details-box.open .chevron{transform:rotate(180deg)}.details-body{display:grid;grid-template-rows:0fr;min-height:0;max-height:320px;transition:grid-template-rows .2s cubic-bezier(0,0,.2,1)}.details-box.open .details-body{grid-template-rows:1fr}.details{min-height:0;overflow:hidden}.details-box.open .details{overflow-y:auto;overscroll-behavior:contain}.details-text{padding:0 8px 12px;font-size:.85em}.actions{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:16px 24px 24px}button{font-family:inherit;cursor:pointer;border:none}button:focus-visible{outline:none!important;box-shadow:none!important}.icon-button{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border-radius:50%;background:transparent;color:inherit}.icon-button svg{width:24px;height:24px;fill:currentColor}.icon-button:hover,.icon-button:focus-visible{background:var(--_hover)!important}.flat-button{height:40px;padding:0 24px;border-radius:20px;background:var(--_primary);color:var(--_on-primary);font:var(--mat-sys-label-large, 500 14px/20px Roboto, sans-serif)}.flat-button:hover,.flat-button:focus-visible{filter:brightness(1.08)!important}@keyframes ars-shell-fade{0%{opacity:0}to{opacity:1}}@keyframes ars-shell-enter{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.scrim,.panel{animation:none}.details-box,.details-body,.chevron{transition:none}}\n"], dependencies: [{ kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
310
310
  }
311
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ShellMessageComponent, decorators: [{
311
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ShellMessageComponent, decorators: [{
312
312
  type: Component,
313
313
  args: [{ selector: 'ars-shell-message', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [SafeHtmlPipe], host: { '[class.ars-dark]': 'dark()' }, template: "<div class=\"scrim\" (click)=\"close()\"></div>\n\n<div #panel class=\"panel\" role=\"alertdialog\" aria-modal=\"true\" [attr.aria-labelledby]=\"titleId\"\n [style.max-width.px]=\"data().width\">\n\n <h2 class=\"title\" [id]=\"titleId\" [innerHTML]=\"data().title | safeHtml\"></h2>\n\n <div class=\"content\">\n @if (data().message) {\n <div class=\"message\" [innerHTML]=\"data().message | safeHtml\"></div>\n }\n @if (data().details) {\n <div class=\"details-box\" [class.open]=\"detailsOpen()\">\n <button type=\"button\" class=\"details-header\" (click)=\"toggleDetails()\"\n [attr.aria-expanded]=\"detailsOpen()\" [attr.aria-controls]=\"detailsId\">\n <span class=\"details-label\">Dettaglio</span>\n <svg class=\"chevron\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6z\" />\n </svg>\n </button>\n <div class=\"details-body\">\n <div class=\"details\" [id]=\"detailsId\" [attr.aria-hidden]=\"!detailsOpen()\">\n <div class=\"details-text\" [innerHTML]=\"data().details | safeHtml\"></div>\n </div>\n </div>\n </div>\n }\n </div>\n\n <div class=\"actions\">\n <button type=\"button\" class=\"icon-button\" (click)=\"copy()\"\n [title]=\"copied() ? 'Copiato negli appunti' : 'Copia negli appunti'\" aria-label=\"Copia negli appunti\">\n @if (copied()) {\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M9 16.2 4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4z\" /></svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path\n d=\"M16 1H4a2 2 0 0 0-2 2v14h2V3h12zm3 4H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m0 16H8V7h11z\" /></svg>\n }\n </button>\n <button #ok type=\"button\" class=\"flat-button\" (click)=\"close()\">{{ data().okCaption }}</button>\n </div>\n</div>\n", styles: [":host{--_surface: var(--ars-shell-dialog-background-color, var(--mat-sys-surface-container-high, #e6eae8));--_on-surface: var(--ars-color-text, var(--mat-sys-on-surface, #191c1b));--_secondary: var(--ars-color-secondary, var(--mat-sys-on-surface-variant, #4a635f));--_divider: var(--ars-color-divider, #757d87);--_scrim: var(--ars-shell-dialog-scrim-color, rgba(0, 0, 0, .24));--_primary: var(--ars-button-background-color, var(--mat-sys-primary, #006a60));--_on-primary: var(--ars-color-on-primary, var(--mat-sys-on-primary, #ffffff));--_hover: var(--ars-item-hover-background-color, rgba(0, 0, 0, .08));--_sunken: var(--ars-shell-dialog-sunken-background-color, rgba(0, 0, 0, .05));color-scheme:light;margin:0;border:0;padding:0;background:none;color:inherit;overflow:visible;width:100%;height:100%;position:fixed;inset:0;z-index:var(--ars-shell-dialog-z-index, 1100);display:flex;align-items:center;justify-content:center;box-sizing:border-box}:host(.ars-dark){--_surface: var(--ars-shell-dialog-background-color, var(--mat-sys-surface-container-high, #282a29));--_on-surface: var(--ars-color-text, var(--mat-sys-on-surface, #e0e2e5));--_secondary: var(--ars-color-secondary, var(--mat-sys-on-surface-variant, #b1ccc6));--_scrim: var(--ars-shell-dialog-scrim-color, rgba(0, 0, 0, .45));--_primary: var(---ars-button-background-color, var(--mat-sys-primary, #67d9c9));--_on-primary: var(--ars-color-on-primary, var(--mat-sys-on-primary, #00382f));--_hover: var(--ars-item-hover-background-color, rgba(255, 255, 255, .08));--_sunken: var(--ars-shell-dialog-sunken-background-color, rgba(0, 0, 0, .22));color-scheme:dark}:host::backdrop{display:none}.scrim{position:absolute;inset:0;background:var(--_scrim);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:ars-shell-fade .2s cubic-bezier(0,0,.2,1)}.panel{position:relative;display:flex;flex-direction:column;width:100%;min-width:0;margin:12px;max-height:calc(100% - 24px);box-sizing:border-box;border-radius:var(--ars-shell-dialog-radius, 28px);background:var(--_surface);color:var(--_on-surface);box-shadow:var(--ars-shell-dialog-elevation, 0 4px 8px 3px rgba(0, 0, 0, .15), 0 1px 3px 0 rgba(0, 0, 0, .3));font-family:var(--mat-sys-body-medium-font, Roboto, sans-serif);text-align:left;animation:ars-shell-enter .15s cubic-bezier(0,0,.2,1)}.title{margin:0;padding:24px 24px 16px;font:var(--mat-sys-headline-small, 400 24px/32px Roboto, sans-serif);color:inherit}.content{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;padding:0;font:var(--mat-sys-body-medium, 400 14px/20px Roboto, sans-serif)}.message{flex:0 1 auto;min-height:0;padding:0 24px 24px;overflow-y:auto;overscroll-behavior:contain}.details-box{flex:0 1000 auto;min-height:0;display:flex;flex-direction:column;margin:0 16px 4px;border-radius:12px;background:transparent;transition:background-color .2s cubic-bezier(0,0,.2,1)}.details-box.open{background:var(--_sunken)}.details-header{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;height:44px;padding:0 8px;border-radius:12px;background:transparent;color:var(--_secondary);text-align:left}.details-header:hover{background:var(--_hover)}.details-label{font-size:.75em;letter-spacing:.06em;text-transform:uppercase}.chevron{width:20px;height:20px;fill:currentColor;transition:transform .2s cubic-bezier(0,0,.2,1)}.details-box.open .chevron{transform:rotate(180deg)}.details-body{display:grid;grid-template-rows:0fr;min-height:0;max-height:320px;transition:grid-template-rows .2s cubic-bezier(0,0,.2,1)}.details-box.open .details-body{grid-template-rows:1fr}.details{min-height:0;overflow:hidden}.details-box.open .details{overflow-y:auto;overscroll-behavior:contain}.details-text{padding:0 8px 12px;font-size:.85em}.actions{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:16px 24px 24px}button{font-family:inherit;cursor:pointer;border:none}button:focus-visible{outline:none!important;box-shadow:none!important}.icon-button{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border-radius:50%;background:transparent;color:inherit}.icon-button svg{width:24px;height:24px;fill:currentColor}.icon-button:hover,.icon-button:focus-visible{background:var(--_hover)!important}.flat-button{height:40px;padding:0 24px;border-radius:20px;background:var(--_primary);color:var(--_on-primary);font:var(--mat-sys-label-large, 500 14px/20px Roboto, sans-serif)}.flat-button:hover,.flat-button:focus-visible{filter:brightness(1.08)!important}@keyframes ars-shell-fade{0%{opacity:0}to{opacity:1}}@keyframes ars-shell-enter{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.scrim,.panel{animation:none}.details-box,.details-body,.chevron{transition:none}}\n"] }]
314
314
  }], ctorParameters: () => [], propDecorators: { closed: [{ type: i0.Output, args: ["closed"] }], panel: [{ type: i0.ViewChild, args: ['panel', { isSignal: true }] }], okButton: [{ type: i0.ViewChild, args: ['ok', { isSignal: true }] }], onKeydown: [{
@@ -688,10 +688,10 @@ class ShellService {
688
688
  }
689
689
  catch { /* the element is on its way out */ }
690
690
  }
691
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ShellService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
692
- static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.3", ngImport: i0, type: ShellService }); }
691
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ShellService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
692
+ static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.4", ngImport: i0, type: ShellService }); }
693
693
  }
694
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: ShellService, decorators: [{
694
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ShellService, decorators: [{
695
695
  type: Service
696
696
  }] });
697
697
 
@@ -218,10 +218,10 @@ class TinymceLoaderService {
218
218
  });
219
219
  return this.pending;
220
220
  }
221
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: TinymceLoaderService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
222
- static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.3", ngImport: i0, type: TinymceLoaderService }); }
221
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: TinymceLoaderService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
222
+ static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.4", ngImport: i0, type: TinymceLoaderService }); }
223
223
  }
224
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: TinymceLoaderService, decorators: [{
224
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: TinymceLoaderService, decorators: [{
225
225
  type: Service
226
226
  }] });
227
227
 
@@ -525,14 +525,14 @@ class TinymceEditorDirective {
525
525
  applyDisabled(isDisabled) {
526
526
  this.editor?.mode.set(isDisabled ? 'readonly' : 'design');
527
527
  }
528
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: TinymceEditorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
529
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.3", type: TinymceEditorDirective, isStandalone: true, selector: "textarea[tinymceEditor], div[tinymceEditor]", inputs: { tinymceConfig: { classPropertyName: "tinymceConfig", publicName: "tinymceConfig", isSignal: true, isRequired: false, transformFunction: null }, tinymceToolbarMode: { classPropertyName: "tinymceToolbarMode", publicName: "tinymceToolbarMode", isSignal: true, isRequired: false, transformFunction: null }, tinymceImageUploader: { classPropertyName: "tinymceImageUploader", publicName: "tinymceImageUploader", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ready: "ready", failed: "failed" }, providers: [{
528
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: TinymceEditorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
529
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.4", type: TinymceEditorDirective, isStandalone: true, selector: "textarea[tinymceEditor], div[tinymceEditor]", inputs: { tinymceConfig: { classPropertyName: "tinymceConfig", publicName: "tinymceConfig", isSignal: true, isRequired: false, transformFunction: null }, tinymceToolbarMode: { classPropertyName: "tinymceToolbarMode", publicName: "tinymceToolbarMode", isSignal: true, isRequired: false, transformFunction: null }, tinymceImageUploader: { classPropertyName: "tinymceImageUploader", publicName: "tinymceImageUploader", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ready: "ready", failed: "failed" }, providers: [{
530
530
  provide: NG_VALUE_ACCESSOR,
531
531
  useExisting: forwardRef(() => TinymceEditorDirective),
532
532
  multi: true
533
533
  }], ngImport: i0 }); }
534
534
  }
535
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: TinymceEditorDirective, decorators: [{
535
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: TinymceEditorDirective, decorators: [{
536
536
  type: Directive,
537
537
  args: [{
538
538
  // Both hosts are accepted because the two modes need different ones: the classic editor
@@ -600,10 +600,10 @@ class TinyMceEditorComponent {
600
600
  this.dialogRef.close();
601
601
  }, 500);
602
602
  }
603
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: TinyMceEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
604
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.3", type: TinyMceEditorComponent, isStandalone: true, selector: "ng-component", outputs: { saving: "saving" }, ngImport: i0, template: "<mat-dialog-content style=\"padding: 10px 10px 0 10px\">\n <textarea tinymceEditor class=\"full-screen-editor\" [tinymceConfig]=\"tinymceConfig\"\n [formField]=\"textForm\"></textarea>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill>\n <div fxFlex=\"50\">\n @if(dialogData().onShowInfo) {\n <button mat-stroked-button (click)=\"dialogData().onShowInfo()\">{{dialogData().infoButtonLabel ?? 'Informazioni'}}\n </button>\n }\n </div>\n <div fxFlex=\"50\" fxLayoutAlign=\"end\">\n @if (disabled()) {\n <button mat-stroked-button [mat-dialog-close]=\"true\">Chiudi</button>\n } @else {\n <button mat-flat-button (click)=\"ok()\">Salva</button>\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\n }\n </div>\n </div>\n</mat-dialog-actions>\n", styles: [".mat-mdc-dialog-content{height:calc(100% - 52px)!important;max-height:calc(100% - 52px)!important}::ng-deep .full-screen-editor+.tox-tinymce{height:100%!important}\n"], dependencies: [{ kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: TinymceEditorDirective, selector: "textarea[tinymceEditor], div[tinymceEditor]", inputs: ["tinymceConfig", "tinymceToolbarMode", "tinymceImageUploader"], outputs: ["ready", "failed"] }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i1.FxLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg] ", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.FxFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg] ", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i1.FxLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg] ", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FxLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg] ", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.FxFlexFillDirective, selector: " [fxFlexFill], [fxFill], [fxFlexFill.xs], [fxFlexFill.sm], [fxFlexFill.md], [fxFlexFill.lg], [fxFlexFill.xl], [fxFlexFill.lt-sm], [fxFlexFill.lt-md], [fxFlexFill.lt-lg], [fxFlexFill.lt-xl], [fxFlexFill.gt-xs], [fxFlexFill.gt-sm], [fxFlexFill.gt-md], [fxFlexFill.gt-lg] ", inputs: ["fxFlexFill", "fxFill", "fxFlexFill.xs", "fxFlexFill.sm", "fxFlexFill.md", "fxFlexFill.lg", "fxFlexFill.xl", "fxFlexFill.lt-sm", "fxFlexFill.lt-md", "fxFlexFill.lt-lg", "fxFlexFill.lt-xl", "fxFlexFill.gt-xs", "fxFlexFill.gt-sm", "fxFlexFill.gt-md", "fxFlexFill.gt-lg"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
603
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: TinyMceEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
604
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: TinyMceEditorComponent, isStandalone: true, selector: "ng-component", outputs: { saving: "saving" }, ngImport: i0, template: "<mat-dialog-content style=\"padding: 10px 10px 0 10px\">\n <textarea tinymceEditor class=\"full-screen-editor\" [tinymceConfig]=\"tinymceConfig\"\n [formField]=\"textForm\"></textarea>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill>\n <div fxFlex=\"50\">\n @if(dialogData().onShowInfo) {\n <button mat-stroked-button (click)=\"dialogData().onShowInfo()\">{{dialogData().infoButtonLabel ?? 'Informazioni'}}\n </button>\n }\n </div>\n <div fxFlex=\"50\" fxLayoutAlign=\"end\">\n @if (disabled()) {\n <button mat-stroked-button [mat-dialog-close]=\"true\">Chiudi</button>\n } @else {\n <button mat-flat-button (click)=\"ok()\">Salva</button>\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\n }\n </div>\n </div>\n</mat-dialog-actions>\n", styles: [".mat-mdc-dialog-content{height:calc(100% - 52px)!important;max-height:calc(100% - 52px)!important}::ng-deep .full-screen-editor+.tox-tinymce{height:100%!important}\n"], dependencies: [{ kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: TinymceEditorDirective, selector: "textarea[tinymceEditor], div[tinymceEditor]", inputs: ["tinymceConfig", "tinymceToolbarMode", "tinymceImageUploader"], outputs: ["ready", "failed"] }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i1.FxLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg] ", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.FxFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg] ", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i1.FxLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg] ", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FxLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg] ", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.FxFlexFillDirective, selector: " [fxFlexFill], [fxFill], [fxFlexFill.xs], [fxFlexFill.sm], [fxFlexFill.md], [fxFlexFill.lg], [fxFlexFill.xl], [fxFlexFill.lt-sm], [fxFlexFill.lt-md], [fxFlexFill.lt-lg], [fxFlexFill.lt-xl], [fxFlexFill.gt-xs], [fxFlexFill.gt-sm], [fxFlexFill.gt-md], [fxFlexFill.gt-lg] ", inputs: ["fxFlexFill", "fxFill", "fxFlexFill.xs", "fxFlexFill.sm", "fxFlexFill.md", "fxFlexFill.lg", "fxFlexFill.xl", "fxFlexFill.lt-sm", "fxFlexFill.lt-md", "fxFlexFill.lt-lg", "fxFlexFill.lt-xl", "fxFlexFill.gt-xs", "fxFlexFill.gt-sm", "fxFlexFill.gt-md", "fxFlexFill.gt-lg"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
605
605
  }
606
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.3", ngImport: i0, type: TinyMceEditorComponent, decorators: [{
606
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: TinyMceEditorComponent, decorators: [{
607
607
  type: Component,
608
608
  args: [{ standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatDialogContent, TinymceEditorDirective, FormField, MatDialogActions, FlexLayoutModule,
609
609
  MatButtonModule, MatDialogClose], template: "<mat-dialog-content style=\"padding: 10px 10px 0 10px\">\n <textarea tinymceEditor class=\"full-screen-editor\" [tinymceConfig]=\"tinymceConfig\"\n [formField]=\"textForm\"></textarea>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill>\n <div fxFlex=\"50\">\n @if(dialogData().onShowInfo) {\n <button mat-stroked-button (click)=\"dialogData().onShowInfo()\">{{dialogData().infoButtonLabel ?? 'Informazioni'}}\n </button>\n }\n </div>\n <div fxFlex=\"50\" fxLayoutAlign=\"end\">\n @if (disabled()) {\n <button mat-stroked-button [mat-dialog-close]=\"true\">Chiudi</button>\n } @else {\n <button mat-flat-button (click)=\"ok()\">Salva</button>\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\n }\n </div>\n </div>\n</mat-dialog-actions>\n", styles: [".mat-mdc-dialog-content{height:calc(100% - 52px)!important;max-height:calc(100% - 52px)!important}::ng-deep .full-screen-editor+.tox-tinymce{height:100%!important}\n"] }]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arsedizioni/ars-utils",
3
- "version": "22.5.37",
3
+ "version": "22.5.39",
4
4
  "author": {
5
5
  "email": "software@arsedizioni.it",
6
6
  "name": "Fabio Buscaroli, Alberto Doria"
@@ -86,6 +86,14 @@
86
86
  "types": "./types/arsedizioni-ars-utils-ui.controls.d.ts",
87
87
  "default": "./fesm2022/arsedizioni-ars-utils-ui.controls.mjs"
88
88
  },
89
+ "./ui.controls.date": {
90
+ "types": "./types/arsedizioni-ars-utils-ui.controls.date.d.ts",
91
+ "default": "./fesm2022/arsedizioni-ars-utils-ui.controls.date.mjs"
92
+ },
93
+ "./ui.controls.tree": {
94
+ "types": "./types/arsedizioni-ars-utils-ui.controls.tree.d.ts",
95
+ "default": "./fesm2022/arsedizioni-ars-utils-ui.controls.tree.mjs"
96
+ },
89
97
  "./ui.dialogs": {
90
98
  "types": "./types/arsedizioni-ars-utils-ui.dialogs.d.ts",
91
99
  "default": "./fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs"
@@ -9,12 +9,13 @@ import { MatPaginator, PageEvent } from '@angular/material/paginator';
9
9
  import { MatDrawer } from '@angular/material/sidenav';
10
10
  import { ClipperSearchFacetsSnapshot, ClipperSearchFacet, ClipperSearchFacetGroup, ClipperService, ClipperDocumentInfo, ClipperSearchParams, ClipperQueryReferencesMode, ClipperModule, ClipperModel, ClipperSearchCalendarSnapshotMonth, ClipperSearchCalendarSnapshotResult, ClipperSelectionMode, ClipperSearchResult, ClipperSort, ClipperUserSearch, SectorInfo, ClipperUserInfo, ClipperDocumentRelevants, ClipperDocumentAnchorInfo } from '@arsedizioni/ars-utils/clipper.common';
11
11
  import { BroadcastService, DateInterval, ThemeType, ThemeService, ScreenService, SelectableModel, NameValueItem, INode } from '@arsedizioni/ars-utils/core';
12
- import { CalendarEmptyHeader, ButtonSelectorComponent, ChipsSelectorComponent } from '@arsedizioni/ars-utils/ui.controls';
12
+ import { ButtonSelectorComponent, ChipsSelectorComponent } from '@arsedizioni/ars-utils/ui.controls';
13
13
  import { BreakpointObserver } from '@angular/cdk/layout';
14
14
  import { Clipboard } from '@angular/cdk/clipboard';
15
15
  import { DialogService } from '@arsedizioni/ars-utils/ui.dialogs';
16
16
  import { SendToPopulateData } from '@arsedizioni/ars-utils/ui';
17
17
  import { MatCalendar, MatCalendarCellClassFunction } from '@angular/material/datepicker';
18
+ import { CalendarEmptyHeader } from '@arsedizioni/ars-utils/ui.controls.date';
18
19
  import { MatSelectionList } from '@angular/material/list';
19
20
  import { MatMenuTrigger, MatMenu } from '@angular/material/menu';
20
21
 
@@ -1172,7 +1173,7 @@ declare class ClipperDocumentMenuComponent {
1172
1173
  private readonly renderer2;
1173
1174
  private readonly clipperService;
1174
1175
  readonly useSelections: _angular_core.InputSignal<boolean>;
1175
- readonly selectionSource: _angular_core.InputSignal<"bag" | "selection" | "none">;
1176
+ readonly selectionSource: _angular_core.InputSignal<"none" | "bag" | "selection">;
1176
1177
  /**
1177
1178
  * Computed signal that returns the current effective document selection.
1178
1179
  * Re-evaluates when any input signal or the underlying selection model changes.
@@ -191,7 +191,7 @@ declare class DateFnsAdapter extends DateAdapter<Date, Locale> {
191
191
  static ɵprov: i0.ɵɵInjectableDeclaration<DateFnsAdapter>;
192
192
  }
193
193
  /**
194
- * Standalone providers for the SCM date-fns adapter.
194
+ * Standalone providers for the ARS date-fns adapter.
195
195
  *
196
196
  * Configures Angular Material to use {@link DateFnsAdapter} (Europe/Rome timezone)
197
197
  * and the matching {@link MAT_DATE_FNS_FORMATS}. Also supports `mat-timepicker` since
@@ -199,10 +199,10 @@ declare class DateFnsAdapter extends DateAdapter<Date, Locale> {
199
199
  *
200
200
  * @example
201
201
  * bootstrapApplication(AppComponent, {
202
- * providers: [provideScmDateFns()]
202
+ * providers: [provideArsDateFns()]
203
203
  * });
204
204
  */
205
- declare function provideScmDateFns(): EnvironmentProviders;
205
+ declare function provideArsDateFns(): EnvironmentProviders;
206
206
 
207
207
  /** Default application timezone: all dates are serialised as Europe/Rome wall-clock values. */
208
208
  declare const DEFAULT_TIME_ZONE = "Europe/Rome";
@@ -301,37 +301,4 @@ declare function toLocalDateOnlyString(value?: Date | null, timeZone?: string):
301
301
  */
302
302
  declare function toLocalDateTimeString(value?: Date | null, timeZone?: string): string | undefined;
303
303
 
304
- /**
305
- * Works around a MatDatepicker/Signal Forms interop bug.
306
- *
307
- * `MatDatepickerInputBase._onInput()` only notifies its registered validator-change
308
- * callback from the branch it does not take when the parsed date is null. Signal
309
- * Forms recomputes CVA parse errors from that callback or from a model value
310
- * change, and neither happens while the user erases an unparseable date one
311
- * character at a time (the model is already `null`, so the signal write is a
312
- * no-op). The stale `matDatepickerParse` error therefore survives on an empty
313
- * field. Notifying on every keystroke re-runs the datepicker validators.
314
- */
315
- declare class MatDatepickerParseErrorFixDirective {
316
- private readonly singleDate;
317
- private readonly startDate;
318
- private readonly endDate;
319
- /**
320
- * Re-runs the datepicker validators after Material has updated its internal
321
- * parse flag.
322
- *
323
- * @returns Nothing.
324
- */
325
- protected onInput(): void;
326
- /**
327
- * Notifies the validator-change callback of this input and, for range parts,
328
- * of the sibling input as well.
329
- *
330
- * @returns Nothing.
331
- */
332
- private revalidate;
333
- static ɵfac: i0.ɵɵFactoryDeclaration<MatDatepickerParseErrorFixDirective, never>;
334
- static ɵdir: i0.ɵɵDirectiveDeclaration<MatDatepickerParseErrorFixDirective, "input[matDatepicker], input[matStartDate], input[matEndDate]", never, {}, {}, never, never, true, never>;
335
- }
336
-
337
- export { ARS_TIME_ZONE, ArsLocalDateInterceptor, DEFAULT_TIME_ZONE, DateFnsAdapter, MAT_DATE_FNS_FORMATS, MatDatepickerParseErrorFixDirective, arsLocalDateInterceptor, provideArsLocalDates, provideScmDateFns, toLocalDateOnlyString, toLocalDateTimeString };
304
+ export { ARS_TIME_ZONE, ArsLocalDateInterceptor, DEFAULT_TIME_ZONE, DateFnsAdapter, MAT_DATE_FNS_FORMATS, arsLocalDateInterceptor, provideArsDateFns, provideArsLocalDates, toLocalDateOnlyString, toLocalDateTimeString };
@@ -1,7 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { OnDestroy } from '@angular/core';
3
3
  import { ControlValueAccessor, NgControl } from '@angular/forms';
4
- import { NameValueItem, INode } from '@arsedizioni/ars-utils/core';
4
+ import { NameValueItem } from '@arsedizioni/ars-utils/core';
5
5
  import * as _angular_forms_signals from '@angular/forms/signals';
6
6
 
7
7
  declare class ButtonSelectorComponent implements OnDestroy, ControlValueAccessor {
@@ -163,7 +163,7 @@ declare class ChipsSelectorComponent implements OnDestroy, ControlValueAccessor
163
163
  /** When `true`, at least one item must remain selected. */
164
164
  readonly mustSelect: _angular_core.InputSignal<boolean>;
165
165
  /** Layout mode: `'collapsed'` forces dropdown mode, `'dynamic'` collapses based on `collapseAt`. */
166
- readonly mode: _angular_core.InputSignal<"collapsed" | "dynamic">;
166
+ readonly mode: _angular_core.InputSignal<"dynamic" | "collapsed">;
167
167
  /** When `true`, chips are stacked vertically instead of wrapping horizontally. */
168
168
  readonly stacked: _angular_core.InputSignal<boolean>;
169
169
  /** Chips below this index receive extra padding to align with other UI elements. */
@@ -277,149 +277,5 @@ declare class ChipsSelectorComponent implements OnDestroy, ControlValueAccessor
277
277
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChipsSelectorComponent, "chips-selector", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "collapsedWidth": { "alias": "collapsedWidth"; "required": false; "isSignal": true; }; "collapsedDisplayMode": { "alias": "collapsedDisplayMode"; "required": false; "isSignal": true; }; "collapseAt": { "alias": "collapseAt"; "required": false; "isSignal": true; }; "collapseAtContainer": { "alias": "collapseAtContainer"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "mustSelect": { "alias": "mustSelect"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "stacked": { "alias": "stacked"; "required": false; "isSignal": true; }; "padAt": { "alias": "padAt"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "changed": "changed"; }, never, never, true, never>;
278
278
  }
279
279
 
280
- declare class TreePickerComponent {
281
- /** Nested tree data to display. */
282
- readonly tree: _angular_core.InputSignal<INode[]>;
283
- /** Currently selected node ids. Supports two-way binding via [(selection)]. */
284
- readonly selection: _angular_core.ModelSignal<string[]>;
285
- /** When true, checkboxes and chip remove buttons are disabled (mirrors Material convention). */
286
- readonly disabled: _angular_core.InputSignal<boolean>;
287
- /** Description to display when no selection is made. */
288
- readonly descriptionEmpty: _angular_core.InputSignal<string>;
289
- /** Maximum number of tree levels to display (default: 3). */
290
- readonly maxDepth: _angular_core.InputSignal<number>;
291
- /**
292
- * List of node IDs at depth >= maxDepth that unlock selection for themselves
293
- * and all their descendants, regardless of depth.
294
- */
295
- readonly maxDepthOverrides: _angular_core.InputSignal<string[]>;
296
- /**
297
- * Number of levels to auto-expand on load.
298
- * 0 or undefined = only top level visible (no expansion);
299
- * 1 = expand depth-0 nodes; 2 = expand depth-0 and depth-1 nodes; etc.
300
- * Must be less than maxDepth.
301
- */
302
- readonly minDepth: _angular_core.InputSignal<number>;
303
- /**
304
- * Emits the count of visible selected nodes whenever the selection changes.
305
- * Emits 0 when nothing is selected (meaning all items are implicitly included).
306
- */
307
- readonly selectionCount: _angular_core.OutputEmitterRef<number>;
308
- /** Emits void whenever the user changes the selection (toggle, remove, clear). */
309
- readonly changed: _angular_core.OutputEmitterRef<void>;
310
- private readonly _treeRef;
311
- private readonly _elRef;
312
- /**
313
- * Set of all node IDs selectable via overrides: each listed root and all its descendants.
314
- * Recomputed whenever the tree data or the override list changes.
315
- */
316
- private readonly _overrideSubtreeSet;
317
- /** All three maps rebuilt lazily as a single computed whenever taxonomy changes. */
318
- private readonly _maps;
319
- /** O(1) set of selected ids, rebuilt only when selection changes. */
320
- private readonly _selectedSet;
321
- /** True when at least one node is explicitly selected. */
322
- protected readonly hasSelection: _angular_core.Signal<boolean>;
323
- /** Count of selected nodes within selectable levels (depth < maxDepth or in overrides), shown in the tab label. */
324
- protected readonly selectedVisibleCount: _angular_core.Signal<number>;
325
- readonly treeChildrenAccessor: (node: INode) => INode[];
326
- readonly hasChild: (_: number, node: INode) => boolean;
327
- /** Returns true when the node can be selected: depth < maxDepth or explicitly listed in maxDepthOverrides. */
328
- protected isSelectable(node: INode): boolean;
329
- private _isSelectableNode;
330
- /** Current filter text. */
331
- protected readonly filterText: _angular_core.WritableSignal<string>;
332
- /** Root signal form bound to the filter text input. */
333
- protected readonly filterForm: _angular_forms_signals.FieldTree<string, string | number, "writable">;
334
- /** Nodes matching the current filter text, in nodeMap iteration order. */
335
- protected readonly filteredItems: _angular_core.WritableSignal<INode[]>;
336
- /** Index of the currently highlighted filtered node (-1 = none). */
337
- protected readonly filterIndex: _angular_core.WritableSignal<number>;
338
- /** The currently highlighted filtered node, or null. */
339
- protected readonly filteredNode: _angular_core.Signal<INode>;
340
- constructor();
341
- /** Expands all visible nodes in the tree. */
342
- protected expandAll(): void;
343
- /** Collapses all nodes in the tree. */
344
- protected collapseAll(): void;
345
- /** Clears the entire selection. */
346
- protected clearAll(): void;
347
- /** Searches nodes by text and moves to the first match. */
348
- protected doFilter(): void;
349
- /** Clears the filter and restores the original tree state. */
350
- protected clearFilter(): void;
351
- /** Moves to the next matching node, cycling back to the first. */
352
- protected nextFiltered(): void;
353
- /** Returns true when the node is the currently highlighted filter match. */
354
- protected isFilteredNode(node: INode): boolean;
355
- /** Expands ancestors of the target node and scrolls it into view. */
356
- private _scrollToFiltered;
357
- /**
358
- * Returns true when the node is in the active selection.
359
- * @param node - tree node to check
360
- * @returns true if selected
361
- */
362
- protected isSelected(node: INode): boolean;
363
- /**
364
- * Returns true when a subset (but not all) of the node's descendants are selected,
365
- * producing the indeterminate checkbox state.
366
- * @param node - tree node to evaluate
367
- * @returns true if the node is in a partial-selection (indeterminate) state
368
- */
369
- protected isIndeterminate(node: INode): boolean;
370
- /**
371
- * Toggles the node and all its descendants; then syncs the ancestor chain.
372
- * @param node - the node that was clicked
373
- */
374
- protected toggleNode(node: INode): void;
375
- /**
376
- * Deselects the node and all its descendants. Called by the chip remove button.
377
- * @param node - the node to remove from the selection
378
- */
379
- protected removeNode(node: INode): void;
380
- /**
381
- * Returns the INode for the given id, or undefined if not found.
382
- * @param id - node id to look up
383
- * @returns the matching INode
384
- */
385
- protected nodeById(id: string): INode | undefined;
386
- /**
387
- * Returns true when the node at the given id is within the visible depth range
388
- * and should appear in the chip list.
389
- * @param id - node id to check
390
- * @returns true if the node depth is less than maxDepth
391
- */
392
- protected isChipVisible(id: string): boolean;
393
- /**
394
- * Returns only the selectable descendants of node (depth < maxDepth or in overrides),
395
- * used for indeterminate state and parent auto-selection logic.
396
- * @param node - root of the subtree to traverse
397
- * @returns flat array of selectable descendant INodes
398
- */
399
- private _getSelectableDescendants;
400
- /**
401
- * Walks up the ancestor chain from node, selecting a parent only when all
402
- * its descendants are in the set, deselecting it otherwise.
403
- * @param node - starting node for the upward traversal
404
- * @param set - mutable selection set updated in place
405
- */
406
- private _syncParentsInSet;
407
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<TreePickerComponent, never>;
408
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TreePickerComponent, "tree-picker", never, { "tree": { "alias": "tree"; "required": false; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "descriptionEmpty": { "alias": "descriptionEmpty"; "required": false; "isSignal": true; }; "maxDepth": { "alias": "maxDepth"; "required": false; "isSignal": true; }; "maxDepthOverrides": { "alias": "maxDepthOverrides"; "required": false; "isSignal": true; }; "minDepth": { "alias": "minDepth"; "required": false; "isSignal": true; }; }, { "selection": "selectionChange"; "selectionCount": "selectionCount"; "changed": "changed"; }, never, never, true, never>;
409
- }
410
-
411
- /**
412
- * A blank calendar header that hides the month/year navigation controls.
413
- * Used when an inline calendar should render without any navigation UI.
414
- */
415
- declare class CalendarEmptyHeader<D> {
416
- private readonly destroyRef;
417
- private readonly calendar;
418
- private readonly changeDetector;
419
- constructor();
420
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<CalendarEmptyHeader<any>, never>;
421
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<CalendarEmptyHeader<any>, "ng-component", never, {}, {}, never, never, true, never>;
422
- }
423
-
424
- export { ButtonSelectorComponent, ButtonToggleComponent, CalendarEmptyHeader, ChipsSelectorComponent, TreePickerComponent };
280
+ export { ButtonSelectorComponent, ButtonToggleComponent, ChipsSelectorComponent };
425
281
  export type { ButtonToggleInfo };
@@ -0,0 +1,49 @@
1
+ import * as i0 from '@angular/core';
2
+
3
+ /**
4
+ * A blank calendar header that hides the month/year navigation controls.
5
+ * Used when an inline calendar should render without any navigation UI.
6
+ */
7
+ declare class CalendarEmptyHeader<D> {
8
+ private readonly destroyRef;
9
+ private readonly calendar;
10
+ private readonly changeDetector;
11
+ constructor();
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<CalendarEmptyHeader<any>, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<CalendarEmptyHeader<any>, "ng-component", never, {}, {}, never, never, true, never>;
14
+ }
15
+
16
+ /**
17
+ * Works around a MatDatepicker/Signal Forms interop bug.
18
+ *
19
+ * `MatDatepickerInputBase._onInput()` only notifies its registered validator-change
20
+ * callback from the branch it does not take when the parsed date is null. Signal
21
+ * Forms recomputes CVA parse errors from that callback or from a model value
22
+ * change, and neither happens while the user erases an unparseable date one
23
+ * character at a time (the model is already `null`, so the signal write is a
24
+ * no-op). The stale `matDatepickerParse` error therefore survives on an empty
25
+ * field. Notifying on every keystroke re-runs the datepicker validators.
26
+ */
27
+ declare class MatDatepickerParseErrorFixDirective {
28
+ private readonly singleDate;
29
+ private readonly startDate;
30
+ private readonly endDate;
31
+ /**
32
+ * Re-runs the datepicker validators after Material has updated its internal
33
+ * parse flag.
34
+ *
35
+ * @returns Nothing.
36
+ */
37
+ protected onInput(): void;
38
+ /**
39
+ * Notifies the validator-change callback of this input and, for range parts,
40
+ * of the sibling input as well.
41
+ *
42
+ * @returns Nothing.
43
+ */
44
+ private revalidate;
45
+ static ɵfac: i0.ɵɵFactoryDeclaration<MatDatepickerParseErrorFixDirective, never>;
46
+ static ɵdir: i0.ɵɵDirectiveDeclaration<MatDatepickerParseErrorFixDirective, "input[matDatepicker], input[matStartDate], input[matEndDate]", never, {}, {}, never, never, true, never>;
47
+ }
48
+
49
+ export { CalendarEmptyHeader, MatDatepickerParseErrorFixDirective };