@meshmakers/shared-ui 3.4.1480 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -0
- package/assets/octobot/lg/octo_blink.webp +0 -0
- package/assets/octobot/lg/octo_blink_still.png +0 -0
- package/assets/octobot/lg/octo_idle.webp +0 -0
- package/assets/octobot/lg/octo_idle_still.png +0 -0
- package/assets/octobot/lg/octo_look.webp +0 -0
- package/assets/octobot/lg/octo_look_still.png +0 -0
- package/assets/octobot/lg/octo_swim.webp +0 -0
- package/assets/octobot/lg/octo_swim_still.png +0 -0
- package/assets/octobot/lg/octo_thinking.webp +0 -0
- package/assets/octobot/lg/octo_thinking_still.png +0 -0
- package/assets/octobot/lg/octo_wave.webp +0 -0
- package/assets/octobot/lg/octo_wave_still.png +0 -0
- package/assets/octobot/md/octo_blink.webp +0 -0
- package/assets/octobot/md/octo_blink_still.png +0 -0
- package/assets/octobot/md/octo_idle.webp +0 -0
- package/assets/octobot/md/octo_idle_still.png +0 -0
- package/assets/octobot/md/octo_look.webp +0 -0
- package/assets/octobot/md/octo_look_still.png +0 -0
- package/assets/octobot/md/octo_swim.webp +0 -0
- package/assets/octobot/md/octo_swim_still.png +0 -0
- package/assets/octobot/md/octo_thinking.webp +0 -0
- package/assets/octobot/md/octo_thinking_still.png +0 -0
- package/assets/octobot/md/octo_wave.webp +0 -0
- package/assets/octobot/md/octo_wave_still.png +0 -0
- package/assets/octobot/sm/octo_blink.webp +0 -0
- package/assets/octobot/sm/octo_blink_still.png +0 -0
- package/assets/octobot/sm/octo_idle.webp +0 -0
- package/assets/octobot/sm/octo_idle_still.png +0 -0
- package/assets/octobot/sm/octo_look.webp +0 -0
- package/assets/octobot/sm/octo_look_still.png +0 -0
- package/assets/octobot/sm/octo_swim.webp +0 -0
- package/assets/octobot/sm/octo_swim_still.png +0 -0
- package/assets/octobot/sm/octo_thinking.webp +0 -0
- package/assets/octobot/sm/octo_thinking_still.png +0 -0
- package/assets/octobot/sm/octo_wave.webp +0 -0
- package/assets/octobot/sm/octo_wave_still.png +0 -0
- package/fesm2022/meshmakers-shared-ui-assistant-core.mjs +940 -0
- package/fesm2022/meshmakers-shared-ui-assistant-core.mjs.map +1 -0
- package/fesm2022/meshmakers-shared-ui-assistant.mjs +819 -0
- package/fesm2022/meshmakers-shared-ui-assistant.mjs.map +1 -0
- package/fesm2022/meshmakers-shared-ui-command-palette.mjs +817 -0
- package/fesm2022/meshmakers-shared-ui-command-palette.mjs.map +1 -0
- package/fesm2022/meshmakers-shared-ui-shell.mjs +1738 -0
- package/fesm2022/meshmakers-shared-ui-shell.mjs.map +1 -0
- package/fesm2022/meshmakers-shared-ui-testing.mjs +92 -0
- package/fesm2022/meshmakers-shared-ui-testing.mjs.map +1 -0
- package/fesm2022/meshmakers-shared-ui.mjs +1550 -203
- package/fesm2022/meshmakers-shared-ui.mjs.map +1 -1
- package/package.json +28 -2
- package/types/meshmakers-shared-ui-assistant-core.d.ts +732 -0
- package/types/meshmakers-shared-ui-assistant.d.ts +258 -0
- package/types/meshmakers-shared-ui-command-palette.d.ts +398 -0
- package/types/meshmakers-shared-ui-shell.d.ts +939 -0
- package/types/meshmakers-shared-ui-testing.d.ts +41 -0
- package/types/meshmakers-shared-ui.d.ts +1004 -154
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import * as
|
|
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 {
|
|
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 {
|
|
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:
|
|
45
|
-
static ɵdir:
|
|
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
|
/**
|
|
@@ -92,7 +92,12 @@ type BadgeMappingTable = Record<string, BadgeMapping>;
|
|
|
92
92
|
interface TableColumn {
|
|
93
93
|
displayName?: string | null;
|
|
94
94
|
field: string;
|
|
95
|
-
|
|
95
|
+
/**
|
|
96
|
+
* How the cell renders and filters. `booleanIcon` (AB#5623) shows a boolean as a check / x icon
|
|
97
|
+
* named "<column>: Yes|No" for screen readers (`role="img"` + `aria-label`, texts from
|
|
98
|
+
* `messages.booleanYes` / `booleanNo`) and filters like `boolean`; see {@link booleanIcons}.
|
|
99
|
+
*/
|
|
100
|
+
dataType?: 'text' | 'numeric' | 'numericRange' | 'boolean' | 'booleanIcon' | 'date' | 'iso8601' | 'bytes' | 'statusIcons' | 'cronExpression' | 'progressBar' | 'badge' | 'component';
|
|
96
101
|
format?: string;
|
|
97
102
|
/**
|
|
98
103
|
* Column width in pixels. If not set, the column will auto-size.
|
|
@@ -173,6 +178,13 @@ interface TableColumn {
|
|
|
173
178
|
* a pill for `true` and nothing (rather than a "false" pill) for `false`.
|
|
174
179
|
*/
|
|
175
180
|
badgeHideUnmapped?: boolean;
|
|
181
|
+
/**
|
|
182
|
+
* Icons of a `booleanIcon` column (AB#5623). Default: a check for `true`, an x for `false`.
|
|
183
|
+
* Set `false: null` to leave `false` cells empty (flag columns); `null` / `undefined` values
|
|
184
|
+
* always render an empty cell. Colours default to the theme tokens
|
|
185
|
+
* `--mm-list-boolean-true-color` / `--mm-list-boolean-false-color`.
|
|
186
|
+
*/
|
|
187
|
+
booleanIcons?: BooleanIconMapping;
|
|
176
188
|
/**
|
|
177
189
|
* Optional callback that produces the cell's display string.
|
|
178
190
|
* When set, this overrides the default rendering selected by `dataType`.
|
|
@@ -209,6 +221,17 @@ interface TableColumn {
|
|
|
209
221
|
*/
|
|
210
222
|
cellInputs?: (item: unknown) => Record<string, unknown>;
|
|
211
223
|
}
|
|
224
|
+
/** Icons of a `booleanIcon` column (AB#5623). */
|
|
225
|
+
interface BooleanIconMapping {
|
|
226
|
+
/** Icon for `true`. Default: a check icon. */
|
|
227
|
+
true?: SVGIcon;
|
|
228
|
+
/** Icon for `false`; `null` = no icon (empty cell). Default: an x icon. */
|
|
229
|
+
false?: SVGIcon | null;
|
|
230
|
+
/** CSS colour of the `true` icon. Default: `var(--mm-list-boolean-true-color, var(--kendo-color-success))`. */
|
|
231
|
+
trueColor?: string;
|
|
232
|
+
/** CSS colour of the `false` icon. Default: `var(--mm-list-boolean-false-color, var(--kendo-color-subtle))`. */
|
|
233
|
+
falseColor?: string;
|
|
234
|
+
}
|
|
212
235
|
type ColumnDefinition = string | TableColumn;
|
|
213
236
|
type ContextMenuType = 'contextMenu' | 'actionMenu';
|
|
214
237
|
/**
|
|
@@ -230,6 +253,11 @@ type RowClassFn = (context: {
|
|
|
230
253
|
/**
|
|
231
254
|
* Translatable messages for the ListViewComponent.
|
|
232
255
|
* Pass translated strings to override the English defaults.
|
|
256
|
+
*
|
|
257
|
+
* Members added after the interface was first published are optional, so an app that builds a
|
|
258
|
+
* complete `ListViewMessages` object for an older library version keeps compiling; a member that
|
|
259
|
+
* is missing (or `undefined`) falls back to {@link DEFAULT_LIST_VIEW_MESSAGES}. New members must
|
|
260
|
+
* be added as optional for the same reason.
|
|
233
261
|
*/
|
|
234
262
|
interface ListViewMessages {
|
|
235
263
|
/** Search input placeholder. Default: "Search in all columns..." */
|
|
@@ -242,12 +270,20 @@ interface ListViewMessages {
|
|
|
242
270
|
exportToPdf: string;
|
|
243
271
|
/** Tooltip for "Refresh Data" button. Default: "Refresh Data" */
|
|
244
272
|
refreshData: string;
|
|
245
|
-
/** Tooltip for the "Reset Filters" button. Default: "Reset Filters" */
|
|
246
|
-
resetFilters
|
|
247
|
-
/** Tooltip for the collapsed command menu. Default: "Commands" */
|
|
248
|
-
commands
|
|
273
|
+
/** Tooltip for the "Reset Filters" button. Default: "Reset Filters". Optional (added in 3.4). */
|
|
274
|
+
resetFilters?: string;
|
|
275
|
+
/** Tooltip for the collapsed command menu. Default: "Commands". Optional (added in 3.4). */
|
|
276
|
+
commands?: string;
|
|
249
277
|
/** Title for the actions command column. Default: "Actions" */
|
|
250
278
|
actionsColumnTitle: string;
|
|
279
|
+
/** Accessible name of a row's menu button; `{name}` = the row's name. Default: "Actions for {name}" */
|
|
280
|
+
rowActionsFor?: string;
|
|
281
|
+
/** Accessible name of a row's menu button when the row has no name. Default: "Row actions" */
|
|
282
|
+
rowActions?: string;
|
|
283
|
+
/** Disabled reason of a row action whose `CommandItem` has no `disabledReason` (AB#5572). Default: "Not available for this row" */
|
|
284
|
+
rowActionUnavailable?: string;
|
|
285
|
+
/** Disabled reason of every row action while the list loads (AB#5572). Default: "The list is loading" */
|
|
286
|
+
rowActionsLoading?: string;
|
|
251
287
|
/** PDF footer page template. Default: "Page {pageNum} of {totalPages}" */
|
|
252
288
|
pdfPageTemplate: string;
|
|
253
289
|
/** Pager: text after page size selector. Default: "items per page" */
|
|
@@ -268,6 +304,34 @@ interface ListViewMessages {
|
|
|
268
304
|
pagerNextPage: string;
|
|
269
305
|
/** Grid: no records message. Default: "No records available." */
|
|
270
306
|
noRecords: string;
|
|
307
|
+
/** Empty state title while a search or filter matches nothing (`emptyState` set, AB#3444). Default: "No results". Optional. */
|
|
308
|
+
noResultsTitle?: string;
|
|
309
|
+
/** Empty state text while a search or filter matches nothing (AB#3444). Default: "Nothing matches the current search or filter." Optional. */
|
|
310
|
+
noResultsText?: string;
|
|
311
|
+
/** Accessible value of a `booleanIcon` cell that is true (AB#5623). Default: "Yes". Optional. */
|
|
312
|
+
booleanYes?: string;
|
|
313
|
+
/** Accessible value of a `booleanIcon` cell that is false (AB#5623). Default: "No". Optional. */
|
|
314
|
+
booleanNo?: string;
|
|
315
|
+
/** Accessible name of a `booleanIcon` cell; `{column}` = column name, `{value}` = Yes / No (AB#5623). Default: "{column}: {value}". Optional. */
|
|
316
|
+
booleanIconLabel?: string;
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Texts of the list's shared empty state (`mm-list-view [emptyState]`, AB#3444). `title` / `text`
|
|
320
|
+
* describe a list without records ("No data flows yet"); the `filtered*` texts override the
|
|
321
|
+
* "no results" texts of {@link ListViewMessages} while a search or filter is active.
|
|
322
|
+
*/
|
|
323
|
+
interface MmListEmptyState {
|
|
324
|
+
title: string;
|
|
325
|
+
text?: string | null;
|
|
326
|
+
filteredTitle?: string | null;
|
|
327
|
+
filteredText?: string | null;
|
|
328
|
+
}
|
|
329
|
+
/** Template context of `mm-list-view [emptyTemplate]` (AB#3444). */
|
|
330
|
+
interface MmListEmptyContext {
|
|
331
|
+
/** Same as `filtered`. */
|
|
332
|
+
$implicit: boolean;
|
|
333
|
+
/** A search, row filter or host filter is active (an empty list means "no results"). */
|
|
334
|
+
filtered: boolean;
|
|
271
335
|
}
|
|
272
336
|
/**
|
|
273
337
|
* One entry of the list toolbar's command group (row filter, exports, reset,
|
|
@@ -280,10 +344,212 @@ interface ListViewCommand {
|
|
|
280
344
|
svgIcon: SVGIcon;
|
|
281
345
|
}
|
|
282
346
|
/**
|
|
283
|
-
* Default English messages for the ListViewComponent.
|
|
347
|
+
* Default English messages for the ListViewComponent. Complete: every member, including the
|
|
348
|
+
* optional ones, has a value.
|
|
349
|
+
*/
|
|
350
|
+
declare const DEFAULT_LIST_VIEW_MESSAGES: Required<ListViewMessages>;
|
|
351
|
+
/**
|
|
352
|
+
* Merges app-supplied list-view messages over {@link DEFAULT_LIST_VIEW_MESSAGES}. Members that
|
|
353
|
+
* are missing, `undefined` or `null` keep their default, so an app compiled against an older
|
|
354
|
+
* `ListViewMessages` shape (or one that leaves a translation unset) never renders an empty label.
|
|
355
|
+
*/
|
|
356
|
+
declare function resolveListViewMessages(messages: Partial<ListViewMessages> | null | undefined): Required<ListViewMessages>;
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* One user action (AB#5570): a row action, a toolbar action or a page action. The same
|
|
360
|
+
* definition drives the inline icon button, the overflow menu item and the text button, so
|
|
361
|
+
* label, icon, danger styling and the disabled reason never diverge between them.
|
|
362
|
+
*
|
|
363
|
+
* See `octo-frontend-refinery-studio/docs/concepts/studio-action-guideline.md`.
|
|
364
|
+
*/
|
|
365
|
+
interface MmAction<TId extends string = string> {
|
|
366
|
+
/** Stable id, emitted with the event and rendered as `data-action` (tests, analytics). */
|
|
367
|
+
id: TId;
|
|
368
|
+
/**
|
|
369
|
+
* Verb phrase in sentence case ("Edit", "Delete dump", "Set value"). Used as tooltip,
|
|
370
|
+
* menu/button text (unless `menuLabel` is set) and — together with the row label — as the
|
|
371
|
+
* accessible name. Never ends with "…"; put that into `menuLabel`.
|
|
372
|
+
*/
|
|
373
|
+
label: string;
|
|
374
|
+
/**
|
|
375
|
+
* Visible text in menus and text buttons when it differs from `label` — typically the "…" of
|
|
376
|
+
* actions that open a dialog ("Delete dump…"). Tooltips and accessible names keep `label`.
|
|
377
|
+
* Falls back to `label`.
|
|
378
|
+
*/
|
|
379
|
+
menuLabel?: string;
|
|
380
|
+
/** Kendo SVG icon; take it from {@link MM_ACTION_ICONS} where a canonical icon exists. */
|
|
381
|
+
icon?: SVGIcon;
|
|
382
|
+
/** Destructive action: danger styling; the handler must confirm (danger dialog, named target). */
|
|
383
|
+
danger?: boolean;
|
|
384
|
+
/**
|
|
385
|
+
* Why the action is not available right now. A non-empty reason disables the action
|
|
386
|
+
* (`aria-disabled`, still focusable) and is announced via `aria-describedby` and shown in
|
|
387
|
+
* the tooltip. `null`/`undefined`/`''` = enabled.
|
|
388
|
+
*/
|
|
389
|
+
disabledReason?: string | null;
|
|
390
|
+
/** `false` hides the action (no permission, not applicable to this row). Default: visible. */
|
|
391
|
+
visible?: boolean;
|
|
392
|
+
/** Always place the action in the overflow menu, even when there is room inline. */
|
|
393
|
+
overflow?: boolean;
|
|
394
|
+
/**
|
|
395
|
+
* Navigation target. Inline the action renders as a real link (`routerLink`, open in new tab
|
|
396
|
+
* works); in the overflow menu it navigates with the Router. `triggered` still fires.
|
|
397
|
+
*/
|
|
398
|
+
link?: MmActionLink;
|
|
399
|
+
}
|
|
400
|
+
/** Router target of a navigating action (`Router.navigate(commands, {queryParams})`). */
|
|
401
|
+
interface MmActionLink {
|
|
402
|
+
commands: readonly unknown[] | string;
|
|
403
|
+
queryParams?: Record<string, string>;
|
|
404
|
+
}
|
|
405
|
+
/** Emitted when an enabled action is triggered. */
|
|
406
|
+
interface MmActionEvent<TId extends string = string> {
|
|
407
|
+
id: TId;
|
|
408
|
+
action: MmAction<TId>;
|
|
409
|
+
}
|
|
410
|
+
/** Default number of row action slots (inline buttons incl. the overflow button). */
|
|
411
|
+
declare const MM_ROW_ACTIONS_MAX_INLINE = 3;
|
|
412
|
+
/**
|
|
413
|
+
* Canonical action icons (AB#5570). One verb, one icon, everywhere: pick from this map
|
|
414
|
+
* instead of importing a Kendo icon ad hoc, so "Edit" never shows a gear in one list and a
|
|
415
|
+
* pencil in the next.
|
|
416
|
+
*/
|
|
417
|
+
declare const MM_ACTION_ICONS: {
|
|
418
|
+
/** Create a new item ("New adapter", "Add mapping"). */
|
|
419
|
+
readonly add: SVGIcon;
|
|
420
|
+
/** Edit / open the editable form of the item. */
|
|
421
|
+
readonly edit: SVGIcon;
|
|
422
|
+
/** Read-only view / preview. */
|
|
423
|
+
readonly view: SVGIcon;
|
|
424
|
+
/** Open the item (or a related page) in its own view / new tab. */
|
|
425
|
+
readonly open: SVGIcon;
|
|
426
|
+
/** Delete / remove the item (always `danger`). */
|
|
427
|
+
readonly delete: SVGIcon;
|
|
428
|
+
/** Clear a stored value without deleting the item ("Not needed", "Clear secret"). */
|
|
429
|
+
readonly clear: SVGIcon;
|
|
430
|
+
/** Copy an id or value to the clipboard. */
|
|
431
|
+
readonly copy: SVGIcon;
|
|
432
|
+
/** Duplicate the item as a new item. */
|
|
433
|
+
readonly duplicate: SVGIcon;
|
|
434
|
+
/** Reload data. */
|
|
435
|
+
readonly refresh: SVGIcon;
|
|
436
|
+
/** Deploy to a pool / cluster. */
|
|
437
|
+
readonly deploy: SVGIcon;
|
|
438
|
+
/** Undeploy. */
|
|
439
|
+
readonly undeploy: SVGIcon;
|
|
440
|
+
/** Run / execute / start. */
|
|
441
|
+
readonly run: SVGIcon;
|
|
442
|
+
/** Stop / cancel a running job. */
|
|
443
|
+
readonly stop: SVGIcon;
|
|
444
|
+
/** Export data (file the user saves). */
|
|
445
|
+
readonly export: SVGIcon;
|
|
446
|
+
/** Import data. */
|
|
447
|
+
readonly import: SVGIcon;
|
|
448
|
+
/** Download a file. */
|
|
449
|
+
readonly download: SVGIcon;
|
|
450
|
+
/** Show a report / log. */
|
|
451
|
+
readonly report: SVGIcon;
|
|
452
|
+
/** Restore / roll back to a stored state (e.g. restore a dump); destructive restores are `danger`. */
|
|
453
|
+
readonly restore: SVGIcon;
|
|
454
|
+
/** Pin to a start page / favourites ("Pin to Home"). */
|
|
455
|
+
readonly pin: SVGIcon;
|
|
456
|
+
/** Remove a pin ("Unpin from Home"). */
|
|
457
|
+
readonly unpin: SVGIcon;
|
|
458
|
+
/** Merge one item into another (e.g. merge users); usually `danger`. */
|
|
459
|
+
readonly merge: SVGIcon;
|
|
460
|
+
/** Reset / set a password. */
|
|
461
|
+
readonly resetPassword: SVGIcon;
|
|
462
|
+
/** Fill a past time range from the source data (e.g. rollup backfill). */
|
|
463
|
+
readonly backfill: SVGIcon;
|
|
464
|
+
/** Recalculate derived values for a range (e.g. rollup recompute); not the same as `refresh`. */
|
|
465
|
+
readonly recompute: SVGIcon;
|
|
466
|
+
};
|
|
467
|
+
type MmActionIconName = keyof typeof MM_ACTION_ICONS;
|
|
468
|
+
/** True when the action is disabled (non-empty {@link MmAction.disabledReason}). */
|
|
469
|
+
declare function isActionDisabled(action: MmAction): boolean;
|
|
470
|
+
/** True unless the action is explicitly hidden. */
|
|
471
|
+
declare function isActionVisible(action: MmAction): boolean;
|
|
472
|
+
/**
|
|
473
|
+
* Accessible name of an action on a named target: "Delete dump Encrypt run 2026-10-06 17:09".
|
|
474
|
+
* Without a target the label alone.
|
|
475
|
+
*/
|
|
476
|
+
declare function actionAccessibleName(action: MmAction, targetLabel?: string | null): string;
|
|
477
|
+
/** Tooltip: the label, plus the reason when disabled ("Delete dump — Requires SecretManagement"). */
|
|
478
|
+
declare function actionTooltip(action: MmAction): string;
|
|
479
|
+
/**
|
|
480
|
+
* Splits visible actions into inline buttons and overflow-menu items. At most `maxInline`
|
|
481
|
+
* slots are rendered: when the actions do not fit, the last slot becomes the overflow
|
|
482
|
+
* button. Actions with `overflow: true` always go to the menu (and need the overflow slot).
|
|
284
483
|
*/
|
|
285
|
-
declare
|
|
484
|
+
declare function splitRowActions<TId extends string>(actions: readonly MmAction<TId>[], maxInline?: number): {
|
|
485
|
+
inline: MmAction<TId>[];
|
|
486
|
+
menu: MmAction<TId>[];
|
|
487
|
+
};
|
|
286
488
|
|
|
489
|
+
/**
|
|
490
|
+
* A row action of `mm-list-view` (AB#5572), declared once per list from the shared action model
|
|
491
|
+
* ({@link MmAction}): the per-row parts (`disabledReason`, `visible`, `link`) may be callbacks that
|
|
492
|
+
* receive the row. Rendered with the guideline rules — neutral icon buttons (danger colour only for
|
|
493
|
+
* `danger` actions), tooltip = label, accessible name = label + row name, at most
|
|
494
|
+
* `maxInlineRowActions` slots (default 3; the last one becomes "More actions for …"), disabled
|
|
495
|
+
* actions stay focusable and announce their reason.
|
|
496
|
+
*
|
|
497
|
+
* ```ts
|
|
498
|
+
* protected readonly rowActions: MmListRowAction<AdapterDto>[] = [
|
|
499
|
+
* { id: 'edit', label: 'Edit', icon: MM_ACTION_ICONS.edit, link: (row) => ({ commands: ['details', row.rtId] }) },
|
|
500
|
+
* { id: 'delete', label: 'Delete', menuLabel: 'Delete…', icon: MM_ACTION_ICONS.delete, danger: true,
|
|
501
|
+
* disabledReason: (row) => row.deployed ? 'Undeploy the adapter first' : null, run: (row) => this.delete(row) },
|
|
502
|
+
* ];
|
|
503
|
+
* ```
|
|
504
|
+
* ```html
|
|
505
|
+
* <mm-list-view [rowActions]="rowActions" (rowAction)="onRowAction($event)" … />
|
|
506
|
+
* ```
|
|
507
|
+
*/
|
|
508
|
+
interface MmListRowAction<TRow = any, TId extends string = string> extends Omit<MmAction<TId>, 'disabledReason' | 'visible' | 'link'> {
|
|
509
|
+
/** Why the action is unavailable for this row; non-empty = disabled (focusable, announced). */
|
|
510
|
+
disabledReason?: string | null | ((row: TRow) => string | null | undefined);
|
|
511
|
+
/** `false` (or a callback returning false) hides the action for the row. */
|
|
512
|
+
visible?: boolean | ((row: TRow) => boolean);
|
|
513
|
+
/** Navigation target (inline: real router link; overflow menu: Router.navigate relative to the host route). */
|
|
514
|
+
link?: MmActionLink | ((row: TRow) => MmActionLink | null | undefined);
|
|
515
|
+
/** Optional handler; `(rowAction)` fires as well. Destructive handlers confirm first (danger dialog). */
|
|
516
|
+
run?: (row: TRow) => void | Promise<void>;
|
|
517
|
+
}
|
|
518
|
+
/** Emitted by `(rowAction)` for an enabled row action. */
|
|
519
|
+
interface MmListRowActionEvent<TRow = any, TId extends string = string> {
|
|
520
|
+
id: TId;
|
|
521
|
+
action: MmAction<TId>;
|
|
522
|
+
row: TRow;
|
|
523
|
+
}
|
|
524
|
+
/**
|
|
525
|
+
* One row action resolved for a concrete row: the rendered {@link MmAction} plus where it came from —
|
|
526
|
+
* a legacy `CommandItem` (`actionCommandItems`, handled via the CommandItem's link / onClick) or a
|
|
527
|
+
* {@link MmListRowAction} (`rowActions`).
|
|
528
|
+
*/
|
|
529
|
+
interface ResolvedListRowAction {
|
|
530
|
+
action: MmAction;
|
|
531
|
+
commandItem?: CommandItem;
|
|
532
|
+
rowAction?: MmListRowAction;
|
|
533
|
+
}
|
|
534
|
+
/**
|
|
535
|
+
* Human label of a list row (AB#5623) — the row's name in row action names ("Actions for <label>"),
|
|
536
|
+
* dialog titles and danger confirmations. Reads `field` (a dotted path such as `contact.displayName`
|
|
537
|
+
* also works, a flat key with dots wins), then each of `fallbacks` (default `rtWellKnownName`,
|
|
538
|
+
* `rtId`); the first non-blank value wins. `''` when none is set.
|
|
539
|
+
*/
|
|
540
|
+
declare function resolveListRowLabel(row: unknown, field: string | null | undefined, fallbacks?: readonly string[]): string;
|
|
541
|
+
/** Resolves the per-row callbacks of a {@link MmListRowAction}. */
|
|
542
|
+
declare function resolveListRowAction(definition: MmListRowAction, row: unknown): MmAction;
|
|
543
|
+
/** Structural equality of two rendered actions (keeps object identity stable across change detection). */
|
|
544
|
+
declare function sameAction(a: MmAction, b: MmAction): boolean;
|
|
545
|
+
|
|
546
|
+
/** Row actions of one row, split for rendering (AB#5572). */
|
|
547
|
+
interface RowActionsView {
|
|
548
|
+
inline: ResolvedListRowAction[];
|
|
549
|
+
menu: ResolvedListRowAction[];
|
|
550
|
+
/** The "…" button is shown (overflowing actions and/or context menu items). */
|
|
551
|
+
hasMenu: boolean;
|
|
552
|
+
}
|
|
287
553
|
declare class ListViewComponent extends CommandBaseService implements OnDestroy, AfterViewInit {
|
|
288
554
|
private readonly cronHumanizer;
|
|
289
555
|
protected _columns: TableColumn[];
|
|
@@ -296,16 +562,27 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
|
|
|
296
562
|
private _actionMenuSelectedRow;
|
|
297
563
|
private _contextMenuSelectedRow;
|
|
298
564
|
protected _actionMenuItems: MenuItem[];
|
|
565
|
+
private _rowActions;
|
|
566
|
+
/** Per-row resolved actions; identical results keep their identity (no NG0100, no re-render churn). */
|
|
567
|
+
private rowActionCache;
|
|
568
|
+
private readonly activatedRoute;
|
|
569
|
+
private readonly routerForActions;
|
|
299
570
|
protected _contextMenuItems: MenuItem[];
|
|
300
571
|
protected _showRowFilter: boolean;
|
|
301
572
|
/** Indicates if the data source is currently loading data */
|
|
302
|
-
protected isLoading:
|
|
573
|
+
protected isLoading: _angular_core.WritableSignal<boolean>;
|
|
574
|
+
/**
|
|
575
|
+
* Whether the data source reported "not loading" at least once (AB#3444). {@link isLoading}
|
|
576
|
+
* follows the data source one macrotask late (asyncScheduler), so the first render would
|
|
577
|
+
* otherwise show the empty state while the first fetch is already in flight.
|
|
578
|
+
*/
|
|
579
|
+
protected readonly loadSettled: _angular_core.WritableSignal<boolean>;
|
|
303
580
|
/**
|
|
304
581
|
* The component's own width in pixels, kept current via ResizeObserver.
|
|
305
582
|
* `null` until the first measurement (before that, all columns render visible
|
|
306
583
|
* and auto-sized). Drives `hideBelow` column hiding and `minWidth` pinning.
|
|
307
584
|
*/
|
|
308
|
-
protected readonly containerWidth:
|
|
585
|
+
protected readonly containerWidth: _angular_core.WritableSignal<number | null>;
|
|
309
586
|
private readonly hostElement;
|
|
310
587
|
private readonly ngZone;
|
|
311
588
|
private resizeObserver?;
|
|
@@ -357,6 +634,20 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
|
|
|
357
634
|
set actionCommandItems(commandItems: CommandItem[]);
|
|
358
635
|
get contextMenuCommandItems(): CommandItem[];
|
|
359
636
|
set contextMenuCommandItems(commandItems: CommandItem[]);
|
|
637
|
+
/**
|
|
638
|
+
* Row actions from the shared action model (AB#5572) — preferred over `actionCommandItems`.
|
|
639
|
+
* Rendered after the `actionCommandItems` (which keep working through an adapter); together they
|
|
640
|
+
* get at most {@link maxInlineRowActions} slots, the rest goes into the row's overflow menu.
|
|
641
|
+
*/
|
|
642
|
+
set rowActions(actions: readonly MmListRowAction[] | null | undefined);
|
|
643
|
+
get rowActions(): readonly MmListRowAction[];
|
|
644
|
+
/**
|
|
645
|
+
* Row action slots incl. the overflow ("…") button (guideline §2.2: 3). When the actions do not
|
|
646
|
+
* fit, the last slot opens the overflow menu with the remaining actions and the context menu items.
|
|
647
|
+
*/
|
|
648
|
+
maxInlineRowActions: number;
|
|
649
|
+
/** An enabled {@link rowActions} action was triggered (inline or from the overflow menu). */
|
|
650
|
+
rowAction: EventEmitter<MmListRowActionEvent<any, string>>;
|
|
360
651
|
excelExportFileName: string;
|
|
361
652
|
pdfExportFileName: string;
|
|
362
653
|
pageable: PagerSettings;
|
|
@@ -412,6 +703,10 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
|
|
|
412
703
|
* case the column has to be wide enough for.
|
|
413
704
|
*/
|
|
414
705
|
private get maxActionButtons();
|
|
706
|
+
/** The context menu is opened from the row's "…" button (not by right click). */
|
|
707
|
+
private get hasContextMenuButton();
|
|
708
|
+
/** The list renders an actions column / card actions at all. */
|
|
709
|
+
protected get hasRowActions(): boolean;
|
|
415
710
|
/**
|
|
416
711
|
* The actions column width actually used.
|
|
417
712
|
*
|
|
@@ -456,14 +751,50 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
|
|
|
456
751
|
* the window ever resizing.
|
|
457
752
|
*/
|
|
458
753
|
collapseCommandsBelow: number;
|
|
754
|
+
/**
|
|
755
|
+
* Tells the list that the host holds filters of its own (quick-view bars,
|
|
756
|
+
* app-side field filters) that a reset would clear. The toolbar's reset
|
|
757
|
+
* button only shows while something is filtered, and the list cannot see
|
|
758
|
+
* those host filters by itself.
|
|
759
|
+
*/
|
|
760
|
+
hasExternalFilters: boolean;
|
|
761
|
+
/**
|
|
762
|
+
* Empty state of the list (AB#3444): when set, a list without records shows the shared
|
|
763
|
+
* `mm-empty-state` — one OctoBot `idle` with {@link MmListEmptyState.title} / `text` — instead
|
|
764
|
+
* of the plain "No records available." line; while a search, row filter or host filter
|
|
765
|
+
* ({@link hasExternalFilters}) is active it shows OctoBot `look` with the "no results" texts.
|
|
766
|
+
* Nothing is shown while the list loads (including before the first fetch answered). The figure appears once per list, never in rows.
|
|
767
|
+
*/
|
|
768
|
+
emptyState: MmListEmptyState | null;
|
|
769
|
+
/**
|
|
770
|
+
* Fully custom empty state (wins over {@link emptyState}). Context: `$implicit` / `filtered`
|
|
771
|
+
* is `true` while a search or filter is active.
|
|
772
|
+
*/
|
|
773
|
+
emptyTemplate: TemplateRef<MmListEmptyContext> | null;
|
|
774
|
+
/**
|
|
775
|
+
* Whether a search, row filter or host filter narrows the rows right now (sorting does not),
|
|
776
|
+
* i.e. an empty list means "no results" rather than "no records yet".
|
|
777
|
+
*/
|
|
778
|
+
protected get isFiltered(): boolean;
|
|
779
|
+
protected get emptyContext(): MmListEmptyContext;
|
|
780
|
+
/**
|
|
781
|
+
* Whether anything narrows or reorders the default view right now: a row
|
|
782
|
+
* filter, a column sort, free-text search, or host-side filters announced
|
|
783
|
+
* through {@link hasExternalFilters}. Paging is deliberately not counted —
|
|
784
|
+
* the pager already gets back to page 1.
|
|
785
|
+
*/
|
|
786
|
+
protected get hasActiveFilters(): boolean;
|
|
459
787
|
/** True while the command buttons are collapsed into the overflow menu. */
|
|
460
788
|
protected get commandsCollapsed(): boolean;
|
|
461
789
|
/**
|
|
462
790
|
* The commands available right now, in toolbar order. The row filter is
|
|
463
791
|
* omitted in card mode: cards have no column headers for a filter row to
|
|
464
792
|
* appear in, and the grid already drops `filterable` there — leaving the
|
|
465
|
-
* button visible offered to toggle something that cannot exist. Reset
|
|
466
|
-
*
|
|
793
|
+
* button visible offered to toggle something that cannot exist. Reset shows
|
|
794
|
+
* only while something is actually filtered, sorted or searched (see
|
|
795
|
+
* {@link hasActiveFilters}); on the default view there is nothing to reset,
|
|
796
|
+
* so the button would only be noise. It is independent of card mode, so a
|
|
797
|
+
* filter set before the switch can still be cleared.
|
|
467
798
|
*/
|
|
468
799
|
protected get toolbarCommands(): ListViewCommand[];
|
|
469
800
|
/**
|
|
@@ -486,9 +817,13 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
|
|
|
486
817
|
*/
|
|
487
818
|
rowClass: RowClassFn | undefined;
|
|
488
819
|
protected readonly defaultRowClass: RowClassFn;
|
|
489
|
-
protected _messages: ListViewMessages
|
|
490
|
-
|
|
491
|
-
|
|
820
|
+
protected _messages: Required<ListViewMessages>;
|
|
821
|
+
/**
|
|
822
|
+
* Translated messages. Partial: members that are not supplied (or are `undefined`) keep the
|
|
823
|
+
* English default from `DEFAULT_LIST_VIEW_MESSAGES`.
|
|
824
|
+
*/
|
|
825
|
+
set messages(value: Partial<ListViewMessages> | null | undefined);
|
|
826
|
+
get messages(): Required<ListViewMessages>;
|
|
492
827
|
selectable: SelectableSettings;
|
|
493
828
|
set columns(cols: ColumnDefinition[]);
|
|
494
829
|
get columns(): TableColumn[];
|
|
@@ -550,6 +885,22 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
|
|
|
550
885
|
* with a hint message.
|
|
551
886
|
*/
|
|
552
887
|
protected getToolbarItemDisabled(commandItem: CommandItem): boolean;
|
|
888
|
+
/**
|
|
889
|
+
* Accessible name of a host toolbar action. A button with a visible text is named by that
|
|
890
|
+
* text; an icon-only one (no text) gets its tooltip as `aria-label`, because `title` alone is
|
|
891
|
+
* not reliably announced (action guideline §2.2: icon-only = tooltip + aria-label).
|
|
892
|
+
*/
|
|
893
|
+
protected toolbarItemAriaLabel(commandItem: CommandItem): string | null;
|
|
894
|
+
private readonly buttonAttributesCache;
|
|
895
|
+
private static readonly NO_BUTTON_ATTRIBUTES;
|
|
896
|
+
/**
|
|
897
|
+
* `buttonAttributes` for Kendo split / dropdown buttons: same rule as
|
|
898
|
+
* {@link toolbarItemAriaLabel}, cached per label so change detection sees a stable object.
|
|
899
|
+
*/
|
|
900
|
+
protected toolbarItemButtonAttributes(commandItem: CommandItem): Record<string, string>;
|
|
901
|
+
/** `buttonAttributes` of the icon-only menu the commands collapse into. */
|
|
902
|
+
protected get commandsMenuButtonAttributes(): Record<string, string>;
|
|
903
|
+
private ariaLabelAttributes;
|
|
553
904
|
protected getValue(element: Record<string, unknown>, column: TableColumn): unknown;
|
|
554
905
|
/**
|
|
555
906
|
* Produces the formatted cell content when a column defines a `formatter` callback.
|
|
@@ -564,6 +915,23 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
|
|
|
564
915
|
*/
|
|
565
916
|
protected getCellTitle(element: Record<string, unknown>, column: TableColumn): string | null;
|
|
566
917
|
protected getFilterType(column: TableColumn): 'text' | 'numeric' | 'boolean' | 'date';
|
|
918
|
+
/**
|
|
919
|
+
* State of a `booleanIcon` cell (AB#5623): `'true'` / `'false'` for booleans (also the strings
|
|
920
|
+
* "true" / "false"), `null` for an empty or non-boolean value (empty cell).
|
|
921
|
+
*/
|
|
922
|
+
protected booleanIconState(element: Record<string, unknown>, column: TableColumn): 'true' | 'false' | null;
|
|
923
|
+
/** Icon of a `booleanIcon` cell: the column's `booleanIcons`, else check / x; `null` = no icon. */
|
|
924
|
+
protected booleanIcon(column: TableColumn, state: 'true' | 'false'): SVGIcon$1 | null;
|
|
925
|
+
/** Accessible name of a `booleanIcon` cell: "<column>: Yes|No" from the messages (AB#5623). */
|
|
926
|
+
protected booleanIconLabel(column: TableColumn, state: 'true' | 'false'): string;
|
|
927
|
+
/** Input attributes of a read-only boolean cell, cached per column and name (AB#5621). */
|
|
928
|
+
private readonly booleanCellAttributeCache;
|
|
929
|
+
/**
|
|
930
|
+
* Input attributes of a `boolean` cell's read-only checkbox: its accessible name is the column's
|
|
931
|
+
* display name (AB#5621), so a screen reader announces "<column>, checked" instead of an unnamed
|
|
932
|
+
* checkbox.
|
|
933
|
+
*/
|
|
934
|
+
protected booleanCellAttributes(column: TableColumn): Record<string, string>;
|
|
567
935
|
/**
|
|
568
936
|
* Gets all status field configurations for a statusIcons column.
|
|
569
937
|
* Returns an array of StatusFieldConfig, whether the column uses single or multi-field configuration.
|
|
@@ -636,11 +1004,34 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
|
|
|
636
1004
|
*/
|
|
637
1005
|
private clampContextMenuX;
|
|
638
1006
|
protected onSelectOptionActionItem(event: Event, dataItem: unknown, menuItem: MenuItem): Promise<void>;
|
|
1007
|
+
/**
|
|
1008
|
+
* Row field naming a row for assistive technology (row menu "Actions for <name>", action
|
|
1009
|
+
* buttons "<action> <name>"). Falls back to `rtWellKnownName`, then `rtId`. A dotted path
|
|
1010
|
+
* (`contact.displayName`) reads a nested value (AB#5623).
|
|
1011
|
+
*/
|
|
1012
|
+
rowLabelField: string;
|
|
1013
|
+
/** Human name of a row (`rowLabelField`, `rtWellKnownName`, `rtId`), or '' when unknown. */
|
|
1014
|
+
protected rowLabel(dataItem: unknown): string;
|
|
1015
|
+
/** Accessible name and tooltip of the row menu button. */
|
|
1016
|
+
protected rowActionsLabel(dataItem: unknown): string;
|
|
639
1017
|
protected getMenuItemVisible(menuItem: MenuItem, dataItem: unknown): boolean;
|
|
640
1018
|
protected getMenuItemDisabled(menuItem: MenuItem, dataItem: unknown): boolean;
|
|
641
1019
|
protected onContextMenu(dataItem: unknown, e: PointerEvent): void;
|
|
642
1020
|
private buildContextMenuItemsWithDisabledState;
|
|
643
1021
|
protected onContextMenuClosed(_event: ContextMenuPopupEvent): void;
|
|
1022
|
+
/**
|
|
1023
|
+
* Row actions of one row (AB#5572): `actionCommandItems` (adapter) followed by `rowActions`,
|
|
1024
|
+
* split into inline buttons and overflow-menu entries (max {@link maxInlineRowActions} slots,
|
|
1025
|
+
* context menu items and `overflow: true` actions force the "…" button).
|
|
1026
|
+
*/
|
|
1027
|
+
protected rowActionsView(dataItem: unknown): RowActionsView;
|
|
1028
|
+
/** Accessible name of the row action group: "Actions for <row>". */
|
|
1029
|
+
protected rowActionsGroupLabel(dataItem: unknown): string;
|
|
1030
|
+
protected onInlineRowAction(entry: ResolvedListRowAction, dataItem: unknown): Promise<void>;
|
|
1031
|
+
private triggerRowAction;
|
|
1032
|
+
/** `CommandItem` → `MmAction` adapter (AB#5572): `isDisabled` → reason, `danger`, icon, text. */
|
|
1033
|
+
private commandItemAction;
|
|
1034
|
+
private stableView;
|
|
644
1035
|
protected onToolbarCommand(commandItem: CommandItem): Promise<void>;
|
|
645
1036
|
protected onToolbarDropdownItemClick(childItem: CommandItem): Promise<void>;
|
|
646
1037
|
private buildMenuItems;
|
|
@@ -654,8 +1045,8 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
|
|
|
654
1045
|
* are told apart by meaning rather than by dot orientation.
|
|
655
1046
|
*/
|
|
656
1047
|
protected readonly commandsIcon: SVGIcon$1;
|
|
657
|
-
static ɵfac:
|
|
658
|
-
static ɵcmp:
|
|
1048
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ListViewComponent, never>;
|
|
1049
|
+
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; }; "emptyState": { "alias": "emptyState"; "required": false; }; "emptyTemplate": { "alias": "emptyTemplate"; "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
1050
|
}
|
|
660
1051
|
|
|
661
1052
|
declare const upload: {
|
|
@@ -675,9 +1066,9 @@ declare class UploadFileDialogComponent extends DialogContentBase {
|
|
|
675
1066
|
message: string;
|
|
676
1067
|
mimeTypes: string | null;
|
|
677
1068
|
fileExtensions: string | null;
|
|
678
|
-
protected fileName:
|
|
679
|
-
protected fileSize:
|
|
680
|
-
protected uploadProgress:
|
|
1069
|
+
protected fileName: _angular_core.WritableSignal<string>;
|
|
1070
|
+
protected fileSize: _angular_core.WritableSignal<number>;
|
|
1071
|
+
protected uploadProgress: _angular_core.WritableSignal<number>;
|
|
681
1072
|
protected fileInput: ElementRef | undefined;
|
|
682
1073
|
protected selectedFile: File | null;
|
|
683
1074
|
protected uploadSuccess: boolean;
|
|
@@ -692,8 +1083,8 @@ declare class UploadFileDialogComponent extends DialogContentBase {
|
|
|
692
1083
|
onCancel(): void;
|
|
693
1084
|
protected get upload(): typeof upload;
|
|
694
1085
|
protected get deleteIcon(): typeof deleteIcon;
|
|
695
|
-
static ɵfac:
|
|
696
|
-
static ɵcmp:
|
|
1086
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UploadFileDialogComponent, never>;
|
|
1087
|
+
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
1088
|
}
|
|
698
1089
|
|
|
699
1090
|
interface InputDialogMessages {
|
|
@@ -714,8 +1105,8 @@ declare class InputDialogComponent extends DialogContentBase {
|
|
|
714
1105
|
constructor();
|
|
715
1106
|
protected onOk(): void;
|
|
716
1107
|
protected onCancel(): void;
|
|
717
|
-
static ɵfac:
|
|
718
|
-
static ɵcmp:
|
|
1108
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<InputDialogComponent, never>;
|
|
1109
|
+
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
1110
|
}
|
|
720
1111
|
|
|
721
1112
|
declare abstract class HierarchyDataSource {
|
|
@@ -810,8 +1201,8 @@ declare class TreeComponent implements OnInit, AfterViewInit, OnDestroy {
|
|
|
810
1201
|
setExpandedKeys(keys: string[]): void;
|
|
811
1202
|
private _clearTimeouts;
|
|
812
1203
|
ngOnDestroy(): void;
|
|
813
|
-
static ɵfac:
|
|
814
|
-
static ɵcmp:
|
|
1204
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TreeComponent, never>;
|
|
1205
|
+
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
1206
|
}
|
|
816
1207
|
|
|
817
1208
|
/**
|
|
@@ -901,14 +1292,14 @@ declare class UnsavedChangesDirective {
|
|
|
901
1292
|
*/
|
|
902
1293
|
onBeforeUnload(event: BeforeUnloadEvent): void;
|
|
903
1294
|
private hostHasUnsavedChanges;
|
|
904
|
-
static ɵfac:
|
|
905
|
-
static ɵdir:
|
|
1295
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UnsavedChangesDirective, never>;
|
|
1296
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UnsavedChangesDirective, "[mmUnsavedChanges]", never, {}, {}, never, never, true, never>;
|
|
906
1297
|
}
|
|
907
1298
|
|
|
908
1299
|
declare class FormTitleExtraDirective {
|
|
909
1300
|
readonly templateRef: TemplateRef<any>;
|
|
910
|
-
static ɵfac:
|
|
911
|
-
static ɵdir:
|
|
1301
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormTitleExtraDirective, never>;
|
|
1302
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<FormTitleExtraDirective, "[mmFormTitleExtra]", never, {}, {}, never, never, true, never>;
|
|
912
1303
|
}
|
|
913
1304
|
interface ResponsiveFormBreakPoint {
|
|
914
1305
|
maxWidth: number;
|
|
@@ -1000,8 +1391,8 @@ declare class BaseFormComponent implements HasUnsavedChanges {
|
|
|
1000
1391
|
* Uses config.hasChanges if provided, otherwise falls back to form.dirty.
|
|
1001
1392
|
*/
|
|
1002
1393
|
hasUnsavedChanges(): boolean;
|
|
1003
|
-
static ɵfac:
|
|
1004
|
-
static ɵcmp:
|
|
1394
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BaseFormComponent, never>;
|
|
1395
|
+
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
1396
|
}
|
|
1006
1397
|
|
|
1007
1398
|
declare class BaseTreeDetailComponent<T = unknown> extends CommandBaseService {
|
|
@@ -1045,8 +1436,8 @@ declare class BaseTreeDetailComponent<T = unknown> extends CommandBaseService {
|
|
|
1045
1436
|
getExpandedKeys(): string[];
|
|
1046
1437
|
collapseAll(): void;
|
|
1047
1438
|
setExpandedKeys(keys: string[]): void;
|
|
1048
|
-
static ɵfac:
|
|
1049
|
-
static ɵcmp:
|
|
1439
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BaseTreeDetailComponent<any>, never>;
|
|
1440
|
+
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
1441
|
}
|
|
1051
1442
|
|
|
1052
1443
|
declare class ProgressValue {
|
|
@@ -1083,8 +1474,8 @@ declare class ProgressWindowComponent extends DialogContentBase implements OnDes
|
|
|
1083
1474
|
ngAfterViewInit(): void;
|
|
1084
1475
|
ngOnDestroy(): void;
|
|
1085
1476
|
onCancelClick(): void;
|
|
1086
|
-
static ɵfac:
|
|
1087
|
-
static ɵcmp:
|
|
1477
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ProgressWindowComponent, never>;
|
|
1478
|
+
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
1479
|
}
|
|
1089
1480
|
|
|
1090
1481
|
declare class ProgressWindowService {
|
|
@@ -1107,8 +1498,8 @@ declare class ProgressWindowService {
|
|
|
1107
1498
|
* @returns DialogRef for the progress window
|
|
1108
1499
|
*/
|
|
1109
1500
|
showIndeterminateProgress(title: string, progress: Observable<ProgressValue>, options?: Partial<ProgressWindowOptions>): DialogRef;
|
|
1110
|
-
static ɵfac:
|
|
1111
|
-
static ɵprov:
|
|
1501
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ProgressWindowService, never>;
|
|
1502
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ProgressWindowService>;
|
|
1112
1503
|
}
|
|
1113
1504
|
interface ProgressWindowConfig {
|
|
1114
1505
|
title: string;
|
|
@@ -1162,6 +1553,8 @@ interface ConfirmationWindowData {
|
|
|
1162
1553
|
dialogType: DialogType;
|
|
1163
1554
|
buttonLabels?: ConfirmationButtonLabels;
|
|
1164
1555
|
messages?: Partial<ConfirmationWindowMessages>;
|
|
1556
|
+
/** Destructive confirmation: the confirming (right-most) button is styled as danger (`themeColor="error"`). */
|
|
1557
|
+
danger?: boolean;
|
|
1165
1558
|
}
|
|
1166
1559
|
declare class ConfirmationWindowResult {
|
|
1167
1560
|
result: ButtonTypes;
|
|
@@ -1189,11 +1582,17 @@ declare class ConfirmationWindowComponent extends DialogContentBase implements O
|
|
|
1189
1582
|
protected button3Result: ButtonTypes | null;
|
|
1190
1583
|
constructor();
|
|
1191
1584
|
ngOnInit(): void;
|
|
1585
|
+
private readonly host;
|
|
1586
|
+
/**
|
|
1587
|
+
* Destructive confirmations start with the focus on the dismissing button (AB#5578): Enter must
|
|
1588
|
+
* never confirm a delete. Backs up the service's `autoFocusedElement`.
|
|
1589
|
+
*/
|
|
1590
|
+
ngAfterViewInit(): void;
|
|
1192
1591
|
onButton1(): void;
|
|
1193
1592
|
onButton2(): void;
|
|
1194
1593
|
onButton3(): void;
|
|
1195
|
-
static ɵfac:
|
|
1196
|
-
static ɵcmp:
|
|
1594
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ConfirmationWindowComponent, never>;
|
|
1595
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConfirmationWindowComponent, "mm-confirmation-window", never, { "data": { "alias": "data"; "required": false; }; }, {}, never, never, true, never>;
|
|
1197
1596
|
}
|
|
1198
1597
|
|
|
1199
1598
|
interface FetchResult<T = unknown> {
|
|
@@ -1245,7 +1644,7 @@ declare abstract class DataSourceBase {
|
|
|
1245
1644
|
* Kept current by MmListViewDataBindingDirective; lets host pages show the
|
|
1246
1645
|
* overall count (e.g. in a header badge) without a second query.
|
|
1247
1646
|
*/
|
|
1248
|
-
readonly totalCount:
|
|
1647
|
+
readonly totalCount: _angular_core.Signal<number | null>;
|
|
1249
1648
|
/** Set the total row count (called by MmListViewDataBindingDirective) */
|
|
1250
1649
|
setTotalCount(count: number | null): void;
|
|
1251
1650
|
protected constructor(listViewComponent: ListViewComponent);
|
|
@@ -1280,6 +1679,12 @@ declare class MmListViewDataBindingDirective extends DataBindingDirective implem
|
|
|
1280
1679
|
get isLoading$(): Observable<boolean>;
|
|
1281
1680
|
/** Current loading state */
|
|
1282
1681
|
get isLoading(): boolean;
|
|
1682
|
+
/**
|
|
1683
|
+
* Read-only view of the grid state (filter, sort, skip, take) Kendo keeps
|
|
1684
|
+
* protected on the base directive. The list view consults it to decide
|
|
1685
|
+
* whether anything is filtered right now.
|
|
1686
|
+
*/
|
|
1687
|
+
get currentState(): State$1;
|
|
1283
1688
|
private _serviceSubscription;
|
|
1284
1689
|
private _executeFilterSubscription;
|
|
1285
1690
|
private _fetchAgainSubscription;
|
|
@@ -1328,20 +1733,20 @@ declare class MmListViewDataBindingDirective extends DataBindingDirective implem
|
|
|
1328
1733
|
/** Writes the current sort/filter/skip + free-text search for this list to storage (best-effort). */
|
|
1329
1734
|
private persistState;
|
|
1330
1735
|
rebind(): void;
|
|
1331
|
-
static ɵfac:
|
|
1332
|
-
static ɵdir:
|
|
1736
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MmListViewDataBindingDirective, never>;
|
|
1737
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MmListViewDataBindingDirective, "[mmListViewDataBinding]", never, {}, {}, never, never, true, never>;
|
|
1333
1738
|
}
|
|
1334
1739
|
|
|
1335
1740
|
declare class PascalCasePipe implements PipeTransform {
|
|
1336
1741
|
transform(value: string): string;
|
|
1337
|
-
static ɵfac:
|
|
1338
|
-
static ɵpipe:
|
|
1742
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PascalCasePipe, never>;
|
|
1743
|
+
static ɵpipe: _angular_core.ɵɵPipeDeclaration<PascalCasePipe, "pascalCase", true>;
|
|
1339
1744
|
}
|
|
1340
1745
|
|
|
1341
1746
|
declare class BytesToSizePipe implements PipeTransform {
|
|
1342
1747
|
transform(value: number, decimals?: number): string;
|
|
1343
|
-
static ɵfac:
|
|
1344
|
-
static ɵpipe:
|
|
1748
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BytesToSizePipe, never>;
|
|
1749
|
+
static ɵpipe: _angular_core.ɵɵPipeDeclaration<BytesToSizePipe, "bytesToSize", true>;
|
|
1345
1750
|
}
|
|
1346
1751
|
|
|
1347
1752
|
declare enum ImportStrategyDto {
|
|
@@ -1352,28 +1757,132 @@ declare enum ImportStrategyDto {
|
|
|
1352
1757
|
declare class FileUploadService {
|
|
1353
1758
|
private readonly dialogService;
|
|
1354
1759
|
showUploadDialog(title: string, message: string, mimeTypes?: string | null, fileExtensions?: string | null): Promise<File | null>;
|
|
1355
|
-
static ɵfac:
|
|
1356
|
-
static ɵprov:
|
|
1760
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FileUploadService, never>;
|
|
1761
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<FileUploadService>;
|
|
1762
|
+
}
|
|
1763
|
+
|
|
1764
|
+
/**
|
|
1765
|
+
* Texts of the danger confirmation (AB#5578); apps translate them like the other shared-ui
|
|
1766
|
+
* dialogs (`Partial<…Messages>` per call or as `ConfirmationService.defaultDangerMessages`).
|
|
1767
|
+
*/
|
|
1768
|
+
interface DangerConfirmationMessages {
|
|
1769
|
+
/** Dismissing button. Default: "Cancel" */
|
|
1770
|
+
cancel: string;
|
|
1771
|
+
/** Label of the type-to-confirm input; `{name}` = target name. Default: "Type {name} to confirm" */
|
|
1772
|
+
typeToConfirm: string;
|
|
1773
|
+
/** Environment notice; `{environment}` = environment label. Default: "{environment} environment. Check the target before you confirm." */
|
|
1774
|
+
environmentNotice: string;
|
|
1775
|
+
/** Label in front of the target. Default: "Target" */
|
|
1776
|
+
target: string;
|
|
1777
|
+
}
|
|
1778
|
+
declare const DEFAULT_DANGER_CONFIRMATION_MESSAGES: DangerConfirmationMessages;
|
|
1779
|
+
/**
|
|
1780
|
+
* A destructive action's confirmation (Studio action guideline §2.4, AB#5578): the title names
|
|
1781
|
+
* the target, the body says what is lost, the confirming button names the verb + object and is
|
|
1782
|
+
* danger-styled on the right, Cancel on the left. Optionally the user has to type the target
|
|
1783
|
+
* name before the confirming button enables (production tenants).
|
|
1784
|
+
*
|
|
1785
|
+
* ```ts
|
|
1786
|
+
* const ok = await confirmation.showDangerConfirm({
|
|
1787
|
+
* title: 'Delete adapter Mesh Adapter?',
|
|
1788
|
+
* targetName: 'Mesh Adapter',
|
|
1789
|
+
* consequence: 'The adapter and its configuration are deleted. This cannot be undone.',
|
|
1790
|
+
* confirmText: 'Delete adapter',
|
|
1791
|
+
* });
|
|
1792
|
+
* ```
|
|
1793
|
+
*/
|
|
1794
|
+
interface DangerConfirmationOptions {
|
|
1795
|
+
/** Dialog title naming the target ("Delete adapter Mesh Adapter?"). */
|
|
1796
|
+
title: string;
|
|
1797
|
+
/** Name of the affected item ("Mesh Adapter", "3 adapters"); shown emphasised and typed when required. */
|
|
1798
|
+
targetName: string;
|
|
1799
|
+
/** What is lost and whether it can be undone. */
|
|
1800
|
+
consequence: string;
|
|
1801
|
+
/** Confirming button: verb + object ("Delete adapter"), never "Yes" / "OK". */
|
|
1802
|
+
confirmText: string;
|
|
1803
|
+
/** Overrides `messages.cancel`. */
|
|
1804
|
+
cancelText?: string;
|
|
1805
|
+
/** The confirming button enables only once `targetName` is typed exactly (trimmed). */
|
|
1806
|
+
requireTypingName?: boolean;
|
|
1807
|
+
/** Environment label ("PRODUCTION", "STAGING") — shows the environment notice; omit in dev/test tenants. */
|
|
1808
|
+
environmentLabel?: string | null;
|
|
1809
|
+
messages?: Partial<DangerConfirmationMessages>;
|
|
1810
|
+
}
|
|
1811
|
+
/** Word typed when the target name is empty and no confirm text is set either. */
|
|
1812
|
+
declare const DANGER_CONFIRM_FALLBACK_WORD = "DELETE";
|
|
1813
|
+
/**
|
|
1814
|
+
* The text the user has to type when `requireTypingName` is set: the target name, or — when the
|
|
1815
|
+
* target name is empty/whitespace — the confirm button text, else {@link DANGER_CONFIRM_FALLBACK_WORD}.
|
|
1816
|
+
* Never empty, so an empty input can never satisfy the type-to-confirm rule.
|
|
1817
|
+
*/
|
|
1818
|
+
declare function dangerConfirmTypingToken(options: Pick<DangerConfirmationOptions, 'targetName' | 'confirmText'>): string;
|
|
1819
|
+
/**
|
|
1820
|
+
* True when `typed` matches the target name (trimmed, case-sensitive). An empty/whitespace target
|
|
1821
|
+
* name never matches — use {@link dangerConfirmTypingToken} to get a non-empty word to type.
|
|
1822
|
+
*/
|
|
1823
|
+
declare function dangerConfirmNameMatches(typed: string | null | undefined, targetName: string): boolean;
|
|
1824
|
+
/**
|
|
1825
|
+
* App-wide environment defaults of {@link ConfirmationService.showDangerConfirm} (AB#5578), e.g.
|
|
1826
|
+
* "production tenants type the target name". Applied whenever a caller — typically a library
|
|
1827
|
+
* component — leaves `requireTypingName` / `environmentLabel` unset; explicit caller options win.
|
|
1828
|
+
*/
|
|
1829
|
+
interface DangerConfirmEnvironment {
|
|
1830
|
+
/** Default of `requireTypingName`. */
|
|
1831
|
+
requireTypingName: boolean;
|
|
1832
|
+
/** Default of `environmentLabel` ("PRODUCTION", "STAGING"); `null`/omitted = no notice. */
|
|
1833
|
+
environmentLabel?: string | null;
|
|
1357
1834
|
}
|
|
1835
|
+
/**
|
|
1836
|
+
* Optional hook providing the current {@link DangerConfirmEnvironment}; evaluated each time a
|
|
1837
|
+
* danger confirmation opens (so it may read signals). Absent = behaviour unchanged.
|
|
1838
|
+
*
|
|
1839
|
+
* ```ts
|
|
1840
|
+
* { provide: DANGER_CONFIRM_ENVIRONMENT, useFactory: () => {
|
|
1841
|
+
* const mode = inject(MyEnvironmentService);
|
|
1842
|
+
* return () => ({ requireTypingName: mode.isProduction(), environmentLabel: mode.label() });
|
|
1843
|
+
* } }
|
|
1844
|
+
* ```
|
|
1845
|
+
*/
|
|
1846
|
+
declare const DANGER_CONFIRM_ENVIRONMENT: InjectionToken<() => DangerConfirmEnvironment>;
|
|
1847
|
+
/** Applies the environment defaults to options that leave `requireTypingName` / `environmentLabel` unset. */
|
|
1848
|
+
declare function applyDangerConfirmEnvironment(options: DangerConfirmationOptions, environment: DangerConfirmEnvironment | null | undefined): DangerConfirmationOptions;
|
|
1358
1849
|
|
|
1359
1850
|
declare class ConfirmationService {
|
|
1360
1851
|
private readonly dialogService;
|
|
1852
|
+
/** Optional app-wide environment defaults (e.g. production → type the name), AB#5578. */
|
|
1853
|
+
private readonly dangerEnvironment;
|
|
1361
1854
|
defaultMessages: Partial<ConfirmationWindowMessages> | undefined;
|
|
1855
|
+
/** App-wide translations of {@link showDangerConfirm}; per-call `options.messages` win. */
|
|
1856
|
+
defaultDangerMessages: Partial<DangerConfirmationMessages> | undefined;
|
|
1857
|
+
/**
|
|
1858
|
+
* Danger confirmation that names the target (Studio action guideline §2.4, AB#5578): title +
|
|
1859
|
+
* target + consequence, Cancel left / danger confirm right, initial focus on Cancel (or on the
|
|
1860
|
+
* type-to-confirm input when `requireTypingName`, e.g. in production tenants). Resolves `true`
|
|
1861
|
+
* only when the confirming button was used. Unset `requireTypingName` / `environmentLabel` fall
|
|
1862
|
+
* back to the app's {@link DANGER_CONFIRM_ENVIRONMENT}, if provided.
|
|
1863
|
+
*/
|
|
1864
|
+
showDangerConfirm(callerOptions: DangerConfirmationOptions): Promise<boolean>;
|
|
1362
1865
|
showYesNoConfirmationDialog(title: string, message: string, cssClass?: string, buttonLabels?: ConfirmationButtonLabels, messages?: Partial<ConfirmationWindowMessages>): Promise<boolean>;
|
|
1363
1866
|
showYesNoCancelConfirmationDialog(title: string, message: string, buttonLabels?: ConfirmationButtonLabels, messages?: Partial<ConfirmationWindowMessages>): Promise<ConfirmationWindowResult | undefined>;
|
|
1364
1867
|
showOkCancelConfirmationDialog(title: string, message: string, messages?: Partial<ConfirmationWindowMessages>): Promise<boolean>;
|
|
1868
|
+
/**
|
|
1869
|
+
* Confirmation of a destructive action: explicit verb labels instead of Yes / No (e.g.
|
|
1870
|
+
* "Rotate" / "Cancel") and the confirming button styled as danger. Resolves `true` only when
|
|
1871
|
+
* the confirming button was clicked.
|
|
1872
|
+
*/
|
|
1873
|
+
showDestructiveConfirmationDialog(title: string, message: string, confirmLabel: string, cancelLabel?: string): Promise<boolean>;
|
|
1365
1874
|
showOkDialog(title: string, message: string, messages?: Partial<ConfirmationWindowMessages>): Promise<boolean>;
|
|
1366
1875
|
private openDialog;
|
|
1367
|
-
static ɵfac:
|
|
1368
|
-
static ɵprov:
|
|
1876
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ConfirmationService, never>;
|
|
1877
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ConfirmationService>;
|
|
1369
1878
|
}
|
|
1370
1879
|
|
|
1371
1880
|
declare class InputService {
|
|
1372
1881
|
private readonly dialogService;
|
|
1373
1882
|
defaultMessages: Partial<InputDialogMessages> | undefined;
|
|
1374
1883
|
showInputDialog(title: string, message: string, placeholder: string, buttonOkText?: string | null, messages?: Partial<InputDialogMessages>): Promise<string | null>;
|
|
1375
|
-
static ɵfac:
|
|
1376
|
-
static ɵprov:
|
|
1884
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<InputService, never>;
|
|
1885
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<InputService>;
|
|
1377
1886
|
}
|
|
1378
1887
|
|
|
1379
1888
|
interface NotificationDisplayMessages {
|
|
@@ -1381,13 +1890,43 @@ interface NotificationDisplayMessages {
|
|
|
1381
1890
|
}
|
|
1382
1891
|
declare const DEFAULT_NOTIFICATION_DISPLAY_MESSAGES: NotificationDisplayMessages;
|
|
1383
1892
|
|
|
1893
|
+
/**
|
|
1894
|
+
* How the {@link NotificationDisplayService} stacks its toasts. Provide it with
|
|
1895
|
+
* {@link NOTIFICATION_DISPLAY_OPTIONS}; without a provider the defaults keep the former behaviour
|
|
1896
|
+
* except for de-duplication, which is always safe.
|
|
1897
|
+
*/
|
|
1898
|
+
interface NotificationDisplayOptions {
|
|
1899
|
+
/**
|
|
1900
|
+
* Milliseconds after which an error hides itself when the caller passes no `hideAfter`.
|
|
1901
|
+
* 0 (default) keeps errors until user interaction or navigation. A caller passing
|
|
1902
|
+
* `hideAfter: 0` explicitly always gets a sticky (critical) error.
|
|
1903
|
+
*/
|
|
1904
|
+
errorHideAfter?: number;
|
|
1905
|
+
/** Same as {@link errorHideAfter} for warnings. */
|
|
1906
|
+
warningHideAfter?: number;
|
|
1907
|
+
/**
|
|
1908
|
+
* Errors and warnings that come with details (the "show details" button) stay until closed,
|
|
1909
|
+
* whatever {@link errorHideAfter} / {@link warningHideAfter} say. Default false.
|
|
1910
|
+
*/
|
|
1911
|
+
stickyWithDetails?: boolean;
|
|
1912
|
+
/** Most toasts shown at once; beyond it the oldest toast of the LOWEST severity is hidden
|
|
1913
|
+
* (an error or warning is never dropped in favour of a success or info). 0 (default) = no limit. */
|
|
1914
|
+
maxVisible?: number;
|
|
1915
|
+
/** 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. */
|
|
1916
|
+
dedupe?: boolean;
|
|
1917
|
+
}
|
|
1918
|
+
declare const NOTIFICATION_DISPLAY_OPTIONS: InjectionToken<NotificationDisplayOptions>;
|
|
1919
|
+
type ToastStyle = 'success' | 'info' | 'warning' | 'error';
|
|
1384
1920
|
declare class NotificationDisplayService implements OnDestroy {
|
|
1385
1921
|
private readonly notificationService;
|
|
1386
1922
|
private readonly messageDetailsDialogService;
|
|
1387
1923
|
private readonly router;
|
|
1388
1924
|
private readonly ngZone;
|
|
1925
|
+
private readonly options;
|
|
1389
1926
|
private notificationCounter;
|
|
1390
1927
|
private activeNotifications;
|
|
1928
|
+
/** Every visible toast, oldest first (dedupe, stack cap, auto-hide timers). */
|
|
1929
|
+
private toasts;
|
|
1391
1930
|
private subscriptions;
|
|
1392
1931
|
private interactionDebounceTime;
|
|
1393
1932
|
private gracePeriod;
|
|
@@ -1412,19 +1951,33 @@ declare class NotificationDisplayService implements OnDestroy {
|
|
|
1412
1951
|
*/
|
|
1413
1952
|
showSuccess(title: string, hideAfter?: number): void;
|
|
1414
1953
|
/**
|
|
1415
|
-
* Shows an error notification
|
|
1954
|
+
* Shows an error notification. It persists until user interaction or navigation, or hides
|
|
1955
|
+
* after `hideAfter` ms (default: `errorHideAfter` of the options; `0` = sticky).
|
|
1416
1956
|
*/
|
|
1417
1957
|
showError(title: string, details?: string, hideAfter?: number): void;
|
|
1418
1958
|
/**
|
|
1419
|
-
* Shows a warning notification
|
|
1959
|
+
* Shows a warning notification. It persists until user interaction or navigation, or hides
|
|
1960
|
+
* after `hideAfter` ms (default: `warningHideAfter` of the options; `0` = sticky).
|
|
1420
1961
|
*/
|
|
1421
1962
|
showWarning(title: string, details?: string, hideAfter?: number): void;
|
|
1422
1963
|
/**
|
|
1423
1964
|
* Shows an info notification (auto-closes after 3 seconds)
|
|
1424
1965
|
*/
|
|
1425
1966
|
showInfo(title: string, hideAfter?: number): void;
|
|
1426
|
-
|
|
1427
|
-
|
|
1967
|
+
/** The visible toasts as `[style, text]`, oldest first — for tests and diagnostics. */
|
|
1968
|
+
visibleToasts(): [ToastStyle, string][];
|
|
1969
|
+
private present;
|
|
1970
|
+
/** (Re)starts the auto-hide timer of a toast; a toast with `hideAfter` 0 stays, a hovered or focused one waits. */
|
|
1971
|
+
private schedule;
|
|
1972
|
+
/** Pauses the auto-hide while the pointer is over the toast or focus is inside it; restarts it afterwards. */
|
|
1973
|
+
private watchPointerAndFocus;
|
|
1974
|
+
/** Beyond `maxVisible`, hides the oldest toast of the lowest severity (success/info before warning before error). */
|
|
1975
|
+
private enforceLimit;
|
|
1976
|
+
private hideToast;
|
|
1977
|
+
private forget;
|
|
1978
|
+
private addDetailsButton;
|
|
1979
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NotificationDisplayService, never>;
|
|
1980
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<NotificationDisplayService>;
|
|
1428
1981
|
}
|
|
1429
1982
|
|
|
1430
1983
|
/**
|
|
@@ -1445,8 +1998,8 @@ declare class MessageListenerService implements OnDestroy {
|
|
|
1445
1998
|
*/
|
|
1446
1999
|
stop(): void;
|
|
1447
2000
|
ngOnDestroy(): void;
|
|
1448
|
-
static ɵfac:
|
|
1449
|
-
static ɵprov:
|
|
2001
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MessageListenerService, never>;
|
|
2002
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<MessageListenerService>;
|
|
1450
2003
|
}
|
|
1451
2004
|
|
|
1452
2005
|
/**
|
|
@@ -1502,8 +2055,8 @@ declare class ListStateService {
|
|
|
1502
2055
|
private reviveFilterDates;
|
|
1503
2056
|
private loadAll;
|
|
1504
2057
|
private saveAll;
|
|
1505
|
-
static ɵfac:
|
|
1506
|
-
static ɵprov:
|
|
2058
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ListStateService, never>;
|
|
2059
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ListStateService>;
|
|
1507
2060
|
}
|
|
1508
2061
|
|
|
1509
2062
|
interface MessageDetailsDialogMessages {
|
|
@@ -1537,8 +2090,8 @@ declare class MessageDetailsDialogComponent implements OnInit {
|
|
|
1537
2090
|
onClose(): void;
|
|
1538
2091
|
copyToClipboard(): Promise<void>;
|
|
1539
2092
|
private fallbackCopyToClipboard;
|
|
1540
|
-
static ɵfac:
|
|
1541
|
-
static ɵcmp:
|
|
2093
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MessageDetailsDialogComponent, never>;
|
|
2094
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MessageDetailsDialogComponent, "mm-message-details-dialog", never, {}, {}, never, never, true, never>;
|
|
1542
2095
|
}
|
|
1543
2096
|
|
|
1544
2097
|
declare class MessageDetailsDialogService {
|
|
@@ -1546,8 +2099,8 @@ declare class MessageDetailsDialogService {
|
|
|
1546
2099
|
private readonly windowStateService;
|
|
1547
2100
|
defaultMessages: Partial<MessageDetailsDialogMessages> | undefined;
|
|
1548
2101
|
showDetailsDialog(data: MessageDetailsDialogData): WindowRef;
|
|
1549
|
-
static ɵfac:
|
|
1550
|
-
static ɵprov:
|
|
2102
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MessageDetailsDialogService, never>;
|
|
2103
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<MessageDetailsDialogService>;
|
|
1551
2104
|
}
|
|
1552
2105
|
|
|
1553
2106
|
/**
|
|
@@ -1728,8 +2281,8 @@ declare class EntitySelectInputComponent implements OnInit, OnDestroy, ControlVa
|
|
|
1728
2281
|
private setupSearch;
|
|
1729
2282
|
private selectEntity;
|
|
1730
2283
|
openAdvancedSearch(event?: Event): Promise<void>;
|
|
1731
|
-
static ɵfac:
|
|
1732
|
-
static ɵcmp:
|
|
2284
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntitySelectInputComponent, never>;
|
|
2285
|
+
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
2286
|
}
|
|
1734
2287
|
|
|
1735
2288
|
declare class EntitySelectDialogComponent<T> implements OnInit, OnDestroy {
|
|
@@ -1765,8 +2318,8 @@ declare class EntitySelectDialogComponent<T> implements OnInit, OnDestroy {
|
|
|
1765
2318
|
onSelectionChange(event: SelectionEvent): void;
|
|
1766
2319
|
onConfirm(): void;
|
|
1767
2320
|
onCancel(): void;
|
|
1768
|
-
static ɵfac:
|
|
1769
|
-
static ɵcmp:
|
|
2321
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntitySelectDialogComponent<any>, never>;
|
|
2322
|
+
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
2323
|
}
|
|
1771
2324
|
|
|
1772
2325
|
declare class EntitySelectDialogService {
|
|
@@ -1779,8 +2332,47 @@ declare class EntitySelectDialogService {
|
|
|
1779
2332
|
* @returns Promise resolving to selected entities or null if cancelled
|
|
1780
2333
|
*/
|
|
1781
2334
|
open<T>(dataSource: EntitySelectDialogDataSource<T>, options: EntitySelectDialogOptions<T>): Promise<EntitySelectDialogResult<T> | null>;
|
|
1782
|
-
static ɵfac:
|
|
1783
|
-
static ɵprov:
|
|
2335
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntitySelectDialogService, never>;
|
|
2336
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<EntitySelectDialogService>;
|
|
2337
|
+
}
|
|
2338
|
+
|
|
2339
|
+
/** Selector of the element that gets the initial focus (never the destructive button). */
|
|
2340
|
+
declare function DANGER_CONFIRM_SAFE_FOCUS(requireTypingName: boolean): string;
|
|
2341
|
+
/** Result of the danger confirmation dialog: `true` only for the confirming button. */
|
|
2342
|
+
declare class DangerConfirmationResult {
|
|
2343
|
+
readonly confirmed: boolean;
|
|
2344
|
+
constructor(confirmed: boolean);
|
|
2345
|
+
}
|
|
2346
|
+
/**
|
|
2347
|
+
* Content of {@link ConfirmationService.showDangerConfirm} (AB#5578): environment notice,
|
|
2348
|
+
* target, consequence, optional type-to-confirm input; Cancel left, danger confirm right.
|
|
2349
|
+
*/
|
|
2350
|
+
declare class DangerConfirmationWindowComponent extends DialogContentBase {
|
|
2351
|
+
private readonly ref;
|
|
2352
|
+
/** Set by the service right after opening. */
|
|
2353
|
+
readonly options: _angular_core.WritableSignal<DangerConfirmationOptions>;
|
|
2354
|
+
protected readonly typed: _angular_core.WritableSignal<string>;
|
|
2355
|
+
protected readonly inputId: string;
|
|
2356
|
+
protected readonly messages: _angular_core.Signal<DangerConfirmationMessages>;
|
|
2357
|
+
/** What has to be typed: the target name, or a non-empty fallback when it is empty. */
|
|
2358
|
+
protected readonly typingToken: _angular_core.Signal<string>;
|
|
2359
|
+
protected readonly typeLabel: _angular_core.Signal<string>;
|
|
2360
|
+
protected readonly environmentNotice: _angular_core.Signal<string>;
|
|
2361
|
+
protected readonly canConfirm: _angular_core.Signal<boolean>;
|
|
2362
|
+
constructor();
|
|
2363
|
+
private readonly host;
|
|
2364
|
+
/**
|
|
2365
|
+
* Initial focus never on the destructive button (Enter must not delete): the type-to-confirm
|
|
2366
|
+
* input when required, else Cancel. The service also passes `autoFocusedElement`; this is the
|
|
2367
|
+
* fallback for hosts that render the content themselves.
|
|
2368
|
+
*/
|
|
2369
|
+
ngAfterViewInit(): void;
|
|
2370
|
+
/** Focuses the type-to-confirm input or Cancel (unless focus already sits on one of them). */
|
|
2371
|
+
focusSafeElement(): void;
|
|
2372
|
+
protected cancel(): void;
|
|
2373
|
+
protected confirm(): void;
|
|
2374
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DangerConfirmationWindowComponent, never>;
|
|
2375
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DangerConfirmationWindowComponent, "mm-danger-confirmation-window", never, {}, {}, never, never, true, never>;
|
|
1784
2376
|
}
|
|
1785
2377
|
|
|
1786
2378
|
/**
|
|
@@ -1813,8 +2405,8 @@ declare class EntitySelectDialogService {
|
|
|
1813
2405
|
declare class UnsavedChangesGuard implements CanDeactivate<HasUnsavedChanges> {
|
|
1814
2406
|
private readonly confirmationService;
|
|
1815
2407
|
canDeactivate(component: HasUnsavedChanges): Promise<boolean>;
|
|
1816
|
-
static ɵfac:
|
|
1817
|
-
static ɵprov:
|
|
2408
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UnsavedChangesGuard, never>;
|
|
2409
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<UnsavedChangesGuard>;
|
|
1818
2410
|
}
|
|
1819
2411
|
|
|
1820
2412
|
interface SaveAsDialogMessages {
|
|
@@ -1923,8 +2515,8 @@ declare class SaveAsDialogComponent extends DialogContentBase implements OnInit,
|
|
|
1923
2515
|
canSave(): boolean;
|
|
1924
2516
|
onSave(): void;
|
|
1925
2517
|
onCancel(): void;
|
|
1926
|
-
static ɵfac:
|
|
1927
|
-
static ɵcmp:
|
|
2518
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SaveAsDialogComponent, never>;
|
|
2519
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SaveAsDialogComponent, "mm-save-as-dialog", never, {}, {}, never, never, true, never>;
|
|
1928
2520
|
}
|
|
1929
2521
|
|
|
1930
2522
|
declare class SaveAsDialogService {
|
|
@@ -1935,8 +2527,8 @@ declare class SaveAsDialogService {
|
|
|
1935
2527
|
* @returns Promise that resolves with the result containing confirmed status and entered name
|
|
1936
2528
|
*/
|
|
1937
2529
|
showSaveAsDialog(options: SaveAsDialogOptions): Promise<SaveAsDialogResult>;
|
|
1938
|
-
static ɵfac:
|
|
1939
|
-
static ɵprov:
|
|
2530
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SaveAsDialogService, never>;
|
|
2531
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<SaveAsDialogService>;
|
|
1940
2532
|
}
|
|
1941
2533
|
|
|
1942
2534
|
/**
|
|
@@ -2200,18 +2792,18 @@ declare class TimeRangePickerComponent implements OnInit, OnChanges {
|
|
|
2200
2792
|
* Emits the current selection state
|
|
2201
2793
|
*/
|
|
2202
2794
|
selectionChange: EventEmitter<TimeRangeSelection>;
|
|
2203
|
-
protected selectedType:
|
|
2204
|
-
protected selectedYear:
|
|
2205
|
-
protected selectedQuarter:
|
|
2206
|
-
protected selectedMonth:
|
|
2207
|
-
protected selectedDay:
|
|
2208
|
-
protected relativeValue:
|
|
2209
|
-
protected relativeUnit:
|
|
2210
|
-
protected hourFrom:
|
|
2211
|
-
protected hourTo:
|
|
2212
|
-
protected customFrom:
|
|
2213
|
-
protected customTo:
|
|
2214
|
-
protected mergedLabels:
|
|
2795
|
+
protected selectedType: _angular_core.WritableSignal<TimeRangeType>;
|
|
2796
|
+
protected selectedYear: _angular_core.WritableSignal<number>;
|
|
2797
|
+
protected selectedQuarter: _angular_core.WritableSignal<Quarter>;
|
|
2798
|
+
protected selectedMonth: _angular_core.WritableSignal<number>;
|
|
2799
|
+
protected selectedDay: _angular_core.WritableSignal<number>;
|
|
2800
|
+
protected relativeValue: _angular_core.WritableSignal<number>;
|
|
2801
|
+
protected relativeUnit: _angular_core.WritableSignal<RelativeTimeUnit>;
|
|
2802
|
+
protected hourFrom: _angular_core.WritableSignal<number | null>;
|
|
2803
|
+
protected hourTo: _angular_core.WritableSignal<number | null>;
|
|
2804
|
+
protected customFrom: _angular_core.WritableSignal<Date>;
|
|
2805
|
+
protected customTo: _angular_core.WritableSignal<Date>;
|
|
2806
|
+
protected mergedLabels: _angular_core.Signal<{
|
|
2215
2807
|
rangeType?: string;
|
|
2216
2808
|
year?: string;
|
|
2217
2809
|
quarter?: string;
|
|
@@ -2238,18 +2830,18 @@ declare class TimeRangePickerComponent implements OnInit, OnChanges {
|
|
|
2238
2830
|
quarter3?: string;
|
|
2239
2831
|
quarter4?: string;
|
|
2240
2832
|
}>;
|
|
2241
|
-
protected typeOptions:
|
|
2242
|
-
protected yearOptions:
|
|
2243
|
-
protected quarterOptions:
|
|
2244
|
-
protected monthOptions:
|
|
2245
|
-
protected dayOptions:
|
|
2246
|
-
protected hourFromOptions:
|
|
2247
|
-
protected hourToOptions:
|
|
2248
|
-
protected relativeUnitOptions:
|
|
2249
|
-
protected currentRange:
|
|
2250
|
-
protected minDate:
|
|
2251
|
-
protected maxDate:
|
|
2252
|
-
protected showTime:
|
|
2833
|
+
protected typeOptions: _angular_core.Signal<TimeRangeOption<TimeRangeType>[]>;
|
|
2834
|
+
protected yearOptions: _angular_core.Signal<TimeRangeOption<number>[]>;
|
|
2835
|
+
protected quarterOptions: _angular_core.Signal<TimeRangeOption<Quarter>[]>;
|
|
2836
|
+
protected monthOptions: _angular_core.Signal<TimeRangeOption<number>[]>;
|
|
2837
|
+
protected dayOptions: _angular_core.Signal<TimeRangeOption<number>[]>;
|
|
2838
|
+
protected hourFromOptions: _angular_core.Signal<TimeRangeOption<number>[]>;
|
|
2839
|
+
protected hourToOptions: _angular_core.Signal<TimeRangeOption<number>[]>;
|
|
2840
|
+
protected relativeUnitOptions: _angular_core.Signal<TimeRangeOption<RelativeTimeUnit>[]>;
|
|
2841
|
+
protected currentRange: _angular_core.Signal<TimeRange | null>;
|
|
2842
|
+
protected minDate: _angular_core.Signal<Date>;
|
|
2843
|
+
protected maxDate: _angular_core.Signal<Date>;
|
|
2844
|
+
protected showTime: _angular_core.Signal<boolean>;
|
|
2253
2845
|
ngOnInit(): void;
|
|
2254
2846
|
ngOnChanges(changes: SimpleChanges): void;
|
|
2255
2847
|
private initializeDefaults;
|
|
@@ -2268,8 +2860,8 @@ declare class TimeRangePickerComponent implements OnInit, OnChanges {
|
|
|
2268
2860
|
protected onCustomToChange(date: Date): void;
|
|
2269
2861
|
private emitChange;
|
|
2270
2862
|
protected isType(type: TimeRangeType): boolean;
|
|
2271
|
-
static ɵfac:
|
|
2272
|
-
static ɵcmp:
|
|
2863
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TimeRangePickerComponent, never>;
|
|
2864
|
+
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
2865
|
}
|
|
2274
2866
|
|
|
2275
2867
|
/**
|
|
@@ -2373,33 +2965,33 @@ declare class CronBuilderComponent implements OnInit, ControlValueAccessor {
|
|
|
2373
2965
|
protected readonly xIcon: _progress_kendo_svg_icons.SVGIcon;
|
|
2374
2966
|
private onChange;
|
|
2375
2967
|
private onTouched;
|
|
2376
|
-
protected disabled:
|
|
2377
|
-
protected readonly expression:
|
|
2378
|
-
protected readonly selectedTabIndex:
|
|
2379
|
-
protected readonly copiedRecently:
|
|
2968
|
+
protected disabled: _angular_core.WritableSignal<boolean>;
|
|
2969
|
+
protected readonly expression: _angular_core.WritableSignal<string>;
|
|
2970
|
+
protected readonly selectedTabIndex: _angular_core.WritableSignal<number>;
|
|
2971
|
+
protected readonly copiedRecently: _angular_core.WritableSignal<boolean>;
|
|
2380
2972
|
private suppressOnChange;
|
|
2381
|
-
protected readonly scheduleType:
|
|
2382
|
-
protected readonly secondInterval:
|
|
2383
|
-
protected readonly minuteInterval:
|
|
2384
|
-
protected readonly hourInterval:
|
|
2385
|
-
protected readonly hourMinute:
|
|
2386
|
-
protected readonly hourSecond:
|
|
2387
|
-
protected readonly timeHour:
|
|
2388
|
-
protected readonly timeMinute:
|
|
2389
|
-
protected readonly timeSecond:
|
|
2390
|
-
protected readonly dailyMode:
|
|
2391
|
-
protected readonly selectedDays:
|
|
2392
|
-
protected readonly monthlyMode:
|
|
2393
|
-
protected readonly dayOfMonth:
|
|
2394
|
-
protected readonly relativeWeek:
|
|
2395
|
-
protected readonly relativeDay:
|
|
2396
|
-
protected readonly customSecond:
|
|
2397
|
-
protected readonly customMinute:
|
|
2398
|
-
protected readonly customHour:
|
|
2399
|
-
protected readonly customDayOfMonth:
|
|
2400
|
-
protected readonly customMonth:
|
|
2401
|
-
protected readonly customDayOfWeek:
|
|
2402
|
-
protected readonly mergedConfig:
|
|
2973
|
+
protected readonly scheduleType: _angular_core.WritableSignal<ScheduleType>;
|
|
2974
|
+
protected readonly secondInterval: _angular_core.WritableSignal<number>;
|
|
2975
|
+
protected readonly minuteInterval: _angular_core.WritableSignal<number>;
|
|
2976
|
+
protected readonly hourInterval: _angular_core.WritableSignal<number>;
|
|
2977
|
+
protected readonly hourMinute: _angular_core.WritableSignal<number>;
|
|
2978
|
+
protected readonly hourSecond: _angular_core.WritableSignal<number>;
|
|
2979
|
+
protected readonly timeHour: _angular_core.WritableSignal<number>;
|
|
2980
|
+
protected readonly timeMinute: _angular_core.WritableSignal<number>;
|
|
2981
|
+
protected readonly timeSecond: _angular_core.WritableSignal<number>;
|
|
2982
|
+
protected readonly dailyMode: _angular_core.WritableSignal<"every" | "weekdays" | "weekends" | "specific">;
|
|
2983
|
+
protected readonly selectedDays: _angular_core.WritableSignal<Weekday[]>;
|
|
2984
|
+
protected readonly monthlyMode: _angular_core.WritableSignal<"relative" | "specific">;
|
|
2985
|
+
protected readonly dayOfMonth: _angular_core.WritableSignal<number>;
|
|
2986
|
+
protected readonly relativeWeek: _angular_core.WritableSignal<string>;
|
|
2987
|
+
protected readonly relativeDay: _angular_core.WritableSignal<Weekday>;
|
|
2988
|
+
protected readonly customSecond: _angular_core.WritableSignal<string>;
|
|
2989
|
+
protected readonly customMinute: _angular_core.WritableSignal<string>;
|
|
2990
|
+
protected readonly customHour: _angular_core.WritableSignal<string>;
|
|
2991
|
+
protected readonly customDayOfMonth: _angular_core.WritableSignal<string>;
|
|
2992
|
+
protected readonly customMonth: _angular_core.WritableSignal<string>;
|
|
2993
|
+
protected readonly customDayOfWeek: _angular_core.WritableSignal<string>;
|
|
2994
|
+
protected readonly mergedConfig: _angular_core.Signal<{
|
|
2403
2995
|
showPresets?: boolean;
|
|
2404
2996
|
showHumanReadable?: boolean;
|
|
2405
2997
|
showNextExecutions?: boolean;
|
|
@@ -2409,11 +3001,11 @@ declare class CronBuilderComponent implements OnInit, ControlValueAccessor {
|
|
|
2409
3001
|
defaultScheduleType?: ScheduleType;
|
|
2410
3002
|
locale?: string;
|
|
2411
3003
|
}>;
|
|
2412
|
-
protected readonly humanReadable:
|
|
2413
|
-
protected readonly validationResult:
|
|
2414
|
-
protected readonly nextExecutions:
|
|
2415
|
-
protected readonly presets:
|
|
2416
|
-
protected readonly presetsByCategory:
|
|
3004
|
+
protected readonly humanReadable: _angular_core.Signal<string>;
|
|
3005
|
+
protected readonly validationResult: _angular_core.Signal<_meshmakers_shared_ui.CronValidationResult>;
|
|
3006
|
+
protected readonly nextExecutions: _angular_core.Signal<Date[]>;
|
|
3007
|
+
protected readonly presets: _angular_core.Signal<CronPreset[]>;
|
|
3008
|
+
protected readonly presetsByCategory: _angular_core.Signal<{
|
|
2417
3009
|
frequent: CronPreset[];
|
|
2418
3010
|
hourly: CronPreset[];
|
|
2419
3011
|
daily: CronPreset[];
|
|
@@ -2460,8 +3052,8 @@ declare class CronBuilderComponent implements OnInit, ControlValueAccessor {
|
|
|
2460
3052
|
private parseExpressionToState;
|
|
2461
3053
|
protected trackByValue(_index: number, item: DropdownOption): number | string;
|
|
2462
3054
|
protected trackByPresetId(_index: number, item: CronPreset): string;
|
|
2463
|
-
static ɵfac:
|
|
2464
|
-
static ɵcmp:
|
|
3055
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CronBuilderComponent, never>;
|
|
3056
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CronBuilderComponent, "mm-cron-builder", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, true, never>;
|
|
2465
3057
|
}
|
|
2466
3058
|
|
|
2467
3059
|
/**
|
|
@@ -2499,8 +3091,8 @@ declare class CronParserService {
|
|
|
2499
3091
|
private generateMonthlyExpression;
|
|
2500
3092
|
private generateCustomExpression;
|
|
2501
3093
|
private getWeekNumber;
|
|
2502
|
-
static ɵfac:
|
|
2503
|
-
static ɵprov:
|
|
3094
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CronParserService, never>;
|
|
3095
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<CronParserService>;
|
|
2504
3096
|
}
|
|
2505
3097
|
|
|
2506
3098
|
/**
|
|
@@ -2535,8 +3127,8 @@ declare class CronHumanizerService {
|
|
|
2535
3127
|
name: string;
|
|
2536
3128
|
}[];
|
|
2537
3129
|
private normalizeLocale;
|
|
2538
|
-
static ɵfac:
|
|
2539
|
-
static ɵprov:
|
|
3130
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CronHumanizerService, never>;
|
|
3131
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<CronHumanizerService>;
|
|
2540
3132
|
}
|
|
2541
3133
|
|
|
2542
3134
|
/**
|
|
@@ -2568,8 +3160,8 @@ declare class CopyableTextComponent {
|
|
|
2568
3160
|
protected get hasValue(): boolean;
|
|
2569
3161
|
/** Copies the value to clipboard and shows a notification. */
|
|
2570
3162
|
protected copyToClipboard(): void;
|
|
2571
|
-
static ɵfac:
|
|
2572
|
-
static ɵcmp:
|
|
3163
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CopyableTextComponent, never>;
|
|
3164
|
+
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
3165
|
}
|
|
2574
3166
|
|
|
2575
3167
|
declare class ImportStrategyDialogResult {
|
|
@@ -2584,15 +3176,15 @@ declare class ImportStrategyDialogComponent extends DialogContentBase {
|
|
|
2584
3176
|
constructor();
|
|
2585
3177
|
onImport(): void;
|
|
2586
3178
|
onCancel(): void;
|
|
2587
|
-
static ɵfac:
|
|
2588
|
-
static ɵcmp:
|
|
3179
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ImportStrategyDialogComponent, never>;
|
|
3180
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ImportStrategyDialogComponent, "mm-import-strategy-dialog", never, { "message": { "alias": "message"; "required": false; }; }, {}, never, never, true, never>;
|
|
2589
3181
|
}
|
|
2590
3182
|
|
|
2591
3183
|
declare class ImportStrategyDialogService {
|
|
2592
3184
|
private readonly dialogService;
|
|
2593
3185
|
showImportStrategyDialog(title?: string, message?: string): Promise<ImportStrategyDto | null>;
|
|
2594
|
-
static ɵfac:
|
|
2595
|
-
static ɵprov:
|
|
3186
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ImportStrategyDialogService, never>;
|
|
3187
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ImportStrategyDialogService>;
|
|
2596
3188
|
}
|
|
2597
3189
|
|
|
2598
3190
|
interface WindowDimensions {
|
|
@@ -2642,11 +3234,269 @@ declare class WindowStateService {
|
|
|
2642
3234
|
private getOrCreateBackdropElement;
|
|
2643
3235
|
private loadStates;
|
|
2644
3236
|
private saveStates;
|
|
2645
|
-
static ɵfac:
|
|
2646
|
-
static ɵprov:
|
|
3237
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WindowStateService, never>;
|
|
3238
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<WindowStateService>;
|
|
3239
|
+
}
|
|
3240
|
+
|
|
3241
|
+
/** Where the button sits; drives size, icon size (16 px rows, 20 px toolbars) and emphasis. */
|
|
3242
|
+
type MmActionContext = 'row' | 'toolbar' | 'page';
|
|
3243
|
+
/** What the button shows. Icon-only buttons always get a tooltip and an accessible name. */
|
|
3244
|
+
type MmActionDisplay = 'icon' | 'text' | 'icon-text';
|
|
3245
|
+
/**
|
|
3246
|
+
* One action as a button (AB#5570), rendered from a shared {@link MmAction} definition.
|
|
3247
|
+
*
|
|
3248
|
+
* - `display="icon"`: icon-only, native tooltip = label (+ disabled reason), `aria-label`
|
|
3249
|
+
* = label + `targetLabel` ("Delete dump Encrypt run 2026-10-06 17:09").
|
|
3250
|
+
* - `display="text"` / `"icon-text"`: visible label; `targetLabel` still extends the
|
|
3251
|
+
* accessible name when the same label repeats (one per row).
|
|
3252
|
+
* - Disabled (`disabledReason`): stays focusable, `aria-disabled="true"`, the reason is
|
|
3253
|
+
* linked via `aria-describedby` and shown in the tooltip; clicks are swallowed.
|
|
3254
|
+
* - `danger`: Kendo `themeColor="error"`. The consumer confirms before acting.
|
|
3255
|
+
* - `primary` (page/toolbar context only): solid primary button for the one main action.
|
|
3256
|
+
* - `link`: rendered as a real router link (`<a kendoButton [routerLink]>`, so open-in-new-tab
|
|
3257
|
+
* works); a disabled link action renders as a disabled button.
|
|
3258
|
+
*
|
|
3259
|
+
* ```html
|
|
3260
|
+
* <mm-action-button [action]="refresh" context="toolbar" (triggered)="reload()" />
|
|
3261
|
+
* <mm-action-button [action]="newAdapter" context="page" display="icon-text" primary (triggered)="create()" />
|
|
3262
|
+
* ```
|
|
3263
|
+
*/
|
|
3264
|
+
declare class ActionButtonComponent<TId extends string = string> {
|
|
3265
|
+
/** The action definition. */
|
|
3266
|
+
readonly action: _angular_core.InputSignal<MmAction<TId>>;
|
|
3267
|
+
/** Name of the target (row) for the accessible name; required for repeated row actions. */
|
|
3268
|
+
readonly targetLabel: _angular_core.InputSignal<string | null | undefined>;
|
|
3269
|
+
readonly context: _angular_core.InputSignal<MmActionContext>;
|
|
3270
|
+
readonly display: _angular_core.InputSignal<MmActionDisplay>;
|
|
3271
|
+
/** Solid primary emphasis — at most one per page header / toolbar. */
|
|
3272
|
+
readonly primary: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
3273
|
+
/** Fires for enabled actions only. */
|
|
3274
|
+
readonly triggered: _angular_core.OutputEmitterRef<MmActionEvent<TId>>;
|
|
3275
|
+
protected readonly reasonId: string;
|
|
3276
|
+
protected readonly disabled: _angular_core.Signal<boolean>;
|
|
3277
|
+
/** Icon-only needs an icon; without one the button falls back to its text. */
|
|
3278
|
+
protected readonly iconOnly: _angular_core.Signal<boolean>;
|
|
3279
|
+
/** Visible text: `menuLabel` ("Delete dump…") when set, else the label. */
|
|
3280
|
+
protected readonly visibleLabel: _angular_core.Signal<string>;
|
|
3281
|
+
protected readonly showIcon: _angular_core.Signal<boolean>;
|
|
3282
|
+
protected readonly tooltip: _angular_core.Signal<string | null>;
|
|
3283
|
+
protected readonly ariaLabel: _angular_core.Signal<string | null>;
|
|
3284
|
+
/** Kendo button classes for the link variant (same look as `button[kendoButton]`). */
|
|
3285
|
+
protected readonly linkClasses: _angular_core.Signal<string>;
|
|
3286
|
+
protected onClick(event: Event): void;
|
|
3287
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ActionButtonComponent<any>, never>;
|
|
3288
|
+
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>;
|
|
3289
|
+
}
|
|
3290
|
+
|
|
3291
|
+
/**
|
|
3292
|
+
* Texts of `mm-row-actions` (G16). `{name}` is replaced by the row label; the `…For` members are
|
|
3293
|
+
* used when the row has a label, the plain ones when it is empty.
|
|
3294
|
+
*/
|
|
3295
|
+
interface RowActionsMessages {
|
|
3296
|
+
/** Accessible name of the action group: "Actions for {name}". */
|
|
3297
|
+
actionsFor: string;
|
|
3298
|
+
/** Group name without a row label. */
|
|
3299
|
+
actions: string;
|
|
3300
|
+
/** Accessible name and tooltip of the overflow button: "More actions for {name}". */
|
|
3301
|
+
moreActionsFor: string;
|
|
3302
|
+
/** Overflow button without a row label. */
|
|
3303
|
+
moreActions: string;
|
|
3304
|
+
}
|
|
3305
|
+
declare const DEFAULT_ROW_ACTIONS_MESSAGES: RowActionsMessages;
|
|
3306
|
+
/** App-wide translations of `mm-row-actions`. Partial: members left out keep their English default. */
|
|
3307
|
+
declare const MM_ROW_ACTIONS_MESSAGES: InjectionToken<Partial<RowActionsMessages>>;
|
|
3308
|
+
/**
|
|
3309
|
+
* Merges overrides over {@link DEFAULT_ROW_ACTIONS_MESSAGES}, later sources winning; members that
|
|
3310
|
+
* are missing, `undefined` or `null` keep the earlier value.
|
|
3311
|
+
*/
|
|
3312
|
+
declare function resolveRowActionsMessages(...overrides: (Partial<RowActionsMessages> | null | undefined)[]): RowActionsMessages;
|
|
3313
|
+
|
|
3314
|
+
/** Overflow menu item handed to the Kendo DropDownButton. */
|
|
3315
|
+
interface RowActionMenuItem<TId extends string> {
|
|
3316
|
+
text: string;
|
|
3317
|
+
svgIcon?: MmAction<TId>['icon'];
|
|
3318
|
+
disabled: boolean;
|
|
3319
|
+
action: MmAction<TId>;
|
|
3320
|
+
}
|
|
3321
|
+
/**
|
|
3322
|
+
* The actions of one table row (AB#5570): icon buttons (16 px) with tooltip and an accessible
|
|
3323
|
+
* name that includes the row ("Edit Mesh Adapter"), from one shared action definition.
|
|
3324
|
+
* At most `maxInline` slots (default 3): when the actions do not fit, the last slot becomes a
|
|
3325
|
+
* "More actions for …" menu. Disabled actions stay focusable and announce their reason;
|
|
3326
|
+
* in the menu the reason is shown under the item text.
|
|
3327
|
+
*
|
|
3328
|
+
* Texts ("Actions for …", "More actions for …") come from {@link MM_ROW_ACTIONS_MESSAGES} and the
|
|
3329
|
+
* `messages` input (the input wins), English by default.
|
|
3330
|
+
*
|
|
3331
|
+
* The component only emits — destructive handlers confirm first (danger dialog naming the target).
|
|
3332
|
+
*
|
|
3333
|
+
* ```html
|
|
3334
|
+
* <td class="actions">
|
|
3335
|
+
* <mm-row-actions [actions]="rowActions(run)" [rowLabel]="runLabel(run)" (triggered)="onAction($event, run)" />
|
|
3336
|
+
* </td>
|
|
3337
|
+
* ```
|
|
3338
|
+
*/
|
|
3339
|
+
declare class RowActionsComponent<TId extends string = string> {
|
|
3340
|
+
/** Action definitions for this row (hidden ones are filtered out). */
|
|
3341
|
+
readonly actions: _angular_core.InputSignal<readonly MmAction<TId>[]>;
|
|
3342
|
+
/** Human name of the row ("Mesh Adapter", "Encrypt run 2026-10-06 17:09"); part of every accessible name. */
|
|
3343
|
+
readonly rowLabel: _angular_core.InputSignal<string>;
|
|
3344
|
+
/** Slots incl. the overflow button. */
|
|
3345
|
+
readonly maxInline: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
3346
|
+
/** Translations for this instance; members left out come from `MM_ROW_ACTIONS_MESSAGES`, else English. */
|
|
3347
|
+
readonly messages: _angular_core.InputSignal<Partial<RowActionsMessages> | null>;
|
|
3348
|
+
/** Fires for enabled actions only, inline or from the menu. */
|
|
3349
|
+
readonly triggered: _angular_core.OutputEmitterRef<MmActionEvent<TId>>;
|
|
3350
|
+
private readonly router;
|
|
3351
|
+
/** Menu links resolve like the inline `routerLink`: relative to the hosting route. */
|
|
3352
|
+
private readonly route;
|
|
3353
|
+
private readonly injectedMessages;
|
|
3354
|
+
protected readonly moreIcon: _progress_kendo_svg_icons.SVGIcon;
|
|
3355
|
+
private readonly m;
|
|
3356
|
+
protected readonly split: _angular_core.Signal<{
|
|
3357
|
+
inline: MmAction<TId>[];
|
|
3358
|
+
menu: MmAction<TId>[];
|
|
3359
|
+
}>;
|
|
3360
|
+
protected readonly menuItems: _angular_core.Signal<RowActionMenuItem<TId>[]>;
|
|
3361
|
+
/** No group semantics for an empty cell (all actions hidden). */
|
|
3362
|
+
protected readonly hasActions: _angular_core.Signal<boolean>;
|
|
3363
|
+
protected readonly moreLabel: _angular_core.Signal<string>;
|
|
3364
|
+
protected readonly groupLabel: _angular_core.Signal<string>;
|
|
3365
|
+
private format;
|
|
3366
|
+
protected onMenuItem(item: RowActionMenuItem<TId>): void;
|
|
3367
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RowActionsComponent<any>, never>;
|
|
3368
|
+
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; }; "messages": { "alias": "messages"; "required": false; "isSignal": true; }; }, { "triggered": "triggered"; }, never, never, true, never>;
|
|
3369
|
+
}
|
|
3370
|
+
|
|
3371
|
+
/** The OctoBot animations shipped with shared-ui (AB#3444). */
|
|
3372
|
+
type OctoBotAnimation = 'idle' | 'blink' | 'look' | 'swim' | 'thinking' | 'wave';
|
|
3373
|
+
/**
|
|
3374
|
+
* Image loading strategy (`loading` attribute): `lazy` (default) defers the request until the
|
|
3375
|
+
* figure nears the viewport; `eager` loads it right away — for places where the figure is visible
|
|
3376
|
+
* immediately (empty states, 404 / turned-off pages), so it does not pop in late.
|
|
3377
|
+
*/
|
|
3378
|
+
type OctoBotLoading = 'lazy' | 'eager';
|
|
3379
|
+
/** Rendered sizes: `sm` 60 px, `md` 120 px, `lg` 240 px (square). */
|
|
3380
|
+
type OctoBotSize = 'sm' | 'md' | 'lg';
|
|
3381
|
+
/** Pixel edge length of each {@link OctoBotSize}. */
|
|
3382
|
+
declare const OCTOBOT_SIZE_PX: Readonly<Record<OctoBotSize, number>>;
|
|
3383
|
+
/**
|
|
3384
|
+
* Length of one loop of each animation in ms (identical for all sizes; read from the WebP frame
|
|
3385
|
+
* durations). Used by `playOnce`.
|
|
3386
|
+
*/
|
|
3387
|
+
declare const OCTOBOT_LOOP_MS: Readonly<Record<OctoBotAnimation, number>>;
|
|
3388
|
+
/**
|
|
3389
|
+
* Base URL of the OctoBot images, with a trailing slash. Default `assets/octobot/` (relative to
|
|
3390
|
+
* the document base). The files ship as library assets in
|
|
3391
|
+
* `node_modules/@meshmakers/shared-ui/assets/octobot`; a host app copies them with an
|
|
3392
|
+
* `angular.json` assets entry:
|
|
3393
|
+
*
|
|
3394
|
+
* ```json
|
|
3395
|
+
* { "glob": "**\/*", "input": "node_modules/@meshmakers/shared-ui/assets/octobot", "output": "/assets/octobot" }
|
|
3396
|
+
* ```
|
|
3397
|
+
*
|
|
3398
|
+
* Provide a different value when the app serves them elsewhere (a CDN, a sub path).
|
|
3399
|
+
*/
|
|
3400
|
+
declare const OCTOBOT_ASSET_BASE_URL: InjectionToken<string>;
|
|
3401
|
+
/**
|
|
3402
|
+
* App-wide "show stills only" switch, e.g. bound to a user setting "Reduce animations". When
|
|
3403
|
+
* `true`, every `mm-octobot` shows its still frame regardless of `prefers-reduced-motion`.
|
|
3404
|
+
*/
|
|
3405
|
+
declare const OCTOBOT_FORCE_STILL: InjectionToken<boolean>;
|
|
3406
|
+
/**
|
|
3407
|
+
* `mm-octobot` — the meshmakers OctoBot mascot as a small animated pixel-art image (AB#3444).
|
|
3408
|
+
*
|
|
3409
|
+
* Renders one `<img>` with a fixed width and height (no layout shift), `loading="lazy"` (or
|
|
3410
|
+
* `eager` via the `loading` input),
|
|
3411
|
+
* `decoding="async"` and `image-rendering: pixelated`. The image is an 8-frame animated WebP
|
|
3412
|
+
* loaded by URL from {@link OCTOBOT_ASSET_BASE_URL} — nothing lands in the JS bundle.
|
|
3413
|
+
*
|
|
3414
|
+
* **Reduced motion:** while the user prefers reduced motion (`prefers-reduced-motion: reduce`,
|
|
3415
|
+
* followed live via `matchMedia`), when {@link OCTOBOT_FORCE_STILL} is `true` or when the `still`
|
|
3416
|
+
* input is set, the first frame is shown as a static PNG instead.
|
|
3417
|
+
*
|
|
3418
|
+
* **Accessibility:** without a `label` the figure is decorative (`alt=""`, `aria-hidden="true"`);
|
|
3419
|
+
* the surrounding text must carry the meaning (e.g. "Thinking…" next to `thinking`). With a
|
|
3420
|
+
* `label` the host gets `role="img"` and `aria-label`.
|
|
3421
|
+
*
|
|
3422
|
+
* **Placement rules (host responsibility, see `docs/actions.md` › OctoBot):** at most one
|
|
3423
|
+
* animated OctoBot per view — empty states (once per page), page loading, the assistant panel,
|
|
3424
|
+
* 404 / turned-off pages, onboarding. Never inside repeated elements (list rows, table cells,
|
|
3425
|
+
* cockpit tiles, buttons) and never in toasts or error messages (a still frame is acceptable
|
|
3426
|
+
* there if a figure is wanted at all).
|
|
3427
|
+
*
|
|
3428
|
+
* @example
|
|
3429
|
+
* ```html
|
|
3430
|
+
* <mm-octobot animation="idle" size="md" />
|
|
3431
|
+
* <mm-octobot animation="thinking" size="sm" label="The assistant is thinking" />
|
|
3432
|
+
* ```
|
|
3433
|
+
*/
|
|
3434
|
+
declare class OctoBotComponent {
|
|
3435
|
+
private readonly baseUrl;
|
|
3436
|
+
private readonly forceStill;
|
|
3437
|
+
/** Which animation to play. Default `idle`. */
|
|
3438
|
+
readonly animation: _angular_core.InputSignal<OctoBotAnimation>;
|
|
3439
|
+
/** Rendered size. Default `md` (120 px). */
|
|
3440
|
+
readonly size: _angular_core.InputSignal<OctoBotSize>;
|
|
3441
|
+
/** Accessible name; when empty the figure is decorative. */
|
|
3442
|
+
readonly label: _angular_core.InputSignal<string | null | undefined>;
|
|
3443
|
+
/** Image loading strategy; `eager` where the figure is visible right away. Default `lazy`. */
|
|
3444
|
+
readonly loading: _angular_core.InputSignal<OctoBotLoading>;
|
|
3445
|
+
/** Show the still frame instead of the animation (e.g. after the assistant finished). */
|
|
3446
|
+
readonly still: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
3447
|
+
/**
|
|
3448
|
+
* Plays the animation once ({@link OCTOBOT_LOOP_MS}) and then rests on the still frame — for
|
|
3449
|
+
* greetings (`wave`) that should not loop forever. The WebPs themselves loop endlessly.
|
|
3450
|
+
*/
|
|
3451
|
+
readonly playOnce: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
3452
|
+
private readonly prefersReducedMotion;
|
|
3453
|
+
private readonly played;
|
|
3454
|
+
protected readonly px: _angular_core.Signal<number>;
|
|
3455
|
+
protected readonly showStill: _angular_core.Signal<boolean>;
|
|
3456
|
+
protected readonly src: _angular_core.Signal<string>;
|
|
3457
|
+
constructor();
|
|
3458
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<OctoBotComponent, never>;
|
|
3459
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<OctoBotComponent, "mm-octobot", never, { "animation": { "alias": "animation"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "still": { "alias": "still"; "required": false; "isSignal": true; }; "playOnce": { "alias": "playOnce"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3460
|
+
}
|
|
3461
|
+
|
|
3462
|
+
/**
|
|
3463
|
+
* - `empty`: a list or page has no records yet → OctoBot `idle`.
|
|
3464
|
+
* - `no-results`: a search or filter matches nothing → OctoBot `look`.
|
|
3465
|
+
* - `error`: loading failed → no figure (errors stay sober), `role="alert"`, optional "Try again".
|
|
3466
|
+
*/
|
|
3467
|
+
type EmptyStateVariant = 'empty' | 'no-results' | 'error';
|
|
3468
|
+
/** Default English "Try again" label of {@link EmptyStateComponent}. */
|
|
3469
|
+
declare const DEFAULT_EMPTY_STATE_RETRY_LABEL = "Try again";
|
|
3470
|
+
/**
|
|
3471
|
+
* `mm-empty-state` — the shared empty / no-results / error block of a page or list (AB#3444).
|
|
3472
|
+
*
|
|
3473
|
+
* One per page or list, never per row. The `empty` and `no-results` variants show one OctoBot
|
|
3474
|
+
* (`idle` / `look`, decorative) above the title; the `error` variant shows no figure and announces
|
|
3475
|
+
* itself as an alert. Project extra actions (e.g. "New data flow") as content.
|
|
3476
|
+
*
|
|
3477
|
+
* @example
|
|
3478
|
+
* ```html
|
|
3479
|
+
* <mm-empty-state heading="No data flows yet" text="Create your first data flow to start processing data." />
|
|
3480
|
+
* <mm-empty-state variant="error" heading="The blueprints could not be loaded." showRetry (retry)="load()" />
|
|
3481
|
+
* ```
|
|
3482
|
+
*/
|
|
3483
|
+
declare class EmptyStateComponent {
|
|
3484
|
+
readonly variant: _angular_core.InputSignal<EmptyStateVariant>;
|
|
3485
|
+
readonly heading: _angular_core.InputSignal<string>;
|
|
3486
|
+
readonly text: _angular_core.InputSignal<string | null | undefined>;
|
|
3487
|
+
/** OctoBot size of the `empty` / `no-results` variants. Default `md`. */
|
|
3488
|
+
readonly size: _angular_core.InputSignal<OctoBotSize>;
|
|
3489
|
+
/** Shows the "Try again" button (error variant only). */
|
|
3490
|
+
readonly showRetry: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
3491
|
+
readonly retryLabel: _angular_core.InputSignal<string>;
|
|
3492
|
+
/** Emitted by the "Try again" button. */
|
|
3493
|
+
readonly retry: _angular_core.OutputEmitterRef<void>;
|
|
3494
|
+
protected readonly figure: _angular_core.Signal<OctoBotAnimation | null>;
|
|
3495
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EmptyStateComponent, never>;
|
|
3496
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EmptyStateComponent, "mm-empty-state", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": true; "isSignal": true; }; "text": { "alias": "text"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "showRetry": { "alias": "showRetry"; "required": false; "isSignal": true; }; "retryLabel": { "alias": "retryLabel"; "required": false; "isSignal": true; }; }, { "retry": "retry"; }, never, ["*"], true, never>;
|
|
2647
3497
|
}
|
|
2648
3498
|
|
|
2649
3499
|
declare function provideMmSharedUi(): EnvironmentProviders;
|
|
2650
3500
|
|
|
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 };
|
|
3501
|
+
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_EMPTY_STATE_RETRY_LABEL, 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_ROW_ACTIONS_MESSAGES, DEFAULT_SAVE_AS_DIALOG_MESSAGES, DEFAULT_TIME_RANGE_LABELS, DangerConfirmationResult, DangerConfirmationWindowComponent, DataSourceBase, DataSourceTyped, DialogType, EmptyStateComponent, 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, MM_ROW_ACTIONS_MESSAGES, MessageDetailsDialogComponent, MessageDetailsDialogService, MessageListenerService, MmListViewDataBindingDirective, NOTIFICATION_DISPLAY_OPTIONS, NotificationDisplayService, OCTOBOT_ASSET_BASE_URL, OCTOBOT_FORCE_STILL, OCTOBOT_LOOP_MS, OCTOBOT_SIZE_PX, OctoBotComponent, 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, resolveListRowLabel, resolveListViewMessages, resolveRowActionsMessages, sameAction, splitRowActions };
|
|
3502
|
+
export type { BadgeMapping, BadgeMappingTable, BaseFormConfig, BaseFormMessages, BooleanIconMapping, ColumnDefinition, ConfirmationButtonLabels, ConfirmationWindowData, ConfirmationWindowMessages, ContextMenuType, CronBuilderConfig, CronFields, CronPreset, CronSchedule, CronValidationResult, DangerConfirmEnvironment, DangerConfirmationMessages, DangerConfirmationOptions, DialogFetchOptions, DialogFetchResult, DropdownOption, EmptyStateVariant, EntitySelectDialogDataSource, EntitySelectDialogMessages, EntitySelectDialogOptions, EntitySelectDialogResult, EntitySelectInputMessages, FetchAgainOptions, FetchDataOptions, FetchResult, FileUploadData, HasUnsavedChanges, InputDialogMessages, ListViewCommand, ListViewMessages, MessageDetailsDialogData, MessageDetailsDialogMessages, MmAction, MmActionContext, MmActionDisplay, MmActionEvent, MmActionIconName, MmActionLink, MmListEmptyContext, MmListEmptyState, MmListRowAction, MmListRowActionEvent, NameAvailabilityResult, NodeDroppedEvent, NodeInfo, NotificationDisplayMessages, NotificationDisplayOptions, OctoBotAnimation, OctoBotLoading, OctoBotSize, PersistedListState, ProgressWindowConfig, ProgressWindowData, ProgressWindowMessages, ProgressWindowOptions, ProgressWindowResult, Quarter, RelativeTimeUnit, ResolvedListRowAction, ResponsiveFormBreakPoint, RowActionsMessages, RowActionsView, RowClassFn, SaveAsDialogDataSource, SaveAsDialogMessages, SaveAsDialogOptions, SaveAsDialogResult, ScheduleType, StatusFieldConfig, StatusIconMapping, StatusMapping, TableColumn, TimeRange, TimeRangeISO, TimeRangeOption, TimeRangePickerConfig, TimeRangePickerLabels, TimeRangeSelection, TimeRangeType, TimeRangeZone, UnsavedChangesMessages, Weekday, WindowDimensions };
|