@energycap/components 0.46.20-trusted-publishing.20260916-1514 → 0.46.21

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": "@energycap/components",
3
- "version": "0.46.20-trusted-publishing.20260916-1514",
3
+ "version": "0.46.21",
4
4
  "schematics": "./schematics/collection.json",
5
5
  "dependencies": {
6
6
  "tslib": "^2.0.0"
@@ -2238,6 +2238,13 @@ declare class PopupContainerDirective implements OnInit, OnDestroy, OnInit {
2238
2238
  * @memberof PopupContainerDirective
2239
2239
  */
2240
2240
  private globalCloseSubscription?;
2241
+ /**
2242
+ * Element that had focus immediately before `show()` opened the popup, so it
2243
+ * can be restored on `hide()` if a consumer moved focus into the popup (WCAG 2.4.3).
2244
+ *
2245
+ * @memberof PopupContainerDirective
2246
+ */
2247
+ private previouslyFocusedElement?;
2241
2248
  /**
2242
2249
  * Creates an instance of PopupContainerDirective.
2243
2250
  * @param templateRef Reference to the popup template
@@ -2272,6 +2279,12 @@ declare class PopupContainerDirective implements OnInit, OnDestroy, OnInit {
2272
2279
  * @memberof PopupContainerDirective
2273
2280
  */
2274
2281
  hide(): void;
2282
+ /**
2283
+ * Whether the current `document.activeElement` is contained within the popup's DOM.
2284
+ *
2285
+ * @memberof PopupContainerDirective
2286
+ */
2287
+ private isFocusInsidePopup;
2275
2288
  /**
2276
2289
  * Updates the popup container position
2277
2290
  */
@@ -6223,6 +6236,32 @@ declare class MultiselectComponent extends FormControlBase implements OnInit, On
6223
6236
  * @default 0
6224
6237
  */
6225
6238
  maxSelections: number;
6239
+ /**
6240
+ * The total number of records available from the datasource. When set and larger than the number of
6241
+ * options currently shown, an "N of M" footer is rendered under the menu so the user knows the list is a
6242
+ * paged subset and can filter to narrow it. Intended for options loaded server-side from the `search` output.
6243
+ */
6244
+ totalRecords?: number;
6245
+ /**
6246
+ * When false, the "Select all" row is left out of the menu. Use it for lists where selecting everything has
6247
+ * no meaning, for example recipients that already offer an explicit "Everyone" entry.
6248
+ * @default true
6249
+ */
6250
+ showSelectAll: boolean;
6251
+ /**
6252
+ * Optional template for the content of each selectable row, rendered to the right of the row's checkbox with the
6253
+ * MenuItem as `$implicit`, in place of the default icon + label. Use it when rows need their own layout,
6254
+ * for example a user group with a muted member count and a "Preview users" link.
6255
+ *
6256
+ * Named after the ec-menu / ec-combobox input it parallels, with one difference: the multiselect always keeps the
6257
+ * checkbox so selection, select all, and max selections keep working. Clicking anywhere in the row still toggles
6258
+ * the item; call `$event.stopPropagation()` on elements that must not (such as a link). Add the
6259
+ * `multiselect-item-hover-only` class to content that should only appear while the row is hovered, highlighted by
6260
+ * keyboard, or holds focus. Select-all and heading rows keep their built-in rendering.
6261
+ */
6262
+ customMenuTemplate?: TemplateRef<{
6263
+ $implicit: MenuItem;
6264
+ }>;
6226
6265
  /**
6227
6266
  * Notify parent when the filter text changes
6228
6267
  */
@@ -6282,6 +6321,15 @@ declare class MultiselectComponent extends FormControlBase implements OnInit, On
6282
6321
  * Whether the maximum number of selections has been reached
6283
6322
  */
6284
6323
  get maxSelectionsReached(): boolean;
6324
+ /**
6325
+ * Number of options currently shown in the menu, excluding the select-all row. Disabled items count
6326
+ * because they are displayed; this drives the "N of M" footer.
6327
+ */
6328
+ get visibleOptionCount(): number;
6329
+ /**
6330
+ * Whether the "N of M" footer is shown: only when totalRecords is known and exceeds what is displayed
6331
+ */
6332
+ get showTotalRecordsFooter(): boolean;
6285
6333
  /**
6286
6334
  * Whether all currently visible selectable options are selected
6287
6335
  */
@@ -6338,6 +6386,16 @@ declare class MultiselectComponent extends FormControlBase implements OnInit, On
6338
6386
  * The angular afterViewInit lifecycle hook
6339
6387
  */
6340
6388
  ngAfterViewInit(): void;
6389
+ /**
6390
+ * React to the popup opening or closing. Closing clears the filter so the menu reopens unfiltered.
6391
+ */
6392
+ onPopupStatusChange(event: PopupStatus): void;
6393
+ /**
6394
+ * Clear the filter text and un-filter the options. Consumers that load options from the `search` output only
6395
+ * know about the text the user typed, so when text is being cleared they are told with an empty search too;
6396
+ * otherwise the menu would reopen on their last, still-filtered result set.
6397
+ */
6398
+ private clearFilter;
6341
6399
  /**
6342
6400
  * Show and hide the popup menu
6343
6401
  */
@@ -6376,7 +6434,8 @@ declare class MultiselectComponent extends FormControlBase implements OnInit, On
6376
6434
  */
6377
6435
  clearAll(): void;
6378
6436
  /**
6379
- * Get selectable items from the current filtered options, excluding the select-all item
6437
+ * Get selectable items from the current filtered options, excluding the select-all item and any
6438
+ * disabled items. Select all and the allSelected check operate on this set so disabled items are skipped.
6380
6439
  */
6381
6440
  getVisibleSelectableItems(): MenuItem[];
6382
6441
  /**
@@ -6434,9 +6493,15 @@ declare class MultiselectComponent extends FormControlBase implements OnInit, On
6434
6493
  * When no items are selected, show the provided placeholder or the default 'Search' text.
6435
6494
  */
6436
6495
  private updatePlaceholderText;
6496
+ /**
6497
+ * Keep a checkbox control aligned with the effective disabled state of its MenuItem.
6498
+ * This covers both the raw item.disabled flag and the maxSelections lockout state.
6499
+ */
6500
+ private syncCheckboxDisabledState;
6437
6501
  /**
6438
6502
  * Get or create a FormControl for a menu item's checkbox.
6439
- * The control value is kept in sync with the item's checked state.
6503
+ * The control value is kept in sync with the item's checked state, and the control is created
6504
+ * disabled when the item itself is disabled so the rendered checkbox cannot be toggled.
6440
6505
  */
6441
6506
  getCheckboxFormControl(item: MenuItem): UntypedFormControl;
6442
6507
  /**
@@ -6453,11 +6518,12 @@ declare class MultiselectComponent extends FormControlBase implements OnInit, On
6453
6518
  * Enable or disable individual checkbox FormControls based on whether the max selections
6454
6519
  * limit has been reached. When the limit is reached, unselected items are disabled to
6455
6520
  * indicate they cannot be selected. The select all checkbox is always left enabled since
6456
- * it can be used to deselect items.
6521
+ * it can be used to deselect items. Items flagged `disabled` on the MenuItem stay disabled
6522
+ * regardless of the limit.
6457
6523
  */
6458
6524
  private updateMaxSelectionsDisabledState;
6459
6525
  static ɵfac: i0.ɵɵFactoryDeclaration<MultiselectComponent, never>;
6460
- static ɵcmp: i0.ɵɵComponentDeclaration<MultiselectComponent, "ec-multiselect", never, { "options": { "alias": "options"; "required": false; }; "menuPosition": { "alias": "menuPosition"; "required": false; }; "popupFixed": { "alias": "popupFixed"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "tagType": { "alias": "tagType"; "required": false; }; "hideNoMatches": { "alias": "hideNoMatches"; "required": false; }; "noMatchesText": { "alias": "noMatchesText"; "required": false; }; "truncateItems": { "alias": "truncateItems"; "required": false; }; "allowCustom": { "alias": "allowCustom"; "required": false; }; "maxSelections": { "alias": "maxSelections"; "required": false; }; }, { "search": "search"; "selectionChanged": "selectionChanged"; }, never, never, false, never>;
6526
+ static ɵcmp: i0.ɵɵComponentDeclaration<MultiselectComponent, "ec-multiselect", never, { "options": { "alias": "options"; "required": false; }; "menuPosition": { "alias": "menuPosition"; "required": false; }; "popupFixed": { "alias": "popupFixed"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "tagType": { "alias": "tagType"; "required": false; }; "hideNoMatches": { "alias": "hideNoMatches"; "required": false; }; "noMatchesText": { "alias": "noMatchesText"; "required": false; }; "truncateItems": { "alias": "truncateItems"; "required": false; }; "allowCustom": { "alias": "allowCustom"; "required": false; }; "maxSelections": { "alias": "maxSelections"; "required": false; }; "totalRecords": { "alias": "totalRecords"; "required": false; }; "showSelectAll": { "alias": "showSelectAll"; "required": false; }; "customMenuTemplate": { "alias": "customMenuTemplate"; "required": false; }; }, { "search": "search"; "selectionChanged": "selectionChanged"; }, never, never, false, never>;
6461
6527
  }
6462
6528
 
6463
6529
  type ComponentsModuleConfig = {