@flusys/ng-shared 8.1.3 → 8.1.5

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flusys/ng-shared",
3
- "version": "8.1.3",
3
+ "version": "8.1.5",
4
4
  "description": "Shared components and utilities for FLUSYS Angular packages",
5
5
  "license": "MIT",
6
6
  "peerDependencies": {
@@ -8,8 +8,8 @@
8
8
  "@angular/core": ">=22.0.0",
9
9
  "@angular/forms": ">=22.0.0",
10
10
  "@angular/router": ">=22.0.0",
11
- "@flusys/ng-core": ">=8.1.3",
12
- "@flusys/ng-ui": ">=8.1.3",
11
+ "@flusys/ng-core": ">=8.1.5",
12
+ "@flusys/ng-ui": ">=8.1.5",
13
13
  "rxjs": "^7.8.0"
14
14
  },
15
15
  "sideEffects": false,
@@ -327,6 +327,8 @@ interface ILoggedUserInfo {
327
327
  interface IDropDown {
328
328
  label: string;
329
329
  value: string;
330
+ /** Optional secondary line rendered below the label (e.g. email under a user's name) when two options share a label. */
331
+ subLabel?: string;
330
332
  }
331
333
  /**
332
334
  * Delete operation types
@@ -1195,11 +1197,13 @@ declare class FileSelectorDialogComponent {
1195
1197
  readonly searchTerm: _angular_core.WritableSignal<string>;
1196
1198
  readonly folders: _angular_core.WritableSignal<IFolderBasicInfo[]>;
1197
1199
  readonly selectedFolderId: _angular_core.WritableSignal<string | null>;
1200
+ readonly selectedFolderObject: _angular_core.WritableSignal<IFolderBasicInfo | null>;
1198
1201
  readonly foldersLoading: _angular_core.WritableSignal<boolean>;
1199
1202
  readonly foldersPagination: _angular_core.WritableSignal<IPagination>;
1200
1203
  readonly foldersTotal: _angular_core.WritableSignal<number | undefined>;
1201
1204
  readonly storageConfigs: _angular_core.WritableSignal<IStorageConfigBasicInfo[]>;
1202
1205
  readonly selectedStorageConfigId: _angular_core.WritableSignal<string | null>;
1206
+ readonly selectedStorageConfigObject: _angular_core.WritableSignal<IStorageConfigBasicInfo | null>;
1203
1207
  readonly storageConfigsLoading: _angular_core.WritableSignal<boolean>;
1204
1208
  readonly storageConfigsPagination: _angular_core.WritableSignal<IPagination>;
1205
1209
  readonly storageConfigsTotal: _angular_core.WritableSignal<number | undefined>;
@@ -1308,11 +1312,13 @@ declare class InlineSvgComponent {
1308
1312
  declare class LazyMultiSelectComponent extends BaseFormControl<string[] | null> implements OnDestroy {
1309
1313
  private readonly document;
1310
1314
  private readonly appRef;
1315
+ private readonly overlayStack;
1311
1316
  private readonly translateAdapter;
1312
1317
  private readonly onDocumentClickBound;
1313
1318
  readonly pSelectRef: _angular_core.Signal<ElementRef<HTMLDivElement>>;
1314
1319
  readonly overlayTemplate: _angular_core.Signal<TemplateRef<unknown>>;
1315
1320
  private overlayViewRef;
1321
+ private detachOverlayPosition;
1316
1322
  readonly placeHolder: _angular_core.InputSignal<string>;
1317
1323
  readonly showClear: _angular_core.InputSignal<boolean>;
1318
1324
  readonly displayPlaceholder: _angular_core.Signal<string>;
@@ -1321,7 +1327,18 @@ declare class LazyMultiSelectComponent extends BaseFormControl<string[] | null>
1321
1327
  readonly total: _angular_core.InputSignal<number | undefined>;
1322
1328
  readonly pagination: _angular_core.InputSignal<IPagination>;
1323
1329
  readonly selectDataList: _angular_core.InputSignal<IDropDown[]>;
1330
+ /**
1331
+ * Full option objects for the currently selected values, supplied by the
1332
+ * caller (or a subclass like UserMultiSelectComponent). Pinned into
1333
+ * `mergedDataList` (deduped by `value`) so chips/labels/checkboxes survive
1334
+ * a later search/page reload that replaces `selectDataList()` without the
1335
+ * selection having changed. This component renders its own overlay list
1336
+ * (it does not build on f-multiselect), so the merge has to happen here.
1337
+ */
1338
+ readonly selectedObjects: _angular_core.InputSignal<IDropDown[]>;
1324
1339
  readonly value: _angular_core.ModelSignal<string[] | null>;
1340
+ private readonly selectedObjectEntries;
1341
+ readonly mergedDataList: _angular_core.Signal<IDropDown[]>;
1325
1342
  readonly onSearch: _angular_core.OutputEmitterRef<string>;
1326
1343
  readonly onPagination: _angular_core.OutputEmitterRef<IPagination>;
1327
1344
  readonly searchTerm: _angular_core.WritableSignal<string>;
@@ -1343,7 +1360,7 @@ declare class LazyMultiSelectComponent extends BaseFormControl<string[] | null>
1343
1360
  clear(event: Event): void;
1344
1361
  private t;
1345
1362
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<LazyMultiSelectComponent, never>;
1346
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<LazyMultiSelectComponent, "lib-lazy-multi-select", never, { "placeHolder": { "alias": "placeHolder"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "isEditMode": { "alias": "isEditMode"; "required": true; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": true; "isSignal": true; }; "total": { "alias": "total"; "required": true; "isSignal": true; }; "pagination": { "alias": "pagination"; "required": true; "isSignal": true; }; "selectDataList": { "alias": "selectDataList"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onSearch": "onSearch"; "onPagination": "onPagination"; }, never, never, true, never>;
1363
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LazyMultiSelectComponent, "lib-lazy-multi-select", never, { "placeHolder": { "alias": "placeHolder"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "isEditMode": { "alias": "isEditMode"; "required": true; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": true; "isSignal": true; }; "total": { "alias": "total"; "required": true; "isSignal": true; }; "pagination": { "alias": "pagination"; "required": true; "isSignal": true; }; "selectDataList": { "alias": "selectDataList"; "required": true; "isSignal": true; }; "selectedObjects": { "alias": "selectedObjects"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onSearch": "onSearch"; "onPagination": "onPagination"; }, never, never, true, never>;
1347
1364
  }
1348
1365
 
1349
1366
  /**
@@ -1371,6 +1388,13 @@ declare class LazySelectComponent extends BaseFormControl<string | null> {
1371
1388
  readonly total: _angular_core.InputSignal<number | undefined>;
1372
1389
  readonly pagination: _angular_core.InputSignal<IPagination>;
1373
1390
  readonly selectDataList: _angular_core.InputSignal<IDropDown[]>;
1391
+ /**
1392
+ * Full option object for the current value, supplied by the caller (or a
1393
+ * subclass like UserSelectComponent). Forwarded to f-select's own
1394
+ * `selectedObject` input so the label survives a later search/page reload
1395
+ * that replaces `selectDataList()` without the value having changed.
1396
+ */
1397
+ readonly selectedObject: _angular_core.InputSignal<unknown>;
1374
1398
  readonly value: _angular_core.ModelSignal<string | null>;
1375
1399
  readonly onSearch: _angular_core.OutputEmitterRef<string>;
1376
1400
  readonly onPagination: _angular_core.OutputEmitterRef<IPagination>;
@@ -1381,7 +1405,7 @@ declare class LazySelectComponent extends BaseFormControl<string | null> {
1381
1405
  showPanel(): void;
1382
1406
  private t;
1383
1407
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<LazySelectComponent, never>;
1384
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<LazySelectComponent, "lib-lazy-select", never, { "placeHolder": { "alias": "placeHolder"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "optionLabel": { "alias": "optionLabel"; "required": true; "isSignal": true; }; "optionValue": { "alias": "optionValue"; "required": true; "isSignal": true; }; "isEditMode": { "alias": "isEditMode"; "required": true; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": true; "isSignal": true; }; "total": { "alias": "total"; "required": true; "isSignal": true; }; "pagination": { "alias": "pagination"; "required": true; "isSignal": true; }; "selectDataList": { "alias": "selectDataList"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onSearch": "onSearch"; "onPagination": "onPagination"; }, never, never, true, never>;
1408
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LazySelectComponent, "lib-lazy-select", never, { "placeHolder": { "alias": "placeHolder"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "optionLabel": { "alias": "optionLabel"; "required": true; "isSignal": true; }; "optionValue": { "alias": "optionValue"; "required": true; "isSignal": true; }; "isEditMode": { "alias": "isEditMode"; "required": true; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": true; "isSignal": true; }; "total": { "alias": "total"; "required": true; "isSignal": true; }; "pagination": { "alias": "pagination"; "required": true; "isSignal": true; }; "selectDataList": { "alias": "selectDataList"; "required": true; "isSignal": true; }; "selectedObject": { "alias": "selectedObject"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onSearch": "onSearch"; "onPagination": "onPagination"; }, never, never, true, never>;
1385
1409
  }
1386
1410
 
1387
1411
  interface RouterTabItem {
@@ -1423,6 +1447,17 @@ declare abstract class BaseUserSelectComponent {
1423
1447
  readonly pagination: _angular_core.WritableSignal<IPagination>;
1424
1448
  readonly searchTerm: _angular_core.WritableSignal<string>;
1425
1449
  readonly dropdownUsers: _angular_core.Signal<IDropDown[]>;
1450
+ private readonly _knownUsers;
1451
+ protected toDropDown(user: IUserBasicInfo): IDropDown;
1452
+ /** Resolves a single previously-seen user id, even if it's no longer in `users()`. */
1453
+ protected resolveKnownUser(id: string | null | undefined): IDropDown | null;
1454
+ /** Resolves multiple previously-seen user ids, even if no longer in `users()`. */
1455
+ protected resolveKnownUsers(ids: string[]): IDropDown[];
1456
+ /** Same as resolveKnownUser, but returns the raw IUserBasicInfo (for outputs like userSelected). */
1457
+ protected resolveKnownUserRaw(id: string | null | undefined): IUserBasicInfo | null;
1458
+ /** Same as resolveKnownUsers, but returns the raw IUserBasicInfo[] (for outputs like usersSelected). */
1459
+ protected resolveKnownUsersRaw(ids: string[]): IUserBasicInfo[];
1460
+ private rememberUsers;
1426
1461
  readonly displayPlaceholder: _angular_core.Signal<string>;
1427
1462
  constructor();
1428
1463
  /** Setup effect to track value changes and emit selection events */
@@ -1471,6 +1506,7 @@ declare class UserMultiSelectComponent extends BaseUserSelectComponent {
1471
1506
  readonly showClear: _angular_core.InputSignal<boolean>;
1472
1507
  readonly value: _angular_core.ModelSignal<string[] | null>;
1473
1508
  readonly usersSelected: _angular_core.OutputEmitterRef<IUserBasicInfo[]>;
1509
+ readonly selectedObjects: _angular_core.Signal<_flusys_ng_shared.IDropDown[]>;
1474
1510
  protected setupValueEffect(): void;
1475
1511
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UserMultiSelectComponent, never>;
1476
1512
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UserMultiSelectComponent, "lib-user-multi-select", never, { "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "usersSelected": "usersSelected"; }, never, never, true, never>;
@@ -1507,6 +1543,7 @@ declare class UserSelectComponent extends BaseUserSelectComponent {
1507
1543
  readonly showClear: _angular_core.InputSignal<boolean>;
1508
1544
  readonly value: _angular_core.ModelSignal<string | null>;
1509
1545
  readonly userSelected: _angular_core.OutputEmitterRef<IUserBasicInfo | null>;
1546
+ readonly selectedObject: _angular_core.Signal<_flusys_ng_shared.IDropDown | null>;
1510
1547
  protected setupValueEffect(): void;
1511
1548
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UserSelectComponent, never>;
1512
1549
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UserSelectComponent, "lib-user-select", never, { "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "userSelected": "userSelected"; }, never, never, true, never>;