@meshmakers/shared-ui 3.4.1490 → 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.
Files changed (47) hide show
  1. package/README.md +18 -0
  2. package/assets/octobot/lg/octo_blink.webp +0 -0
  3. package/assets/octobot/lg/octo_blink_still.png +0 -0
  4. package/assets/octobot/lg/octo_idle.webp +0 -0
  5. package/assets/octobot/lg/octo_idle_still.png +0 -0
  6. package/assets/octobot/lg/octo_look.webp +0 -0
  7. package/assets/octobot/lg/octo_look_still.png +0 -0
  8. package/assets/octobot/lg/octo_swim.webp +0 -0
  9. package/assets/octobot/lg/octo_swim_still.png +0 -0
  10. package/assets/octobot/lg/octo_thinking.webp +0 -0
  11. package/assets/octobot/lg/octo_thinking_still.png +0 -0
  12. package/assets/octobot/lg/octo_wave.webp +0 -0
  13. package/assets/octobot/lg/octo_wave_still.png +0 -0
  14. package/assets/octobot/md/octo_blink.webp +0 -0
  15. package/assets/octobot/md/octo_blink_still.png +0 -0
  16. package/assets/octobot/md/octo_idle.webp +0 -0
  17. package/assets/octobot/md/octo_idle_still.png +0 -0
  18. package/assets/octobot/md/octo_look.webp +0 -0
  19. package/assets/octobot/md/octo_look_still.png +0 -0
  20. package/assets/octobot/md/octo_swim.webp +0 -0
  21. package/assets/octobot/md/octo_swim_still.png +0 -0
  22. package/assets/octobot/md/octo_thinking.webp +0 -0
  23. package/assets/octobot/md/octo_thinking_still.png +0 -0
  24. package/assets/octobot/md/octo_wave.webp +0 -0
  25. package/assets/octobot/md/octo_wave_still.png +0 -0
  26. package/assets/octobot/sm/octo_blink.webp +0 -0
  27. package/assets/octobot/sm/octo_blink_still.png +0 -0
  28. package/assets/octobot/sm/octo_idle.webp +0 -0
  29. package/assets/octobot/sm/octo_idle_still.png +0 -0
  30. package/assets/octobot/sm/octo_look.webp +0 -0
  31. package/assets/octobot/sm/octo_look_still.png +0 -0
  32. package/assets/octobot/sm/octo_swim.webp +0 -0
  33. package/assets/octobot/sm/octo_swim_still.png +0 -0
  34. package/assets/octobot/sm/octo_thinking.webp +0 -0
  35. package/assets/octobot/sm/octo_thinking_still.png +0 -0
  36. package/assets/octobot/sm/octo_wave.webp +0 -0
  37. package/assets/octobot/sm/octo_wave_still.png +0 -0
  38. package/fesm2022/meshmakers-shared-ui-assistant-core.mjs +2 -0
  39. package/fesm2022/meshmakers-shared-ui-assistant-core.mjs.map +1 -1
  40. package/fesm2022/meshmakers-shared-ui-assistant.mjs +28 -5
  41. package/fesm2022/meshmakers-shared-ui-assistant.mjs.map +1 -1
  42. package/fesm2022/meshmakers-shared-ui.mjs +402 -21
  43. package/fesm2022/meshmakers-shared-ui.mjs.map +1 -1
  44. package/package.json +1 -1
  45. package/types/meshmakers-shared-ui-assistant-core.d.ts +4 -0
  46. package/types/meshmakers-shared-ui-assistant.d.ts +11 -0
  47. package/types/meshmakers-shared-ui.d.ts +270 -6
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meshmakers/shared-ui",
3
- "version": "3.4.1490",
3
+ "version": "3.5.00",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^22.0.0",
6
6
  "@angular/core": "^22.0.0",
@@ -352,6 +352,10 @@ interface AssistantMessages {
352
352
  composerPlaceholder: string;
353
353
  send: string;
354
354
  stop: string;
355
+ /** Greeting of an empty chat, next to the waving OctoBot (AB#3444). */
356
+ greeting: string;
357
+ /** Shown next to the thinking OctoBot while a reply streams (AB#3444). */
358
+ thinking: string;
355
359
  conversationLabel: string;
356
360
  /** Screen-reader prefix of user turns. */
357
361
  youPrefix: string;
@@ -101,6 +101,11 @@ declare class AssistantPanelComponent {
101
101
  protected readonly confirmingDelete: _angular_core.WritableSignal<string | null>;
102
102
  /** Session being opened or deleted (its buttons are disabled meanwhile). */
103
103
  protected readonly busySession: _angular_core.WritableSignal<string | null>;
104
+ /**
105
+ * Greeting of an empty chat (AB#3444): the OctoBot waves once, then rests on its still frame.
106
+ * Not shown while the assistant is unavailable (the panel says so instead).
107
+ */
108
+ protected readonly showGreeting: _angular_core.Signal<boolean>;
104
109
  /** Starter questions on an empty thread (transports with `starterQuestions` only). */
105
110
  protected readonly showStarters: _angular_core.Signal<boolean>;
106
111
  constructor();
@@ -205,6 +210,10 @@ declare class AssistantComposerComponent {
205
210
  * A user turn sent through a slash command's `expand` (AB#5621) shows the expanded prompt with the
206
211
  * typed command (`slashCommand`) as a small label above it.
207
212
  *
213
+ * While an assistant turn streams it shows the OctoBot `thinking` with "Thinking…" (AB#3444);
214
+ * once the reply is complete the newest assistant turn keeps the OctoBot as a still frame. The
215
+ * figure is decorative — the text carries the meaning — and appears at most once in the thread.
216
+ *
208
217
  * The list is an `aria-live` log; it is `aria-busy` while a turn streams so a
209
218
  * screen reader announces finished messages instead of every token. Nothing
210
219
  * inside it carries its own live role, so each addition is announced once.
@@ -217,6 +226,8 @@ declare class AssistantThreadComponent {
217
226
  readonly messages: _angular_core.InputSignal<Partial<AssistantMessages> | null>;
218
227
  protected readonly m: _angular_core.Signal<AssistantMessages>;
219
228
  protected readonly toolCallComponent: _angular_core.Type<unknown>;
229
+ /** Id of the newest assistant turn: the only one that shows the resting OctoBot. */
230
+ protected readonly lastAssistantId: _angular_core.Signal<string | null>;
220
231
  protected readonly streaming: _angular_core.Signal<boolean>;
221
232
  constructor();
222
233
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AssistantThreadComponent, never>;
@@ -92,7 +92,12 @@ type BadgeMappingTable = Record<string, BadgeMapping>;
92
92
  interface TableColumn {
93
93
  displayName?: string | null;
94
94
  field: string;
95
- dataType?: 'text' | 'numeric' | 'numericRange' | 'boolean' | 'date' | 'iso8601' | 'bytes' | 'statusIcons' | 'cronExpression' | 'progressBar' | 'badge' | 'component';
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
  /**
@@ -281,6 +304,34 @@ interface ListViewMessages {
281
304
  pagerNextPage: string;
282
305
  /** Grid: no records message. Default: "No records available." */
283
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;
284
335
  }
285
336
  /**
286
337
  * One entry of the list toolbar's command group (row filter, exports, reset,
@@ -400,6 +451,18 @@ declare const MM_ACTION_ICONS: {
400
451
  readonly report: SVGIcon;
401
452
  /** Restore / roll back to a stored state (e.g. restore a dump); destructive restores are `danger`. */
402
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;
403
466
  };
404
467
  type MmActionIconName = keyof typeof MM_ACTION_ICONS;
405
468
  /** True when the action is disabled (non-empty {@link MmAction.disabledReason}). */
@@ -468,6 +531,13 @@ interface ResolvedListRowAction {
468
531
  commandItem?: CommandItem;
469
532
  rowAction?: MmListRowAction;
470
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;
471
541
  /** Resolves the per-row callbacks of a {@link MmListRowAction}. */
472
542
  declare function resolveListRowAction(definition: MmListRowAction, row: unknown): MmAction;
473
543
  /** Structural equality of two rendered actions (keeps object identity stable across change detection). */
@@ -501,6 +571,12 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
501
571
  protected _showRowFilter: boolean;
502
572
  /** Indicates if the data source is currently loading data */
503
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>;
504
580
  /**
505
581
  * The component's own width in pixels, kept current via ResizeObserver.
506
582
  * `null` until the first measurement (before that, all columns render visible
@@ -682,6 +758,25 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
682
758
  * those host filters by itself.
683
759
  */
684
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;
685
780
  /**
686
781
  * Whether anything narrows or reorders the default view right now: a row
687
782
  * filter, a column sort, free-text search, or host-side filters announced
@@ -820,6 +915,15 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
820
915
  */
821
916
  protected getCellTitle(element: Record<string, unknown>, column: TableColumn): string | null;
822
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;
823
927
  /** Input attributes of a read-only boolean cell, cached per column and name (AB#5621). */
824
928
  private readonly booleanCellAttributeCache;
825
929
  /**
@@ -902,7 +1006,8 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
902
1006
  protected onSelectOptionActionItem(event: Event, dataItem: unknown, menuItem: MenuItem): Promise<void>;
903
1007
  /**
904
1008
  * Row field naming a row for assistive technology (row menu "Actions for <name>", action
905
- * buttons "<action> <name>"). Falls back to `rtWellKnownName`, then `rtId`.
1009
+ * buttons "<action> <name>"). Falls back to `rtWellKnownName`, then `rtId`. A dotted path
1010
+ * (`contact.displayName`) reads a nested value (AB#5623).
906
1011
  */
907
1012
  rowLabelField: string;
908
1013
  /** Human name of a row (`rowLabelField`, `rtWellKnownName`, `rtId`), or '' when unknown. */
@@ -941,7 +1046,7 @@ declare class ListViewComponent extends CommandBaseService implements OnDestroy,
941
1046
  */
942
1047
  protected readonly commandsIcon: SVGIcon$1;
943
1048
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ListViewComponent, never>;
944
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ListViewComponent, "mm-list-view", never, { "pageSize": { "alias": "pageSize"; "required": false; }; "skip": { "alias": "skip"; "required": false; }; "autoPageSize": { "alias": "autoPageSize"; "required": false; }; "rowIsClickable": { "alias": "rowIsClickable"; "required": false; }; "showRowCheckBoxes": { "alias": "showRowCheckBoxes"; "required": false; }; "showRowSelectAllCheckBox": { "alias": "showRowSelectAllCheckBox"; "required": false; }; "contextMenuType": { "alias": "contextMenuType"; "required": false; }; "leftToolbarActions": { "alias": "leftToolbarActions"; "required": false; }; "rightToolbarActions": { "alias": "rightToolbarActions"; "required": false; }; "actionCommandItems": { "alias": "actionCommandItems"; "required": false; }; "contextMenuCommandItems": { "alias": "contextMenuCommandItems"; "required": false; }; "rowActions": { "alias": "rowActions"; "required": false; }; "maxInlineRowActions": { "alias": "maxInlineRowActions"; "required": false; }; "excelExportFileName": { "alias": "excelExportFileName"; "required": false; }; "pdfExportFileName": { "alias": "pdfExportFileName"; "required": false; }; "pageable": { "alias": "pageable"; "required": false; }; "sortable": { "alias": "sortable"; "required": false; }; "rowFilterEnabled": { "alias": "rowFilterEnabled"; "required": false; }; "searchTextBoxEnabled": { "alias": "searchTextBoxEnabled"; "required": false; }; "persistListState": { "alias": "persistListState"; "required": false; }; "listStateKey": { "alias": "listStateKey"; "required": false; }; "resizable": { "alias": "resizable"; "required": false; }; "actionsColumnWidth": { "alias": "actionsColumnWidth"; "required": false; }; "hideCheckboxesBelow": { "alias": "hideCheckboxesBelow"; "required": false; }; "cardModeBelow": { "alias": "cardModeBelow"; "required": false; }; "collapseCommandsBelow": { "alias": "collapseCommandsBelow"; "required": false; }; "hasExternalFilters": { "alias": "hasExternalFilters"; "required": false; }; "rowClass": { "alias": "rowClass"; "required": false; }; "messages": { "alias": "messages"; "required": false; }; "selectable": { "alias": "selectable"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "rowLabelField": { "alias": "rowLabelField"; "required": false; }; }, { "rowClicked": "rowClicked"; "rowAction": "rowAction"; "resetFilters": "resetFilters"; }, ["filtersTemplate"], never, true, never>;
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>;
945
1050
  }
946
1051
 
947
1052
  declare const upload: {
@@ -3183,6 +3288,29 @@ declare class ActionButtonComponent<TId extends string = string> {
3183
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>;
3184
3289
  }
3185
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
+
3186
3314
  /** Overflow menu item handed to the Kendo DropDownButton. */
3187
3315
  interface RowActionMenuItem<TId extends string> {
3188
3316
  text: string;
@@ -3197,6 +3325,9 @@ interface RowActionMenuItem<TId extends string> {
3197
3325
  * "More actions for …" menu. Disabled actions stay focusable and announce their reason;
3198
3326
  * in the menu the reason is shown under the item text.
3199
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
+ *
3200
3331
  * The component only emits — destructive handlers confirm first (danger dialog naming the target).
3201
3332
  *
3202
3333
  * ```html
@@ -3212,12 +3343,16 @@ declare class RowActionsComponent<TId extends string = string> {
3212
3343
  readonly rowLabel: _angular_core.InputSignal<string>;
3213
3344
  /** Slots incl. the overflow button. */
3214
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>;
3215
3348
  /** Fires for enabled actions only, inline or from the menu. */
3216
3349
  readonly triggered: _angular_core.OutputEmitterRef<MmActionEvent<TId>>;
3217
3350
  private readonly router;
3218
3351
  /** Menu links resolve like the inline `routerLink`: relative to the hosting route. */
3219
3352
  private readonly route;
3353
+ private readonly injectedMessages;
3220
3354
  protected readonly moreIcon: _progress_kendo_svg_icons.SVGIcon;
3355
+ private readonly m;
3221
3356
  protected readonly split: _angular_core.Signal<{
3222
3357
  inline: MmAction<TId>[];
3223
3358
  menu: MmAction<TId>[];
@@ -3227,12 +3362,141 @@ declare class RowActionsComponent<TId extends string = string> {
3227
3362
  protected readonly hasActions: _angular_core.Signal<boolean>;
3228
3363
  protected readonly moreLabel: _angular_core.Signal<string>;
3229
3364
  protected readonly groupLabel: _angular_core.Signal<string>;
3365
+ private format;
3230
3366
  protected onMenuItem(item: RowActionMenuItem<TId>): void;
3231
3367
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RowActionsComponent<any>, never>;
3232
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<RowActionsComponent<any>, "mm-row-actions", never, { "actions": { "alias": "actions"; "required": true; "isSignal": true; }; "rowLabel": { "alias": "rowLabel"; "required": true; "isSignal": true; }; "maxInline": { "alias": "maxInline"; "required": false; "isSignal": true; }; }, { "triggered": "triggered"; }, never, never, true, never>;
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>;
3233
3497
  }
3234
3498
 
3235
3499
  declare function provideMmSharedUi(): EnvironmentProviders;
3236
3500
 
3237
- export { ActionButtonComponent, BaseFormComponent, BaseTreeDetailComponent, ButtonTypes, BytesToSizePipe, CRON_PRESETS, ConfirmationService, ConfirmationWindowComponent, ConfirmationWindowResult, CopyableTextComponent, CronBuilderComponent, CronHumanizerService, CronParserService, DANGER_CONFIRM_ENVIRONMENT, DANGER_CONFIRM_FALLBACK_WORD, DANGER_CONFIRM_SAFE_FOCUS, DEFAULT_CONFIRMATION_WINDOW_MESSAGES, DEFAULT_CRON_BUILDER_CONFIG, DEFAULT_DANGER_CONFIRMATION_MESSAGES, DEFAULT_ENTITY_SELECT_DIALOG_MESSAGES, DEFAULT_ENTITY_SELECT_INPUT_MESSAGES, DEFAULT_INPUT_DIALOG_MESSAGES, DEFAULT_LIST_VIEW_MESSAGES, DEFAULT_MESSAGE_DETAILS_DIALOG_MESSAGES, DEFAULT_NOTIFICATION_DISPLAY_MESSAGES, DEFAULT_PROGRESS_WINDOW_MESSAGES, DEFAULT_RESPONSIVE_COLSPAN, DEFAULT_SAVE_AS_DIALOG_MESSAGES, DEFAULT_TIME_RANGE_LABELS, DangerConfirmationResult, DangerConfirmationWindowComponent, DataSourceBase, DataSourceTyped, DialogType, EntitySelectDialogComponent, EntitySelectDialogService, EntitySelectInputComponent, FetchResultBase, FetchResultTyped, FileUploadResult, FileUploadService, FormTitleExtraDirective, HAS_UNSAVED_CHANGES, HOUR_INTERVALS, HierarchyDataSource, HierarchyDataSourceBase, ImportStrategyDialogComponent, ImportStrategyDialogResult, ImportStrategyDialogService, ImportStrategyDto, InputDialogComponent, InputService, ListStateService, ListViewComponent, ListViewFiltersDirective, MINUTE_INTERVALS, MM_ACTION_ICONS, MM_ROW_ACTIONS_MAX_INLINE, MessageDetailsDialogComponent, MessageDetailsDialogService, MessageListenerService, MmListViewDataBindingDirective, NOTIFICATION_DISPLAY_OPTIONS, NotificationDisplayService, PascalCasePipe, ProgressValue, ProgressWindowComponent, ProgressWindowService, RELATIVE_WEEKS, RowActionsComponent, SECOND_INTERVALS, SaveAsDialogComponent, SaveAsDialogService, TimeRangePickerComponent, TimeRangeUtils, TreeComponent, UnsavedChangesDirective, UnsavedChangesGuard, UploadFileDialogComponent, WEEKDAYS, WEEKDAY_ABBREVIATIONS, WindowStateService, actionAccessibleName, actionTooltip, applyDangerConfirmEnvironment, dangerConfirmNameMatches, dangerConfirmTypingToken, generateDayOfMonthOptions, generateHourOptions, generateMinuteOptions, isActionDisabled, isActionVisible, provideMmSharedUi, resolveListRowAction, resolveListViewMessages, sameAction, splitRowActions };
3238
- export type { BadgeMapping, BadgeMappingTable, BaseFormConfig, BaseFormMessages, ColumnDefinition, ConfirmationButtonLabels, ConfirmationWindowData, ConfirmationWindowMessages, ContextMenuType, CronBuilderConfig, CronFields, CronPreset, CronSchedule, CronValidationResult, DangerConfirmEnvironment, DangerConfirmationMessages, DangerConfirmationOptions, DialogFetchOptions, DialogFetchResult, DropdownOption, EntitySelectDialogDataSource, EntitySelectDialogMessages, EntitySelectDialogOptions, EntitySelectDialogResult, EntitySelectInputMessages, FetchAgainOptions, FetchDataOptions, FetchResult, FileUploadData, HasUnsavedChanges, InputDialogMessages, ListViewCommand, ListViewMessages, MessageDetailsDialogData, MessageDetailsDialogMessages, MmAction, MmActionContext, MmActionDisplay, MmActionEvent, MmActionIconName, MmActionLink, MmListRowAction, MmListRowActionEvent, NameAvailabilityResult, NodeDroppedEvent, NodeInfo, NotificationDisplayMessages, NotificationDisplayOptions, PersistedListState, ProgressWindowConfig, ProgressWindowData, ProgressWindowMessages, ProgressWindowOptions, ProgressWindowResult, Quarter, RelativeTimeUnit, ResolvedListRowAction, ResponsiveFormBreakPoint, RowActionsView, RowClassFn, SaveAsDialogDataSource, SaveAsDialogMessages, SaveAsDialogOptions, SaveAsDialogResult, ScheduleType, StatusFieldConfig, StatusIconMapping, StatusMapping, TableColumn, TimeRange, TimeRangeISO, TimeRangeOption, TimeRangePickerConfig, TimeRangePickerLabels, TimeRangeSelection, TimeRangeType, TimeRangeZone, UnsavedChangesMessages, Weekday, WindowDimensions };
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 };