oasys-lib 3.9.0 → 3.10.1-rc.0

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.
@@ -1393,7 +1393,7 @@ class TextInputComponent {
1393
1393
  showPassword = signal(false, ...(ngDevMode ? [{ debugName: "showPassword" }] : /* istanbul ignore next */ []));
1394
1394
  inputDidChange = signal(false, ...(ngDevMode ? [{ debugName: "inputDidChange" }] : /* istanbul ignore next */ [])); // only show valdiation after a change event (ie. blur)
1395
1395
  textInputType = signal('text', ...(ngDevMode ? [{ debugName: "textInputType" }] : /* istanbul ignore next */ []));
1396
- isFocused = signal(false, ...(ngDevMode ? [{ debugName: "isFocused" }] : /* istanbul ignore next */ [])); // track focus state for password hint display
1396
+ hasBeenFocused = signal(false, ...(ngDevMode ? [{ debugName: "hasBeenFocused" }] : /* istanbul ignore next */ [])); // once the field is focused, the password hint stays visible
1397
1397
  id = signal('', ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
1398
1398
  safariAutocorrect = signal('on', ...(ngDevMode ? [{ debugName: "safariAutocorrect" }] : /* istanbul ignore next */ []));
1399
1399
  // Computed signal for hide_password_aria_label that combines the base label with the current input value for better screen reader context
@@ -1405,9 +1405,10 @@ class TextInputComponent {
1405
1405
  if (!this.hint()) {
1406
1406
  return false;
1407
1407
  }
1408
- // For password inputs, only show hint when focused
1408
+ // For password inputs, wait until the field is first focused, then keep the hint showing.
1409
+ // Hiding it again on blur would move everything below it, so a click on the next button could miss.
1409
1410
  if (this.type() === 'password') {
1410
- return this.isFocused();
1411
+ return this.hasBeenFocused();
1411
1412
  }
1412
1413
  // For all other input types, always show hint
1413
1414
  return true;
@@ -1437,10 +1438,9 @@ class TextInputComponent {
1437
1438
  this.inputDidChange.set(false);
1438
1439
  }
1439
1440
  onFocus() {
1440
- this.isFocused.set(true);
1441
+ this.hasBeenFocused.set(true);
1441
1442
  }
1442
1443
  onBlur() {
1443
- this.isFocused.set(false);
1444
1444
  // User left the field — reveal validation errors if still invalid.
1445
1445
  this.inputDidChange.set(true);
1446
1446
  // Mark the form control as touched (standard CVA behavior on blur).
@@ -1493,8 +1493,8 @@ class TextInputComponent {
1493
1493
  // Add error if it exists
1494
1494
  describedBy.push('error_' + this.id());
1495
1495
  }
1496
- // Add hint if it exists
1497
- if (this.hint()) {
1496
+ // Only point at the hint while it is on the page, so screen readers never look for a missing element
1497
+ if (this.shouldShowHint()) {
1498
1498
  describedBy.push('hint_' + this.id());
1499
1499
  }
1500
1500
  return describedBy.length > 0 ? describedBy.join(' ') : undefined;