@meshmakers/shared-ui 3.4.1450 → 3.4.1490

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.
@@ -1,9 +1,9 @@
1
- import * as i0 from '@angular/core';
1
+ import * as _angular_core from '@angular/core';
2
2
  import { TemplateRef, Type, OnDestroy, AfterViewInit, EventEmitter, ElementRef, OnInit, InjectionToken, PipeTransform, OnChanges, SimpleChanges, EnvironmentProviders } from '@angular/core';
3
3
  import * as _progress_kendo_svg_icons from '@progress/kendo-svg-icons';
4
4
  import { SVGIcon } from '@progress/kendo-svg-icons';
5
5
  import { FormGroup, ControlValueAccessor, Validator, FormControl, AbstractControl, ValidationErrors } from '@angular/forms';
6
- import { CommandBaseService, CommandItem, TreeItemData, TreeItemDataTyped, EntitySelectDataSource } from '@meshmakers/shared-services';
6
+ import { CommandItem, CommandBaseService, TreeItemData, TreeItemDataTyped, EntitySelectDataSource } from '@meshmakers/shared-services';
7
7
  import { TreeViewComponent, TreeItem, NodeClickEvent, TreeItemDropEvent } from '@progress/kendo-angular-treeview';
8
8
  import { Observable } from 'rxjs';
9
9
  import { DialogContentBase, DialogRef, WindowRef } from '@progress/kendo-angular-dialog';
@@ -13,7 +13,7 @@ import { PagerSettings, SelectableSettings, SelectionEvent, PageChangeEvent, Cel
13
13
  import { SVGIcon as SVGIcon$1 } from '@progress/kendo-svg-icons/dist/svg-icon.interface';
14
14
  import { MenuItem, ContextMenuComponent, ContextMenuSelectEvent, ContextMenuPopupEvent } from '@progress/kendo-angular-menu';
15
15
  import { AutoCompleteComponent } from '@progress/kendo-angular-dropdowns';
16
- import { CompositeFilterDescriptor, SortDescriptor, State as State$1 } from '@progress/kendo-data-query';
16
+ import { State as State$1, CompositeFilterDescriptor, SortDescriptor } from '@progress/kendo-data-query';
17
17
  import { CanDeactivate } from '@angular/router';
18
18
 
19
19
  /**
@@ -41,8 +41,8 @@ import { CanDeactivate } from '@angular/router';
41
41
  */
42
42
  declare class ListViewFiltersDirective {
43
43
  readonly templateRef: TemplateRef<any>;
44
- static ɵfac: i0.ɵɵFactoryDeclaration<ListViewFiltersDirective, never>;
45
- static ɵdir: i0.ɵɵDirectiveDeclaration<ListViewFiltersDirective, "[mmListViewFilters]", never, {}, {}, never, never, true, never>;
44
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ListViewFiltersDirective, never>;
45
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ListViewFiltersDirective, "[mmListViewFilters]", never, {}, {}, never, never, true, never>;
46
46
  }
47
47
 
48
48
  /**
@@ -230,6 +230,11 @@ type RowClassFn = (context: {
230
230
  /**
231
231
  * Translatable messages for the ListViewComponent.
232
232
  * Pass translated strings to override the English defaults.
233
+ *
234
+ * Members added after the interface was first published are optional, so an app that builds a
235
+ * complete `ListViewMessages` object for an older library version keeps compiling; a member that
236
+ * is missing (or `undefined`) falls back to {@link DEFAULT_LIST_VIEW_MESSAGES}. New members must
237
+ * be added as optional for the same reason.
233
238
  */
234
239
  interface ListViewMessages {
235
240
  /** Search input placeholder. Default: "Search in all columns..." */
@@ -242,12 +247,20 @@ interface ListViewMessages {
242
247
  exportToPdf: string;
243
248
  /** Tooltip for "Refresh Data" button. Default: "Refresh Data" */
244
249
  refreshData: string;
245
- /** Tooltip for the "Reset Filters" button. Default: "Reset Filters" */
246
- resetFilters: string;
247
- /** Tooltip for the collapsed command menu. Default: "Commands" */
248
- commands: string;
250
+ /** Tooltip for the "Reset Filters" button. Default: "Reset Filters". Optional (added in 3.4). */
251
+ resetFilters?: string;
252
+ /** Tooltip for the collapsed command menu. Default: "Commands". Optional (added in 3.4). */
253
+ commands?: string;
249
254
  /** Title for the actions command column. Default: "Actions" */
250
255
  actionsColumnTitle: string;
256
+ /** Accessible name of a row's menu button; `{name}` = the row's name. Default: "Actions for {name}" */
257
+ rowActionsFor?: string;
258
+ /** Accessible name of a row's menu button when the row has no name. Default: "Row actions" */
259
+ rowActions?: string;
260
+ /** Disabled reason of a row action whose `CommandItem` has no `disabledReason` (AB#5572). Default: "Not available for this row" */
261
+ rowActionUnavailable?: string;
262
+ /** Disabled reason of every row action while the list loads (AB#5572). Default: "The list is loading" */
263
+ rowActionsLoading?: string;
251
264
  /** PDF footer page template. Default: "Page {pageNum} of {totalPages}" */
252
265
  pdfPageTemplate: string;
253
266
  /** Pager: text after page size selector. Default: "items per page" */
@@ -280,10 +293,193 @@ interface ListViewCommand {
280
293
  svgIcon: SVGIcon;
281
294
  }
282
295
  /**
283
- * Default English messages for the ListViewComponent.
296
+ * Default English messages for the ListViewComponent. Complete: every member, including the
297
+ * optional ones, has a value.
298
+ */
299
+ declare const DEFAULT_LIST_VIEW_MESSAGES: Required<ListViewMessages>;
300
+ /**
301
+ * Merges app-supplied list-view messages over {@link DEFAULT_LIST_VIEW_MESSAGES}. Members that
302
+ * are missing, `undefined` or `null` keep their default, so an app compiled against an older
303
+ * `ListViewMessages` shape (or one that leaves a translation unset) never renders an empty label.
304
+ */
305
+ declare function resolveListViewMessages(messages: Partial<ListViewMessages> | null | undefined): Required<ListViewMessages>;
306
+
307
+ /**
308
+ * One user action (AB#5570): a row action, a toolbar action or a page action. The same
309
+ * definition drives the inline icon button, the overflow menu item and the text button, so
310
+ * label, icon, danger styling and the disabled reason never diverge between them.
311
+ *
312
+ * See `octo-frontend-refinery-studio/docs/concepts/studio-action-guideline.md`.
313
+ */
314
+ interface MmAction<TId extends string = string> {
315
+ /** Stable id, emitted with the event and rendered as `data-action` (tests, analytics). */
316
+ id: TId;
317
+ /**
318
+ * Verb phrase in sentence case ("Edit", "Delete dump", "Set value"). Used as tooltip,
319
+ * menu/button text (unless `menuLabel` is set) and — together with the row label — as the
320
+ * accessible name. Never ends with "…"; put that into `menuLabel`.
321
+ */
322
+ label: string;
323
+ /**
324
+ * Visible text in menus and text buttons when it differs from `label` — typically the "…" of
325
+ * actions that open a dialog ("Delete dump…"). Tooltips and accessible names keep `label`.
326
+ * Falls back to `label`.
327
+ */
328
+ menuLabel?: string;
329
+ /** Kendo SVG icon; take it from {@link MM_ACTION_ICONS} where a canonical icon exists. */
330
+ icon?: SVGIcon;
331
+ /** Destructive action: danger styling; the handler must confirm (danger dialog, named target). */
332
+ danger?: boolean;
333
+ /**
334
+ * Why the action is not available right now. A non-empty reason disables the action
335
+ * (`aria-disabled`, still focusable) and is announced via `aria-describedby` and shown in
336
+ * the tooltip. `null`/`undefined`/`''` = enabled.
337
+ */
338
+ disabledReason?: string | null;
339
+ /** `false` hides the action (no permission, not applicable to this row). Default: visible. */
340
+ visible?: boolean;
341
+ /** Always place the action in the overflow menu, even when there is room inline. */
342
+ overflow?: boolean;
343
+ /**
344
+ * Navigation target. Inline the action renders as a real link (`routerLink`, open in new tab
345
+ * works); in the overflow menu it navigates with the Router. `triggered` still fires.
346
+ */
347
+ link?: MmActionLink;
348
+ }
349
+ /** Router target of a navigating action (`Router.navigate(commands, {queryParams})`). */
350
+ interface MmActionLink {
351
+ commands: readonly unknown[] | string;
352
+ queryParams?: Record<string, string>;
353
+ }
354
+ /** Emitted when an enabled action is triggered. */
355
+ interface MmActionEvent<TId extends string = string> {
356
+ id: TId;
357
+ action: MmAction<TId>;
358
+ }
359
+ /** Default number of row action slots (inline buttons incl. the overflow button). */
360
+ declare const MM_ROW_ACTIONS_MAX_INLINE = 3;
361
+ /**
362
+ * Canonical action icons (AB#5570). One verb, one icon, everywhere: pick from this map
363
+ * instead of importing a Kendo icon ad hoc, so "Edit" never shows a gear in one list and a
364
+ * pencil in the next.
365
+ */
366
+ declare const MM_ACTION_ICONS: {
367
+ /** Create a new item ("New adapter", "Add mapping"). */
368
+ readonly add: SVGIcon;
369
+ /** Edit / open the editable form of the item. */
370
+ readonly edit: SVGIcon;
371
+ /** Read-only view / preview. */
372
+ readonly view: SVGIcon;
373
+ /** Open the item (or a related page) in its own view / new tab. */
374
+ readonly open: SVGIcon;
375
+ /** Delete / remove the item (always `danger`). */
376
+ readonly delete: SVGIcon;
377
+ /** Clear a stored value without deleting the item ("Not needed", "Clear secret"). */
378
+ readonly clear: SVGIcon;
379
+ /** Copy an id or value to the clipboard. */
380
+ readonly copy: SVGIcon;
381
+ /** Duplicate the item as a new item. */
382
+ readonly duplicate: SVGIcon;
383
+ /** Reload data. */
384
+ readonly refresh: SVGIcon;
385
+ /** Deploy to a pool / cluster. */
386
+ readonly deploy: SVGIcon;
387
+ /** Undeploy. */
388
+ readonly undeploy: SVGIcon;
389
+ /** Run / execute / start. */
390
+ readonly run: SVGIcon;
391
+ /** Stop / cancel a running job. */
392
+ readonly stop: SVGIcon;
393
+ /** Export data (file the user saves). */
394
+ readonly export: SVGIcon;
395
+ /** Import data. */
396
+ readonly import: SVGIcon;
397
+ /** Download a file. */
398
+ readonly download: SVGIcon;
399
+ /** Show a report / log. */
400
+ readonly report: SVGIcon;
401
+ /** Restore / roll back to a stored state (e.g. restore a dump); destructive restores are `danger`. */
402
+ readonly restore: SVGIcon;
403
+ };
404
+ type MmActionIconName = keyof typeof MM_ACTION_ICONS;
405
+ /** True when the action is disabled (non-empty {@link MmAction.disabledReason}). */
406
+ declare function isActionDisabled(action: MmAction): boolean;
407
+ /** True unless the action is explicitly hidden. */
408
+ declare function isActionVisible(action: MmAction): boolean;
409
+ /**
410
+ * Accessible name of an action on a named target: "Delete dump Encrypt run 2026-10-06 17:09".
411
+ * Without a target the label alone.
284
412
  */
285
- declare const DEFAULT_LIST_VIEW_MESSAGES: ListViewMessages;
413
+ declare function actionAccessibleName(action: MmAction, targetLabel?: string | null): string;
414
+ /** Tooltip: the label, plus the reason when disabled ("Delete dump — Requires SecretManagement"). */
415
+ declare function actionTooltip(action: MmAction): string;
416
+ /**
417
+ * Splits visible actions into inline buttons and overflow-menu items. At most `maxInline`
418
+ * slots are rendered: when the actions do not fit, the last slot becomes the overflow
419
+ * button. Actions with `overflow: true` always go to the menu (and need the overflow slot).
420
+ */
421
+ declare function splitRowActions<TId extends string>(actions: readonly MmAction<TId>[], maxInline?: number): {
422
+ inline: MmAction<TId>[];
423
+ menu: MmAction<TId>[];
424
+ };
286
425
 
426
+ /**
427
+ * A row action of `mm-list-view` (AB#5572), declared once per list from the shared action model
428
+ * ({@link MmAction}): the per-row parts (`disabledReason`, `visible`, `link`) may be callbacks that
429
+ * receive the row. Rendered with the guideline rules — neutral icon buttons (danger colour only for
430
+ * `danger` actions), tooltip = label, accessible name = label + row name, at most
431
+ * `maxInlineRowActions` slots (default 3; the last one becomes "More actions for …"), disabled
432
+ * actions stay focusable and announce their reason.
433
+ *
434
+ * ```ts
435
+ * protected readonly rowActions: MmListRowAction<AdapterDto>[] = [
436
+ * { id: 'edit', label: 'Edit', icon: MM_ACTION_ICONS.edit, link: (row) => ({ commands: ['details', row.rtId] }) },
437
+ * { id: 'delete', label: 'Delete', menuLabel: 'Delete…', icon: MM_ACTION_ICONS.delete, danger: true,
438
+ * disabledReason: (row) => row.deployed ? 'Undeploy the adapter first' : null, run: (row) => this.delete(row) },
439
+ * ];
440
+ * ```
441
+ * ```html
442
+ * <mm-list-view [rowActions]="rowActions" (rowAction)="onRowAction($event)" … />
443
+ * ```
444
+ */
445
+ interface MmListRowAction<TRow = any, TId extends string = string> extends Omit<MmAction<TId>, 'disabledReason' | 'visible' | 'link'> {
446
+ /** Why the action is unavailable for this row; non-empty = disabled (focusable, announced). */
447
+ disabledReason?: string | null | ((row: TRow) => string | null | undefined);
448
+ /** `false` (or a callback returning false) hides the action for the row. */
449
+ visible?: boolean | ((row: TRow) => boolean);
450
+ /** Navigation target (inline: real router link; overflow menu: Router.navigate relative to the host route). */
451
+ link?: MmActionLink | ((row: TRow) => MmActionLink | null | undefined);
452
+ /** Optional handler; `(rowAction)` fires as well. Destructive handlers confirm first (danger dialog). */
453
+ run?: (row: TRow) => void | Promise<void>;
454
+ }
455
+ /** Emitted by `(rowAction)` for an enabled row action. */
456
+ interface MmListRowActionEvent<TRow = any, TId extends string = string> {
457
+ id: TId;
458
+ action: MmAction<TId>;
459
+ row: TRow;
460
+ }
461
+ /**
462
+ * One row action resolved for a concrete row: the rendered {@link MmAction} plus where it came from —
463
+ * a legacy `CommandItem` (`actionCommandItems`, handled via the CommandItem's link / onClick) or a
464
+ * {@link MmListRowAction} (`rowActions`).
465
+ */
466
+ interface ResolvedListRowAction {
467
+ action: MmAction;
468
+ commandItem?: CommandItem;
469
+ rowAction?: MmListRowAction;
470
+ }
471
+ /** Resolves the per-row callbacks of a {@link MmListRowAction}. */
472
+ declare function resolveListRowAction(definition: MmListRowAction, row: unknown): MmAction;
473
+ /** Structural equality of two rendered actions (keeps object identity stable across change detection). */
474
+ declare function sameAction(a: MmAction, b: MmAction): boolean;
475
+
476
+ /** Row actions of one row, split for rendering (AB#5572). */
477
+ interface RowActionsView {
478
+ inline: ResolvedListRowAction[];
479
+ menu: ResolvedListRowAction[];
480
+ /** The "…" button is shown (overflowing actions and/or context menu items). */
481
+ hasMenu: boolean;
482
+ }
287
483
  declare class ListViewComponent extends CommandBaseService implements OnDestroy, AfterViewInit {
288
484
  private readonly cronHumanizer;
289
485
  protected _columns: TableColumn[];
@@ -296,16 +492,21 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
296
492
  private _actionMenuSelectedRow;
297
493
  private _contextMenuSelectedRow;
298
494
  protected _actionMenuItems: MenuItem[];
495
+ private _rowActions;
496
+ /** Per-row resolved actions; identical results keep their identity (no NG0100, no re-render churn). */
497
+ private rowActionCache;
498
+ private readonly activatedRoute;
499
+ private readonly routerForActions;
299
500
  protected _contextMenuItems: MenuItem[];
300
501
  protected _showRowFilter: boolean;
301
502
  /** Indicates if the data source is currently loading data */
302
- protected isLoading: i0.WritableSignal<boolean>;
503
+ protected isLoading: _angular_core.WritableSignal<boolean>;
303
504
  /**
304
505
  * The component's own width in pixels, kept current via ResizeObserver.
305
506
  * `null` until the first measurement (before that, all columns render visible
306
507
  * and auto-sized). Drives `hideBelow` column hiding and `minWidth` pinning.
307
508
  */
308
- protected readonly containerWidth: i0.WritableSignal<number | null>;
509
+ protected readonly containerWidth: _angular_core.WritableSignal<number | null>;
309
510
  private readonly hostElement;
310
511
  private readonly ngZone;
311
512
  private resizeObserver?;
@@ -357,6 +558,20 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
357
558
  set actionCommandItems(commandItems: CommandItem[]);
358
559
  get contextMenuCommandItems(): CommandItem[];
359
560
  set contextMenuCommandItems(commandItems: CommandItem[]);
561
+ /**
562
+ * Row actions from the shared action model (AB#5572) — preferred over `actionCommandItems`.
563
+ * Rendered after the `actionCommandItems` (which keep working through an adapter); together they
564
+ * get at most {@link maxInlineRowActions} slots, the rest goes into the row's overflow menu.
565
+ */
566
+ set rowActions(actions: readonly MmListRowAction[] | null | undefined);
567
+ get rowActions(): readonly MmListRowAction[];
568
+ /**
569
+ * Row action slots incl. the overflow ("…") button (guideline §2.2: 3). When the actions do not
570
+ * fit, the last slot opens the overflow menu with the remaining actions and the context menu items.
571
+ */
572
+ maxInlineRowActions: number;
573
+ /** An enabled {@link rowActions} action was triggered (inline or from the overflow menu). */
574
+ rowAction: EventEmitter<MmListRowActionEvent<any, string>>;
360
575
  excelExportFileName: string;
361
576
  pdfExportFileName: string;
362
577
  pageable: PagerSettings;
@@ -412,6 +627,10 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
412
627
  * case the column has to be wide enough for.
413
628
  */
414
629
  private get maxActionButtons();
630
+ /** The context menu is opened from the row's "…" button (not by right click). */
631
+ private get hasContextMenuButton();
632
+ /** The list renders an actions column / card actions at all. */
633
+ protected get hasRowActions(): boolean;
415
634
  /**
416
635
  * The actions column width actually used.
417
636
  *
@@ -456,14 +675,31 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
456
675
  * the window ever resizing.
457
676
  */
458
677
  collapseCommandsBelow: number;
678
+ /**
679
+ * Tells the list that the host holds filters of its own (quick-view bars,
680
+ * app-side field filters) that a reset would clear. The toolbar's reset
681
+ * button only shows while something is filtered, and the list cannot see
682
+ * those host filters by itself.
683
+ */
684
+ hasExternalFilters: boolean;
685
+ /**
686
+ * Whether anything narrows or reorders the default view right now: a row
687
+ * filter, a column sort, free-text search, or host-side filters announced
688
+ * through {@link hasExternalFilters}. Paging is deliberately not counted —
689
+ * the pager already gets back to page 1.
690
+ */
691
+ protected get hasActiveFilters(): boolean;
459
692
  /** True while the command buttons are collapsed into the overflow menu. */
460
693
  protected get commandsCollapsed(): boolean;
461
694
  /**
462
695
  * The commands available right now, in toolbar order. The row filter is
463
696
  * omitted in card mode: cards have no column headers for a filter row to
464
697
  * appear in, and the grid already drops `filterable` there — leaving the
465
- * button visible offered to toggle something that cannot exist. Reset stays
466
- * available, or a filter set before the switch could never be cleared.
698
+ * button visible offered to toggle something that cannot exist. Reset shows
699
+ * only while something is actually filtered, sorted or searched (see
700
+ * {@link hasActiveFilters}); on the default view there is nothing to reset,
701
+ * so the button would only be noise. It is independent of card mode, so a
702
+ * filter set before the switch can still be cleared.
467
703
  */
468
704
  protected get toolbarCommands(): ListViewCommand[];
469
705
  /**
@@ -486,9 +722,13 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
486
722
  */
487
723
  rowClass: RowClassFn | undefined;
488
724
  protected readonly defaultRowClass: RowClassFn;
489
- protected _messages: ListViewMessages;
490
- set messages(value: Partial<ListViewMessages>);
491
- get messages(): ListViewMessages;
725
+ protected _messages: Required<ListViewMessages>;
726
+ /**
727
+ * Translated messages. Partial: members that are not supplied (or are `undefined`) keep the
728
+ * English default from `DEFAULT_LIST_VIEW_MESSAGES`.
729
+ */
730
+ set messages(value: Partial<ListViewMessages> | null | undefined);
731
+ get messages(): Required<ListViewMessages>;
492
732
  selectable: SelectableSettings;
493
733
  set columns(cols: ColumnDefinition[]);
494
734
  get columns(): TableColumn[];
@@ -550,6 +790,22 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
550
790
  * with a hint message.
551
791
  */
552
792
  protected getToolbarItemDisabled(commandItem: CommandItem): boolean;
793
+ /**
794
+ * Accessible name of a host toolbar action. A button with a visible text is named by that
795
+ * text; an icon-only one (no text) gets its tooltip as `aria-label`, because `title` alone is
796
+ * not reliably announced (action guideline §2.2: icon-only = tooltip + aria-label).
797
+ */
798
+ protected toolbarItemAriaLabel(commandItem: CommandItem): string | null;
799
+ private readonly buttonAttributesCache;
800
+ private static readonly NO_BUTTON_ATTRIBUTES;
801
+ /**
802
+ * `buttonAttributes` for Kendo split / dropdown buttons: same rule as
803
+ * {@link toolbarItemAriaLabel}, cached per label so change detection sees a stable object.
804
+ */
805
+ protected toolbarItemButtonAttributes(commandItem: CommandItem): Record<string, string>;
806
+ /** `buttonAttributes` of the icon-only menu the commands collapse into. */
807
+ protected get commandsMenuButtonAttributes(): Record<string, string>;
808
+ private ariaLabelAttributes;
553
809
  protected getValue(element: Record<string, unknown>, column: TableColumn): unknown;
554
810
  /**
555
811
  * Produces the formatted cell content when a column defines a `formatter` callback.
@@ -564,6 +820,14 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
564
820
  */
565
821
  protected getCellTitle(element: Record<string, unknown>, column: TableColumn): string | null;
566
822
  protected getFilterType(column: TableColumn): 'text' | 'numeric' | 'boolean' | 'date';
823
+ /** Input attributes of a read-only boolean cell, cached per column and name (AB#5621). */
824
+ private readonly booleanCellAttributeCache;
825
+ /**
826
+ * Input attributes of a `boolean` cell's read-only checkbox: its accessible name is the column's
827
+ * display name (AB#5621), so a screen reader announces "<column>, checked" instead of an unnamed
828
+ * checkbox.
829
+ */
830
+ protected booleanCellAttributes(column: TableColumn): Record<string, string>;
567
831
  /**
568
832
  * Gets all status field configurations for a statusIcons column.
569
833
  * Returns an array of StatusFieldConfig, whether the column uses single or multi-field configuration.
@@ -636,11 +900,33 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
636
900
  */
637
901
  private clampContextMenuX;
638
902
  protected onSelectOptionActionItem(event: Event, dataItem: unknown, menuItem: MenuItem): Promise<void>;
903
+ /**
904
+ * Row field naming a row for assistive technology (row menu "Actions for <name>", action
905
+ * buttons "<action> <name>"). Falls back to `rtWellKnownName`, then `rtId`.
906
+ */
907
+ rowLabelField: string;
908
+ /** Human name of a row (`rowLabelField`, `rtWellKnownName`, `rtId`), or '' when unknown. */
909
+ protected rowLabel(dataItem: unknown): string;
910
+ /** Accessible name and tooltip of the row menu button. */
911
+ protected rowActionsLabel(dataItem: unknown): string;
639
912
  protected getMenuItemVisible(menuItem: MenuItem, dataItem: unknown): boolean;
640
913
  protected getMenuItemDisabled(menuItem: MenuItem, dataItem: unknown): boolean;
641
914
  protected onContextMenu(dataItem: unknown, e: PointerEvent): void;
642
915
  private buildContextMenuItemsWithDisabledState;
643
916
  protected onContextMenuClosed(_event: ContextMenuPopupEvent): void;
917
+ /**
918
+ * Row actions of one row (AB#5572): `actionCommandItems` (adapter) followed by `rowActions`,
919
+ * split into inline buttons and overflow-menu entries (max {@link maxInlineRowActions} slots,
920
+ * context menu items and `overflow: true` actions force the "…" button).
921
+ */
922
+ protected rowActionsView(dataItem: unknown): RowActionsView;
923
+ /** Accessible name of the row action group: "Actions for <row>". */
924
+ protected rowActionsGroupLabel(dataItem: unknown): string;
925
+ protected onInlineRowAction(entry: ResolvedListRowAction, dataItem: unknown): Promise<void>;
926
+ private triggerRowAction;
927
+ /** `CommandItem` → `MmAction` adapter (AB#5572): `isDisabled` → reason, `danger`, icon, text. */
928
+ private commandItemAction;
929
+ private stableView;
644
930
  protected onToolbarCommand(commandItem: CommandItem): Promise<void>;
645
931
  protected onToolbarDropdownItemClick(childItem: CommandItem): Promise<void>;
646
932
  private buildMenuItems;
@@ -654,8 +940,8 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
654
940
  * are told apart by meaning rather than by dot orientation.
655
941
  */
656
942
  protected readonly commandsIcon: SVGIcon$1;
657
- static ɵfac: i0.ɵɵFactoryDeclaration<ListViewComponent, never>;
658
- static ɵcmp: i0.ɵɵComponentDeclaration<ListViewComponent, "mm-list-view", never, { "pageSize": { "alias": "pageSize"; "required": false; }; "skip": { "alias": "skip"; "required": false; }; "autoPageSize": { "alias": "autoPageSize"; "required": false; }; "rowIsClickable": { "alias": "rowIsClickable"; "required": false; }; "showRowCheckBoxes": { "alias": "showRowCheckBoxes"; "required": false; }; "showRowSelectAllCheckBox": { "alias": "showRowSelectAllCheckBox"; "required": false; }; "contextMenuType": { "alias": "contextMenuType"; "required": false; }; "leftToolbarActions": { "alias": "leftToolbarActions"; "required": false; }; "rightToolbarActions": { "alias": "rightToolbarActions"; "required": false; }; "actionCommandItems": { "alias": "actionCommandItems"; "required": false; }; "contextMenuCommandItems": { "alias": "contextMenuCommandItems"; "required": false; }; "excelExportFileName": { "alias": "excelExportFileName"; "required": false; }; "pdfExportFileName": { "alias": "pdfExportFileName"; "required": false; }; "pageable": { "alias": "pageable"; "required": false; }; "sortable": { "alias": "sortable"; "required": false; }; "rowFilterEnabled": { "alias": "rowFilterEnabled"; "required": false; }; "searchTextBoxEnabled": { "alias": "searchTextBoxEnabled"; "required": false; }; "persistListState": { "alias": "persistListState"; "required": false; }; "listStateKey": { "alias": "listStateKey"; "required": false; }; "resizable": { "alias": "resizable"; "required": false; }; "actionsColumnWidth": { "alias": "actionsColumnWidth"; "required": false; }; "hideCheckboxesBelow": { "alias": "hideCheckboxesBelow"; "required": false; }; "cardModeBelow": { "alias": "cardModeBelow"; "required": false; }; "collapseCommandsBelow": { "alias": "collapseCommandsBelow"; "required": false; }; "rowClass": { "alias": "rowClass"; "required": false; }; "messages": { "alias": "messages"; "required": false; }; "selectable": { "alias": "selectable"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; }, { "rowClicked": "rowClicked"; "resetFilters": "resetFilters"; }, ["filtersTemplate"], never, true, never>;
943
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ListViewComponent, never>;
944
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ListViewComponent, "mm-list-view", never, { "pageSize": { "alias": "pageSize"; "required": false; }; "skip": { "alias": "skip"; "required": false; }; "autoPageSize": { "alias": "autoPageSize"; "required": false; }; "rowIsClickable": { "alias": "rowIsClickable"; "required": false; }; "showRowCheckBoxes": { "alias": "showRowCheckBoxes"; "required": false; }; "showRowSelectAllCheckBox": { "alias": "showRowSelectAllCheckBox"; "required": false; }; "contextMenuType": { "alias": "contextMenuType"; "required": false; }; "leftToolbarActions": { "alias": "leftToolbarActions"; "required": false; }; "rightToolbarActions": { "alias": "rightToolbarActions"; "required": false; }; "actionCommandItems": { "alias": "actionCommandItems"; "required": false; }; "contextMenuCommandItems": { "alias": "contextMenuCommandItems"; "required": false; }; "rowActions": { "alias": "rowActions"; "required": false; }; "maxInlineRowActions": { "alias": "maxInlineRowActions"; "required": false; }; "excelExportFileName": { "alias": "excelExportFileName"; "required": false; }; "pdfExportFileName": { "alias": "pdfExportFileName"; "required": false; }; "pageable": { "alias": "pageable"; "required": false; }; "sortable": { "alias": "sortable"; "required": false; }; "rowFilterEnabled": { "alias": "rowFilterEnabled"; "required": false; }; "searchTextBoxEnabled": { "alias": "searchTextBoxEnabled"; "required": false; }; "persistListState": { "alias": "persistListState"; "required": false; }; "listStateKey": { "alias": "listStateKey"; "required": false; }; "resizable": { "alias": "resizable"; "required": false; }; "actionsColumnWidth": { "alias": "actionsColumnWidth"; "required": false; }; "hideCheckboxesBelow": { "alias": "hideCheckboxesBelow"; "required": false; }; "cardModeBelow": { "alias": "cardModeBelow"; "required": false; }; "collapseCommandsBelow": { "alias": "collapseCommandsBelow"; "required": false; }; "hasExternalFilters": { "alias": "hasExternalFilters"; "required": false; }; "rowClass": { "alias": "rowClass"; "required": false; }; "messages": { "alias": "messages"; "required": false; }; "selectable": { "alias": "selectable"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "rowLabelField": { "alias": "rowLabelField"; "required": false; }; }, { "rowClicked": "rowClicked"; "rowAction": "rowAction"; "resetFilters": "resetFilters"; }, ["filtersTemplate"], never, true, never>;
659
945
  }
660
946
 
661
947
  declare const upload: {
@@ -675,9 +961,9 @@ declare class UploadFileDialogComponent extends DialogContentBase {
675
961
  message: string;
676
962
  mimeTypes: string | null;
677
963
  fileExtensions: string | null;
678
- protected fileName: i0.WritableSignal<string>;
679
- protected fileSize: i0.WritableSignal<number>;
680
- protected uploadProgress: i0.WritableSignal<number>;
964
+ protected fileName: _angular_core.WritableSignal<string>;
965
+ protected fileSize: _angular_core.WritableSignal<number>;
966
+ protected uploadProgress: _angular_core.WritableSignal<number>;
681
967
  protected fileInput: ElementRef | undefined;
682
968
  protected selectedFile: File | null;
683
969
  protected uploadSuccess: boolean;
@@ -692,8 +978,8 @@ declare class UploadFileDialogComponent extends DialogContentBase {
692
978
  onCancel(): void;
693
979
  protected get upload(): typeof upload;
694
980
  protected get deleteIcon(): typeof deleteIcon;
695
- static ɵfac: i0.ɵɵFactoryDeclaration<UploadFileDialogComponent, never>;
696
- static ɵcmp: i0.ɵɵComponentDeclaration<UploadFileDialogComponent, "mm-upload-file-dialog", never, { "message": { "alias": "message"; "required": false; }; "mimeTypes": { "alias": "mimeTypes"; "required": false; }; "fileExtensions": { "alias": "fileExtensions"; "required": false; }; }, {}, never, never, true, never>;
981
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UploadFileDialogComponent, never>;
982
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UploadFileDialogComponent, "mm-upload-file-dialog", never, { "message": { "alias": "message"; "required": false; }; "mimeTypes": { "alias": "mimeTypes"; "required": false; }; "fileExtensions": { "alias": "fileExtensions"; "required": false; }; }, {}, never, never, true, never>;
697
983
  }
698
984
 
699
985
  interface InputDialogMessages {
@@ -714,8 +1000,8 @@ declare class InputDialogComponent extends DialogContentBase {
714
1000
  constructor();
715
1001
  protected onOk(): void;
716
1002
  protected onCancel(): void;
717
- static ɵfac: i0.ɵɵFactoryDeclaration<InputDialogComponent, never>;
718
- static ɵcmp: i0.ɵɵComponentDeclaration<InputDialogComponent, "mm-input-dialog", never, { "buttonOkText": { "alias": "buttonOkText"; "required": false; }; "message": { "alias": "message"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "inputValue": { "alias": "inputValue"; "required": false; }; "messages": { "alias": "messages"; "required": false; }; }, {}, never, never, true, never>;
1003
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<InputDialogComponent, never>;
1004
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<InputDialogComponent, "mm-input-dialog", never, { "buttonOkText": { "alias": "buttonOkText"; "required": false; }; "message": { "alias": "message"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "inputValue": { "alias": "inputValue"; "required": false; }; "messages": { "alias": "messages"; "required": false; }; }, {}, never, never, true, never>;
719
1005
  }
720
1006
 
721
1007
  declare abstract class HierarchyDataSource {
@@ -810,8 +1096,8 @@ declare class TreeComponent implements OnInit, AfterViewInit, OnDestroy {
810
1096
  setExpandedKeys(keys: string[]): void;
811
1097
  private _clearTimeouts;
812
1098
  ngOnDestroy(): void;
813
- static ɵfac: i0.ɵɵFactoryDeclaration<TreeComponent, never>;
814
- static ɵcmp: i0.ɵɵComponentDeclaration<TreeComponent, "mm-tree-view", never, { "dataSource": { "alias": "dataSource"; "required": false; }; }, { "nodeSelected": "nodeSelected"; "nodeClick": "nodeClick"; "nodeDoubleClick": "nodeDoubleClick"; "nodeDrop": "nodeDrop"; "expand": "expand"; "collapse": "collapse"; }, never, never, true, never>;
1099
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TreeComponent, never>;
1100
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TreeComponent, "mm-tree-view", never, { "dataSource": { "alias": "dataSource"; "required": false; }; }, { "nodeSelected": "nodeSelected"; "nodeClick": "nodeClick"; "nodeDoubleClick": "nodeDoubleClick"; "nodeDrop": "nodeDrop"; "expand": "expand"; "collapse": "collapse"; }, never, never, true, never>;
815
1101
  }
816
1102
 
817
1103
  /**
@@ -901,14 +1187,14 @@ declare class UnsavedChangesDirective {
901
1187
  */
902
1188
  onBeforeUnload(event: BeforeUnloadEvent): void;
903
1189
  private hostHasUnsavedChanges;
904
- static ɵfac: i0.ɵɵFactoryDeclaration<UnsavedChangesDirective, never>;
905
- static ɵdir: i0.ɵɵDirectiveDeclaration<UnsavedChangesDirective, "[mmUnsavedChanges]", never, {}, {}, never, never, true, never>;
1190
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UnsavedChangesDirective, never>;
1191
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UnsavedChangesDirective, "[mmUnsavedChanges]", never, {}, {}, never, never, true, never>;
906
1192
  }
907
1193
 
908
1194
  declare class FormTitleExtraDirective {
909
1195
  readonly templateRef: TemplateRef<any>;
910
- static ɵfac: i0.ɵɵFactoryDeclaration<FormTitleExtraDirective, never>;
911
- static ɵdir: i0.ɵɵDirectiveDeclaration<FormTitleExtraDirective, "[mmFormTitleExtra]", never, {}, {}, never, never, true, never>;
1196
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormTitleExtraDirective, never>;
1197
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<FormTitleExtraDirective, "[mmFormTitleExtra]", never, {}, {}, never, never, true, never>;
912
1198
  }
913
1199
  interface ResponsiveFormBreakPoint {
914
1200
  maxWidth: number;
@@ -1000,8 +1286,8 @@ declare class BaseFormComponent implements HasUnsavedChanges {
1000
1286
  * Uses config.hasChanges if provided, otherwise falls back to form.dirty.
1001
1287
  */
1002
1288
  hasUnsavedChanges(): boolean;
1003
- static ɵfac: i0.ɵɵFactoryDeclaration<BaseFormComponent, never>;
1004
- static ɵcmp: i0.ɵɵComponentDeclaration<BaseFormComponent, "mm-base-form", never, { "form": { "alias": "form"; "required": false; }; "config": { "alias": "config"; "required": false; }; }, { "saveForm": "saveForm"; "cancelForm": "cancelForm"; }, ["titleExtra"], ["*", "[additionalActions]"], true, [{ directive: typeof UnsavedChangesDirective; inputs: {}; outputs: {}; }]>;
1289
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BaseFormComponent, never>;
1290
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<BaseFormComponent, "mm-base-form", never, { "form": { "alias": "form"; "required": false; }; "config": { "alias": "config"; "required": false; }; }, { "saveForm": "saveForm"; "cancelForm": "cancelForm"; }, ["titleExtra"], ["*", "[additionalActions]"], true, [{ directive: typeof UnsavedChangesDirective; inputs: {}; outputs: {}; }]>;
1005
1291
  }
1006
1292
 
1007
1293
  declare class BaseTreeDetailComponent<T = unknown> extends CommandBaseService {
@@ -1045,8 +1331,8 @@ declare class BaseTreeDetailComponent<T = unknown> extends CommandBaseService {
1045
1331
  getExpandedKeys(): string[];
1046
1332
  collapseAll(): void;
1047
1333
  setExpandedKeys(keys: string[]): void;
1048
- static ɵfac: i0.ɵɵFactoryDeclaration<BaseTreeDetailComponent<any>, never>;
1049
- static ɵcmp: i0.ɵɵComponentDeclaration<BaseTreeDetailComponent<any>, "mm-base-tree-detail", never, { "treeDataSource": { "alias": "treeDataSource"; "required": false; }; "leftPaneSize": { "alias": "leftPaneSize"; "required": false; }; "leftToolbarActions": { "alias": "leftToolbarActions"; "required": false; }; "rightToolbarActions": { "alias": "rightToolbarActions"; "required": false; }; }, { "nodeSelected": "nodeSelected"; "nodeDropped": "nodeDropped"; }, never, ["[slot=detail-panel]"], true, never>;
1334
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BaseTreeDetailComponent<any>, never>;
1335
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<BaseTreeDetailComponent<any>, "mm-base-tree-detail", never, { "treeDataSource": { "alias": "treeDataSource"; "required": false; }; "leftPaneSize": { "alias": "leftPaneSize"; "required": false; }; "leftToolbarActions": { "alias": "leftToolbarActions"; "required": false; }; "rightToolbarActions": { "alias": "rightToolbarActions"; "required": false; }; }, { "nodeSelected": "nodeSelected"; "nodeDropped": "nodeDropped"; }, never, ["[slot=detail-panel]"], true, never>;
1050
1336
  }
1051
1337
 
1052
1338
  declare class ProgressValue {
@@ -1083,8 +1369,8 @@ declare class ProgressWindowComponent extends DialogContentBase implements OnDes
1083
1369
  ngAfterViewInit(): void;
1084
1370
  ngOnDestroy(): void;
1085
1371
  onCancelClick(): void;
1086
- static ɵfac: i0.ɵɵFactoryDeclaration<ProgressWindowComponent, never>;
1087
- static ɵcmp: i0.ɵɵComponentDeclaration<ProgressWindowComponent, "mm-progress-window", never, { "isDeterminate": { "alias": "isDeterminate"; "required": false; }; "progress": { "alias": "progress"; "required": false; }; "isCancelOperationAvailable": { "alias": "isCancelOperationAvailable"; "required": false; }; "cancelOperation": { "alias": "cancelOperation"; "required": false; }; "messages": { "alias": "messages"; "required": false; }; }, {}, never, never, true, never>;
1372
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ProgressWindowComponent, never>;
1373
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ProgressWindowComponent, "mm-progress-window", never, { "isDeterminate": { "alias": "isDeterminate"; "required": false; }; "progress": { "alias": "progress"; "required": false; }; "isCancelOperationAvailable": { "alias": "isCancelOperationAvailable"; "required": false; }; "cancelOperation": { "alias": "cancelOperation"; "required": false; }; "messages": { "alias": "messages"; "required": false; }; }, {}, never, never, true, never>;
1088
1374
  }
1089
1375
 
1090
1376
  declare class ProgressWindowService {
@@ -1107,8 +1393,8 @@ declare class ProgressWindowService {
1107
1393
  * @returns DialogRef for the progress window
1108
1394
  */
1109
1395
  showIndeterminateProgress(title: string, progress: Observable<ProgressValue>, options?: Partial<ProgressWindowOptions>): DialogRef;
1110
- static ɵfac: i0.ɵɵFactoryDeclaration<ProgressWindowService, never>;
1111
- static ɵprov: i0.ɵɵInjectableDeclaration<ProgressWindowService>;
1396
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ProgressWindowService, never>;
1397
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ProgressWindowService>;
1112
1398
  }
1113
1399
  interface ProgressWindowConfig {
1114
1400
  title: string;
@@ -1162,6 +1448,8 @@ interface ConfirmationWindowData {
1162
1448
  dialogType: DialogType;
1163
1449
  buttonLabels?: ConfirmationButtonLabels;
1164
1450
  messages?: Partial<ConfirmationWindowMessages>;
1451
+ /** Destructive confirmation: the confirming (right-most) button is styled as danger (`themeColor="error"`). */
1452
+ danger?: boolean;
1165
1453
  }
1166
1454
  declare class ConfirmationWindowResult {
1167
1455
  result: ButtonTypes;
@@ -1189,11 +1477,17 @@ declare class ConfirmationWindowComponent extends DialogContentBase implements O
1189
1477
  protected button3Result: ButtonTypes | null;
1190
1478
  constructor();
1191
1479
  ngOnInit(): void;
1480
+ private readonly host;
1481
+ /**
1482
+ * Destructive confirmations start with the focus on the dismissing button (AB#5578): Enter must
1483
+ * never confirm a delete. Backs up the service's `autoFocusedElement`.
1484
+ */
1485
+ ngAfterViewInit(): void;
1192
1486
  onButton1(): void;
1193
1487
  onButton2(): void;
1194
1488
  onButton3(): void;
1195
- static ɵfac: i0.ɵɵFactoryDeclaration<ConfirmationWindowComponent, never>;
1196
- static ɵcmp: i0.ɵɵComponentDeclaration<ConfirmationWindowComponent, "mm-confirmation-window", never, { "data": { "alias": "data"; "required": false; }; }, {}, never, never, true, never>;
1489
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ConfirmationWindowComponent, never>;
1490
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConfirmationWindowComponent, "mm-confirmation-window", never, { "data": { "alias": "data"; "required": false; }; }, {}, never, never, true, never>;
1197
1491
  }
1198
1492
 
1199
1493
  interface FetchResult<T = unknown> {
@@ -1245,7 +1539,7 @@ declare abstract class DataSourceBase {
1245
1539
  * Kept current by MmListViewDataBindingDirective; lets host pages show the
1246
1540
  * overall count (e.g. in a header badge) without a second query.
1247
1541
  */
1248
- readonly totalCount: i0.Signal<number | null>;
1542
+ readonly totalCount: _angular_core.Signal<number | null>;
1249
1543
  /** Set the total row count (called by MmListViewDataBindingDirective) */
1250
1544
  setTotalCount(count: number | null): void;
1251
1545
  protected constructor(listViewComponent: ListViewComponent);
@@ -1280,6 +1574,12 @@ declare class MmListViewDataBindingDirective extends DataBindingDirective implem
1280
1574
  get isLoading$(): Observable<boolean>;
1281
1575
  /** Current loading state */
1282
1576
  get isLoading(): boolean;
1577
+ /**
1578
+ * Read-only view of the grid state (filter, sort, skip, take) Kendo keeps
1579
+ * protected on the base directive. The list view consults it to decide
1580
+ * whether anything is filtered right now.
1581
+ */
1582
+ get currentState(): State$1;
1283
1583
  private _serviceSubscription;
1284
1584
  private _executeFilterSubscription;
1285
1585
  private _fetchAgainSubscription;
@@ -1328,20 +1628,20 @@ declare class MmListViewDataBindingDirective extends DataBindingDirective implem
1328
1628
  /** Writes the current sort/filter/skip + free-text search for this list to storage (best-effort). */
1329
1629
  private persistState;
1330
1630
  rebind(): void;
1331
- static ɵfac: i0.ɵɵFactoryDeclaration<MmListViewDataBindingDirective, never>;
1332
- static ɵdir: i0.ɵɵDirectiveDeclaration<MmListViewDataBindingDirective, "[mmListViewDataBinding]", never, {}, {}, never, never, true, never>;
1631
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MmListViewDataBindingDirective, never>;
1632
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MmListViewDataBindingDirective, "[mmListViewDataBinding]", never, {}, {}, never, never, true, never>;
1333
1633
  }
1334
1634
 
1335
1635
  declare class PascalCasePipe implements PipeTransform {
1336
1636
  transform(value: string): string;
1337
- static ɵfac: i0.ɵɵFactoryDeclaration<PascalCasePipe, never>;
1338
- static ɵpipe: i0.ɵɵPipeDeclaration<PascalCasePipe, "pascalCase", true>;
1637
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PascalCasePipe, never>;
1638
+ static ɵpipe: _angular_core.ɵɵPipeDeclaration<PascalCasePipe, "pascalCase", true>;
1339
1639
  }
1340
1640
 
1341
1641
  declare class BytesToSizePipe implements PipeTransform {
1342
1642
  transform(value: number, decimals?: number): string;
1343
- static ɵfac: i0.ɵɵFactoryDeclaration<BytesToSizePipe, never>;
1344
- static ɵpipe: i0.ɵɵPipeDeclaration<BytesToSizePipe, "bytesToSize", true>;
1643
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BytesToSizePipe, never>;
1644
+ static ɵpipe: _angular_core.ɵɵPipeDeclaration<BytesToSizePipe, "bytesToSize", true>;
1345
1645
  }
1346
1646
 
1347
1647
  declare enum ImportStrategyDto {
@@ -1352,28 +1652,132 @@ declare enum ImportStrategyDto {
1352
1652
  declare class FileUploadService {
1353
1653
  private readonly dialogService;
1354
1654
  showUploadDialog(title: string, message: string, mimeTypes?: string | null, fileExtensions?: string | null): Promise<File | null>;
1355
- static ɵfac: i0.ɵɵFactoryDeclaration<FileUploadService, never>;
1356
- static ɵprov: i0.ɵɵInjectableDeclaration<FileUploadService>;
1655
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FileUploadService, never>;
1656
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<FileUploadService>;
1357
1657
  }
1358
1658
 
1659
+ /**
1660
+ * Texts of the danger confirmation (AB#5578); apps translate them like the other shared-ui
1661
+ * dialogs (`Partial<…Messages>` per call or as `ConfirmationService.defaultDangerMessages`).
1662
+ */
1663
+ interface DangerConfirmationMessages {
1664
+ /** Dismissing button. Default: "Cancel" */
1665
+ cancel: string;
1666
+ /** Label of the type-to-confirm input; `{name}` = target name. Default: "Type {name} to confirm" */
1667
+ typeToConfirm: string;
1668
+ /** Environment notice; `{environment}` = environment label. Default: "{environment} environment. Check the target before you confirm." */
1669
+ environmentNotice: string;
1670
+ /** Label in front of the target. Default: "Target" */
1671
+ target: string;
1672
+ }
1673
+ declare const DEFAULT_DANGER_CONFIRMATION_MESSAGES: DangerConfirmationMessages;
1674
+ /**
1675
+ * A destructive action's confirmation (Studio action guideline §2.4, AB#5578): the title names
1676
+ * the target, the body says what is lost, the confirming button names the verb + object and is
1677
+ * danger-styled on the right, Cancel on the left. Optionally the user has to type the target
1678
+ * name before the confirming button enables (production tenants).
1679
+ *
1680
+ * ```ts
1681
+ * const ok = await confirmation.showDangerConfirm({
1682
+ * title: 'Delete adapter Mesh Adapter?',
1683
+ * targetName: 'Mesh Adapter',
1684
+ * consequence: 'The adapter and its configuration are deleted. This cannot be undone.',
1685
+ * confirmText: 'Delete adapter',
1686
+ * });
1687
+ * ```
1688
+ */
1689
+ interface DangerConfirmationOptions {
1690
+ /** Dialog title naming the target ("Delete adapter Mesh Adapter?"). */
1691
+ title: string;
1692
+ /** Name of the affected item ("Mesh Adapter", "3 adapters"); shown emphasised and typed when required. */
1693
+ targetName: string;
1694
+ /** What is lost and whether it can be undone. */
1695
+ consequence: string;
1696
+ /** Confirming button: verb + object ("Delete adapter"), never "Yes" / "OK". */
1697
+ confirmText: string;
1698
+ /** Overrides `messages.cancel`. */
1699
+ cancelText?: string;
1700
+ /** The confirming button enables only once `targetName` is typed exactly (trimmed). */
1701
+ requireTypingName?: boolean;
1702
+ /** Environment label ("PRODUCTION", "STAGING") — shows the environment notice; omit in dev/test tenants. */
1703
+ environmentLabel?: string | null;
1704
+ messages?: Partial<DangerConfirmationMessages>;
1705
+ }
1706
+ /** Word typed when the target name is empty and no confirm text is set either. */
1707
+ declare const DANGER_CONFIRM_FALLBACK_WORD = "DELETE";
1708
+ /**
1709
+ * The text the user has to type when `requireTypingName` is set: the target name, or — when the
1710
+ * target name is empty/whitespace — the confirm button text, else {@link DANGER_CONFIRM_FALLBACK_WORD}.
1711
+ * Never empty, so an empty input can never satisfy the type-to-confirm rule.
1712
+ */
1713
+ declare function dangerConfirmTypingToken(options: Pick<DangerConfirmationOptions, 'targetName' | 'confirmText'>): string;
1714
+ /**
1715
+ * True when `typed` matches the target name (trimmed, case-sensitive). An empty/whitespace target
1716
+ * name never matches — use {@link dangerConfirmTypingToken} to get a non-empty word to type.
1717
+ */
1718
+ declare function dangerConfirmNameMatches(typed: string | null | undefined, targetName: string): boolean;
1719
+ /**
1720
+ * App-wide environment defaults of {@link ConfirmationService.showDangerConfirm} (AB#5578), e.g.
1721
+ * "production tenants type the target name". Applied whenever a caller — typically a library
1722
+ * component — leaves `requireTypingName` / `environmentLabel` unset; explicit caller options win.
1723
+ */
1724
+ interface DangerConfirmEnvironment {
1725
+ /** Default of `requireTypingName`. */
1726
+ requireTypingName: boolean;
1727
+ /** Default of `environmentLabel` ("PRODUCTION", "STAGING"); `null`/omitted = no notice. */
1728
+ environmentLabel?: string | null;
1729
+ }
1730
+ /**
1731
+ * Optional hook providing the current {@link DangerConfirmEnvironment}; evaluated each time a
1732
+ * danger confirmation opens (so it may read signals). Absent = behaviour unchanged.
1733
+ *
1734
+ * ```ts
1735
+ * { provide: DANGER_CONFIRM_ENVIRONMENT, useFactory: () => {
1736
+ * const mode = inject(MyEnvironmentService);
1737
+ * return () => ({ requireTypingName: mode.isProduction(), environmentLabel: mode.label() });
1738
+ * } }
1739
+ * ```
1740
+ */
1741
+ declare const DANGER_CONFIRM_ENVIRONMENT: InjectionToken<() => DangerConfirmEnvironment>;
1742
+ /** Applies the environment defaults to options that leave `requireTypingName` / `environmentLabel` unset. */
1743
+ declare function applyDangerConfirmEnvironment(options: DangerConfirmationOptions, environment: DangerConfirmEnvironment | null | undefined): DangerConfirmationOptions;
1744
+
1359
1745
  declare class ConfirmationService {
1360
1746
  private readonly dialogService;
1747
+ /** Optional app-wide environment defaults (e.g. production → type the name), AB#5578. */
1748
+ private readonly dangerEnvironment;
1361
1749
  defaultMessages: Partial<ConfirmationWindowMessages> | undefined;
1750
+ /** App-wide translations of {@link showDangerConfirm}; per-call `options.messages` win. */
1751
+ defaultDangerMessages: Partial<DangerConfirmationMessages> | undefined;
1752
+ /**
1753
+ * Danger confirmation that names the target (Studio action guideline §2.4, AB#5578): title +
1754
+ * target + consequence, Cancel left / danger confirm right, initial focus on Cancel (or on the
1755
+ * type-to-confirm input when `requireTypingName`, e.g. in production tenants). Resolves `true`
1756
+ * only when the confirming button was used. Unset `requireTypingName` / `environmentLabel` fall
1757
+ * back to the app's {@link DANGER_CONFIRM_ENVIRONMENT}, if provided.
1758
+ */
1759
+ showDangerConfirm(callerOptions: DangerConfirmationOptions): Promise<boolean>;
1362
1760
  showYesNoConfirmationDialog(title: string, message: string, cssClass?: string, buttonLabels?: ConfirmationButtonLabels, messages?: Partial<ConfirmationWindowMessages>): Promise<boolean>;
1363
1761
  showYesNoCancelConfirmationDialog(title: string, message: string, buttonLabels?: ConfirmationButtonLabels, messages?: Partial<ConfirmationWindowMessages>): Promise<ConfirmationWindowResult | undefined>;
1364
1762
  showOkCancelConfirmationDialog(title: string, message: string, messages?: Partial<ConfirmationWindowMessages>): Promise<boolean>;
1763
+ /**
1764
+ * Confirmation of a destructive action: explicit verb labels instead of Yes / No (e.g.
1765
+ * "Rotate" / "Cancel") and the confirming button styled as danger. Resolves `true` only when
1766
+ * the confirming button was clicked.
1767
+ */
1768
+ showDestructiveConfirmationDialog(title: string, message: string, confirmLabel: string, cancelLabel?: string): Promise<boolean>;
1365
1769
  showOkDialog(title: string, message: string, messages?: Partial<ConfirmationWindowMessages>): Promise<boolean>;
1366
1770
  private openDialog;
1367
- static ɵfac: i0.ɵɵFactoryDeclaration<ConfirmationService, never>;
1368
- static ɵprov: i0.ɵɵInjectableDeclaration<ConfirmationService>;
1771
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ConfirmationService, never>;
1772
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ConfirmationService>;
1369
1773
  }
1370
1774
 
1371
1775
  declare class InputService {
1372
1776
  private readonly dialogService;
1373
1777
  defaultMessages: Partial<InputDialogMessages> | undefined;
1374
1778
  showInputDialog(title: string, message: string, placeholder: string, buttonOkText?: string | null, messages?: Partial<InputDialogMessages>): Promise<string | null>;
1375
- static ɵfac: i0.ɵɵFactoryDeclaration<InputService, never>;
1376
- static ɵprov: i0.ɵɵInjectableDeclaration<InputService>;
1779
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<InputService, never>;
1780
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<InputService>;
1377
1781
  }
1378
1782
 
1379
1783
  interface NotificationDisplayMessages {
@@ -1381,13 +1785,43 @@ interface NotificationDisplayMessages {
1381
1785
  }
1382
1786
  declare const DEFAULT_NOTIFICATION_DISPLAY_MESSAGES: NotificationDisplayMessages;
1383
1787
 
1788
+ /**
1789
+ * How the {@link NotificationDisplayService} stacks its toasts. Provide it with
1790
+ * {@link NOTIFICATION_DISPLAY_OPTIONS}; without a provider the defaults keep the former behaviour
1791
+ * except for de-duplication, which is always safe.
1792
+ */
1793
+ interface NotificationDisplayOptions {
1794
+ /**
1795
+ * Milliseconds after which an error hides itself when the caller passes no `hideAfter`.
1796
+ * 0 (default) keeps errors until user interaction or navigation. A caller passing
1797
+ * `hideAfter: 0` explicitly always gets a sticky (critical) error.
1798
+ */
1799
+ errorHideAfter?: number;
1800
+ /** Same as {@link errorHideAfter} for warnings. */
1801
+ warningHideAfter?: number;
1802
+ /**
1803
+ * Errors and warnings that come with details (the "show details" button) stay until closed,
1804
+ * whatever {@link errorHideAfter} / {@link warningHideAfter} say. Default false.
1805
+ */
1806
+ stickyWithDetails?: boolean;
1807
+ /** Most toasts shown at once; beyond it the oldest toast of the LOWEST severity is hidden
1808
+ * (an error or warning is never dropped in favour of a success or info). 0 (default) = no limit. */
1809
+ maxVisible?: number;
1810
+ /** A toast with the same type, text and details as a visible one is not stacked again; the visible one's timer restarts. Default true. */
1811
+ dedupe?: boolean;
1812
+ }
1813
+ declare const NOTIFICATION_DISPLAY_OPTIONS: InjectionToken<NotificationDisplayOptions>;
1814
+ type ToastStyle = 'success' | 'info' | 'warning' | 'error';
1384
1815
  declare class NotificationDisplayService implements OnDestroy {
1385
1816
  private readonly notificationService;
1386
1817
  private readonly messageDetailsDialogService;
1387
1818
  private readonly router;
1388
1819
  private readonly ngZone;
1820
+ private readonly options;
1389
1821
  private notificationCounter;
1390
1822
  private activeNotifications;
1823
+ /** Every visible toast, oldest first (dedupe, stack cap, auto-hide timers). */
1824
+ private toasts;
1391
1825
  private subscriptions;
1392
1826
  private interactionDebounceTime;
1393
1827
  private gracePeriod;
@@ -1412,19 +1846,33 @@ declare class NotificationDisplayService implements OnDestroy {
1412
1846
  */
1413
1847
  showSuccess(title: string, hideAfter?: number): void;
1414
1848
  /**
1415
- * Shows an error notification (persists until user interaction or navigation)
1849
+ * Shows an error notification. It persists until user interaction or navigation, or hides
1850
+ * after `hideAfter` ms (default: `errorHideAfter` of the options; `0` = sticky).
1416
1851
  */
1417
1852
  showError(title: string, details?: string, hideAfter?: number): void;
1418
1853
  /**
1419
- * Shows a warning notification (persists until user interaction or navigation)
1854
+ * Shows a warning notification. It persists until user interaction or navigation, or hides
1855
+ * after `hideAfter` ms (default: `warningHideAfter` of the options; `0` = sticky).
1420
1856
  */
1421
1857
  showWarning(title: string, details?: string, hideAfter?: number): void;
1422
1858
  /**
1423
1859
  * Shows an info notification (auto-closes after 3 seconds)
1424
1860
  */
1425
1861
  showInfo(title: string, hideAfter?: number): void;
1426
- static ɵfac: i0.ɵɵFactoryDeclaration<NotificationDisplayService, never>;
1427
- static ɵprov: i0.ɵɵInjectableDeclaration<NotificationDisplayService>;
1862
+ /** The visible toasts as `[style, text]`, oldest first — for tests and diagnostics. */
1863
+ visibleToasts(): [ToastStyle, string][];
1864
+ private present;
1865
+ /** (Re)starts the auto-hide timer of a toast; a toast with `hideAfter` 0 stays, a hovered or focused one waits. */
1866
+ private schedule;
1867
+ /** Pauses the auto-hide while the pointer is over the toast or focus is inside it; restarts it afterwards. */
1868
+ private watchPointerAndFocus;
1869
+ /** Beyond `maxVisible`, hides the oldest toast of the lowest severity (success/info before warning before error). */
1870
+ private enforceLimit;
1871
+ private hideToast;
1872
+ private forget;
1873
+ private addDetailsButton;
1874
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NotificationDisplayService, never>;
1875
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<NotificationDisplayService>;
1428
1876
  }
1429
1877
 
1430
1878
  /**
@@ -1445,8 +1893,8 @@ declare class MessageListenerService implements OnDestroy {
1445
1893
  */
1446
1894
  stop(): void;
1447
1895
  ngOnDestroy(): void;
1448
- static ɵfac: i0.ɵɵFactoryDeclaration<MessageListenerService, never>;
1449
- static ɵprov: i0.ɵɵInjectableDeclaration<MessageListenerService>;
1896
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MessageListenerService, never>;
1897
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<MessageListenerService>;
1450
1898
  }
1451
1899
 
1452
1900
  /**
@@ -1502,8 +1950,8 @@ declare class ListStateService {
1502
1950
  private reviveFilterDates;
1503
1951
  private loadAll;
1504
1952
  private saveAll;
1505
- static ɵfac: i0.ɵɵFactoryDeclaration<ListStateService, never>;
1506
- static ɵprov: i0.ɵɵInjectableDeclaration<ListStateService>;
1953
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ListStateService, never>;
1954
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ListStateService>;
1507
1955
  }
1508
1956
 
1509
1957
  interface MessageDetailsDialogMessages {
@@ -1537,8 +1985,8 @@ declare class MessageDetailsDialogComponent implements OnInit {
1537
1985
  onClose(): void;
1538
1986
  copyToClipboard(): Promise<void>;
1539
1987
  private fallbackCopyToClipboard;
1540
- static ɵfac: i0.ɵɵFactoryDeclaration<MessageDetailsDialogComponent, never>;
1541
- static ɵcmp: i0.ɵɵComponentDeclaration<MessageDetailsDialogComponent, "mm-message-details-dialog", never, {}, {}, never, never, true, never>;
1988
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MessageDetailsDialogComponent, never>;
1989
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MessageDetailsDialogComponent, "mm-message-details-dialog", never, {}, {}, never, never, true, never>;
1542
1990
  }
1543
1991
 
1544
1992
  declare class MessageDetailsDialogService {
@@ -1546,8 +1994,8 @@ declare class MessageDetailsDialogService {
1546
1994
  private readonly windowStateService;
1547
1995
  defaultMessages: Partial<MessageDetailsDialogMessages> | undefined;
1548
1996
  showDetailsDialog(data: MessageDetailsDialogData): WindowRef;
1549
- static ɵfac: i0.ɵɵFactoryDeclaration<MessageDetailsDialogService, never>;
1550
- static ɵprov: i0.ɵɵInjectableDeclaration<MessageDetailsDialogService>;
1997
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MessageDetailsDialogService, never>;
1998
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<MessageDetailsDialogService>;
1551
1999
  }
1552
2000
 
1553
2001
  /**
@@ -1728,8 +2176,8 @@ declare class EntitySelectInputComponent implements OnInit, OnDestroy, ControlVa
1728
2176
  private setupSearch;
1729
2177
  private selectEntity;
1730
2178
  openAdvancedSearch(event?: Event): Promise<void>;
1731
- static ɵfac: i0.ɵɵFactoryDeclaration<EntitySelectInputComponent, never>;
1732
- static ɵcmp: i0.ɵɵComponentDeclaration<EntitySelectInputComponent, "mm-entity-select-input", never, { "dataSource": { "alias": "dataSource"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "minSearchLength": { "alias": "minSearchLength"; "required": false; }; "maxResults": { "alias": "maxResults"; "required": false; }; "debounceMs": { "alias": "debounceMs"; "required": false; }; "prefix": { "alias": "prefix"; "required": false; }; "initialDisplayValue": { "alias": "initialDisplayValue"; "required": false; }; "dialogDataSource": { "alias": "dialogDataSource"; "required": false; }; "dialogTitle": { "alias": "dialogTitle"; "required": false; }; "multiSelect": { "alias": "multiSelect"; "required": false; }; "advancedSearchLabel": { "alias": "advancedSearchLabel"; "required": false; }; "dialogMessages": { "alias": "dialogMessages"; "required": false; }; "messages": { "alias": "messages"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; }, { "entitySelected": "entitySelected"; "entityCleared": "entityCleared"; "entitiesSelected": "entitiesSelected"; }, never, never, true, never>;
2179
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntitySelectInputComponent, never>;
2180
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntitySelectInputComponent, "mm-entity-select-input", never, { "dataSource": { "alias": "dataSource"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "minSearchLength": { "alias": "minSearchLength"; "required": false; }; "maxResults": { "alias": "maxResults"; "required": false; }; "debounceMs": { "alias": "debounceMs"; "required": false; }; "prefix": { "alias": "prefix"; "required": false; }; "initialDisplayValue": { "alias": "initialDisplayValue"; "required": false; }; "dialogDataSource": { "alias": "dialogDataSource"; "required": false; }; "dialogTitle": { "alias": "dialogTitle"; "required": false; }; "multiSelect": { "alias": "multiSelect"; "required": false; }; "advancedSearchLabel": { "alias": "advancedSearchLabel"; "required": false; }; "dialogMessages": { "alias": "dialogMessages"; "required": false; }; "messages": { "alias": "messages"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; }, { "entitySelected": "entitySelected"; "entityCleared": "entityCleared"; "entitiesSelected": "entitiesSelected"; }, never, never, true, never>;
1733
2181
  }
1734
2182
 
1735
2183
  declare class EntitySelectDialogComponent<T> implements OnInit, OnDestroy {
@@ -1765,8 +2213,8 @@ declare class EntitySelectDialogComponent<T> implements OnInit, OnDestroy {
1765
2213
  onSelectionChange(event: SelectionEvent): void;
1766
2214
  onConfirm(): void;
1767
2215
  onCancel(): void;
1768
- static ɵfac: i0.ɵɵFactoryDeclaration<EntitySelectDialogComponent<any>, never>;
1769
- static ɵcmp: i0.ɵɵComponentDeclaration<EntitySelectDialogComponent<any>, "mm-entity-select-dialog", never, { "dataSource": { "alias": "dataSource"; "required": false; }; "multiSelect": { "alias": "multiSelect"; "required": false; }; "preSelectedEntities": { "alias": "preSelectedEntities"; "required": false; }; "messages": { "alias": "messages"; "required": false; }; }, {}, never, never, true, never>;
2216
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntitySelectDialogComponent<any>, never>;
2217
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntitySelectDialogComponent<any>, "mm-entity-select-dialog", never, { "dataSource": { "alias": "dataSource"; "required": false; }; "multiSelect": { "alias": "multiSelect"; "required": false; }; "preSelectedEntities": { "alias": "preSelectedEntities"; "required": false; }; "messages": { "alias": "messages"; "required": false; }; }, {}, never, never, true, never>;
1770
2218
  }
1771
2219
 
1772
2220
  declare class EntitySelectDialogService {
@@ -1779,8 +2227,47 @@ declare class EntitySelectDialogService {
1779
2227
  * @returns Promise resolving to selected entities or null if cancelled
1780
2228
  */
1781
2229
  open<T>(dataSource: EntitySelectDialogDataSource<T>, options: EntitySelectDialogOptions<T>): Promise<EntitySelectDialogResult<T> | null>;
1782
- static ɵfac: i0.ɵɵFactoryDeclaration<EntitySelectDialogService, never>;
1783
- static ɵprov: i0.ɵɵInjectableDeclaration<EntitySelectDialogService>;
2230
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntitySelectDialogService, never>;
2231
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<EntitySelectDialogService>;
2232
+ }
2233
+
2234
+ /** Selector of the element that gets the initial focus (never the destructive button). */
2235
+ declare function DANGER_CONFIRM_SAFE_FOCUS(requireTypingName: boolean): string;
2236
+ /** Result of the danger confirmation dialog: `true` only for the confirming button. */
2237
+ declare class DangerConfirmationResult {
2238
+ readonly confirmed: boolean;
2239
+ constructor(confirmed: boolean);
2240
+ }
2241
+ /**
2242
+ * Content of {@link ConfirmationService.showDangerConfirm} (AB#5578): environment notice,
2243
+ * target, consequence, optional type-to-confirm input; Cancel left, danger confirm right.
2244
+ */
2245
+ declare class DangerConfirmationWindowComponent extends DialogContentBase {
2246
+ private readonly ref;
2247
+ /** Set by the service right after opening. */
2248
+ readonly options: _angular_core.WritableSignal<DangerConfirmationOptions>;
2249
+ protected readonly typed: _angular_core.WritableSignal<string>;
2250
+ protected readonly inputId: string;
2251
+ protected readonly messages: _angular_core.Signal<DangerConfirmationMessages>;
2252
+ /** What has to be typed: the target name, or a non-empty fallback when it is empty. */
2253
+ protected readonly typingToken: _angular_core.Signal<string>;
2254
+ protected readonly typeLabel: _angular_core.Signal<string>;
2255
+ protected readonly environmentNotice: _angular_core.Signal<string>;
2256
+ protected readonly canConfirm: _angular_core.Signal<boolean>;
2257
+ constructor();
2258
+ private readonly host;
2259
+ /**
2260
+ * Initial focus never on the destructive button (Enter must not delete): the type-to-confirm
2261
+ * input when required, else Cancel. The service also passes `autoFocusedElement`; this is the
2262
+ * fallback for hosts that render the content themselves.
2263
+ */
2264
+ ngAfterViewInit(): void;
2265
+ /** Focuses the type-to-confirm input or Cancel (unless focus already sits on one of them). */
2266
+ focusSafeElement(): void;
2267
+ protected cancel(): void;
2268
+ protected confirm(): void;
2269
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DangerConfirmationWindowComponent, never>;
2270
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DangerConfirmationWindowComponent, "mm-danger-confirmation-window", never, {}, {}, never, never, true, never>;
1784
2271
  }
1785
2272
 
1786
2273
  /**
@@ -1813,8 +2300,8 @@ declare class EntitySelectDialogService {
1813
2300
  declare class UnsavedChangesGuard implements CanDeactivate<HasUnsavedChanges> {
1814
2301
  private readonly confirmationService;
1815
2302
  canDeactivate(component: HasUnsavedChanges): Promise<boolean>;
1816
- static ɵfac: i0.ɵɵFactoryDeclaration<UnsavedChangesGuard, never>;
1817
- static ɵprov: i0.ɵɵInjectableDeclaration<UnsavedChangesGuard>;
2303
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UnsavedChangesGuard, never>;
2304
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<UnsavedChangesGuard>;
1818
2305
  }
1819
2306
 
1820
2307
  interface SaveAsDialogMessages {
@@ -1923,8 +2410,8 @@ declare class SaveAsDialogComponent extends DialogContentBase implements OnInit,
1923
2410
  canSave(): boolean;
1924
2411
  onSave(): void;
1925
2412
  onCancel(): void;
1926
- static ɵfac: i0.ɵɵFactoryDeclaration<SaveAsDialogComponent, never>;
1927
- static ɵcmp: i0.ɵɵComponentDeclaration<SaveAsDialogComponent, "mm-save-as-dialog", never, {}, {}, never, never, true, never>;
2413
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SaveAsDialogComponent, never>;
2414
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SaveAsDialogComponent, "mm-save-as-dialog", never, {}, {}, never, never, true, never>;
1928
2415
  }
1929
2416
 
1930
2417
  declare class SaveAsDialogService {
@@ -1935,8 +2422,8 @@ declare class SaveAsDialogService {
1935
2422
  * @returns Promise that resolves with the result containing confirmed status and entered name
1936
2423
  */
1937
2424
  showSaveAsDialog(options: SaveAsDialogOptions): Promise<SaveAsDialogResult>;
1938
- static ɵfac: i0.ɵɵFactoryDeclaration<SaveAsDialogService, never>;
1939
- static ɵprov: i0.ɵɵInjectableDeclaration<SaveAsDialogService>;
2425
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SaveAsDialogService, never>;
2426
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<SaveAsDialogService>;
1940
2427
  }
1941
2428
 
1942
2429
  /**
@@ -2200,18 +2687,18 @@ declare class TimeRangePickerComponent implements OnInit, OnChanges {
2200
2687
  * Emits the current selection state
2201
2688
  */
2202
2689
  selectionChange: EventEmitter<TimeRangeSelection>;
2203
- protected selectedType: i0.WritableSignal<TimeRangeType>;
2204
- protected selectedYear: i0.WritableSignal<number>;
2205
- protected selectedQuarter: i0.WritableSignal<Quarter>;
2206
- protected selectedMonth: i0.WritableSignal<number>;
2207
- protected selectedDay: i0.WritableSignal<number>;
2208
- protected relativeValue: i0.WritableSignal<number>;
2209
- protected relativeUnit: i0.WritableSignal<RelativeTimeUnit>;
2210
- protected hourFrom: i0.WritableSignal<number | null>;
2211
- protected hourTo: i0.WritableSignal<number | null>;
2212
- protected customFrom: i0.WritableSignal<Date>;
2213
- protected customTo: i0.WritableSignal<Date>;
2214
- protected mergedLabels: i0.Signal<{
2690
+ protected selectedType: _angular_core.WritableSignal<TimeRangeType>;
2691
+ protected selectedYear: _angular_core.WritableSignal<number>;
2692
+ protected selectedQuarter: _angular_core.WritableSignal<Quarter>;
2693
+ protected selectedMonth: _angular_core.WritableSignal<number>;
2694
+ protected selectedDay: _angular_core.WritableSignal<number>;
2695
+ protected relativeValue: _angular_core.WritableSignal<number>;
2696
+ protected relativeUnit: _angular_core.WritableSignal<RelativeTimeUnit>;
2697
+ protected hourFrom: _angular_core.WritableSignal<number | null>;
2698
+ protected hourTo: _angular_core.WritableSignal<number | null>;
2699
+ protected customFrom: _angular_core.WritableSignal<Date>;
2700
+ protected customTo: _angular_core.WritableSignal<Date>;
2701
+ protected mergedLabels: _angular_core.Signal<{
2215
2702
  rangeType?: string;
2216
2703
  year?: string;
2217
2704
  quarter?: string;
@@ -2238,18 +2725,18 @@ declare class TimeRangePickerComponent implements OnInit, OnChanges {
2238
2725
  quarter3?: string;
2239
2726
  quarter4?: string;
2240
2727
  }>;
2241
- protected typeOptions: i0.Signal<TimeRangeOption<TimeRangeType>[]>;
2242
- protected yearOptions: i0.Signal<TimeRangeOption<number>[]>;
2243
- protected quarterOptions: i0.Signal<TimeRangeOption<Quarter>[]>;
2244
- protected monthOptions: i0.Signal<TimeRangeOption<number>[]>;
2245
- protected dayOptions: i0.Signal<TimeRangeOption<number>[]>;
2246
- protected hourFromOptions: i0.Signal<TimeRangeOption<number>[]>;
2247
- protected hourToOptions: i0.Signal<TimeRangeOption<number>[]>;
2248
- protected relativeUnitOptions: i0.Signal<TimeRangeOption<RelativeTimeUnit>[]>;
2249
- protected currentRange: i0.Signal<TimeRange | null>;
2250
- protected minDate: i0.Signal<Date>;
2251
- protected maxDate: i0.Signal<Date>;
2252
- protected showTime: i0.Signal<boolean>;
2728
+ protected typeOptions: _angular_core.Signal<TimeRangeOption<TimeRangeType>[]>;
2729
+ protected yearOptions: _angular_core.Signal<TimeRangeOption<number>[]>;
2730
+ protected quarterOptions: _angular_core.Signal<TimeRangeOption<Quarter>[]>;
2731
+ protected monthOptions: _angular_core.Signal<TimeRangeOption<number>[]>;
2732
+ protected dayOptions: _angular_core.Signal<TimeRangeOption<number>[]>;
2733
+ protected hourFromOptions: _angular_core.Signal<TimeRangeOption<number>[]>;
2734
+ protected hourToOptions: _angular_core.Signal<TimeRangeOption<number>[]>;
2735
+ protected relativeUnitOptions: _angular_core.Signal<TimeRangeOption<RelativeTimeUnit>[]>;
2736
+ protected currentRange: _angular_core.Signal<TimeRange | null>;
2737
+ protected minDate: _angular_core.Signal<Date>;
2738
+ protected maxDate: _angular_core.Signal<Date>;
2739
+ protected showTime: _angular_core.Signal<boolean>;
2253
2740
  ngOnInit(): void;
2254
2741
  ngOnChanges(changes: SimpleChanges): void;
2255
2742
  private initializeDefaults;
@@ -2268,8 +2755,8 @@ declare class TimeRangePickerComponent implements OnInit, OnChanges {
2268
2755
  protected onCustomToChange(date: Date): void;
2269
2756
  private emitChange;
2270
2757
  protected isType(type: TimeRangeType): boolean;
2271
- static ɵfac: i0.ɵɵFactoryDeclaration<TimeRangePickerComponent, never>;
2272
- static ɵcmp: i0.ɵɵComponentDeclaration<TimeRangePickerComponent, "mm-time-range-picker", never, { "config": { "alias": "config"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "initialSelection": { "alias": "initialSelection"; "required": false; }; }, { "rangeChange": "rangeChange"; "rangeChangeISO": "rangeChangeISO"; "selectionChange": "selectionChange"; }, never, never, true, never>;
2758
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TimeRangePickerComponent, never>;
2759
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TimeRangePickerComponent, "mm-time-range-picker", never, { "config": { "alias": "config"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "initialSelection": { "alias": "initialSelection"; "required": false; }; }, { "rangeChange": "rangeChange"; "rangeChangeISO": "rangeChangeISO"; "selectionChange": "selectionChange"; }, never, never, true, never>;
2273
2760
  }
2274
2761
 
2275
2762
  /**
@@ -2373,33 +2860,33 @@ declare class CronBuilderComponent implements OnInit, ControlValueAccessor {
2373
2860
  protected readonly xIcon: _progress_kendo_svg_icons.SVGIcon;
2374
2861
  private onChange;
2375
2862
  private onTouched;
2376
- protected disabled: i0.WritableSignal<boolean>;
2377
- protected readonly expression: i0.WritableSignal<string>;
2378
- protected readonly selectedTabIndex: i0.WritableSignal<number>;
2379
- protected readonly copiedRecently: i0.WritableSignal<boolean>;
2863
+ protected disabled: _angular_core.WritableSignal<boolean>;
2864
+ protected readonly expression: _angular_core.WritableSignal<string>;
2865
+ protected readonly selectedTabIndex: _angular_core.WritableSignal<number>;
2866
+ protected readonly copiedRecently: _angular_core.WritableSignal<boolean>;
2380
2867
  private suppressOnChange;
2381
- protected readonly scheduleType: i0.WritableSignal<ScheduleType>;
2382
- protected readonly secondInterval: i0.WritableSignal<number>;
2383
- protected readonly minuteInterval: i0.WritableSignal<number>;
2384
- protected readonly hourInterval: i0.WritableSignal<number>;
2385
- protected readonly hourMinute: i0.WritableSignal<number>;
2386
- protected readonly hourSecond: i0.WritableSignal<number>;
2387
- protected readonly timeHour: i0.WritableSignal<number>;
2388
- protected readonly timeMinute: i0.WritableSignal<number>;
2389
- protected readonly timeSecond: i0.WritableSignal<number>;
2390
- protected readonly dailyMode: i0.WritableSignal<"every" | "weekdays" | "weekends" | "specific">;
2391
- protected readonly selectedDays: i0.WritableSignal<Weekday[]>;
2392
- protected readonly monthlyMode: i0.WritableSignal<"relative" | "specific">;
2393
- protected readonly dayOfMonth: i0.WritableSignal<number>;
2394
- protected readonly relativeWeek: i0.WritableSignal<string>;
2395
- protected readonly relativeDay: i0.WritableSignal<Weekday>;
2396
- protected readonly customSecond: i0.WritableSignal<string>;
2397
- protected readonly customMinute: i0.WritableSignal<string>;
2398
- protected readonly customHour: i0.WritableSignal<string>;
2399
- protected readonly customDayOfMonth: i0.WritableSignal<string>;
2400
- protected readonly customMonth: i0.WritableSignal<string>;
2401
- protected readonly customDayOfWeek: i0.WritableSignal<string>;
2402
- protected readonly mergedConfig: i0.Signal<{
2868
+ protected readonly scheduleType: _angular_core.WritableSignal<ScheduleType>;
2869
+ protected readonly secondInterval: _angular_core.WritableSignal<number>;
2870
+ protected readonly minuteInterval: _angular_core.WritableSignal<number>;
2871
+ protected readonly hourInterval: _angular_core.WritableSignal<number>;
2872
+ protected readonly hourMinute: _angular_core.WritableSignal<number>;
2873
+ protected readonly hourSecond: _angular_core.WritableSignal<number>;
2874
+ protected readonly timeHour: _angular_core.WritableSignal<number>;
2875
+ protected readonly timeMinute: _angular_core.WritableSignal<number>;
2876
+ protected readonly timeSecond: _angular_core.WritableSignal<number>;
2877
+ protected readonly dailyMode: _angular_core.WritableSignal<"every" | "weekdays" | "weekends" | "specific">;
2878
+ protected readonly selectedDays: _angular_core.WritableSignal<Weekday[]>;
2879
+ protected readonly monthlyMode: _angular_core.WritableSignal<"relative" | "specific">;
2880
+ protected readonly dayOfMonth: _angular_core.WritableSignal<number>;
2881
+ protected readonly relativeWeek: _angular_core.WritableSignal<string>;
2882
+ protected readonly relativeDay: _angular_core.WritableSignal<Weekday>;
2883
+ protected readonly customSecond: _angular_core.WritableSignal<string>;
2884
+ protected readonly customMinute: _angular_core.WritableSignal<string>;
2885
+ protected readonly customHour: _angular_core.WritableSignal<string>;
2886
+ protected readonly customDayOfMonth: _angular_core.WritableSignal<string>;
2887
+ protected readonly customMonth: _angular_core.WritableSignal<string>;
2888
+ protected readonly customDayOfWeek: _angular_core.WritableSignal<string>;
2889
+ protected readonly mergedConfig: _angular_core.Signal<{
2403
2890
  showPresets?: boolean;
2404
2891
  showHumanReadable?: boolean;
2405
2892
  showNextExecutions?: boolean;
@@ -2409,11 +2896,11 @@ declare class CronBuilderComponent implements OnInit, ControlValueAccessor {
2409
2896
  defaultScheduleType?: ScheduleType;
2410
2897
  locale?: string;
2411
2898
  }>;
2412
- protected readonly humanReadable: i0.Signal<string>;
2413
- protected readonly validationResult: i0.Signal<_meshmakers_shared_ui.CronValidationResult>;
2414
- protected readonly nextExecutions: i0.Signal<Date[]>;
2415
- protected readonly presets: i0.Signal<CronPreset[]>;
2416
- protected readonly presetsByCategory: i0.Signal<{
2899
+ protected readonly humanReadable: _angular_core.Signal<string>;
2900
+ protected readonly validationResult: _angular_core.Signal<_meshmakers_shared_ui.CronValidationResult>;
2901
+ protected readonly nextExecutions: _angular_core.Signal<Date[]>;
2902
+ protected readonly presets: _angular_core.Signal<CronPreset[]>;
2903
+ protected readonly presetsByCategory: _angular_core.Signal<{
2417
2904
  frequent: CronPreset[];
2418
2905
  hourly: CronPreset[];
2419
2906
  daily: CronPreset[];
@@ -2460,8 +2947,8 @@ declare class CronBuilderComponent implements OnInit, ControlValueAccessor {
2460
2947
  private parseExpressionToState;
2461
2948
  protected trackByValue(_index: number, item: DropdownOption): number | string;
2462
2949
  protected trackByPresetId(_index: number, item: CronPreset): string;
2463
- static ɵfac: i0.ɵɵFactoryDeclaration<CronBuilderComponent, never>;
2464
- static ɵcmp: i0.ɵɵComponentDeclaration<CronBuilderComponent, "mm-cron-builder", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, true, never>;
2950
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CronBuilderComponent, never>;
2951
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CronBuilderComponent, "mm-cron-builder", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, true, never>;
2465
2952
  }
2466
2953
 
2467
2954
  /**
@@ -2499,8 +2986,8 @@ declare class CronParserService {
2499
2986
  private generateMonthlyExpression;
2500
2987
  private generateCustomExpression;
2501
2988
  private getWeekNumber;
2502
- static ɵfac: i0.ɵɵFactoryDeclaration<CronParserService, never>;
2503
- static ɵprov: i0.ɵɵInjectableDeclaration<CronParserService>;
2989
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CronParserService, never>;
2990
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<CronParserService>;
2504
2991
  }
2505
2992
 
2506
2993
  /**
@@ -2535,8 +3022,8 @@ declare class CronHumanizerService {
2535
3022
  name: string;
2536
3023
  }[];
2537
3024
  private normalizeLocale;
2538
- static ɵfac: i0.ɵɵFactoryDeclaration<CronHumanizerService, never>;
2539
- static ɵprov: i0.ɵɵInjectableDeclaration<CronHumanizerService>;
3025
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CronHumanizerService, never>;
3026
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<CronHumanizerService>;
2540
3027
  }
2541
3028
 
2542
3029
  /**
@@ -2568,8 +3055,8 @@ declare class CopyableTextComponent {
2568
3055
  protected get hasValue(): boolean;
2569
3056
  /** Copies the value to clipboard and shows a notification. */
2570
3057
  protected copyToClipboard(): void;
2571
- static ɵfac: i0.ɵɵFactoryDeclaration<CopyableTextComponent, never>;
2572
- static ɵcmp: i0.ɵɵComponentDeclaration<CopyableTextComponent, "mm-copyable-text", never, { "value": { "alias": "value"; "required": true; }; "label": { "alias": "label"; "required": false; }; "copyLabel": { "alias": "copyLabel"; "required": false; }; "buttonTitle": { "alias": "buttonTitle"; "required": false; }; }, { "copied": "copied"; }, never, never, true, never>;
3058
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CopyableTextComponent, never>;
3059
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CopyableTextComponent, "mm-copyable-text", never, { "value": { "alias": "value"; "required": true; }; "label": { "alias": "label"; "required": false; }; "copyLabel": { "alias": "copyLabel"; "required": false; }; "buttonTitle": { "alias": "buttonTitle"; "required": false; }; }, { "copied": "copied"; }, never, never, true, never>;
2573
3060
  }
2574
3061
 
2575
3062
  declare class ImportStrategyDialogResult {
@@ -2584,15 +3071,15 @@ declare class ImportStrategyDialogComponent extends DialogContentBase {
2584
3071
  constructor();
2585
3072
  onImport(): void;
2586
3073
  onCancel(): void;
2587
- static ɵfac: i0.ɵɵFactoryDeclaration<ImportStrategyDialogComponent, never>;
2588
- static ɵcmp: i0.ɵɵComponentDeclaration<ImportStrategyDialogComponent, "mm-import-strategy-dialog", never, { "message": { "alias": "message"; "required": false; }; }, {}, never, never, true, never>;
3074
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ImportStrategyDialogComponent, never>;
3075
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ImportStrategyDialogComponent, "mm-import-strategy-dialog", never, { "message": { "alias": "message"; "required": false; }; }, {}, never, never, true, never>;
2589
3076
  }
2590
3077
 
2591
3078
  declare class ImportStrategyDialogService {
2592
3079
  private readonly dialogService;
2593
3080
  showImportStrategyDialog(title?: string, message?: string): Promise<ImportStrategyDto | null>;
2594
- static ɵfac: i0.ɵɵFactoryDeclaration<ImportStrategyDialogService, never>;
2595
- static ɵprov: i0.ɵɵInjectableDeclaration<ImportStrategyDialogService>;
3081
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ImportStrategyDialogService, never>;
3082
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ImportStrategyDialogService>;
2596
3083
  }
2597
3084
 
2598
3085
  interface WindowDimensions {
@@ -2642,11 +3129,110 @@ declare class WindowStateService {
2642
3129
  private getOrCreateBackdropElement;
2643
3130
  private loadStates;
2644
3131
  private saveStates;
2645
- static ɵfac: i0.ɵɵFactoryDeclaration<WindowStateService, never>;
2646
- static ɵprov: i0.ɵɵInjectableDeclaration<WindowStateService>;
3132
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<WindowStateService, never>;
3133
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<WindowStateService>;
3134
+ }
3135
+
3136
+ /** Where the button sits; drives size, icon size (16 px rows, 20 px toolbars) and emphasis. */
3137
+ type MmActionContext = 'row' | 'toolbar' | 'page';
3138
+ /** What the button shows. Icon-only buttons always get a tooltip and an accessible name. */
3139
+ type MmActionDisplay = 'icon' | 'text' | 'icon-text';
3140
+ /**
3141
+ * One action as a button (AB#5570), rendered from a shared {@link MmAction} definition.
3142
+ *
3143
+ * - `display="icon"`: icon-only, native tooltip = label (+ disabled reason), `aria-label`
3144
+ * = label + `targetLabel` ("Delete dump Encrypt run 2026-10-06 17:09").
3145
+ * - `display="text"` / `"icon-text"`: visible label; `targetLabel` still extends the
3146
+ * accessible name when the same label repeats (one per row).
3147
+ * - Disabled (`disabledReason`): stays focusable, `aria-disabled="true"`, the reason is
3148
+ * linked via `aria-describedby` and shown in the tooltip; clicks are swallowed.
3149
+ * - `danger`: Kendo `themeColor="error"`. The consumer confirms before acting.
3150
+ * - `primary` (page/toolbar context only): solid primary button for the one main action.
3151
+ * - `link`: rendered as a real router link (`<a kendoButton [routerLink]>`, so open-in-new-tab
3152
+ * works); a disabled link action renders as a disabled button.
3153
+ *
3154
+ * ```html
3155
+ * <mm-action-button [action]="refresh" context="toolbar" (triggered)="reload()" />
3156
+ * <mm-action-button [action]="newAdapter" context="page" display="icon-text" primary (triggered)="create()" />
3157
+ * ```
3158
+ */
3159
+ declare class ActionButtonComponent<TId extends string = string> {
3160
+ /** The action definition. */
3161
+ readonly action: _angular_core.InputSignal<MmAction<TId>>;
3162
+ /** Name of the target (row) for the accessible name; required for repeated row actions. */
3163
+ readonly targetLabel: _angular_core.InputSignal<string | null | undefined>;
3164
+ readonly context: _angular_core.InputSignal<MmActionContext>;
3165
+ readonly display: _angular_core.InputSignal<MmActionDisplay>;
3166
+ /** Solid primary emphasis — at most one per page header / toolbar. */
3167
+ readonly primary: _angular_core.InputSignalWithTransform<boolean, unknown>;
3168
+ /** Fires for enabled actions only. */
3169
+ readonly triggered: _angular_core.OutputEmitterRef<MmActionEvent<TId>>;
3170
+ protected readonly reasonId: string;
3171
+ protected readonly disabled: _angular_core.Signal<boolean>;
3172
+ /** Icon-only needs an icon; without one the button falls back to its text. */
3173
+ protected readonly iconOnly: _angular_core.Signal<boolean>;
3174
+ /** Visible text: `menuLabel` ("Delete dump…") when set, else the label. */
3175
+ protected readonly visibleLabel: _angular_core.Signal<string>;
3176
+ protected readonly showIcon: _angular_core.Signal<boolean>;
3177
+ protected readonly tooltip: _angular_core.Signal<string | null>;
3178
+ protected readonly ariaLabel: _angular_core.Signal<string | null>;
3179
+ /** Kendo button classes for the link variant (same look as `button[kendoButton]`). */
3180
+ protected readonly linkClasses: _angular_core.Signal<string>;
3181
+ protected onClick(event: Event): void;
3182
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ActionButtonComponent<any>, never>;
3183
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ActionButtonComponent<any>, "mm-action-button", never, { "action": { "alias": "action"; "required": true; "isSignal": true; }; "targetLabel": { "alias": "targetLabel"; "required": false; "isSignal": true; }; "context": { "alias": "context"; "required": false; "isSignal": true; }; "display": { "alias": "display"; "required": false; "isSignal": true; }; "primary": { "alias": "primary"; "required": false; "isSignal": true; }; }, { "triggered": "triggered"; }, never, never, true, never>;
3184
+ }
3185
+
3186
+ /** Overflow menu item handed to the Kendo DropDownButton. */
3187
+ interface RowActionMenuItem<TId extends string> {
3188
+ text: string;
3189
+ svgIcon?: MmAction<TId>['icon'];
3190
+ disabled: boolean;
3191
+ action: MmAction<TId>;
3192
+ }
3193
+ /**
3194
+ * The actions of one table row (AB#5570): icon buttons (16 px) with tooltip and an accessible
3195
+ * name that includes the row ("Edit Mesh Adapter"), from one shared action definition.
3196
+ * At most `maxInline` slots (default 3): when the actions do not fit, the last slot becomes a
3197
+ * "More actions for …" menu. Disabled actions stay focusable and announce their reason;
3198
+ * in the menu the reason is shown under the item text.
3199
+ *
3200
+ * The component only emits — destructive handlers confirm first (danger dialog naming the target).
3201
+ *
3202
+ * ```html
3203
+ * <td class="actions">
3204
+ * <mm-row-actions [actions]="rowActions(run)" [rowLabel]="runLabel(run)" (triggered)="onAction($event, run)" />
3205
+ * </td>
3206
+ * ```
3207
+ */
3208
+ declare class RowActionsComponent<TId extends string = string> {
3209
+ /** Action definitions for this row (hidden ones are filtered out). */
3210
+ readonly actions: _angular_core.InputSignal<readonly MmAction<TId>[]>;
3211
+ /** Human name of the row ("Mesh Adapter", "Encrypt run 2026-10-06 17:09"); part of every accessible name. */
3212
+ readonly rowLabel: _angular_core.InputSignal<string>;
3213
+ /** Slots incl. the overflow button. */
3214
+ readonly maxInline: _angular_core.InputSignalWithTransform<number, unknown>;
3215
+ /** Fires for enabled actions only, inline or from the menu. */
3216
+ readonly triggered: _angular_core.OutputEmitterRef<MmActionEvent<TId>>;
3217
+ private readonly router;
3218
+ /** Menu links resolve like the inline `routerLink`: relative to the hosting route. */
3219
+ private readonly route;
3220
+ protected readonly moreIcon: _progress_kendo_svg_icons.SVGIcon;
3221
+ protected readonly split: _angular_core.Signal<{
3222
+ inline: MmAction<TId>[];
3223
+ menu: MmAction<TId>[];
3224
+ }>;
3225
+ protected readonly menuItems: _angular_core.Signal<RowActionMenuItem<TId>[]>;
3226
+ /** No group semantics for an empty cell (all actions hidden). */
3227
+ protected readonly hasActions: _angular_core.Signal<boolean>;
3228
+ protected readonly moreLabel: _angular_core.Signal<string>;
3229
+ protected readonly groupLabel: _angular_core.Signal<string>;
3230
+ protected onMenuItem(item: RowActionMenuItem<TId>): void;
3231
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RowActionsComponent<any>, never>;
3232
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RowActionsComponent<any>, "mm-row-actions", never, { "actions": { "alias": "actions"; "required": true; "isSignal": true; }; "rowLabel": { "alias": "rowLabel"; "required": true; "isSignal": true; }; "maxInline": { "alias": "maxInline"; "required": false; "isSignal": true; }; }, { "triggered": "triggered"; }, never, never, true, never>;
2647
3233
  }
2648
3234
 
2649
3235
  declare function provideMmSharedUi(): EnvironmentProviders;
2650
3236
 
2651
- export { BaseFormComponent, BaseTreeDetailComponent, ButtonTypes, BytesToSizePipe, CRON_PRESETS, ConfirmationService, ConfirmationWindowComponent, ConfirmationWindowResult, CopyableTextComponent, CronBuilderComponent, CronHumanizerService, CronParserService, DEFAULT_CONFIRMATION_WINDOW_MESSAGES, DEFAULT_CRON_BUILDER_CONFIG, DEFAULT_ENTITY_SELECT_DIALOG_MESSAGES, DEFAULT_ENTITY_SELECT_INPUT_MESSAGES, DEFAULT_INPUT_DIALOG_MESSAGES, DEFAULT_LIST_VIEW_MESSAGES, DEFAULT_MESSAGE_DETAILS_DIALOG_MESSAGES, DEFAULT_NOTIFICATION_DISPLAY_MESSAGES, DEFAULT_PROGRESS_WINDOW_MESSAGES, DEFAULT_RESPONSIVE_COLSPAN, DEFAULT_SAVE_AS_DIALOG_MESSAGES, DEFAULT_TIME_RANGE_LABELS, DataSourceBase, DataSourceTyped, DialogType, EntitySelectDialogComponent, EntitySelectDialogService, EntitySelectInputComponent, FetchResultBase, FetchResultTyped, FileUploadResult, FileUploadService, FormTitleExtraDirective, HAS_UNSAVED_CHANGES, HOUR_INTERVALS, HierarchyDataSource, HierarchyDataSourceBase, ImportStrategyDialogComponent, ImportStrategyDialogResult, ImportStrategyDialogService, ImportStrategyDto, InputDialogComponent, InputService, ListStateService, ListViewComponent, ListViewFiltersDirective, MINUTE_INTERVALS, MessageDetailsDialogComponent, MessageDetailsDialogService, MessageListenerService, MmListViewDataBindingDirective, NotificationDisplayService, PascalCasePipe, ProgressValue, ProgressWindowComponent, ProgressWindowService, RELATIVE_WEEKS, SECOND_INTERVALS, SaveAsDialogComponent, SaveAsDialogService, TimeRangePickerComponent, TimeRangeUtils, TreeComponent, UnsavedChangesDirective, UnsavedChangesGuard, UploadFileDialogComponent, WEEKDAYS, WEEKDAY_ABBREVIATIONS, WindowStateService, generateDayOfMonthOptions, generateHourOptions, generateMinuteOptions, provideMmSharedUi };
2652
- export type { BadgeMapping, BadgeMappingTable, BaseFormConfig, BaseFormMessages, ColumnDefinition, ConfirmationButtonLabels, ConfirmationWindowData, ConfirmationWindowMessages, ContextMenuType, CronBuilderConfig, CronFields, CronPreset, CronSchedule, CronValidationResult, DialogFetchOptions, DialogFetchResult, DropdownOption, EntitySelectDialogDataSource, EntitySelectDialogMessages, EntitySelectDialogOptions, EntitySelectDialogResult, EntitySelectInputMessages, FetchAgainOptions, FetchDataOptions, FetchResult, FileUploadData, HasUnsavedChanges, InputDialogMessages, ListViewCommand, ListViewMessages, MessageDetailsDialogData, MessageDetailsDialogMessages, NameAvailabilityResult, NodeDroppedEvent, NodeInfo, NotificationDisplayMessages, PersistedListState, ProgressWindowConfig, ProgressWindowData, ProgressWindowMessages, ProgressWindowOptions, ProgressWindowResult, Quarter, RelativeTimeUnit, ResponsiveFormBreakPoint, RowClassFn, SaveAsDialogDataSource, SaveAsDialogMessages, SaveAsDialogOptions, SaveAsDialogResult, ScheduleType, StatusFieldConfig, StatusIconMapping, StatusMapping, TableColumn, TimeRange, TimeRangeISO, TimeRangeOption, TimeRangePickerConfig, TimeRangePickerLabels, TimeRangeSelection, TimeRangeType, TimeRangeZone, UnsavedChangesMessages, Weekday, WindowDimensions };
3237
+ export { ActionButtonComponent, BaseFormComponent, BaseTreeDetailComponent, ButtonTypes, BytesToSizePipe, CRON_PRESETS, ConfirmationService, ConfirmationWindowComponent, ConfirmationWindowResult, CopyableTextComponent, CronBuilderComponent, CronHumanizerService, CronParserService, DANGER_CONFIRM_ENVIRONMENT, DANGER_CONFIRM_FALLBACK_WORD, DANGER_CONFIRM_SAFE_FOCUS, DEFAULT_CONFIRMATION_WINDOW_MESSAGES, DEFAULT_CRON_BUILDER_CONFIG, DEFAULT_DANGER_CONFIRMATION_MESSAGES, DEFAULT_ENTITY_SELECT_DIALOG_MESSAGES, DEFAULT_ENTITY_SELECT_INPUT_MESSAGES, DEFAULT_INPUT_DIALOG_MESSAGES, DEFAULT_LIST_VIEW_MESSAGES, DEFAULT_MESSAGE_DETAILS_DIALOG_MESSAGES, DEFAULT_NOTIFICATION_DISPLAY_MESSAGES, DEFAULT_PROGRESS_WINDOW_MESSAGES, DEFAULT_RESPONSIVE_COLSPAN, DEFAULT_SAVE_AS_DIALOG_MESSAGES, DEFAULT_TIME_RANGE_LABELS, DangerConfirmationResult, DangerConfirmationWindowComponent, DataSourceBase, DataSourceTyped, DialogType, EntitySelectDialogComponent, EntitySelectDialogService, EntitySelectInputComponent, FetchResultBase, FetchResultTyped, FileUploadResult, FileUploadService, FormTitleExtraDirective, HAS_UNSAVED_CHANGES, HOUR_INTERVALS, HierarchyDataSource, HierarchyDataSourceBase, ImportStrategyDialogComponent, ImportStrategyDialogResult, ImportStrategyDialogService, ImportStrategyDto, InputDialogComponent, InputService, ListStateService, ListViewComponent, ListViewFiltersDirective, MINUTE_INTERVALS, MM_ACTION_ICONS, MM_ROW_ACTIONS_MAX_INLINE, MessageDetailsDialogComponent, MessageDetailsDialogService, MessageListenerService, MmListViewDataBindingDirective, NOTIFICATION_DISPLAY_OPTIONS, NotificationDisplayService, PascalCasePipe, ProgressValue, ProgressWindowComponent, ProgressWindowService, RELATIVE_WEEKS, RowActionsComponent, SECOND_INTERVALS, SaveAsDialogComponent, SaveAsDialogService, TimeRangePickerComponent, TimeRangeUtils, TreeComponent, UnsavedChangesDirective, UnsavedChangesGuard, UploadFileDialogComponent, WEEKDAYS, WEEKDAY_ABBREVIATIONS, WindowStateService, actionAccessibleName, actionTooltip, applyDangerConfirmEnvironment, dangerConfirmNameMatches, dangerConfirmTypingToken, generateDayOfMonthOptions, generateHourOptions, generateMinuteOptions, isActionDisabled, isActionVisible, provideMmSharedUi, resolveListRowAction, resolveListViewMessages, sameAction, splitRowActions };
3238
+ export type { BadgeMapping, BadgeMappingTable, BaseFormConfig, BaseFormMessages, ColumnDefinition, ConfirmationButtonLabels, ConfirmationWindowData, ConfirmationWindowMessages, ContextMenuType, CronBuilderConfig, CronFields, CronPreset, CronSchedule, CronValidationResult, DangerConfirmEnvironment, DangerConfirmationMessages, DangerConfirmationOptions, DialogFetchOptions, DialogFetchResult, DropdownOption, EntitySelectDialogDataSource, EntitySelectDialogMessages, EntitySelectDialogOptions, EntitySelectDialogResult, EntitySelectInputMessages, FetchAgainOptions, FetchDataOptions, FetchResult, FileUploadData, HasUnsavedChanges, InputDialogMessages, ListViewCommand, ListViewMessages, MessageDetailsDialogData, MessageDetailsDialogMessages, MmAction, MmActionContext, MmActionDisplay, MmActionEvent, MmActionIconName, MmActionLink, MmListRowAction, MmListRowActionEvent, NameAvailabilityResult, NodeDroppedEvent, NodeInfo, NotificationDisplayMessages, NotificationDisplayOptions, PersistedListState, ProgressWindowConfig, ProgressWindowData, ProgressWindowMessages, ProgressWindowOptions, ProgressWindowResult, Quarter, RelativeTimeUnit, ResolvedListRowAction, ResponsiveFormBreakPoint, RowActionsView, RowClassFn, SaveAsDialogDataSource, SaveAsDialogMessages, SaveAsDialogOptions, SaveAsDialogResult, ScheduleType, StatusFieldConfig, StatusIconMapping, StatusMapping, TableColumn, TimeRange, TimeRangeISO, TimeRangeOption, TimeRangePickerConfig, TimeRangePickerLabels, TimeRangeSelection, TimeRangeType, TimeRangeZone, UnsavedChangesMessages, Weekday, WindowDimensions };