@ionic/core 8.7.3-dev.11755622775.1fc05815 → 8.7.3-dev.11755696506.17b8097b

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.
Files changed (80) hide show
  1. package/components/ion-datetime.js +4 -3
  2. package/components/ion-input.js +5 -36
  3. package/components/ion-textarea.js +4 -35
  4. package/components/overlays.js +7 -1
  5. package/components/picker-column-option.js +3 -3
  6. package/components/picker-column.js +3 -39
  7. package/dist/cjs/index.cjs.js +1 -1
  8. package/dist/cjs/ion-action-sheet.cjs.entry.js +1 -1
  9. package/dist/cjs/ion-alert.cjs.entry.js +1 -1
  10. package/dist/cjs/ion-datetime_3.cjs.entry.js +4 -4
  11. package/dist/cjs/ion-input.cjs.entry.js +5 -35
  12. package/dist/cjs/ion-loading.cjs.entry.js +1 -1
  13. package/dist/cjs/ion-menu_3.cjs.entry.js +1 -1
  14. package/dist/cjs/ion-modal.cjs.entry.js +1 -1
  15. package/dist/cjs/ion-picker-column-option.cjs.entry.js +3 -3
  16. package/dist/cjs/ion-picker-column.cjs.entry.js +3 -39
  17. package/dist/cjs/ion-popover.cjs.entry.js +1 -1
  18. package/dist/cjs/ion-select-modal.cjs.entry.js +1 -1
  19. package/dist/cjs/ion-select_3.cjs.entry.js +1 -1
  20. package/dist/cjs/ion-textarea.cjs.entry.js +4 -34
  21. package/dist/cjs/ion-toast.cjs.entry.js +1 -1
  22. package/dist/cjs/ionic.cjs.js +1 -1
  23. package/dist/cjs/loader.cjs.js +1 -1
  24. package/dist/cjs/{overlays-CglR7j-u.js → overlays-DFkeeMZX.js} +7 -1
  25. package/dist/collection/components/datetime/datetime.js +4 -3
  26. package/dist/collection/components/input/input.js +6 -37
  27. package/dist/collection/components/picker-column/picker-column.js +3 -39
  28. package/dist/collection/components/picker-column-option/picker-column-option.ios.css +2 -2
  29. package/dist/collection/components/picker-column-option/picker-column-option.js +1 -1
  30. package/dist/collection/components/picker-column-option/picker-column-option.md.css +2 -2
  31. package/dist/collection/components/textarea/textarea.js +5 -36
  32. package/dist/collection/utils/overlays.js +7 -1
  33. package/dist/docs.json +1 -1
  34. package/dist/esm/index.js +1 -1
  35. package/dist/esm/ion-action-sheet.entry.js +1 -1
  36. package/dist/esm/ion-alert.entry.js +1 -1
  37. package/dist/esm/ion-datetime_3.entry.js +4 -4
  38. package/dist/esm/ion-input.entry.js +5 -35
  39. package/dist/esm/ion-loading.entry.js +1 -1
  40. package/dist/esm/ion-menu_3.entry.js +1 -1
  41. package/dist/esm/ion-modal.entry.js +1 -1
  42. package/dist/esm/ion-picker-column-option.entry.js +3 -3
  43. package/dist/esm/ion-picker-column.entry.js +3 -39
  44. package/dist/esm/ion-popover.entry.js +1 -1
  45. package/dist/esm/ion-select-modal.entry.js +1 -1
  46. package/dist/esm/ion-select_3.entry.js +1 -1
  47. package/dist/esm/ion-textarea.entry.js +4 -34
  48. package/dist/esm/ion-toast.entry.js +1 -1
  49. package/dist/esm/ionic.js +1 -1
  50. package/dist/esm/loader.js +1 -1
  51. package/dist/esm/{overlays-ZX_4-t_r.js → overlays-BfCgLYdD.js} +7 -1
  52. package/dist/ionic/index.esm.js +1 -1
  53. package/dist/ionic/ionic.esm.js +1 -1
  54. package/dist/ionic/p-1488b7cc.entry.js +4 -0
  55. package/dist/ionic/{p-ab33ef20.entry.js → p-1e6a6fde.entry.js} +1 -1
  56. package/dist/ionic/{p-982fe1c4.entry.js → p-31f7216f.entry.js} +1 -1
  57. package/dist/ionic/{p-c575e7ce.entry.js → p-4d57f91a.entry.js} +1 -1
  58. package/dist/ionic/p-5c138549.entry.js +4 -0
  59. package/dist/ionic/p-8888efe4.entry.js +4 -0
  60. package/dist/ionic/{p-92e8f208.entry.js → p-9f8f01e6.entry.js} +1 -1
  61. package/dist/ionic/p-b292804d.entry.js +4 -0
  62. package/dist/ionic/{p-91d6ccb0.entry.js → p-b92a19c8.entry.js} +1 -1
  63. package/dist/ionic/p-c5210d3e.entry.js +4 -0
  64. package/dist/ionic/{p-f2884bc2.entry.js → p-e206b074.entry.js} +1 -1
  65. package/dist/ionic/{p-7bac2c5f.entry.js → p-e61fd4b2.entry.js} +1 -1
  66. package/dist/ionic/{p-ac434970.entry.js → p-eb9b64a6.entry.js} +1 -1
  67. package/dist/ionic/{p-8d96a0cd.entry.js → p-ef5372b6.entry.js} +1 -1
  68. package/dist/ionic/p-ly6Zj1CK.js +4 -0
  69. package/dist/types/components/input/input.d.ts +0 -9
  70. package/dist/types/components/picker-column/picker-column.d.ts +0 -7
  71. package/dist/types/components/textarea/textarea.d.ts +0 -9
  72. package/hydrate/index.js +25 -91
  73. package/hydrate/index.mjs +25 -91
  74. package/package.json +1 -1
  75. package/dist/ionic/p-187aaf4a.entry.js +0 -4
  76. package/dist/ionic/p-1d5b934a.entry.js +0 -4
  77. package/dist/ionic/p-1e34d434.entry.js +0 -4
  78. package/dist/ionic/p-29032e49.entry.js +0 -4
  79. package/dist/ionic/p-CSwZyt05.js +0 -4
  80. package/dist/ionic/p-f456d176.entry.js +0 -4
package/hydrate/index.js CHANGED
@@ -6167,9 +6167,11 @@ const setRootAriaHidden = (hidden = false) => {
6167
6167
  }
6168
6168
  if (hidden) {
6169
6169
  viewContainer.setAttribute('aria-hidden', 'true');
6170
+ viewContainer.setAttribute('inert', '');
6170
6171
  }
6171
6172
  else {
6172
6173
  viewContainer.removeAttribute('aria-hidden');
6174
+ viewContainer.removeAttribute('inert');
6173
6175
  }
6174
6176
  };
6175
6177
  const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts) => {
@@ -6177,6 +6179,7 @@ const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts)
6177
6179
  if (overlay.presented) {
6178
6180
  return;
6179
6181
  }
6182
+ console.log("presenting overlay...");
6180
6183
  /**
6181
6184
  * Due to accessibility guidelines, toasts do not have
6182
6185
  * focus traps.
@@ -6186,7 +6189,6 @@ const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts)
6186
6189
  */
6187
6190
  if (overlay.el.tagName !== 'ION-TOAST') {
6188
6191
  setRootAriaHidden(true);
6189
- document.body.classList.add(BACKDROP_NO_SCROLL);
6190
6192
  }
6191
6193
  hideUnderlyingOverlaysFromScreenReaders(overlay.el);
6192
6194
  hideAnimatingOverlayFromScreenReaders(overlay.el);
@@ -6236,6 +6238,7 @@ const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts)
6236
6238
  * screen readers.
6237
6239
  */
6238
6240
  overlay.el.removeAttribute('aria-hidden');
6241
+ overlay.el.removeAttribute('inert');
6239
6242
  };
6240
6243
  /**
6241
6244
  * When an overlay component is dismissed,
@@ -6584,6 +6587,7 @@ const hideAnimatingOverlayFromScreenReaders = (overlay) => {
6584
6587
  * This is done at the end of the `present` method.
6585
6588
  */
6586
6589
  overlay.setAttribute('aria-hidden', 'true');
6590
+ overlay.setAttribute('inert', '');
6587
6591
  }
6588
6592
  };
6589
6593
  /**
@@ -6611,6 +6615,7 @@ const hideUnderlyingOverlaysFromScreenReaders = (newTopMostOverlay) => {
6611
6615
  */
6612
6616
  if (nextPresentedOverlay.hasAttribute('aria-hidden') || nextPresentedOverlay.tagName !== 'ION-TOAST') {
6613
6617
  presentedOverlay.setAttribute('aria-hidden', 'true');
6618
+ presentedOverlay.setAttribute('inert', '');
6614
6619
  }
6615
6620
  }
6616
6621
  };
@@ -6632,6 +6637,7 @@ const revealOverlaysToScreenReaders = () => {
6632
6637
  * overlay too so focus can move there since focus is never automatically moved to the Toast.
6633
6638
  */
6634
6639
  currentOverlay.removeAttribute('aria-hidden');
6640
+ currentOverlay.removeAttribute('inert');
6635
6641
  /**
6636
6642
  * If we found a non-Toast element then we can just remove aria-hidden and stop searching entirely
6637
6643
  * since this overlay should always receive focus. As a result, all underlying overlays should still
@@ -13531,7 +13537,7 @@ class Datetime {
13531
13537
  const renderArray = forcePresentation === 'time-date'
13532
13538
  ? [this.renderTimePickerColumns(forcePresentation), this.renderDatePickerColumns(forcePresentation)]
13533
13539
  : [this.renderDatePickerColumns(forcePresentation), this.renderTimePickerColumns(forcePresentation)];
13534
- return hAsync("ion-picker", null, renderArray);
13540
+ return hAsync("ion-picker", { class: FOCUS_TRAP_DISABLE_CLASS }, renderArray);
13535
13541
  }
13536
13542
  renderDatePickerColumns(forcePresentation) {
13537
13543
  return forcePresentation === 'date-time' || forcePresentation === 'time-date'
@@ -14088,7 +14094,7 @@ class Datetime {
14088
14094
  const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
14089
14095
  const hasWheelVariant = hasDatePresentation && preferWheel;
14090
14096
  renderHiddenInput(true, el, name, formatValue(value), disabled);
14091
- return (hAsync(Host, { key: 'f35cf200ff05d33074576e3d2754d3b2a0735b96', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses$1(color, {
14097
+ return (hAsync(Host, { key: '57492534800ea059a7c2bbd9f0059cc0b75ae8d2', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses$1(color, {
14092
14098
  [mode]: true,
14093
14099
  ['datetime-readonly']: readonly,
14094
14100
  ['datetime-disabled']: disabled,
@@ -14098,7 +14104,7 @@ class Datetime {
14098
14104
  [`datetime-size-${size}`]: true,
14099
14105
  [`datetime-prefer-wheel`]: hasWheelVariant,
14100
14106
  [`datetime-grid`]: isGridStyle,
14101
- })) }, hAsync("div", { key: '859e9354a12bfa58ac3f964c2e66839f17071c00', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
14107
+ })) }, hAsync("div", { key: '97dac5e5195635ac0bc5fb472b9d09e5c3c6bbc3', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
14102
14108
  }
14103
14109
  get el() { return getElement(this); }
14104
14110
  static get watchers() { return {
@@ -16629,10 +16635,6 @@ class Input {
16629
16635
  * is applied in both cases.
16630
16636
  */
16631
16637
  this.hasFocus = false;
16632
- /**
16633
- * Track validation state for proper aria-live announcements
16634
- */
16635
- this.isInvalid = false;
16636
16638
  /**
16637
16639
  * Indicates whether and how the text value should be automatically capitalized as it is entered/edited by the user.
16638
16640
  * Available options: `"off"`, `"none"`, `"on"`, `"sentences"`, `"words"`, `"characters"`.
@@ -16816,18 +16818,10 @@ class Input {
16816
16818
  componentWillLoad() {
16817
16819
  this.inheritedAttributes = Object.assign(Object.assign({}, inheritAriaAttributes(this.el)), inheritAttributes$1(this.el, ['tabindex', 'title', 'data-form-type', 'dir']));
16818
16820
  }
16819
- /**
16820
- * Checks if the input is in an invalid state based on validation classes
16821
- */
16822
- checkValidationState() {
16823
- return this.el.classList.contains('ion-touched') && this.el.classList.contains('ion-invalid');
16824
- }
16825
16821
  connectedCallback() {
16826
16822
  const { el } = this;
16827
16823
  this.slotMutationController = createSlotMutationController(el, ['label', 'start', 'end'], () => forceUpdate());
16828
16824
  this.notchController = createNotchController(el, () => this.notchSpacerEl, () => this.labelSlot);
16829
- // Always set initial state
16830
- this.isInvalid = this.checkValidationState();
16831
16825
  this.debounceChanged();
16832
16826
  }
16833
16827
  componentDidLoad() {
@@ -16854,11 +16848,6 @@ class Input {
16854
16848
  this.notchController.destroy();
16855
16849
  this.notchController = undefined;
16856
16850
  }
16857
- // Clean up validation observer to prevent memory leaks
16858
- if (this.validationObserver) {
16859
- this.validationObserver.disconnect();
16860
- this.validationObserver = undefined;
16861
- }
16862
16851
  }
16863
16852
  /**
16864
16853
  * Sets focus on the native `input` in `ion-input`. Use this method instead of the global
@@ -16967,8 +16956,8 @@ class Input {
16967
16956
  ];
16968
16957
  }
16969
16958
  getHintTextID() {
16970
- const { isInvalid, helperText, errorText, helperTextId, errorTextId } = this;
16971
- if (isInvalid && errorText) {
16959
+ const { el, helperText, errorText, helperTextId, errorTextId } = this;
16960
+ if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) {
16972
16961
  return errorTextId;
16973
16962
  }
16974
16963
  if (helperText) {
@@ -17081,7 +17070,7 @@ class Input {
17081
17070
  * TODO(FW-5592): Remove hasStartEndSlots condition
17082
17071
  */
17083
17072
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
17084
- return (hAsync(Host, { key: '1b0cffa910aef4eac24438bf3158e51905e70788', class: createColorClasses$1(this.color, {
17073
+ return (hAsync(Host, { key: '41b2526627e7d2773a80f011b123284203a71ca0', class: createColorClasses$1(this.color, {
17085
17074
  [mode]: true,
17086
17075
  'has-value': hasValue,
17087
17076
  'has-focus': hasFocus,
@@ -17092,14 +17081,14 @@ class Input {
17092
17081
  'in-item': inItem,
17093
17082
  'in-item-color': hostContext('ion-item.ion-color', this.el),
17094
17083
  'input-disabled': disabled,
17095
- }) }, hAsync("label", { key: '24411a6cc190e2054015bca5e2827b96c65bba17', class: "input-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderLabelContainer(), hAsync("div", { key: '7fa7a7f6d2778e6efbebc6f2671d8a63048f76a8', class: "native-wrapper", onClick: this.onLabelClick }, hAsync("slot", { key: '14f489e6026967ee1b2eee1519bad4230f028489', name: "start" }), hAsync("input", Object.assign({ key: 'd0f5b756394aced0831e80e91313a417bda37e6f', class: "native-input", ref: (input) => (this.nativeInput = input), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, min: this.min, max: this.max, minLength: this.minlength, maxLength: this.maxlength, multiple: this.multiple, name: this.name, pattern: this.pattern, placeholder: this.placeholder || '', readOnly: readonly, required: this.required, spellcheck: this.spellcheck, step: this.step, type: this.type, value: value, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeydown, onCompositionstart: this.onCompositionStart, onCompositionend: this.onCompositionEnd, "aria-describedby": this.getHintTextID(), "aria-invalid": this.isInvalid ? 'true' : undefined }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (hAsync("button", { key: '3e37003927082bbbfce4b3396a263969aa2289fc', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
17084
+ }) }, hAsync("label", { key: '9ab078363e32528102b441ad1791d83f86fdcbdc', class: "input-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderLabelContainer(), hAsync("div", { key: 'e34b594980ec62e4c618e827fadf7669a39ad0d8', class: "native-wrapper", onClick: this.onLabelClick }, hAsync("slot", { key: '12dc04ead5502e9e5736240e918bf9331bf7b5d9', name: "start" }), hAsync("input", Object.assign({ key: 'df356eb4ced23109b2c0242f36dc043aba8782d6', class: "native-input", ref: (input) => (this.nativeInput = input), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, min: this.min, max: this.max, minLength: this.minlength, maxLength: this.maxlength, multiple: this.multiple, name: this.name, pattern: this.pattern, placeholder: this.placeholder || '', readOnly: readonly, required: this.required, spellcheck: this.spellcheck, step: this.step, type: this.type, value: value, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeydown, onCompositionstart: this.onCompositionStart, onCompositionend: this.onCompositionEnd, "aria-describedby": this.getHintTextID(), "aria-invalid": this.getHintTextID() === this.errorTextId }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (hAsync("button", { key: 'f79f68cabcd4ea99419331174a377827db0c0741', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
17096
17085
  /**
17097
17086
  * This prevents mobile browsers from
17098
17087
  * blurring the input when the clear
17099
17088
  * button is activated.
17100
17089
  */
17101
17090
  ev.preventDefault();
17102
- }, onClick: this.clearTextInput }, hAsync("ion-icon", { key: '269ccdfd95a8a5b39bf0587b1494b4badd5c65b3', "aria-hidden": "true", icon: clearIconData }))), hAsync("slot", { key: '5d93a350194c4197c01c5d54f50060e7f527f065', name: "end" })), shouldRenderHighlight && hAsync("div", { key: 'fbdd13d41b37aa1e4608ba2535f7b833748eae3f', class: "input-highlight" })), this.renderBottomContent()));
17091
+ }, onClick: this.clearTextInput }, hAsync("ion-icon", { key: '237ec07ec2e10f08818a332bb596578c2c49f770', "aria-hidden": "true", icon: clearIconData }))), hAsync("slot", { key: '1f0a3624aa3e8dc3c307a6762230ab698768a5e5', name: "end" })), shouldRenderHighlight && hAsync("div", { key: '8a8cbb82695a722a0010b53dd0b1f1f97534a20b', class: "input-highlight" })), this.renderBottomContent()));
17103
17092
  }
17104
17093
  get el() { return getElement(this); }
17105
17094
  static get watchers() { return {
@@ -17151,7 +17140,6 @@ class Input {
17151
17140
  "type": [1],
17152
17141
  "value": [1032],
17153
17142
  "hasFocus": [32],
17154
- "isInvalid": [32],
17155
17143
  "setFocus": [64],
17156
17144
  "getInputElement": [64]
17157
17145
  },
@@ -25522,23 +25510,6 @@ class PickerColumn {
25522
25510
  var _a;
25523
25511
  return el ? (_a = el.getAttribute('aria-label')) !== null && _a !== void 0 ? _a : el.innerText : '';
25524
25512
  };
25525
- /**
25526
- * Render an element that overlays the column. This element is for assistive
25527
- * tech to allow users to navigate the column up/down. This element should receive
25528
- * focus as it listens for synthesized keyboard events as required by the
25529
- * slider role: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/slider_role
25530
- */
25531
- this.renderAssistiveFocusable = () => {
25532
- const { activeItem } = this;
25533
- const valueText = this.getOptionValueText(activeItem);
25534
- /**
25535
- * When using the picker, the valuetext provides important context that valuenow
25536
- * does not. Additionally, using non-zero valuemin/valuemax values can cause
25537
- * WebKit to incorrectly announce numeric valuetext values (such as a year
25538
- * like "2024") as percentages: https://bugs.webkit.org/show_bug.cgi?id=273126
25539
- */
25540
- return (hAsync("div", { ref: (el) => (this.assistiveFocusable = el), class: "assistive-focusable", role: "slider", tabindex: this.disabled ? undefined : 0, "aria-label": this.ariaLabel, "aria-valuemin": 0, "aria-valuemax": 0, "aria-valuenow": 0, "aria-valuetext": valueText, "aria-orientation": "vertical", onKeyDown: (ev) => this.onKeyDown(ev) }));
25541
- };
25542
25513
  }
25543
25514
  ariaLabelChanged(newValue) {
25544
25515
  this.ariaLabel = newValue;
@@ -25679,33 +25650,14 @@ class PickerColumn {
25679
25650
  render() {
25680
25651
  const { color, disabled, isActive, numericInput } = this;
25681
25652
  const mode = getIonMode$1(this);
25682
- return (hAsync(Host, { key: 'ea0280355b2f87895bf7dddd289ccf473aa759f3', class: createColorClasses$1(color, {
25653
+ return (hAsync(Host, { key: 'db903fd415f8a2d91994dececca481c1af8ba6a9', class: createColorClasses$1(color, {
25683
25654
  [mode]: true,
25684
25655
  ['picker-column-active']: isActive,
25685
25656
  ['picker-column-numeric-input']: numericInput,
25686
25657
  ['picker-column-disabled']: disabled,
25687
- }) }, this.renderAssistiveFocusable(), hAsync("slot", { key: '482992131cdeb85b1f61430d7fe1322a16345769', name: "prefix" }), hAsync("div", { key: '43f7f80d621d411ef366b3ca1396299e8c9a0c97', "aria-hidden": "true", class: "picker-opts", ref: (el) => {
25658
+ }) }, hAsync("slot", { key: '02ce9e1dd7df91afcd50b06416552bcffb5dec98', name: "prefix" }), hAsync("div", { key: '6dfd7d2429bec19244a6b1afb4448121963a031b', class: "picker-opts", ref: (el) => {
25688
25659
  this.scrollEl = el;
25689
- },
25690
- /**
25691
- * When an element has an overlay scroll style and
25692
- * a fixed height, Firefox will focus the scrollable
25693
- * container if the content exceeds the container's
25694
- * dimensions.
25695
- *
25696
- * This causes keyboard navigation to focus to this
25697
- * element instead of going to the next element in
25698
- * the tab order.
25699
- *
25700
- * The desired behavior is for the user to be able to
25701
- * focus the assistive focusable element and tab to
25702
- * the next element in the tab order. Instead of tabbing
25703
- * to this element.
25704
- *
25705
- * To prevent this, we set the tabIndex to -1. This
25706
- * will match the behavior of the other browsers.
25707
- */
25708
- tabIndex: -1 }, hAsync("div", { key: '13a9ee686132af32240710730765de4c0003a9e8', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("div", { key: 'dbccba4920833cfcebe9b0fc763458ec3053705a', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("div", { key: '682b43f83a5ea2e46067457f3af118535e111edb', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("slot", { key: 'd27e1e1dc0504b2f4627a29912a05bb91e8e413a' }), hAsync("div", { key: '61c948dbb9cf7469aed3018542bc0954211585ba', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("div", { key: 'cf46c277fbee65e35ff44ce0d53ce12aa9cbf9db', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("div", { key: 'bbc0e2d491d3f836ab849493ade2f7fa6ad9244e', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0")), hAsync("slot", { key: 'd25cbbe14b2914fe7b878d43b4e3f4a8c8177d24', name: "suffix" })));
25660
+ }, role: "slider", tabindex: this.disabled ? undefined : 0, "aria-label": this.ariaLabel, "aria-valuemin": 0, "aria-valuemax": 0, "aria-valuenow": 0, "aria-valuetext": this.getOptionValueText(this.activeItem), "aria-orientation": "vertical", onKeyDown: (ev) => this.onKeyDown(ev) }, hAsync("div", { key: 'e30ce0b9cefbfe4d4441fa33acf595da31855c3f', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("div", { key: '8be2bd293c12c6ba720d9b31d0d561a96f42e97d', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("div", { key: '8afdcddddabbf646fbb55cb0ba4448309a2c1dd9', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("slot", { key: '6aa0dacc34d6848575ad5b122b9046982308ca43' }), hAsync("div", { key: '92ec8a357414c1b779b11d1dd18fb87a7ee63982', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("div", { key: 'b89457cb74b5907c25594ff6720ac54ca537e933', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), hAsync("div", { key: '5bbc92e6bc24de08e39873bf08c5b668373ac0f8', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0")), hAsync("slot", { key: 'd7bf2b519214f0f3576a4ca79844ad97827dd97f', name: "suffix" })));
25709
25661
  }
25710
25662
  get el() { return getElement(this); }
25711
25663
  static get watchers() { return {
@@ -26097,9 +26049,9 @@ const DECELERATION_FRICTION = 0.97;
26097
26049
  const MAX_PICKER_SPEED = 90;
26098
26050
  const TRANSITION_DURATION = 150;
26099
26051
 
26100
- const pickerColumnOptionIosCss = "button{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;width:100%;height:34px;border:0px;outline:none;background:transparent;color:inherit;font-family:var(--ion-font-family, inherit);font-size:inherit;line-height:34px;text-align:inherit;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;overflow:hidden}:host(.option-disabled){opacity:0.4}:host(.option-disabled) button{cursor:default}";
26052
+ const pickerColumnOptionIosCss = ".picker-column-option-button{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;width:100%;height:34px;border:0px;outline:none;background:transparent;color:inherit;font-family:var(--ion-font-family, inherit);font-size:inherit;line-height:34px;text-align:inherit;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;overflow:hidden}:host(.option-disabled){opacity:0.4}:host(.option-disabled) .picker-column-option-button{cursor:default}";
26101
26053
 
26102
- const pickerColumnOptionMdCss = "button{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;width:100%;height:34px;border:0px;outline:none;background:transparent;color:inherit;font-family:var(--ion-font-family, inherit);font-size:inherit;line-height:34px;text-align:inherit;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;overflow:hidden}:host(.option-disabled){opacity:0.4}:host(.option-disabled) button{cursor:default}:host(.option-active){color:var(--ion-color-base)}";
26054
+ const pickerColumnOptionMdCss = ".picker-column-option-button{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;width:100%;height:34px;border:0px;outline:none;background:transparent;color:inherit;font-family:var(--ion-font-family, inherit);font-size:inherit;line-height:34px;text-align:inherit;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;overflow:hidden}:host(.option-disabled){opacity:0.4}:host(.option-disabled) .picker-column-option-button{cursor:default}:host(.option-active){color:var(--ion-color-base)}";
26103
26055
 
26104
26056
  class PickerColumnOption {
26105
26057
  constructor(hostRef) {
@@ -26191,7 +26143,7 @@ class PickerColumnOption {
26191
26143
  return (hAsync(Host, { key: 'f816729941aabcb31ddfdce3ffe2e2139030d715', class: createColorClasses$1(color, {
26192
26144
  [mode]: true,
26193
26145
  ['option-disabled']: disabled,
26194
- }) }, hAsync("button", { key: '48dff7833bb60fc8331cd353a0885e6affa683d1', tabindex: "-1", "aria-label": ariaLabel, disabled: disabled, onClick: () => this.onClick() }, hAsync("slot", { key: 'f9224d0e7b7aa6c05b29abfdcfe0f30ad6ee3141' }))));
26146
+ }) }, hAsync("div", { key: 'd942de84fd14d7dc06b1e5cf4f7920d1dc3c6371', class: 'picker-column-option-button', role: "button", "aria-label": ariaLabel, onClick: () => this.onClick() }, hAsync("slot", { key: 'b0df5717b42209e649097209a01476e1a66f5c5c' }))));
26195
26147
  }
26196
26148
  get el() { return getElement(this); }
26197
26149
  static get watchers() { return {
@@ -34911,10 +34863,6 @@ class Textarea {
34911
34863
  * is applied in both cases.
34912
34864
  */
34913
34865
  this.hasFocus = false;
34914
- /**
34915
- * Track validation state for proper aria-live announcements
34916
- */
34917
- this.isInvalid = false;
34918
34866
  /**
34919
34867
  * Indicates whether and how the text value should be automatically capitalized as it is entered/edited by the user.
34920
34868
  * Available options: `"off"`, `"none"`, `"on"`, `"sentences"`, `"words"`, `"characters"`.
@@ -35060,18 +35008,10 @@ class Textarea {
35060
35008
  this.el.click();
35061
35009
  }
35062
35010
  }
35063
- /**
35064
- * Checks if the textarea is in an invalid state based on validation classes
35065
- */
35066
- checkValidationState() {
35067
- return this.el.classList.contains('ion-touched') && this.el.classList.contains('ion-invalid');
35068
- }
35069
35011
  connectedCallback() {
35070
35012
  const { el } = this;
35071
35013
  this.slotMutationController = createSlotMutationController(el, ['label', 'start', 'end'], () => forceUpdate());
35072
35014
  this.notchController = createNotchController(el, () => this.notchSpacerEl, () => this.labelSlot);
35073
- // Always set initial state
35074
- this.isInvalid = this.checkValidationState();
35075
35015
  this.debounceChanged();
35076
35016
  }
35077
35017
  disconnectedCallback() {
@@ -35083,11 +35023,6 @@ class Textarea {
35083
35023
  this.notchController.destroy();
35084
35024
  this.notchController = undefined;
35085
35025
  }
35086
- // Clean up validation observer to prevent memory leaks
35087
- if (this.validationObserver) {
35088
- this.validationObserver.disconnect();
35089
- this.validationObserver = undefined;
35090
- }
35091
35026
  }
35092
35027
  componentWillLoad() {
35093
35028
  this.inheritedAttributes = Object.assign(Object.assign({}, inheritAriaAttributes(this.el)), inheritAttributes$1(this.el, ['data-form-type', 'title', 'tabindex', 'dir']));
@@ -35265,8 +35200,8 @@ class Textarea {
35265
35200
  ];
35266
35201
  }
35267
35202
  getHintTextID() {
35268
- const { isInvalid, helperText, errorText, helperTextId, errorTextId } = this;
35269
- if (isInvalid && errorText) {
35203
+ const { el, helperText, errorText, helperTextId, errorTextId } = this;
35204
+ if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) {
35270
35205
  return errorTextId;
35271
35206
  }
35272
35207
  if (helperText) {
@@ -35325,7 +35260,7 @@ class Textarea {
35325
35260
  * TODO(FW-5592): Remove hasStartEndSlots condition
35326
35261
  */
35327
35262
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
35328
- return (hAsync(Host, { key: 'de258335fde7fa934cf3bd58c469525440457468', class: createColorClasses$1(this.color, {
35263
+ return (hAsync(Host, { key: 'd9f2ede0107987fc42c99e310cd2336bad5a5755', class: createColorClasses$1(this.color, {
35329
35264
  [mode]: true,
35330
35265
  'has-value': hasValue,
35331
35266
  'has-focus': hasFocus,
@@ -35334,7 +35269,7 @@ class Textarea {
35334
35269
  [`textarea-shape-${shape}`]: shape !== undefined,
35335
35270
  [`textarea-label-placement-${labelPlacement}`]: true,
35336
35271
  'textarea-disabled': disabled,
35337
- }) }, hAsync("label", { key: '79fc87122871d45316b1c5fd0a467bf85351e804', class: "textarea-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderLabelContainer(), hAsync("div", { key: '2375888a47557b41ea3b3bf8eae1fd3f2a4032bd', class: "textarea-wrapper-inner" }, hAsync("div", { key: 'c5af683527a870bd85256b6de8a7d216283403dd', class: "start-slot-wrapper" }, hAsync("slot", { key: 'd972e5784403c5cc6ed067ae578ce23ff8303e1e', name: "start" })), hAsync("div", { key: '1092067609d912a76a8679767611e4ca3e071c6f', class: "native-wrapper", ref: (el) => (this.textareaWrapper = el) }, hAsync("textarea", Object.assign({ key: 'cd23a4bad4d5b460830340009d24d0618f14fd73', class: "native-textarea", ref: (el) => (this.nativeInput = el), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, minLength: this.minlength, maxLength: this.maxlength, name: this.name, placeholder: this.placeholder || '', readOnly: this.readonly, required: this.required, spellcheck: this.spellcheck, cols: this.cols, rows: this.rows, wrap: this.wrap, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeyDown, "aria-describedby": this.getHintTextID(), "aria-invalid": this.isInvalid ? 'true' : undefined }, this.inheritedAttributes), value)), hAsync("div", { key: 'c91a5456f4490ef8699f2e44b4a6c64f6084f5fd', class: "end-slot-wrapper" }, hAsync("slot", { key: 'b71ba7ba0d74091e81784432dcffa832b66f3f25', name: "end" }))), shouldRenderHighlight && hAsync("div", { key: '757c3287e1cea5ee851227407685a437f8408c54', class: "textarea-highlight" })), this.renderBottomContent()));
35272
+ }) }, hAsync("label", { key: '9de598b95237462bb3bccffaefe83afbb43554b8', class: "textarea-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderLabelContainer(), hAsync("div", { key: 'e33c426c6541d723ccc246bb404c03687726ff83', class: "textarea-wrapper-inner" }, hAsync("div", { key: '521e11af9d54d281b0a2b1c25bcfc6f742c18296', class: "start-slot-wrapper" }, hAsync("slot", { key: '515523f6ca3ce0e5dd08f3275c21a190fb1ca177', name: "start" })), hAsync("div", { key: '916e01e00de8400ae00ef06bc1fb62d8be2eee08', class: "native-wrapper", ref: (el) => (this.textareaWrapper = el) }, hAsync("textarea", Object.assign({ key: '810271e6532d90e27dab1fcb26546113c1ce9cb0', class: "native-textarea", ref: (el) => (this.nativeInput = el), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, minLength: this.minlength, maxLength: this.maxlength, name: this.name, placeholder: this.placeholder || '', readOnly: this.readonly, required: this.required, spellcheck: this.spellcheck, cols: this.cols, rows: this.rows, wrap: this.wrap, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeyDown, "aria-describedby": this.getHintTextID(), "aria-invalid": this.getHintTextID() === this.errorTextId }, this.inheritedAttributes), value)), hAsync("div", { key: '80aca9ea9546dca9d38efd291a6b0be384bb6978', class: "end-slot-wrapper" }, hAsync("slot", { key: '407fab16c66a9f4a542369bfecc0d9afa0065977', name: "end" }))), shouldRenderHighlight && hAsync("div", { key: 'f00523a6698fac8a1996e04303487bef01d10f25', class: "textarea-highlight" })), this.renderBottomContent()));
35338
35273
  }
35339
35274
  get el() { return getElement(this); }
35340
35275
  static get watchers() { return {
@@ -35379,7 +35314,6 @@ class Textarea {
35379
35314
  "labelPlacement": [1, "label-placement"],
35380
35315
  "shape": [1],
35381
35316
  "hasFocus": [32],
35382
- "isInvalid": [32],
35383
35317
  "setFocus": [64],
35384
35318
  "getInputElement": [64]
35385
35319
  },