@ardimedia/angular-portal-azure 0.3.16 → 0.3.18

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.
@@ -7,6 +7,45 @@
7
7
  *
8
8
  * Or add to angular.json styles array:
9
9
  * "styles": ["node_modules/@ardimedia/angular-portal-azure/theming/portal-azure.css"]
10
+ *
11
+ * Public CSS class API:
12
+ *
13
+ * Layout:
14
+ * .fxs-portal — Root portal container
15
+ * .fxs-topbar — Top navigation bar
16
+ * .fxs-portal-content — Main scrollable content area
17
+ * .fxs-portal-footer — Footer bar
18
+ *
19
+ * Blade:
20
+ * .azureportalblade — Blade wrapper (inline-block in stack)
21
+ * .fxs-blade-title — Blade title bar
22
+ * .fxs-blade-content — Blade body area
23
+ * .fxs-commandBar — Command bar toolbar
24
+ * .fxs-commandBar-item — Individual command button
25
+ *
26
+ * Grid:
27
+ * .azc-grid — Grid/table container
28
+ * .azc-grid-full — Full-width grid variant
29
+ * .azc-grid-search — Search input in grid
30
+ *
31
+ * Tile:
32
+ * .fxs-tile — Dashboard tile container
33
+ * .fxs-tilesize-normal — Normal tile size
34
+ * .fxs-tilesize-mini — Mini tile size
35
+ * .fxs-tilesize-herowide — Hero wide tile size
36
+ * .fxs-tilesize-small — Small tile size
37
+ *
38
+ * Custom (apa- namespace):
39
+ * .apa-dark / .apa-light — Manual theme toggle classes (on <html>)
40
+ * .apa-settings-* — Settings dropdown components
41
+ * .apa-avatar-* — Avatar menu components
42
+ * .apa-sidebar-* — Sidebar navigation components
43
+ * .apa-disable-click — Disabled command styling
44
+ *
45
+ * CSS custom properties:
46
+ * --apa-bg, --apa-surface, --apa-text, --apa-border, --apa-chrome,
47
+ * --apa-accent, --apa-shadow-color, --apa-shadow-strong
48
+ * See "Semantic Tokens" section below for full list.
10
49
  */
11
50
 
12
51
  /* ===== Color Palette (Tailwind CSS values, no dependency) ===== */
@@ -32,6 +71,8 @@
32
71
  /* Status colors (light / dark variants) */
33
72
  --apa-blue-400: #60a5fa;
34
73
  --apa-blue-500: #3b82f6;
74
+ --apa-blue-800: #1e40af;
75
+ --apa-blue-900: #1e3a8a;
35
76
  --apa-amber-400: #fbbf24;
36
77
  --apa-amber-500: #f59e0b;
37
78
  --apa-red-400: #f87171;
@@ -197,6 +238,7 @@
197
238
 
198
239
  /* Command bar */
199
240
  --apa-commandbar-color: var(--apa-chrome-text);
241
+ --apa-commandbar-bg: rgba(255, 255, 255, 0.12);
200
242
  --apa-commandbar-hover-bg: var(--apa-chrome-hover);
201
243
  --apa-commandbar-border-color: var(--apa-slate-700);
202
244
 
@@ -335,7 +377,8 @@ a:focus, a:hover {
335
377
  .fxs-avatarmenu-tenant-container {
336
378
  text-align: right;
337
379
  }
338
- .apa-darkmode-toggle {
380
+ /* Settings dropdown */
381
+ .apa-settings-trigger {
339
382
  background: none;
340
383
  border: 1px solid var(--apa-chrome-hover);
341
384
  color: var(--apa-chrome-text);
@@ -349,9 +392,60 @@ a:focus, a:hover {
349
392
  justify-content: center;
350
393
  transition: background-color 0.2s ease;
351
394
  }
352
- .apa-darkmode-toggle:hover {
395
+ .apa-settings-trigger:hover {
353
396
  background-color: var(--apa-topbar-hover-bg);
354
397
  }
398
+ .apa-settings-dropdown {
399
+ position: absolute;
400
+ top: 100%;
401
+ right: 0;
402
+ margin-top: 4px;
403
+ min-width: 220px;
404
+ background-color: var(--apa-chrome);
405
+ border: 1px solid var(--apa-chrome-hover);
406
+ box-shadow: 0 4px 12px var(--apa-shadow-strong);
407
+ font-family: var(--apa-font-family);
408
+ z-index: 200;
409
+ padding: 4px 0;
410
+ }
411
+ .apa-settings-section-header {
412
+ padding: 8px 16px 4px;
413
+ font-size: 11px;
414
+ font-weight: 600;
415
+ text-transform: uppercase;
416
+ letter-spacing: 0.5px;
417
+ opacity: 0.6;
418
+ color: var(--apa-chrome-text);
419
+ }
420
+ .apa-settings-item {
421
+ display: flex;
422
+ align-items: center;
423
+ gap: 10px;
424
+ padding: 8px 16px;
425
+ font-family: inherit;
426
+ font-size: 13px;
427
+ color: var(--apa-chrome-text);
428
+ background: none;
429
+ border: none;
430
+ width: 100%;
431
+ text-align: left;
432
+ cursor: pointer;
433
+ transition: background-color 0.1s ease;
434
+ }
435
+ .apa-settings-item:hover {
436
+ background-color: rgba(255, 255, 255, 0.1);
437
+ }
438
+ .apa-settings-item i {
439
+ font-size: 16px;
440
+ opacity: 0.8;
441
+ }
442
+ .apa-settings-item-active {
443
+ font-weight: 600;
444
+ }
445
+ .apa-settings-item-active .ti-check {
446
+ margin-left: auto;
447
+ color: var(--apa-accent);
448
+ }
355
449
 
356
450
  /* Theme */
357
451
  .fxs-theme-blue {
@@ -554,6 +648,10 @@ a:focus, a:hover {
554
648
  top: 0; bottom: 0;
555
649
  cursor: pointer;
556
650
  }
651
+ .fxs-tile .fxs-part:focus-visible {
652
+ outline: 2px solid var(--apa-accent);
653
+ outline-offset: -2px;
654
+ }
557
655
 
558
656
  /* ===== Blade Area (Journey) ===== */
559
657
  .fxs-journey {
@@ -753,10 +851,11 @@ a:focus, a:hover {
753
851
  transition: background-color 0.07s ease-in;
754
852
  cursor: pointer;
755
853
  text-align: center;
854
+ background-color: var(--apa-commandbar-bg);
756
855
  border: 1px solid var(--apa-commandbar-border-color);
757
856
  }
758
857
  .fxs-commandBar .fxs-commandBar-item:hover {
759
- background-color: rgba(255, 255, 255, 0.1);
858
+ background-color: var(--apa-commandbar-hover-bg);
760
859
  }
761
860
  .fxs-commandBar .fxs-commandBar-item .fxs-commandBar-item-text {
762
861
  height: 22px;
@@ -878,8 +977,8 @@ a:focus, a:hover {
878
977
  right: 0;
879
978
  min-width: 200px;
880
979
  background-color: var(--apa-chrome);
881
- border: 1px solid var(--apa-border);
882
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
980
+ border: 1px solid var(--apa-chrome-hover);
981
+ box-shadow: 0 4px 12px var(--apa-shadow-strong);
883
982
  z-index: 200;
884
983
  }
885
984
  .apa-avatar-dropdown-item {
@@ -983,6 +1082,16 @@ a:focus, a:hover {
983
1082
  .azc-grid-activateableRow table tbody tr[aria-selected='true'] {
984
1083
  background-color: var(--apa-grid-row-selected-bg) !important;
985
1084
  }
1085
+ .azc-grid table tbody tr:focus-visible,
1086
+ .azc-grid-full tbody tr:focus-visible {
1087
+ outline: 2px solid var(--apa-accent);
1088
+ outline-offset: -2px;
1089
+ background-color: var(--apa-surface-hover);
1090
+ }
1091
+ .azc-grid table tbody tr td:focus-visible {
1092
+ outline: 2px solid var(--apa-accent);
1093
+ outline-offset: -2px;
1094
+ }
986
1095
  .msportalfx-gridcolumn-asseticon i {
987
1096
  font-size: 18px;
988
1097
  vertical-align: middle;
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { WritableSignal, EnvironmentProviders } from '@angular/core';
2
+ import { WritableSignal, Type, EnvironmentProviders } from '@angular/core';
3
3
  import * as _ardimedia_angular_portal_azure from '@ardimedia/angular-portal-azure';
4
4
 
5
5
  /**
@@ -19,8 +19,8 @@ interface BladeCommand {
19
19
  enabled: boolean;
20
20
  /** SVG icon identifier or CSS class for the command icon */
21
21
  icon?: string;
22
- /** Callback executed when the command is clicked */
23
- action: () => void;
22
+ /** Callback executed when the command is clicked (supports async) */
23
+ action: () => void | Promise<void>;
24
24
  }
25
25
  /**
26
26
  * Standard command keys matching the 18 commands from v0.2.346:
@@ -29,7 +29,7 @@ interface BladeCommand {
29
29
  */
30
30
  type StandardCommandKey = 'browse' | 'cancel' | 'copy' | 'delete' | 'document' | 'document2' | 'document3' | 'document4' | 'document5' | 'new' | 'order' | 'restart' | 'save' | 'search' | 'start' | 'stop' | 'swap' | 'excel';
31
31
  /** Creates a command with sensible defaults (visible, enabled, no-op action) */
32
- declare function createCommand(key: string, label: string, action: () => void, icon?: string): BladeCommand;
32
+ declare function createCommand(key: string, label: string, action: () => void | Promise<void>, icon?: string): BladeCommand;
33
33
 
34
34
  /**
35
35
  * Status bar display state for a blade.
@@ -82,6 +82,61 @@ interface AddBladeEventArgs {
82
82
  pathSender: string;
83
83
  }
84
84
 
85
+ /**
86
+ * Localization labels for the angular-portal-azure library.
87
+ * All labels default to German (de-CH). Override via PortalConfig.labels.
88
+ */
89
+ interface PortalLabels {
90
+ loading: string;
91
+ saving: string;
92
+ saved: string;
93
+ deleting: string;
94
+ deleted: string;
95
+ loadError: string;
96
+ saveError: string;
97
+ deleteError: string;
98
+ cmdNew: string;
99
+ cmdSave: string;
100
+ cmdDelete: string;
101
+ cmdCancel: string;
102
+ search: string;
103
+ close: string;
104
+ noAppsTitle: string;
105
+ noAppsMessage: string;
106
+ closePanel: string;
107
+ lightMode: string;
108
+ darkMode: string;
109
+ switchToLight: string;
110
+ switchToDark: string;
111
+ settings: string;
112
+ language: string;
113
+ appearance: string;
114
+ }
115
+ /** Language preset definition for the built-in language registry. */
116
+ interface LanguagePreset {
117
+ code: string;
118
+ displayName: string;
119
+ labels: PortalLabels;
120
+ }
121
+ /** German (Switzerland / Liechtenstein) — default */
122
+ declare const LABELS_DE_CH: PortalLabels;
123
+ /** German (Germany) — Swiss spelling rules apply (no ß) */
124
+ declare const LABELS_DE_DE: PortalLabels;
125
+ /** English */
126
+ declare const LABELS_EN: PortalLabels;
127
+ /** French */
128
+ declare const LABELS_FR: PortalLabels;
129
+ /** Spanish */
130
+ declare const LABELS_ES: PortalLabels;
131
+ /** Italian */
132
+ declare const LABELS_IT: PortalLabels;
133
+ /** Keep DEFAULT_LABELS as alias for backward compatibility */
134
+ declare const DEFAULT_LABELS: PortalLabels;
135
+ /** Built-in language presets. Consumers can add custom presets via registerLanguagePreset(). */
136
+ declare const LANGUAGE_PRESETS: Map<string, LanguagePreset>;
137
+ /** Register a custom language preset. */
138
+ declare function registerLanguagePreset(preset: LanguagePreset): void;
139
+
85
140
  /**
86
141
  * Exception model for API error responses.
87
142
  * Ported from Exception / ExceptionDotNet in v0.2.346.
@@ -148,20 +203,20 @@ declare function createDataBlade<T>(path: string, title: string, width?: number)
148
203
  * Execute a load-item operation with lifecycle hooks and status bar updates.
149
204
  * Replaces the BladeData.loadItem() template method from v0.2.346.
150
205
  */
151
- declare function executeLoadItem<T>(blade: BladeDataDefinition<T>, loadFn: () => Promise<T>): Promise<T | void>;
206
+ declare function executeLoadItem<T>(blade: BladeDataDefinition<T>, loadFn: () => Promise<T>, labels?: PortalLabels): Promise<T | void>;
152
207
  /**
153
208
  * Execute a load-items operation with lifecycle hooks and status bar updates.
154
209
  */
155
- declare function executeLoadItems<T>(blade: BladeDataDefinition<T>, loadFn: () => Promise<T[]>): Promise<T[] | void>;
210
+ declare function executeLoadItems<T>(blade: BladeDataDefinition<T>, loadFn: () => Promise<T[]>, labels?: PortalLabels): Promise<T[] | void>;
156
211
  /**
157
212
  * Execute a save-item operation with lifecycle hooks and status bar updates.
158
213
  */
159
- declare function executeSaveItem<T>(blade: BladeDataDefinition<T>, saveFn: () => Promise<T>): Promise<T | void>;
214
+ declare function executeSaveItem<T>(blade: BladeDataDefinition<T>, saveFn: () => Promise<T>, labels?: PortalLabels): Promise<T | void>;
160
215
  /**
161
216
  * Execute a delete-item operation with lifecycle hooks and status bar updates.
162
217
  * Returns true if the blade should be closed after deletion.
163
218
  */
164
- declare function executeDeleteItem<T>(blade: BladeDataDefinition<T>, deleteFn: () => Promise<void>): Promise<boolean>;
219
+ declare function executeDeleteItem<T>(blade: BladeDataDefinition<T>, deleteFn: () => Promise<void>, labels?: PortalLabels): Promise<boolean>;
165
220
 
166
221
  /**
167
222
  * Navigation item displayed in a BladeNav component.
@@ -182,6 +237,8 @@ interface BladeNavItem {
182
237
  isVisible: boolean;
183
238
  /** Optional callback executed on click (in addition to navigation) */
184
239
  callback?: () => void;
240
+ /** Optional badge text (e.g. notification count) */
241
+ badge?: string;
185
242
  }
186
243
  declare function createNavItem(title: string, bladePath: string, cssClass?: string): BladeNavItem;
187
244
 
@@ -342,6 +399,10 @@ interface PortalConfig {
342
399
  userAccount?: UserAccount;
343
400
  /** Theme identifier (default: 'azure-blue') */
344
401
  theme?: string;
402
+ /** Override default labels for localization (defaults to German/de-CH) */
403
+ labels?: Partial<PortalLabels>;
404
+ /** Language code (e.g. 'en', 'fr'). Default: auto-detect from browser, fallback 'de-CH' */
405
+ language?: string;
345
406
  }
346
407
 
347
408
  /**
@@ -360,6 +421,13 @@ declare function filterItems<T>(items: T[], searchText: string): T[];
360
421
  * All state is managed via Angular signals for reactive updates.
361
422
  */
362
423
  declare class PortalService {
424
+ private static readonly LANG_STORAGE_KEY;
425
+ /** Localization labels (defaults to German/de-CH, override via PortalConfig.labels) */
426
+ readonly labels: WritableSignal<PortalLabels>;
427
+ /** Current language code */
428
+ readonly currentLanguage: WritableSignal<string>;
429
+ /** Whether the settings dropdown is open */
430
+ readonly isSettingsOpen: WritableSignal<boolean>;
363
431
  /** The blade stack — ordered left-to-right */
364
432
  readonly blades: WritableSignal<BladeDefinition[]>;
365
433
  /** Panorama (startboard/dashboard) state */
@@ -378,15 +446,27 @@ declare class PortalService {
378
446
  readonly bladeCount: i0.Signal<number>;
379
447
  /** Positioned tiles with layout coordinates */
380
448
  readonly positionedTiles: i0.Signal<PositionedTile[]>;
449
+ /** Consumer label overrides from PortalConfig — re-applied on every language switch */
450
+ private _configLabelOverrides;
381
451
  /**
382
452
  * Initialize the portal with configuration.
383
453
  * Called by providePortalAzure() during app bootstrap.
384
454
  */
385
455
  configure(config: PortalConfig): void;
456
+ /** Switch the active language. Persists to localStorage. */
457
+ setLanguage(code: string): void;
458
+ /** Detect language from browser, match to closest preset. */
459
+ private detectBrowserLanguage;
460
+ /** Toggle settings dropdown. Closes avatar menu if opening. */
461
+ toggleSettings(): void;
462
+ /** Close settings dropdown */
463
+ closeSettings(): void;
386
464
  /** Update the portal title */
387
465
  setTitle(title: string): void;
388
466
  /** Update the user account */
389
467
  setUserAccount(userAccount: UserAccount): void;
468
+ /** Clear all blades and return to panorama */
469
+ clearBlades(): void;
390
470
  /** Set tiles on the startboard */
391
471
  setTiles(tiles: TileDefinition[]): void;
392
472
  /** Set blade parameter for inter-blade communication */
@@ -397,7 +477,7 @@ declare class PortalService {
397
477
  showNotification(path: string, width?: number): void;
398
478
  /** Hide the notification panel */
399
479
  hideNotification(): void;
400
- /** Toggle avatar menu open/close */
480
+ /** Toggle avatar menu open/close. Closes settings if opening. */
401
481
  toggleAvatarMenu(): void;
402
482
  /** Close avatar menu */
403
483
  closeAvatarMenu(): void;
@@ -476,11 +556,47 @@ declare class BladeService {
476
556
  /**
477
557
  * Check if a blade with the given path is currently open.
478
558
  */
479
- isBladOpen(path: string): boolean;
559
+ isBladeOpen(path: string): boolean;
480
560
  static ɵfac: i0.ɵɵFactoryDeclaration<BladeService, never>;
481
561
  static ɵprov: i0.ɵɵInjectableDeclaration<BladeService>;
482
562
  }
483
563
 
564
+ /**
565
+ * Registry for mapping blade paths to Angular components.
566
+ *
567
+ * Allows consumer apps to register components for blade paths,
568
+ * enabling dynamic rendering in BladeHostComponent without
569
+ * manual @switch blocks.
570
+ *
571
+ * Usage in app bootstrap:
572
+ * ```typescript
573
+ * const registry = inject(BladeRegistry);
574
+ * registry.register('customers', CustomerNavComponent);
575
+ * registry.register('customers/list', CustomerListComponent);
576
+ * ```
577
+ *
578
+ * Or register multiple at once:
579
+ * ```typescript
580
+ * registry.registerAll({
581
+ * 'customers': CustomerNavComponent,
582
+ * 'customers/list': CustomerListComponent,
583
+ * });
584
+ * ```
585
+ */
586
+ declare class BladeRegistry {
587
+ private readonly registry;
588
+ /** Register a component for a blade path */
589
+ register(path: string, component: Type<unknown>): void;
590
+ /** Register multiple blade path → component mappings */
591
+ registerAll(mappings: Record<string, Type<unknown>>): void;
592
+ /** Get the component registered for a path, if any */
593
+ get(path: string): Type<unknown> | undefined;
594
+ /** Check if a component is registered for a path */
595
+ has(path: string): boolean;
596
+ static ɵfac: i0.ɵɵFactoryDeclaration<BladeRegistry, never>;
597
+ static ɵprov: i0.ɵɵInjectableDeclaration<BladeRegistry>;
598
+ }
599
+
484
600
  /**
485
601
  * Provide the angular-portal-azure library configuration.
486
602
  *
@@ -543,7 +659,7 @@ declare class PanoramaComponent {
543
659
  * Root portal shell component.
544
660
  * Ported from the fxs-portal structure in home.html (v0.2.346).
545
661
  *
546
- * Provides the top bar (with portal title and avatar menu),
662
+ * Provides the top bar (with portal title, settings gear, and avatar menu),
547
663
  * and the main content area. Child components (panorama, blade-host,
548
664
  * notification-panel) are projected via content projection.
549
665
  *
@@ -561,9 +677,16 @@ declare class PortalLayoutComponent {
561
677
  private readonly document;
562
678
  private readonly elementRef;
563
679
  private readonly injector;
680
+ private readonly destroyRef;
564
681
  protected readonly isDark: i0.WritableSignal<boolean>;
682
+ /** Available languages from the preset registry */
683
+ protected readonly availableLanguages: {
684
+ code: string;
685
+ displayName: string;
686
+ }[];
565
687
  constructor();
566
688
  protected toggleDarkMode(): void;
689
+ protected switchLanguage(code: string): void;
567
690
  private applyTheme;
568
691
  protected displayName(): string;
569
692
  protected initials(): string;
@@ -610,6 +733,7 @@ declare class CommandBarComponent {
610
733
  declare class BladeComponent {
611
734
  readonly blade: i0.InputSignal<BladeDefinition>;
612
735
  readonly bladeClose: i0.OutputEmitterRef<BladeDefinition>;
736
+ protected readonly portal: PortalService;
613
737
  private readonly bladeService;
614
738
  onClose(): void;
615
739
  static ɵfac: i0.ɵɵFactoryDeclaration<BladeComponent, never>;
@@ -623,8 +747,9 @@ declare class BladeComponent {
623
747
  * Each blade in the stack is rendered horizontally. When a new blade
624
748
  * is added, the portal layout scrolls to show it.
625
749
  *
626
- * Consumer apps provide blade content via the [bladeTemplate] input
627
- * or by routing. For now, blades are rendered with their path as content.
750
+ * If a component is registered via BladeRegistry for a blade path,
751
+ * it is rendered dynamically via ngComponentOutlet. Otherwise,
752
+ * the blade path is shown as fallback text.
628
753
  *
629
754
  * Usage:
630
755
  * ```html
@@ -633,6 +758,8 @@ declare class BladeComponent {
633
758
  */
634
759
  declare class BladeHostComponent {
635
760
  protected readonly portal: PortalService;
761
+ private readonly registry;
762
+ getComponent(path: string): i0.Type<unknown> | null;
636
763
  static ɵfac: i0.ɵɵFactoryDeclaration<BladeHostComponent, never>;
637
764
  static ɵcmp: i0.ɵɵComponentDeclaration<BladeHostComponent, "apa-blade-host", never, {}, {}, never, never, true, never>;
638
765
  }
@@ -689,6 +816,7 @@ declare class BladeGridComponent {
689
816
  readonly itemClick: i0.OutputEmitterRef<any>;
690
817
  searchText: string;
691
818
  private readonly bladeService;
819
+ protected readonly portal: PortalService;
692
820
  filteredItems(): any[];
693
821
  getDisplayValue(item: any): string;
694
822
  onSearchInput(event: Event): void;
@@ -733,7 +861,7 @@ declare function createDetailCommands(handlers: {
733
861
  onSave?: () => void;
734
862
  onDelete?: () => void;
735
863
  onCancel?: () => void;
736
- }): BladeCommand[];
864
+ }, labels?: PortalLabels): BladeCommand[];
737
865
 
738
866
  /**
739
867
  * Notification panel — right-side overlay panel.
@@ -785,17 +913,20 @@ declare class AvatarMenuComponent {
785
913
  * Usage:
786
914
  * ```html
787
915
  * <apa-sidebar [items]="sidebarItems" [collapsed]="false" />
916
+ * <apa-sidebar [items]="sidebarItems" [width]="240" [collapsedWidth]="60" />
788
917
  * ```
789
918
  */
790
919
  declare class SidebarComponent {
791
920
  readonly items: i0.InputSignal<BladeNavItem[]>;
792
921
  readonly collapsed: i0.InputSignal<boolean>;
922
+ readonly width: i0.InputSignal<number>;
923
+ readonly collapsedWidth: i0.InputSignal<number>;
793
924
  private readonly bladeService;
794
925
  visibleItems(): BladeNavItem[];
795
926
  onItemClick(item: BladeNavItem): void;
796
927
  static ɵfac: i0.ɵɵFactoryDeclaration<SidebarComponent, never>;
797
- static ɵcmp: i0.ɵɵComponentDeclaration<SidebarComponent, "apa-sidebar", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
928
+ static ɵcmp: i0.ɵɵComponentDeclaration<SidebarComponent, "apa-sidebar", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "collapsedWidth": { "alias": "collapsedWidth"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
798
929
  }
799
930
 
800
- export { AvatarMenuComponent, BladeComponent, BladeDetailComponent, BladeGridComponent, BladeHostComponent, BladeNavComponent, BladeService, CommandBarComponent, NotificationPanelComponent, PanoramaComponent, PortalLayoutComponent, PortalService, SidebarComponent, TILE_DIMENSIONS, TileComponent, TileSize, clearStatusBar, createAvatarMenu, createBlade, createCommand, createDataBlade, createDetailCommands, createNavItem, createNotificationPanel, createPanorama, createTile, executeDeleteItem, executeLoadItem, executeLoadItems, executeSaveItem, filterItems, getUserDisplayName, layoutTiles, providePortalAzure, statusBarError, statusBarInfo, statusBarSuccess };
801
- export type { AddBladeEventArgs, ApiException, AvatarMenuDefinition, AvatarMenuItem, BladeCommand, BladeDataDefinition, BladeDataLifecycle, BladeDefinition, BladeNavItem, BladeParameter, NotificationDefinition, NotificationLifecycle, PanoramaDefinition, PortalConfig, PositionedTile, StandardCommandKey, StatusBarState, StatusBarStyle, TileDefinition, UserAccount };
931
+ export { AvatarMenuComponent, BladeComponent, BladeDetailComponent, BladeGridComponent, BladeHostComponent, BladeNavComponent, BladeRegistry, BladeService, CommandBarComponent, DEFAULT_LABELS, LABELS_DE_CH, LABELS_DE_DE, LABELS_EN, LABELS_ES, LABELS_FR, LABELS_IT, LANGUAGE_PRESETS, NotificationPanelComponent, PanoramaComponent, PortalLayoutComponent, PortalService, SidebarComponent, TILE_DIMENSIONS, TileComponent, TileSize, clearStatusBar, createAvatarMenu, createBlade, createCommand, createDataBlade, createDetailCommands, createNavItem, createNotificationPanel, createPanorama, createTile, executeDeleteItem, executeLoadItem, executeLoadItems, executeSaveItem, filterItems, getUserDisplayName, layoutTiles, providePortalAzure, registerLanguagePreset, statusBarError, statusBarInfo, statusBarSuccess };
932
+ export type { AddBladeEventArgs, ApiException, AvatarMenuDefinition, AvatarMenuItem, BladeCommand, BladeDataDefinition, BladeDataLifecycle, BladeDefinition, BladeNavItem, BladeParameter, LanguagePreset, NotificationDefinition, NotificationLifecycle, PanoramaDefinition, PortalConfig, PortalLabels, PositionedTile, StandardCommandKey, StatusBarState, StatusBarStyle, TileDefinition, UserAccount };