@besaitech/ng-design-system 0.0.61 → 0.0.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -2177,14 +2177,41 @@ const SIZES$a = {
|
|
|
2177
2177
|
* first accepted language — so the field "opens on the language you are working in". Empty translations are
|
|
2178
2178
|
* pruned from the emitted value, keeping the stored map clean.
|
|
2179
2179
|
*
|
|
2180
|
+
* Mark a must-fill language (a store's main language) with `[requiredLanguages]`, show a per-language
|
|
2181
|
+
* `[maxLength]` counter, and an `[error]` like `sds-input`.
|
|
2182
|
+
*
|
|
2180
2183
|
* Implements ControlValueAccessor over the map — use with reactive forms or `[(ngModel)]`:
|
|
2181
2184
|
* `<sds-localized-input [languages]="['fr','nl','en']" [(ngModel)]="title" />`.
|
|
2182
2185
|
*/
|
|
2183
2186
|
class SdsLocalizedInput {
|
|
2184
|
-
|
|
2187
|
+
autoId = `sds-localized-input-${nextId$l++}`;
|
|
2188
|
+
/** The native field's id; a generated one when empty (set it to pair an external `<label for>`). */
|
|
2189
|
+
inputId = input('', ...(ngDevMode ? [{ debugName: "inputId" }] : []));
|
|
2190
|
+
/** The native field's id: {@link inputId} or the generated one. */
|
|
2191
|
+
fieldId = computed(() => this.inputId() || this.autoId, ...(ngDevMode ? [{ debugName: "fieldId" }] : []));
|
|
2185
2192
|
label = input('', ...(ngDevMode ? [{ debugName: "label" }] : []));
|
|
2193
|
+
/** Accessible name when there is no visible {@link label} (a dense row in a table or list). */
|
|
2194
|
+
ariaLabel = input('', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : []));
|
|
2186
2195
|
hint = input('', ...(ngDevMode ? [{ debugName: "hint" }] : []));
|
|
2196
|
+
/** Error message under the field (danger frame + `aria-invalid`); replaces the hint. */
|
|
2197
|
+
error = input('', ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
2198
|
+
/** Mark the field invalid (danger frame + `aria-invalid`) without showing an [error] message. */
|
|
2199
|
+
invalid = input(false, ...(ngDevMode ? [{ debugName: "invalid", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
|
|
2200
|
+
/**
|
|
2201
|
+
* Mark the field required: an asterisk after the [label] and `aria-required`. It does not validate — keep your
|
|
2202
|
+
* own validator (e.g. "the main language is filled").
|
|
2203
|
+
*/
|
|
2204
|
+
required = input(false, ...(ngDevMode ? [{ debugName: "required", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
|
|
2205
|
+
/**
|
|
2206
|
+
* Languages that must be filled (e.g. a store's main language): while empty, their switcher dot shows in the
|
|
2207
|
+
* danger colour and its title says {@link requiredLanguageLabel}. Display only — validate in the form.
|
|
2208
|
+
*/
|
|
2209
|
+
requiredLanguages = input([], ...(ngDevMode ? [{ debugName: "requiredLanguages" }] : []));
|
|
2187
2210
|
placeholder = input('', ...(ngDevMode ? [{ debugName: "placeholder" }] : []));
|
|
2211
|
+
/** Maximum characters per language (native `maxlength` on the field). 0 = no limit. */
|
|
2212
|
+
maxLength = input(0, ...(ngDevMode ? [{ debugName: "maxLength", transform: numberAttribute }] : [{ transform: numberAttribute }]));
|
|
2213
|
+
/** Show a character counter (of the language being edited) under the field; implied by {@link maxLength}. */
|
|
2214
|
+
showCount = input(false, ...(ngDevMode ? [{ debugName: "showCount", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
|
|
2188
2215
|
/** The accepted language codes, in display order (e.g. `['fr','nl','en']`). */
|
|
2189
2216
|
languages = input([], ...(ngDevMode ? [{ debugName: "languages" }] : []));
|
|
2190
2217
|
/** Language to pre-select; used when it is one of {@link languages}, else the first accepted language. */
|
|
@@ -2200,6 +2227,8 @@ class SdsLocalizedInput {
|
|
|
2200
2227
|
*/
|
|
2201
2228
|
languageSwitcherLabel = input('Language', ...(ngDevMode ? [{ debugName: "languageSwitcherLabel" }] : []));
|
|
2202
2229
|
untranslatedLabel = input('not translated yet', ...(ngDevMode ? [{ debugName: "untranslatedLabel" }] : []));
|
|
2230
|
+
/** Title suffix of a required language that is still empty (see {@link requiredLanguages}). */
|
|
2231
|
+
requiredLanguageLabel = input('required', ...(ngDevMode ? [{ debugName: "requiredLanguageLabel" }] : []));
|
|
2203
2232
|
valueMap = signal({}, ...(ngDevMode ? [{ debugName: "valueMap" }] : []));
|
|
2204
2233
|
/** Language chosen via the switcher; null means "follow currentLanguage / the first language". */
|
|
2205
2234
|
manual = signal(null, ...(ngDevMode ? [{ debugName: "manual" }] : []));
|
|
@@ -2207,11 +2236,25 @@ class SdsLocalizedInput {
|
|
|
2207
2236
|
isDisabled = computed(() => this.disabled() || this.cvaDisabled(), ...(ngDevMode ? [{ debugName: "isDisabled" }] : []));
|
|
2208
2237
|
wrapperClasses = computed(() => {
|
|
2209
2238
|
const parts = [SIZES$a[this.size()]];
|
|
2239
|
+
const danger = !!this.error() || this.invalid();
|
|
2210
2240
|
parts.push(this.isDisabled()
|
|
2211
2241
|
? 'border-border opacity-60 cursor-not-allowed'
|
|
2212
|
-
:
|
|
2242
|
+
: danger
|
|
2243
|
+
? 'border-danger focus-within:ring-2 focus-within:ring-danger/30'
|
|
2244
|
+
: 'border-border focus-within:border-brand-500 focus-within:ring-2 focus-within:ring-brand-500/25');
|
|
2213
2245
|
return parts.join(' ');
|
|
2214
2246
|
}, ...(ngDevMode ? [{ debugName: "wrapperClasses" }] : []));
|
|
2247
|
+
hasCounter = computed(() => this.showCount() || this.maxLength() > 0, ...(ngDevMode ? [{ debugName: "hasCounter" }] : []));
|
|
2248
|
+
describedBy = computed(() => {
|
|
2249
|
+
const ids = [];
|
|
2250
|
+
if (this.error())
|
|
2251
|
+
ids.push(`${this.fieldId()}-err`);
|
|
2252
|
+
else if (this.hint())
|
|
2253
|
+
ids.push(`${this.fieldId()}-hint`);
|
|
2254
|
+
if (this.hasCounter())
|
|
2255
|
+
ids.push(`${this.fieldId()}-count`);
|
|
2256
|
+
return ids.length ? ids.join(' ') : null;
|
|
2257
|
+
}, ...(ngDevMode ? [{ debugName: "describedBy" }] : []));
|
|
2215
2258
|
/** The language currently being edited. */
|
|
2216
2259
|
activeLang = computed(() => {
|
|
2217
2260
|
const langs = this.languages();
|
|
@@ -2230,6 +2273,10 @@ class SdsLocalizedInput {
|
|
|
2230
2273
|
const text = this.valueMap()[lang];
|
|
2231
2274
|
return !!text && text.trim().length > 0;
|
|
2232
2275
|
}
|
|
2276
|
+
/** A required language (see {@link requiredLanguages}) that is still empty. */
|
|
2277
|
+
mustFill(lang) {
|
|
2278
|
+
return this.requiredLanguages().includes(lang) && !this.filled(lang);
|
|
2279
|
+
}
|
|
2233
2280
|
fieldPlaceholder() {
|
|
2234
2281
|
const base = this.placeholder();
|
|
2235
2282
|
const lang = this.activeLang().toUpperCase();
|
|
@@ -2274,7 +2321,7 @@ class SdsLocalizedInput {
|
|
|
2274
2321
|
this.cvaDisabled.set(isDisabled);
|
|
2275
2322
|
}
|
|
2276
2323
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: SdsLocalizedInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2277
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: SdsLocalizedInput, isStandalone: true, selector: "sds-localized-input", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, languages: { classPropertyName: "languages", publicName: "languages", isSignal: true, isRequired: false, transformFunction: null }, currentLanguage: { classPropertyName: "currentLanguage", publicName: "currentLanguage", isSignal: true, isRequired: false, transformFunction: null }, multiline: { classPropertyName: "multiline", publicName: "multiline", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, languageSwitcherLabel: { classPropertyName: "languageSwitcherLabel", publicName: "languageSwitcherLabel", isSignal: true, isRequired: false, transformFunction: null }, untranslatedLabel: { classPropertyName: "untranslatedLabel", publicName: "untranslatedLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, providers: [
|
|
2324
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: SdsLocalizedInput, isStandalone: true, selector: "sds-localized-input", inputs: { inputId: { classPropertyName: "inputId", publicName: "inputId", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, requiredLanguages: { classPropertyName: "requiredLanguages", publicName: "requiredLanguages", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, showCount: { classPropertyName: "showCount", publicName: "showCount", isSignal: true, isRequired: false, transformFunction: null }, languages: { classPropertyName: "languages", publicName: "languages", isSignal: true, isRequired: false, transformFunction: null }, currentLanguage: { classPropertyName: "currentLanguage", publicName: "currentLanguage", isSignal: true, isRequired: false, transformFunction: null }, multiline: { classPropertyName: "multiline", publicName: "multiline", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, languageSwitcherLabel: { classPropertyName: "languageSwitcherLabel", publicName: "languageSwitcherLabel", isSignal: true, isRequired: false, transformFunction: null }, untranslatedLabel: { classPropertyName: "untranslatedLabel", publicName: "untranslatedLabel", isSignal: true, isRequired: false, transformFunction: null }, requiredLanguageLabel: { classPropertyName: "requiredLanguageLabel", publicName: "requiredLanguageLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, providers: [
|
|
2278
2325
|
{
|
|
2279
2326
|
provide: NG_VALUE_ACCESSOR,
|
|
2280
2327
|
useExisting: forwardRef(() => SdsLocalizedInput),
|
|
@@ -2282,7 +2329,12 @@ class SdsLocalizedInput {
|
|
|
2282
2329
|
},
|
|
2283
2330
|
], ngImport: i0, template: `
|
|
2284
2331
|
@if (label()) {
|
|
2285
|
-
<label [for]="
|
|
2332
|
+
<label [for]="fieldId()" class="mb-1.5 block text-sm font-medium text-ink"
|
|
2333
|
+
>{{ label() }}
|
|
2334
|
+
@if (required()) {
|
|
2335
|
+
<span class="ml-0.5 text-danger" aria-hidden="true">*</span>
|
|
2336
|
+
}
|
|
2337
|
+
</label>
|
|
2286
2338
|
}
|
|
2287
2339
|
|
|
2288
2340
|
<div
|
|
@@ -2291,21 +2343,31 @@ class SdsLocalizedInput {
|
|
|
2291
2343
|
>
|
|
2292
2344
|
@if (multiline()) {
|
|
2293
2345
|
<textarea
|
|
2294
|
-
[id]="
|
|
2346
|
+
[id]="fieldId()"
|
|
2295
2347
|
[rows]="rows()"
|
|
2296
2348
|
[placeholder]="fieldPlaceholder()"
|
|
2297
2349
|
[disabled]="isDisabled()"
|
|
2298
2350
|
[value]="current()"
|
|
2351
|
+
[attr.maxlength]="maxLength() || null"
|
|
2352
|
+
[attr.aria-label]="!label() && ariaLabel() ? ariaLabel() : null"
|
|
2353
|
+
[attr.aria-invalid]="error() || invalid() ? 'true' : null"
|
|
2354
|
+
[attr.aria-required]="required() ? 'true' : null"
|
|
2355
|
+
[attr.aria-describedby]="describedBy()"
|
|
2299
2356
|
(input)="write($event)"
|
|
2300
2357
|
(blur)="onTouched()"
|
|
2301
2358
|
class="min-w-0 flex-1 resize-y bg-transparent px-3.5 py-2 outline-none placeholder:text-current/50 disabled:cursor-not-allowed"
|
|
2302
2359
|
></textarea>
|
|
2303
2360
|
} @else {
|
|
2304
2361
|
<input
|
|
2305
|
-
[id]="
|
|
2362
|
+
[id]="fieldId()"
|
|
2306
2363
|
[placeholder]="fieldPlaceholder()"
|
|
2307
2364
|
[disabled]="isDisabled()"
|
|
2308
2365
|
[value]="current()"
|
|
2366
|
+
[attr.maxlength]="maxLength() || null"
|
|
2367
|
+
[attr.aria-label]="!label() && ariaLabel() ? ariaLabel() : null"
|
|
2368
|
+
[attr.aria-invalid]="error() || invalid() ? 'true' : null"
|
|
2369
|
+
[attr.aria-required]="required() ? 'true' : null"
|
|
2370
|
+
[attr.aria-describedby]="describedBy()"
|
|
2309
2371
|
(input)="write($event)"
|
|
2310
2372
|
(blur)="onTouched()"
|
|
2311
2373
|
class="min-w-0 flex-1 bg-transparent px-3.5 outline-none placeholder:text-current/50 disabled:cursor-not-allowed"
|
|
@@ -2327,7 +2389,7 @@ class SdsLocalizedInput {
|
|
|
2327
2389
|
[disabled]="isDisabled()"
|
|
2328
2390
|
(click)="select(lang)"
|
|
2329
2391
|
[attr.aria-selected]="activeLang() === lang"
|
|
2330
|
-
[attr.title]="lang.toUpperCase() + (filled(lang) ? '' : ' — ' + untranslatedLabel())"
|
|
2392
|
+
[attr.title]="lang.toUpperCase() + (filled(lang) ? '' : ' — ' + (mustFill(lang) ? requiredLanguageLabel() : untranslatedLabel()))"
|
|
2331
2393
|
class="flex items-center gap-1 rounded px-1.5 py-0.5 text-[11px] font-semibold uppercase leading-none transition-colors disabled:cursor-not-allowed disabled:opacity-50"
|
|
2332
2394
|
[class]="
|
|
2333
2395
|
activeLang() === lang
|
|
@@ -2338,7 +2400,7 @@ class SdsLocalizedInput {
|
|
|
2338
2400
|
{{ lang }}
|
|
2339
2401
|
<span
|
|
2340
2402
|
class="inline-block h-1 w-1 rounded-full"
|
|
2341
|
-
[class]="filled(lang) ? 'bg-success' : 'bg-current/30'"
|
|
2403
|
+
[class]="filled(lang) ? 'bg-success' : mustFill(lang) ? 'bg-danger' : 'bg-current/30'"
|
|
2342
2404
|
></span>
|
|
2343
2405
|
</button>
|
|
2344
2406
|
}
|
|
@@ -2346,8 +2408,23 @@ class SdsLocalizedInput {
|
|
|
2346
2408
|
}
|
|
2347
2409
|
</div>
|
|
2348
2410
|
|
|
2349
|
-
@if (
|
|
2350
|
-
<
|
|
2411
|
+
@if (hasCounter()) {
|
|
2412
|
+
<div class="mt-1.5 flex items-start gap-3 text-xs">
|
|
2413
|
+
@if (error()) {
|
|
2414
|
+
<p [id]="fieldId() + '-err'" class="flex-1 font-medium text-danger">{{ error() }}</p>
|
|
2415
|
+
} @else if (hint()) {
|
|
2416
|
+
<p [id]="fieldId() + '-hint'" class="flex-1 text-ink-faint">{{ hint() }}</p>
|
|
2417
|
+
} @else {
|
|
2418
|
+
<span class="flex-1"></span>
|
|
2419
|
+
}
|
|
2420
|
+
<span [id]="fieldId() + '-count'" aria-live="polite" class="shrink-0 tabular-nums text-ink-faint">
|
|
2421
|
+
{{ current().length }}{{ maxLength() ? ' / ' + maxLength() : '' }}
|
|
2422
|
+
</span>
|
|
2423
|
+
</div>
|
|
2424
|
+
} @else if (error()) {
|
|
2425
|
+
<p [id]="fieldId() + '-err'" class="mt-1.5 text-xs font-medium text-danger">{{ error() }}</p>
|
|
2426
|
+
} @else if (hint()) {
|
|
2427
|
+
<p [id]="fieldId() + '-hint'" class="mt-1.5 text-xs text-ink-faint">{{ hint() }}</p>
|
|
2351
2428
|
}
|
|
2352
2429
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2353
2430
|
}
|
|
@@ -2366,7 +2443,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
2366
2443
|
host: { class: 'block' },
|
|
2367
2444
|
template: `
|
|
2368
2445
|
@if (label()) {
|
|
2369
|
-
<label [for]="
|
|
2446
|
+
<label [for]="fieldId()" class="mb-1.5 block text-sm font-medium text-ink"
|
|
2447
|
+
>{{ label() }}
|
|
2448
|
+
@if (required()) {
|
|
2449
|
+
<span class="ml-0.5 text-danger" aria-hidden="true">*</span>
|
|
2450
|
+
}
|
|
2451
|
+
</label>
|
|
2370
2452
|
}
|
|
2371
2453
|
|
|
2372
2454
|
<div
|
|
@@ -2375,21 +2457,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
2375
2457
|
>
|
|
2376
2458
|
@if (multiline()) {
|
|
2377
2459
|
<textarea
|
|
2378
|
-
[id]="
|
|
2460
|
+
[id]="fieldId()"
|
|
2379
2461
|
[rows]="rows()"
|
|
2380
2462
|
[placeholder]="fieldPlaceholder()"
|
|
2381
2463
|
[disabled]="isDisabled()"
|
|
2382
2464
|
[value]="current()"
|
|
2465
|
+
[attr.maxlength]="maxLength() || null"
|
|
2466
|
+
[attr.aria-label]="!label() && ariaLabel() ? ariaLabel() : null"
|
|
2467
|
+
[attr.aria-invalid]="error() || invalid() ? 'true' : null"
|
|
2468
|
+
[attr.aria-required]="required() ? 'true' : null"
|
|
2469
|
+
[attr.aria-describedby]="describedBy()"
|
|
2383
2470
|
(input)="write($event)"
|
|
2384
2471
|
(blur)="onTouched()"
|
|
2385
2472
|
class="min-w-0 flex-1 resize-y bg-transparent px-3.5 py-2 outline-none placeholder:text-current/50 disabled:cursor-not-allowed"
|
|
2386
2473
|
></textarea>
|
|
2387
2474
|
} @else {
|
|
2388
2475
|
<input
|
|
2389
|
-
[id]="
|
|
2476
|
+
[id]="fieldId()"
|
|
2390
2477
|
[placeholder]="fieldPlaceholder()"
|
|
2391
2478
|
[disabled]="isDisabled()"
|
|
2392
2479
|
[value]="current()"
|
|
2480
|
+
[attr.maxlength]="maxLength() || null"
|
|
2481
|
+
[attr.aria-label]="!label() && ariaLabel() ? ariaLabel() : null"
|
|
2482
|
+
[attr.aria-invalid]="error() || invalid() ? 'true' : null"
|
|
2483
|
+
[attr.aria-required]="required() ? 'true' : null"
|
|
2484
|
+
[attr.aria-describedby]="describedBy()"
|
|
2393
2485
|
(input)="write($event)"
|
|
2394
2486
|
(blur)="onTouched()"
|
|
2395
2487
|
class="min-w-0 flex-1 bg-transparent px-3.5 outline-none placeholder:text-current/50 disabled:cursor-not-allowed"
|
|
@@ -2411,7 +2503,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
2411
2503
|
[disabled]="isDisabled()"
|
|
2412
2504
|
(click)="select(lang)"
|
|
2413
2505
|
[attr.aria-selected]="activeLang() === lang"
|
|
2414
|
-
[attr.title]="lang.toUpperCase() + (filled(lang) ? '' : ' — ' + untranslatedLabel())"
|
|
2506
|
+
[attr.title]="lang.toUpperCase() + (filled(lang) ? '' : ' — ' + (mustFill(lang) ? requiredLanguageLabel() : untranslatedLabel()))"
|
|
2415
2507
|
class="flex items-center gap-1 rounded px-1.5 py-0.5 text-[11px] font-semibold uppercase leading-none transition-colors disabled:cursor-not-allowed disabled:opacity-50"
|
|
2416
2508
|
[class]="
|
|
2417
2509
|
activeLang() === lang
|
|
@@ -2422,7 +2514,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
2422
2514
|
{{ lang }}
|
|
2423
2515
|
<span
|
|
2424
2516
|
class="inline-block h-1 w-1 rounded-full"
|
|
2425
|
-
[class]="filled(lang) ? 'bg-success' : 'bg-current/30'"
|
|
2517
|
+
[class]="filled(lang) ? 'bg-success' : mustFill(lang) ? 'bg-danger' : 'bg-current/30'"
|
|
2426
2518
|
></span>
|
|
2427
2519
|
</button>
|
|
2428
2520
|
}
|
|
@@ -2430,12 +2522,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
|
|
|
2430
2522
|
}
|
|
2431
2523
|
</div>
|
|
2432
2524
|
|
|
2433
|
-
@if (
|
|
2434
|
-
<
|
|
2525
|
+
@if (hasCounter()) {
|
|
2526
|
+
<div class="mt-1.5 flex items-start gap-3 text-xs">
|
|
2527
|
+
@if (error()) {
|
|
2528
|
+
<p [id]="fieldId() + '-err'" class="flex-1 font-medium text-danger">{{ error() }}</p>
|
|
2529
|
+
} @else if (hint()) {
|
|
2530
|
+
<p [id]="fieldId() + '-hint'" class="flex-1 text-ink-faint">{{ hint() }}</p>
|
|
2531
|
+
} @else {
|
|
2532
|
+
<span class="flex-1"></span>
|
|
2533
|
+
}
|
|
2534
|
+
<span [id]="fieldId() + '-count'" aria-live="polite" class="shrink-0 tabular-nums text-ink-faint">
|
|
2535
|
+
{{ current().length }}{{ maxLength() ? ' / ' + maxLength() : '' }}
|
|
2536
|
+
</span>
|
|
2537
|
+
</div>
|
|
2538
|
+
} @else if (error()) {
|
|
2539
|
+
<p [id]="fieldId() + '-err'" class="mt-1.5 text-xs font-medium text-danger">{{ error() }}</p>
|
|
2540
|
+
} @else if (hint()) {
|
|
2541
|
+
<p [id]="fieldId() + '-hint'" class="mt-1.5 text-xs text-ink-faint">{{ hint() }}</p>
|
|
2435
2542
|
}
|
|
2436
2543
|
`,
|
|
2437
2544
|
}]
|
|
2438
|
-
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], languages: [{ type: i0.Input, args: [{ isSignal: true, alias: "languages", required: false }] }], currentLanguage: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentLanguage", required: false }] }], multiline: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiline", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], languageSwitcherLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "languageSwitcherLabel", required: false }] }], untranslatedLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "untranslatedLabel", required: false }] }] } });
|
|
2545
|
+
}], propDecorators: { inputId: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputId", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], requiredLanguages: [{ type: i0.Input, args: [{ isSignal: true, alias: "requiredLanguages", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], maxLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxLength", required: false }] }], showCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCount", required: false }] }], languages: [{ type: i0.Input, args: [{ isSignal: true, alias: "languages", required: false }] }], currentLanguage: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentLanguage", required: false }] }], multiline: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiline", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], languageSwitcherLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "languageSwitcherLabel", required: false }] }], untranslatedLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "untranslatedLabel", required: false }] }], requiredLanguageLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "requiredLanguageLabel", required: false }] }] } });
|
|
2439
2546
|
|
|
2440
2547
|
let nextId$k = 0;
|
|
2441
2548
|
const SIZES$9 = {
|