phoenix-ui-components 4.0.0 → 4.1.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,34 @@
1
1
  import * as i0 from '@angular/core';
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';
2
+ import { OnInit, EventEmitter, ElementRef, ChangeDetectorRef, OnDestroy, NgZone, ComponentRef, AfterViewInit, QueryList, OnChanges, SimpleChanges, PipeTransform } from '@angular/core';
3
+ import * as i76 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, Configuration, AnimationPreset, PrettySymbols, ActiveVariable, PresetView, KinematicsConfig, MasterclassConfig, EventSummary, KinematicsColumn, TaggedParticle, ParticleTagDef } from 'phoenix-event-display';
7
- import * as i65 from '@angular/cdk/overlay';
8
- import { Overlay } from '@angular/cdk/overlay';
9
- import { Object3D, Object3DEventMap, Vector3 } from 'three';
10
- import * as i62 from '@angular/material/dialog';
6
+ import { PhoenixMenuNode, EventDisplay, Configuration, AnimationPreset, PrettySymbols, ActiveVariable, PresetView, KinematicsConfig, MasterclassConfig, EventSummary, KinematicsColumn, TaggedParticle, ParticleTagDef, SessionState } from 'phoenix-event-display';
7
+ import * as i67 from '@angular/material/dialog';
11
8
  import { MatDialog, MatDialogRef } from '@angular/material/dialog';
12
- import { Subscription } from 'rxjs';
13
- import * as i67 from '@angular/material/menu';
9
+ import * as i62 from '@angular/material/snack-bar';
10
+ import { MatSnackBar } from '@angular/material/snack-bar';
11
+ import { Observable, Subscription } from 'rxjs';
12
+ import * as i70 from '@angular/cdk/overlay';
13
+ import { Overlay, GlobalPositionStrategy } from '@angular/cdk/overlay';
14
+ import { Object3D, Object3DEventMap, Vector3 } from 'three';
15
+ import * as i72 from '@angular/material/menu';
14
16
  import { MatMenuTrigger } from '@angular/material/menu';
15
- import * as i73 from '@angular/cdk/tree';
17
+ import * as i78 from '@angular/cdk/tree';
16
18
  import { NestedTreeControl } from '@angular/cdk/tree';
17
19
  import { MatTreeNestedDataSource } from '@angular/material/tree';
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';
20
+ import * as i64 from '@angular/common';
21
+ import * as i65 from '@angular/router';
22
+ import * as i66 from '@angular/cdk/drag-drop';
23
+ import * as i68 from '@angular/material/button';
24
+ import * as i69 from '@angular/material/tooltip';
25
+ import * as i71 from '@angular/forms';
26
+ import * as i73 from '@angular/material/radio';
27
+ import * as i74 from '@angular/material/slider';
28
+ import * as i75 from '@angular/material/slide-toggle';
29
+ import * as i77 from '@angular/material/icon';
30
+ import * as i79 from '@angular/material/tabs';
31
+ import * as i80 from '@angular/material/progress-bar';
29
32
 
30
33
  declare class NavComponent implements OnInit {
31
34
  constructor();
@@ -56,6 +59,17 @@ declare class PhoenixMenuItemComponent {
56
59
  phoenixMenuItem: ElementRef<HTMLDivElement>;
57
60
  configTop: number;
58
61
  constructor(cdr: ChangeDetectorRef);
62
+ /**
63
+ * Whether a node is a leaf holding only configs (like the collections'
64
+ * "Draw/Cut/Color Options"), which is displayed as a compact icon button
65
+ * in a toolbar instead of a full menu row.
66
+ */
67
+ isCompactOptionsNode(node: PhoenixMenuNode): boolean;
68
+ get isCompact(): boolean;
69
+ /** Label for the compact icon button, e.g. "Draw Options" -> "Draw". */
70
+ get compactLabel(): string;
71
+ get compactChildren(): PhoenixMenuNode[];
72
+ get regularChildren(): PhoenixMenuNode[];
59
73
  calculateConfigTop(): void;
60
74
  castConfigsToAny(configs: PhoenixMenuNode['configs']): any[];
61
75
  static ɵfac: i0.ɵɵFactoryDeclaration<PhoenixMenuItemComponent, never>;
@@ -63,11 +77,110 @@ declare class PhoenixMenuItemComponent {
63
77
  }
64
78
 
65
79
  declare class PhoenixMenuComponent {
80
+ private dialog;
66
81
  rootNode: PhoenixMenuNode;
82
+ constructor(dialog: MatDialog);
83
+ openShortcutsDialog(): void;
67
84
  static ɵfac: i0.ɵɵFactoryDeclaration<PhoenixMenuComponent, never>;
68
85
  static ɵcmp: i0.ɵɵComponentDeclaration<PhoenixMenuComponent, "app-phoenix-menu", never, { "rootNode": { "alias": "rootNode"; "required": false; }; }, {}, never, never, false, never>;
69
86
  }
70
87
 
88
+ declare class ShortcutsDialogComponent {
89
+ dialogRef: MatDialogRef<ShortcutsDialogComponent>;
90
+ constructor(dialogRef: MatDialogRef<ShortcutsDialogComponent>);
91
+ onClose(): void;
92
+ static ɵfac: i0.ɵɵFactoryDeclaration<ShortcutsDialogComponent, never>;
93
+ static ɵcmp: i0.ɵɵComponentDeclaration<ShortcutsDialogComponent, "app-shortcuts-dialog", never, {}, {}, never, never, false, never>;
94
+ }
95
+
96
+ /** Severity levels for notifications. */
97
+ type NotificationSeverity = 'success' | 'info' | 'warning' | 'error';
98
+ /** A notification message with severity and content. */
99
+ interface Notification {
100
+ /** The message to display to the user. */
101
+ message: string;
102
+ /** The severity level of the notification. */
103
+ severity: NotificationSeverity;
104
+ /** Duration in milliseconds before auto-dismiss. 0 means no auto-dismiss. */
105
+ duration: number;
106
+ }
107
+ /**
108
+ * Service for displaying user-facing notifications with severity levels.
109
+ * Provides success, info, warning, and error notifications with
110
+ * configurable auto-dismiss durations. Replaces silent console errors
111
+ * with actionable user feedback across all Phoenix components.
112
+ */
113
+ declare class NotificationService {
114
+ /** Default auto-dismiss durations in milliseconds per severity level. */
115
+ private readonly defaultDurations;
116
+ /** Active variable that stores the latest notification. */
117
+ private notification;
118
+ /**
119
+ * Subscribe to incoming notifications.
120
+ * @param callback Function called when a notification is emitted.
121
+ * @returns A function that can be called to unsubscribe.
122
+ */
123
+ subscribeToNotifications(callback: (notification: Notification) => void): () => void;
124
+ /**
125
+ * Display a success notification.
126
+ * Auto-dismisses after 5 seconds by default.
127
+ * @param message The message to display.
128
+ * @param duration Optional custom duration in ms. 0 means no auto-dismiss.
129
+ */
130
+ success(message: string, duration?: number): void;
131
+ /**
132
+ * Display an info notification.
133
+ * Auto-dismisses after 5 seconds by default.
134
+ * @param message The message to display.
135
+ * @param duration Optional custom duration in ms. 0 means no auto-dismiss.
136
+ */
137
+ info(message: string, duration?: number): void;
138
+ /**
139
+ * Display a warning notification.
140
+ * Auto-dismisses after 8 seconds by default.
141
+ * @param message The message to display.
142
+ * @param duration Optional custom duration in ms. 0 means no auto-dismiss.
143
+ */
144
+ warning(message: string, duration?: number): void;
145
+ /**
146
+ * Display an error notification.
147
+ * Does not auto-dismiss by default — requires manual dismissal.
148
+ * @param message The message to display.
149
+ * @param duration Optional custom duration in ms. 0 means no auto-dismiss.
150
+ */
151
+ error(message: string, duration?: number): void;
152
+ /**
153
+ * Internal method to emit a notification.
154
+ * @param message The message to display.
155
+ * @param severity The severity level.
156
+ * @param duration Optional custom duration override.
157
+ */
158
+ private notify;
159
+ static ɵfac: i0.ɵɵFactoryDeclaration<NotificationService, never>;
160
+ static ɵprov: i0.ɵɵInjectableDeclaration<NotificationService>;
161
+ }
162
+
163
+ /**
164
+ * Component that subscribes to NotificationService and displays
165
+ * transient toast notifications via MatSnackBar.
166
+ *
167
+ * Severity levels map to CSS panel classes:
168
+ * - success → notification-success
169
+ * - info → notification-info
170
+ * - warning → notification-warning
171
+ * - error → notification-error
172
+ */
173
+ declare class NotificationToastComponent implements OnInit, OnDestroy {
174
+ private notificationService;
175
+ private snackBar;
176
+ private unsubscribe;
177
+ constructor(notificationService: NotificationService, snackBar: MatSnackBar);
178
+ ngOnInit(): void;
179
+ ngOnDestroy(): void;
180
+ static ɵfac: i0.ɵɵFactoryDeclaration<NotificationToastComponent, never>;
181
+ static ɵcmp: i0.ɵɵComponentDeclaration<NotificationToastComponent, "app-notification-toast", never, {}, {}, never, never, false, never>;
182
+ }
183
+
71
184
  /**
72
185
  * Service for all event display related functions.
73
186
  */
@@ -101,19 +214,36 @@ declare const defaultAnimationPresets: {
101
214
  };
102
215
  declare class AnimateCameraComponent {
103
216
  private eventDisplay;
217
+ private dialog;
104
218
  animationPresets: {
105
219
  [key: string]: AnimationPreset;
106
220
  };
107
221
  animationPresetsKeys: string[];
108
222
  isAnimating: boolean;
109
- constructor(eventDisplay: EventDisplayService);
110
- animatePreset(preset: string): void;
111
- animateCamera(): void;
223
+ constructor(eventDisplay: EventDisplayService, dialog: MatDialog);
224
+ playPreset(preset: string): void;
225
+ playAnimateCamera(): void;
226
+ downloadAnimation(preset?: string): void;
227
+ animatePreset(preset: string, onEnd?: () => void): void;
228
+ animateCamera(onEnd?: () => void): void;
112
229
  private setDetectorOpacity;
113
230
  static ɵfac: i0.ɵɵFactoryDeclaration<AnimateCameraComponent, never>;
114
231
  static ɵcmp: i0.ɵɵComponentDeclaration<AnimateCameraComponent, "app-animate-camera", never, { "animationPresets": { "alias": "animationPresets"; "required": false; }; }, {}, never, never, false, never>;
115
232
  }
116
233
 
234
+ declare class DownloadAnimationDialogComponent implements OnInit {
235
+ data: {
236
+ progress$: Observable<number>;
237
+ };
238
+ progress: number;
239
+ constructor(data: {
240
+ progress$: Observable<number>;
241
+ });
242
+ ngOnInit(): void;
243
+ static ɵfac: i0.ɵɵFactoryDeclaration<DownloadAnimationDialogComponent, never>;
244
+ static ɵcmp: i0.ɵɵComponentDeclaration<DownloadAnimationDialogComponent, "app-download-animation-dialog", never, {}, {}, never, never, false, never>;
245
+ }
246
+
117
247
  declare class AnimateEventComponent {
118
248
  private eventDisplay;
119
249
  isAnimating: boolean;
@@ -164,6 +294,7 @@ declare class CollectionsInfoOverlayComponent implements OnInit, OnDestroy {
164
294
  enableHighlighting(): void;
165
295
  disableHighlighting(): void;
166
296
  toggleInvisible(checked: boolean): void;
297
+ formatValue(value: any): string;
167
298
  addLabel(index: number, uuid: string): void;
168
299
  private getEventDataGroup;
169
300
  static ɵfac: i0.ɵɵFactoryDeclaration<CollectionsInfoOverlayComponent, never>;
@@ -276,11 +407,24 @@ declare class InfoPanelOverlayComponent implements OnInit {
276
407
  static ɵcmp: i0.ɵɵComponentDeclaration<InfoPanelOverlayComponent, "app-info-panel-overlay", never, { "showInfoPanel": { "alias": "showInfoPanel"; "required": false; }; }, {}, never, never, false, never>;
277
408
  }
278
409
 
410
+ declare class OverlayCascadeService {
411
+ private overlay;
412
+ private cascadeCount;
413
+ private topOffset;
414
+ private leftOffset;
415
+ private step;
416
+ constructor(overlay: Overlay);
417
+ getCascadePositionStrategy(): GlobalPositionStrategy;
418
+ static ɵfac: i0.ɵɵFactoryDeclaration<OverlayCascadeService, never>;
419
+ static ɵprov: i0.ɵɵInjectableDeclaration<OverlayCascadeService>;
420
+ }
421
+
279
422
  /**
280
423
  * Component for toggling info panel overlay
281
424
  */
282
425
  declare class InfoPanelComponent implements OnInit, OnDestroy {
283
426
  private overlay;
427
+ private overlayCascade;
284
428
  /** @ignore */
285
429
  showInfoPanel: boolean;
286
430
  /** Information panel overlay window */
@@ -289,7 +433,7 @@ declare class InfoPanelComponent implements OnInit, OnDestroy {
289
433
  * Create the info panel toggle
290
434
  * @param overlay Info panel overlay containing logger data
291
435
  */
292
- constructor(overlay: Overlay);
436
+ constructor(overlay: Overlay, overlayCascade: OverlayCascadeService);
293
437
  /**
294
438
  * Create the info panel overlay
295
439
  */
@@ -311,6 +455,7 @@ declare enum EventDataFormat {
311
455
  EDM4HEPJSON = "EDM4HEPJSON",
312
456
  JIVEXML = "JIVEXML",
313
457
  PHYSLITE = "PHYSLITE",
458
+ ATLASESD = "ATLASESD",
314
459
  IG = "IG",
315
460
  ZIP = "ZIP"
316
461
  }
@@ -335,10 +480,11 @@ declare class IoOptionsComponent {
335
480
  declare class IOOptionsDialogComponent implements OnInit {
336
481
  private eventDisplay;
337
482
  dialogRef: MatDialogRef<IOOptionsDialogComponent>;
483
+ private notificationService;
338
484
  eventDataImportOptions: EventDataImportOption[];
339
485
  eventDataOptionsWithHandler: ImportOption[];
340
486
  private supportedEventDataFormats;
341
- constructor(eventDisplay: EventDisplayService, dialogRef: MatDialogRef<IOOptionsDialogComponent>);
487
+ constructor(eventDisplay: EventDisplayService, dialogRef: MatDialogRef<IOOptionsDialogComponent>, notificationService: NotificationService);
342
488
  ngOnInit(): void;
343
489
  getSupportedEventDataFormats(): string;
344
490
  onClose(): void;
@@ -353,6 +499,7 @@ declare class IOOptionsDialogComponent implements OnInit {
353
499
  handleROOTInput(files: FileList): Promise<void>;
354
500
  handleRootJSONInput(files: FileList): Promise<void>;
355
501
  handlePHYSLITEInput(files: FileList): Promise<void>;
502
+ handleATLASESDInput(files: FileList): Promise<void>;
356
503
  handleIgEventDataInput(files: FileList): void;
357
504
  handleZipEventDataInput(files: FileList): Promise<void>;
358
505
  handleFileInput(file: File, extensions: string, callback: (result: string, fileName?: string) => void): void;
@@ -426,12 +573,15 @@ declare class ObjectSelectionComponent implements OnInit, OnDestroy {
426
573
  /**
427
574
  * Component for overlay panel.
428
575
  */
429
- declare class OverlayComponent implements AfterViewInit, OnDestroy {
576
+ declare class OverlayComponent implements OnInit, AfterViewInit, OnDestroy {
430
577
  private eventDisplay;
578
+ private elementRef;
431
579
  /** Title of the overlay. */
432
580
  overlayTitle: string;
433
581
  /** If the overlay is open or not. */
434
- active: boolean;
582
+ private _active;
583
+ set active(value: boolean);
584
+ get active(): boolean;
435
585
  /** Icon of the overlay header. */
436
586
  icon: string;
437
587
  /** If the overlay is resizable. */
@@ -456,7 +606,11 @@ declare class OverlayComponent implements AfterViewInit, OnDestroy {
456
606
  private MIN_RES_WIDTH;
457
607
  /** Minimum resizable height */
458
608
  private MIN_RES_HEIGHT;
459
- constructor(eventDisplay: EventDisplayService);
609
+ constructor(eventDisplay: EventDisplayService, elementRef: ElementRef);
610
+ ngOnInit(): void;
611
+ toggleBodyAndEmit(): void;
612
+ /** Bring the overlay to the front. */
613
+ bringToFront(): void;
460
614
  /**
461
615
  * Move the resizable handle to the bottom right after the component is created.
462
616
  */
@@ -768,6 +922,8 @@ declare class ShareLinkDialogComponent implements AfterViewInit, OnDestroy {
768
922
  state: string;
769
923
  hideWidgets: boolean;
770
924
  embed: boolean;
925
+ replay: string;
926
+ session: string;
771
927
  };
772
928
  qrcodeCanvas: ElementRef<HTMLCanvasElement>;
773
929
  private unsubscribe;
@@ -1042,9 +1198,10 @@ declare class EtaPhiPanelOverlayComponent implements OnInit, OnDestroy, AfterVie
1042
1198
 
1043
1199
  declare class EtaPhiPanelComponent implements OnInit, OnDestroy {
1044
1200
  private overlay;
1201
+ private overlayCascade;
1045
1202
  showPanel: boolean;
1046
1203
  overlayWindow: ComponentRef<EtaPhiPanelOverlayComponent>;
1047
- constructor(overlay: Overlay);
1204
+ constructor(overlay: Overlay, overlayCascade: OverlayCascadeService);
1048
1205
  ngOnInit(): void;
1049
1206
  ngOnDestroy(): void;
1050
1207
  toggleOverlay(): void;
@@ -1121,10 +1278,11 @@ declare class KinematicsPanelOverlayComponent implements OnInit, OnDestroy {
1121
1278
 
1122
1279
  declare class KinematicsPanelComponent implements OnInit, OnDestroy, OnChanges {
1123
1280
  private overlay;
1281
+ private overlayCascade;
1124
1282
  showKinematics: boolean;
1125
1283
  overlayWindow: ComponentRef<KinematicsPanelOverlayComponent>;
1126
1284
  config?: KinematicsConfig;
1127
- constructor(overlay: Overlay);
1285
+ constructor(overlay: Overlay, overlayCascade: OverlayCascadeService);
1128
1286
  ngOnInit(): void;
1129
1287
  ngOnChanges(changes: SimpleChanges): void;
1130
1288
  ngOnDestroy(): void;
@@ -1232,6 +1390,82 @@ declare class MasterclassPanelComponent implements OnInit, OnDestroy, OnChanges
1232
1390
  static ɵcmp: i0.ɵɵComponentDeclaration<MasterclassPanelComponent, "app-masterclass-panel", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, false, never>;
1233
1391
  }
1234
1392
 
1393
+ /**
1394
+ * Floating session pill (#883). Renders only while the session manager is
1395
+ * recording, paused, finished, or playing a replay. Idle state hides the
1396
+ * pill entirely so it adds zero footprint to the toolbar.
1397
+ */
1398
+ declare class SessionPillComponent implements OnInit, OnDestroy {
1399
+ private eventDisplay;
1400
+ private cdr;
1401
+ /** Current session-manager state, kept in component for template binding. */
1402
+ state: SessionState;
1403
+ /** Cached duration label for the recording elapsed clock. */
1404
+ durationLabel: string;
1405
+ /** Cached current/total label for the playback clock. */
1406
+ playbackLabel: string;
1407
+ /** Cached event count for the recording badge. */
1408
+ eventCount: number;
1409
+ /** Last computed scrub percent (0-100). */
1410
+ scrubPercent: number;
1411
+ /** Saved copy-link feedback flag (resets after a tick). */
1412
+ linkCopied: boolean;
1413
+ /** Available playback speeds for the speed selector. */
1414
+ speeds: readonly (1 | 2 | 4 | 0.5)[];
1415
+ private sessionManager;
1416
+ private unsubscribeState;
1417
+ private recordingClockId;
1418
+ private copiedResetTimer;
1419
+ constructor(eventDisplay: EventDisplayService, cdr: ChangeDetectorRef);
1420
+ ngOnInit(): void;
1421
+ ngOnDestroy(): void;
1422
+ /** True when the pill should be visible. Idle state hides it. */
1423
+ get visible(): boolean;
1424
+ /** Stop an active recording from the pill's stop button. */
1425
+ onStopRecording(): void;
1426
+ /** Dismiss a recorded/finished/errored state and return to idle. */
1427
+ onDismiss(): void;
1428
+ /** Start a pending (link-supplied) session after explicit user confirmation. */
1429
+ onPlayPending(): void;
1430
+ /** Source label + duration/event summary for the pending confirm prompt. */
1431
+ get pendingSummary(): string;
1432
+ /** Toggle play/pause on the active player. */
1433
+ onTogglePlayback(): void;
1434
+ /** Scrub to the playhead position the user clicked. */
1435
+ onScrub(value: number): void;
1436
+ /** Change the active player's speed. */
1437
+ onSpeed(speed: 0.5 | 1 | 2 | 4): void;
1438
+ /** Download the recorded session as a .phnxreplay JSON file. */
1439
+ onDownload(): void;
1440
+ /**
1441
+ * Copy a ?replay=... share link to the clipboard. The base64 is precomputed
1442
+ * when recording stops, so the common path writes synchronously inside the
1443
+ * click gesture (the async Clipboard API rejects writes that happen after an
1444
+ * await, which expires the user activation). Falls back to execCommand.
1445
+ */
1446
+ onCopyLink(): void;
1447
+ /** Build the share URL for a base64 payload and copy it to the clipboard. */
1448
+ private copyShareLink;
1449
+ /**
1450
+ * Legacy clipboard copy via a temporary textarea + execCommand. Used as a
1451
+ * fallback when the async Clipboard API is unavailable or rejected. Mirrors
1452
+ * the share-link dialog's proven approach.
1453
+ * @param text The text to copy.
1454
+ * @returns True if the copy command reported success.
1455
+ */
1456
+ private legacyCopy;
1457
+ /** Active player duration (ms) for the scrub bar max value. */
1458
+ get playerDuration(): number;
1459
+ /** Active player current speed for the selector highlight. */
1460
+ get currentSpeed(): number;
1461
+ private refreshDerived;
1462
+ private startRecordingClock;
1463
+ private stopRecordingClock;
1464
+ private updateRecordingDerived;
1465
+ static ɵfac: i0.ɵɵFactoryDeclaration<SessionPillComponent, never>;
1466
+ static ɵcmp: i0.ɵɵComponentDeclaration<SessionPillComponent, "app-session-pill", never, {}, {}, never, never, false, never>;
1467
+ }
1468
+
1235
1469
  declare class ErrorMessageService {
1236
1470
  /** A variable that stores the latest error thrown. */
1237
1471
  private error;
@@ -1297,76 +1531,9 @@ declare class AttributePipe implements PipeTransform {
1297
1531
 
1298
1532
  declare class PhoenixUIModule {
1299
1533
  static ɵfac: i0.ɵɵFactoryDeclaration<PhoenixUIModule, never>;
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]>;
1534
+ static ɵmod: i0.ɵɵNgModuleDeclaration<PhoenixUIModule, [typeof NotificationToastComponent, 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 DownloadAnimationDialogComponent, 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 SessionPillComponent, typeof ShortcutsDialogComponent], [typeof i62.MatSnackBarModule, typeof AttributePipe, typeof i64.CommonModule, typeof i65.RouterModule, typeof i66.DragDropModule, typeof i67.MatDialogModule, typeof i68.MatButtonModule, typeof i69.MatTooltipModule, typeof i70.OverlayModule, typeof i71.FormsModule, typeof i71.ReactiveFormsModule, typeof i72.MatMenuModule, typeof i73.MatRadioModule, typeof i74.MatSliderModule, typeof i75.MatSlideToggleModule, typeof i76.MatCheckboxModule, typeof i77.MatIconModule, typeof i78.CdkTreeModule, typeof i79.MatTabsModule, typeof i80.MatProgressBarModule], [typeof NotificationToastComponent, 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 DownloadAnimationDialogComponent, 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 SessionPillComponent, typeof ShortcutsDialogComponent, typeof AttributePipe]>;
1301
1535
  static ɵinj: i0.ɵɵInjectorDeclaration<PhoenixUIModule>;
1302
1536
  }
1303
1537
 
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 };
1538
+ export { AnimateCameraComponent, AnimateEventComponent, ArToggleComponent, AttributePipe, AutoRotateComponent, CartesianGridConfigComponent, CollectionsInfoComponent, CollectionsInfoOverlayComponent, ConfigSliderComponent, CycleEventsComponent, DarkThemeComponent, DownloadAnimationDialogComponent, 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, NotificationToastComponent, ObjectClippingComponent, ObjectSelectionComponent, ObjectSelectionOverlayComponent, OverlayCascadeService, OverlayComponent, OverlayViewComponent, OverlayViewWindowComponent, PerformanceToggleComponent, PhoenixMenuComponent, PhoenixMenuItemComponent, PhoenixUIModule, RingLoaderComponent, SSModeComponent, SessionPillComponent, ShareLinkComponent, ShareLinkDialogComponent, ShortcutsDialogComponent, TreeMenuComponent, TreeMenuItemComponent, UiMenuComponent, UiMenuWrapperComponent, ViewOptionsComponent, VrToggleComponent, ZoomControlsComponent, defaultAnimationPresets, defaultUIMenuConfig };
1372
1539
  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": "4.0.0",
3
+ "version": "4.1.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,15 +25,15 @@
25
25
  "zone.js": "*"
26
26
  },
27
27
  "dependencies": {
28
- "@angular/animations": "^20.3.23",
28
+ "@angular/animations": "^20.3.28",
29
29
  "@angular/cdk": "^20.2.14",
30
- "@angular/forms": "^20.3.23",
30
+ "@angular/forms": "^20.3.28",
31
31
  "@angular/material": "^20.2.14",
32
- "@angular/platform-browser": "^20.3.23",
32
+ "@angular/platform-browser": "^20.3.28",
33
33
  "css-element-queries": "^1.2.3",
34
34
  "qrcode": "1.5.4",
35
35
  "rxjs": "^7.8.2",
36
- "three": "~0.178.0",
36
+ "three": "~0.184.0",
37
37
  "tslib": "^2.8.1"
38
38
  },
39
39
  "devDependencies": {
@@ -44,9 +44,13 @@
44
44
  "typings": "dist/index.d.ts",
45
45
  "sideEffects": false,
46
46
  "exports": {
47
+ ".": {
48
+ "types": "./dist/index.d.ts",
49
+ "import": "./dist/fesm2022/phoenix-ui-components.mjs",
50
+ "default": "./dist/fesm2022/phoenix-ui-components.mjs"
51
+ },
47
52
  "./theming": {
48
53
  "sass": "./_theming.scss"
49
54
  }
50
- },
51
- "gitHead": "e6246f6406e8b24af9a5a47c5113d52a614211d7"
52
- }
55
+ }
56
+ }