@elasticias/ui 1.0.50 → 1.0.52

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.
@@ -10,7 +10,7 @@ import * as _elasticias_core from '@elasticias/core';
10
10
  import { EfBuildPackage, EfSessionIdleService, EfModule, EfNavSection, EfNavItem, EfModuleId, EfToast, EfToastAction, EfThemeConfigService } from '@elasticias/core';
11
11
  import * as i1 from 'primeng/tooltip';
12
12
  import { BlockableUI } from 'primeng/api';
13
- import { SafeResourceUrl } from '@angular/platform-browser';
13
+ import { SafeResourceUrl, SafeHtml } from '@angular/platform-browser';
14
14
  import { ChartConfiguration } from 'chart.js';
15
15
  import { ControlValueAccessor, NgControl } from '@angular/forms';
16
16
  import { TranslateService } from '@ngx-translate/core';
@@ -385,6 +385,13 @@ interface EfChangeHistoryEntry {
385
385
  toStatus?: string | null;
386
386
  note?: string | null;
387
387
  }
388
+ /** A reference-list item used to translate a raw audit value: matched on
389
+ * `code`, shown as `label`. Structurally compatible with the static reference
390
+ * data items screens already load. */
391
+ interface EfChangeHistoryValueItem {
392
+ code: string;
393
+ label?: string | null;
394
+ }
388
395
 
389
396
  /** Emitted when the user picks a product (with its active variant) from the menu. */
390
397
  interface ProductTypeaheadSelection {
@@ -475,6 +482,11 @@ declare class EfOrderBuilderComponent implements OnInit {
475
482
  * desktop width and inside the drawer below that or in focus mode.
476
483
  */
477
484
  auditEntries: _angular_core.InputSignal<EfChangeHistoryEntry[]>;
485
+ /** Passed to the history's `valueLists`: field path to reference items, so
486
+ * raw statuses show as translated labels. */
487
+ auditValueLists: _angular_core.InputSignal<Readonly<Record<string, readonly EfChangeHistoryValueItem[]>> | null>;
488
+ /** Passed to the history's `noteFormatter`: returns the text for a note, or null for the raw note. */
489
+ auditNoteFormatter: _angular_core.InputSignal<((note: string) => string | null) | null>;
478
490
  openCatalogue: _angular_core.OutputEmitterRef<void>;
479
491
  orderChanged: _angular_core.OutputEmitterRef<OrderChangeInfo>;
480
492
  orderValidated: _angular_core.OutputEmitterRef<ValidationResult>;
@@ -591,7 +603,7 @@ declare class EfOrderBuilderComponent implements OnInit {
591
603
  */
592
604
  private withTotals;
593
605
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EfOrderBuilderComponent, never>;
594
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfOrderBuilderComponent, "ef-order-builder", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; "order": { "alias": "order"; "required": true; "isSignal": true; }; "products": { "alias": "products"; "required": true; "isSignal": true; }; "customers": { "alias": "customers"; "required": true; "isSignal": true; }; "recipient": { "alias": "recipient"; "required": false; "isSignal": true; }; "defaultCallingCode": { "alias": "defaultCallingCode"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "countGroupLabels": { "alias": "countGroupLabels"; "required": false; "isSignal": true; }; "productKeyField": { "alias": "productKeyField"; "required": false; "isSignal": true; }; "priceList": { "alias": "priceList"; "required": false; "isSignal": true; }; "backendErrors": { "alias": "backendErrors"; "required": false; "isSignal": true; }; "shippingTotal": { "alias": "shippingTotal"; "required": false; "isSignal": true; }; "auditEntries": { "alias": "auditEntries"; "required": false; "isSignal": true; }; "focusMode": { "alias": "focusMode"; "required": false; "isSignal": true; }; }, { "order": "orderChange"; "openCatalogue": "openCatalogue"; "orderChanged": "orderChanged"; "orderValidated": "orderValidated"; "productsAdded": "productsAdded"; "focusMode": "focusModeChange"; }, never, ["[obRail]"], true, never>;
606
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfOrderBuilderComponent, "ef-order-builder", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; "order": { "alias": "order"; "required": true; "isSignal": true; }; "products": { "alias": "products"; "required": true; "isSignal": true; }; "customers": { "alias": "customers"; "required": true; "isSignal": true; }; "recipient": { "alias": "recipient"; "required": false; "isSignal": true; }; "defaultCallingCode": { "alias": "defaultCallingCode"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "countGroupLabels": { "alias": "countGroupLabels"; "required": false; "isSignal": true; }; "productKeyField": { "alias": "productKeyField"; "required": false; "isSignal": true; }; "priceList": { "alias": "priceList"; "required": false; "isSignal": true; }; "backendErrors": { "alias": "backendErrors"; "required": false; "isSignal": true; }; "shippingTotal": { "alias": "shippingTotal"; "required": false; "isSignal": true; }; "auditEntries": { "alias": "auditEntries"; "required": false; "isSignal": true; }; "auditValueLists": { "alias": "auditValueLists"; "required": false; "isSignal": true; }; "auditNoteFormatter": { "alias": "auditNoteFormatter"; "required": false; "isSignal": true; }; "focusMode": { "alias": "focusMode"; "required": false; "isSignal": true; }; }, { "order": "orderChange"; "openCatalogue": "openCatalogue"; "orderChanged": "orderChanged"; "orderValidated": "orderValidated"; "productsAdded": "productsAdded"; "focusMode": "focusModeChange"; }, never, ["[obRail]"], true, never>;
595
607
  }
596
608
 
597
609
  /**
@@ -1606,6 +1618,8 @@ declare class EfLabelComponent {
1606
1618
  label?: string;
1607
1619
  /** Translation key — preferred. */
1608
1620
  labelKey?: string;
1621
+ /** Interpolation params for `labelKey`. */
1622
+ labelParams?: Record<string, unknown>;
1609
1623
  /** DOM id of the labelled input. Empty / unset → no `for` attr. */
1610
1624
  for?: string;
1611
1625
  /** Caller-supplied extra class. The Comptoir `.ef-label` class is
@@ -1619,7 +1633,7 @@ declare class EfLabelComponent {
1619
1633
  * binding replaces (doesn't merge) so we do the joining here. */
1620
1634
  get resolvedClass(): string;
1621
1635
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EfLabelComponent, never>;
1622
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfLabelComponent, "ef-label", never, { "label": { "alias": "label"; "required": false; }; "labelKey": { "alias": "labelKey"; "required": false; }; "for": { "alias": "for"; "required": false; }; "styleClass": { "alias": "styleClass"; "required": false; }; "required": { "alias": "required"; "required": false; }; }, {}, never, never, true, never>;
1636
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfLabelComponent, "ef-label", never, { "label": { "alias": "label"; "required": false; }; "labelKey": { "alias": "labelKey"; "required": false; }; "labelParams": { "alias": "labelParams"; "required": false; }; "for": { "alias": "for"; "required": false; }; "styleClass": { "alias": "styleClass"; "required": false; }; "required": { "alias": "required"; "required": false; }; }, {}, never, never, true, never>;
1623
1637
  static ngAcceptInputType_required: unknown;
1624
1638
  }
1625
1639
 
@@ -2595,6 +2609,55 @@ declare class EfPdfPreviewComponent {
2595
2609
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfPdfPreviewComponent, "ef-pdf-preview", never, { "blob": { "alias": "blob"; "required": false; "isSignal": true; }; "fileName": { "alias": "fileName"; "required": false; "isSignal": true; }; "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; "showDownload": { "alias": "showDownload"; "required": false; "isSignal": true; }; "showPrint": { "alias": "showPrint"; "required": false; "isSignal": true; }; "showOpenInNewTab": { "alias": "showOpenInNewTab"; "required": false; "isSignal": true; }; "showWhatsappShare": { "alias": "showWhatsappShare"; "required": false; "isSignal": true; }; "whatsappPhone": { "alias": "whatsappPhone"; "required": false; "isSignal": true; }; "defaultCallingCode": { "alias": "defaultCallingCode"; "required": false; "isSignal": true; }; }, { "visible": "visibleChange"; }, never, never, true, never>;
2596
2610
  }
2597
2611
 
2612
+ /**
2613
+ * Shows a complete HTML document (an email template, rendered with sample
2614
+ * data) inside a frame that cannot act.
2615
+ *
2616
+ * The frame's `sandbox` attribute is written in the template and empty, and
2617
+ * no input reaches it: the document runs no script, has an opaque origin
2618
+ * (no cookies, no storage, no access to the parent), cannot submit a form,
2619
+ * open a popup or navigate the top window. The document comes from
2620
+ * `srcdoc`, so there is no URL to load and no new origin for the CSP; it
2621
+ * inherits the host page's policy, whose `style-src 'unsafe-inline'` lets
2622
+ * the template's own styles apply.
2623
+ *
2624
+ * The frame always has an accessible name (WCAG 4.1.2): `titleKey`, or the
2625
+ * shared `ef_html_preview_title` key when none is given. Consuming apps define it:
2626
+ * fr "Aperçu", ar "معاينة", en "Preview".
2627
+ *
2628
+ * `width: 100%` and `min-width: 0` keep a 600px email table scrolling inside
2629
+ * the frame on a phone instead of widening the page.
2630
+ *
2631
+ * ```html
2632
+ * <ef-html-preview [html]="previewHtml()" titleKey="email_templates_preview_title" [height]="560" />
2633
+ * ```
2634
+ */
2635
+ /** The title key the frame falls back to; apps add it to fr.json, ar.json and en.json. */
2636
+ declare const EF_HTML_PREVIEW_DEFAULT_TITLE_KEY = "ef_html_preview_title";
2637
+ declare class EfHtmlPreviewComponent {
2638
+ /** The full document to show. Sanitized by the server before it gets here. */
2639
+ readonly html: _angular_core.InputSignal<string>;
2640
+ /** i18n key of the frame's accessible title; `ef_html_preview_title` when empty. */
2641
+ readonly titleKey: _angular_core.InputSignal<string>;
2642
+ /** Frame height in pixels. */
2643
+ readonly height: _angular_core.InputSignal<number>;
2644
+ private readonly sanitizer;
2645
+ protected readonly effectiveTitleKey: _angular_core.Signal<string>;
2646
+ /**
2647
+ * Angular's sanitizer strips every `style` attribute and `<style>` block
2648
+ * from a bound `srcdoc`, which would preview an email without its
2649
+ * layout, so the HTML is trusted explicitly. The guarantee is the frame's
2650
+ * empty sandbox: nothing in the document can run, submit, open a window
2651
+ * or reach this page, even for raw author HTML of an unsaved edit. The
2652
+ * server's sanitization of stored templates is a second layer, not the
2653
+ * reason this is safe. Never reuse this bypass for markup rendered
2654
+ * outside such a frame.
2655
+ */
2656
+ protected readonly trustedHtml: _angular_core.Signal<SafeHtml>;
2657
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EfHtmlPreviewComponent, never>;
2658
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfHtmlPreviewComponent, "ef-html-preview", never, { "html": { "alias": "html"; "required": false; "isSignal": true; }; "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2659
+ }
2660
+
2598
2661
  /**
2599
2662
  * Comptoir status spectrum — the canonical set of chip tones every
2600
2663
  * status reference can map to via `metadata.color`.
@@ -3310,6 +3373,19 @@ interface OpMeta {
3310
3373
  * ```html
3311
3374
  * <ef-change-history [entries]="auditEntries()" />
3312
3375
  * ```
3376
+ *
3377
+ * Values are shown raw by default (`Received → Confirmed`). To show a field's
3378
+ * values translated, pass `valueLists`: a map of field path to the
3379
+ * `{ code, label }` items of a reference list. Each old/new value that matches
3380
+ * an item `code` (case-insensitive) is shown as its `label` (translated when
3381
+ * the label is an i18n key); anything unmatched stays raw. The reserved key
3382
+ * `status` maps the `fromStatus` / `toStatus` of status-change entries.
3383
+ * On a V2 detail screen, `AbstractDetailScreenV2.auditValueLists()` builds this
3384
+ * map from `ScreenConfig.AUDIT_VALUE_LISTS`.
3385
+ *
3386
+ * ```html
3387
+ * <ef-change-history [entries]="auditEntries()" [valueLists]="auditValueLists()" />
3388
+ * ```
3313
3389
  */
3314
3390
  declare class EfChangeHistoryComponent {
3315
3391
  private readonly translate;
@@ -3325,6 +3401,14 @@ declare class EfChangeHistoryComponent {
3325
3401
  readonly collapsible: _angular_core.InputSignal<boolean>;
3326
3402
  /** Initial collapsed state — expanded by default. */
3327
3403
  readonly startCollapsed: _angular_core.InputSignal<boolean>;
3404
+ /** Optional field path to reference items, used to show a field's raw
3405
+ * old/new values as translated labels. Unmapped fields and unmatched
3406
+ * values stay raw. Key `status` covers `fromStatus` / `toStatus`. */
3407
+ readonly valueLists: _angular_core.InputSignal<Readonly<Record<string, readonly EfChangeHistoryValueItem[]>> | null>;
3408
+ /** Optional formatter for an entry's free-text note. Return the text to show,
3409
+ * or null to keep the raw note. Rendered as plain text (never HTML). A
3410
+ * screen uses it to translate coded notes such as `order_email_resent:order_confirmed`. */
3411
+ readonly noteFormatter: _angular_core.InputSignal<((note: string) => string | null) | null>;
3328
3412
  /** "Show more" dialog visibility. */
3329
3413
  readonly dialogVisible: _angular_core.WritableSignal<boolean>;
3330
3414
  /** First `previewLimit` rows shown inline in the card. */
@@ -3346,6 +3430,11 @@ declare class EfChangeHistoryComponent {
3346
3430
  * (`clientCode` → "Client code"), so new entities/fields work with zero
3347
3431
  * i18n maintenance. Add a key only for a properly localized (fr/ar) term. */
3348
3432
  fieldLabel(field: string | undefined): string;
3433
+ /** The note as shown: the formatter's text, else the raw note. */
3434
+ noteText(note: string | null | undefined): string;
3435
+ /** Display value for a field's raw value: the matching list item's label
3436
+ * (translated when it is an i18n key), else the raw value. */
3437
+ valueLabel(field: string | undefined, value: string | null | undefined): string;
3349
3438
  /** Returns the translation when present, otherwise a humanized fallback of
3350
3439
  * the source token (ngx-translate echoes the key on a miss). */
3351
3440
  private resolveLabel;
@@ -3355,7 +3444,7 @@ declare class EfChangeHistoryComponent {
3355
3444
  * registration (the app's default locale is fr-MA). */
3356
3445
  formatWhen(value: string | Date | null | undefined): string;
3357
3446
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EfChangeHistoryComponent, never>;
3358
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfChangeHistoryComponent, "ef-change-history", never, { "entries": { "alias": "entries"; "required": false; "isSignal": true; }; "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; "emptyKey": { "alias": "emptyKey"; "required": false; "isSignal": true; }; "limit": { "alias": "limit"; "required": false; "isSignal": true; }; "previewLimit": { "alias": "previewLimit"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "startCollapsed": { "alias": "startCollapsed"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3447
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfChangeHistoryComponent, "ef-change-history", never, { "entries": { "alias": "entries"; "required": false; "isSignal": true; }; "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; "emptyKey": { "alias": "emptyKey"; "required": false; "isSignal": true; }; "limit": { "alias": "limit"; "required": false; "isSignal": true; }; "previewLimit": { "alias": "previewLimit"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "startCollapsed": { "alias": "startCollapsed"; "required": false; "isSignal": true; }; "valueLists": { "alias": "valueLists"; "required": false; "isSignal": true; }; "noteFormatter": { "alias": "noteFormatter"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3359
3448
  }
3360
3449
 
3361
3450
  /**
@@ -3615,8 +3704,12 @@ declare abstract class AbstractEfFormControl {
3615
3704
  /** Translation key for the label — preferred (memory:
3616
3705
  * feedback_i18n_keys says always use `*Key`). */
3617
3706
  readonly labelKey: _angular_core.InputSignal<string>;
3707
+ /** Interpolation params for `labelKey` (`{{name}}` in the translation). */
3708
+ readonly labelParams: _angular_core.InputSignal<Record<string, unknown> | undefined>;
3618
3709
  readonly placeholder: _angular_core.InputSignal<string>;
3619
3710
  readonly placeholderKey: _angular_core.InputSignal<string>;
3711
+ /** Interpolation params for `placeholderKey` (`{{last4}}` and the like). */
3712
+ readonly placeholderParams: _angular_core.InputSignal<Record<string, unknown> | undefined>;
3620
3713
  /** Short help text shown under the control. Use `hintKey` for i18n. */
3621
3714
  readonly hint: _angular_core.InputSignal<string>;
3622
3715
  /** Translation key for the hint, preferred over `hint`. The hint is
@@ -3625,6 +3718,8 @@ declare abstract class AbstractEfFormControl {
3625
3718
  * Rendered by ef-input-text, ef-textarea, ef-inputnumber and ef-select;
3626
3719
  * the other controls inherit the input but do not render it yet. */
3627
3720
  readonly hintKey: _angular_core.InputSignal<string>;
3721
+ /** Interpolation params for `hintKey`. */
3722
+ readonly hintParams: _angular_core.InputSignal<Record<string, unknown> | undefined>;
3628
3723
  readonly ariaLabel: _angular_core.InputSignal<string>;
3629
3724
  readonly ariaLabelKey: _angular_core.InputSignal<string>;
3630
3725
  readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -3718,7 +3813,7 @@ declare abstract class AbstractEfFormControl {
3718
3813
  * the validation message together with the field name. */
3719
3814
  get errorsId(): string;
3720
3815
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AbstractEfFormControl, never>;
3721
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AbstractEfFormControl, "ng-component", never, { "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "labelKey": { "alias": "labelKey"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "placeholderKey": { "alias": "placeholderKey"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "hintKey": { "alias": "hintKey"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelKey": { "alias": "ariaLabelKey"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "describedByExtra": { "alias": "describedByExtra"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3816
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AbstractEfFormControl, "ng-component", never, { "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "labelKey": { "alias": "labelKey"; "required": false; "isSignal": true; }; "labelParams": { "alias": "labelParams"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "placeholderKey": { "alias": "placeholderKey"; "required": false; "isSignal": true; }; "placeholderParams": { "alias": "placeholderParams"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "hintKey": { "alias": "hintKey"; "required": false; "isSignal": true; }; "hintParams": { "alias": "hintParams"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelKey": { "alias": "ariaLabelKey"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "describedByExtra": { "alias": "describedByExtra"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3722
3817
  }
3723
3818
 
3724
3819
  declare class EfInputTextComponent extends AbstractEfFormControl implements ControlValueAccessor {
@@ -3728,6 +3823,11 @@ declare class EfInputTextComponent extends AbstractEfFormControl implements Cont
3728
3823
  fluid: boolean;
3729
3824
  inline: boolean;
3730
3825
  autocomplete?: string;
3826
+ /** Direction of the typed value, applied to the native input. Use
3827
+ * `'ltr'` for IBAN / RIB / phone values on an Arabic screen, `'auto'` to
3828
+ * follow the value's first strong character. The label and messages keep
3829
+ * the page direction. Null or absent leaves the input unchanged. */
3830
+ dir: 'ltr' | 'rtl' | 'auto' | null;
3731
3831
  /** Clearable (showClear / canClear) is inherited from AbstractEfFormControl;
3732
3832
  * we only supply the value predicate + the reset. */
3733
3833
  protected get hasValue(): boolean;
@@ -3757,6 +3857,7 @@ declare class EfInputTextComponent extends AbstractEfFormControl implements Cont
3757
3857
  private onChange;
3758
3858
  private onTouched;
3759
3859
  readonly ngControl: NgControl | null;
3860
+ private readonly hostRef;
3760
3861
  constructor();
3761
3862
  get showRequired(): boolean;
3762
3863
  get serverErrors(): string[] | null;
@@ -3766,9 +3867,25 @@ declare class EfInputTextComponent extends AbstractEfFormControl implements Cont
3766
3867
  registerOnTouched(fn: () => void): void;
3767
3868
  setDisabledState(isDisabled: boolean): void;
3768
3869
  handleInput(value: string): void;
3870
+ /** Set once the field itself has had focus; see {@link insertAtSelection}. */
3871
+ private wasFocused;
3872
+ protected markFocused(event: FocusEvent): void;
3873
+ /**
3874
+ * Inserts `text` at the caret (replacing a selection), or at the end when
3875
+ * the field was never focused, then puts the caret after it. Emits the
3876
+ * change once, exactly as typing would. Does nothing when read-only or
3877
+ * disabled, and refuses the whole insert when the result would pass
3878
+ * `maxlength` (a cut placeholder token is worse than none).
3879
+ *
3880
+ * The value is written programmatically, so the browser's undo history for
3881
+ * the field is reset and no DOM `input` event fires; the form control
3882
+ * (`onChange`) and `valueChangeEvent` are the contract.
3883
+ */
3884
+ insertAtCursor(text: string): void;
3885
+ private nativeField;
3769
3886
  handleBlur(): void;
3770
3887
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EfInputTextComponent, never>;
3771
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfInputTextComponent, "ef-input-text", never, { "size": { "alias": "size"; "required": false; }; "type": { "alias": "type"; "required": false; }; "maxlength": { "alias": "maxlength"; "required": false; }; "fluid": { "alias": "fluid"; "required": false; }; "inline": { "alias": "inline"; "required": false; }; "autocomplete": { "alias": "autocomplete"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "prefix": { "alias": "prefix"; "required": false; }; "suffix": { "alias": "suffix"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, { "valueChangeEvent": "valueChangeEvent"; }, never, never, true, never>;
3888
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfInputTextComponent, "ef-input-text", never, { "size": { "alias": "size"; "required": false; }; "type": { "alias": "type"; "required": false; }; "maxlength": { "alias": "maxlength"; "required": false; }; "fluid": { "alias": "fluid"; "required": false; }; "inline": { "alias": "inline"; "required": false; }; "autocomplete": { "alias": "autocomplete"; "required": false; }; "dir": { "alias": "dir"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "prefix": { "alias": "prefix"; "required": false; }; "suffix": { "alias": "suffix"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, { "valueChangeEvent": "valueChangeEvent"; }, never, never, true, never>;
3772
3889
  static ngAcceptInputType_fluid: unknown;
3773
3890
  static ngAcceptInputType_inline: unknown;
3774
3891
  }
@@ -4356,6 +4473,15 @@ declare class EfPasswordComponent extends AbstractEfFormControl implements Contr
4356
4473
  toggleMask: boolean;
4357
4474
  feedback: boolean;
4358
4475
  autocomplete?: string;
4476
+ /**
4477
+ * Rendering variant, as `ef-input-text`. `'comptoir'` skins the PrimeNG
4478
+ * input to the native `.ef-input` look (--hit-field height, --r-md radius,
4479
+ * 12px padding, --paper-alt fill) so it lines up with the comptoir inputs
4480
+ * beside it; the show/hide toggle becomes a --hit-field square target.
4481
+ * `'primeng'` (default) keeps the stock PrimeNG look.
4482
+ */
4483
+ variant: 'primeng' | 'comptoir';
4484
+ get fieldStyleClass(): string;
4359
4485
  /**
4360
4486
  * Take focus on load. Bound explicitly rather than left unset: PrimeNG's
4361
4487
  * AutoFocus directive tests `autofocus === false`, and the control declares
@@ -4371,6 +4497,7 @@ declare class EfPasswordComponent extends AbstractEfFormControl implements Contr
4371
4497
  private onChange;
4372
4498
  private onTouched;
4373
4499
  readonly ngControl: NgControl | null;
4500
+ private readonly host;
4374
4501
  constructor();
4375
4502
  get showRequired(): boolean;
4376
4503
  get serverErrors(): string[] | null;
@@ -4385,7 +4512,7 @@ declare class EfPasswordComponent extends AbstractEfFormControl implements Contr
4385
4512
  handleChange(value: string): void;
4386
4513
  handleBlur(): void;
4387
4514
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EfPasswordComponent, never>;
4388
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfPasswordComponent, "ef-password", never, { "size": { "alias": "size"; "required": false; }; "fluid": { "alias": "fluid"; "required": false; }; "inline": { "alias": "inline"; "required": false; }; "toggleMask": { "alias": "toggleMask"; "required": false; }; "feedback": { "alias": "feedback"; "required": false; }; "autocomplete": { "alias": "autocomplete"; "required": false; }; "autofocus": { "alias": "autofocus"; "required": false; }; }, { "valueChangeEvent": "valueChangeEvent"; }, never, never, true, never>;
4515
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfPasswordComponent, "ef-password", never, { "size": { "alias": "size"; "required": false; }; "fluid": { "alias": "fluid"; "required": false; }; "inline": { "alias": "inline"; "required": false; }; "toggleMask": { "alias": "toggleMask"; "required": false; }; "feedback": { "alias": "feedback"; "required": false; }; "autocomplete": { "alias": "autocomplete"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "autofocus": { "alias": "autofocus"; "required": false; }; }, { "valueChangeEvent": "valueChangeEvent"; }, never, never, true, never>;
4389
4516
  static ngAcceptInputType_fluid: unknown;
4390
4517
  static ngAcceptInputType_inline: unknown;
4391
4518
  static ngAcceptInputType_toggleMask: unknown;
@@ -5243,6 +5370,14 @@ declare class EfDataCardComponent<TRow = any> implements AfterContentInit {
5243
5370
  headerTemplate(columnId: string): TemplateRef<unknown> | undefined;
5244
5371
  /** Pluck `column.field` (or `column.id`) from a row, dotted-path safe. */
5245
5372
  cellValue(row: TRow, col: EfDataCardColumn): unknown;
5373
+ /**
5374
+ * Whether a cell has anything to show. The mobile secondary line joins its
5375
+ * parts with a "·" drawn before every part but the first, so an empty part
5376
+ * left a dangling separator; skipping it keeps separators between present
5377
+ * values only. A column with a custom body template is always present (the
5378
+ * template decides what to render); a boolean always renders a glyph.
5379
+ */
5380
+ hasCellContent(row: TRow, col: EfDataCardColumn): boolean;
5246
5381
  headerAlignClass(col: EfDataCardColumn): string;
5247
5382
  cellAlignClass(col: EfDataCardColumn): string;
5248
5383
  /** Sort indicator: '↑' / '↓' / '' for the given column. */
@@ -6187,6 +6322,7 @@ declare class EfTextareaComponent extends AbstractEfFormControl implements Contr
6187
6322
  private onChange;
6188
6323
  private onTouched;
6189
6324
  readonly ngControl: NgControl | null;
6325
+ private readonly hostRef;
6190
6326
  constructor();
6191
6327
  get isInvalid(): boolean;
6192
6328
  get serverErrors(): string[] | null;
@@ -6196,6 +6332,22 @@ declare class EfTextareaComponent extends AbstractEfFormControl implements Contr
6196
6332
  registerOnTouched(fn: () => void): void;
6197
6333
  setDisabledState(isDisabled: boolean): void;
6198
6334
  handleInput(value: string): void;
6335
+ /** Set once the field itself has had focus; see {@link insertAtSelection}. */
6336
+ private wasFocused;
6337
+ protected markFocused(event: FocusEvent): void;
6338
+ /**
6339
+ * Inserts `text` at the caret (replacing a selection), or at the end when
6340
+ * the field was never focused, then puts the caret after it. Emits the
6341
+ * change once, exactly as typing would. Does nothing when read-only or
6342
+ * disabled, and refuses the whole insert when the result would pass
6343
+ * `maxlength` (a cut placeholder token is worse than none).
6344
+ *
6345
+ * The value is written programmatically, so the browser's undo history for
6346
+ * the field is reset and no DOM `input` event fires; the form control
6347
+ * (`onChange`) and `valueChangeEvent` are the contract.
6348
+ */
6349
+ insertAtCursor(text: string): void;
6350
+ private nativeField;
6199
6351
  handleBlur(): void;
6200
6352
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EfTextareaComponent, never>;
6201
6353
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfTextareaComponent, "ef-textarea", never, { "rows": { "alias": "rows"; "required": false; }; "maxlength": { "alias": "maxlength"; "required": false; }; "autofocus": { "alias": "autofocus"; "required": false; }; "mono": { "alias": "mono"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, { "valueChangeEvent": "valueChangeEvent"; }, never, never, true, never>;
@@ -6432,6 +6584,11 @@ declare class EfDatepickerAdvancedComponent extends AbstractEfFormControl implem
6432
6584
  private readonly vcr;
6433
6585
  private readonly destroyRef;
6434
6586
  private readonly cdr;
6587
+ private readonly viewport;
6588
+ /** The one picker whose panel is open on the page, if any. A click on
6589
+ * another picker's trigger never reaches the document (the trigger
6590
+ * stops it), so opening a picker closes this one explicitly. */
6591
+ private static openPicker;
6435
6592
  /**
6436
6593
  * Self-injected form control (present only when the consumer binds
6437
6594
  * `[(ngModel)]` / `formControlName` in field mode). We register as its
@@ -6448,7 +6605,19 @@ declare class EfDatepickerAdvancedComponent extends AbstractEfFormControl implem
6448
6605
  /** Active embedded view + its root node, while the panel is open. */
6449
6606
  private panelView;
6450
6607
  private panelRoot;
6451
- private resizeHandler;
6608
+ /** Every root node the panel template rendered (the sheet backdrop too). */
6609
+ private portalNodes;
6610
+ private repositionListener;
6611
+ private resizeObserver;
6612
+ private repositionFrame;
6613
+ /** Phone width (EfViewportService, <= 767px): the panel opens as a
6614
+ * full-width bottom sheet with 48px targets instead of a popover. */
6615
+ readonly sheet: _angular_core.Signal<boolean>;
6616
+ /** The dialog's accessible name: the field's own label in field mode
6617
+ * (the panel no longer repeats it as a visible title), else the
6618
+ * trigger label. */
6619
+ readonly panelLabelKey: _angular_core.Signal<string>;
6620
+ readonly panelLabel: _angular_core.Signal<string>;
6452
6621
  constructor();
6453
6622
  ngAfterViewInit(): void;
6454
6623
  /** Trigger left-side label (translation key). Default: `'filter_date'`. */
@@ -6566,6 +6735,19 @@ declare class EfDatepickerAdvancedComponent extends AbstractEfFormControl implem
6566
6735
  /** Du / Au inputs as DD/MM/YYYY strings (kept in sync with drafts). */
6567
6736
  readonly fromText: _angular_core.Signal<string>;
6568
6737
  readonly toText: _angular_core.Signal<string>;
6738
+ /** Bumps whenever the language or its translations change, so the
6739
+ * placeholder below re-reads the dictionary. */
6740
+ private readonly i18nTick;
6741
+ /**
6742
+ * Placeholder of the typed-date inputs. The parser takes ASCII digits
6743
+ * only, day first (`\d` and the keydown filter are [0-9/]), so the hint
6744
+ * spells that order in the reader's terms, in Latin letters: `JJ/MM/AAAA`
6745
+ * for French, `DD/MM/YYYY` otherwise, Arabic included. An Arabic-word
6746
+ * pattern (يوم/شهر/سنة) would lay out right to left, the reverse of the
6747
+ * digits the user then types. An app can override it per language with
6748
+ * the `date_input_placeholder` key.
6749
+ */
6750
+ readonly datePlaceholder: _angular_core.Signal<string>;
6569
6751
  /** Committed value pushed in via `writeValue` / day-pick / Apply. */
6570
6752
  private readonly fieldValue;
6571
6753
  /** Committed start / end derived from `fieldValue`. */
@@ -6627,8 +6809,19 @@ declare class EfDatepickerAdvancedComponent extends AbstractEfFormControl implem
6627
6809
  /** Commit a typed `HH:mm` value to the start or end draft time. */
6628
6810
  commitTimeInput(which: 'start' | 'end', el: HTMLInputElement): void;
6629
6811
  toggle(event: MouseEvent): void;
6630
- close(): void;
6812
+ /**
6813
+ * Close the panel. `returnFocus` puts focus back on the trigger; Escape
6814
+ * and a commit pass it, so a keyboard user is not dropped on <body>
6815
+ * when the panel's DOM goes. An outside click or another picker opening
6816
+ * does not, since the user has just put focus somewhere else.
6817
+ */
6818
+ close(returnFocus?: boolean): void;
6819
+ /** The trigger sits behind an `@if` (field box or pill), so find it now. */
6820
+ private focusTrigger;
6631
6821
  onDocumentClick(event: MouseEvent): void;
6822
+ /** The phone sheet is aria-modal, so Tab wraps inside it instead of
6823
+ * reaching the page behind the backdrop. */
6824
+ onTab(event: KeyboardEvent): void;
6632
6825
  onEscape(): void;
6633
6826
  selectPreset(preset: EfDatePreset): void;
6634
6827
  isActivePreset(key: EfDatePresetKey): boolean;
@@ -6652,12 +6845,22 @@ declare class EfDatepickerAdvancedComponent extends AbstractEfFormControl implem
6652
6845
  commitDateInput(which: 'start' | 'end', el: HTMLInputElement): void;
6653
6846
  private attachPortal;
6654
6847
  private detachPortal;
6655
- /** Anchor the panel's top-left to the trigger's bottom-left, using
6656
- * page coords so the panel scrolls with the trigger naturally.
6657
- * Flips to right-aligned (and clamps to the viewport) when the
6658
- * default left-anchor would overflow the right edge — otherwise the
6659
- * panel is clipped for triggers that sit near the right of the page. */
6848
+ /** The sheet is modal and sits at the end of <body>, far from the
6849
+ * trigger in tab order, so focus moves into it: the picked day, else
6850
+ * today, else the first day of the month. A day, not the date input,
6851
+ * which would raise the on-screen keyboard over the calendar. */
6852
+ private focusIntoSheet;
6853
+ private schedulePosition;
6854
+ /** Place the popover against the trigger (see `placeDpPanel`). Sizes
6855
+ * come from offsetWidth / scrollHeight, not getBoundingClientRect:
6856
+ * the entry animation scales the panel, and scrollHeight still tells
6857
+ * the natural height once a previous placement capped it. */
6660
6858
  private positionPanel;
6859
+ /** The trigger button's box, not the wrapper's: the wrapper also holds
6860
+ * the label above and the error text below. */
6861
+ private triggerRect;
6862
+ /** The nearest `dir` wins (the app sets it on <html>); computed style covers a page without one. */
6863
+ private isRtl;
6661
6864
  /** Click handling: 1st click sets start, 2nd click sets end (or swap).
6662
6865
  * Field single-date mode short-circuits — one click commits & closes. */
6663
6866
  selectDay(day: Date): void;
@@ -6900,5 +7103,5 @@ declare class EfEmailMetricsCardComponent {
6900
7103
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfEmailMetricsCardComponent, "ef-email-metrics-card", never, { "metrics": { "alias": "metrics"; "required": false; "isSignal": true; }; "recentEvents": { "alias": "recentEvents"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; }, { "rangeChange": "rangeChange"; }, never, never, true, never>;
6901
7104
  }
6902
7105
 
6903
- export { EF_BADGE_BG_COLORS, EF_BADGE_BG_LIGHT_COLORS, EF_BADGE_BORDER_COLORS, EF_BADGE_DEFAULTS, EF_BADGE_TEXT_COLORS, EF_CHART_PALETTE, EF_DATATABLE_ACTIONS_DEFAULTS, EF_DATATABLE_COLUMN_DEFAULTS, EF_DATATABLE_DEFAULTS, EF_DATA_CARD_MOBILE_LAYOUT, EF_SEO_DEFAULT_LOCALES, EF_STATUS_COLORS, EF_STATUS_COLOR_ALIASES, EfAboutDialogComponent, EfActivationFilterComponent, EfAppMainComponent, EfAppShellComponent, EfAppShellMobileComponent, EfAppTopComponent, EfBadgeComponent, EfBlockUiComponent, EfBlockableDivComponent, EfBottomSheetComponent, EfBuildStampComponent, EfBulkBarComponent, EfButtonComponent, EfButtonGroupComponent, EfCardComponent, EfChangeHistoryComponent, EfChangePasswordComponent, EfChartComponent, EfCheckboxComponent, EfClearButtonComponent, EfColumnHeaderTemplateDirective, EfColumnTemplateDirective, EfCompactPipe, EfConfirmDialogComponent, EfCurrencyPipe, EfDataCardComponent, EfDatatableActionBarComponent, EfDatatableComponent, EfDatepickerAdvancedComponent, EfDatepickerComponent, EfDetailToolbarComponent, EfDialogComponent, EfEmailMetricsCardComponent, EfEmptyStateComponent, EfFabComponent, EfFieldsetComponent, EfFileUploadComponent, EfFilterDrawerComponent, EfFilterPillComponent, EfFormGridComponent, EfIdentityThumbComponent, EfInputNumberComponent, EfInputTextComponent, EfKpiCardComponent, EfLabelComponent, EfModuleRailComponent, EfModuleSideComponent, EfMultiSelectComponent, EfOrderBuilderComponent, EfOrderSummaryComponent, EfOverflowTooltipDirective, EfPagerComponent, EfPasswordComponent, EfPdfPreviewComponent, EfPillGroupComponent, EfPresetPillComponent, EfPriceDisplayComponent, EfProductCatalogueComponent, EfProductCatalogueFilterComponent, EfProductPickerComponent, EfProductTypeaheadComponent, EfProfileChipComponent, EfProfileMenuComponent, EfPulseComponent, EfQuantitySelectorComponent, EfQuantityStepperComponent, EfRadioComponent, EfRankListComponent, EfReadOnlyDirective, EfRowActionsComponent, EfSearchToolbarComponent, EfSelectButtonComponent, EfSelectComponent, EfSeoFieldsComponent, EfSeoPreviewComponent, EfServerErrorsDirective, EfSessionIdleDialogComponent, EfShortcutsDialogComponent, EfSkeletonComponent, EfSmartBarComponent, EfStatsComponent, EfStatusChipComponent, EfTabPanelDirective, EfTabsComponent, EfTextareaComponent, EfThemeConfiguratorComponent, EfThemeToggleComponent, EfTimelineComponent, EfToastRegionComponent, EfToggleSwitchComponent, EfToolbarComponent, EfTooltipDirective, EfTotalsComponent, OrderEntityHelper, OrderLineItemHelper, TruncatePipe, buildChartConfig, defaultUnitPrice, getColumnAlignment, mergeColumnDefaults, resolveEfStatusColor };
6904
- export type { CatalogueProduct, CatalogueProductVariant, CategoryAssignment, CategoryGroup, CategoryItem, DatatableSearchEntity, DocumentConfig, EfAboutServer, EfBadgeColor, EfBadgeConfig, EfBadgeSize, EfBadgeVariant, EfButtonComptoirSeverity, EfButtonPrimeNGSeverity, EfButtonSeverity, EfChangeHistoryEntry, EfChangeHistoryFieldChange, EfChangePasswordSubmit, EfChartSeries, EfChartType, EfDataCardMobileLayout, EfDataCardRowAction, EfDataCardRowActionState, EfDatatableActions, EfDatatableColumn, EfDatatableColumnAlign, EfDatatableColumnType, EfDatatableConfig, EfDateFieldOutput, EfDateFieldValue, EfDatePreset, EfDialogAction, EfDialogSeverity, EfDialogSize, EfFabPosition, EfFileRejectReason, EfFileRejection, EfIdentityThumbSize, EfKpiDeltaTone, EfKpiSparkline, EfOrderPriceList, EfOrderRecipient, EfPillItem, EfPresetItem, EfProductPickerItem, EfProductPickerQuery, EfProfileMenuItem, EfRankRow, EfRowAction, EfSeoLocale, EfSeoPatch, EfSkeletonVariant, EfStatsRow, EfStatusColor, EfStatusReferenceItem, EfTabItem, EfTabsModule, EfTabsVariant, EfTimelineItem, EfTimelineState, EfToastRegionPosition, EfTotalsGrand, EfTotalsRow, HighlightSegment, OrderChangeInfo, OrderEntity, OrderLineItem, OrderProductsSummary, OrderSummaryItem, ProductCountGroup, ProductCountGroupLabel, ProductTypeaheadRow, ProductTypeaheadSelection, ProductWithCountGroup, SelectedFilter, ValidationResult };
7106
+ export { EF_BADGE_BG_COLORS, EF_BADGE_BG_LIGHT_COLORS, EF_BADGE_BORDER_COLORS, EF_BADGE_DEFAULTS, EF_BADGE_TEXT_COLORS, EF_CHART_PALETTE, EF_DATATABLE_ACTIONS_DEFAULTS, EF_DATATABLE_COLUMN_DEFAULTS, EF_DATATABLE_DEFAULTS, EF_DATA_CARD_MOBILE_LAYOUT, EF_HTML_PREVIEW_DEFAULT_TITLE_KEY, EF_SEO_DEFAULT_LOCALES, EF_STATUS_COLORS, EF_STATUS_COLOR_ALIASES, EfAboutDialogComponent, EfActivationFilterComponent, EfAppMainComponent, EfAppShellComponent, EfAppShellMobileComponent, EfAppTopComponent, EfBadgeComponent, EfBlockUiComponent, EfBlockableDivComponent, EfBottomSheetComponent, EfBuildStampComponent, EfBulkBarComponent, EfButtonComponent, EfButtonGroupComponent, EfCardComponent, EfChangeHistoryComponent, EfChangePasswordComponent, EfChartComponent, EfCheckboxComponent, EfClearButtonComponent, EfColumnHeaderTemplateDirective, EfColumnTemplateDirective, EfCompactPipe, EfConfirmDialogComponent, EfCurrencyPipe, EfDataCardComponent, EfDatatableActionBarComponent, EfDatatableComponent, EfDatepickerAdvancedComponent, EfDatepickerComponent, EfDetailToolbarComponent, EfDialogComponent, EfEmailMetricsCardComponent, EfEmptyStateComponent, EfFabComponent, EfFieldsetComponent, EfFileUploadComponent, EfFilterDrawerComponent, EfFilterPillComponent, EfFormGridComponent, EfHtmlPreviewComponent, EfIdentityThumbComponent, EfInputNumberComponent, EfInputTextComponent, EfKpiCardComponent, EfLabelComponent, EfModuleRailComponent, EfModuleSideComponent, EfMultiSelectComponent, EfOrderBuilderComponent, EfOrderSummaryComponent, EfOverflowTooltipDirective, EfPagerComponent, EfPasswordComponent, EfPdfPreviewComponent, EfPillGroupComponent, EfPresetPillComponent, EfPriceDisplayComponent, EfProductCatalogueComponent, EfProductCatalogueFilterComponent, EfProductPickerComponent, EfProductTypeaheadComponent, EfProfileChipComponent, EfProfileMenuComponent, EfPulseComponent, EfQuantitySelectorComponent, EfQuantityStepperComponent, EfRadioComponent, EfRankListComponent, EfReadOnlyDirective, EfRowActionsComponent, EfSearchToolbarComponent, EfSelectButtonComponent, EfSelectComponent, EfSeoFieldsComponent, EfSeoPreviewComponent, EfServerErrorsDirective, EfSessionIdleDialogComponent, EfShortcutsDialogComponent, EfSkeletonComponent, EfSmartBarComponent, EfStatsComponent, EfStatusChipComponent, EfTabPanelDirective, EfTabsComponent, EfTextareaComponent, EfThemeConfiguratorComponent, EfThemeToggleComponent, EfTimelineComponent, EfToastRegionComponent, EfToggleSwitchComponent, EfToolbarComponent, EfTooltipDirective, EfTotalsComponent, OrderEntityHelper, OrderLineItemHelper, TruncatePipe, buildChartConfig, defaultUnitPrice, getColumnAlignment, mergeColumnDefaults, resolveEfStatusColor };
7107
+ export type { CatalogueProduct, CatalogueProductVariant, CategoryAssignment, CategoryGroup, CategoryItem, DatatableSearchEntity, DocumentConfig, EfAboutServer, EfBadgeColor, EfBadgeConfig, EfBadgeSize, EfBadgeVariant, EfButtonComptoirSeverity, EfButtonPrimeNGSeverity, EfButtonSeverity, EfChangeHistoryEntry, EfChangeHistoryFieldChange, EfChangeHistoryValueItem, EfChangePasswordSubmit, EfChartSeries, EfChartType, EfDataCardMobileLayout, EfDataCardRowAction, EfDataCardRowActionState, EfDatatableActions, EfDatatableColumn, EfDatatableColumnAlign, EfDatatableColumnType, EfDatatableConfig, EfDateFieldOutput, EfDateFieldValue, EfDatePreset, EfDialogAction, EfDialogSeverity, EfDialogSize, EfFabPosition, EfFileRejectReason, EfFileRejection, EfIdentityThumbSize, EfKpiDeltaTone, EfKpiSparkline, EfOrderPriceList, EfOrderRecipient, EfPillItem, EfPresetItem, EfProductPickerItem, EfProductPickerQuery, EfProfileMenuItem, EfRankRow, EfRowAction, EfSeoLocale, EfSeoPatch, EfSkeletonVariant, EfStatsRow, EfStatusColor, EfStatusReferenceItem, EfTabItem, EfTabsModule, EfTabsVariant, EfTimelineItem, EfTimelineState, EfToastRegionPosition, EfTotalsGrand, EfTotalsRow, HighlightSegment, OrderChangeInfo, OrderEntity, OrderLineItem, OrderProductsSummary, OrderSummaryItem, ProductCountGroup, ProductCountGroupLabel, ProductTypeaheadRow, ProductTypeaheadSelection, ProductWithCountGroup, SelectedFilter, ValidationResult };