phoenix-ui-components 3.0.6 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,31 +1,31 @@
1
1
  import * as i0 from '@angular/core';
2
- import { OnInit, EventEmitter, ElementRef, ChangeDetectorRef, OnDestroy, ComponentRef, AfterViewInit, QueryList, OnChanges, SimpleChanges, PipeTransform } from '@angular/core';
3
- import * as i66 from '@angular/material/checkbox';
2
+ import { OnInit, EventEmitter, ElementRef, ChangeDetectorRef, NgZone, OnDestroy, ComponentRef, AfterViewInit, QueryList, OnChanges, SimpleChanges, PipeTransform } from '@angular/core';
3
+ import * as i71 from '@angular/material/checkbox';
4
4
  import { MatCheckboxChange } from '@angular/material/checkbox';
5
5
  import * as phoenix_event_display from 'phoenix-event-display';
6
- import { PhoenixMenuNode, EventDisplay, AnimationPreset, PrettySymbols, ActiveVariable, PresetView, EventSummary } from 'phoenix-event-display';
7
- import * as i60 from '@angular/cdk/overlay';
6
+ import { PhoenixMenuNode, EventDisplay, Configuration, AnimationPreset, PrettySymbols, ActiveVariable, PresetView, KinematicsConfig, MasterclassConfig, EventSummary, KinematicsColumn, TaggedParticle, ParticleTagDef } from 'phoenix-event-display';
7
+ import * as i65 from '@angular/cdk/overlay';
8
8
  import { Overlay } from '@angular/cdk/overlay';
9
9
  import { Object3D, Object3DEventMap, Vector3 } from 'three';
10
- import * as i57 from '@angular/material/dialog';
10
+ import * as i62 from '@angular/material/dialog';
11
11
  import { MatDialog, MatDialogRef } from '@angular/material/dialog';
12
12
  import { Subscription } from 'rxjs';
13
- import * as i62 from '@angular/material/menu';
13
+ import * as i67 from '@angular/material/menu';
14
14
  import { MatMenuTrigger } from '@angular/material/menu';
15
- import * as i68 from '@angular/cdk/tree';
15
+ import * as i73 from '@angular/cdk/tree';
16
16
  import { NestedTreeControl } from '@angular/cdk/tree';
17
17
  import { MatTreeNestedDataSource } from '@angular/material/tree';
18
- import * as i54 from '@angular/common';
19
- import * as i55 from '@angular/router';
20
- import * as i56 from '@angular/cdk/drag-drop';
21
- import * as i58 from '@angular/material/button';
22
- import * as i59 from '@angular/material/tooltip';
23
- import * as i61 from '@angular/forms';
24
- import * as i63 from '@angular/material/radio';
25
- import * as i64 from '@angular/material/slider';
26
- import * as i65 from '@angular/material/slide-toggle';
27
- import * as i67 from '@angular/material/icon';
28
- import * as i69 from '@angular/material/tabs';
18
+ import * as i59 from '@angular/common';
19
+ import * as i60 from '@angular/router';
20
+ import * as i61 from '@angular/cdk/drag-drop';
21
+ import * as i63 from '@angular/material/button';
22
+ import * as i64 from '@angular/material/tooltip';
23
+ import * as i66 from '@angular/forms';
24
+ import * as i68 from '@angular/material/radio';
25
+ import * as i69 from '@angular/material/slider';
26
+ import * as i70 from '@angular/material/slide-toggle';
27
+ import * as i72 from '@angular/material/icon';
28
+ import * as i74 from '@angular/material/tabs';
29
29
 
30
30
  declare class NavComponent implements OnInit {
31
31
  constructor();
@@ -72,10 +72,26 @@ declare class PhoenixMenuComponent {
72
72
  * Service for all event display related functions.
73
73
  */
74
74
  declare class EventDisplayService extends EventDisplay {
75
+ private ngZone;
75
76
  /**
76
77
  * Instantiate the event display by calling the parent constructor.
77
78
  */
78
- constructor();
79
+ constructor(ngZone: NgZone);
80
+ /**
81
+ * Initialize the event display, then move only the renderer's
82
+ * animation loop outside Angular's zone.
83
+ *
84
+ * `super.init()` runs inside the zone so that URL-option loading,
85
+ * event-change callbacks and other promise/fetch work still trigger
86
+ * Angular change detection as expected.
87
+ *
88
+ * Only the `requestAnimationFrame` loop (Three.js render + stats)
89
+ * is re-registered outside the zone, preventing ~60 unnecessary
90
+ * change-detection cycles per second.
91
+ *
92
+ * @param configuration Configuration used to customize different aspects.
93
+ */
94
+ init(configuration: Configuration): void;
79
95
  static ɵfac: i0.ɵɵFactoryDeclaration<EventDisplayService, never>;
80
96
  static ɵprov: i0.ɵɵInjectableDeclaration<EventDisplayService>;
81
97
  }
@@ -715,6 +731,8 @@ interface UIMenuConfig {
715
731
  showInfoPanel?: boolean;
716
732
  showEventBrowser?: boolean;
717
733
  showEtaPhiPanel?: boolean;
734
+ showKinematicsPanel?: boolean;
735
+ showMasterclassPanel?: boolean;
718
736
  }
719
737
  declare const defaultUIMenuConfig: UIMenuConfig;
720
738
  declare class UiMenuComponent {
@@ -723,8 +741,10 @@ declare class UiMenuComponent {
723
741
  [key: string]: phoenix_event_display.AnimationPreset;
724
742
  };
725
743
  uiConfig: UIMenuConfig;
744
+ kinematicsConfig?: KinematicsConfig;
745
+ masterclassConfig?: MasterclassConfig;
726
746
  static ɵfac: i0.ɵɵFactoryDeclaration<UiMenuComponent, never>;
727
- static ɵcmp: i0.ɵɵComponentDeclaration<UiMenuComponent, "app-ui-menu", never, { "eventDataImportOptions": { "alias": "eventDataImportOptions"; "required": false; }; "animationPresets": { "alias": "animationPresets"; "required": false; }; "uiConfig": { "alias": "uiConfig"; "required": false; }; }, {}, never, ["*"], false, never>;
747
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiMenuComponent, "app-ui-menu", never, { "eventDataImportOptions": { "alias": "eventDataImportOptions"; "required": false; }; "animationPresets": { "alias": "animationPresets"; "required": false; }; "uiConfig": { "alias": "uiConfig"; "required": false; }; "kinematicsConfig": { "alias": "kinematicsConfig"; "required": false; }; "masterclassConfig": { "alias": "masterclassConfig"; "required": false; }; }, {}, never, ["*"], false, never>;
728
748
  }
729
749
 
730
750
  declare class ShareLinkComponent {
@@ -816,10 +836,10 @@ declare class FileLoaderService {
816
836
  private lastEventsURL;
817
837
  private lastEventsOptions;
818
838
  unzip(data: ArrayBuffer): Promise<string>;
819
- makeRequest(urlPath: string, responseType: 'json' | 'text' | 'blob', onData: (data: any) => void, options?: any): boolean;
839
+ makeRequest(urlPath: string, responseType: 'json' | 'text' | 'blob', onData: (data: any) => void, options?: any): Promise<boolean>;
820
840
  loadJSONEvent(eventData: string, eventDisplay: EventDisplayService): void;
821
841
  loadJiveXMLEvent(eventData: string, eventDisplay: EventDisplayService): void;
822
- loadEvent(file: string, eventDisplay: EventDisplayService, options?: any): boolean;
842
+ loadEvent(file: string, eventDisplay: EventDisplayService, options?: any): Promise<boolean>;
823
843
  reloadLastEvents(eventDisplay: EventDisplayService): void;
824
844
  static ɵfac: i0.ɵɵFactoryDeclaration<FileLoaderService, never>;
825
845
  static ɵprov: i0.ɵɵInjectableDeclaration<FileLoaderService>;
@@ -840,8 +860,8 @@ declare class EventDataExplorerDialogComponent {
840
860
  loading: boolean;
841
861
  error: boolean;
842
862
  constructor(eventDisplay: EventDisplayService, fileLoader: FileLoaderService, dialogRef: MatDialogRef<EventDataExplorerDialogComponent>, dialogData: EventDataExplorerDialogData);
843
- loadEvent(file: FileEvent): void;
844
- loadConfig(file: FileEvent): void;
863
+ loadEvent(file: FileEvent): Promise<void>;
864
+ loadConfig(file: FileEvent): Promise<void>;
845
865
  onClose(): void;
846
866
  private buildFileNode;
847
867
  static ɵfac: i0.ɵɵFactoryDeclaration<EventDataExplorerDialogComponent, never>;
@@ -1032,12 +1052,186 @@ declare class EtaPhiPanelComponent implements OnInit, OnDestroy {
1032
1052
  static ɵcmp: i0.ɵɵComponentDeclaration<EtaPhiPanelComponent, "app-eta-phi-panel", never, {}, {}, never, never, false, never>;
1033
1053
  }
1034
1054
 
1055
+ /** Pre-computed row for display. */
1056
+ interface KinematicsRow {
1057
+ uuid: string;
1058
+ values: {
1059
+ [columnId: string]: number | string;
1060
+ };
1061
+ isCut: boolean;
1062
+ }
1063
+ declare class KinematicsPanelOverlayComponent implements OnInit, OnDestroy {
1064
+ private eventDisplay;
1065
+ private cdr;
1066
+ /** Visibility toggle — refreshes data when panel becomes visible. */
1067
+ private _showKinematics;
1068
+ set showKinematics(val: boolean);
1069
+ get showKinematics(): boolean;
1070
+ config: KinematicsConfig;
1071
+ /** Available collections matching the configured type. */
1072
+ collections: string[];
1073
+ /** Currently selected collection name. */
1074
+ selectedCollection: string;
1075
+ /** All rows before filtering. */
1076
+ allRows: KinematicsRow[];
1077
+ /** Filtered display rows. */
1078
+ rows: KinematicsRow[];
1079
+ /** Current sort state. */
1080
+ sortColumn: string;
1081
+ sortDirection: 'asc' | 'desc';
1082
+ /** Tracks the 3D-selected object for bidirectional highlighting. */
1083
+ activeObject: ActiveVariable<string>;
1084
+ /** Resolved group uuid for the currently active 3D object. */
1085
+ activeRowUuid: string;
1086
+ /** Filter threshold value (for pT cut etc.). */
1087
+ filterValue: number;
1088
+ /** Resolved filter column definition. */
1089
+ filterCol: KinematicsColumn | undefined;
1090
+ private unsubscribes;
1091
+ constructor(eventDisplay: EventDisplayService, cdr: ChangeDetectorRef);
1092
+ ngOnInit(): void;
1093
+ ngOnDestroy(): void;
1094
+ /** Reload collections and recompute rows. */
1095
+ refreshData(): void;
1096
+ /** Load and compute rows for a collection. */
1097
+ selectCollection(name: string): void;
1098
+ /** Toggle sort on a column. */
1099
+ sort(columnId: string): void;
1100
+ /** Update the filter threshold and refilter. */
1101
+ onFilterChange(value: string): void;
1102
+ /** Apply filter then sort. */
1103
+ private applyFilterAndSort;
1104
+ /** Highlight a track in 3D and update active object. */
1105
+ selectTrack(row: KinematicsRow): void;
1106
+ /** Pan camera to a track and highlight it. */
1107
+ lookAtTrack(uuid: string, event: Event): void;
1108
+ /** Keyboard navigation: arrow keys move between rows, Enter looks at track. */
1109
+ onKeyDown(event: KeyboardEvent): void;
1110
+ /** Export displayed rows as TSV. */
1111
+ exportTSV(): void;
1112
+ /** Format a value for display. */
1113
+ formatValue(value: number | string, col: KinematicsColumn): string;
1114
+ /** Get the charge sign class for colored +/- display. */
1115
+ getChargeClass(col: KinematicsColumn, value: number | string): string;
1116
+ /** Charge-based color for the row index number. */
1117
+ getChargeColor(row: KinematicsRow): string;
1118
+ static ɵfac: i0.ɵɵFactoryDeclaration<KinematicsPanelOverlayComponent, never>;
1119
+ static ɵcmp: i0.ɵɵComponentDeclaration<KinematicsPanelOverlayComponent, "app-kinematics-panel-overlay", never, { "showKinematics": { "alias": "showKinematics"; "required": false; }; "config": { "alias": "config"; "required": false; }; }, {}, never, never, false, never>;
1120
+ }
1121
+
1122
+ declare class KinematicsPanelComponent implements OnInit, OnDestroy, OnChanges {
1123
+ private overlay;
1124
+ showKinematics: boolean;
1125
+ overlayWindow: ComponentRef<KinematicsPanelOverlayComponent>;
1126
+ config?: KinematicsConfig;
1127
+ constructor(overlay: Overlay);
1128
+ ngOnInit(): void;
1129
+ ngOnChanges(changes: SimpleChanges): void;
1130
+ ngOnDestroy(): void;
1131
+ toggleOverlay(): void;
1132
+ static ɵfac: i0.ɵɵFactoryDeclaration<KinematicsPanelComponent, never>;
1133
+ static ɵcmp: i0.ɵɵComponentDeclaration<KinematicsPanelComponent, "app-kinematics-panel", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, false, never>;
1134
+ }
1135
+
1136
+ declare class MoreInfoComponent {
1137
+ uiConfig: UIMenuConfig;
1138
+ kinematicsConfig?: KinematicsConfig;
1139
+ infoPanel: InfoPanelComponent;
1140
+ eventBrowser: EventBrowserComponent;
1141
+ collectionsInfo: CollectionsInfoComponent;
1142
+ etaPhiPanel: EtaPhiPanelComponent;
1143
+ geometryBrowser: GeometryBrowserComponent;
1144
+ kinematicsPanel: KinematicsPanelComponent;
1145
+ showInfoPanel: boolean;
1146
+ showEventBrowser: boolean;
1147
+ showCollectionsInfo: boolean;
1148
+ showEtaPhiPanel: boolean;
1149
+ showGeometryBrowser: boolean;
1150
+ showKinematicsPanel: boolean;
1151
+ toggleInfoPanel(): void;
1152
+ toggleEventBrowser(): void;
1153
+ toggleCollectionsInfo(): void;
1154
+ toggleEtaPhiPanel(): void;
1155
+ toggleGeometryBrowser(): void;
1156
+ toggleKinematicsPanel(): void;
1157
+ static ɵfac: i0.ɵɵFactoryDeclaration<MoreInfoComponent, never>;
1158
+ static ɵcmp: i0.ɵɵComponentDeclaration<MoreInfoComponent, "app-more-info", never, { "uiConfig": { "alias": "uiConfig"; "required": false; }; "kinematicsConfig": { "alias": "kinematicsConfig"; "required": false; }; }, {}, never, never, false, never>;
1159
+ }
1160
+
1035
1161
  declare class UiMenuWrapperComponent {
1036
1162
  hideUIMenu: boolean;
1037
1163
  static ɵfac: i0.ɵɵFactoryDeclaration<UiMenuWrapperComponent, never>;
1038
1164
  static ɵcmp: i0.ɵɵComponentDeclaration<UiMenuWrapperComponent, "app-ui-menu-wrapper", never, {}, {}, never, ["*"], false, never>;
1039
1165
  }
1040
1166
 
1167
+ interface MassResult {
1168
+ eventType: string;
1169
+ mass: number;
1170
+ particleCount: number;
1171
+ }
1172
+ interface CollectionItem {
1173
+ index: number;
1174
+ uuid: string;
1175
+ userData: any;
1176
+ selected: boolean;
1177
+ pT: number;
1178
+ eta: number;
1179
+ phi: number;
1180
+ }
1181
+ declare class MasterclassPanelOverlayComponent implements OnInit, OnDestroy {
1182
+ private eventDisplay;
1183
+ showPanel: boolean;
1184
+ config: MasterclassConfig;
1185
+ collectionNames: string[];
1186
+ selectedCollection: string;
1187
+ collectionItems: CollectionItem[];
1188
+ taggedParticles: TaggedParticle[];
1189
+ massResults: MassResult[];
1190
+ statusMessage: string;
1191
+ statusType: 'info' | 'success' | 'warning';
1192
+ /** Live invariant mass of currently tagged particles. */
1193
+ get liveMass(): number;
1194
+ /** Live event type classification using experiment-specific classifier. */
1195
+ get liveEventType(): string;
1196
+ get selectedCount(): number;
1197
+ private unsubscribes;
1198
+ constructor(eventDisplay: EventDisplayService);
1199
+ ngOnInit(): void;
1200
+ ngOnDestroy(): void;
1201
+ private loadCollections;
1202
+ selectCollection(name: string): void;
1203
+ toggleItem(item: CollectionItem): void;
1204
+ highlightItem(uuid: string): void;
1205
+ tagSelectedAs(tagDef: ParticleTagDef): void;
1206
+ removeTagged(index: number): void;
1207
+ clearTagged(): void;
1208
+ recordResult(): void;
1209
+ removeResult(index: number): void;
1210
+ clearResults(): void;
1211
+ exportResults(): void;
1212
+ massGeV(mev: number): string;
1213
+ ptGeV(mev: number): string;
1214
+ /** Look up the tag definition for a tagged particle. */
1215
+ getTagDef(tagId: string): ParticleTagDef | undefined;
1216
+ private setStatus;
1217
+ static ɵfac: i0.ɵɵFactoryDeclaration<MasterclassPanelOverlayComponent, never>;
1218
+ static ɵcmp: i0.ɵɵComponentDeclaration<MasterclassPanelOverlayComponent, "app-masterclass-panel-overlay", never, { "showPanel": { "alias": "showPanel"; "required": false; }; "config": { "alias": "config"; "required": false; }; }, {}, never, never, false, never>;
1219
+ }
1220
+
1221
+ declare class MasterclassPanelComponent implements OnInit, OnDestroy, OnChanges {
1222
+ private overlay;
1223
+ config?: MasterclassConfig;
1224
+ showPanel: boolean;
1225
+ overlayWindow: ComponentRef<MasterclassPanelOverlayComponent>;
1226
+ constructor(overlay: Overlay);
1227
+ ngOnInit(): void;
1228
+ ngOnChanges(changes: SimpleChanges): void;
1229
+ ngOnDestroy(): void;
1230
+ toggleOverlay(): void;
1231
+ static ɵfac: i0.ɵɵFactoryDeclaration<MasterclassPanelComponent, never>;
1232
+ static ɵcmp: i0.ɵɵComponentDeclaration<MasterclassPanelComponent, "app-masterclass-panel", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, false, never>;
1233
+ }
1234
+
1041
1235
  declare class ErrorMessageService {
1042
1236
  /** A variable that stores the latest error thrown. */
1043
1237
  private error;
@@ -1103,9 +1297,76 @@ declare class AttributePipe implements PipeTransform {
1103
1297
 
1104
1298
  declare class PhoenixUIModule {
1105
1299
  static ɵfac: i0.ɵɵFactoryDeclaration<PhoenixUIModule, never>;
1106
- static ɵmod: i0.ɵɵNgModuleDeclaration<PhoenixUIModule, [typeof NavComponent, typeof UiMenuWrapperComponent, typeof UiMenuComponent, typeof CollectionsInfoComponent, typeof GeometryBrowserComponent, typeof GeometryBrowserOverlayComponent, typeof MenuToggleComponent, typeof CollectionsInfoOverlayComponent, typeof IoOptionsComponent, typeof IOOptionsDialogComponent, typeof OverlayViewComponent, typeof ObjectSelectionComponent, typeof ObjectSelectionOverlayComponent, typeof EventSelectorComponent, typeof ObjectClippingComponent, typeof DarkThemeComponent, typeof AutoRotateComponent, typeof ViewOptionsComponent, typeof CartesianGridConfigComponent, typeof OverlayViewWindowComponent, typeof OverlayComponent, typeof ExperimentInfoComponent, typeof InfoPanelComponent, typeof InfoPanelOverlayComponent, typeof MainViewToggleComponent, typeof ZoomControlsComponent, typeof TreeMenuComponent, typeof TreeMenuItemComponent, typeof PhoenixMenuComponent, typeof PhoenixMenuItemComponent, typeof ConfigSliderComponent, typeof AnimateCameraComponent, typeof AnimateEventComponent, typeof VrToggleComponent, typeof ArToggleComponent, typeof SSModeComponent, typeof MakePictureComponent, typeof PerformanceToggleComponent, typeof LoaderComponent, typeof ShareLinkComponent, typeof ShareLinkDialogComponent, typeof EmbedMenuComponent, typeof ExperimentLinkComponent, typeof EventDataExplorerComponent, typeof EventDataExplorerDialogComponent, typeof FileExplorerComponent, typeof RingLoaderComponent, typeof CycleEventsComponent, typeof EventBrowserComponent, typeof EventBrowserOverlayComponent, typeof EtaPhiPanelComponent, typeof EtaPhiPanelOverlayComponent], [typeof AttributePipe, typeof i54.CommonModule, typeof i55.RouterModule, typeof i56.DragDropModule, typeof i57.MatDialogModule, typeof i58.MatButtonModule, typeof i59.MatTooltipModule, typeof i60.OverlayModule, typeof i61.FormsModule, typeof i61.ReactiveFormsModule, typeof i62.MatMenuModule, typeof i63.MatRadioModule, typeof i64.MatSliderModule, typeof i65.MatSlideToggleModule, typeof i66.MatCheckboxModule, typeof i67.MatIconModule, typeof i68.CdkTreeModule, typeof i69.MatTabsModule], [typeof NavComponent, typeof UiMenuWrapperComponent, typeof UiMenuComponent, typeof CollectionsInfoComponent, typeof GeometryBrowserComponent, typeof GeometryBrowserOverlayComponent, typeof MenuToggleComponent, typeof CollectionsInfoOverlayComponent, typeof IoOptionsComponent, typeof IOOptionsDialogComponent, typeof OverlayViewComponent, typeof ObjectSelectionComponent, typeof ObjectSelectionOverlayComponent, typeof EventSelectorComponent, typeof ObjectClippingComponent, typeof DarkThemeComponent, typeof AutoRotateComponent, typeof ViewOptionsComponent, typeof CartesianGridConfigComponent, typeof OverlayViewWindowComponent, typeof OverlayComponent, typeof ExperimentInfoComponent, typeof InfoPanelComponent, typeof InfoPanelOverlayComponent, typeof MainViewToggleComponent, typeof ZoomControlsComponent, typeof TreeMenuComponent, typeof TreeMenuItemComponent, typeof PhoenixMenuComponent, typeof PhoenixMenuItemComponent, typeof ConfigSliderComponent, typeof AnimateCameraComponent, typeof AnimateEventComponent, typeof VrToggleComponent, typeof ArToggleComponent, typeof SSModeComponent, typeof MakePictureComponent, typeof PerformanceToggleComponent, typeof LoaderComponent, typeof ShareLinkComponent, typeof ShareLinkDialogComponent, typeof EmbedMenuComponent, typeof ExperimentLinkComponent, typeof EventDataExplorerComponent, typeof EventDataExplorerDialogComponent, typeof FileExplorerComponent, typeof RingLoaderComponent, typeof CycleEventsComponent, typeof EventBrowserComponent, typeof EventBrowserOverlayComponent, typeof EtaPhiPanelComponent, typeof EtaPhiPanelOverlayComponent, typeof AttributePipe]>;
1300
+ static ɵmod: i0.ɵɵNgModuleDeclaration<PhoenixUIModule, [typeof NavComponent, typeof UiMenuWrapperComponent, typeof UiMenuComponent, typeof MoreInfoComponent, typeof CollectionsInfoComponent, typeof GeometryBrowserComponent, typeof GeometryBrowserOverlayComponent, typeof MenuToggleComponent, typeof CollectionsInfoOverlayComponent, typeof IoOptionsComponent, typeof IOOptionsDialogComponent, typeof OverlayViewComponent, typeof ObjectSelectionComponent, typeof ObjectSelectionOverlayComponent, typeof EventSelectorComponent, typeof ObjectClippingComponent, typeof DarkThemeComponent, typeof AutoRotateComponent, typeof ViewOptionsComponent, typeof CartesianGridConfigComponent, typeof OverlayViewWindowComponent, typeof OverlayComponent, typeof ExperimentInfoComponent, typeof InfoPanelComponent, typeof InfoPanelOverlayComponent, typeof MainViewToggleComponent, typeof ZoomControlsComponent, typeof TreeMenuComponent, typeof TreeMenuItemComponent, typeof PhoenixMenuComponent, typeof PhoenixMenuItemComponent, typeof ConfigSliderComponent, typeof AnimateCameraComponent, typeof AnimateEventComponent, typeof VrToggleComponent, typeof ArToggleComponent, typeof SSModeComponent, typeof MakePictureComponent, typeof PerformanceToggleComponent, typeof LoaderComponent, typeof ShareLinkComponent, typeof ShareLinkDialogComponent, typeof EmbedMenuComponent, typeof ExperimentLinkComponent, typeof EventDataExplorerComponent, typeof EventDataExplorerDialogComponent, typeof FileExplorerComponent, typeof RingLoaderComponent, typeof CycleEventsComponent, typeof EventBrowserComponent, typeof EventBrowserOverlayComponent, typeof EtaPhiPanelComponent, typeof EtaPhiPanelOverlayComponent, typeof KinematicsPanelComponent, typeof KinematicsPanelOverlayComponent, typeof MasterclassPanelComponent, typeof MasterclassPanelOverlayComponent], [typeof AttributePipe, typeof i59.CommonModule, typeof i60.RouterModule, typeof i61.DragDropModule, typeof i62.MatDialogModule, typeof i63.MatButtonModule, typeof i64.MatTooltipModule, typeof i65.OverlayModule, typeof i66.FormsModule, typeof i66.ReactiveFormsModule, typeof i67.MatMenuModule, typeof i68.MatRadioModule, typeof i69.MatSliderModule, typeof i70.MatSlideToggleModule, typeof i71.MatCheckboxModule, typeof i72.MatIconModule, typeof i73.CdkTreeModule, typeof i74.MatTabsModule], [typeof NavComponent, typeof UiMenuWrapperComponent, typeof UiMenuComponent, typeof MoreInfoComponent, typeof CollectionsInfoComponent, typeof GeometryBrowserComponent, typeof GeometryBrowserOverlayComponent, typeof MenuToggleComponent, typeof CollectionsInfoOverlayComponent, typeof IoOptionsComponent, typeof IOOptionsDialogComponent, typeof OverlayViewComponent, typeof ObjectSelectionComponent, typeof ObjectSelectionOverlayComponent, typeof EventSelectorComponent, typeof ObjectClippingComponent, typeof DarkThemeComponent, typeof AutoRotateComponent, typeof ViewOptionsComponent, typeof CartesianGridConfigComponent, typeof OverlayViewWindowComponent, typeof OverlayComponent, typeof ExperimentInfoComponent, typeof InfoPanelComponent, typeof InfoPanelOverlayComponent, typeof MainViewToggleComponent, typeof ZoomControlsComponent, typeof TreeMenuComponent, typeof TreeMenuItemComponent, typeof PhoenixMenuComponent, typeof PhoenixMenuItemComponent, typeof ConfigSliderComponent, typeof AnimateCameraComponent, typeof AnimateEventComponent, typeof VrToggleComponent, typeof ArToggleComponent, typeof SSModeComponent, typeof MakePictureComponent, typeof PerformanceToggleComponent, typeof LoaderComponent, typeof ShareLinkComponent, typeof ShareLinkDialogComponent, typeof EmbedMenuComponent, typeof ExperimentLinkComponent, typeof EventDataExplorerComponent, typeof EventDataExplorerDialogComponent, typeof FileExplorerComponent, typeof RingLoaderComponent, typeof CycleEventsComponent, typeof EventBrowserComponent, typeof EventBrowserOverlayComponent, typeof EtaPhiPanelComponent, typeof EtaPhiPanelOverlayComponent, typeof KinematicsPanelComponent, typeof KinematicsPanelOverlayComponent, typeof MasterclassPanelComponent, typeof MasterclassPanelOverlayComponent, typeof AttributePipe]>;
1107
1301
  static ɵinj: i0.ɵɵInjectorDeclaration<PhoenixUIModule>;
1108
1302
  }
1109
1303
 
1110
- export { AnimateCameraComponent, AnimateEventComponent, ArToggleComponent, AttributePipe, AutoRotateComponent, CartesianGridConfigComponent, CollectionsInfoComponent, CollectionsInfoOverlayComponent, ConfigSliderComponent, CycleEventsComponent, DarkThemeComponent, EmbedMenuComponent, EtaPhiPanelComponent, EtaPhiPanelOverlayComponent, EventBrowserComponent, EventBrowserOverlayComponent, EventDataExplorerComponent, EventDataExplorerDialogComponent, EventDataFormat, EventDisplayService, EventSelectorComponent, ExperimentInfoComponent, ExperimentLinkComponent, FileEvent, FileExplorerComponent, FileNode, GeometryBrowserComponent, GeometryBrowserOverlayComponent, IOOptionsDialogComponent, ImportOption, InfoPanelComponent, InfoPanelOverlayComponent, IoOptionsComponent, LoaderComponent, MainViewToggleComponent, MakePictureComponent, MenuToggleComponent, NavComponent, ObjectClippingComponent, ObjectSelectionComponent, ObjectSelectionOverlayComponent, OverlayComponent, OverlayViewComponent, OverlayViewWindowComponent, PerformanceToggleComponent, PhoenixMenuComponent, PhoenixMenuItemComponent, PhoenixUIModule, RingLoaderComponent, SSModeComponent, ShareLinkComponent, ShareLinkDialogComponent, TreeMenuComponent, TreeMenuItemComponent, UiMenuComponent, UiMenuWrapperComponent, ViewOptionsComponent, VrToggleComponent, ZoomControlsComponent, defaultAnimationPresets, defaultUIMenuConfig };
1111
- export type { EventDataExplorerDialogData, EventDataImportOption, FileResponse, TreeMenuNode, UIMenuConfig };
1304
+ /** Severity levels for notifications. */
1305
+ type NotificationSeverity = 'success' | 'info' | 'warning' | 'error';
1306
+ /** A notification message with severity and content. */
1307
+ interface Notification {
1308
+ /** The message to display to the user. */
1309
+ message: string;
1310
+ /** The severity level of the notification. */
1311
+ severity: NotificationSeverity;
1312
+ /** Duration in milliseconds before auto-dismiss. 0 means no auto-dismiss. */
1313
+ duration: number;
1314
+ }
1315
+ /**
1316
+ * Service for displaying user-facing notifications with severity levels.
1317
+ * Provides success, info, warning, and error notifications with
1318
+ * configurable auto-dismiss durations. Replaces silent console errors
1319
+ * with actionable user feedback across all Phoenix components.
1320
+ */
1321
+ declare class NotificationService {
1322
+ /** Default auto-dismiss durations in milliseconds per severity level. */
1323
+ private readonly defaultDurations;
1324
+ /** Active variable that stores the latest notification. */
1325
+ private notification;
1326
+ /**
1327
+ * Subscribe to incoming notifications.
1328
+ * @param callback Function called when a notification is emitted.
1329
+ * @returns A function that can be called to unsubscribe.
1330
+ */
1331
+ subscribeToNotifications(callback: (notification: Notification) => void): () => void;
1332
+ /**
1333
+ * Display a success notification.
1334
+ * Auto-dismisses after 5 seconds by default.
1335
+ * @param message The message to display.
1336
+ * @param duration Optional custom duration in ms. 0 means no auto-dismiss.
1337
+ */
1338
+ success(message: string, duration?: number): void;
1339
+ /**
1340
+ * Display an info notification.
1341
+ * Auto-dismisses after 5 seconds by default.
1342
+ * @param message The message to display.
1343
+ * @param duration Optional custom duration in ms. 0 means no auto-dismiss.
1344
+ */
1345
+ info(message: string, duration?: number): void;
1346
+ /**
1347
+ * Display a warning notification.
1348
+ * Auto-dismisses after 8 seconds by default.
1349
+ * @param message The message to display.
1350
+ * @param duration Optional custom duration in ms. 0 means no auto-dismiss.
1351
+ */
1352
+ warning(message: string, duration?: number): void;
1353
+ /**
1354
+ * Display an error notification.
1355
+ * Does not auto-dismiss by default — requires manual dismissal.
1356
+ * @param message The message to display.
1357
+ * @param duration Optional custom duration in ms. 0 means no auto-dismiss.
1358
+ */
1359
+ error(message: string, duration?: number): void;
1360
+ /**
1361
+ * Internal method to emit a notification.
1362
+ * @param message The message to display.
1363
+ * @param severity The severity level.
1364
+ * @param duration Optional custom duration override.
1365
+ */
1366
+ private notify;
1367
+ static ɵfac: i0.ɵɵFactoryDeclaration<NotificationService, never>;
1368
+ static ɵprov: i0.ɵɵInjectableDeclaration<NotificationService>;
1369
+ }
1370
+
1371
+ export { AnimateCameraComponent, AnimateEventComponent, ArToggleComponent, AttributePipe, AutoRotateComponent, CartesianGridConfigComponent, CollectionsInfoComponent, CollectionsInfoOverlayComponent, ConfigSliderComponent, CycleEventsComponent, DarkThemeComponent, EmbedMenuComponent, EtaPhiPanelComponent, EtaPhiPanelOverlayComponent, EventBrowserComponent, EventBrowserOverlayComponent, EventDataExplorerComponent, EventDataExplorerDialogComponent, EventDataFormat, EventDisplayService, EventSelectorComponent, ExperimentInfoComponent, ExperimentLinkComponent, FileEvent, FileExplorerComponent, FileNode, GeometryBrowserComponent, GeometryBrowserOverlayComponent, IOOptionsDialogComponent, ImportOption, InfoPanelComponent, InfoPanelOverlayComponent, IoOptionsComponent, KinematicsPanelComponent, KinematicsPanelOverlayComponent, LoaderComponent, MainViewToggleComponent, MakePictureComponent, MasterclassPanelComponent, MasterclassPanelOverlayComponent, MenuToggleComponent, MoreInfoComponent, NavComponent, NotificationService, ObjectClippingComponent, ObjectSelectionComponent, ObjectSelectionOverlayComponent, OverlayComponent, OverlayViewComponent, OverlayViewWindowComponent, PerformanceToggleComponent, PhoenixMenuComponent, PhoenixMenuItemComponent, PhoenixUIModule, RingLoaderComponent, SSModeComponent, ShareLinkComponent, ShareLinkDialogComponent, TreeMenuComponent, TreeMenuItemComponent, UiMenuComponent, UiMenuWrapperComponent, ViewOptionsComponent, VrToggleComponent, ZoomControlsComponent, defaultAnimationPresets, defaultUIMenuConfig };
1372
+ export type { EventDataExplorerDialogData, EventDataImportOption, FileResponse, Notification, NotificationSeverity, TreeMenuNode, UIMenuConfig };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "phoenix-ui-components",
3
- "version": "3.0.6",
3
+ "version": "4.0.0",
4
4
  "description": "Reusable Angular components of the Phoenix event display application.",
5
5
  "author": "Phoenix contributors (https://github.com/HSF/phoenix/graphs/contributors)",
6
6
  "license": "Apache-2.0",
@@ -25,11 +25,11 @@
25
25
  "zone.js": "*"
26
26
  },
27
27
  "dependencies": {
28
- "@angular/animations": "^20.3.16",
28
+ "@angular/animations": "^20.3.23",
29
29
  "@angular/cdk": "^20.2.14",
30
- "@angular/forms": "^20.3.16",
30
+ "@angular/forms": "^20.3.23",
31
31
  "@angular/material": "^20.2.14",
32
- "@angular/platform-browser": "^20.3.16",
32
+ "@angular/platform-browser": "^20.3.23",
33
33
  "css-element-queries": "^1.2.3",
34
34
  "qrcode": "1.5.4",
35
35
  "rxjs": "^7.8.2",
@@ -48,5 +48,5 @@
48
48
  "sass": "./_theming.scss"
49
49
  }
50
50
  },
51
- "gitHead": "da086082d26c1f972e8a645d3e3dc2c251c56186"
51
+ "gitHead": "e6246f6406e8b24af9a5a47c5113d52a614211d7"
52
52
  }