@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
- inputId = `sds-localized-input-${nextId$l++}`;
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
- : 'border-border focus-within:border-brand-500 focus-within:ring-2 focus-within:ring-brand-500/25');
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]="inputId" class="mb-1.5 block text-sm font-medium text-ink">{{ label() }}</label>
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]="inputId"
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]="inputId"
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 (hint()) {
2350
- <p class="mt-1.5 text-xs text-ink-faint">{{ hint() }}</p>
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]="inputId" class="mb-1.5 block text-sm font-medium text-ink">{{ label() }}</label>
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]="inputId"
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]="inputId"
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 (hint()) {
2434
- <p class="mt-1.5 text-xs text-ink-faint">{{ hint() }}</p>
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 = {