diff --git a/libs/core/avatar/avatar.component.html b/libs/core/avatar/avatar.component.html index 3a62374d0a5..c5aca747dc2 100644 --- a/libs/core/avatar/avatar.component.html +++ b/libs/core/avatar/avatar.component.html @@ -1,21 +1,21 @@ -@if (abbreviate) { - {{ abbreviate }} +@if (abbreviate()) { + {{ abbreviate() }} } -@if (zoomGlyph || valueState) { +@if (zoomGlyph() || valueState()) { } -@if (glyph || showDefault) { +@if (glyph() || showDefault()) { }
diff --git a/libs/core/avatar/avatar.component.spec.ts b/libs/core/avatar/avatar.component.spec.ts index b9a4a9e974f..663c35abdb0 100644 --- a/libs/core/avatar/avatar.component.spec.ts +++ b/libs/core/avatar/avatar.component.spec.ts @@ -180,11 +180,11 @@ describe('AvatarComponent', () => { component.label = 'Jane Doe'; fixture.detectChanges(); await fixture.whenRenderingDone(); - expect(component.avatarComponent.abbreviate).toEqual('JD'); + expect(component.avatarComponent.abbreviate()).toEqual('JD'); component.label = 'Marjolein van Veen'; fixture.detectChanges(); - expect(component.avatarComponent.abbreviate).toEqual('MvV'); + expect(component.avatarComponent.abbreviate()).toEqual('MvV'); }); it('should add respective Value State Icons', () => { diff --git a/libs/core/avatar/avatar.component.ts b/libs/core/avatar/avatar.component.ts index 4e93c3dd580..ea45d33be1a 100644 --- a/libs/core/avatar/avatar.component.ts +++ b/libs/core/avatar/avatar.component.ts @@ -1,30 +1,36 @@ import { Attribute, + booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, + computed, + DestroyRef, + effect, ElementRef, - EventEmitter, - HostBinding, HostListener, - Input, + inject, + input, OnChanges, OnInit, - Output, + output, Renderer2, - ViewChild, + signal, + viewChild, ViewEncapsulation } from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { ANY_LANGUAGE_LETTERS_REGEX, + applyCssClass, ColorAccent, CssClassBuilder, + getRandomColorAccent, Nullable, - Size, - applyCssClass, - getRandomColorAccent + Size } from '@fundamental-ngx/cdk/utils'; import { FD_DEFAULT_ICON_FONT_FAMILY, IconComponent } from '@fundamental-ngx/core/icon'; +import { FD_LANGUAGE, FdLanguage, TranslationResolver } from '@fundamental-ngx/i18n'; import { AvatarIconPipe } from './avatar-icon.pipe'; import { AvatarValueStates } from './avatar-value-states.type'; import { FD_AVATAR_COMPONENT } from './tokens'; @@ -53,183 +59,179 @@ export type IndicationColor = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10; } ], host: { - '[attr.tabindex]': '_tabindex' + '[attr.id]': 'id()', + '[attr.alt]': 'alt()', + '[attr.tabindex]': 'tabindex()', + '[attr.role]': 'zoomGlyph() ? "button" : "img"', + '[attr.aria-label]': 'computedAriaLabel()', + '[attr.aria-labelledby]': 'ariaLabelledby()' }, imports: [AvatarIconPipe, IconComponent] }) export class AvatarComponent implements OnChanges, OnInit, CssClassBuilder, OnChanges { /** User's custom classes */ - @Input() - class: string; + readonly class = input(); /** Id of the Avatar. */ - @Input() - @HostBinding('attr.id') - id = `fd-avatar-${avatarUniqueId++}`; + readonly id = input(`fd-avatar-${++avatarUniqueId}`); + + /** Alt attr for Avatar. */ + readonly alt = input>(null); /** Aria-label for Avatar. */ - @Input() - @HostBinding('attr.aria-label') - @HostBinding('attr.alt') - ariaLabel: Nullable = null; + readonly ariaLabel = input>(null); /** Aria-Labelledby for element describing Avatar. */ - @Input() - @HostBinding('attr.aria-labelledby') - ariaLabelledby: Nullable = null; + readonly ariaLabelledby = input>(null); /** Localized text for label */ - @Input() - set label(value: Nullable) { - this.ariaLabel = value || null; - this.abbreviate = this._getAbbreviate(value); - } + readonly label = input>(null); /** The size of the Avatar. Options include: *xs*, *s*, *m*, *l* and *xl*. */ - @Input() size: Size = 'l'; + readonly size = input('l'); /** Font family of the icon. */ - @Input() - font: IconComponent['font'] = FD_DEFAULT_ICON_FONT_FAMILY; + readonly font = input(FD_DEFAULT_ICON_FONT_FAMILY); /** The glyph name. */ - @Input() glyph: Nullable = null; + readonly glyph = input>(null); /** The glyph name for zoom icon. */ - @Input() zoomGlyph: Nullable = null; + readonly zoomGlyph = input>(null); /** Whether to apply a circle style to the Avatar. */ - @Input() circle = false; + readonly circle = input(false, { transform: booleanAttribute }); /** Whether the Avatar should be interactive. */ - @Input() interactive = false; + readonly interactive = input(false, { transform: booleanAttribute }); /** Whether to apply a transparent style to the Avatar. */ - @Input() transparent = false; + readonly transparent = input(false, { transform: booleanAttribute }); /** Whether to apply background size contain style to the Avatar */ - @Input() contain = false; + readonly contain = input(false, { transform: booleanAttribute }); /** Whether to apply a placeholder background style to the Avatar. */ - @Input() placeholder = false; + readonly placeholder = input(false, { transform: booleanAttribute }); /** Whether to apply a tile background style to the Avatar. */ - @Input() tile = false; + readonly tile = input(false, { transform: booleanAttribute }); /** Whether to apply a border to the Avatar. */ - @Input() border = false; + readonly border = input(false, { transform: booleanAttribute }); /** A number from 1 to 10 representing the background color of the Avatar. * This property will override the colorIndication property. */ - @Input() colorAccent: Nullable = null; + readonly colorAccent = input>(null); /** A number from 1 to 10 representing the background color of the Avatar using the Indication Colors. */ - @Input() colorIndication: Nullable = null; + readonly colorIndication = input>(null); /** Whether to apply random background color to the Avatar. */ - @Input() random = false; + readonly random = input(false, { transform: booleanAttribute }); /** Whether component should be focusable & clicable */ - @Input() clickable = false; + readonly clickable = input(false, { transform: booleanAttribute }); /** Value state of the Avatar. */ - @Input() - valueState: Nullable; + readonly valueState = input>(null); /** Background image resource: url or base64. */ - @Input() - set image(value: Nullable) { - this._setImage(value); - } - get image(): Nullable { - return this._image; - } + readonly image = input>(null); /** Backup options to use when image hasn't been loaded successfully. * Options separated with "|" symbol. * Possible options: content, alt, backup, default-icon */ - @Input() - set alterIcon(value: Nullable) { - this._alterIcon = value; - } - get alterIcon(): Nullable { - return this._alterIcon; - } + readonly alterIcon = input>(null); /** Backup image to load when image hasn't been loaded successfully. * Only applicable when using alterIcon input property. */ - @Input() - set backupImage(value: Nullable) { - this._backupImage = value; - } - get backupImage(): Nullable { - return this._backupImage; - } + readonly backupImage = input>(null); /** Event emitted when avatar clicked. Only fires if clickable input property set to true. */ - @Output() avatarClicked = new EventEmitter(); + readonly avatarClicked = output(); /** Event emitted when zoom icon clicked. Only fires if zoomGlyph input property is set. */ - @Output() zoomGlyphClicked = new EventEmitter(); + readonly zoomGlyphClicked = output(); - /** - * @hidden - */ - set bgImage(image: Nullable) { - this._bgImage = image; + /** @hidden */ + readonly abbreviate = signal(null); - this._renderer.setStyle(this.elementRef.nativeElement, 'background-image', image); - } + /** If a default placeholder should be displayed */ + protected showDefault = computed(() => !this.abbreviate() && !this._image() && !this.glyph()); - get bgImage(): Nullable { - return this._bgImage; - } + /** @hidden */ + protected computedAriaLabel = computed(() => { + const ariaLabel = this.ariaLabel(); // user defined aria-label + const label = this.label(); // user defined label + const alt = this.alt(); // user defined alt attr + const defaultLabel = this._defaultAriaLabel(); // default label + + if (ariaLabel) { + // If user explicitly sets ariaLabel, use it as-is + return ariaLabel; + } + + if (label) { + // If user provides label, prepend the default aria-label ('Avatar') + return `${defaultLabel ?? ''} ${label}`.trim(); + } + + if (alt) { + // If user provides alt, prepend the default aria-label ('Avatar') + return `${defaultLabel ?? ''} ${alt}`.trim(); + } + + // Otherwise fallback to default label only + return defaultLabel; + }); /** @hidden */ - @HostBinding('attr.role') - get role(): string { - return this.zoomGlyph ? 'button' : 'img'; - } + protected tabindex = computed((): number | null => { + if (this.hostTabindex != null) { + return this.hostTabindex; + } + return this._clickable() ? 0 : null; + }); /** @hidden */ - @ViewChild('content') - set content(value: ElementRef) { - this._content = value; - } + private _contentRef = viewChild('content'); /** @hidden */ - abbreviate: Nullable = null; + private _glyph = signal>(null); /** @hidden */ - private _image: Nullable = null; + private _clickable = signal>(null); /** @hidden */ - private _alterIcon: Nullable = null; + private _image = signal>(null); /** @hidden */ - private _content: Nullable = null; + private _alterIcon = signal>(null); /** @hidden */ - private _backupImage: Nullable = null; + private _content = signal>(null); /** @hidden */ - private _bgImage: Nullable = null; + private _backupImage = signal>(null); /** @hidden */ - get _tabindex(): number | null { - if (this.hostTabindex != null) { - return this.hostTabindex; - } - return this.clickable ? 0 : null; - } + private _bgImage = signal>(null); - /** If a default placeholder should be displayed */ - get showDefault(): boolean { - return !this.abbreviate && !this._image && !this.glyph; - } + /** @hidden */ + private _defaultAriaLabel = signal>(null); + + /** @hidden */ + private readonly _destroyRef = inject(DestroyRef); + + /** @hidden */ + private readonly _lang$ = inject(FD_LANGUAGE); + + /** @hidden */ + private _translationResolver = new TranslationResolver(); /** @hidden */ constructor( @@ -237,7 +239,18 @@ export class AvatarComponent implements OnChanges, OnInit, CssClassBuilder, OnCh private readonly _cdr: ChangeDetectorRef, private readonly _renderer: Renderer2, @Attribute('tabindex') private hostTabindex: number | null - ) {} + ) { + effect(() => { + this._glyph.set(this.glyph()); + this._clickable.set(this.clickable()); + this._alterIcon.set(this.alterIcon()); + this._backupImage.set(this.backupImage()); + this._content.set(this._contentRef()); + this._setImage(this.image()); + this._renderer.setStyle(this.elementRef.nativeElement, 'background-image', this._bgImage()); + this.abbreviate.set(this._getAbbreviate(this.label())); + }); + } /** @hidden * CssClassBuilder interface implementation @@ -248,21 +261,21 @@ export class AvatarComponent implements OnChanges, OnInit, CssClassBuilder, OnCh buildComponentCssClass(): string[] { return [ 'fd-avatar', - this.size ? `fd-avatar--${this.size}` : '', - this.colorAccent && !this.random ? `fd-avatar--accent-color-${this.colorAccent}` : '', - this.random ? `fd-avatar--accent-color-${getRandomColorAccent()}` : '', - this.colorIndication && this.colorAccent === null && !this.random - ? `fd-avatar--indication-color-${this.colorIndication}` + this.size() ? `fd-avatar--${this.size()}` : '', + this.colorAccent() && !this.random() ? `fd-avatar--accent-color-${this.colorAccent()}` : '', + this.random() ? `fd-avatar--accent-color-${getRandomColorAccent()}` : '', + this.colorIndication() && this.colorAccent() === null && !this.random() + ? `fd-avatar--indication-color-${this.colorIndication()}` : '', - this.circle ? 'fd-avatar--circle' : '', - this.border ? 'fd-avatar--border' : '', - this.interactive ? 'fd-avatar--interactive' : '', - this.transparent ? 'fd-avatar--transparent' : '', - this.contain ? 'fd-avatar--background-contain' : '', - this.placeholder ? 'fd-avatar--placeholder' : '', - this.tile ? 'fd-avatar--tile' : '', - this.class - ]; + this.circle() ? 'fd-avatar--circle' : '', + this.border() ? 'fd-avatar--border' : '', + this.interactive() ? 'fd-avatar--interactive' : '', + this.transparent() ? 'fd-avatar--transparent' : '', + this.contain() ? 'fd-avatar--background-contain' : '', + this.placeholder() ? 'fd-avatar--placeholder' : '', + this.tile() ? 'fd-avatar--tile' : '', + this.class() + ].filter(Boolean) as string[]; } /** @hidden */ @@ -270,39 +283,42 @@ export class AvatarComponent implements OnChanges, OnInit, CssClassBuilder, OnCh @HostListener('keydown.enter', ['$event']) @HostListener('keydown.space', ['$event']) _onClick(event: Event): void { - if (!this.clickable) { + if (!this._clickable()) { return; } event.preventDefault(); this.avatarClicked.emit(event); - if (this.zoomGlyph) { - this.zoomGlyphClicked.next(); + if (this.zoomGlyph()) { + this.zoomGlyphClicked.emit(); } } /** @hidden */ ngOnInit(): void { this.buildComponentCssClass(); + this._lang$.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((lang: FdLanguage) => { + this._defaultAriaLabel.set(this._translationResolver.resolve(lang, 'coreAvatar.defaultLabel')); + }); } /** @hidden */ ngOnChanges(): void { - if (this.zoomGlyph) { - this.clickable = true; + if (this.zoomGlyph()) { + this._clickable.set(true); } this.buildComponentCssClass(); } /** @hidden */ - zoomClicked(event: Event): void { + protected zoomClicked(event: Event): void { event.preventDefault(); this.elementRef.nativeElement.focus(); - this.zoomGlyphClicked.next(); + this.zoomGlyphClicked.emit(); } /** @hidden Get an abbreviate from the label or return null if not fit requirements */ private _getAbbreviate(label: Nullable): string | null { - if (!label || this._image) { + if (!label || this._image()) { return null; } @@ -327,97 +343,94 @@ export class AvatarComponent implements OnChanges, OnInit, CssClassBuilder, OnCh /** @hidden */ private _setImage(value: Nullable): void { - this._image = value; + this._image.set(value); if (value) { this._verifyImageUrl(value, (): void => {}, this._onErrorCallback); } else { - this.bgImage = null; + this._bgImage.set(null); } } /** @hidden */ private _verifyImageUrl(srcValue: string, onLoadCallback: () => void, onErrorCallback: () => void): void { - // Don't load the same image all the time check happens - if (srcValue === this.bgImage) { + if (srcValue === this._bgImage()) { return; } const img = new Image(); - img.onload = onLoadCallback.bind(this); + img.onload = () => { + this._assignBgImage(srcValue); + onLoadCallback.call(this); + }; img.onerror = onErrorCallback.bind(this); img.src = srcValue; - this._assignBgImage(srcValue); } /** @hidden */ private _assignBgImage(srcValue: Nullable): void { - this.bgImage = srcValue ? `url(${srcValue})` : null; + this._bgImage.set(srcValue ? `url(${srcValue})` : null); } /** @hidden */ private _onErrorCallback(): void { - if (!this._alterIcon) { + if (!this._alterIcon()) { this._showDefaultIcon(); return; } - const options = this._alterIcon.split('|'); - for (let i = 0; i < options.length; i++) { - const option = options[i]; + const options = this._alterIcon()?.split('|'); - if (option === ALTER_ICON_OPTIONS.CONTENT) { - const contentValue = this._content?.nativeElement.textContent; - if (contentValue) { - this.abbreviate = this._generateAbbreviation(contentValue); - break; + if (options) { + for (let i = 0; i < options.length; i++) { + const option = options[i]; + + if (option === ALTER_ICON_OPTIONS.CONTENT) { + const contentValue = this._content()?.nativeElement.textContent; + if (contentValue) { + this.abbreviate.set(this._generateAbbreviation(contentValue)); + break; + } + + continue; } - continue; - } + if (option === ALTER_ICON_OPTIONS.ALT) { + if (this.alt()) { + this.abbreviate.set(this._generateAbbreviation(this.alt())); + break; + } - if (option === ALTER_ICON_OPTIONS.ALT) { - const altValue = this.elementRef.nativeElement.getAttribute('alt'); - if (altValue) { - this.abbreviate = this._generateAbbreviation(altValue); - break; + continue; } - continue; - } + if (option === ALTER_ICON_OPTIONS.BACKUP) { + const backup = this._backupImage(); + if (backup && backup !== '') { + this._verifyImageUrl( + backup, + () => this._assignBgImage(backup), + () => this._showDefaultIcon() + ); + break; + } + continue; + } - if (option === ALTER_ICON_OPTIONS.BACKUP) { - if (this._backupImage && this._backupImage !== '') { - // Check if backupImage can be loaded successfully - // If not, set default user icon - this._verifyImageUrl( - this._backupImage, - () => { - this._assignBgImage(this._backupImage); - }, - () => { - this._showDefaultIcon(); - } - ); + if (option === ALTER_ICON_OPTIONS.DEFAULT_ICON) { + this._showDefaultIcon(); break; } - continue; - } - - if (option === ALTER_ICON_OPTIONS.DEFAULT_ICON) { this._showDefaultIcon(); - break; } - - this._showDefaultIcon(); } } /** @hidden */ private _showDefaultIcon(): void { - this.abbreviate = null; - this._image = null; - this.glyph = null; + this.abbreviate.set(null); + this._image.set(null); + this._glyph.set(null); this._cdr.markForCheck(); } } diff --git a/libs/core/form/form-control/form-control.component.scss b/libs/core/form/form-control/form-control.component.scss index 716ff6931c2..2a9aa864997 100644 --- a/libs/core/form/form-control/form-control.component.scss +++ b/libs/core/form/form-control/form-control.component.scss @@ -25,3 +25,17 @@ .fd-input[readonly]:focus { z-index: 1 !important; } + +.fd-value-state-message__sr-only { + position: absolute; + clip: rect(0 0 0 0); + height: 1px; + width: 1px; + border: 0; + margin-inline: -1px; + margin-block: -1px; + padding-inline: 0; + padding-block: 0; + overflow: hidden; + white-space: nowrap; +} diff --git a/libs/core/form/form-control/form-control.component.ts b/libs/core/form/form-control/form-control.component.ts index d956cd72271..b378cca170f 100644 --- a/libs/core/form/form-control/form-control.component.ts +++ b/libs/core/form/form-control/form-control.component.ts @@ -1,85 +1,177 @@ import { - Attribute, ChangeDetectionStrategy, Component, + computed, + effect, ElementRef, - HostBinding, + inject, + input, Input, OnChanges, OnDestroy, OnInit, + Renderer2, + signal, ViewEncapsulation } from '@angular/core'; import { FormStates } from '@fundamental-ngx/cdk/forms'; -import { CssClassBuilder, Nullable, applyCssClass } from '@fundamental-ngx/cdk/utils'; +import { applyCssClass, CssClassBuilder, Nullable } from '@fundamental-ngx/cdk/utils'; import { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density'; +import { ValueStateAriaMessageService } from '@fundamental-ngx/core/shared'; import { Subscription } from 'rxjs'; import { FormItemControl, registerFormItemControl } from '../form-item-control/form-item-control'; -/** - * Directive intended for use on form controls. - * - * ```html - * - * ``` - */ +let formControlId = 0; + @Component({ // eslint-disable-next-line @angular-eslint/component-selector selector: 'input[fd-form-control], textarea[fd-form-control]', - template: ` `, + template: ``, styleUrl: './form-control.component.scss', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, - providers: [registerFormItemControl(FormControlComponent), contentDensityObserverProviders()] + providers: [registerFormItemControl(FormControlComponent), contentDensityObserverProviders()], + host: { + '[attr.type]': 'type()', + '[attr.aria-label]': 'ariaLabel', + '[attr.aria-labelledby]': 'ariaLabelledBy', + '[attr.aria-describedby]': 'combinedAriaDescribedBy()' + } }) export class FormControlComponent implements CssClassBuilder, OnInit, OnChanges, OnDestroy, FormItemControl { + /** aria-label for form-control. */ + @Input() + ariaLabelledBy: Nullable; + + /** aria-label for form-control. */ + @Input() + ariaLabel: Nullable; + /** * The state of the form control - applies css classes. * Can be `success`, `error`, `warning`, `information` or blank for default. */ - @Input() - state: FormStates | null = null; + state = input(null); /** Type of the form control. */ - @HostBinding('attr.type') - @Input() - type: string; + type = input(); - /** user's custom classes */ - @Input() - class: string; + /** User's custom classes */ + class = input(); - /** aria-label for form-control. */ - @Input() - ariaLabel: Nullable; + /** Default ARIA message text for the "success" value state. */ + valueStateSuccessMessage = input(inject(ValueStateAriaMessageService).success); - /** aria-label for form-control. */ - @Input() - ariaLabelledBy: Nullable; + /** Default ARIA message text for the "information" value state. */ + valueStateInformationMessage = input(inject(ValueStateAriaMessageService).information); + + /** Default ARIA message text for the "warning" value state. */ + valueStateWarningMessage = input(inject(ValueStateAriaMessageService).warning); + + /** Default ARIA message text for the "error" value state. */ + valueStateErrorMessage = input(inject(ValueStateAriaMessageService).error); + + /** + * @hidden + * Stores the value of the `aria-describedby` attribute set by the enclosing Form Item component. + */ + formItemAriaDescribedBy = signal>(null); + + /** + * @hidden + * Computes the full list of element IDs that should be referenced by `aria-describedby`. + * + * The final string may include: + * - The generated ID of the visually hidden span for value state messages (success, error, warning, info). + * - Any user-provided IDs from a native `aria-describedby` attribute. + * - Any user-provided IDs from a native `aria-errormessage` attribute. + * - Any IDs set by the parent Form Item via `formItemAriaDescribedBy`. + * + * All IDs are concatenated with spaces, and `null` is returned if none exist. + */ + + combinedAriaDescribedBy = computed(() => { + const userAriaDescribedByID = this._userAriaDescribedBy(); + const userAriaErrorMessageID = this._userAriaErrorMessage(); + const valueStateId = this.state() ? this._valueStateMessageId : null; + + // Include formItemAriaDescribedBy only if no user-provided IDs exist + const formItemAriaDescribedById = + !userAriaDescribedByID && !userAriaErrorMessageID ? this.formItemAriaDescribedBy() : null; + + return ( + [valueStateId, userAriaDescribedByID, userAriaErrorMessageID, formItemAriaDescribedById] + .filter(Boolean) + .join(' ') || null + ); + }); /** @hidden */ - @HostBinding('attr.aria-label') - private get ariaLabelBinding(): string { - return this.ariaLabelAttr || this.ariaLabel || ''; - } + public elementRef = inject(ElementRef); /** @hidden */ - @HostBinding('attr.aria-labelledby') - private get ariaLabelledByBinding(): string { - return this.ariaLabelledByAttr || this.ariaLabelledBy || ''; - } + private contentDensityObserver = inject(ContentDensityObserver); + + /** @hidden */ + private renderer = inject(Renderer2); /** @hidden */ private _subscriptions = new Subscription(); + /** + * @hidden + * Unique ID assigned to the hidden value state message , + * used to link it with `aria-describedby`. + */ + private _valueStateMessageId = `fd-form-control-value-state-${++formControlId}`; + + /** + * @hidden + * Reference to the hidden element that holds the value state message for screen readers. + * Created dynamically when the control has a state. + */ + private _valueStateSpan: HTMLElement | null = null; + + /** + * @hidden + * Stores the value of the user-defined `aria-describedby` attribute (if present on the host element). + */ + private _userAriaDescribedBy = signal>(null); + + /** + * @hidden + * Stores the value of the user-defined `aria-errormessage` attribute (if present on the host element). + */ + private _userAriaErrorMessage = signal>(null); + + /** @hidden */ + private _valueStateMessages = { + success: this.valueStateSuccessMessage, + information: this.valueStateInformationMessage, + warning: this.valueStateWarningMessage, + error: this.valueStateErrorMessage + } as const; + + /** @hidden */ + private _currentValueStateMessage = computed(() => { + const st = this.state(); + const signalMsg = st ? this._valueStateMessages[st] : null; + return signalMsg ? signalMsg() : ''; + }); + /** @hidden */ - constructor( - public elementRef: ElementRef, - _contentDensityObserver: ContentDensityObserver, - @Attribute('aria-label') private ariaLabelAttr: string, - @Attribute('aria-labelledby') private ariaLabelledByAttr: string - ) { - _contentDensityObserver.subscribe(); + constructor() { + this._subscriptions.add(this.contentDensityObserver.subscribe()); + + // Update the hidden span’s text whenever the value state message changes + effect(() => { + if (!this._valueStateSpan) { + return; + } + + const msg = this._currentValueStateMessage(); + this._valueStateSpan.textContent = msg ?? ''; + }); } /** @@ -92,15 +184,38 @@ export class FormControlComponent implements CssClassBuilder, OnInit, OnChanges, buildComponentCssClass(): string[] { const tagName = this.elementRef.nativeElement.tagName.toLowerCase(); return [ - this.state ? 'is-' + this.state : '', - this.class, - tagName === 'textarea' ? 'fd-textarea' : tagName === 'input' ? 'fd-input' : '' - ]; + tagName === 'textarea' ? 'fd-textarea' : tagName === 'input' ? 'fd-input' : '', + this.state() ? `is-${this.state()}` : '', + this.class() + ].filter(Boolean) as string[]; } /** @hidden */ ngOnInit(): void { this.buildComponentCssClass(); + + // Capture user-defined aria-describedby (if present on host element) + const userAriaDescribedByValue = this.elementRef.nativeElement.getAttribute('aria-describedby'); + if (userAriaDescribedByValue) { + this._userAriaDescribedBy.set(userAriaDescribedByValue); + } + + // Capture user-defined aria-errormessage (if present on host element) + const userAriaErrorMessageValue = this.elementRef.nativeElement.getAttribute('aria-errormessage'); + if (userAriaErrorMessageValue) { + this._userAriaErrorMessage.set(userAriaErrorMessageValue); + } + + // If the control has a state, create a hidden for the value state message + if (this.state()) { + this._valueStateSpan = this.renderer.createElement('span'); + this.renderer.setAttribute(this._valueStateSpan, 'id', this._valueStateMessageId); + this.renderer.addClass(this._valueStateSpan, 'fd-value-state-message__sr-only'); + + // Insert hidden span right after the input/textarea + const parent = this.elementRef.nativeElement.parentNode; + this.renderer.insertBefore(parent, this._valueStateSpan, this.elementRef.nativeElement.nextSibling); + } } /** @hidden */ @@ -110,6 +225,11 @@ export class FormControlComponent implements CssClassBuilder, OnInit, OnChanges, /** @hidden */ ngOnDestroy(): void { + if (this._valueStateSpan) { + this.renderer.removeChild(this.elementRef.nativeElement.parentNode, this._valueStateSpan); + this._valueStateSpan = null; + } + this._subscriptions.unsubscribe(); } } diff --git a/libs/core/form/form-item-control/form-item-control.ts b/libs/core/form/form-item-control/form-item-control.ts index 7f423020b01..9448a93bdb7 100644 --- a/libs/core/form/form-item-control/form-item-control.ts +++ b/libs/core/form/form-item-control/form-item-control.ts @@ -1,4 +1,4 @@ -import { ElementRef, InjectionToken, Provider, Type } from '@angular/core'; +import { ElementRef, InjectionToken, Provider, Type, WritableSignal } from '@angular/core'; import { Nullable } from '@fundamental-ngx/cdk/utils'; /** An injection token, that should be used with all controls, that can be put inside `fd-form-item` */ @@ -17,4 +17,5 @@ export function registerFormItemControl(control: Type): Provide export interface FormItemControl { ariaLabelledBy: Nullable; elmRef?: ElementRef; + formItemAriaDescribedBy?: WritableSignal>; } diff --git a/libs/core/form/form-item/form-item.component.scss b/libs/core/form/form-item/form-item.component.scss index 6f5814c5d51..2224293ea64 100644 --- a/libs/core/form/form-item/form-item.component.scss +++ b/libs/core/form/form-item/form-item.component.scss @@ -21,3 +21,9 @@ $form-label-margin: 0.5rem; } } } + +/* Disable label pointer events if the same form-item contains a disabled input/textarea */ +.fd-form-item:has(input[disabled], textarea[disabled], input.is-disabled, textarea.is-disabled) + .fd-form-label__wrapper { + pointer-events: none; +} diff --git a/libs/core/form/form-item/form-item.component.ts b/libs/core/form/form-item/form-item.component.ts index 797d92be09e..db13d1e30ba 100644 --- a/libs/core/form/form-item/form-item.component.ts +++ b/libs/core/form/form-item/form-item.component.ts @@ -2,69 +2,53 @@ import { AfterViewInit, ChangeDetectionStrategy, Component, - ContentChild, - HostBinding, - Input, - NgZone, + contentChild, + input, ViewEncapsulation } from '@angular/core'; -import { first } from 'rxjs'; import { FORM_ITEM_CONTROL, FormItemControl } from '../form-item-control/form-item-control'; import { FormLabelComponent } from '../form-label/form-label.component'; +import { FormMessageComponent } from '../form-message/form-message.component'; -/** - * Directive to be applied to the parent of a form control. - * - * ```html - *
- * - *
- * ``` - */ @Component({ - // TODO to be discussed // eslint-disable-next-line @angular-eslint/component-selector selector: '[fd-form-item]', template: ``, styleUrl: './form-item.component.scss', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, - standalone: true + standalone: true, + host: { + class: 'fd-form-item', + '[class.fd-form-item--inline]': 'isInline()', + '[class.fd-form-item--horizontal]': 'horizontal()' + } }) export class FormItemComponent implements AfterViewInit { /** Whether the form item is inline. */ - @Input() - @HostBinding('class.fd-form-item--inline') - isInline = false; + isInline = input(false); /** Whether the form item is horizontal. */ - @Input() - @HostBinding('class.fd-form-item--horizontal') - horizontal = false; - - /** @hidden */ - @HostBinding('class.fd-form-item') - fdFormItemClass = true; + horizontal = input(false); /** @hidden */ - @ContentChild(FormLabelComponent) - formLabel?: FormLabelComponent; + formLabel = contentChild(FormLabelComponent); /** @hidden */ - @ContentChild(FORM_ITEM_CONTROL) - formItemControl?: FormItemControl; + formMessage = contentChild(FormMessageComponent); /** @hidden */ - constructor(private ngZone: NgZone) {} + formItemControl = contentChild(FORM_ITEM_CONTROL); /** @hidden */ ngAfterViewInit(): void { - if (this.formLabel && this.formItemControl && !this.formItemControl.ariaLabelledBy) { - this.ngZone.onStable.pipe(first()).subscribe(() => { - if (this.formLabel && this.formItemControl) { - this.formItemControl.ariaLabelledBy = this.formLabel.formLabelId; - } - }); + if (this.formLabel() && this.formItemControl && !this.formItemControl()?.ariaLabelledBy) { + const formItemControl = this.formItemControl(); + + if (formItemControl) { + formItemControl.ariaLabelledBy = this.formLabel()?.id(); + formItemControl.formItemAriaDescribedBy?.set(this.formMessage()?.id()); + } } } } diff --git a/libs/core/form/form-label/form-label.component.html b/libs/core/form/form-label/form-label.component.html index d685be38a0b..316fd69f40f 100644 --- a/libs/core/form/form-label/form-label.component.html +++ b/libs/core/form/form-label/form-label.component.html @@ -1,30 +1,30 @@ - @if (inlineHelpContent) { + @if (inlineHelpContent()) { } -@if (inlineHelpPlacement === 'before' && inlineHelpContent) { +@if (inlineHelpPlacement() === 'before' && inlineHelpContent()) { } -@if (inlineHelpPlacement === 'after' && inlineHelpContent) { +@if (inlineHelpPlacement() === 'after' && inlineHelpContent()) { } diff --git a/libs/core/form/form-label/form-label.component.scss b/libs/core/form/form-label/form-label.component.scss index 18114485cab..4002018dad0 100644 --- a/libs/core/form/form-label/form-label.component.scss +++ b/libs/core/form/form-label/form-label.component.scss @@ -27,7 +27,6 @@ $form-label-bottom-spacing: 0.125rem; &__inline-help { position: relative; - top: 0.125rem; } &--allow-wrap { @@ -67,6 +66,12 @@ $form-label-bottom-spacing: 0.125rem; } } } + + &:has(.fd-form-label__inline-help) { + .fd-form-label { + margin-inline-end: 0; + } + } } .fd-form-label__help { diff --git a/libs/core/form/form-label/form-label.component.ts b/libs/core/form/form-label/form-label.component.ts index ddf33073ff1..fc3deecb63a 100644 --- a/libs/core/form/form-label/form-label.component.ts +++ b/libs/core/form/form-label/form-label.component.ts @@ -1,13 +1,5 @@ import { NgTemplateOutlet } from '@angular/common'; -import { - ChangeDetectionStrategy, - Component, - HostBinding, - Input, - OnChanges, - TemplateRef, - ViewEncapsulation -} from '@angular/core'; +import { ChangeDetectionStrategy, Component, computed, input, TemplateRef, ViewEncapsulation } from '@angular/core'; import { Nullable } from '@fundamental-ngx/cdk/utils'; import { IconComponent } from '@fundamental-ngx/core/icon'; import { InlineHelpDirective } from '@fundamental-ngx/core/inline-help'; @@ -34,39 +26,40 @@ let formLabelIdCount = 0; encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, + host: { + '[attr.id]': 'id()', + class: 'fd-form-label__wrapper', + '[class.fd-form-label__wrapper--align-end]': 'alignLabelEnd()', + '[class.fd-form-label__wrapper--inline-help]': '!!inlineHelpContent()', + '[class.fd-form-label__wrapper--inline-help--after]': + '!!inlineHelpContent() && inlineHelpPlacement() === "after"' + }, imports: [LinkComponent, IconComponent, InlineHelpDirective, NgTemplateOutlet] }) -export class FormLabelComponent implements OnChanges { +export class FormLabelComponent { /** Whether form is required. */ - @Input() - required = false; + required = input(false); /** Whether label text should be appended with colon. */ - @Input() - colon = false; + colon = input(false); /** Align label on end. */ - @Input() - @HostBinding('class.fd-form-label__wrapper--align-end') - alignLabelEnd = false; + alignLabelEnd = input(false); /** Inline help content. Could be just a string or complex template */ - @Input() - inlineHelpContent: Nullable> = null; + inlineHelpContent = input>(''); /** Glyph of icon triggering inline help. */ - @Input() - inlineHelpGlyph = 'question-mark'; + inlineHelpGlyph = input('question-mark'); /** Trigger event names for the inline help. */ - @Input() - inlineHelpTriggers: (string | TriggerConfig)[] = [ + inlineHelpTriggers = input<(string | TriggerConfig)[]>([ 'mouseenter', 'mouseleave', 'focusin', 'focusout', { trigger: 'click', openAction: true, closeAction: true } - ]; + ]); /** * The placement of the inline help. @@ -74,61 +67,31 @@ export class FormLabelComponent implements OnChanges { * top, top-start, top-end, bottom, bottom-start, bottom-end, * right, right-start, right-end, left, left-start, left-end. */ - @Input() - inlineHelpBodyPlacement: Placement; + inlineHelpBodyPlacement = input('bottom-start'); /** If inline help trigger icon should be placed after, or before text. */ - @Input() - inlineHelpPlacement: InlineHelpFormPlacement = 'after'; + inlineHelpPlacement = input('after'); /** Whether to allow the text of the form label to wrap. */ - @Input() - allowWrap = false; + allowWrap = input(false); - /** Inline help label. */ - @Input() - set inlineHelpLabel(label: string) { - this._inlineHelpLabel = label; - } - get inlineHelpLabel(): string { - if (this._inlineHelpLabel) { - return this._inlineHelpLabel; - } - return typeof this.inlineHelpContent === 'string' ? this.inlineHelpContent : ''; - } - - /** @hidden */ - @HostBinding('class.fd-form-label__wrapper') - defaultClass = true; - - /** @hidden */ - @HostBinding('class.fd-form-label__wrapper--inline-help') - inlineHelpClass = true; + /** ID of the label. A default value is provided if not set. */ + id = input(`fd-form-label-${++formLabelIdCount}`); - /** @hidden */ - @HostBinding('class.fd-form-label__wrapper--inline-help--after') - inlineHelpAfter = true; + /** Inline help label */ + inlineHelpLabel = input>(null); - /** @hidden */ - // eslint-disable-next-line @angular-eslint/no-input-rename - @Input('id') - @HostBinding('id') - set formLabelId(value: Nullable) { - this._formLabelId = value || this._formLabelId; + get inlineHelpContentValue(): string | TemplateRef { + return this.inlineHelpContent(); } - get formLabelId(): string { - return this._formLabelId; - } - - /** @hidden */ - private _formLabelId = `fd-form-label-${++formLabelIdCount}`; - - /** @hidden */ - private _inlineHelpLabel?: string; - /** @hidden */ - ngOnChanges(): void { - this.inlineHelpClass = !!this.inlineHelpContent; - this.inlineHelpAfter = !!this.inlineHelpContent && this.inlineHelpPlacement === 'after'; - } + /** Computed inline help label */ + computedInlineHelpLabel = computed(() => { + const label = this.inlineHelpLabel(); + if (label) { + return label; + } + const content = this.inlineHelpContent(); + return typeof content === 'string' ? content : ''; + }); } diff --git a/libs/core/form/form-message/form-message.component.scss b/libs/core/form/form-message/form-message.component.scss index dfe4554d193..4201d73819e 100644 --- a/libs/core/form/form-message/form-message.component.scss +++ b/libs/core/form/form-message/form-message.component.scss @@ -1 +1,15 @@ @import 'fundamental-styles/dist/form-message.css'; + +.fd-form-message__sr-only { + position: absolute; + clip: rect(0 0 0 0); + height: 1px; + width: 1px; + border: 0; + margin-inline: -1px; + margin-block: -1px; + padding-inline: 0; + padding-block: 0; + overflow: hidden; + white-space: nowrap; +} diff --git a/libs/core/form/form-message/form-message.component.ts b/libs/core/form/form-message/form-message.component.ts index 196c28ab127..71472b2055f 100644 --- a/libs/core/form/form-message/form-message.component.ts +++ b/libs/core/form/form-message/form-message.component.ts @@ -2,24 +2,26 @@ import { ChangeDetectionStrategy, Component, ElementRef, - Input, + inject, + input, OnChanges, OnInit, ViewEncapsulation } from '@angular/core'; import { FormStates } from '@fundamental-ngx/cdk/forms'; -import { CssClassBuilder, DynamicComponentService, applyCssClass } from '@fundamental-ngx/cdk/utils'; +import { applyCssClass, CssClassBuilder, DynamicComponentService } from '@fundamental-ngx/cdk/utils'; import { CSS_CLASS_NAME, getTypeClassName } from './constants'; -/** - * Form message. Intended to be displayed with a form control for validation purposes. - */ + +let formMessageId = 0; + @Component({ selector: 'fd-form-message', template: ``, styleUrl: './form-message.component.scss', host: { 'aria-live': 'assertive', - 'aria-atomic': 'true' + 'aria-atomic': 'true', + '[attr.id]': 'id()' }, providers: [DynamicComponentService], encapsulation: ViewEncapsulation.None, @@ -28,37 +30,37 @@ import { CSS_CLASS_NAME, getTypeClassName } from './constants'; }) export class FormMessageComponent implements CssClassBuilder, OnInit, OnChanges { /** Type of the message. */ - @Input() - type: FormStates; + type = input('default'); /** Whether message should be in static mode, without popover. It's mostly used for forms component, that contain dropdown */ - @Input() - static = false; + static = input(false); /** * Whether message is used inside popovers or dialogs. * When it is enabled box shadow is removed and message is expanded to whole container width */ - @Input() - embedded = false; + embedded = input(false); /** User's custom classes */ - @Input() - class: string; + class = input(); + + /** Form Message Text ID + * Default value is provided if not set */ + id = input(`fd-form-message-${++formMessageId}`); /** @hidden */ - constructor(public readonly elementRef: ElementRef) {} + elementRef: ElementRef = inject(ElementRef); /** @hidden */ @applyCssClass buildComponentCssClass(): string[] { return [ CSS_CLASS_NAME.message, - this.static ? CSS_CLASS_NAME.messageStatic : '', - this.embedded ? CSS_CLASS_NAME.messageEmbedded : '', - getTypeClassName(this.type), - this.class - ].filter((v): v is string => !!v); + this.static() ? CSS_CLASS_NAME.messageStatic : '', + this.embedded() ? CSS_CLASS_NAME.messageEmbedded : '', + getTypeClassName(this.type()), + this.class() + ].filter(Boolean) as string[]; } /** @hidden */ diff --git a/libs/core/illustrated-message/components/illustrated-message-section/illustrated-message-section.component.spec.ts b/libs/core/illustrated-message/components/illustrated-message-section/illustrated-message-section.component.spec.ts new file mode 100644 index 00000000000..cf5a820176a --- /dev/null +++ b/libs/core/illustrated-message/components/illustrated-message-section/illustrated-message-section.component.spec.ts @@ -0,0 +1,45 @@ +import { Component, ElementRef, ViewChild } from '@angular/core'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { IllustratedMessageSectionComponent } from './illustrated-message-section.component'; + +// Mock component for testing +@Component({ + template: `
Test content
`, + standalone: true, + imports: [IllustratedMessageSectionComponent] +}) +class TestIllustratedMessageSectionComponent { + @ViewChild(IllustratedMessageSectionComponent, { static: true, read: ElementRef }) + illustratedMessageSectionElementRef: ElementRef; + + responsive = false; +} + +describe('IllustratedMessageSectionComponent', () => { + let illustratedMessageSectionElementRef: ElementRef; + let testComponent: TestIllustratedMessageSectionComponent; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [TestIllustratedMessageSectionComponent] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(TestIllustratedMessageSectionComponent); + illustratedMessageSectionElementRef = fixture.componentInstance.illustratedMessageSectionElementRef; + testComponent = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('Should have assigned class when responsive is set to true', () => { + testComponent.responsive = true; + fixture.detectChanges(); + expect( + illustratedMessageSectionElementRef.nativeElement.classList.contains( + 'fd-illustrated-message-responsive-container' + ) + ).toBe(true); + }); +}); diff --git a/libs/core/illustrated-message/components/illustrated-message-section/illustrated-message-section.component.ts b/libs/core/illustrated-message/components/illustrated-message-section/illustrated-message-section.component.ts new file mode 100644 index 00000000000..270622a97dd --- /dev/null +++ b/libs/core/illustrated-message/components/illustrated-message-section/illustrated-message-section.component.ts @@ -0,0 +1,38 @@ +import { booleanAttribute, ChangeDetectionStrategy, Component, computed, contentChild, input } from '@angular/core'; +import { IllustratedMessageTitleDirective } from '../../directives/illustrated-message-title/illustrated-message-title.directive'; + +let illustratedMessageSectionId = 0; + +@Component({ + // eslint-disable-next-line @angular-eslint/component-selector + selector: '[fd-illustrated-message-section]', + template: `{{ ariaLabel() }} + `, + changeDetection: ChangeDetectionStrategy.OnPush, + host: { + role: 'region', + '[attr.aria-labelledby]': 'ariaLabelledby()', + '[class.fd-illustrated-message-responsive-container]': 'responsive()' + }, + standalone: true +}) +export class IllustratedMessageSectionComponent { + /** Aria label for the Illustrated Message */ + ariaLabel = input(); + + /** Whether the Illustrated Message is responsive + * Default value is false */ + responsive = input(false, { transform: booleanAttribute }); + + /** Illustrated Message Section ID + * Default value is provided if not set */ + id = input('fd-illustrated-message-section-id-' + ++illustratedMessageSectionId); + + /** @hidden */ + illustratedMessageTitle = contentChild(IllustratedMessageTitleDirective, { + descendants: true + }); + + /** @hidden */ + ariaLabelledby = computed(() => `${this.id()} ${this.illustratedMessageTitle()?.id()}`); +} diff --git a/libs/core/illustrated-message/directives/illustrated-message-text/illustrated-message-text.directive.ts b/libs/core/illustrated-message/directives/illustrated-message-text/illustrated-message-text.directive.ts index 592ac1ab93e..e8bacdcf70a 100644 --- a/libs/core/illustrated-message/directives/illustrated-message-text/illustrated-message-text.directive.ts +++ b/libs/core/illustrated-message/directives/illustrated-message-text/illustrated-message-text.directive.ts @@ -1,13 +1,22 @@ -import { Directive, HostBinding } from '@angular/core'; +import { Directive, HostBinding, input } from '@angular/core'; + +let illustratedMessageTextId = 0; @Directive({ // TODO to be discussed // eslint-disable-next-line @angular-eslint/directive-selector selector: '[fd-illustrated-message-text]', - standalone: true + standalone: true, + host: { + '[attr.id]': 'id()' + } }) export class IllustratedMessageTextDirective { /** @hidden */ @HostBinding('class.fd-illustrated-message__text') fdIllustratedMessageTextClass = true; + + /** Illustrated Message Text ID + * Default value is provided if not set */ + id = input('fd-illustrated-message-text-id-' + ++illustratedMessageTextId); } diff --git a/libs/core/illustrated-message/directives/illustrated-message-title/illustrated-message-title.directive.ts b/libs/core/illustrated-message/directives/illustrated-message-title/illustrated-message-title.directive.ts index 5d3f2113f33..14d5d3892b8 100644 --- a/libs/core/illustrated-message/directives/illustrated-message-title/illustrated-message-title.directive.ts +++ b/libs/core/illustrated-message/directives/illustrated-message-title/illustrated-message-title.directive.ts @@ -1,13 +1,21 @@ -import { Directive, HostBinding } from '@angular/core'; +import { Directive, HostBinding, input } from '@angular/core'; + +let illustratedMessageTitleId = 0; @Directive({ - // TODO to be discussed // eslint-disable-next-line @angular-eslint/directive-selector selector: '[fd-illustrated-message-title]', - standalone: true + standalone: true, + host: { + '[attr.id]': 'id()' + } }) export class IllustratedMessageTitleDirective { /** @hidden */ @HostBinding('class.fd-illustrated-message__title') fdIllustratedMessageTitleClass = true; + + /** Illustrated Message Title ID + * Default value is provided if not set */ + id = input('fd-illustrated-message-title-id-' + ++illustratedMessageTitleId); } diff --git a/libs/core/illustrated-message/illustrated-message.component.html b/libs/core/illustrated-message/illustrated-message.component.html index 8489c641275..ba14e00d053 100644 --- a/libs/core/illustrated-message/illustrated-message.component.html +++ b/libs/core/illustrated-message/illustrated-message.component.html @@ -1,6 +1,11 @@
@if (!noSvg) { - + } diff --git a/libs/core/illustrated-message/illustrated-message.component.scss b/libs/core/illustrated-message/illustrated-message.component.scss index db934a17616..2db2597ad34 100644 --- a/libs/core/illustrated-message/illustrated-message.component.scss +++ b/libs/core/illustrated-message/illustrated-message.component.scss @@ -398,3 +398,17 @@ .fd-illustrated-message__illustration { width: 100%; } + +.fd-illustrated-message__sr-only { + position: absolute; + clip: rect(0 0 0 0); + height: 1px; + width: 1px; + border: 0; + margin-inline: -1px; + margin-block: -1px; + padding-inline: 0; + padding-block: 0; + overflow: hidden; + white-space: nowrap; +} diff --git a/libs/core/illustrated-message/illustrated-message.component.ts b/libs/core/illustrated-message/illustrated-message.component.ts index 4140cf5a68d..fa218f30613 100644 --- a/libs/core/illustrated-message/illustrated-message.component.ts +++ b/libs/core/illustrated-message/illustrated-message.component.ts @@ -80,6 +80,9 @@ export class IllustratedMessageComponent implements AfterContentChecked, OnChang @Input() svgAriaLabel: Nullable; + @Input() + svgAlt: Nullable; + @Input() noSvg = false; diff --git a/libs/core/illustrated-message/illustrated-message.module.ts b/libs/core/illustrated-message/illustrated-message.module.ts index aab90b39878..e280eb52a4b 100644 --- a/libs/core/illustrated-message/illustrated-message.module.ts +++ b/libs/core/illustrated-message/illustrated-message.module.ts @@ -4,6 +4,7 @@ import { IllustratedMessageActionsComponent } from './components/illustrated-mes import { IllustratedMessageComponent } from './illustrated-message.component'; import { IllustratedMessageFigcaptionComponent } from './components/illustrated-message-figcaption/illustrated-message-figcaption.component'; +import { IllustratedMessageSectionComponent } from './components/illustrated-message-section/illustrated-message-section.component'; import { IllustratedMessageTextDirective } from './directives/illustrated-message-text/illustrated-message-text.directive'; import { IllustratedMessageTitleDirective } from './directives/illustrated-message-title/illustrated-message-title.directive'; @@ -11,6 +12,7 @@ const components = [ IllustratedMessageComponent, IllustratedMessageActionsComponent, IllustratedMessageFigcaptionComponent, + IllustratedMessageSectionComponent, IllustratedMessageTextDirective, IllustratedMessageTitleDirective ]; diff --git a/libs/core/illustrated-message/index.ts b/libs/core/illustrated-message/index.ts index 7c925702ad2..14cfd72838e 100644 --- a/libs/core/illustrated-message/index.ts +++ b/libs/core/illustrated-message/index.ts @@ -1,5 +1,6 @@ export * from './components/illustrated-message-actions/illustrated-message-actions.component'; export * from './components/illustrated-message-figcaption/illustrated-message-figcaption.component'; +export * from './components/illustrated-message-section/illustrated-message-section.component'; export * from './directives/illustrated-message-text/illustrated-message-text.directive'; export * from './directives/illustrated-message-title/illustrated-message-title.directive'; export * from './illustrated-message.component'; diff --git a/libs/core/link/link.component.html b/libs/core/link/link.component.html index 7274e1471bf..5c8e5924944 100644 --- a/libs/core/link/link.component.html +++ b/libs/core/link/link.component.html @@ -1,5 +1,5 @@ @if (_prefixPortal) { - + } @@ -7,7 +7,13 @@ @if (_postfixPortal) { - + } +@if (emphasized()) { + {{ 'coreLink.emphasized' | fdTranslate }} +} +@if (subtle()) { + {{ 'coreLink.subtle' | fdTranslate }} +} diff --git a/libs/core/link/link.component.spec.ts b/libs/core/link/link.component.spec.ts index 97db8bebee5..dbf0aa5298b 100644 --- a/libs/core/link/link.component.spec.ts +++ b/libs/core/link/link.component.spec.ts @@ -1,31 +1,38 @@ -import { Component, ViewChild } from '@angular/core'; +import { Pipe, PipeTransform } from '@angular/core'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { FdTranslatePipe } from '@fundamental-ngx/i18n'; import { LinkComponent } from './link.component'; -@Component({ - selector: 'fd-test-tabs', - template: ` Test Link `, - standalone: true, - imports: [LinkComponent] +@Pipe({ + name: 'fdTranslate', + standalone: true }) -class TestLinkComponent { - @ViewChild(LinkComponent, { static: true }) - linkComponent: LinkComponent; +class MockFdTranslatePipe implements PipeTransform { + transform(value: string): string { + // For testing, just return the translation key itself + // This way we can verify the correct keys are being used + return value; + } } describe('LinkComponent', () => { let component: LinkComponent; - let fixture: ComponentFixture; + let fixture: ComponentFixture; beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TestLinkComponent] - }).compileComponents(); + imports: [LinkComponent] + }) + .overrideComponent(LinkComponent, { + remove: { imports: [FdTranslatePipe] }, + add: { imports: [MockFdTranslatePipe] } + }) + .compileComponents(); })); beforeEach(() => { - fixture = TestBed.createComponent(TestLinkComponent); - component = fixture.componentInstance.linkComponent; + fixture = TestBed.createComponent(LinkComponent); + component = fixture.componentInstance; fixture.detectChanges(); }); @@ -33,24 +40,73 @@ describe('LinkComponent', () => { expect(component).toBeTruthy(); }); - it('Should Add emphasized class', () => { - component.emphasized = true; + describe('when the link is emphasized', () => { + beforeEach(() => { + fixture.componentRef.setInput('emphasized', true); + component.buildComponentCssClass(); + fixture.detectChanges(); + }); + + it('should add an emphasized class', () => { + expect(component.elementRef.nativeElement.classList.contains('fd-link--emphasized')).toBe(true); + }); + + it('should add a screen-reader text', () => { + expect(component.elementRef.nativeElement.querySelector('.fd-link__sr-only')?.textContent).toEqual( + 'coreLink.emphasized' + ); + }); + }); + + describe('when the link is subtle', () => { + beforeEach(() => { + fixture.componentRef.setInput('subtle', true); + component.buildComponentCssClass(); + fixture.detectChanges(); + }); + + it('should add a subtle class', () => { + expect(component.elementRef.nativeElement.classList.contains('fd-link--subtle')).toBe(true); + }); + + it('should add a screen-reader text', () => { + expect(component.elementRef.nativeElement.querySelector('.fd-link__sr-only')?.textContent).toEqual( + 'coreLink.subtle' + ); + }); + }); + + it('should add an inverted class', () => { + fixture.componentRef.setInput('inverted', true); component.buildComponentCssClass(); fixture.detectChanges(); - expect(component.elementRef.nativeElement.classList.contains('fd-link--emphasized')).toBe(true); + expect(component.elementRef.nativeElement.classList.contains('fd-link--inverted')).toBe(true); }); - it('Should Add inverted class', () => { - component.inverted = true; + it('should add an undecorated class', () => { + fixture.componentRef.setInput('undecorated', true); component.buildComponentCssClass(); fixture.detectChanges(); - expect(component.elementRef.nativeElement.classList.contains('fd-link--inverted')).toBe(true); + expect(component.elementRef.nativeElement.classList.contains('fd-link--undecorated')).toBe(true); + }); + + it('should add a touch-target class', () => { + fixture.componentRef.setInput('touchTarget', true); + component.buildComponentCssClass(); + fixture.detectChanges(); + expect(component.elementRef.nativeElement.classList.contains('fd-link--touch-target')).toBe(true); }); - it('Should Add disabled class', () => { - component.disabled = true; + it('should add a disabled class', () => { + fixture.componentRef.setInput('disabled', true); component.buildComponentCssClass(); fixture.detectChanges(); expect(component.elementRef.nativeElement.classList.contains('is-disabled')).toBe(true); }); + + it('should add an aria-disabled attribute if disabled flag is passed', () => { + fixture.componentRef.setInput('disabled', true); + fixture.detectChanges(); + expect(component.elementRef.nativeElement.getAttribute('aria-disabled')).toBe('true'); + }); }); diff --git a/libs/core/link/link.component.ts b/libs/core/link/link.component.ts index 12cfff9f095..29e31aef2dc 100644 --- a/libs/core/link/link.component.ts +++ b/libs/core/link/link.component.ts @@ -8,7 +8,6 @@ import { DestroyRef, ElementRef, Inject, - Input, OnChanges, OnInit, Optional, @@ -16,12 +15,15 @@ import { Self, ViewChild, ViewEncapsulation, - inject + booleanAttribute, + inject, + input } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { RouterLink } from '@angular/router'; import { CssClassBuilder, applyCssClass } from '@fundamental-ngx/cdk/utils'; import { FD_ICON_COMPONENT, IconComponent } from '@fundamental-ngx/core/icon'; +import { FdTranslatePipe } from '@fundamental-ngx/i18n'; import { map, startWith, tap } from 'rxjs'; import { FD_LINK_COMPONENT } from './tokens'; @@ -47,7 +49,10 @@ import { FD_LINK_COMPONENT } from './tokens'; ] } ], - imports: [PortalModule] + host: { + '[attr.aria-disabled]': 'disabled() ? true : false' + }, + imports: [PortalModule, FdTranslatePipe] }) export class LinkComponent implements OnChanges, OnInit, CssClassBuilder, AfterViewInit { /** @hidden */ @@ -59,28 +64,25 @@ export class LinkComponent implements OnChanges, OnInit, CssClassBuilder, AfterV contentSpan: ElementRef; /** user's custom classes */ - @Input() - class: string; + class = input(); /** Whether user wants to use emphasized mode */ - @Input() - emphasized: boolean; + emphasized = input(false, { transform: booleanAttribute }); /** Whether user wants to put disabled mode */ - @Input() - disabled: boolean; + disabled = input(false, { transform: booleanAttribute }); /** Whether user wants to use inverted mode */ - @Input() - inverted: boolean; + inverted = input(false, { transform: booleanAttribute }); /** Whether user wants to use subtle mode */ - @Input() - subtle: boolean; + subtle = input(false, { transform: booleanAttribute }); /** Whether user wants to have a link without underline decoration */ - @Input() - undecorated: boolean; + undecorated = input(false, { transform: booleanAttribute }); + + /** Whether user wants to have a larger touch target */ + touchTarget = input(false, { transform: booleanAttribute }); /** @hidden */ _prefixPortal: Portal | null; @@ -112,12 +114,13 @@ export class LinkComponent implements OnChanges, OnInit, CssClassBuilder, AfterV buildComponentCssClass(): string[] { return [ 'fd-link', - this.emphasized ? 'fd-link--emphasized' : '', - this.disabled ? 'is-disabled' : '', - this.inverted ? `fd-link--inverted` : '', - this.subtle ? 'fd-link--subtle' : '', - this.undecorated ? 'fd-link--undecorated' : '', - this.class + this.emphasized() ? 'fd-link--emphasized' : '', + this.disabled() ? 'is-disabled' : '', + this.inverted() ? `fd-link--inverted` : '', + this.subtle() ? 'fd-link--subtle' : '', + this.undecorated() ? 'fd-link--undecorated' : '', + this.touchTarget() ? 'fd-link--touch-target' : '', + this.class() ?? '' ]; } diff --git a/libs/core/message-strip/auto-dismiss-message-strip.directive.ts b/libs/core/message-strip/auto-dismiss-message-strip.directive.ts index 9b47925e072..849b42e5bc0 100644 --- a/libs/core/message-strip/auto-dismiss-message-strip.directive.ts +++ b/libs/core/message-strip/auto-dismiss-message-strip.directive.ts @@ -55,7 +55,6 @@ export class AutoDismissMessageStripDirective { /** @hidden */ open(): void { this.opened = true; - this.elementRef.nativeElement.classList.remove('fd-has-display-block'); this.elementRef.nativeElement.classList.remove('fd-has-display-none'); this.stopAutoDismiss(); if (this.autoDismiss && !this.dismissible && isDevMode()) { diff --git a/libs/core/message-strip/message-strip.component.html b/libs/core/message-strip/message-strip.component.html index ee443daf0c5..c34540baf9c 100644 --- a/libs/core/message-strip/message-strip.component.html +++ b/libs/core/message-strip/message-strip.component.html @@ -1,19 +1,17 @@ +{{ messageStripHiddenText$ | async }} @if (shouldShowIcon) { } -

+

-@if (dismissible) { +@if (dismissible()) { } diff --git a/libs/core/message-strip/message-strip.component.scss b/libs/core/message-strip/message-strip.component.scss index 288803df46c..449958376b4 100644 --- a/libs/core/message-strip/message-strip.component.scss +++ b/libs/core/message-strip/message-strip.component.scss @@ -4,20 +4,6 @@ display: block; } -.fd-has-display-block { - display: block; -} - .fd-has-display-none { display: none; } - -.fd-message-strip__sr-only { - position: absolute; - clip: rect(1px, 1px, 1px, 1px); - user-select: none; - left: -1000px; - top: -1000px; - pointer-events: none; - font-size: 0px; -} diff --git a/libs/core/message-strip/message-strip.component.spec.ts b/libs/core/message-strip/message-strip.component.spec.ts index ddff38478b4..817863d0c8d 100644 --- a/libs/core/message-strip/message-strip.component.spec.ts +++ b/libs/core/message-strip/message-strip.component.spec.ts @@ -1,31 +1,20 @@ -import { Component, ViewChild } from '@angular/core'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MessageStripComponent } from './message-strip.component'; -@Component({ - template: ` A dismissible normal message strip. `, - standalone: true, - imports: [MessageStripComponent] -}) -class TestMessageStripComponent { - @ViewChild(MessageStripComponent, { static: true }) - messageStripComponent: MessageStripComponent; -} - describe('MessageStripComponent', () => { let component: MessageStripComponent; - let fixture: ComponentFixture; + let fixture: ComponentFixture; beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TestMessageStripComponent] + imports: [MessageStripComponent] }).compileComponents(); })); beforeEach(() => { - fixture = TestBed.createComponent(TestMessageStripComponent); - component = fixture.componentInstance.messageStripComponent; + fixture = TestBed.createComponent(MessageStripComponent); + component = fixture.componentInstance; fixture.detectChanges(); }); @@ -34,14 +23,14 @@ describe('MessageStripComponent', () => { }); it('should Add no-icon modifier class', () => { - component.noIcon = true; + fixture.componentRef.setInput('noIcon', 'true'); component.buildComponentCssClass(); fixture.detectChanges(); expect(component.elementRef.nativeElement.classList.contains('fd-message-strip--no-icon')).toBe(true); }); it('should apply a type', () => { - component.type = 'success'; + fixture.componentRef.setInput('type', 'success'); component.buildComponentCssClass(); fixture.detectChanges(); expect(component.elementRef.nativeElement.classList.contains('fd-message-strip--success')).toBe(true); @@ -54,64 +43,60 @@ describe('MessageStripComponent', () => { }); it('should set aria-label attribute if provided', () => { - component.ariaLabel = 'Test label'; + fixture.componentRef.setInput('ariaLabel', 'Test label'); fixture.detectChanges(); - const hostElement = fixture.nativeElement.querySelector('fd-message-strip'); - expect(hostElement.getAttribute('aria-label')).toBe('Test label'); + expect(component.elementRef.nativeElement.getAttribute('aria-label')).toBe('Test label'); }); it('should set width style if provided', () => { - component.width = '200px'; + fixture.componentRef.setInput('width', '200px'); fixture.detectChanges(); - const hostElement = fixture.nativeElement.querySelector('fd-message-strip'); - expect(hostElement.style.width).toBe('200px'); + expect(component.elementRef.nativeElement.style.width).toBe('200px'); }); it('should set min-width style if provided', () => { - component.minWidth = '500px'; + fixture.componentRef.setInput('minWidth', '500px'); fixture.detectChanges(); - const hostElement = fixture.nativeElement.querySelector('fd-message-strip'); - expect(hostElement.style.minWidth).toBe('500px'); + expect(component.elementRef.nativeElement.style.minWidth).toBe('500px'); }); it('should set margin-bottom style if provided', () => { - component.marginBottom = '10px'; + fixture.componentRef.setInput('marginBottom', '10px'); fixture.detectChanges(); - const hostElement = fixture.nativeElement.querySelector('fd-message-strip'); - expect(hostElement.style.marginBottom).toBe('10px'); + expect(component.elementRef.nativeElement.style.marginBottom).toBe('10px'); }); it('should set id attribute if provided', () => { - component.id = 'test-id'; + fixture.componentRef.setInput('id', 'test-id'); fixture.detectChanges(); - const hostElement = fixture.nativeElement.querySelector('fd-message-strip'); - expect(hostElement.getAttribute('id')).toBe('test-id'); + expect(component.elementRef.nativeElement.getAttribute('id')).toBe('test-id'); }); it('should set role="note" on the host element', () => { - const hostElement = fixture.nativeElement.querySelector('fd-message-strip'); - expect(hostElement.getAttribute('role')).toBe('note'); + expect(component.elementRef.nativeElement.getAttribute('role')).toBe('note'); }); it('should set aria-labelledby attribute on the host element', () => { - const hostElement = fixture.nativeElement.querySelector('fd-message-strip'); - expect(hostElement.hasAttribute('aria-labelledby')).toBe(true); - expect(hostElement.getAttribute('aria-labelledby')).toBe( - `${component.id}-hidden-text ${component.id}-content-text` + expect(component.elementRef.nativeElement.getAttribute('aria-labelledby')).toBe( + `${component.id()}-hidden-text ${component.id()}-content-text` + ); + expect(component.elementRef.nativeElement.hasAttribute('aria-labelledby')).toBe(true); + expect(component.elementRef.nativeElement.getAttribute('aria-labelledby')).toBe( + `${component.id()}-hidden-text ${component.id()}-content-text` ); }); it('should set custom aria-labelledby attribute on the host element if ariaLabelledBy input provided', () => { - component.ariaLabelledBy = 'custom-id'; + fixture.componentRef.setInput('ariaLabelledBy', 'custom-id'); fixture.detectChanges(); - const hostElement = fixture.nativeElement.querySelector('fd-message-strip'); - expect(hostElement.hasAttribute('aria-labelledby')).toBe(true); - expect(hostElement.getAttribute('aria-labelledby')).toBe(component.ariaLabelledBy); + expect(component.elementRef.nativeElement.hasAttribute('aria-labelledby')).toBe(true); + expect(component.elementRef.nativeElement.getAttribute('aria-labelledby')).toBe(component.ariaLabelledBy()); }); it('should set an id attribute on the message strip text container', () => { fixture.detectChanges(); - const contentText = component.elementRef.nativeElement.querySelector('.fd-message-strip__text'); - expect(contentText.getAttribute('id')).toBe(`${component.id}-content-text`); + expect(component.elementRef.nativeElement.querySelector('.fd-message-strip__text').getAttribute('id')).toBe( + `${component.id()}-content-text` + ); }); }); diff --git a/libs/core/message-strip/message-strip.component.ts b/libs/core/message-strip/message-strip.component.ts index 9b14a035b1b..f647cd5bdb2 100644 --- a/libs/core/message-strip/message-strip.component.ts +++ b/libs/core/message-strip/message-strip.component.ts @@ -1,6 +1,6 @@ -import { BooleanInput } from '@angular/cdk/coercion'; import { AsyncPipe, NgTemplateOutlet } from '@angular/common'; import { + AfterContentChecked, booleanAttribute, ChangeDetectionStrategy, Component, @@ -8,12 +8,12 @@ import { DestroyRef, ElementRef, EventEmitter, - HostBinding, inject, - Input, + input, OnChanges, OnInit, Output, + signal, ViewEncapsulation } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; @@ -47,81 +47,72 @@ let messageStripUniqueId = 0; selector: 'fd-message-strip', templateUrl: './message-strip.component.html', styleUrl: './message-strip.component.scss', + standalone: true, host: { - '[attr.aria-label]': 'ariaLabel', - '[style.width]': 'width', - '[style.min-width]': 'minWidth', - '[style.margin-bottom]': 'marginBottom', - '[attr.id]': 'id', + '[attr.aria-label]': 'ariaLabel()', + '[attr.aria-labelledby]': 'ariaLabelledBy() || (id() + "-hidden-text " + id() + "-content-text")', + '[style.width]': 'width()', + '[style.min-width]': 'minWidth()', + '[style.margin-bottom]': 'marginBottom()', + '[attr.id]': 'id()', + '[class.fd-message-strip--link]': '_hasProjectedLink$()', + '[class.fd-message-strip--no-icon]': 'noIcon()', + '[class.fd-message-strip--dismissible]': 'dismissible()', role: 'note' }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ButtonComponent, ContentDensityDirective, I18nModule, NgTemplateOutlet, IconComponent, AsyncPipe] }) -export class MessageStripComponent implements OnInit, OnChanges, CssClassBuilder { +export class MessageStripComponent implements OnInit, OnChanges, CssClassBuilder, AfterContentChecked { + /** Event fired when the message-strip is dismissed. */ + @Output() // eslint-disable-next-line @angular-eslint/no-output-on-prefix + onDismiss: EventEmitter = new EventEmitter(); + + /** Custom icon component */ + @ContentChild(MessageStripIconDirective) + icon: MessageStripIconDirective; + /** User's custom classes */ - @Input() class = ''; + class = input(''); /** Whether the message strip is dismissible. */ - @Input({ transform: booleanAttribute }) - @HostBinding('class.fd-message-strip--dismissible') - dismissible: BooleanInput = true; + dismissible = input(true, { transform: booleanAttribute }); /** Id of the element that labels the message-strip. */ - @Input() ariaLabelledBy: Nullable; - - /** Set aria-labelledby for fd-message-strip. */ - @HostBinding('attr.aria-labelledby') - get hostAriaLabelledBy(): Nullable { - if (this.ariaLabelledBy) { - return this.ariaLabelledBy; - } - return `${this.id}-hidden-text ${this.id}-content-text`; - } + ariaLabelledBy = input>(); /** Title for dismiss button */ - @Input() - dismissBtnTitle: string; + dismissBtnTitle = input(); /** The default message strip does not have an icon. * The other types (warning, success, information and error) have icons by default. * To remove the icon set the property to true. */ - @Input({ transform: booleanAttribute }) - @HostBinding('class.fd-message-strip--no-icon') - noIcon: BooleanInput = false; + noIcon = input(false, { transform: booleanAttribute }); /** The type of the message strip. * Can be one of *warning*, *success*, *information*, *error* or null. */ - @Input() type: MessageStripType; + type = input(null); /** Id for the message-strip component. If omitted, a unique one is generated. */ - @Input() id: string = 'fd-message-strip-' + messageStripUniqueId++; + id = input('fd-message-strip-' + messageStripUniqueId++); /** Aria label for the message-strip component element. */ - @Input() ariaLabel: Nullable; + ariaLabel = input>(); /** Width of the message-strip. */ - @Input() width: string; + width = input(); /** Minimum width of the message-strip. */ - @Input() minWidth: string; + minWidth = input(); /** Margin bottom of the message-strip. */ - @Input() marginBottom: string; + marginBottom = input(); /** indication color of the message-strip. */ - @Input() indicationColor: MessageStripIndicationColor; - - /** Event fired when the message-strip is dismissed. */ - @Output() // eslint-disable-next-line @angular-eslint/no-output-on-prefix - onDismiss: EventEmitter = new EventEmitter(); - - /** Custom icon component */ - @ContentChild(MessageStripIconDirective) - icon: MessageStripIconDirective; + indicationColor = input(); /** message strip information read by screen readers */ messageStripHiddenText$: Observable; @@ -129,6 +120,9 @@ export class MessageStripComponent implements OnInit, OnChanges, CssClassBuilder /** default dismiss button text read by screen readers */ defaultDismissButtonText$: Observable; + /** @hidden */ + readonly elementRef = inject(ElementRef); + /** @hidden */ private readonly _destroyRef = inject(DestroyRef); @@ -139,7 +133,7 @@ export class MessageStripComponent implements OnInit, OnChanges, CssClassBuilder private _translationResolver = inject(TranslationResolver); /** @hidden */ - constructor(public readonly elementRef: ElementRef) {} + private _hasProjectedLink$ = signal(false); /** @hidden * CssClassBuilder interface implementation @@ -150,11 +144,11 @@ export class MessageStripComponent implements OnInit, OnChanges, CssClassBuilder buildComponentCssClass(): string[] { return [ 'fd-message-strip', - this.type ? `fd-message-strip--${this.type}` : '', - this.dismissible ? 'fd-message-strip--dismissible' : '', - this.noIcon ? 'fd-message-strip--no-icon' : '', - this.indicationColor ? `fd-message-strip--indication-color-${this.indicationColor}` : '', - this.class + this.type() ? `fd-message-strip--${this.type()}` : '', + this.dismissible() ? 'fd-message-strip--dismissible' : '', + this.noIcon() ? 'fd-message-strip--no-icon' : '', + this.indicationColor() ? `fd-message-strip--indication-color-${this.indicationColor()}` : '', + this.class() ?? '' ]; } @@ -164,6 +158,12 @@ export class MessageStripComponent implements OnInit, OnChanges, CssClassBuilder this.setScreenReaderTexts(); } + /** @hidden */ + ngAfterContentChecked(): void { + // Check for projected elements + this._hasProjectedLink$.set(!!this.elementRef.nativeElement.querySelector('a')); + } + /** @hidden */ ngOnChanges(): void { this.buildComponentCssClass(); @@ -171,15 +171,15 @@ export class MessageStripComponent implements OnInit, OnChanges, CssClassBuilder /** Whether icon container should be shown */ get shouldShowIcon(): boolean { - if (this.noIcon) { + if (this.noIcon()) { return false; } - return !!this.icon || !!this.type; + return !!this.icon || !!this.type(); } /** @hidden */ get typeSpecificIconName(): string { - switch (this.type) { + switch (this.type()) { case MessageStripTypeEnum.WARNING: return MessageStringIconEnum.ALERT; case MessageStripTypeEnum.SUCCESS: @@ -198,24 +198,20 @@ export class MessageStripComponent implements OnInit, OnChanges, CssClassBuilder */ dismiss(): void { this.elementRef.nativeElement.classList.add('fd-has-display-none'); - this.elementRef.nativeElement.classList.remove('fd-has-display-block'); this.onDismiss.emit(); } /** Sets screen reader texts for message strip type announcement and dismiss button */ private setScreenReaderTexts(): void { - if (!this.type) { - return; - } - const announcementMap: Record = { [MessageStripTypeEnum.WARNING]: MessageStripAnnouncement.WARNING, [MessageStripTypeEnum.SUCCESS]: MessageStripAnnouncement.SUCCESS, [MessageStripTypeEnum.ERROR]: MessageStripAnnouncement.ERROR, - [MessageStripTypeEnum.INFORMATION]: MessageStripAnnouncement.INFORMATION + [MessageStripTypeEnum.INFORMATION]: MessageStripAnnouncement.INFORMATION, + [MessageStripTypeEnum.DEFAULT]: MessageStripAnnouncement.DEFAULT }; - const announcementType = announcementMap[this.type]; + const announcementType = announcementMap[this.type() ?? MessageStripTypeEnum.DEFAULT]; if (announcementType) { const announcement$ = this._translateAnnouncement(announcementType); @@ -242,7 +238,7 @@ export class MessageStripComponent implements OnInit, OnChanges, CssClassBuilder withLatestFrom(announcement$), map(([lang, announcement]: [FdLanguage, string]) => { const closable = this._translationResolver.resolve(lang, MESSAGE_STRIP_CLOSABLE); - return `${announcement} ${this.dismissible ? closable : ''}`; + return `${announcement} ${this.dismissible() ? closable : ''}`; }) ); } diff --git a/libs/core/message-strip/message-strip.enum.ts b/libs/core/message-strip/message-strip.enum.ts index 5cb8011fbcc..98274a2ca91 100644 --- a/libs/core/message-strip/message-strip.enum.ts +++ b/libs/core/message-strip/message-strip.enum.ts @@ -2,7 +2,8 @@ export const enum MessageStripTypeEnum { INFORMATION = 'information', WARNING = 'warning', SUCCESS = 'success', - ERROR = 'error' + ERROR = 'error', + DEFAULT = 'default' } export const enum MessageStringIconEnum { @@ -16,7 +17,8 @@ export const enum MessageStripAnnouncement { INFORMATION = 'coreMessageStrip.announcementInfo', WARNING = 'coreMessageStrip.announcementWarning', SUCCESS = 'coreMessageStrip.announcementSuccess', - ERROR = 'coreMessageStrip.announcementError' + ERROR = 'coreMessageStrip.announcementError', + DEFAULT = 'coreMessageStrip.announcementDefault' } export type MessageStripAnnouncementType = `${MessageStripAnnouncement}`; diff --git a/libs/core/object-identifier/object-identifier.component.spec.ts b/libs/core/object-identifier/object-identifier.component.spec.ts index 79820607e28..a8f12cfb6e1 100644 --- a/libs/core/object-identifier/object-identifier.component.spec.ts +++ b/libs/core/object-identifier/object-identifier.component.spec.ts @@ -1,6 +1,7 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { Component, ElementRef, ViewChild } from '@angular/core'; +import { By } from '@angular/platform-browser'; import { LinkComponent } from '@fundamental-ngx/core/link'; import { ObjectIdentifierComponent } from './object-identifier.component'; @@ -21,7 +22,7 @@ class TestObjectIdentifierComponent { @ViewChild('linkRef', { read: ElementRef }) linkElementRef: ElementRef; - description: string; + description = 'Some description'; bold: boolean; medium: boolean; @@ -69,4 +70,33 @@ describe('ObjectIdentifierComponent', () => { fixture.detectChanges(); expect(testComponent.linkElementRef.nativeElement.classList.contains('fd-object-identifier__link')).toBe(true); }); + + it('should add a screen reader text with an id', () => { + const srElement = fixture.debugElement.query(By.css('.fd-object-identifier__sr-only')).nativeElement; + expect(srElement.textContent).toBe('Object Identifier'); + expect(srElement.id).toMatch(/fd-obj-identifier-id-\d+-sr/); + }); + + it('should add an aria-describedby containing the screen reader id to fd-link', () => { + const srElementId = fixture.debugElement.query(By.css('.fd-object-identifier__sr-only')).nativeElement.id; + expect(testComponent.linkElementRef.nativeElement.getAttribute('aria-describedby')).toContain(srElementId); + }); + + describe('when a description is provided', () => { + it('should add a description paragraph with an id', () => { + fixture.detectChanges(); + const description = fixture.debugElement.query(By.css('.fd-object-identifier__text')).nativeElement; + expect(description.textContent).toContain('Some description'); + expect(description.getAttribute('id')).toMatch(/fd-obj-identifier-id-\d+-desc/); + }); + + it('should add an aria-describedby pointing to the screen reader and the description id to fd-link', () => { + fixture.detectChanges(); + const srElementId = fixture.debugElement.query(By.css('.fd-object-identifier__sr-only')).nativeElement.id; + const descriptionId = fixture.debugElement.query(By.css('.fd-object-identifier__text')).nativeElement.id; + expect(testComponent.linkElementRef.nativeElement.getAttribute('aria-describedby')).toBe( + `${srElementId} ${descriptionId}` + ); + }); + }); }); diff --git a/libs/core/object-identifier/object-identifier.component.ts b/libs/core/object-identifier/object-identifier.component.ts index 77880093abf..62a3edec1cb 100644 --- a/libs/core/object-identifier/object-identifier.component.ts +++ b/libs/core/object-identifier/object-identifier.component.ts @@ -5,56 +5,74 @@ import { ContentChildren, DestroyRef, ElementRef, - HostBinding, - Input, QueryList, ViewEncapsulation, - inject + booleanAttribute, + computed, + inject, + input } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { Nullable } from '@fundamental-ngx/cdk/utils'; import { FD_LINK_COMPONENT } from '@fundamental-ngx/core/link'; +import { FdTranslatePipe } from '@fundamental-ngx/i18n'; import { startWith } from 'rxjs/operators'; +let objIdentifierId = 0; + @Component({ selector: 'fd-object-identifier', template: ` -

+

- @if (description) { -

- {{ description }} + @if (description()) { +

+ {{ description() }}

} + {{ + 'coreObjectIdentifier.announcement' | fdTranslate + }} `, styleUrl: './object-identifier.component.scss', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, - imports: [] + host: { + '[class.fd-object-identifier--medium]': 'medium()', + '[class.fd-object-identifier]': 'objectIdentifierClass' + }, + imports: [FdTranslatePipe] }) export class ObjectIdentifierComponent implements AfterContentInit { + /** @hidden */ + @ContentChildren(FD_LINK_COMPONENT, { read: ElementRef }) + linkComponents: QueryList; + + /** + * obj identifier id + * if not set, a default value is provided + */ + id = input('fd-obj-identifier-id-' + ++objIdentifierId); + + /** @hidden */ + _srId = computed(() => `${this.id()}-sr`); + + /** @hidden */ + _descriptionId = computed(() => `${this.id()}-desc`); + /** Description text */ - @Input() - description: Nullable; + description = input>(); /** Whether the title should be bolded */ - @Input() - bold = false; + bold = input(false, { transform: booleanAttribute }); /** Whether the title is medium size */ - @Input() - @HostBinding('class.fd-object-identifier--medium') - medium = false; + medium = input(false, { transform: booleanAttribute }); /** @hidden */ - @HostBinding('class.fd-object-identifier') objectIdentifierClass = true; - /** @hidden */ - @ContentChildren(FD_LINK_COMPONENT, { read: ElementRef }) - linkComponents: QueryList; - /** An RxJS Subject that will kill the data stream upon component’s destruction (for unsubscribing) */ private readonly _destroyRef = inject(DestroyRef); @@ -65,13 +83,22 @@ export class ObjectIdentifierComponent implements AfterContentInit { /** @hidden */ private _listenOnLinkQueryChange(): void { - this.linkComponents.changes - .pipe(startWith(0), takeUntilDestroyed(this._destroyRef)) - .subscribe(() => this.linkComponents.forEach((link) => this._addIdentifierClass(link))); + this.linkComponents.changes.pipe(startWith(0), takeUntilDestroyed(this._destroyRef)).subscribe(() => + this.linkComponents.forEach((link) => { + this._addIdentifierClass(link); + this._addAriaDescribedBy(link); + }) + ); } /** @hidden */ private _addIdentifierClass(link: ElementRef): void { link.nativeElement.classList.add('fd-object-identifier__link'); } + + /** @hidden */ + private _addAriaDescribedBy(link: ElementRef): void { + const describedBy = this.description() ? `${this._srId()} ${this._descriptionId()}` : `${this._srId()}`; + link.nativeElement.setAttribute('aria-describedby', describedBy); + } } diff --git a/libs/core/object-number/object-number.component.html b/libs/core/object-number/object-number.component.html index 0e8ba9e0301..25815819fe9 100644 --- a/libs/core/object-number/object-number.component.html +++ b/libs/core/object-number/object-number.component.html @@ -1,4 +1,14 @@ - - {{ number | number: (decimal ? _numberPipeConfig : '1.0-0') }} + + {{ number() | number: (decimal() ? _numberPipeConfig : '1.0-0') }} -{{ unit }} +{{ unit() }} +@if (emphasized()) { + {{ 'coreObjectNumber.emphasized' | fdTranslate }} +} +@if (status()) { + @if (statusMessage()) { + {{ statusMessage() }} + } @else { + {{ statusKey() | fdTranslate }} + } +} diff --git a/libs/core/object-number/object-number.component.spec.ts b/libs/core/object-number/object-number.component.spec.ts index 1d63bd58481..712f146f112 100644 --- a/libs/core/object-number/object-number.component.spec.ts +++ b/libs/core/object-number/object-number.component.spec.ts @@ -1,45 +1,41 @@ -import { Component, ViewChild } from '@angular/core'; +import { Pipe, PipeTransform } from '@angular/core'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { FdTranslatePipe } from '@fundamental-ngx/i18n'; import { ObjectNumberComponent } from './object-number.component'; -@Component({ - selector: 'fd-test-object-number', - template: ` `, - standalone: true, - imports: [ObjectNumberComponent] +@Pipe({ + name: 'fdTranslate', + standalone: true }) -class TestObjectNumberComponent { - @ViewChild(ObjectNumberComponent, { static: true }) - objectNumberComponent: ObjectNumberComponent; - unit = 'EUR'; - decimal = 0; - large = false; - status = ''; - class = ''; +class MockFdTranslatePipe implements PipeTransform { + transform(value: string): string { + // For testing, just return the translation key itself + // This way we can verify the correct keys are being used + return value; + } } describe('ObjectNumberComponent', () => { let component: ObjectNumberComponent; - let fixture: ComponentFixture; + let fixture: ComponentFixture; + const number = 1000.37; const numberTextEl = '.fd-object-number__text'; beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TestObjectNumberComponent] - }).compileComponents(); + imports: [ObjectNumberComponent] + }) + .overrideComponent(ObjectNumberComponent, { + remove: { imports: [FdTranslatePipe] }, + add: { imports: [MockFdTranslatePipe] } + }) + .compileComponents(); })); beforeEach(() => { - fixture = TestBed.createComponent(TestObjectNumberComponent); - component = fixture.componentInstance.objectNumberComponent; + fixture = TestBed.createComponent(ObjectNumberComponent); + component = fixture.componentInstance; fixture.detectChanges(); }); @@ -48,31 +44,26 @@ describe('ObjectNumberComponent', () => { }); it('should apply large design', () => { - fixture.componentInstance.large = true; + fixture.componentRef.setInput('large', true); fixture.detectChanges(); expect(component.elementRef.nativeElement.classList.contains('fd-object-number--large')).toBe(true); }); - it('should add status', () => { - fixture.componentInstance.status = 'positive'; - fixture.detectChanges(); - expect(component.elementRef.nativeElement.classList.contains('fd-object-number--positive')).toBe(true); - }); - it('should add custom class', () => { - fixture.componentInstance.class = 'custom-class'; + fixture.componentRef.setInput('class', 'custom-class'); fixture.detectChanges(); expect(component.elementRef.nativeElement.classList.contains('custom-class')).toBe(true); }); it('should display units', () => { - fixture.componentInstance.unit = 'TEST'; + fixture.componentRef.setInput('unit', 'TEST'); fixture.detectChanges(); expect(component.elementRef.nativeElement.textContent.includes('TEST')).toBe(true); }); it('should display decimals', () => { - fixture.componentInstance.decimal = 2; + fixture.componentRef.setInput('number', number); + fixture.componentRef.setInput('decimal', 2); fixture.detectChanges(); expect( component.elementRef.nativeElement.querySelector(numberTextEl).textContent.includes('1,000.37') @@ -80,8 +71,71 @@ describe('ObjectNumberComponent', () => { }); it('should not display decimals if [decimal] set to 0', () => { - fixture.componentInstance.decimal = 0; + fixture.componentRef.setInput('number', number); + fixture.componentRef.setInput('decimal', 0); fixture.detectChanges(); expect(component.elementRef.nativeElement.querySelector(numberTextEl).textContent.trim()).toEqual('1,000'); }); + + it('should add translated screen reader "Emphasized" text when object number is emphasized', () => { + fixture.componentRef.setInput('emphasized', true); + fixture.detectChanges(); + expect(component.elementRef.nativeElement.querySelector('.fd-object-number__sr-only').textContent).toEqual( + 'coreObjectNumber.emphasized' + ); + }); + + describe('when status is set', () => { + beforeEach(() => { + fixture.componentRef.setInput('status', 'positive'); + fixture.detectChanges(); + }); + + it('should add the correct status class', () => { + expect(component.elementRef.nativeElement.classList.contains('fd-object-number--positive')).toBe(true); + }); + + describe('when no statusMessage is provided', () => { + it('should add default translated screen reader status text', () => { + expect(fixture.nativeElement.querySelector('.fd-object-number__sr-only').textContent).toEqual( + 'coreObjectNumber.positive' + ); + }); + }); + + describe('when statusMessage is provided', () => { + it('should add the provided statusMessage as screen reader text', () => { + fixture.componentRef.setInput('statusMessage', 'Custom status message'); + fixture.detectChanges(); + expect(fixture.nativeElement.querySelector('.fd-object-number__sr-only').textContent).toEqual( + 'Custom status message' + ); + }); + }); + }); + + describe('when interactive is true', () => { + beforeEach(() => { + fixture.componentRef.setInput('interactive', true); + fixture.detectChanges(); + }); + + it('should add an "fd-object-number--interactive" class', () => { + expect(component.elementRef.nativeElement.classList.contains('fd-object-number--interactive')).toBe(true); + }); + + it('should set tabindex on the host to 0', () => { + expect(component.elementRef.nativeElement.tabIndex).toBe(0); + }); + + it('should set role on the host to "button"', () => { + expect(component.elementRef.nativeElement.role).toBe('button'); + }); + }); + + it('should add an "fd-object-number--inverted" class when inverted is true', () => { + fixture.componentRef.setInput('inverted', true); + fixture.detectChanges(); + expect(component.elementRef.nativeElement.classList.contains('fd-object-number--inverted')).toBe(true); + }); }); diff --git a/libs/core/object-number/object-number.component.ts b/libs/core/object-number/object-number.component.ts index cefffcde955..5b03e21a5dc 100644 --- a/libs/core/object-number/object-number.component.ts +++ b/libs/core/object-number/object-number.component.ts @@ -1,14 +1,17 @@ import { DecimalPipe } from '@angular/common'; import { + booleanAttribute, ChangeDetectionStrategy, Component, + computed, ElementRef, - Input, + input, OnChanges, OnInit, ViewEncapsulation } from '@angular/core'; -import { CssClassBuilder, Nullable, applyCssClass } from '@fundamental-ngx/cdk/utils'; +import { applyCssClass, CssClassBuilder, Nullable } from '@fundamental-ngx/cdk/utils'; +import { FdLanguageKeyIdentifier, FdTranslatePipe } from '@fundamental-ngx/i18n'; type ObjectStatus = 'negative' | 'critical' | 'positive' | 'informative'; @@ -17,53 +20,64 @@ type ObjectStatus = 'negative' | 'critical' | 'positive' | 'informative'; templateUrl: './object-number.component.html', styleUrl: './object-number.component.scss', host: { - '[attr.aria-labelledby]': 'ariaLabelledBy', - '[attr.aria-label]': 'ariaLabel' + '[attr.aria-labelledby]': 'ariaLabelledBy()', + '[attr.aria-label]': 'ariaLabel()', + '[attr.tabindex]': 'interactive() ? 0 : null', + '[attr.role]': 'interactive() ? "button" : null' }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, - imports: [DecimalPipe] + imports: [DecimalPipe, FdTranslatePipe] }) export class ObjectNumberComponent implements OnInit, OnChanges, CssClassBuilder { /** * Numerical value of the object number. */ - @Input() - number: number; + number = input(0); /** * Number of decimal places to show */ - @Input() - decimal = 0; + decimal = input(0); /** Sets unit of measure displayed. */ - @Input() - unit: string; + unit = input(''); /** Set the value to true to display the object number in bold text */ - @Input() - emphasized = false; + emphasized = input(false, { transform: booleanAttribute }); /** Set the value to true to display the object number in large text */ - @Input() - large = false; + large = input(false, { transform: booleanAttribute }); /** Sets status/semantic color 'negative' / 'critical' / 'positive' / 'informative' */ - @Input() - status: ObjectStatus; + status = input(null); + + /** An optional status message for the object number */ + statusMessage = input(); + + /** Status key to translate for screen readers */ + statusKey = computed(() => { + const status = this.status(); + if (this.isValidObjectStatus(status)) { + return `coreObjectNumber.${status}`; + } + return null; + }); /** User's custom classes */ - @Input() - class: string; + class = input(); /** Id of the element that labels object number. */ - @Input() - ariaLabelledBy: Nullable; + ariaLabelledBy = input>(null); /** Aria label for the object number. */ - @Input() - ariaLabel: Nullable; + ariaLabel = input>(null); + + /** Whether the object number is interactive */ + interactive = input(false, { transform: booleanAttribute }); + + /** Whether the object number is inverted. */ + inverted = input(false, { transform: booleanAttribute }); /** @hidden */ _numberPipeConfig = ''; @@ -80,9 +94,11 @@ export class ObjectNumberComponent implements OnInit, OnChanges, CssClassBuilder buildComponentCssClass(): string[] { return [ 'fd-object-number', - this.large ? 'fd-object-number--large' : '', - this.status ? `fd-object-number--${this.status}` : '', - this.class + this.large() ? 'fd-object-number--large' : '', + this.status() ? `fd-object-number--${this.status()}` : '', + this.interactive() ? 'fd-object-number--interactive' : '', + this.inverted() ? 'fd-object-number--inverted' : '', + this.class() ?? '' ]; } @@ -104,6 +120,14 @@ export class ObjectNumberComponent implements OnInit, OnChanges, CssClassBuilder /** @hidden */ private _buildNumberPipeConfig(): void { - this._numberPipeConfig = `0.${this.decimal}-${this.decimal}`; + this._numberPipeConfig = `0.${this.decimal()}-${this.decimal()}`; + } + + /** + * Type guard to check if the status is a valid ObjectStatus + * @hidden + */ + private isValidObjectStatus(status: ObjectStatus | null): status is ObjectStatus { + return status === 'negative' || status === 'critical' || status === 'positive' || status === 'informative'; } } diff --git a/libs/core/object-status/object-status.component.html b/libs/core/object-status/object-status.component.html new file mode 100644 index 00000000000..fdde05e34a6 --- /dev/null +++ b/libs/core/object-status/object-status.component.html @@ -0,0 +1,33 @@ +@if (glyph()) { + + +} +@if (textTemplate()) { + + + +} +@if (label()) { + {{ label() }} +} +@if (!clickable()) { + {{ 'coreObjectStatus.announcement' | fdTranslate }} +} +@if (indicationColor()) { + {{ + ('coreObjectStatus.indicationColor' | fdTranslate) + _indicationColorCode() + }} +} +@if (status()) { + @if (statusMessage()) { + {{ statusMessage() }} + } @else { + {{ _statusTranslateKey() | fdTranslate }} + } +} diff --git a/libs/core/object-status/object-status.component.spec.ts b/libs/core/object-status/object-status.component.spec.ts index 93b670cdfc0..22b84bf6b82 100644 --- a/libs/core/object-status/object-status.component.spec.ts +++ b/libs/core/object-status/object-status.component.spec.ts @@ -1,8 +1,31 @@ -import { Component, ElementRef, ViewChild } from '@angular/core'; +import { Component, ElementRef, InjectionToken, Pipe, PipeTransform, ViewChild } from '@angular/core'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; +import { FdTranslatePipe, TranslationResolver } from '@fundamental-ngx/i18n'; import { ObjectStatusComponent } from './object-status.component'; +@Pipe({ + name: 'fdTranslate', + standalone: true +}) +class MockFdTranslatePipe implements PipeTransform { + transform(value: string): string { + // For testing, just return the translation key itself + // This way we can verify the correct keys are being used + return value; + } +} + +class MockTranslationResolver { + resolve(_lang: string, key: string): string { + // Just return the key for testing + return key; + } +} + +export const FD_LANGUAGE = new InjectionToken('FD_LANGUAGE'); + @Component({ selector: 'fd-test-object-status', template: ` @@ -15,6 +38,7 @@ import { ObjectStatusComponent } from './object-status.component'; [clickable]="clickable" [inverted]="inverted" [large]="large" + [statusMessage]="statusMessage" > `, @@ -32,6 +56,7 @@ class TestObjectStatusComponent { clickable: boolean; inverted: boolean; large: boolean; + statusMessage: string; } describe('ObjectStatusComponent', () => { @@ -41,8 +66,21 @@ describe('ObjectStatusComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [TestObjectStatusComponent] - }).compileComponents(); + imports: [TestObjectStatusComponent], + providers: [ + { provide: TranslationResolver, useClass: MockTranslationResolver }, + { provide: FD_LANGUAGE, useValue: 'en' } + ] + }) + .overrideComponent(ObjectStatusComponent, { + remove: { + imports: [FdTranslatePipe] + }, + add: { + imports: [MockFdTranslatePipe] + } + }) + .compileComponents(); })); beforeEach(() => { @@ -57,16 +95,52 @@ describe('ObjectStatusComponent', () => { expect(objectStatusElementRef).toBeTruthy(); }); - it('Should add status', () => { - testComponent.status = 'positive'; - fixture.detectChanges(); - expect(objectStatusElementRef.nativeElement.classList.contains('fd-object-status--positive')).toBe(true); + describe('when status is set', () => { + beforeEach(() => { + testComponent.status = 'positive'; + fixture.detectChanges(); + }); + + it('should add the correct css status class', () => { + expect(objectStatusElementRef.nativeElement.classList.contains('fd-object-status--positive')).toBe(true); + }); + + describe('when no statusMessage is provided', () => { + it('should add default translated screen reader status text', () => { + expect( + fixture.debugElement.queryAll(By.css('.fd-object-status__sr-only'))[1].nativeElement.textContent + ).toBe('coreObjectStatus.positive'); + }); + }); + + describe('when statusMessage is provided', () => { + it('should add the provided statusMessage as screen reader text', () => { + testComponent.statusMessage = 'Custom status message'; + fixture.detectChanges(); + expect( + fixture.debugElement.queryAll(By.css('.fd-object-status__sr-only'))[1].nativeElement.textContent + ).toEqual('Custom status message'); + }); + }); }); - it('Should add indication color', () => { - testComponent.indicationColor = 2; - fixture.detectChanges(); - expect(objectStatusElementRef.nativeElement.classList.contains('fd-object-status--indication-2')).toBe(true); + describe('when indication color is set', () => { + beforeEach(() => { + testComponent.indicationColor = 2; + fixture.detectChanges(); + }); + + it('should add the correct indication color class', () => { + expect(objectStatusElementRef.nativeElement.classList.contains('fd-object-status--indication-2')).toBe( + true + ); + }); + + it('should set an indication color screen reader text', () => { + expect( + fixture.debugElement.queryAll(By.css('.fd-object-status__sr-only'))[1].nativeElement.textContent + ).toBe('coreObjectStatus.indicationColor 2'); + }); }); it('Should add icon', () => { @@ -90,10 +164,46 @@ describe('ObjectStatusComponent', () => { expect(objectStatusElementRef.nativeElement.classList.contains('fd-object-status--large')).toBe(true); }); - it('Should add clickable class', () => { - testComponent.clickable = true; - fixture.detectChanges(); - expect(objectStatusElementRef.nativeElement.classList.contains('fd-object-status--link')).toBe(true); + describe('when the object status is clickable', () => { + beforeEach(() => { + testComponent.clickable = true; + fixture.detectChanges(); + }); + + it('should add clickable class', () => { + expect(objectStatusElementRef.nativeElement.classList.contains('fd-object-status--link')).toBe(true); + }); + + it('should add tabindex=0', () => { + expect(objectStatusElementRef.nativeElement.getAttribute('tabindex')).toBe('0'); + }); + + it('should add role="button"', () => { + expect(objectStatusElementRef.nativeElement.getAttribute('role')).toBe('button'); + }); + + it('should add aria-roledescription', () => { + expect(objectStatusElementRef.nativeElement.getAttribute('aria-roledescription')).toBe( + 'coreObjectStatus.ariaRoleDescription' + ); + }); + + it('should not add an object status screen reader text', () => { + expect(fixture.debugElement.query(By.css('.fd-object-status__sr-only'))).toBeNull(); + }); + }); + + describe('when the object status is not clickable', () => { + beforeEach(() => { + testComponent.clickable = false; + fixture.detectChanges(); + }); + + it('should add an object status screen reader text ', () => { + expect( + fixture.debugElement.queryAll(By.css('.fd-object-status__sr-only'))[0].nativeElement.textContent + ).toBe('coreObjectStatus.announcement'); + }); }); it('Should display label', () => { diff --git a/libs/core/object-status/object-status.component.ts b/libs/core/object-status/object-status.component.ts index f5869139101..97e66da6c08 100644 --- a/libs/core/object-status/object-status.component.ts +++ b/libs/core/object-status/object-status.component.ts @@ -3,15 +3,28 @@ import { booleanAttribute, ChangeDetectionStrategy, Component, + computed, + DestroyRef, ElementRef, - Input, + inject, + input, OnChanges, OnInit, + signal, TemplateRef, ViewEncapsulation } from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { applyCssClass, ColorAccent, CssClassBuilder, Nullable, NullableObject } from '@fundamental-ngx/cdk/utils'; import { FD_DEFAULT_ICON_FONT_FAMILY, IconComponent, IconFont } from '@fundamental-ngx/core/icon'; +import { + FD_LANGUAGE, + FdLanguage, + FdLanguageKeyIdentifier, + FdTranslatePipe, + TranslationResolver +} from '@fundamental-ngx/i18n'; +import { map } from 'rxjs'; import { FD_OBJECT_STATUS_COMPONENT } from './tokens'; export type ObjectStatus = 'negative' | 'critical' | 'positive' | 'informative' | 'neutral'; @@ -19,26 +32,7 @@ export type ObjectStatus = 'negative' | 'critical' | 'positive' | 'informative' @Component({ // eslint-disable-next-line @angular-eslint/component-selector selector: '[fd-object-status]', - template: ` - @if (glyph) { - - - } - @if (textTemplate) { - - - - } - @if (label) { - {{ label }} - } - `, + templateUrl: './object-status.component.html', styleUrl: './object-status.component.scss', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, @@ -49,81 +43,110 @@ export type ObjectStatus = 'negative' | 'critical' | 'positive' | 'informative' } ], host: { - '[attr.tabindex]': 'clickable ? 0 : null' + '[attr.tabindex]': 'clickable() ? 0 : null', + '[attr.role]': 'clickable() ? "button" : null', + '[attr.aria-roledescription]': 'clickable() ? _ariaRoleDescription() : null' }, - imports: [IconComponent, NgTemplateOutlet] + imports: [IconComponent, NgTemplateOutlet, FdTranslatePipe] }) export class ObjectStatusComponent implements OnChanges, OnInit, CssClassBuilder { /** User's custom classes */ - @Input() - class: string; + class = input(); /** * The status represented by the Object Status. * Can be one of the following: 'negative' | 'critical' | 'positive' | 'informative' * For default Object Status omit this property */ - @Input() - status: Nullable; + status = input>(null); + + /** An optional status message for the Object Status. */ + statusMessage = input>(null); /** * Glyph (icon) of the Object Status. */ - @Input() - glyph: Nullable; + glyph = input>(null); /** Glyph font family */ - @Input() - glyphFont: IconFont = FD_DEFAULT_ICON_FONT_FAMILY; + glyphFont = input(FD_DEFAULT_ICON_FONT_FAMILY); /** Define the text content of the Object Status */ - @Input() - label: Nullable; + label = input>(null); /** * Label applied to glyph element, should be used when there is no text included */ - @Input() - glyphAriaLabel: string; + glyphAriaLabel = input(''); /** * A number representing the indication color. * For non-inverted state available numbers are from 1 to 8. * For inverted state available numbers are from 1 to 10. */ - @Input() - indicationColor: Nullable; + indicationColor = input>(null); /** Whether the Object Status is clickable. */ - @Input() - clickable = false; + clickable = input(false, { transform: booleanAttribute }); /** Whether the Object Status is inverted. */ - @Input({ transform: booleanAttribute }) - inverted = false; + inverted = input(false, { transform: booleanAttribute }); /** Whether the Object Status is in Large Design. */ - @Input() - large = false; + large = input(false, { transform: booleanAttribute }); /** Whether to use secondary set of indication colors. */ - @Input() - secondaryIndication = false; + secondaryIndication = input(false, { transform: booleanAttribute }); /** * Template reference for complex object status texts. */ - @Input() - textTemplate: Nullable>; + textTemplate = input>>(null); + + /** Aria role description for the object status. */ + ariaRoleDescription = input(''); /** @hidden */ _textClass: string; + /** @hidden */ + _indicationColorCode = computed( + () => ` ${this.indicationColor() ?? ''}${this.secondaryIndication() ? 'b' : ''}` + ); + + /** @hidden */ + _statusTranslateKey = computed(() => { + switch (this.status()) { + case 'negative': + return 'coreObjectStatus.negative'; + case 'critical': + return 'coreObjectStatus.critical'; + case 'positive': + return 'coreObjectStatus.positive'; + case 'informative': + return 'coreObjectStatus.informative'; + default: + return null; + } + }); + /** Whether the Object status is icon-only. */ get iconOnly(): boolean { - return !this.label && !this.textTemplate; + return !this.label() && !this.textTemplate(); } + /** @hidden */ + private readonly _ariaRoleDescription = signal(''); + + /** @hidden */ + private readonly _destroyRef = inject(DestroyRef); + + /** @hidden */ + private readonly _lang$ = inject(FD_LANGUAGE); + + /** @hidden */ + private _translationResolver = inject(TranslationResolver); + /** @hidden */ constructor(public readonly elementRef: ElementRef) {} @@ -134,17 +157,44 @@ export class ObjectStatusComponent implements OnChanges, OnInit, CssClassBuilder */ @applyCssClass buildComponentCssClass(): string[] { - return buildObjectStatusCssClasses(this); + return buildObjectStatusCssClasses({ + status: this.status(), + inverted: this.inverted(), + large: this.large(), + indicationColor: this.indicationColor(), + clickable: this.clickable(), + class: this.class(), + iconOnly: this.iconOnly, + secondaryIndication: this.secondaryIndication() + }); } /** @hidden */ ngOnChanges(): void { this.buildComponentCssClass(); } - /** @hidden */ ngOnInit(): void { this.buildComponentCssClass(); + this._setAriaRoleDescription(); + } + + /** @hidden */ + private _setAriaRoleDescription(): void { + if (this.ariaRoleDescription()) { + this._ariaRoleDescription.set(this.ariaRoleDescription()); + } else { + this._lang$ + .pipe( + takeUntilDestroyed(this._destroyRef), + map((lang: FdLanguage) => + this._translationResolver.resolve(lang, 'coreObjectStatus.ariaRoleDescription') + ) + ) + .subscribe((res) => { + this._ariaRoleDescription.set(res); + }); + } } } diff --git a/libs/core/quick-view/quick-view-group-item-label/quick-view-group-item-label.component.spec.ts b/libs/core/quick-view/quick-view-group-item-label/quick-view-group-item-label.component.spec.ts index e5f0864575e..ea42d0d04e9 100644 --- a/libs/core/quick-view/quick-view-group-item-label/quick-view-group-item-label.component.spec.ts +++ b/libs/core/quick-view/quick-view-group-item-label/quick-view-group-item-label.component.spec.ts @@ -35,7 +35,5 @@ describe('QuickViewGroupItemLabelComponent', () => { const quickViewContainer = fixture.debugElement.query(By.css('label[fd-form-label]')); expect(quickViewContainer.nativeElement.classList).toContain('fd-form-label__wrapper'); - expect(quickViewContainer.nativeElement.classList).toContain('fd-form-label__wrapper--inline-help'); - expect(quickViewContainer.nativeElement.classList).toContain('fd-form-label__wrapper--inline-help--after'); }); }); diff --git a/libs/docs/core/avatar/avatar-docs.component.html b/libs/docs/core/avatar/avatar-docs.component.html index 2fb03623bc0..18ae47ac1f4 100644 --- a/libs/docs/core/avatar/avatar-docs.component.html +++ b/libs/docs/core/avatar/avatar-docs.component.html @@ -134,7 +134,7 @@ Alternative options can be passed the following way alterIcon="content|alt|backup|default-icon" - + diff --git a/libs/docs/core/avatar/examples/avatar-default-image-with-alternative-options-example.component.html b/libs/docs/core/avatar/examples/avatar-default-image-with-alternative-options-example.component.html index 646230baf4f..86cc0a7ca12 100644 --- a/libs/docs/core/avatar/examples/avatar-default-image-with-alternative-options-example.component.html +++ b/libs/docs/core/avatar/examples/avatar-default-image-with-alternative-options-example.component.html @@ -1,6 +1,7 @@ - + + - + Unknown File Format Detected -
-
-

Unknown File Format

-

- We found some files that have an unknown file format. Let's take a look and fix the issue. -

-
-
+
+
+
+

Unknown File Format

+

+ We found some files that have an unknown file format. Let's take a look and fix the issue. +

+
+
+
diff --git a/libs/docs/core/illustrated-message/examples/illustrated-message-dot-example.component.html b/libs/docs/core/illustrated-message/examples/illustrated-message-dot-example.component.html index 24aef7adef6..f792c20804d 100644 --- a/libs/docs/core/illustrated-message/examples/illustrated-message-dot-example.component.html +++ b/libs/docs/core/illustrated-message/examples/illustrated-message-dot-example.component.html @@ -2,15 +2,17 @@ -
-
-

Delivery Delay

-

- A broken cooling system resulted in melted ice cream in transit. Another delivery is already on - the way. -

-
-
+
+
+
+

Delivery Delay

+

+ A broken cooling system resulted in melted ice cream in transit. Another delivery is already + on the way. +

+
+
+
diff --git a/libs/docs/core/illustrated-message/examples/illustrated-message-example.component.html b/libs/docs/core/illustrated-message/examples/illustrated-message-example.component.html index 71f7f5e1eab..6f7937c921f 100644 --- a/libs/docs/core/illustrated-message/examples/illustrated-message-example.component.html +++ b/libs/docs/core/illustrated-message/examples/illustrated-message-example.component.html @@ -1,5 +1,18 @@ -
-
+
+

Delivery Delay

@@ -10,4 +23,4 @@

Delivery Delay

-
+ diff --git a/libs/docs/core/illustrated-message/examples/illustrated-message-inline-example.component.html b/libs/docs/core/illustrated-message/examples/illustrated-message-inline-example.component.html index d9b42800e40..fb5cdea78c3 100644 --- a/libs/docs/core/illustrated-message/examples/illustrated-message-inline-example.component.html +++ b/libs/docs/core/illustrated-message/examples/illustrated-message-inline-example.component.html @@ -1,10 +1,13 @@
-
-
-

Delivery Delay

-

- A broken cooling system resulted in melted ice cream in transit. Another delivery is already on the way. -

-
-
+
+
+
+

Delivery Delay

+

+ A broken cooling system resulted in melted ice cream in transit. Another delivery is already on the + way. +

+
+
+
diff --git a/libs/docs/core/illustrated-message/examples/illustrated-message-spot-example.component.html b/libs/docs/core/illustrated-message/examples/illustrated-message-spot-example.component.html index e891c9d2361..80db67327eb 100644 --- a/libs/docs/core/illustrated-message/examples/illustrated-message-spot-example.component.html +++ b/libs/docs/core/illustrated-message/examples/illustrated-message-spot-example.component.html @@ -2,40 +2,46 @@ [style.max-width.px]="704" style="display: flex; justify-content: space-between; gap: 24px; align-items: flex-start" > - + -

Folder

+

Folder

-
-
-

Unknown File Format

-

- We found some files that have an unknown file format. Let's take a look and fix the issue. -

-
- - - -
+
+
+
+

Unknown File Format

+

+ We found some files that have an unknown file format. Let's take a look and fix the issue. +

+
+ + + +
+
- + -

Inbox

+

Inbox

-
-
-

All Caught Up

-

You've read all of the messages in your inbox! Check back later.

-
-
+
+
+
+

All Caught Up

+

+ You've read all of the messages in your inbox! Check back later. +

+
+
+
diff --git a/libs/docs/core/input/examples/input-state-example.component.html b/libs/docs/core/input/examples/input-state-example.component.html index 964c939671f..9c306b3853c 100644 --- a/libs/docs/core/input/examples/input-state-example.component.html +++ b/libs/docs/core/input/examples/input-state-example.component.html @@ -1,20 +1,10 @@
- - - - Pellentesque metus lacus commodo eget justo ut rutrum varius nunc - - +
+

+
@@ -28,11 +18,13 @@ aria-errormessage="input-state-form-message-53" /> - Pellentesque metus lacus commodo eget justo ut rutrum varius nunc + Username must be at least 6 characters.
+

+
- Pellentesque metus lacus commodo eget justo ut rutrum varius nunc + Make sure this is easy for you to remember.
+

+
@@ -63,18 +57,21 @@ id="input-55" placeholder="Field placeholder text" state="information" - aria-describedby="input-state-form-message-55" + valueStateInformationMessage="Custom Value State Information Message" /> - - Pellentesque metus lacus commodo eget justo ut rutrum varius nunc - + You can leave this blank if not applicable.
+

+
+ +

+
diff --git a/libs/docs/core/link/examples/link-example.component.html b/libs/docs/core/link/examples/link-example.component.html index 0aaeb81d4a7..cc958d0d229 100644 --- a/libs/docs/core/link/examples/link-example.component.html +++ b/libs/docs/core/link/examples/link-example.component.html @@ -1,21 +1,25 @@ -Standard Link

-Emphasized Link +Standard Link

+Emphasized Link

Disabled Link

- + Icon Right Link

- + Icon Left Link

-Subtle Link

+Subtle Link +

+ +Touch Target +

- Inverted Link + Inverted Link
diff --git a/libs/docs/core/message-strip/examples/message-strip-example.component.html b/libs/docs/core/message-strip/examples/message-strip-example.component.html index 9c9ba3f6d6d..818a53c1696 100644 --- a/libs/docs/core/message-strip/examples/message-strip-example.component.html +++ b/libs/docs/core/message-strip/examples/message-strip-example.component.html @@ -2,6 +2,9 @@ A dismissible warning message strip. A non-dismissible success message strip. - A dismissible information message strip. + + A dismissible information message strip. + Link1 + A non-dismissible error message strip. A dismissible normal message strip. diff --git a/libs/docs/core/message-strip/examples/message-strip-example.component.scss b/libs/docs/core/message-strip/examples/message-strip-example.component.scss index 796eb0d40df..992c1059f4d 100644 --- a/libs/docs/core/message-strip/examples/message-strip-example.component.scss +++ b/libs/docs/core/message-strip/examples/message-strip-example.component.scss @@ -4,3 +4,8 @@ fd-message-strip { fd-message-strip:last-child { margin: 0; } + +.fd-link--emphasized { + text-decoration: none; + font-family: var(--sapFontBoldFamily); +} diff --git a/libs/docs/core/object-identifier/examples/object-identifier-descriptive-example.component.html b/libs/docs/core/object-identifier/examples/object-identifier-descriptive-example.component.html index 47efdcf1280..7d333dd4f6a 100644 --- a/libs/docs/core/object-identifier/examples/object-identifier-descriptive-example.component.html +++ b/libs/docs/core/object-identifier/examples/object-identifier-descriptive-example.component.html @@ -7,11 +7,11 @@

- Link + Link

- Bold Link + Bold Link diff --git a/libs/docs/core/object-identifier/examples/object-identifier-link-example.component.html b/libs/docs/core/object-identifier/examples/object-identifier-link-example.component.html index 506af66ec56..5a8e9cb1edb 100644 --- a/libs/docs/core/object-identifier/examples/object-identifier-link-example.component.html +++ b/libs/docs/core/object-identifier/examples/object-identifier-link-example.component.html @@ -1,9 +1,9 @@ - Link + Link

- Bold Link + Bold Link diff --git a/libs/docs/core/object-number/examples/object-number-examples.component.ts b/libs/docs/core/object-number/examples/object-number-examples.component.ts index bbe4cfe8f21..08908a5ff7a 100644 --- a/libs/docs/core/object-number/examples/object-number-examples.component.ts +++ b/libs/docs/core/object-number/examples/object-number-examples.component.ts @@ -56,3 +56,27 @@ export class ObjectNumberDecimalExampleComponent {} imports: [ObjectNumberModule] }) export class ObjectNumberTruncationExampleComponent {} + +@Component({ + selector: 'fd-object-number-interactive-example', + templateUrl: './object-number-interactive-example.component.html', + styleUrls: ['./object-number-examples.component.scss'], + imports: [ObjectNumberModule] +}) +export class ObjectNumberInteractiveExampleComponent {} + +@Component({ + selector: 'fd-object-number-inverted-example', + templateUrl: './object-number-inverted-example.component.html', + styleUrls: ['./object-number-examples.component.scss'], + imports: [ObjectNumberModule] +}) +export class ObjectNumberInvertedExampleComponent {} + +@Component({ + selector: 'fd-object-number-inverted-interactive-example', + templateUrl: './object-number-inverted-interactive-example.component.html', + styleUrls: ['./object-number-examples.component.scss'], + imports: [ObjectNumberModule] +}) +export class ObjectNumberInvertedInteractiveExampleComponent {} diff --git a/libs/docs/core/object-number/examples/object-number-interactive-example.component.html b/libs/docs/core/object-number/examples/object-number-interactive-example.component.html new file mode 100644 index 00000000000..6cb8e90ef2d --- /dev/null +++ b/libs/docs/core/object-number/examples/object-number-interactive-example.component.html @@ -0,0 +1,19 @@ + + + + + diff --git a/libs/docs/core/object-number/examples/object-number-inverted-example.component.html b/libs/docs/core/object-number/examples/object-number-inverted-example.component.html new file mode 100644 index 00000000000..67567922723 --- /dev/null +++ b/libs/docs/core/object-number/examples/object-number-inverted-example.component.html @@ -0,0 +1,5 @@ + + + + + diff --git a/libs/docs/core/object-number/examples/object-number-inverted-interactive-example.component.html b/libs/docs/core/object-number/examples/object-number-inverted-interactive-example.component.html new file mode 100644 index 00000000000..5db7e3ad9c3 --- /dev/null +++ b/libs/docs/core/object-number/examples/object-number-inverted-interactive-example.component.html @@ -0,0 +1,33 @@ + + + + + diff --git a/libs/docs/core/object-number/examples/object-number-status-example.component.html b/libs/docs/core/object-number/examples/object-number-status-example.component.html index cb1dd3140d9..6b57e1e6f95 100644 --- a/libs/docs/core/object-number/examples/object-number-status-example.component.html +++ b/libs/docs/core/object-number/examples/object-number-status-example.component.html @@ -7,3 +7,10 @@
+
+ diff --git a/libs/docs/core/object-number/object-number-docs.component.html b/libs/docs/core/object-number/object-number-docs.component.html index 820f804c132..267c5d8015e 100644 --- a/libs/docs/core/object-number/object-number-docs.component.html +++ b/libs/docs/core/object-number/object-number-docs.component.html @@ -7,10 +7,20 @@ Object Number Status -The status option can be set to positive, informative, critical and negative. If you omit this - property the default status will be applied. + +

+ The status option can be set to positive, informative, critical and negative. If you omit this + property the default status will be applied. +

+

+ When a status is passed, the corresponding styles will be applied to the component and a screen reader text will + be added - "Value State Success", "Value State Information", "Value State Warning", "Value State Error". +

+

+ If you wish to provide a custom screen reader text, you could do it by passing an optional + statusMessage. +

+
@@ -62,3 +72,43 @@ + + Object Number Interactive + +

To display the object number as interactive, add [interactive]="true" option.

+

+ Besides adding the fd-object-number__interactive modifier class to apply the correct styles, that + option will also add role="button" and tabindex="0" to the element. +

+
+ + + + + + + + Object Number Inverted + +

To display the object number as inverted, add [inverted]="true" option.

+
+ + + + + + + + + Object Number Inverted Interactive + + +

+ To display the object number as both inverted and interactive, add [inverted]="true" and + [interactive]="true" options. +

+
+ + + + diff --git a/libs/docs/core/object-number/object-number-docs.component.ts b/libs/docs/core/object-number/object-number-docs.component.ts index 77f6c2e53e1..d326ed9ee51 100644 --- a/libs/docs/core/object-number/object-number-docs.component.ts +++ b/libs/docs/core/object-number/object-number-docs.component.ts @@ -13,6 +13,9 @@ import { ObjectNumberBasicExampleComponent, ObjectNumberBoldExampleComponent, ObjectNumberDecimalExampleComponent, + ObjectNumberInteractiveExampleComponent, + ObjectNumberInvertedExampleComponent, + ObjectNumberInvertedInteractiveExampleComponent, ObjectNumberLargeExampleComponent, ObjectNumberStatusExampleComponent, ObjectNumberTruncationExampleComponent, @@ -26,6 +29,9 @@ const unitsHtml = 'object-number-units-example.component.html'; const statusHtml = 'object-number-status-example.component.html'; const decimalHtml = 'object-number-decimal-example.component.html'; const truncationHtml = 'object-number-truncation-example.component.html'; +const interactiveHtml = 'object-number-interactive-example.component.html'; +const invertedHtml = 'object-number-inverted-example.component.html'; +const invertedInteractiveHtml = 'object-number-inverted-interactive-example.component.html'; @Component({ selector: 'app-object-number', @@ -42,7 +48,10 @@ const truncationHtml = 'object-number-truncation-example.component.html'; ObjectNumberBoldExampleComponent, ObjectNumberUnitsExampleComponent, ObjectNumberDecimalExampleComponent, - ObjectNumberTruncationExampleComponent + ObjectNumberTruncationExampleComponent, + ObjectNumberInteractiveExampleComponent, + ObjectNumberInvertedExampleComponent, + ObjectNumberInvertedInteractiveExampleComponent ] }) export class ObjectNumberDocsComponent { @@ -93,6 +102,7 @@ export class ObjectNumberDocsComponent { fileName: 'core-object-number-decimal-example' } ]; + truncation: ExampleFile[] = [ { language: 'html', @@ -100,4 +110,28 @@ export class ObjectNumberDocsComponent { fileName: 'core-object-number-truncation-example' } ]; + + interactive: ExampleFile[] = [ + { + language: 'html', + code: getAssetFromModuleAssets(interactiveHtml), + fileName: 'core-object-number-interactive-example' + } + ]; + + inverted: ExampleFile[] = [ + { + language: 'html', + code: getAssetFromModuleAssets(invertedHtml), + fileName: 'core-object-number-inverted-example' + } + ]; + + invertedInteractive: ExampleFile[] = [ + { + language: 'html', + code: getAssetFromModuleAssets(invertedInteractiveHtml), + fileName: 'core-object-number-inverted-interactive-example' + } + ]; } diff --git a/libs/docs/core/object-status/examples/object-status-default-example.component.html b/libs/docs/core/object-status/examples/object-status-default-example.component.html index 0afc4c5cd90..d66bb273480 100644 --- a/libs/docs/core/object-status/examples/object-status-default-example.component.html +++ b/libs/docs/core/object-status/examples/object-status-default-example.component.html @@ -5,86 +5,29 @@

Object Status Icon Only

Object Status Text Only

- - - - - + + + + +

Object Status Icon and Text

- - - - - + + + + +

Object Status with Indication Colors

@for (item of indicators; track item) { - + }

Clickable Object Status

- - - - - +
+
+
+
+


@for (item of indicators; track item) { - +
} diff --git a/libs/docs/core/object-status/examples/object-status-inverted-example.component.html b/libs/docs/core/object-status/examples/object-status-inverted-example.component.html index f7f666c13a8..825a862a639 100644 --- a/libs/docs/core/object-status/examples/object-status-inverted-example.component.html +++ b/libs/docs/core/object-status/examples/object-status-inverted-example.component.html @@ -1,218 +1,50 @@

Inverted Object Status with Icon and Text

- - - - - - - - - + + + + + + + + +

Inverted Object Status Icon and Text on a span

- - - - - + + + + +

Inverted Object Status Icon and Text on an anchor

- - - -
+
+
+
- +>
+

Inverted Object Status Number

- - - - - + + + + +

Inverted Object Status with Generic Indication Colors

@for (item of indicators; track item) { - +
}

Secondary Set of Inverted indication colors

@for (item of indicators; track item) { - + > } diff --git a/libs/docs/core/object-status/examples/object-status-large-example.component.html b/libs/docs/core/object-status/examples/object-status-large-example.component.html index f72f5dd8c82..632c003be85 100644 --- a/libs/docs/core/object-status/examples/object-status-large-example.component.html +++ b/libs/docs/core/object-status/examples/object-status-large-example.component.html @@ -1,30 +1,6 @@ - - - + + +

- - - - - + + + + +

- - - - - + + + + +

- - - - - + + + + +

- - +
-
+
-
+
- +>
+
diff --git a/libs/docs/core/textarea/examples/textarea-state-example.component.html b/libs/docs/core/textarea/examples/textarea-state-example.component.html index a25feb3e32c..6138d49eac9 100644 --- a/libs/docs/core/textarea/examples/textarea-state-example.component.html +++ b/libs/docs/core/textarea/examples/textarea-state-example.component.html @@ -1,74 +1,84 @@
- + - Pellentesque metus lacus commodo eget justo ut rutrum varius nunc + Thank you! Your feedback has been saved successfully.
+


+
- + - Pellentesque metus lacus commodo eget justo ut rutrum varius nunc + Address is required. Please provide your billing details.
+


+
- + - Pellentesque metus lacus commodo eget justo ut rutrum varius nunc + Keep instructions under 250 characters to avoid truncation.
+


+
- + - Pellentesque metus lacus commodo eget justo ut rutrum varius nunc + Your request will be reviewed by our support team within 24 hours.
+


+
- +
+


+
- +
diff --git a/libs/i18n/src/lib/models/fd-language-key-identifier.ts b/libs/i18n/src/lib/models/fd-language-key-identifier.ts index 5167ad7e127..abbee4b22d6 100644 --- a/libs/i18n/src/lib/models/fd-language-key-identifier.ts +++ b/libs/i18n/src/lib/models/fd-language-key-identifier.ts @@ -3,6 +3,7 @@ * This type is generated automatically. Please, do not change it manually. **/ export type FdLanguageKeyIdentifier = + | 'coreAvatar.defaultLabel' | 'coreCalendar.yearSelectionLabel' | 'coreCalendar.yearsRangeSelectionLabel' | 'coreCalendar.monthSelectionLabel' @@ -57,11 +58,14 @@ export type FdLanguageKeyIdentifier = | 'coreGridList.listItemStatusContainsErrors' | 'coreGridList.listItemStatusLocked' | 'coreGridList.listItemStatusDraft' + | 'coreLink.emphasized' + | 'coreLink.subtle' | 'coreMessageStrip.dismissLabel' | 'coreMessageStrip.announcementInfo' | 'coreMessageStrip.announcementWarning' | 'coreMessageStrip.announcementError' | 'coreMessageStrip.announcementSuccess' + | 'coreMessageStrip.announcementDefault' | 'coreMessageStrip.closable' | 'coreMultiInput.countListResultsSingular' | 'coreMultiInput.countListResultsPlural' @@ -73,6 +77,19 @@ export type FdLanguageKeyIdentifier = | 'coreNavigation.mainNavigation' | 'coreNavigation.navigationPath' | 'coreNestedList.linkItemAriaLabel' + | 'coreObjectIdentifier.announcement' + | 'coreObjectNumber.emphasized' + | 'coreObjectNumber.negative' + | 'coreObjectNumber.critical' + | 'coreObjectNumber.positive' + | 'coreObjectNumber.informative' + | 'coreObjectStatus.announcement' + | 'coreObjectStatus.ariaRoleDescription' + | 'coreObjectStatus.indicationColor' + | 'coreObjectStatus.negative' + | 'coreObjectStatus.critical' + | 'coreObjectStatus.positive' + | 'coreObjectStatus.informative' | 'coreOverflowLayout.moreItemsButton' | 'corePagination.pageLabel' | 'corePagination.currentPageAriaLabel' diff --git a/libs/i18n/src/lib/models/fd-language.ts b/libs/i18n/src/lib/models/fd-language.ts index e9e697e5011..12f761aef32 100644 --- a/libs/i18n/src/lib/models/fd-language.ts +++ b/libs/i18n/src/lib/models/fd-language.ts @@ -4,6 +4,10 @@ import { FdLanguageKey } from './fd-language-key'; * Representation of the dictionary per UI component */ export interface FdLanguage { + coreAvatar: { + /** Default label for the Avatar. */ + defaultLabel: FdLanguageKey; + }; coreCalendar: { /** Year selection aria label. Used on the button to navigate to the years view. */ yearSelectionLabel: FdLanguageKey; @@ -118,12 +122,17 @@ export interface FdLanguage { listItemStatusLocked: FdLanguageKey; listItemStatusDraft: FdLanguageKey; }; + coreLink: { + emphasized: FdLanguageKey; + subtle: FdLanguageKey; + }; coreMessageStrip: { dismissLabel: FdLanguageKey; announcementInfo: FdLanguageKey; announcementWarning: FdLanguageKey; announcementError: FdLanguageKey; announcementSuccess: FdLanguageKey; + announcementDefault: FdLanguageKey; closable: FdLanguageKey; }; coreMultiInput: { @@ -153,6 +162,25 @@ export interface FdLanguage { selectedDescription: string; }>; }; + coreObjectIdentifier: { + announcement: FdLanguageKey; + }; + coreObjectNumber: { + emphasized: FdLanguageKey; + negative: FdLanguageKey; + critical: FdLanguageKey; + positive: FdLanguageKey; + informative: FdLanguageKey; + }; + coreObjectStatus: { + announcement: FdLanguageKey; + ariaRoleDescription: FdLanguageKey; + indicationColor: FdLanguageKey; + negative: FdLanguageKey; + critical: FdLanguageKey; + positive: FdLanguageKey; + informative: FdLanguageKey; + }; coreOverflowLayout: { /** @param count */ moreItemsButton: FdLanguageKey<{ count: number }>; diff --git a/libs/i18n/src/lib/pipes/fd-translate.pipe.spec.ts b/libs/i18n/src/lib/pipes/fd-translate.pipe.spec.ts index b34a6eb24db..fe9042b2cf8 100644 --- a/libs/i18n/src/lib/pipes/fd-translate.pipe.spec.ts +++ b/libs/i18n/src/lib/pipes/fd-translate.pipe.spec.ts @@ -33,7 +33,7 @@ describe('FdTranslate pipe', () => { return testComponentFixture.nativeElement.textContent.trim(); } - function setCtx(key: FdLanguageKeyIdentifier, args?: FdLanguageKeyArgs): void { + function setCtx(key: FdLanguageKeyIdentifier | null, args?: FdLanguageKeyArgs): void { testComponentFixture.componentRef.setInput('testKey', key); testComponentFixture.componentRef.setInput('testArgs', args); testComponentFixture.detectChanges(); @@ -74,6 +74,12 @@ describe('FdTranslate pipe', () => { setCtx('wrong'); expectValueToBe(''); }); + + it('should return an empty string if null is passed', () => { + setCtx(null); + expectValueToBe(''); + }); + it('should work with function values', () => { const nodeMembersCount = jest.fn((params) => `${params['count']} function members`); lang$.next({ diff --git a/libs/i18n/src/lib/pipes/fd-translate.pipe.ts b/libs/i18n/src/lib/pipes/fd-translate.pipe.ts index 4453f3206df..cf26a9274f4 100644 --- a/libs/i18n/src/lib/pipes/fd-translate.pipe.ts +++ b/libs/i18n/src/lib/pipes/fd-translate.pipe.ts @@ -33,7 +33,15 @@ export class FdTranslatePipe implements PipeTransform { } /** Translate a key with arguments and, optionally, default value */ - transform(key: FdLanguageKeyIdentifier, args?: FdLanguageKeyArgs | Record, defaultValue = ''): string { + transform( + key: FdLanguageKeyIdentifier | null, + args?: FdLanguageKeyArgs | Record, + defaultValue = '' + ): string { + if (key === null) { + return defaultValue; + } + this._key$.next(key); this._args$.next(args); diff --git a/libs/i18n/src/lib/translations/translations.properties b/libs/i18n/src/lib/translations/translations.properties index d9b63b31c44..db1fe966a0e 100644 --- a/libs/i18n/src/lib/translations/translations.properties +++ b/libs/i18n/src/lib/translations/translations.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel = Select year #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -108,6 +110,10 @@ coreGridList.listItemStatusContainsErrors = Contains errors coreGridList.listItemStatusLocked = Locked #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft = Draft +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel = Close #XACT: Screen reader text explaining the type of the message strip. @@ -118,6 +124,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -140,6 +148,32 @@ coreNavigation.mainNavigation = Main Navigation coreNavigation.navigationPath = Navigation Path #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel = Tree Item {itemDetails}, {selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton = {count} more #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations.ts b/libs/i18n/src/lib/translations/translations.ts index 0ffd6ee7f0c..e0b19610bc6 100644 --- a/libs/i18n/src/lib/translations/translations.ts +++ b/libs/i18n/src/lib/translations/translations.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Select year', yearsRangeSelectionLabel: 'Select years range', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Locked', listItemStatusDraft: 'Draft' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Close', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Tree Item {itemDetails}, {selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '{count} more' }, diff --git a/libs/i18n/src/lib/translations/translations_ar.properties b/libs/i18n/src/lib/translations/translations_ar.properties index db89639daf3..a9bd427e818 100644 --- a/libs/i18n/src/lib/translations/translations_ar.properties +++ b/libs/i18n/src/lib/translations/translations_ar.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=تحديد السنة #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=يحتوي على أخطاء coreGridList.listItemStatusLocked=مؤمَّن #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=أولي +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=تجاهل #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=التنقل الرئيسي coreNavigation.navigationPath=مسار التنقل #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=عنصر الشجرة {itemDetails}، {index} من {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Screen reader announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton={count} إضافية #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_ar.ts b/libs/i18n/src/lib/translations/translations_ar.ts index 6e8f3318624..9fdce0d130d 100644 --- a/libs/i18n/src/lib/translations/translations_ar.ts +++ b/libs/i18n/src/lib/translations/translations_ar.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_ar.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'تحديد السنة', yearsRangeSelectionLabel: 'تحديد نطاق السنوات', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'مؤمَّن', listItemStatusDraft: 'أولي' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'تجاهل', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'عنصر الشجرة {itemDetails}، {index} من {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '{count} إضافية' }, diff --git a/libs/i18n/src/lib/translations/translations_bg.properties b/libs/i18n/src/lib/translations/translations_bg.properties index 02c59c3bdc4..08ff374dbaf 100644 --- a/libs/i18n/src/lib/translations/translations_bg.properties +++ b/libs/i18n/src/lib/translations/translations_bg.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Избор на година #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Съдържа грешки coreGridList.listItemStatusLocked=Заключено #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Чернова +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Отхвърляне #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Основна навигация coreNavigation.navigationPath=Път на навигацията #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Позиция от дърво {itemDetails}, {index} от {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton=още {count} #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_bg.ts b/libs/i18n/src/lib/translations/translations_bg.ts index 4b180df2c77..b024ef98925 100644 --- a/libs/i18n/src/lib/translations/translations_bg.ts +++ b/libs/i18n/src/lib/translations/translations_bg.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_bg.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Избор на година', yearsRangeSelectionLabel: 'Избор на диапазон от години', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Заключено', listItemStatusDraft: 'Чернова' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Отхвърляне', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Позиция от дърво {itemDetails}, {index} от {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: 'още {count}' }, diff --git a/libs/i18n/src/lib/translations/translations_cs.properties b/libs/i18n/src/lib/translations/translations_cs.properties index d6fddfc6a55..75534a76732 100644 --- a/libs/i18n/src/lib/translations/translations_cs.properties +++ b/libs/i18n/src/lib/translations/translations_cs.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Vybrat rok #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Obsahuje chyby coreGridList.listItemStatusLocked=Blokováno #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Koncept +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Zrušit #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Hlavní navigace coreNavigation.navigationPath=Navigační cesta #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Položka stromu {itemDetails}, {index} z {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Screen reader announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton=další(ch) {count} #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_cs.ts b/libs/i18n/src/lib/translations/translations_cs.ts index 7f8672888d5..21e86fc2717 100644 --- a/libs/i18n/src/lib/translations/translations_cs.ts +++ b/libs/i18n/src/lib/translations/translations_cs.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_cs.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Vybrat rok', yearsRangeSelectionLabel: 'Vybrat rozsah let', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Blokováno', listItemStatusDraft: 'Koncept' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Zrušit', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Položka stromu {itemDetails}, {index} z {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: 'další(ch) {count}' }, diff --git a/libs/i18n/src/lib/translations/translations_da.properties b/libs/i18n/src/lib/translations/translations_da.properties index 150d7c862cf..8b3c76e6cf8 100644 --- a/libs/i18n/src/lib/translations/translations_da.properties +++ b/libs/i18n/src/lib/translations/translations_da.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Vælg år #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Indeholder fejl coreGridList.listItemStatusLocked=Låst #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Udkast +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Afvis #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Hovednavigation coreNavigation.navigationPath=Navigationssti #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Træelement {itemDetails}, {index} af {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Screen reader announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton={count} mere #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_da.ts b/libs/i18n/src/lib/translations/translations_da.ts index 734180ae95b..6cd37c87b5c 100644 --- a/libs/i18n/src/lib/translations/translations_da.ts +++ b/libs/i18n/src/lib/translations/translations_da.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_da.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Vælg år', yearsRangeSelectionLabel: 'Vælg årsinterval', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Låst', listItemStatusDraft: 'Udkast' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Afvis', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Træelement {itemDetails}, {index} af {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '{count} mere' }, diff --git a/libs/i18n/src/lib/translations/translations_de.properties b/libs/i18n/src/lib/translations/translations_de.properties index e70f5a51030..0c9594ac5ec 100644 --- a/libs/i18n/src/lib/translations/translations_de.properties +++ b/libs/i18n/src/lib/translations/translations_de.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Jahr auswählen #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Enthält Fehler coreGridList.listItemStatusLocked=Gesperrt #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Entwurf +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Verwerfen #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Hauptnavigation coreNavigation.navigationPath=Navigationspfad #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Baumelement {itemDetails}, {index} von {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Screen reader announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton={count} mehr #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_de.ts b/libs/i18n/src/lib/translations/translations_de.ts index dcab85515d6..8001e278778 100644 --- a/libs/i18n/src/lib/translations/translations_de.ts +++ b/libs/i18n/src/lib/translations/translations_de.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_de.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Jahr auswählen', yearsRangeSelectionLabel: 'Jahresbereich auswählen', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Gesperrt', listItemStatusDraft: 'Entwurf' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Verwerfen', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Baumelement {itemDetails}, {index} von {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '{count} mehr' }, diff --git a/libs/i18n/src/lib/translations/translations_el.properties b/libs/i18n/src/lib/translations/translations_el.properties index 3abcf7201c4..63e56e29a5f 100644 --- a/libs/i18n/src/lib/translations/translations_el.properties +++ b/libs/i18n/src/lib/translations/translations_el.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Επιλογή έτους #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Περιέχει σφάλματα coreGridList.listItemStatusLocked=Κλειδωμένο #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Πρόχειρο +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Παράβλεψη #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Κύρια Πλοήγηση coreNavigation.navigationPath=Διαδρομή Πλοήγησης #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Στοιχείο δέντρου {itemDetails}, {index} από {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Screen reader announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton={count} περισσότερα #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_el.ts b/libs/i18n/src/lib/translations/translations_el.ts index 6776c6ac610..a40dbc058f3 100644 --- a/libs/i18n/src/lib/translations/translations_el.ts +++ b/libs/i18n/src/lib/translations/translations_el.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_el.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Επιλογή έτους', yearsRangeSelectionLabel: 'Επιλογή εύρους ετών', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Κλειδωμένο', listItemStatusDraft: 'Πρόχειρο' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Παράβλεψη', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Στοιχείο δέντρου {itemDetails}, {index} από {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '{count} περισσότερα' }, diff --git a/libs/i18n/src/lib/translations/translations_en_US_sappsd.properties b/libs/i18n/src/lib/translations/translations_en_US_sappsd.properties index 38c6a119487..23a52ad7082 100644 --- a/libs/i18n/src/lib/translations/translations_en_US_sappsd.properties +++ b/libs/i18n/src/lib/translations/translations_en_US_sappsd.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=[[[Ŝēĺēċţ ŷēąŗ∙∙∙∙∙∙∙∙]]] #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=[[[Ĉŏŋţąįŋş ēŗŗŏŗş∙∙ coreGridList.listItemStatusLocked=[[[Ļŏċķēƌ∙∙∙∙∙∙∙∙]]] #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=[[[Ďŗąƒţ∙∙∙∙∙∙∙∙∙]]] +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=[[[Ďįşɱįşş∙∙∙∙∙∙∙]]] #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=[[[Μąįŋ Ńąʋįğąţįŏŋ∙∙∙∙]]] coreNavigation.navigationPath=[[[Ńąʋįğąţįŏŋ Ƥąţĥ∙∙∙∙]]] #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=[[[Ţŗēē Ĭţēɱ {įţēɱĎēţąįĺş}, {įŋƌēχ} ŏƒ {ţŏţąĺ}{şēĺēċţēƌĎēşċŗįρţįŏŋ}∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙]]] +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Screen reader announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton=[[[{ċŏűŋţ} ɱŏŗē∙∙∙∙∙∙∙]]] #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_en_US_sappsd.ts b/libs/i18n/src/lib/translations/translations_en_US_sappsd.ts index ea673f1807f..874bf3200fe 100644 --- a/libs/i18n/src/lib/translations/translations_en_US_sappsd.ts +++ b/libs/i18n/src/lib/translations/translations_en_US_sappsd.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_en_US_sappsd.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: '[[[Ŝēĺēċţ ŷēąŗ∙∙∙∙∙∙∙∙]]]', yearsRangeSelectionLabel: '[[[Ŝēĺēċţ ŷēąŗş ŗąŋğē∙∙∙∙∙∙]]]', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: '[[[Ļŏċķēƌ∙∙∙∙∙∙∙∙]]]', listItemStatusDraft: '[[[Ďŗąƒţ∙∙∙∙∙∙∙∙∙]]]' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: '[[[Ďįşɱįşş∙∙∙∙∙∙∙]]]', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -96,6 +104,25 @@ export default { linkItemAriaLabel: '[[[Ţŗēē Ĭţēɱ {įţēɱĎēţąįĺş}, {įŋƌēχ} ŏƒ {ţŏţąĺ}{şēĺēċţēƌĎēşċŗįρţįŏŋ}∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙]]]' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '[[[{ċŏűŋţ} ɱŏŗē∙∙∙∙∙∙∙]]]' }, diff --git a/libs/i18n/src/lib/translations/translations_es.properties b/libs/i18n/src/lib/translations/translations_es.properties index 1f130233daa..541f207309a 100644 --- a/libs/i18n/src/lib/translations/translations_es.properties +++ b/libs/i18n/src/lib/translations/translations_es.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Seleccionar año #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Contiene errores coreGridList.listItemStatusLocked=Bloqueado #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Borrador +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Descartar #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Navegación principal coreNavigation.navigationPath=Ruta de navegación #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Elemento de árbol {itemDetails}, {index} de {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Screen reader announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton={count} más #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_es.ts b/libs/i18n/src/lib/translations/translations_es.ts index 57938c64093..86ffa6c9584 100644 --- a/libs/i18n/src/lib/translations/translations_es.ts +++ b/libs/i18n/src/lib/translations/translations_es.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_es.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Seleccionar año', yearsRangeSelectionLabel: 'Seleccionar rango de años', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Bloqueado', listItemStatusDraft: 'Borrador' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Descartar', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Elemento de árbol {itemDetails}, {index} de {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '{count} más' }, diff --git a/libs/i18n/src/lib/translations/translations_fi.properties b/libs/i18n/src/lib/translations/translations_fi.properties index ca01d4836c5..291694db8cb 100644 --- a/libs/i18n/src/lib/translations/translations_fi.properties +++ b/libs/i18n/src/lib/translations/translations_fi.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Valitse vuosi #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Sisältää virheitä coreGridList.listItemStatusLocked=Lukittu #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Luonnos +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Hylkää #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Päänavigointi coreNavigation.navigationPath=Navigointipolku #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Puun kohde {itemDetails}, {index} / {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton={count} lisää #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_fi.ts b/libs/i18n/src/lib/translations/translations_fi.ts index 4980e7fed08..00a3fd23901 100644 --- a/libs/i18n/src/lib/translations/translations_fi.ts +++ b/libs/i18n/src/lib/translations/translations_fi.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_fi.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Valitse vuosi', yearsRangeSelectionLabel: 'Valitse vuosialue', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Lukittu', listItemStatusDraft: 'Luonnos' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Hylkää', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Puun kohde {itemDetails}, {index} / {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '{count} lisää' }, diff --git a/libs/i18n/src/lib/translations/translations_fr.properties b/libs/i18n/src/lib/translations/translations_fr.properties index 1f4a7b04758..55e54699aed 100644 --- a/libs/i18n/src/lib/translations/translations_fr.properties +++ b/libs/i18n/src/lib/translations/translations_fr.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Sélectionner une année #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Comporte des erreurs coreGridList.listItemStatusLocked=Verrouillé #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Ébauche +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Ignorer #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Navigation principale coreNavigation.navigationPath=Chemin de navigation #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Élément d'arborescence {itemDetails}, {index} sur {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Screen reader announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton={count} de plus #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_fr.ts b/libs/i18n/src/lib/translations/translations_fr.ts index f290e1c976f..25e917ed5f3 100644 --- a/libs/i18n/src/lib/translations/translations_fr.ts +++ b/libs/i18n/src/lib/translations/translations_fr.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_fr.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Sélectionner une année', yearsRangeSelectionLabel: "Sélectionner une plage d'années", @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Verrouillé', listItemStatusDraft: 'Ébauche' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Ignorer', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -96,6 +104,25 @@ export default { coreNestedList: { linkItemAriaLabel: "Élément d'arborescence {itemDetails}, {index} sur {total}{selectedDescription}" }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '{count} de plus' }, diff --git a/libs/i18n/src/lib/translations/translations_he.properties b/libs/i18n/src/lib/translations/translations_he.properties index f0995ea96ff..8789027c82e 100644 --- a/libs/i18n/src/lib/translations/translations_he.properties +++ b/libs/i18n/src/lib/translations/translations_he.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=בחר שנה #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=מכיל שגיאות coreGridList.listItemStatusLocked=נעול #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=טיוטה +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=בטל #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=ניווט ראשי coreNavigation.navigationPath=נתיב ניווט #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=פריט עץ {itemDetails}, {index} מתוך {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton={count} נוספים #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_he.ts b/libs/i18n/src/lib/translations/translations_he.ts index 0ba47c72c82..b8d378c8597 100644 --- a/libs/i18n/src/lib/translations/translations_he.ts +++ b/libs/i18n/src/lib/translations/translations_he.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_he.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'בחר שנה', yearsRangeSelectionLabel: 'בחר טווחי שנים', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'נעול', listItemStatusDraft: 'טיוטה' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'בטל', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'פריט עץ {itemDetails}, {index} מתוך {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '{count} נוספים' }, diff --git a/libs/i18n/src/lib/translations/translations_hi.properties b/libs/i18n/src/lib/translations/translations_hi.properties index e4439f294af..f098433035e 100644 --- a/libs/i18n/src/lib/translations/translations_hi.properties +++ b/libs/i18n/src/lib/translations/translations_hi.properties @@ -1,4 +1,5 @@ - +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar coreCalendar.yearSelectionLabel = वर्ष चुनें coreCalendar.yearsRangeSelectionLabel = वर्षों की सीमा चुनें coreCalendar.monthSelectionLabel = महीना चुनें @@ -55,11 +56,17 @@ coreGridList.listItemButtonDeleteTitle = मिटायें coreGridList.listItemStatusContainsErrors = इसमें गलतियां हैं coreGridList.listItemStatusLocked = बंद coreGridList.listItemStatusDraft = प्रालेख +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle coreMessageStrip.dismissLabel = खारिज करें coreMessageStrip.announcementInfo = Information Message Strip coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip coreMessageStrip.closable = Closable coreMultiInput.countListResultsSingular = 1 परिणाम सूची आइटम coreMultiInput.countListResultsPlural = {count} परिणाम सूची आइटम @@ -71,6 +78,32 @@ coreMultiInput.tokensCountText = Contains {length, plural, =0 {no token} =1 {1 t coreNavigation.mainNavigation = Main Navigation coreNavigation.navigationPath = Navigation Path coreNestedList.linkItemAriaLabel = ट्री वस्तु {itemDetails}, {index} का {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry coreOverflowLayout.moreItemsButton = {count} अधिक corePagination.pageLabel = पृष्ठ {pageNumber} corePagination.currentPageAriaLabel = पृष्ठ {pageNumber} वर्तमान पृष्ठ है diff --git a/libs/i18n/src/lib/translations/translations_hi.ts b/libs/i18n/src/lib/translations/translations_hi.ts index 435f29511f2..094cb348c48 100644 --- a/libs/i18n/src/lib/translations/translations_hi.ts +++ b/libs/i18n/src/lib/translations/translations_hi.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_hi.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'वर्ष चुनें', yearsRangeSelectionLabel: 'वर्षों की सीमा चुनें', @@ -69,12 +72,17 @@ export default { listItemStatusLocked: 'बंद', listItemStatusDraft: 'प्रालेख' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'खारिज करें', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -94,6 +102,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'ट्री वस्तु {itemDetails}, {index} का {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '{count} अधिक' }, diff --git a/libs/i18n/src/lib/translations/translations_hr.properties b/libs/i18n/src/lib/translations/translations_hr.properties index 2befb24a4e8..e1475455cb3 100644 --- a/libs/i18n/src/lib/translations/translations_hr.properties +++ b/libs/i18n/src/lib/translations/translations_hr.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Odaberi godinu #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Sadržava pogreške coreGridList.listItemStatusLocked=Zaključano #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Nacrt +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Odbaci #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Glavna navigacija coreNavigation.navigationPath=Staza navigacije #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Stavka stabla {itemDetails}, {index} od {total} {selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton={count} više #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_hr.ts b/libs/i18n/src/lib/translations/translations_hr.ts index 917d238c42d..aaf503f41e7 100644 --- a/libs/i18n/src/lib/translations/translations_hr.ts +++ b/libs/i18n/src/lib/translations/translations_hr.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_hr.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Odaberi godinu', yearsRangeSelectionLabel: 'Odaberi raspon godina', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Zaključano', listItemStatusDraft: 'Nacrt' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Odbaci', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Stavka stabla {itemDetails}, {index} od {total} {selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '{count} više' }, diff --git a/libs/i18n/src/lib/translations/translations_hu.properties b/libs/i18n/src/lib/translations/translations_hu.properties index ea63052b345..386097a50d4 100644 --- a/libs/i18n/src/lib/translations/translations_hu.properties +++ b/libs/i18n/src/lib/translations/translations_hu.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Év kiválasztása #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Hibákat tartalmaz coreGridList.listItemStatusLocked=Zárolva #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Vázlat +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Elvetés #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Fő navigáció coreNavigation.navigationPath=Navigációs útvonal #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel={itemDetails} struktúraelem, indexszáma {index} a(z) {total}{selectedDescription} elemből +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton=További {count} #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_hu.ts b/libs/i18n/src/lib/translations/translations_hu.ts index 1f0b45387cc..2a87f2f0690 100644 --- a/libs/i18n/src/lib/translations/translations_hu.ts +++ b/libs/i18n/src/lib/translations/translations_hu.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_hu.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Év kiválasztása', yearsRangeSelectionLabel: 'Évtartomány kiválasztása', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Zárolva', listItemStatusDraft: 'Vázlat' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Elvetés', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: '{itemDetails} struktúraelem, indexszáma {index} a(z) {total}{selectedDescription} elemből' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: 'További {count}' }, diff --git a/libs/i18n/src/lib/translations/translations_it.properties b/libs/i18n/src/lib/translations/translations_it.properties index 6152ff55480..efaccb421c1 100644 --- a/libs/i18n/src/lib/translations/translations_it.properties +++ b/libs/i18n/src/lib/translations/translations_it.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Seleziona anno #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Contiene errori coreGridList.listItemStatusLocked=Bloccato #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Bozza +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Ignora #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Navigazione principale coreNavigation.navigationPath=Percorso di navigazione #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Elemento dell'albero {itemDetails}, {index} di {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton=Altri {count} #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_it.ts b/libs/i18n/src/lib/translations/translations_it.ts index 5524ec628d9..d2662648bda 100644 --- a/libs/i18n/src/lib/translations/translations_it.ts +++ b/libs/i18n/src/lib/translations/translations_it.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_it.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Seleziona anno', yearsRangeSelectionLabel: 'Seleziona intervallo anni', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Bloccato', listItemStatusDraft: 'Bozza' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Ignora', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: "Elemento dell'albero {itemDetails}, {index} di {total}{selectedDescription}" }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: 'Altri {count}' }, diff --git a/libs/i18n/src/lib/translations/translations_ja.properties b/libs/i18n/src/lib/translations/translations_ja.properties index 0d81e99542e..7a3e72dead9 100644 --- a/libs/i18n/src/lib/translations/translations_ja.properties +++ b/libs/i18n/src/lib/translations/translations_ja.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=年を選択 #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=エラーあり coreGridList.listItemStatusLocked=ロック済み #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=ドラフト +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=無視 #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=メインナビゲーション coreNavigation.navigationPath=ナビゲーションパス #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=ツリー項目: {itemDetails}、{index}/{total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton=ほか{count}件 #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_ja.ts b/libs/i18n/src/lib/translations/translations_ja.ts index 68072537ade..c6e433e5b62 100644 --- a/libs/i18n/src/lib/translations/translations_ja.ts +++ b/libs/i18n/src/lib/translations/translations_ja.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_ja.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: '年を選択', yearsRangeSelectionLabel: '年範囲を選択', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'ロック済み', listItemStatusDraft: 'ドラフト' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: '無視', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'ツリー項目: {itemDetails}、{index}/{total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: 'ほか{count}件' }, diff --git a/libs/i18n/src/lib/translations/translations_ka.properties b/libs/i18n/src/lib/translations/translations_ka.properties index 10f2022822f..3312ba853f4 100644 --- a/libs/i18n/src/lib/translations/translations_ka.properties +++ b/libs/i18n/src/lib/translations/translations_ka.properties @@ -1,4 +1,5 @@ - +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar coreCalendar.yearSelectionLabel = წელის არჩევა coreCalendar.yearsRangeSelectionLabel = წელთა შუალედის არჩევა coreCalendar.monthSelectionLabel = თვის არჩევა @@ -55,11 +56,17 @@ coreGridList.listItemButtonDeleteTitle = წაშლა coreGridList.listItemStatusContainsErrors = შეიცავს შეცდომებს coreGridList.listItemStatusLocked = დაბლოკილი coreGridList.listItemStatusDraft = დაუსრულებელი +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle coreMessageStrip.dismissLabel = გაუქმება coreMessageStrip.announcementInfo = Information Message Strip coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip coreMessageStrip.closable = Closable coreMultiInput.countListResultsSingular = 1 რეზულტატი. coreMultiInput.countListResultsPlural = {count} რეზულტატი. @@ -71,6 +78,32 @@ coreMultiInput.tokensCountText = Contains {length, plural, =0 {no token} =1 {1 t coreNavigation.mainNavigation = მთავარი ნავიგაცია coreNavigation.navigationPath = ნავიგაციის გზა coreNestedList.linkItemAriaLabel = სიის ელემენტი {itemDetails}, ინდექსით {index} {total}-დან {selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry coreOverflowLayout.moreItemsButton = დანარჩენი {count} corePagination.pageLabel = გვერდი {pageNumber} corePagination.currentPageAriaLabel = მიმდინარე გვერდია {pageNumber} diff --git a/libs/i18n/src/lib/translations/translations_ka.ts b/libs/i18n/src/lib/translations/translations_ka.ts index e2e8dab926a..531f17c2306 100644 --- a/libs/i18n/src/lib/translations/translations_ka.ts +++ b/libs/i18n/src/lib/translations/translations_ka.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_ka.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'წელის არჩევა', yearsRangeSelectionLabel: 'წელთა შუალედის არჩევა', @@ -69,12 +72,17 @@ export default { listItemStatusLocked: 'დაბლოკილი', listItemStatusDraft: 'დაუსრულებელი' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'გაუქმება', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -94,6 +102,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'სიის ელემენტი {itemDetails}, ინდექსით {index} {total}-დან {selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: 'დანარჩენი {count}' }, diff --git a/libs/i18n/src/lib/translations/translations_kk.properties b/libs/i18n/src/lib/translations/translations_kk.properties index 93b25fba1a9..38dc418f977 100644 --- a/libs/i18n/src/lib/translations/translations_kk.properties +++ b/libs/i18n/src/lib/translations/translations_kk.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Жылды таңдау #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Қателері бар coreGridList.listItemStatusLocked=Құлыпталды #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Нобай +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Бас тарту #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Негізгі навигация coreNavigation.navigationPath=Навигация жолы #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Тармақты құрылым элементі: {itemDetails}, {index}/{total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton=тағы {count} #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_kk.ts b/libs/i18n/src/lib/translations/translations_kk.ts index 45f4573c221..5ec00998acf 100644 --- a/libs/i18n/src/lib/translations/translations_kk.ts +++ b/libs/i18n/src/lib/translations/translations_kk.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_kk.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Жылды таңдау', yearsRangeSelectionLabel: 'Жылдар ауқымын таңдау', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Құлыпталды', listItemStatusDraft: 'Нобай' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Бас тарту', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Тармақты құрылым элементі: {itemDetails}, {index}/{total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: 'тағы {count}' }, diff --git a/libs/i18n/src/lib/translations/translations_ko.properties b/libs/i18n/src/lib/translations/translations_ko.properties index 83a341f99f4..7840b4867c0 100644 --- a/libs/i18n/src/lib/translations/translations_ko.properties +++ b/libs/i18n/src/lib/translations/translations_ko.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=연도 선택 #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=오류 있음 coreGridList.listItemStatusLocked=잠김 #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=초안 +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=해제 #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=기본 탐색 coreNavigation.navigationPath=탐색 경로 #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=트리 항목 {itemDetails}, {index}/ {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton={count}개 더 보기 #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_ko.ts b/libs/i18n/src/lib/translations/translations_ko.ts index 73b4b9e59e1..497bdcb6225 100644 --- a/libs/i18n/src/lib/translations/translations_ko.ts +++ b/libs/i18n/src/lib/translations/translations_ko.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_ko.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: '연도 선택', yearsRangeSelectionLabel: '연도 범위 선택', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: '잠김', listItemStatusDraft: '초안' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: '해제', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: '트리 항목 {itemDetails}, {index}/ {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '{count}개 더 보기' }, diff --git a/libs/i18n/src/lib/translations/translations_ms.properties b/libs/i18n/src/lib/translations/translations_ms.properties index 8a36b9ca0bf..38cf8887022 100644 --- a/libs/i18n/src/lib/translations/translations_ms.properties +++ b/libs/i18n/src/lib/translations/translations_ms.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Pilih tahun #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Mengandungi ralat coreGridList.listItemStatusLocked=Dikunci #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Draf +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Tolak #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Navigasi Utama coreNavigation.navigationPath=Laluan Navigasi #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Item Pepohon {itemDetails}, {index} daripada {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton={count} selanjutnya #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_ms.ts b/libs/i18n/src/lib/translations/translations_ms.ts index e67a1b3e978..5b05f17adcc 100644 --- a/libs/i18n/src/lib/translations/translations_ms.ts +++ b/libs/i18n/src/lib/translations/translations_ms.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_ms.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Pilih tahun', yearsRangeSelectionLabel: 'Pilih julat tahun', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Dikunci', listItemStatusDraft: 'Draf' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Tolak', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Item Pepohon {itemDetails}, {index} daripada {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '{count} selanjutnya' }, diff --git a/libs/i18n/src/lib/translations/translations_nl.properties b/libs/i18n/src/lib/translations/translations_nl.properties index 2216e9feb8a..ffb41407fb7 100644 --- a/libs/i18n/src/lib/translations/translations_nl.properties +++ b/libs/i18n/src/lib/translations/translations_nl.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Jaar selecteren #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Bevat fouten coreGridList.listItemStatusLocked=Vergrendeld #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Concept +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Afwijzen #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Hoofdnavigatie coreNavigation.navigationPath=Navigatiepad #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Structuuritem {itemDetails}, {index} van {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton=nog {count} #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_nl.ts b/libs/i18n/src/lib/translations/translations_nl.ts index e7da007fd74..894521af343 100644 --- a/libs/i18n/src/lib/translations/translations_nl.ts +++ b/libs/i18n/src/lib/translations/translations_nl.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_nl.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Jaar selecteren', yearsRangeSelectionLabel: 'Bereik van jaren selecteren', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Vergrendeld', listItemStatusDraft: 'Concept' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Afwijzen', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Structuuritem {itemDetails}, {index} van {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: 'nog {count}' }, diff --git a/libs/i18n/src/lib/translations/translations_no.properties b/libs/i18n/src/lib/translations/translations_no.properties index b2055c928b9..b13c5cfa489 100644 --- a/libs/i18n/src/lib/translations/translations_no.properties +++ b/libs/i18n/src/lib/translations/translations_no.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Velg år #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Inneholder feil coreGridList.listItemStatusLocked=Sperret #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Utkast +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Avvis #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Hovednavigering coreNavigation.navigationPath=Navigeringsbane #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Treelement {itemDetails}, {index} av {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton={count} mer #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_no.ts b/libs/i18n/src/lib/translations/translations_no.ts index b23482d6b71..c59088f8d8b 100644 --- a/libs/i18n/src/lib/translations/translations_no.ts +++ b/libs/i18n/src/lib/translations/translations_no.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_no.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Velg år', yearsRangeSelectionLabel: 'Velg årsintervall', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Sperret', listItemStatusDraft: 'Utkast' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Avvis', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Treelement {itemDetails}, {index} av {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '{count} mer' }, diff --git a/libs/i18n/src/lib/translations/translations_pl.properties b/libs/i18n/src/lib/translations/translations_pl.properties index 2b622bdc9df..05c84ec6cca 100644 --- a/libs/i18n/src/lib/translations/translations_pl.properties +++ b/libs/i18n/src/lib/translations/translations_pl.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Wybierz rok #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Zawiera błędy coreGridList.listItemStatusLocked=Zablokowane #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Wersja robocza +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Ignoruj #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Nawigacja główna coreNavigation.navigationPath=Ścieżka nawigacji #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Element drzewa {itemDetails}, {index} z {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton={count} więcej #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_pl.ts b/libs/i18n/src/lib/translations/translations_pl.ts index 070adfe0fc1..760fd529c21 100644 --- a/libs/i18n/src/lib/translations/translations_pl.ts +++ b/libs/i18n/src/lib/translations/translations_pl.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_pl.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Wybierz rok', yearsRangeSelectionLabel: 'Wybierz zakres lat', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Zablokowane', listItemStatusDraft: 'Wersja robocza' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Ignoruj', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Element drzewa {itemDetails}, {index} z {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '{count} więcej' }, diff --git a/libs/i18n/src/lib/translations/translations_pt.properties b/libs/i18n/src/lib/translations/translations_pt.properties index c3ad5d858c9..4be0578adb8 100644 --- a/libs/i18n/src/lib/translations/translations_pt.properties +++ b/libs/i18n/src/lib/translations/translations_pt.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Selecionar ano #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Contém erros coreGridList.listItemStatusLocked=Bloqueado #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Rascunho +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Ignorar #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Navegação principal coreNavigation.navigationPath=Caminho de navegação #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Item da árvore {itemDetails}, {index} de {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton=Mais {count} #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_pt.ts b/libs/i18n/src/lib/translations/translations_pt.ts index 525ac5f214f..71923caa77d 100644 --- a/libs/i18n/src/lib/translations/translations_pt.ts +++ b/libs/i18n/src/lib/translations/translations_pt.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_pt.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Selecionar ano', yearsRangeSelectionLabel: 'Selecionar intervalo de anos', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Bloqueado', listItemStatusDraft: 'Rascunho' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Ignorar', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Item da árvore {itemDetails}, {index} de {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: 'Mais {count}' }, diff --git a/libs/i18n/src/lib/translations/translations_ro.properties b/libs/i18n/src/lib/translations/translations_ro.properties index 1ebb8cf35df..536f3f43280 100644 --- a/libs/i18n/src/lib/translations/translations_ro.properties +++ b/libs/i18n/src/lib/translations/translations_ro.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Selectați anul #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Conține erori coreGridList.listItemStatusLocked=Blocat #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Schiță +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Respingere #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Meniul principal coreNavigation.navigationPath=Cale de navigare #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Element din arbore {itemDetails}, {index} din {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton=Încă {count} #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_ro.ts b/libs/i18n/src/lib/translations/translations_ro.ts index 0eae91a191e..e7cdc25669a 100644 --- a/libs/i18n/src/lib/translations/translations_ro.ts +++ b/libs/i18n/src/lib/translations/translations_ro.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_ro.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Selectați anul', yearsRangeSelectionLabel: 'Selectați intervalul de ani', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Blocat', listItemStatusDraft: 'Schiță' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Respingere', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Element din arbore {itemDetails}, {index} din {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: 'Încă {count}' }, diff --git a/libs/i18n/src/lib/translations/translations_ru.properties b/libs/i18n/src/lib/translations/translations_ru.properties index a49911eb21e..a5f5ea9f653 100644 --- a/libs/i18n/src/lib/translations/translations_ru.properties +++ b/libs/i18n/src/lib/translations/translations_ru.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Выберите год #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Содержит ошибки coreGridList.listItemStatusLocked=Заблокировано #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Черновик +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Игнорировать #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Основная навигация coreNavigation.navigationPath=Путь навигации #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Элемент дерева {itemDetails}, {index} из {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton=Еще {count} #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_ru.ts b/libs/i18n/src/lib/translations/translations_ru.ts index 0107d6d5c83..cbb6297e5ff 100644 --- a/libs/i18n/src/lib/translations/translations_ru.ts +++ b/libs/i18n/src/lib/translations/translations_ru.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_ru.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Выберите год', yearsRangeSelectionLabel: 'Выберите диапазон годов', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Заблокировано', listItemStatusDraft: 'Черновик' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Игнорировать', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Элемент дерева {itemDetails}, {index} из {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: 'Еще {count}' }, diff --git a/libs/i18n/src/lib/translations/translations_sh.properties b/libs/i18n/src/lib/translations/translations_sh.properties index f37814f628a..c5e09044200 100644 --- a/libs/i18n/src/lib/translations/translations_sh.properties +++ b/libs/i18n/src/lib/translations/translations_sh.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Odaberi godinu #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Sadrži greške coreGridList.listItemStatusLocked=Zaključano #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Nacrt +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Odbaci #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Glavno usmeravanje coreNavigation.navigationPath=Put usmeravanja #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Stavka stabla {itemDetails}, {index} od {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton={count} više #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_sh.ts b/libs/i18n/src/lib/translations/translations_sh.ts index c674609750b..44874afbd52 100644 --- a/libs/i18n/src/lib/translations/translations_sh.ts +++ b/libs/i18n/src/lib/translations/translations_sh.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_sh.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Odaberi godinu', yearsRangeSelectionLabel: 'Odaberi raspon godina', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Zaključano', listItemStatusDraft: 'Nacrt' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Odbaci', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Stavka stabla {itemDetails}, {index} od {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '{count} više' }, diff --git a/libs/i18n/src/lib/translations/translations_sk.properties b/libs/i18n/src/lib/translations/translations_sk.properties index 3b232fdf021..28b460470b8 100644 --- a/libs/i18n/src/lib/translations/translations_sk.properties +++ b/libs/i18n/src/lib/translations/translations_sk.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Vybrať rok #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Obsahuje chyby coreGridList.listItemStatusLocked=Blokované #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Koncept +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Odmietnuť #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Hlavná navigácia coreNavigation.navigationPath=Cesta navigácie #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Položka stromu {itemDetails}, {index} z {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton={count} viac #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_sk.ts b/libs/i18n/src/lib/translations/translations_sk.ts index 14e6310b32e..cc5428db04a 100644 --- a/libs/i18n/src/lib/translations/translations_sk.ts +++ b/libs/i18n/src/lib/translations/translations_sk.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_sk.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Vybrať rok', yearsRangeSelectionLabel: 'Vybrať rozsah rokov', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Blokované', listItemStatusDraft: 'Koncept' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Odmietnuť', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Položka stromu {itemDetails}, {index} z {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '{count} viac' }, diff --git a/libs/i18n/src/lib/translations/translations_sl.properties b/libs/i18n/src/lib/translations/translations_sl.properties index 7cf1f3925fc..7403f8d6406 100644 --- a/libs/i18n/src/lib/translations/translations_sl.properties +++ b/libs/i18n/src/lib/translations/translations_sl.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Izbira leta #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Vsebuje napake coreGridList.listItemStatusLocked=Zaklenjeno #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Osnutek +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Opusti #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Glavno krmarjenje coreNavigation.navigationPath=Pot krmarjenja #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Element drevesa {itemDetails}, {index} od {total} {selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton=Še {count} #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_sl.ts b/libs/i18n/src/lib/translations/translations_sl.ts index 609dcccee4f..b002711c5ac 100644 --- a/libs/i18n/src/lib/translations/translations_sl.ts +++ b/libs/i18n/src/lib/translations/translations_sl.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_sl.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Izbira leta', yearsRangeSelectionLabel: 'Izbira obsega let', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Zaklenjeno', listItemStatusDraft: 'Osnutek' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Opusti', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Element drevesa {itemDetails}, {index} od {total} {selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: 'Še {count}' }, diff --git a/libs/i18n/src/lib/translations/translations_sq.properties b/libs/i18n/src/lib/translations/translations_sq.properties index c21c36d38b6..4dea53bf9a2 100644 --- a/libs/i18n/src/lib/translations/translations_sq.properties +++ b/libs/i18n/src/lib/translations/translations_sq.properties @@ -1,4 +1,5 @@ - +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar coreCalendar.yearSelectionLabel = Zgjidhni vitin coreCalendar.yearsRangeSelectionLabel = Zgjidhni shtrirjen e viteve coreCalendar.monthSelectionLabel = Zgjidhni muajin @@ -53,11 +54,17 @@ coreGridList.listItemButtonDeleteTitle = Fshi coreGridList.listItemStatusContainsErrors = Përmban gabime. coreGridList.listItemStatusLocked = I kyçur coreGridList.listItemStatusDraft = Draft +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle coreMessageStrip.dismissLabel = Largoje coreMessageStrip.announcementInfo = Information Message Strip coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip coreMessageStrip.closable = Closable coreMultiInput.countListResultsSingular = 1 artikull i listës së rezultateve. coreMultiInput.countListResultsPlural = {count} artikujt e listës së rezultateve. @@ -69,6 +76,32 @@ coreMultiInput.tokensCountText = Contains {length, plural, =0 {no token} =1 {1 t coreNavigation.mainNavigation = Main Navigation coreNavigation.navigationPath = Navigation Path coreNestedList.linkItemAriaLabel = Artikulli i pemës {itemDetails}, {index} nga {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry coreOverflowLayout.moreItemsButton = {count} artikuj { count, plural, one {më shumë} other {të tjerë} } corePagination.pageLabel = Faqja {pageNumber} corePagination.currentPageAriaLabel = Faqja {pageNumber} është faqja aktuale diff --git a/libs/i18n/src/lib/translations/translations_sq.ts b/libs/i18n/src/lib/translations/translations_sq.ts index 3c050402528..7ed942a7c2a 100644 --- a/libs/i18n/src/lib/translations/translations_sq.ts +++ b/libs/i18n/src/lib/translations/translations_sq.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_sq.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Zgjidhni vitin', yearsRangeSelectionLabel: 'Zgjidhni shtrirjen e viteve', @@ -69,12 +72,17 @@ export default { listItemStatusLocked: 'I kyçur', listItemStatusDraft: 'Draft' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Largoje', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -94,6 +102,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Artikulli i pemës {itemDetails}, {index} nga {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '{count} artikuj { count, plural, one {më shumë} other {të tjerë} }' }, diff --git a/libs/i18n/src/lib/translations/translations_sv.properties b/libs/i18n/src/lib/translations/translations_sv.properties index 5de66ad97b7..be5692f19af 100644 --- a/libs/i18n/src/lib/translations/translations_sv.properties +++ b/libs/i18n/src/lib/translations/translations_sv.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Välj år #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Innehåller fel coreGridList.listItemStatusLocked=Låst #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Utkast +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Avvisa #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Huvudnavigering coreNavigation.navigationPath=Navigeringssökväg #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Trädelement {itemDetails}, {index} av {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton={count} fler #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_sv.ts b/libs/i18n/src/lib/translations/translations_sv.ts index 43fd293f21f..2abecfa428a 100644 --- a/libs/i18n/src/lib/translations/translations_sv.ts +++ b/libs/i18n/src/lib/translations/translations_sv.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_sv.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Välj år', yearsRangeSelectionLabel: 'Välj årsintervall', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Låst', listItemStatusDraft: 'Utkast' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Avvisa', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Trädelement {itemDetails}, {index} av {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '{count} fler' }, diff --git a/libs/i18n/src/lib/translations/translations_th.properties b/libs/i18n/src/lib/translations/translations_th.properties index bf49ee85106..d2d6428e6d4 100644 --- a/libs/i18n/src/lib/translations/translations_th.properties +++ b/libs/i18n/src/lib/translations/translations_th.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=เลือกปี #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=มีข้อผิดพลาด coreGridList.listItemStatusLocked=ถูกล็อค #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=แบบร่าง +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=ยกเลิก #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=การเนวิเกตหลัก coreNavigation.navigationPath=พาธการเนวิเกต #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=ไอเท็มแบบทรี {itemDetails} {index} จาก {total}{selectedDescription} รายการ +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton=อีก {count} รายการ #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_th.ts b/libs/i18n/src/lib/translations/translations_th.ts index dd018898083..a4d547d99de 100644 --- a/libs/i18n/src/lib/translations/translations_th.ts +++ b/libs/i18n/src/lib/translations/translations_th.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_th.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'เลือกปี', yearsRangeSelectionLabel: 'เลือกช่วงปี', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'ถูกล็อค', listItemStatusDraft: 'แบบร่าง' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'ยกเลิก', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'ไอเท็มแบบทรี {itemDetails} {index} จาก {total}{selectedDescription} รายการ' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: 'อีก {count} รายการ' }, diff --git a/libs/i18n/src/lib/translations/translations_tr.properties b/libs/i18n/src/lib/translations/translations_tr.properties index 6a6244d0718..a1bf327dc83 100644 --- a/libs/i18n/src/lib/translations/translations_tr.properties +++ b/libs/i18n/src/lib/translations/translations_tr.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Yıl seç #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Hata içeriyor coreGridList.listItemStatusLocked=Kilitli #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Taslak +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Yoksay #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Ana Gezinme Düzeni coreNavigation.navigationPath=Gezinme Yolu #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Ağaç öğesi {itemDetails}, {index}/{total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton={count} tane daha #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_tr.ts b/libs/i18n/src/lib/translations/translations_tr.ts index 45f1e8b41fc..823fbfa85c2 100644 --- a/libs/i18n/src/lib/translations/translations_tr.ts +++ b/libs/i18n/src/lib/translations/translations_tr.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_tr.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Yıl seç', yearsRangeSelectionLabel: 'Yıl aralığı seç', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Kilitli', listItemStatusDraft: 'Taslak' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Yoksay', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Ağaç öğesi {itemDetails}, {index}/{total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '{count} tane daha' }, diff --git a/libs/i18n/src/lib/translations/translations_uk.properties b/libs/i18n/src/lib/translations/translations_uk.properties index 69a13fee537..bb94c87e350 100644 --- a/libs/i18n/src/lib/translations/translations_uk.properties +++ b/libs/i18n/src/lib/translations/translations_uk.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=Виберіть рік #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=Містить помилки coreGridList.listItemStatusLocked=Заблоковано #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=Чернетка +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=Відхилити #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=Головна навігація coreNavigation.navigationPath=Шлях навігації #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=Елемент дерева {itemDetails}, {index} з {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton=Ще {count} #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_uk.ts b/libs/i18n/src/lib/translations/translations_uk.ts index c50811fed00..4191d25e43e 100644 --- a/libs/i18n/src/lib/translations/translations_uk.ts +++ b/libs/i18n/src/lib/translations/translations_uk.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_uk.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: 'Виберіть рік', yearsRangeSelectionLabel: 'Виберіть діапазон років', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: 'Заблоковано', listItemStatusDraft: 'Чернетка' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: 'Відхилити', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -95,6 +103,25 @@ export default { coreNestedList: { linkItemAriaLabel: 'Елемент дерева {itemDetails}, {index} з {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: 'Ще {count}' }, diff --git a/libs/i18n/src/lib/translations/translations_zh_CN.properties b/libs/i18n/src/lib/translations/translations_zh_CN.properties index bad28394182..35874faec22 100644 --- a/libs/i18n/src/lib/translations/translations_zh_CN.properties +++ b/libs/i18n/src/lib/translations/translations_zh_CN.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=选择年度 #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=包含错误 coreGridList.listItemStatusLocked=已锁定 #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=草稿 +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=屏蔽 #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=主导航 coreNavigation.navigationPath=导航路径 #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=树项目 {itemDetails},{index},共 {total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton=另外 {count} 个 #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_zh_CN.ts b/libs/i18n/src/lib/translations/translations_zh_CN.ts index d82dc573473..515cae4123e 100644 --- a/libs/i18n/src/lib/translations/translations_zh_CN.ts +++ b/libs/i18n/src/lib/translations/translations_zh_CN.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_zh_CN.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: '选择年度', yearsRangeSelectionLabel: '选择年度范围', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: '已锁定', listItemStatusDraft: '草稿' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: '屏蔽', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -94,6 +102,25 @@ export default { coreNestedList: { linkItemAriaLabel: '树项目 {itemDetails},{index},共 {total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '另外 {count} 个' }, diff --git a/libs/i18n/src/lib/translations/translations_zh_TW.properties b/libs/i18n/src/lib/translations/translations_zh_TW.properties index 8f79c03480e..21051ef59e6 100644 --- a/libs/i18n/src/lib/translations/translations_zh_TW.properties +++ b/libs/i18n/src/lib/translations/translations_zh_TW.properties @@ -1,3 +1,5 @@ +#XFLD: Default label for the Avatar. +coreAvatar.defaultLabel = Avatar #XBUT: Button on the calendar, used to navigate to the year selection view. coreCalendar.yearSelectionLabel=選擇年份 #XBUT: Button on the calendar, used to navigate to the year range selection view. @@ -106,6 +108,10 @@ coreGridList.listItemStatusContainsErrors=包含錯誤 coreGridList.listItemStatusLocked=已鎖定 #XFLD: Label that informs the user that a grid list item is in the draft state. coreGridList.listItemStatusDraft=草稿 +#XACT Screen reader text explaining that link is emphasized +coreLink.emphasized = Emphasized +#XACT Screen reader text explaining that link is subtle +coreLink.subtle = Subtle #XBUT: Button used to dismiss a message strip. coreMessageStrip.dismissLabel=忽略 #XACT: Screen reader text explaining the type of the message strip. @@ -116,6 +122,8 @@ coreMessageStrip.announcementWarning = Warning Message Strip coreMessageStrip.announcementError = Error Message Strip #XACT: Screen reader text explaining the type of the message strip. coreMessageStrip.announcementSuccess = Success Message Strip +#XACT: Screen reader text explaining the type of the message strip. +coreMessageStrip.announcementDefault = Message Strip #XACT: Screen reader text explaining whether the message strip is closable. coreMessageStrip.closable = Closable #XACT: Message for the screen reader alerting the user that there is 1 resulting list item from their query. @@ -138,6 +146,32 @@ coreNavigation.mainNavigation=主瀏覽 coreNavigation.navigationPath=瀏覽路徑 #XMIT: In the side navigation, the name of the item and its index and position in the list. coreNestedList.linkItemAriaLabel=樹狀項目 {itemDetails}、{index}/{total}{selectedDescription} +#XACT: Screen reader announcement for the object identifier +coreObjectIdentifier.announcement = Object Identifier +#XACT: Screen reader text explaining the emphasized state of the object number. +coreObjectNumber.emphasized = Emphasized +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.negative = Value State Error +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.critical = Value State Warning +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.positive = Value State Success +#XACT: Screen reader text explaining the value state of the object number. +coreObjectNumber.informative = Value State Information +#XACT: Announcement for the object status +coreObjectStatus.announcement = Object Status +#XACT: Text for the screen reader that describes the object status as clickable. +coreObjectStatus.ariaRoleDescription = Object Status Button +#XACT: Text for the screen reader that describes the object status's indication color. +coreObjectStatus.indicationColor = Indication Color +#XACT: Announcement for the negative object status +coreObjectStatus.negative = Invalid Entry +#XACT: Announcement for the critical object status +coreObjectStatus.critical = Warning issued +#XACT: Announcement for the positive object status +coreObjectStatus.positive = Entry successfully validated +#XACT: Announcement for the informative object status +coreObjectStatus.informative = Informative entry #XFLD: The {count} more label for the number of items that are overflowing in the overflow layout component. coreOverflowLayout.moreItemsButton=還有 {count} 個 #XBUT: The label for the button used to change to the {pageNumber} page in the pagination component. diff --git a/libs/i18n/src/lib/translations/translations_zh_TW.ts b/libs/i18n/src/lib/translations/translations_zh_TW.ts index fed4743c6f3..eadc3019abf 100644 --- a/libs/i18n/src/lib/translations/translations_zh_TW.ts +++ b/libs/i18n/src/lib/translations/translations_zh_TW.ts @@ -1,5 +1,8 @@ // Do not modify, it's automatically created. Modify translations_zh_TW.properties instead export default { + coreAvatar: { + defaultLabel: 'Avatar' + }, coreCalendar: { yearSelectionLabel: '選擇年份', yearsRangeSelectionLabel: '選擇年份範圍', @@ -70,12 +73,17 @@ export default { listItemStatusLocked: '已鎖定', listItemStatusDraft: '草稿' }, + coreLink: { + emphasized: 'Emphasized', + subtle: 'Subtle' + }, coreMessageStrip: { dismissLabel: '忽略', announcementInfo: 'Information Message Strip', announcementWarning: 'Warning Message Strip', announcementError: 'Error Message Strip', announcementSuccess: 'Success Message Strip', + announcementDefault: 'Message Strip', closable: 'Closable' }, coreMultiInput: { @@ -94,6 +102,25 @@ export default { coreNestedList: { linkItemAriaLabel: '樹狀項目 {itemDetails}、{index}/{total}{selectedDescription}' }, + coreObjectIdentifier: { + announcement: 'Object Identifier' + }, + coreObjectNumber: { + emphasized: 'Emphasized', + negative: 'Value State Error', + critical: 'Value State Warning', + positive: 'Value State Success', + informative: 'Value State Information' + }, + coreObjectStatus: { + announcement: 'Object Status', + ariaRoleDescription: 'Object Status Button', + indicationColor: 'Indication Color', + negative: 'Invalid Entry', + critical: 'Warning issued', + positive: 'Entry successfully validated', + informative: 'Informative entry' + }, coreOverflowLayout: { moreItemsButton: '還有 {count} 個' }, diff --git a/package.json b/package.json index c272738943f..3924bf27fba 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "@angular/platform-browser": "20.1.4", "@angular/platform-browser-dynamic": "20.1.4", "@angular/router": "20.1.4", - "@fundamental-styles/cx": "0.40.1", + "@fundamental-styles/cx": "0.41.0-rc.60", "@nx/angular": "21.2.4", "@sap-theming/theming-base-content": "11.31.1", "@stackblitz/sdk": "1.9.0", @@ -60,7 +60,7 @@ "fast-deep-equal": "3.1.3", "focus-trap": "7.1.0", "focus-visible": "5.2.1", - "fundamental-styles": "0.40.1", + "fundamental-styles": "0.41.0-rc.60", "fuse.js": "7.0.0", "highlight.js": "11.7.0", "intl": "1.2.5", diff --git a/yarn.lock b/yarn.lock index 221e9bc512a..94e991ff6c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3655,10 +3655,10 @@ __metadata: languageName: node linkType: hard -"@fundamental-styles/cx@npm:0.40.1": - version: 0.40.1 - resolution: "@fundamental-styles/cx@npm:0.40.1" - checksum: 10/42276f2489bdbcb0be6474b1df32c60f175667d2739e4fb46eba02f4f85621724e6997a5e08abec56e8c851a76194bd66a7b5490486ac89a2b998d799ca298a9 +"@fundamental-styles/cx@npm:0.41.0-rc.60": + version: 0.41.0-rc.60 + resolution: "@fundamental-styles/cx@npm:0.41.0-rc.60" + checksum: 10/dd6b7d4336da7a97e0a03992683b56fb123ce253b1c277aa8d7701e88f697da0d62bc8f8fc92376855fe6eb5fcf6b0edad90e8d67a2fb2c5120aae222813d58a languageName: node linkType: hard @@ -16117,7 +16117,7 @@ __metadata: "@angular/router": "npm:20.1.4" "@commitlint/cli": "npm:18.6.1" "@commitlint/config-conventional": "npm:18.6.1" - "@fundamental-styles/cx": "npm:0.40.1" + "@fundamental-styles/cx": "npm:0.41.0-rc.60" "@jsdevtools/npm-publish": "npm:3.0.1" "@nx/angular": "npm:21.2.4" "@nx/devkit": "npm:21.2.4" @@ -16174,7 +16174,7 @@ __metadata: focus-trap: "npm:7.1.0" focus-visible: "npm:5.2.1" fs-extra: "npm:^11.3.0" - fundamental-styles: "npm:0.40.1" + fundamental-styles: "npm:0.41.0-rc.60" fuse.js: "npm:7.0.0" highlight.js: "npm:11.7.0" husky: "npm:8.0.2" @@ -16223,13 +16223,13 @@ __metadata: languageName: unknown linkType: soft -"fundamental-styles@npm:0.40.1": - version: 0.40.1 - resolution: "fundamental-styles@npm:0.40.1" +"fundamental-styles@npm:0.41.0-rc.60": + version: 0.41.0-rc.60 + resolution: "fundamental-styles@npm:0.41.0-rc.60" peerDependencies: - "@sap-theming/theming-base-content": ^11.29.0 - "@sap-ui/common-css": 0.40.1 - checksum: 10/e68e298ea5d0e0accff8e48d7ea2a6b232c9d6645b6326765af69a6bab32fd8630fe8b660f0e2d30ef62023ad6f6b9abeddefa38ba749f0ea7eabc864ac49ba5 + "@sap-theming/theming-base-content": ^11.32.0 + "@sap-ui/common-css": 0.41.0-rc.60 + checksum: 10/7c515d918817af12eeea0c9a48b8c9df1123003689534f2ac7f8876ef943b33b413149c89799442031e83e6cd967ed7c7e236974a588ccf32d8dad0ab9fec04c languageName: node linkType: hard