@elasticias/ui 1.0.54 → 1.0.55
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/fesm2022/elasticias-ui.mjs +328 -52
- package/fesm2022/elasticias-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/elasticias-ui.d.ts +183 -22
package/package.json
CHANGED
package/types/elasticias-ui.d.ts
CHANGED
|
@@ -2263,6 +2263,10 @@ interface EfTabItem<T = string> {
|
|
|
2263
2263
|
/** Translation key of a short note after the label (`'missing'`). It is
|
|
2264
2264
|
* part of the tab's accessible name, so it says what the dot cannot. */
|
|
2265
2265
|
noteKey?: string;
|
|
2266
|
+
/** Translation key of a small chip after the note (`'customized'`): a
|
|
2267
|
+
* state of the panel worth seeing from the tab row. Part of the tab's
|
|
2268
|
+
* accessible name, like the note. */
|
|
2269
|
+
badgeKey?: string;
|
|
2266
2270
|
/** `'danger'` draws the tab in the error status colour: a required panel
|
|
2267
2271
|
* left empty, or a panel holding server errors. */
|
|
2268
2272
|
tone?: 'danger';
|
|
@@ -3380,12 +3384,45 @@ declare class EfTimelineComponent {
|
|
|
3380
3384
|
interface OpMeta {
|
|
3381
3385
|
cls: string;
|
|
3382
3386
|
}
|
|
3387
|
+
/**
|
|
3388
|
+
* The i18n key segment of a backend entity type: PascalCase to snake_case,
|
|
3389
|
+
* an acronym kept as one word. `Product` gives `product`, `EmailTemplate`
|
|
3390
|
+
* gives `email_template`, `POSSession` gives `pos_session`; a segment
|
|
3391
|
+
* already in snake_case is kept.
|
|
3392
|
+
*/
|
|
3393
|
+
declare function auditEntityKeySegment(entityType: string): string;
|
|
3383
3394
|
/**
|
|
3384
3395
|
* Standardized change-history box. Drop it on any detail screen and feed it the
|
|
3385
3396
|
* record's audit entries (from `GET /api/audit/{entityType}/{id}` via the NSwag
|
|
3386
3397
|
* `AuditClient`). Renders a vertical timeline inside an {@link EfCardComponent},
|
|
3387
3398
|
* resolving operation labels through `audit_op_*` i18n keys and field labels
|
|
3388
|
-
* through `audit_field_*` (falling back to the
|
|
3399
|
+
* through `audit_field_*` (falling back to the humanized field path when
|
|
3400
|
+
* unmapped).
|
|
3401
|
+
*
|
|
3402
|
+
* **Field labels.** For a field path (dots become `_` in the key) the box
|
|
3403
|
+
* tries, in order:
|
|
3404
|
+
*
|
|
3405
|
+
* 1. `audit_field_<entity>_<field>`, when `entityType` is set, with the type
|
|
3406
|
+
* converted by {@link auditEntityKeySegment} (`EmailTemplate` gives
|
|
3407
|
+
* `email_template`); the field keeps its camelCase (`htmlBody`), as
|
|
3408
|
+
* `ChangeDiff` records it;
|
|
3409
|
+
* 2. `audit_field_<field>`;
|
|
3410
|
+
* 3. when the last segment (`notes.ar`, as ChangeDiff writes a
|
|
3411
|
+
* LocalizedText) or, for older entries, the first segment (`fr.subject`)
|
|
3412
|
+
* is a known culture: the label of the rest of the path, found by steps 1
|
|
3413
|
+
* and 2 or humanized, then the culture's name in brackets: "Notes
|
|
3414
|
+
* olfactives (Arabe)". A culture is known when the app's bundle has
|
|
3415
|
+
* `ef_localized_input_culture_<xx>`, the key that also names it. The
|
|
3416
|
+
* bundle, not `EF_CONTENT_CULTURES`, decides, because a history outlives
|
|
3417
|
+
* the tenant's current culture list: a language the tenant dropped still
|
|
3418
|
+
* labels its old entries. Any other two-letter segment (`dimensions.cm`)
|
|
3419
|
+
* is part of the path;
|
|
3420
|
+
* 4. the humanized path (`clientCode` gives "Client code").
|
|
3421
|
+
*
|
|
3422
|
+
* So one `audit_field_product_notes` key labels every language of
|
|
3423
|
+
* `Product.Notes`, and an entity can name a field differently from the
|
|
3424
|
+
* global key used by others. On a V2 detail screen bind
|
|
3425
|
+
* `[entityType]="auditEntityType()"`.
|
|
3389
3426
|
*
|
|
3390
3427
|
* ```html
|
|
3391
3428
|
* <ef-change-history [entries]="auditEntries()" />
|
|
@@ -3426,6 +3463,10 @@ declare class EfChangeHistoryComponent {
|
|
|
3426
3463
|
* or null to keep the raw note. Rendered as plain text (never HTML). A
|
|
3427
3464
|
* screen uses it to translate coded notes such as `order_email_resent:order_confirmed`. */
|
|
3428
3465
|
readonly noteFormatter: _angular_core.InputSignal<((note: string) => string | null) | null>;
|
|
3466
|
+
/** The backend entity type (`ScreenConfig.AUDIT_ENTITY_TYPE`, e.g.
|
|
3467
|
+
* `EmailTemplate`), for the entity's own `audit_field_<entity>_<field>`
|
|
3468
|
+
* labels. Unset uses the global keys only. */
|
|
3469
|
+
readonly entityType: _angular_core.InputSignal<string | null | undefined>;
|
|
3429
3470
|
/** "Show more" dialog visibility. */
|
|
3430
3471
|
readonly dialogVisible: _angular_core.WritableSignal<boolean>;
|
|
3431
3472
|
/** First `previewLimit` rows shown inline in the card. */
|
|
@@ -3442,11 +3483,15 @@ declare class EfChangeHistoryComponent {
|
|
|
3442
3483
|
meta: OpMeta;
|
|
3443
3484
|
operationLabel: string;
|
|
3444
3485
|
}[]>;
|
|
3445
|
-
/** Resolve a field
|
|
3446
|
-
* OPTIONAL
|
|
3447
|
-
*
|
|
3448
|
-
*
|
|
3486
|
+
/** Resolve a field path to its label (order in the class docs). Keys are
|
|
3487
|
+
* OPTIONAL: without one the path is humanized (`clientCode` gives
|
|
3488
|
+
* "Client code"), so new fields work with zero i18n maintenance. Add a
|
|
3489
|
+
* key only for a properly localized (fr/ar) term. */
|
|
3449
3490
|
fieldLabel(field: string | undefined): string;
|
|
3491
|
+
/** The culture's name from `ef_localized_input_culture_<code>`, or null when the bundle does not know it. */
|
|
3492
|
+
private cultureName;
|
|
3493
|
+
/** The entity key, then the global key, for a path; null when neither exists. */
|
|
3494
|
+
private lookupField;
|
|
3450
3495
|
/** The note as shown: the formatter's text, else the raw note. */
|
|
3451
3496
|
noteText(note: string | null | undefined): string;
|
|
3452
3497
|
/** Display value for a field's raw value: the matching list item's label
|
|
@@ -3461,7 +3506,7 @@ declare class EfChangeHistoryComponent {
|
|
|
3461
3506
|
* registration (the app's default locale is fr-MA). */
|
|
3462
3507
|
formatWhen(value: string | Date | null | undefined): string;
|
|
3463
3508
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EfChangeHistoryComponent, never>;
|
|
3464
|
-
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>;
|
|
3509
|
+
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; }; "entityType": { "alias": "entityType"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3465
3510
|
}
|
|
3466
3511
|
|
|
3467
3512
|
/**
|
|
@@ -6516,6 +6561,15 @@ declare class EfSeoFieldsComponent {
|
|
|
6516
6561
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfSeoFieldsComponent, "ef-seo-fields", never, { "seoTitle": { "alias": "seoTitle"; "required": false; "isSignal": true; }; "seoDescription": { "alias": "seoDescription"; "required": false; "isSignal": true; }; "fallbackTitle": { "alias": "fallbackTitle"; "required": false; "isSignal": true; }; "fallbackDescription": { "alias": "fallbackDescription"; "required": false; "isSignal": true; }; "previewUrl": { "alias": "previewUrl"; "required": false; "isSignal": true; }; "titleMax": { "alias": "titleMax"; "required": false; "isSignal": true; }; "descriptionMax": { "alias": "descriptionMax"; "required": false; "isSignal": true; }; "titleAdvised": { "alias": "titleAdvised"; "required": false; "isSignal": true; }; "descriptionAdvised": { "alias": "descriptionAdvised"; "required": false; "isSignal": true; }; "cultures": { "alias": "cultures"; "required": false; "isSignal": true; }; }, { "seoChange": "seoChange"; }, never, never, true, never>;
|
|
6517
6562
|
}
|
|
6518
6563
|
|
|
6564
|
+
/** What one input's tab for a culture would show; read by the input that draws a shared row. */
|
|
6565
|
+
interface EfLocalizedCultureFlags {
|
|
6566
|
+
/** Danger tone: a server error, or the required default culture left empty once touched. */
|
|
6567
|
+
readonly error: boolean;
|
|
6568
|
+
/** A server error under `<name>.<culture>` (what moves the shared culture). */
|
|
6569
|
+
readonly serverError: boolean;
|
|
6570
|
+
/** Edited since the value arrived. */
|
|
6571
|
+
readonly dirty: boolean;
|
|
6572
|
+
}
|
|
6519
6573
|
/**
|
|
6520
6574
|
* One owner-written text (a title, a description, an HTML body) in every
|
|
6521
6575
|
* content language: a pill tab per culture, the active culture's field below
|
|
@@ -6523,10 +6577,16 @@ declare class EfSeoFieldsComponent {
|
|
|
6523
6577
|
* (ADR-050 section 7).
|
|
6524
6578
|
*
|
|
6525
6579
|
* - **Cultures** come from `EF_CONTENT_CULTURES` (the ERP provides them from
|
|
6526
|
-
* the tenant profile) unless `cultures` is set. The active
|
|
6527
|
-
*
|
|
6528
|
-
* - **
|
|
6529
|
-
*
|
|
6580
|
+
* the tenant profile) unless `cultures` is set. The active culture starts
|
|
6581
|
+
* on the default and is two-way through `[(activeCulture)]`.
|
|
6582
|
+
* - **One tab row for several texts** (an email's subject and body): bind the
|
|
6583
|
+
* same signal to `[(activeCulture)]` on each and set `[showTabs]="false"`
|
|
6584
|
+
* on all but one, and list those in the row owner's `[linkedInputs]` so
|
|
6585
|
+
* the row also shows their error tone, required tone and dirty dot. A new
|
|
6586
|
+
* set of server errors moves the shared culture to the first culture in
|
|
6587
|
+
* error in the row's order.
|
|
6588
|
+
* - **Tabs** show the language name only (no "missing" note: an empty culture
|
|
6589
|
+
* is visible from its empty field), the error tone on the default culture of a `required` field left
|
|
6530
6590
|
* empty once the field is touched, changed or its form submitted, and the
|
|
6531
6591
|
* dirty dot on cultures edited since the value arrived. Dirty detection
|
|
6532
6592
|
* relies on the parent storing the emitted object by reference (the V2
|
|
@@ -6553,17 +6613,27 @@ declare class EfSeoFieldsComponent {
|
|
|
6553
6613
|
* - **Forms.** A ControlValueAccessor (`[formControl]`, `formControlName`,
|
|
6554
6614
|
* `[(ngModel)]`) as well as `[value]` + `(valueChangeEvent)`. With
|
|
6555
6615
|
* `required`, the form control reports `required` while the default culture
|
|
6556
|
-
* is empty
|
|
6616
|
+
* is empty, and once the field is touched, changed or submitted the default
|
|
6617
|
+
* culture's field shows `validation.required` and is `aria-invalid`.
|
|
6557
6618
|
* - **Server errors** (ADR-010) come from the enclosing `[efServerErrors]`
|
|
6558
6619
|
* scope. `<name>.<culture>` errors tint that culture's tab, show under its
|
|
6559
6620
|
* field while it is active (the field links itself by name) and, from another
|
|
6560
6621
|
* tab, show as a hint naming the languages in error; a new set of errors
|
|
6561
6622
|
* moves to the first of them. `<name>` errors, or an explicit `[errors]`,
|
|
6562
6623
|
* show under the field on every tab, as do errors for a language the field
|
|
6563
|
-
* does not list (`title.xx`)
|
|
6624
|
+
* does not list (`title.xx`), prefixed with that language's name (or its
|
|
6625
|
+
* code) through `ef_localized_input_error_in_culture`. Messages are
|
|
6626
|
+
* translated as keys. Keys: `ef_localized_input_errors_in_other`,
|
|
6627
|
+
* `ef_localized_input_error_in_culture`.
|
|
6628
|
+
* - **Counter.** With `advisedLength` it reads as advice through
|
|
6629
|
+
* `ef_localized_input_counter_advised` (`{{count}}`, `{{max}}`), so 5123 of
|
|
6630
|
+
* 5000 does not look like a cap; with `maxLength` alone it stays `n / max`.
|
|
6564
6631
|
* - **Spoken limit.** `counterHintKey` is read with the counter (through
|
|
6565
6632
|
* `aria-describedby`) and `counterOverKey` is announced politely when the
|
|
6566
|
-
* text passes the limit; both take `{{max}}`.
|
|
6633
|
+
* text passes the limit; both take `{{max}}`. On a field with several
|
|
6634
|
+
* cultures the announcement is prefixed with the culture's name through
|
|
6635
|
+
* `ef_localized_input_error_in_culture`, so `counterOverKey` should not
|
|
6636
|
+
* name it.
|
|
6567
6637
|
* - **Names.** Each culture's field is named `<name>.<culture>` (`title.ar`),
|
|
6568
6638
|
* the key the backend reports a per-culture error under.
|
|
6569
6639
|
*
|
|
@@ -6574,9 +6644,10 @@ declare class EfSeoFieldsComponent {
|
|
|
6574
6644
|
* | `ef_localized_input_culture_fr` | Français | الفرنسية | French |
|
|
6575
6645
|
* | `ef_localized_input_culture_ar` | Arabe | العربية | Arabic |
|
|
6576
6646
|
* | `ef_localized_input_culture_en` | Anglais | الإنجليزية | English |
|
|
6577
|
-
* | `ef_localized_input_missing` | manquant | غير مكتوب | missing |
|
|
6578
6647
|
* | `ef_localized_input_cultures` | Langues du texte | لغات النص | Text languages |
|
|
6579
6648
|
* | `ef_localized_input_errors_in_other` | Erreur dans : | خطأ في: | Error in: |
|
|
6649
|
+
* | `ef_localized_input_counter_advised` | {{count}} / {{max}} conseillés | {{count}} / {{max}} موصى بها | {{count}} / {{max}} advised |
|
|
6650
|
+
* | `ef_localized_input_error_in_culture` | {{culture}} : {{message}} | {{culture}}: {{message}} | {{culture}}: {{message}} |
|
|
6580
6651
|
* | `ef_localized_input_read_only_hint` | Ce texte se modifie ailleurs. | يُعدَّل هذا النص في مكان آخر. | This text is edited elsewhere. |
|
|
6581
6652
|
*
|
|
6582
6653
|
* ```html
|
|
@@ -6584,6 +6655,9 @@ declare class EfSeoFieldsComponent {
|
|
|
6584
6655
|
* [value]="product().title" (valueChangeEvent)="patch({ title: $event })"
|
|
6585
6656
|
* [advisedLength]="60" [maxLength]="256" />
|
|
6586
6657
|
*
|
|
6658
|
+
* <ef-localized-input name="subject" labelKey="email_subject" [maxLength]="200" [linkedInputs]="[body]" [(activeCulture)]="culture" ... />
|
|
6659
|
+
* <ef-localized-input #body name="htmlBody" labelKey="email_body" mode="html" [showTabs]="false" [(activeCulture)]="culture" ... />
|
|
6660
|
+
*
|
|
6587
6661
|
* <ef-localized-input name="title" [readOnlyCultures]="['fr']" ...>
|
|
6588
6662
|
* <a read-only-link [routerLink]="catalogLink()">{{ 'store_open_catalog' | translate }}</a>
|
|
6589
6663
|
* </ef-localized-input>
|
|
@@ -6625,6 +6699,42 @@ declare class EfLocalizedInputComponent implements ControlValueAccessor, DoCheck
|
|
|
6625
6699
|
readonly errors: _angular_core.InputSignal<string[] | null | undefined>;
|
|
6626
6700
|
/** Overrides the `EF_CONTENT_CULTURES` list for this field. */
|
|
6627
6701
|
readonly cultures: _angular_core.InputSignal<readonly EfCulture[] | undefined>;
|
|
6702
|
+
/**
|
|
6703
|
+
* The culture on show, two-way (`[(activeCulture)]`). `null` or a culture
|
|
6704
|
+
* the field does not list means the default; the field then writes back
|
|
6705
|
+
* the culture it settled on, so the parent always reads a listed code.
|
|
6706
|
+
* Bind one signal to several inputs to give them one tab row.
|
|
6707
|
+
*/
|
|
6708
|
+
readonly activeCulture: _angular_core.ModelSignal<string | null>;
|
|
6709
|
+
/**
|
|
6710
|
+
* Draws the culture tab row. Off for a field that follows another
|
|
6711
|
+
* field's row through a shared `activeCulture`: its culture is then
|
|
6712
|
+
* named to assistive tech through `aria-describedby` and the hint still
|
|
6713
|
+
* names the cultures in error. List it in the row owner's
|
|
6714
|
+
* `linkedInputs` so the row draws its error tone, required tone and
|
|
6715
|
+
* dirty dot too. Without tabs it never rewrites `activeCulture` to fit
|
|
6716
|
+
* its own culture list (it shows its own fallback instead), and it moves
|
|
6717
|
+
* the shared culture to its first culture in error only when no row
|
|
6718
|
+
* owner links it.
|
|
6719
|
+
*/
|
|
6720
|
+
readonly showTabs: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
6721
|
+
/**
|
|
6722
|
+
* On the input that draws the shared tab row: the inputs that follow it
|
|
6723
|
+
* (`[showTabs]="false"`), whose `cultureFlags` the row merges into its
|
|
6724
|
+
* tones and dots. A new set of server errors on any of them moves the
|
|
6725
|
+
* shared culture to the first culture in error in this row's order.
|
|
6726
|
+
* Badges stay this input's own. A template reference works forward:
|
|
6727
|
+
* `<ef-localized-input [linkedInputs]="[body]" ... /> <ef-localized-input #body [showTabs]="false" ... />`.
|
|
6728
|
+
*/
|
|
6729
|
+
readonly linkedInputs: _angular_core.InputSignal<readonly EfLocalizedInputComponent[]>;
|
|
6730
|
+
/** `html` mode only: the sanitised preview under the source. Off when
|
|
6731
|
+
* the screen renders its own preview (an email rendered by the server,
|
|
6732
|
+
* with its tokens filled in). */
|
|
6733
|
+
readonly preview: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
6734
|
+
/** A badge per culture tab, culture code to i18n key (`{ ar:
|
|
6735
|
+
* 'email_templates_customized' }`): a state of that language worth
|
|
6736
|
+
* seeing from the tab row. Drawn by the input that shows the tabs. */
|
|
6737
|
+
readonly tabBadges: _angular_core.InputSignal<Readonly<Record<string, string>>>;
|
|
6628
6738
|
/** The whole new object, trimmed, with blank cultures removed. */
|
|
6629
6739
|
readonly valueChangeEvent: _angular_core.OutputEmitterRef<Partial<Record<string, string>>>;
|
|
6630
6740
|
private readonly contentCultures;
|
|
@@ -6636,6 +6746,9 @@ declare class EfLocalizedInputComponent implements ControlValueAccessor, DoCheck
|
|
|
6636
6746
|
/** The editor's chunk failed to load (offline, a stale deploy). */
|
|
6637
6747
|
private readonly richFailed;
|
|
6638
6748
|
private readonly richHost;
|
|
6749
|
+
private richRef;
|
|
6750
|
+
private readonly textField;
|
|
6751
|
+
private readonly areaField;
|
|
6639
6752
|
/** `rich` without a provided editor renders the html source instead. */
|
|
6640
6753
|
protected readonly effectiveMode: _angular_core.Signal<"html" | "textarea" | "text" | "rich">;
|
|
6641
6754
|
private readonly parentForm;
|
|
@@ -6657,21 +6770,28 @@ declare class EfLocalizedInputComponent implements ControlValueAccessor, DoCheck
|
|
|
6657
6770
|
private readonly cleaned;
|
|
6658
6771
|
protected readonly list: _angular_core.Signal<readonly EfCulture[]>;
|
|
6659
6772
|
protected readonly defaultCode: _angular_core.Signal<string>;
|
|
6660
|
-
private readonly selected;
|
|
6661
6773
|
protected readonly active: _angular_core.Signal<EfCulture | undefined>;
|
|
6662
6774
|
/** The active culture's code: unlike active(), equal when an equal culture list arrives. */
|
|
6663
6775
|
private readonly activeCode;
|
|
6664
|
-
/** Server messages for the whole field (`title`)
|
|
6665
|
-
|
|
6776
|
+
/** Server messages for the whole field (`title`), and those of unlisted
|
|
6777
|
+
* cultures, translated here (never through the pipe a second time). */
|
|
6778
|
+
protected readonly fieldErrors: _angular_core.Signal<any[] | null>;
|
|
6666
6779
|
/** Every `<name>.<culture>` message the scope holds. */
|
|
6667
6780
|
private readonly allCultureErrors;
|
|
6668
6781
|
/** Server messages per language (`title.ar` gives `ar`), only for listed cultures. */
|
|
6669
6782
|
private readonly cultureErrors;
|
|
6670
|
-
/** Messages for a language this field does not list (`title.xx`): shown
|
|
6783
|
+
/** Messages for a language this field does not list (`title.xx`): shown
|
|
6784
|
+
* with the whole field, never dropped, prefixed with the culture
|
|
6785
|
+
* (`xx : message`) since no tab says which language they concern. */
|
|
6671
6786
|
private readonly unlistedErrors;
|
|
6672
6787
|
/** Bumps when texts change, so translated messages follow the language. */
|
|
6673
6788
|
private readonly textsVersion;
|
|
6674
|
-
/**
|
|
6789
|
+
/**
|
|
6790
|
+
* The active language's messages, translated once here for the field
|
|
6791
|
+
* below. Without one, a required default culture left empty says so
|
|
6792
|
+
* once the field is touched, changed or submitted (`validation.required`,
|
|
6793
|
+
* the family's message), which also sets `aria-invalid` on it.
|
|
6794
|
+
*/
|
|
6675
6795
|
protected readonly activeErrors: _angular_core.Signal<string[] | null>;
|
|
6676
6796
|
/** Cultures with a server error, in tab order. */
|
|
6677
6797
|
private readonly culturesInError;
|
|
@@ -6679,6 +6799,15 @@ declare class EfLocalizedInputComponent implements ControlValueAccessor, DoCheck
|
|
|
6679
6799
|
protected readonly errorsElsewhere: _angular_core.Signal<EfCulture[]>;
|
|
6680
6800
|
/** Changes only when the set of errors does, so a tab the user picked stays picked. */
|
|
6681
6801
|
private readonly errorSignature;
|
|
6802
|
+
/** How many row owners list this input in their `linkedInputs`. */
|
|
6803
|
+
private readonly linkedBy;
|
|
6804
|
+
/** Danger tone on the default culture: required, empty, and touched, changed or submitted. */
|
|
6805
|
+
private requiredTone;
|
|
6806
|
+
/**
|
|
6807
|
+
* What this input's tab would show for each culture it lists, read by
|
|
6808
|
+
* the input that draws a shared row (`linkedInputs`). Read-only.
|
|
6809
|
+
*/
|
|
6810
|
+
readonly cultureFlags: _angular_core.Signal<Readonly<Record<string, EfLocalizedCultureFlags>>>;
|
|
6682
6811
|
protected readonly tabItems: _angular_core.Signal<EfTabItem<string>[]>;
|
|
6683
6812
|
private readonly cvaDisabled;
|
|
6684
6813
|
/** Every culture is disabled: `[disabled]`, a form's `disable()`, or `[efReadOnly]`. */
|
|
@@ -6693,12 +6822,44 @@ declare class EfLocalizedInputComponent implements ControlValueAccessor, DoCheck
|
|
|
6693
6822
|
protected readonly activeLength: _angular_core.Signal<number>;
|
|
6694
6823
|
protected readonly labelId: string;
|
|
6695
6824
|
protected readonly counterLimit: _angular_core.Signal<number | undefined>;
|
|
6825
|
+
/**
|
|
6826
|
+
* The polite over-limit announcement: empty under the limit, else the
|
|
6827
|
+
* `counterOverKey` text, prefixed with the culture's name when the field
|
|
6828
|
+
* has more than one. Its text changes only with the (culture, over)
|
|
6829
|
+
* pair, so typing past the limit is announced once, and a switch to
|
|
6830
|
+
* another language that is also over is announced and names it.
|
|
6831
|
+
*/
|
|
6832
|
+
protected readonly overMessage: _angular_core.Signal<any>;
|
|
6696
6833
|
protected readonly panelId: string;
|
|
6697
6834
|
protected readonly counterId: string;
|
|
6835
|
+
/** The culture's name, read with a field that has no tab row. */
|
|
6836
|
+
protected readonly cultureNameId: string;
|
|
6837
|
+
/** Extra `aria-describedby` ids for the active field: the counter, and
|
|
6838
|
+
* the culture's name when no tab says it. */
|
|
6839
|
+
protected readonly describedByExtra: _angular_core.Signal<string>;
|
|
6698
6840
|
private onChange;
|
|
6699
6841
|
private touched;
|
|
6700
6842
|
constructor();
|
|
6701
6843
|
private createRich;
|
|
6844
|
+
/**
|
|
6845
|
+
* Inserts `text` (a `{{token}}`) into the culture on show, at the caret,
|
|
6846
|
+
* replacing a selection, or at the end when its field was never entered
|
|
6847
|
+
* or was just recreated by a culture switch; then emits the whole object
|
|
6848
|
+
* once, as typing would. Returns false, and changes nothing, when the
|
|
6849
|
+
* field is disabled, the culture is read-only, the result would pass
|
|
6850
|
+
* `maxLength`, there is no active field (no culture listed), or the
|
|
6851
|
+
* field is the rich editor (which has no insert yet). The field says
|
|
6852
|
+
* nothing itself on a refusal, so the caller should tell the user (a
|
|
6853
|
+
* toast such as "the variable would pass the length limit"); otherwise
|
|
6854
|
+
* a click on a variable silently does nothing.
|
|
6855
|
+
*
|
|
6856
|
+
* On a phone, the focus that follows the insert opens the keyboard.
|
|
6857
|
+
*
|
|
6858
|
+
* A caller tracking "the field last focused" should ignore focus on the
|
|
6859
|
+
* culture tabs (`[role="tab"]`): picking a language is not choosing where
|
|
6860
|
+
* the token goes.
|
|
6861
|
+
*/
|
|
6862
|
+
insertAtCaret(text: string): boolean;
|
|
6702
6863
|
protected tabId(code: string): string;
|
|
6703
6864
|
protected controlId(code: string): string;
|
|
6704
6865
|
protected select(code: string): void;
|
|
@@ -6713,7 +6874,7 @@ declare class EfLocalizedInputComponent implements ControlValueAccessor, DoCheck
|
|
|
6713
6874
|
registerOnTouched(fn: () => void): void;
|
|
6714
6875
|
setDisabledState(disabled: boolean): void;
|
|
6715
6876
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EfLocalizedInputComponent, never>;
|
|
6716
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfLocalizedInputComponent, "ef-localized-input", never, { "name": { "alias": "name"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "advisedLength": { "alias": "advisedLength"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "readOnlyCultures": { "alias": "readOnlyCultures"; "required": false; "isSignal": true; }; "labelKey": { "alias": "labelKey"; "required": false; "isSignal": true; }; "placeholderKey": { "alias": "placeholderKey"; "required": false; "isSignal": true; }; "hintKey": { "alias": "hintKey"; "required": false; "isSignal": true; }; "counterHintKey": { "alias": "counterHintKey"; "required": false; "isSignal": true; }; "counterOverKey": { "alias": "counterOverKey"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "cultures": { "alias": "cultures"; "required": false; "isSignal": true; }; }, { "valueChangeEvent": "valueChangeEvent"; }, never, ["[read-only-link]"], true, never>;
|
|
6877
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfLocalizedInputComponent, "ef-localized-input", never, { "name": { "alias": "name"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "advisedLength": { "alias": "advisedLength"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "readOnlyCultures": { "alias": "readOnlyCultures"; "required": false; "isSignal": true; }; "labelKey": { "alias": "labelKey"; "required": false; "isSignal": true; }; "placeholderKey": { "alias": "placeholderKey"; "required": false; "isSignal": true; }; "hintKey": { "alias": "hintKey"; "required": false; "isSignal": true; }; "counterHintKey": { "alias": "counterHintKey"; "required": false; "isSignal": true; }; "counterOverKey": { "alias": "counterOverKey"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "cultures": { "alias": "cultures"; "required": false; "isSignal": true; }; "activeCulture": { "alias": "activeCulture"; "required": false; "isSignal": true; }; "showTabs": { "alias": "showTabs"; "required": false; "isSignal": true; }; "linkedInputs": { "alias": "linkedInputs"; "required": false; "isSignal": true; }; "preview": { "alias": "preview"; "required": false; "isSignal": true; }; "tabBadges": { "alias": "tabBadges"; "required": false; "isSignal": true; }; }, { "activeCulture": "activeCultureChange"; "valueChangeEvent": "valueChangeEvent"; }, never, ["[read-only-link]"], true, never>;
|
|
6717
6878
|
}
|
|
6718
6879
|
|
|
6719
6880
|
/**
|
|
@@ -7422,5 +7583,5 @@ declare class EfEmailMetricsCardComponent {
|
|
|
7422
7583
|
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>;
|
|
7423
7584
|
}
|
|
7424
7585
|
|
|
7425
|
-
export { AbstractEfFormControl, 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_RICH_TEXT, 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, EfLocalizedInputComponent, 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, plainTextLength, resolveEfStatusColor };
|
|
7426
|
-
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 };
|
|
7586
|
+
export { AbstractEfFormControl, 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_RICH_TEXT, 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, EfLocalizedInputComponent, 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, auditEntityKeySegment, buildChartConfig, defaultUnitPrice, getColumnAlignment, mergeColumnDefaults, plainTextLength, resolveEfStatusColor };
|
|
7587
|
+
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, EfLocalizedCultureFlags, 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 };
|