@openmfp/ngx 0.12.13 → 0.13.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openmfp/ngx",
3
- "version": "0.12.13",
3
+ "version": "0.13.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/openmfp/webcomponents.git"
@@ -3,8 +3,8 @@ import { OnInit, OnDestroy, Type } from '@angular/core';
3
3
  import { FormGroup, FormControl } from '@angular/forms';
4
4
  import * as _openmfp_ngx from '@openmfp/ngx';
5
5
  import { Input } from '@fundamental-ngx/ui5-webcomponents/input';
6
- import { Breakpoint, GridStackOptions } from 'gridstack';
7
6
  import { SafeHtml } from '@angular/platform-browser';
7
+ import { GridStackOptions } from 'gridstack';
8
8
  import { nodesCB } from 'gridstack/dist/angular';
9
9
 
10
10
  /** Subset of fields of a generic resource that the table/form components rely on. */
@@ -345,6 +345,40 @@ declare class DeclarativeTableCard<T extends GenericResource> {
345
345
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DeclarativeTableCard<any>, "mfp-declarative-table-card", never, { "resources": { "alias": "resources"; "required": true; "isSignal": true; }; "config": { "alias": "config"; "required": true; "isSignal": true; }; "createFormState": { "alias": "createFormState"; "required": false; "isSignal": true; }; "editFormState": { "alias": "editFormState"; "required": false; "isSignal": true; }; }, { "actionButtonClick": "actionButtonClick"; "tableRowClicked": "tableRowClicked"; "loadMoreResources": "loadMoreResources"; "paginationLimitChanged": "paginationLimitChanged"; "searchChanged": "searchChanged"; "createFieldChange": "createFieldChange"; "editFieldChange": "editFieldChange"; "createSubmit": "createSubmit"; "editSubmit": "editSubmit"; "deleteSubmit": "deleteSubmit"; }, never, never, true, never>;
346
346
  }
347
347
 
348
+ type DashboardLanguage = 'en' | 'de';
349
+ declare const DASHBOARD_I18N_KEYS: {
350
+ readonly UNSAVED_CHANGES: "unsavedChanges";
351
+ readonly EDIT_CARDS: "editCards";
352
+ readonly EDIT_VIEW: "editView";
353
+ readonly ACTIONS: "actions";
354
+ readonly SAVE: "save";
355
+ readonly CANCEL: "cancel";
356
+ readonly DISCARD: "discard";
357
+ readonly DISCARD_CHANGES: "discardChanges";
358
+ readonly DISCARD_CONFIRM_BODY: "discardConfirmBody";
359
+ readonly UNSAVED_NAV_BODY: "unsavedNavBody";
360
+ readonly NO_CARDS_AVAILABLE: "noCardsAvailable";
361
+ readonly REMOVE_SECTION: "removeSection";
362
+ readonly REMOVE_CARD: "removeCard";
363
+ readonly RESIZABLE: "resizable";
364
+ };
365
+ type DashboardI18nKey = (typeof DASHBOARD_I18N_KEYS)[keyof typeof DASHBOARD_I18N_KEYS];
366
+
367
+ /**
368
+ * Holds the dashboard's current language and resolves translation keys for
369
+ * the dashboard chrome (toolbar buttons, dialogs, a11y labels). Provided at
370
+ * the `Dashboard` component level so every nested dashboard component shares
371
+ * the same language signal — child components inject the same instance and
372
+ * react to language changes automatically because `getTranslation` reads the
373
+ * signal on every call.
374
+ */
375
+ declare class DashboardI18nService {
376
+ readonly language: _angular_core.WritableSignal<DashboardLanguage>;
377
+ getTranslation(key: DashboardI18nKey): string;
378
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardI18nService, never>;
379
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<DashboardI18nService>;
380
+ }
381
+
348
382
  declare const CARD_TYPES: {
349
383
  readonly WC: "wc";
350
384
  readonly ANGULAR: "angular";
@@ -426,22 +460,13 @@ interface DashboardConfig {
426
460
  editButtonFirst?: boolean;
427
461
  }
428
462
 
429
- /**
430
- * Layout strategy applied at each breakpoint when Gridstack changes column
431
- * count. See ColumnOptions in gridstack/dist/types.d.ts:27 for the full set.
432
- */
433
- type LayoutStrategy = 'compact' | 'list' | 'none';
434
- /** Single source of truth for grid + section breakpoints (TypeScript half). */
435
- declare const DASHBOARD_BREAKPOINTS: ReadonlyArray<Readonly<Required<Pick<Breakpoint, 'w' | 'c'>> & {
436
- layout: LayoutStrategy;
437
- }>>;
438
-
439
463
  declare class Dashboard implements OnInit, OnDestroy {
440
464
  static registerAngularComponents(componentTypes: Type<unknown>[]): void;
441
465
  config: _angular_core.InputSignal<DashboardConfig>;
442
466
  sections: _angular_core.ModelSignal<SectionConfig[]>;
443
467
  cards: _angular_core.ModelSignal<CardConfig[]>;
444
468
  availableCards: _angular_core.InputSignal<CardConfig[]>;
469
+ language: _angular_core.InputSignal<DashboardLanguage>;
445
470
  readonly saved: _angular_core.OutputEmitterRef<{
446
471
  sections: SectionConfig[];
447
472
  cards: CardConfig[];
@@ -473,6 +498,23 @@ declare class Dashboard implements OnInit, OnDestroy {
473
498
  private readonly hostEl;
474
499
  private readonly injector;
475
500
  private readonly sanitizer;
501
+ protected readonly i18n: DashboardI18nService;
502
+ protected readonly i18nKeys: {
503
+ readonly UNSAVED_CHANGES: "unsavedChanges";
504
+ readonly EDIT_CARDS: "editCards";
505
+ readonly EDIT_VIEW: "editView";
506
+ readonly ACTIONS: "actions";
507
+ readonly SAVE: "save";
508
+ readonly CANCEL: "cancel";
509
+ readonly DISCARD: "discard";
510
+ readonly DISCARD_CHANGES: "discardChanges";
511
+ readonly DISCARD_CONFIRM_BODY: "discardConfirmBody";
512
+ readonly UNSAVED_NAV_BODY: "unsavedNavBody";
513
+ readonly NO_CARDS_AVAILABLE: "noCardsAvailable";
514
+ readonly REMOVE_SECTION: "removeSection";
515
+ readonly REMOVE_CARD: "removeCard";
516
+ readonly RESIZABLE: "resizable";
517
+ };
476
518
  protected safeTitle: _angular_core.Signal<SafeHtml>;
477
519
  protected safeDescription: _angular_core.Signal<SafeHtml | null>;
478
520
  protected gridOptions: _angular_core.Signal<GridStackOptions>;
@@ -572,98 +614,7 @@ declare class Dashboard implements OnInit, OnDestroy {
572
614
  onGridChange(event: nodesCB): void;
573
615
  private saveCardsPosition;
574
616
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<Dashboard, never>;
575
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<Dashboard, "mfp-dashboard", never, { "config": { "alias": "config"; "required": true; "isSignal": true; }; "sections": { "alias": "sections"; "required": false; "isSignal": true; }; "cards": { "alias": "cards"; "required": false; "isSignal": true; }; "availableCards": { "alias": "availableCards"; "required": false; "isSignal": true; }; }, { "sections": "sectionsChange"; "cards": "cardsChange"; "saved": "saved"; "actionButtonClick": "actionButtonClick"; "unsavedChangesChange": "unsavedChangesChange"; }, never, ["[slot=dashboard-subheader]"], true, never>;
576
- }
577
-
578
- declare class EditCardsDialog {
579
- private readonly host;
580
- availableCards: _angular_core.InputSignal<CardConfig[]>;
581
- addedCardsIds: _angular_core.InputSignal<Set<string>>;
582
- open: _angular_core.InputSignal<boolean>;
583
- readonly confirm: _angular_core.OutputEmitterRef<{
584
- added: CardConfig[];
585
- removed: string[];
586
- }>;
587
- readonly cancelled: _angular_core.OutputEmitterRef<void>;
588
- selectedIds: _angular_core.WritableSignal<Set<string>>;
589
- constructor();
590
- toggle(id: string): void;
591
- /**
592
- * Tab moves focus across the switches directly, skipping the wrapping
593
- * ui5-li-custom rows. Past the last switch Tab goes to the first footer
594
- * button; before the first switch Shift+Tab goes to the last footer button.
595
- * The dialog's native focus trap takes care of cycling from the buttons
596
- * back into the list.
597
- */
598
- onSwitchKeydown(event: KeyboardEvent, _id: string): void;
599
- confirmSave(): void;
600
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<EditCardsDialog, never>;
601
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<EditCardsDialog, "mfp-edit-cards-dialog", never, { "availableCards": { "alias": "availableCards"; "required": false; "isSignal": true; }; "addedCardsIds": { "alias": "addedCardsIds"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "confirm": "confirm"; "cancelled": "cancelled"; }, never, never, true, never>;
602
- }
603
-
604
- /**
605
- * Confirmation popup shown when the user tries to abandon edit mode while
606
- * there are unsaved dashboard changes. Emits `confirm` when the user accepts
607
- * the discard, `cancelled` when they back out.
608
- */
609
- declare class DiscardChangesDialog {
610
- open: _angular_core.InputSignal<boolean>;
611
- readonly confirm: _angular_core.OutputEmitterRef<void>;
612
- readonly cancelled: _angular_core.OutputEmitterRef<void>;
613
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DiscardChangesDialog, never>;
614
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DiscardChangesDialog, "mfp-discard-changes-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "confirm": "confirm"; "cancelled": "cancelled"; }, never, never, true, never>;
615
- }
616
-
617
- /**
618
- * Confirmation popup shown when the user attempts to navigate away from the
619
- * dashboard while there are unsaved edit-mode changes. The host (the
620
- * dashboard, an Angular CanDeactivate guard, a Luigi navigation listener,
621
- * etc.) is responsible for routing its intercepted navigation through this
622
- * dialog and acting on the emitted decision:
623
- * - `save` → persist changes, then proceed with navigation
624
- * - `discard` → revert changes, then proceed with navigation
625
- * - `cancelled` → abort navigation, stay on the page
626
- */
627
- declare class UnsavedChangesDialog {
628
- open: _angular_core.InputSignal<boolean>;
629
- readonly save: _angular_core.OutputEmitterRef<void>;
630
- readonly discard: _angular_core.OutputEmitterRef<void>;
631
- readonly cancelled: _angular_core.OutputEmitterRef<void>;
632
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UnsavedChangesDialog, never>;
633
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UnsavedChangesDialog, "mfp-unsaved-changes-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "save": "save"; "discard": "discard"; "cancelled": "cancelled"; }, never, never, true, never>;
634
- }
635
-
636
- declare class DashboardCard {
637
- card: _angular_core.InputSignal<CardConfig>;
638
- editMode: _angular_core.InputSignal<boolean>;
639
- readonly removeCard: _angular_core.OutputEmitterRef<void>;
640
- protected readonly gridColumn: _angular_core.Signal<string>;
641
- protected readonly gridRow: _angular_core.Signal<string>;
642
- private host;
643
- private renderer;
644
- constructor();
645
- private createGridTrack;
646
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardCard, never>;
647
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DashboardCard, "mfp-dashboard-card", never, { "card": { "alias": "card"; "required": true; "isSignal": true; }; "editMode": { "alias": "editMode"; "required": false; "isSignal": true; }; }, { "removeCard": "removeCard"; }, never, ["*"], true, never>;
648
- }
649
-
650
- declare class DashboardSection {
651
- section: _angular_core.InputSignal<SectionConfig>;
652
- cards: _angular_core.InputSignal<CardConfig[]>;
653
- /**
654
- * Optional override for the section's inner grid column count. Leave unset
655
- * (the default) to inherit the responsive defaults from CSS — the section
656
- * grid then mirrors the dashboard breakpoints (4/8/12/14 columns) via the
657
- * `mfp-dashboard` container query in dashboard-section.component.scss.
658
- * Pass an explicit number only when a section needs a fixed column count
659
- * regardless of width.
660
- */
661
- columns: _angular_core.InputSignal<number | undefined>;
662
- editMode: _angular_core.InputSignal<boolean>;
663
- readonly removeSection: _angular_core.OutputEmitterRef<void>;
664
- readonly removeCard: _angular_core.OutputEmitterRef<string>;
665
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashboardSection, never>;
666
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DashboardSection, "mfp-dashboard-section", never, { "section": { "alias": "section"; "required": true; "isSignal": true; }; "cards": { "alias": "cards"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "editMode": { "alias": "editMode"; "required": false; "isSignal": true; }; }, { "removeSection": "removeSection"; "removeCard": "removeCard"; }, never, never, true, never>;
617
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Dashboard, "mfp-dashboard", never, { "config": { "alias": "config"; "required": true; "isSignal": true; }; "sections": { "alias": "sections"; "required": false; "isSignal": true; }; "cards": { "alias": "cards"; "required": false; "isSignal": true; }; "availableCards": { "alias": "availableCards"; "required": false; "isSignal": true; }; "language": { "alias": "language"; "required": false; "isSignal": true; }; }, { "sections": "sectionsChange"; "cards": "cardsChange"; "saved": "saved"; "actionButtonClick": "actionButtonClick"; "unsavedChangesChange": "unsavedChangesChange"; }, never, ["[slot=dashboard-subheader]"], true, never>;
667
618
  }
668
619
 
669
620
  declare class ResourceField<T extends GenericResource, F extends FieldDefinition> {
@@ -1305,5 +1256,5 @@ declare class WhatsNew {
1305
1256
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<WhatsNew, "mfp-whats-new", never, {}, {}, never, never, true, never>;
1306
1257
  }
1307
1258
 
1308
- export { BooleanValue, CARD_TYPES, DASHBOARD_BREAKPOINTS, Dashboard, DashboardCard, DashboardSection, DeclarativeForm, DeclarativeTable, DeclarativeTableCard, DiscardChangesDialog, EditCardsDialog, Favorites, LinkValue, ResourceField, SecretValue, ServiceStatusCard, TagListValue, UnsavedChangesDialog, VisitedServiceCard, WhatsNew };
1259
+ export { BooleanValue, CARD_TYPES, Dashboard, DeclarativeForm, DeclarativeTable, DeclarativeTableCard, Favorites, LinkValue, ResourceField, SecretValue, ServiceStatusCard, TagListValue, VisitedServiceCard, WhatsNew };
1309
1260
  export type { ButtonSettings, CardConfig, CardsType, CssRule, CssRuleCondition, DashboardButtonsSettings, DashboardConfig, DeleteResourceConfirmationConfig, FieldDefinition, FormFieldChangeEvent, FormFieldDefinition, FormFieldErrors, GenericResource, IconDesignType, ModalSettings, PropertyField, ResourceFieldButtonClickEvent, ResourceFormConfig, SectionConfig, ServiceStatusItem, ServiceStatusValue, TableCardButtonSettings, TableCardConfig, TableCardFormState, TableConfig, TableFieldDefinition, TransformType, UiSettings };