@ionic/core 8.7.4-dev.11755809082.11a7702b → 8.7.4-dev.11756388042.1a103a79

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 (84) hide show
  1. package/components/ion-datetime.js +4 -3
  2. package/components/ion-input.js +8 -63
  3. package/components/ion-menu.js +5 -2
  4. package/components/ion-textarea.js +7 -62
  5. package/components/overlays.js +18 -109
  6. package/components/picker-column-option.js +3 -3
  7. package/components/picker-column.js +3 -39
  8. package/dist/cjs/index.cjs.js +1 -1
  9. package/dist/cjs/ion-action-sheet.cjs.entry.js +1 -1
  10. package/dist/cjs/ion-alert.cjs.entry.js +1 -1
  11. package/dist/cjs/ion-datetime_3.cjs.entry.js +4 -4
  12. package/dist/cjs/ion-input.cjs.entry.js +8 -62
  13. package/dist/cjs/ion-loading.cjs.entry.js +1 -1
  14. package/dist/cjs/ion-menu_3.cjs.entry.js +6 -3
  15. package/dist/cjs/ion-modal.cjs.entry.js +1 -1
  16. package/dist/cjs/ion-picker-column-option.cjs.entry.js +3 -3
  17. package/dist/cjs/ion-picker-column.cjs.entry.js +3 -39
  18. package/dist/cjs/ion-popover.cjs.entry.js +1 -1
  19. package/dist/cjs/ion-select-modal.cjs.entry.js +1 -1
  20. package/dist/cjs/ion-select_3.cjs.entry.js +1 -1
  21. package/dist/cjs/ion-textarea.cjs.entry.js +7 -61
  22. package/dist/cjs/ion-toast.cjs.entry.js +1 -1
  23. package/dist/cjs/ionic.cjs.js +1 -1
  24. package/dist/cjs/loader.cjs.js +1 -1
  25. package/dist/cjs/{overlays-CglR7j-u.js → overlays-v_jc1Hok.js} +17 -108
  26. package/dist/collection/components/datetime/datetime.js +4 -3
  27. package/dist/collection/components/input/input.js +9 -64
  28. package/dist/collection/components/menu/menu.js +9 -2
  29. package/dist/collection/components/picker-column/picker-column.js +3 -39
  30. package/dist/collection/components/picker-column-option/picker-column-option.ios.css +2 -2
  31. package/dist/collection/components/picker-column-option/picker-column-option.js +1 -1
  32. package/dist/collection/components/picker-column-option/picker-column-option.md.css +2 -2
  33. package/dist/collection/components/textarea/textarea.js +8 -63
  34. package/dist/collection/utils/overlays.js +17 -109
  35. package/dist/docs.json +5 -1
  36. package/dist/esm/index.js +1 -1
  37. package/dist/esm/ion-action-sheet.entry.js +1 -1
  38. package/dist/esm/ion-alert.entry.js +1 -1
  39. package/dist/esm/ion-datetime_3.entry.js +4 -4
  40. package/dist/esm/ion-input.entry.js +8 -62
  41. package/dist/esm/ion-loading.entry.js +1 -1
  42. package/dist/esm/ion-menu_3.entry.js +6 -3
  43. package/dist/esm/ion-modal.entry.js +1 -1
  44. package/dist/esm/ion-picker-column-option.entry.js +3 -3
  45. package/dist/esm/ion-picker-column.entry.js +3 -39
  46. package/dist/esm/ion-popover.entry.js +1 -1
  47. package/dist/esm/ion-select-modal.entry.js +1 -1
  48. package/dist/esm/ion-select_3.entry.js +1 -1
  49. package/dist/esm/ion-textarea.entry.js +7 -61
  50. package/dist/esm/ion-toast.entry.js +1 -1
  51. package/dist/esm/ionic.js +1 -1
  52. package/dist/esm/loader.js +1 -1
  53. package/dist/esm/{overlays-ZX_4-t_r.js → overlays-BJaRj3Rj.js} +18 -109
  54. package/dist/ionic/index.esm.js +1 -1
  55. package/dist/ionic/ionic.esm.js +1 -1
  56. package/dist/ionic/{p-f2884bc2.entry.js → p-095073c6.entry.js} +1 -1
  57. package/dist/ionic/p-1488b7cc.entry.js +4 -0
  58. package/dist/ionic/p-1ab0fc21.entry.js +4 -0
  59. package/dist/ionic/{p-92e8f208.entry.js → p-2060feb1.entry.js} +1 -1
  60. package/dist/ionic/p-22a0f820.entry.js +4 -0
  61. package/dist/ionic/{p-c575e7ce.entry.js → p-5a9be5a3.entry.js} +1 -1
  62. package/dist/ionic/{p-7bac2c5f.entry.js → p-60ff6bf6.entry.js} +1 -1
  63. package/dist/ionic/p-8888efe4.entry.js +4 -0
  64. package/dist/ionic/{p-ab33ef20.entry.js → p-89c2e0a3.entry.js} +1 -1
  65. package/dist/ionic/p-CoDfkBuk.js +4 -0
  66. package/dist/ionic/{p-91d6ccb0.entry.js → p-b17f0554.entry.js} +1 -1
  67. package/dist/ionic/p-b292804d.entry.js +4 -0
  68. package/dist/ionic/p-c5210d3e.entry.js +4 -0
  69. package/dist/ionic/{p-ac434970.entry.js → p-cd93c119.entry.js} +1 -1
  70. package/dist/ionic/p-dc8d0bb9.entry.js +4 -0
  71. package/dist/types/components/input/input.d.ts +0 -9
  72. package/dist/types/components/picker-column/picker-column.d.ts +0 -7
  73. package/dist/types/components/textarea/textarea.d.ts +0 -9
  74. package/hydrate/index.js +46 -248
  75. package/hydrate/index.mjs +46 -248
  76. package/package.json +2 -2
  77. package/dist/ionic/p-1d5b934a.entry.js +0 -4
  78. package/dist/ionic/p-1d65c601.entry.js +0 -4
  79. package/dist/ionic/p-29032e49.entry.js +0 -4
  80. package/dist/ionic/p-33017191.entry.js +0 -4
  81. package/dist/ionic/p-8d96a0cd.entry.js +0 -4
  82. package/dist/ionic/p-982fe1c4.entry.js +0 -4
  83. package/dist/ionic/p-CSwZyt05.js +0 -4
  84. package/dist/ionic/p-f456d176.entry.js +0 -4
@@ -15,7 +15,7 @@ var index$2 = require('./index-DNh170BW.js');
15
15
  var config = require('./config-CKhELRRu.js');
16
16
  var theme = require('./theme-CeDs6Hcv.js');
17
17
  var index$3 = require('./index-D24wggHR.js');
18
- var overlays = require('./overlays-CglR7j-u.js');
18
+ var overlays = require('./overlays-v_jc1Hok.js');
19
19
  require('./index-DkNv4J_i.js');
20
20
  require('./gesture-controller-dtqlP_q4.js');
21
21
  require('./hardware-back-button-BxdNu76F.js');
@@ -7,7 +7,7 @@ var index = require('./index-DNh170BW.js');
7
7
  var buttonActive = require('./button-active-BzZenWWH.js');
8
8
  var helpers = require('./helpers-DgwmcYAu.js');
9
9
  var lockController = require('./lock-controller-aDB9wrEf.js');
10
- var overlays = require('./overlays-CglR7j-u.js');
10
+ var overlays = require('./overlays-v_jc1Hok.js');
11
11
  var theme = require('./theme-CeDs6Hcv.js');
12
12
  var ionicGlobal = require('./ionic-global-UI5YPSi-.js');
13
13
  var animation = require('./animation-ZJ1lAkZD.js');
@@ -8,7 +8,7 @@ var config = require('./config-CKhELRRu.js');
8
8
  var buttonActive = require('./button-active-BzZenWWH.js');
9
9
  var helpers = require('./helpers-DgwmcYAu.js');
10
10
  var lockController = require('./lock-controller-aDB9wrEf.js');
11
- var overlays = require('./overlays-CglR7j-u.js');
11
+ var overlays = require('./overlays-v_jc1Hok.js');
12
12
  var theme = require('./theme-CeDs6Hcv.js');
13
13
  var ionicGlobal = require('./ionic-global-UI5YPSi-.js');
14
14
  var animation = require('./animation-ZJ1lAkZD.js');
@@ -6,13 +6,13 @@
6
6
  var index = require('./index-DNh170BW.js');
7
7
  var focusVisible = require('./focus-visible-CCvKiLh3.js');
8
8
  var helpers = require('./helpers-DgwmcYAu.js');
9
+ var overlays = require('./overlays-v_jc1Hok.js');
9
10
  var dir = require('./dir-Cn0z1rJH.js');
10
11
  var theme = require('./theme-CeDs6Hcv.js');
11
12
  var index$1 = require('./index-DqmRDbxg.js');
12
13
  var ionicGlobal = require('./ionic-global-UI5YPSi-.js');
13
14
  var data = require('./data-DW6ofvJ8.js');
14
15
  var lockController = require('./lock-controller-aDB9wrEf.js');
15
- var overlays = require('./overlays-CglR7j-u.js');
16
16
  var animation = require('./animation-ZJ1lAkZD.js');
17
17
  var haptic = require('./haptic-ClPPQ_PS.js');
18
18
  require('./index-DkNv4J_i.js');
@@ -1301,7 +1301,7 @@ const Datetime = class {
1301
1301
  const renderArray = forcePresentation === 'time-date'
1302
1302
  ? [this.renderTimePickerColumns(forcePresentation), this.renderDatePickerColumns(forcePresentation)]
1303
1303
  : [this.renderDatePickerColumns(forcePresentation), this.renderTimePickerColumns(forcePresentation)];
1304
- return index.h("ion-picker", null, renderArray);
1304
+ return index.h("ion-picker", { class: overlays.FOCUS_TRAP_DISABLE_CLASS }, renderArray);
1305
1305
  }
1306
1306
  renderDatePickerColumns(forcePresentation) {
1307
1307
  return forcePresentation === 'date-time' || forcePresentation === 'time-date'
@@ -1858,7 +1858,7 @@ const Datetime = class {
1858
1858
  const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
1859
1859
  const hasWheelVariant = hasDatePresentation && preferWheel;
1860
1860
  helpers.renderHiddenInput(true, el, name, data.formatValue(value), disabled);
1861
- return (index.h(index.Host, { key: 'f35cf200ff05d33074576e3d2754d3b2a0735b96', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, theme.createColorClasses(color, {
1861
+ return (index.h(index.Host, { key: '57492534800ea059a7c2bbd9f0059cc0b75ae8d2', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, theme.createColorClasses(color, {
1862
1862
  [mode]: true,
1863
1863
  ['datetime-readonly']: readonly,
1864
1864
  ['datetime-disabled']: disabled,
@@ -1868,7 +1868,7 @@ const Datetime = class {
1868
1868
  [`datetime-size-${size}`]: true,
1869
1869
  [`datetime-prefer-wheel`]: hasWheelVariant,
1870
1870
  [`datetime-grid`]: isGridStyle,
1871
- })) }, index.h("div", { key: '859e9354a12bfa58ac3f964c2e66839f17071c00', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
1871
+ })) }, index.h("div", { key: '97dac5e5195635ac0bc5fb472b9d09e5c3c6bbc3', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
1872
1872
  }
1873
1873
  get el() { return index.getElement(this); }
1874
1874
  static get watchers() { return {
@@ -44,10 +44,6 @@ const Input = class {
44
44
  * is applied in both cases.
45
45
  */
46
46
  this.hasFocus = false;
47
- /**
48
- * Track validation state for proper aria-live announcements
49
- */
50
- this.isInvalid = false;
51
47
  /**
52
48
  * Indicates whether and how the text value should be automatically capitalized as it is entered/edited by the user.
53
49
  * Available options: `"off"`, `"none"`, `"on"`, `"sentences"`, `"words"`, `"characters"`.
@@ -133,19 +129,6 @@ const Input = class {
133
129
  }
134
130
  this.didInputClearOnEdit = false;
135
131
  this.ionBlur.emit(ev);
136
- /**
137
- * Check validation state after blur to handle framework-managed classes.
138
- * Frameworks like Angular update classes asynchronously, often using
139
- * requestAnimationFrame or promises. Using setTimeout ensures we check
140
- * after all microtasks and animation frames have completed.
141
- */
142
- setTimeout(() => {
143
- const newIsInvalid = this.checkValidationState();
144
- if (this.isInvalid !== newIsInvalid) {
145
- this.isInvalid = newIsInvalid;
146
- index.forceUpdate(this);
147
- }
148
- }, 100);
149
132
  };
150
133
  this.onFocus = (ev) => {
151
134
  this.hasFocus = true;
@@ -245,42 +228,10 @@ const Input = class {
245
228
  componentWillLoad() {
246
229
  this.inheritedAttributes = Object.assign(Object.assign({}, helpers.inheritAriaAttributes(this.el)), helpers.inheritAttributes(this.el, ['tabindex', 'title', 'data-form-type', 'dir']));
247
230
  }
248
- /**
249
- * Checks if the input is in an invalid state based on validation classes
250
- */
251
- checkValidationState() {
252
- // Check for both Ionic and Angular validation classes on the element itself
253
- // Angular applies ng-touched/ng-invalid directly to the host element with ngModel
254
- const hasIonTouched = this.el.classList.contains('ion-touched');
255
- const hasIonInvalid = this.el.classList.contains('ion-invalid');
256
- const hasNgTouched = this.el.classList.contains('ng-touched');
257
- const hasNgInvalid = this.el.classList.contains('ng-invalid');
258
- // Return true if we have both touched and invalid states from either framework
259
- const isTouched = hasIonTouched || hasNgTouched;
260
- const isInvalid = hasIonInvalid || hasNgInvalid;
261
- return isTouched && isInvalid;
262
- }
263
231
  connectedCallback() {
264
232
  const { el } = this;
265
233
  this.slotMutationController = input_utils.createSlotMutationController(el, ['label', 'start', 'end'], () => index.forceUpdate(this));
266
234
  this.notchController = notchController.createNotchController(el, () => this.notchSpacerEl, () => this.labelSlot);
267
- // Watch for class changes to update validation state
268
- if (typeof MutationObserver !== 'undefined') {
269
- this.validationObserver = new MutationObserver(() => {
270
- const newIsInvalid = this.checkValidationState();
271
- if (this.isInvalid !== newIsInvalid) {
272
- this.isInvalid = newIsInvalid;
273
- // Force a re-render to update aria-describedby immediately
274
- index.forceUpdate(this);
275
- }
276
- });
277
- this.validationObserver.observe(el, {
278
- attributes: true,
279
- attributeFilter: ['class'],
280
- });
281
- }
282
- // Always set initial state
283
- this.isInvalid = this.checkValidationState();
284
235
  this.debounceChanged();
285
236
  {
286
237
  document.dispatchEvent(new CustomEvent('ionInputDidLoad', {
@@ -317,11 +268,6 @@ const Input = class {
317
268
  this.notchController.destroy();
318
269
  this.notchController = undefined;
319
270
  }
320
- // Clean up validation observer to prevent memory leaks
321
- if (this.validationObserver) {
322
- this.validationObserver.disconnect();
323
- this.validationObserver = undefined;
324
- }
325
271
  }
326
272
  /**
327
273
  * Sets focus on the native `input` in `ion-input`. Use this method instead of the global
@@ -423,15 +369,15 @@ const Input = class {
423
369
  * Renders the helper text or error text values
424
370
  */
425
371
  renderHintText() {
426
- const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
372
+ const { helperText, errorText, helperTextId, errorTextId } = this;
427
373
  return [
428
- helperText && (index.h("div", { id: helperTextId, class: "helper-text", "aria-live": "polite" }, helperText)),
429
- errorText && (index.h("div", { id: errorTextId, class: "error-text", "aria-live": "assertive", "aria-atomic": "true", role: "alert", style: { display: isInvalid ? 'block' : 'none' } }, errorText)),
374
+ index.h("div", { id: helperTextId, class: "helper-text" }, helperText),
375
+ index.h("div", { id: errorTextId, class: "error-text" }, errorText),
430
376
  ];
431
377
  }
432
378
  getHintTextID() {
433
- const { isInvalid, helperText, errorText, helperTextId, errorTextId } = this;
434
- if (isInvalid && errorText) {
379
+ const { el, helperText, errorText, helperTextId, errorTextId } = this;
380
+ if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) {
435
381
  return errorTextId;
436
382
  }
437
383
  if (helperText) {
@@ -544,7 +490,7 @@ const Input = class {
544
490
  * TODO(FW-5592): Remove hasStartEndSlots condition
545
491
  */
546
492
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
547
- return (index.h(index.Host, { key: '1a141906096fc637d7de923edf6a9ea3a0168f5f', class: theme.createColorClasses(this.color, {
493
+ return (index.h(index.Host, { key: '41b2526627e7d2773a80f011b123284203a71ca0', class: theme.createColorClasses(this.color, {
548
494
  [mode]: true,
549
495
  'has-value': hasValue,
550
496
  'has-focus': hasFocus,
@@ -555,14 +501,14 @@ const Input = class {
555
501
  'in-item': inItem,
556
502
  'in-item-color': theme.hostContext('ion-item.ion-color', this.el),
557
503
  'input-disabled': disabled,
558
- }) }, index.h("label", { key: '8371432bc0fd37099d3efc50705530965f27b9e1', class: "input-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderLabelContainer(), index.h("div", { key: '3d113da062bddf47b1bc67e67162c11fe4ee7f10', class: "native-wrapper", onClick: this.onLabelClick }, index.h("slot", { key: '3fe52ada4b91ebd21b21b1445b9d4009d47f8386', name: "start" }), index.h("input", Object.assign({ key: 'beda905e9d44797690149407ba814381ffd51d1d', 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 && (index.h("button", { key: 'bc8579a0acb727b348bcf277f296b2dac9cb583d', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
504
+ }) }, index.h("label", { key: '9ab078363e32528102b441ad1791d83f86fdcbdc', class: "input-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderLabelContainer(), index.h("div", { key: 'e34b594980ec62e4c618e827fadf7669a39ad0d8', class: "native-wrapper", onClick: this.onLabelClick }, index.h("slot", { key: '12dc04ead5502e9e5736240e918bf9331bf7b5d9', name: "start" }), index.h("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 && (index.h("button", { key: 'f79f68cabcd4ea99419331174a377827db0c0741', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
559
505
  /**
560
506
  * This prevents mobile browsers from
561
507
  * blurring the input when the clear
562
508
  * button is activated.
563
509
  */
564
510
  ev.preventDefault();
565
- }, onClick: this.clearTextInput }, index.h("ion-icon", { key: '41a64ec6fce010eb225637998d93abd859a62be7', "aria-hidden": "true", icon: clearIconData }))), index.h("slot", { key: '9a7e6eba584748fc037aa1694d7e6e399de8b20b', name: "end" })), shouldRenderHighlight && index.h("div", { key: 'b828e6dc43b50f46727dda196de7ad2fecc3ef30', class: "input-highlight" })), this.renderBottomContent()));
511
+ }, onClick: this.clearTextInput }, index.h("ion-icon", { key: '237ec07ec2e10f08818a332bb596578c2c49f770', "aria-hidden": "true", icon: clearIconData }))), index.h("slot", { key: '1f0a3624aa3e8dc3c307a6762230ab698768a5e5', name: "end" })), shouldRenderHighlight && index.h("div", { key: '8a8cbb82695a722a0010b53dd0b1f1f97534a20b', class: "input-highlight" })), this.renderBottomContent()));
566
512
  }
567
513
  get el() { return index.getElement(this); }
568
514
  static get watchers() { return {
@@ -7,7 +7,7 @@ var index = require('./index-DNh170BW.js');
7
7
  var config = require('./config-CKhELRRu.js');
8
8
  var helpers = require('./helpers-DgwmcYAu.js');
9
9
  var lockController = require('./lock-controller-aDB9wrEf.js');
10
- var overlays = require('./overlays-CglR7j-u.js');
10
+ var overlays = require('./overlays-v_jc1Hok.js');
11
11
  var theme = require('./theme-CeDs6Hcv.js');
12
12
  var ionicGlobal = require('./ionic-global-UI5YPSi-.js');
13
13
  var animation = require('./animation-ZJ1lAkZD.js');
@@ -5,7 +5,7 @@
5
5
 
6
6
  var index = require('./index-DNh170BW.js');
7
7
  var cubicBezier = require('./cubic-bezier-DAjy1V-e.js');
8
- var overlays = require('./overlays-CglR7j-u.js');
8
+ var overlays = require('./overlays-v_jc1Hok.js');
9
9
  var gestureController = require('./gesture-controller-dtqlP_q4.js');
10
10
  var hardwareBackButton = require('./hardware-back-button-BxdNu76F.js');
11
11
  var helpers = require('./helpers-DgwmcYAu.js');
@@ -299,6 +299,9 @@ const Menu = class {
299
299
  * @param role The role of the element that is closing the menu.
300
300
  */
301
301
  setOpen(shouldOpen, animated = true, role) {
302
+ var _a;
303
+ // Blur the active element to prevent it from being kept focused inside an element that will be set with aria-hidden="true"
304
+ (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.blur();
302
305
  return index$1.menuController._setOpen(this, shouldOpen, animated, role);
303
306
  }
304
307
  trapKeyboardFocus(ev, doc) {
@@ -661,14 +664,14 @@ const Menu = class {
661
664
  * the ionBackButton listener in the menu controller
662
665
  * will handle closing the menu when Escape is pressed.
663
666
  */
664
- return (index.h(index.Host, { key: 'a5c75aa40a34530b56ee3b98d706a5ac5ae300de', onKeyDown: hardwareBackButton.shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
667
+ return (index.h(index.Host, { key: '70a427f3414a476414c3386efe6c8723fd37eccf', onKeyDown: hardwareBackButton.shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
665
668
  [mode]: true,
666
669
  [`menu-type-${type}`]: true,
667
670
  'menu-enabled': !disabled,
668
671
  [`menu-side-${side}`]: true,
669
672
  'menu-pane-visible': isPaneVisible,
670
673
  'split-pane-side': theme.hostContext('ion-split-pane', el),
671
- } }, index.h("div", { key: '3f5f70acd4d3ed6bb445122f4f01d73db738a75f', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, index.h("slot", { key: '3161326c9330e7f7441299c428b87a91b31a83e9' })), index.h("ion-backdrop", { key: '917b50f38489bdf03d0c642af8b4e4e172c7dc4c', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
674
+ } }, index.h("div", { key: '83af04e5a47d5a92caafaf06088a7114ae61984b', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, index.h("slot", { key: '7b35048642864bd0f30de9f6b61c949c1b601692' })), index.h("ion-backdrop", { key: '347af516c7970d80dd11c6d1ed61e9a040ceb5fb', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
672
675
  }
673
676
  get el() { return index.getElement(this); }
674
677
  static get watchers() { return {
@@ -9,7 +9,7 @@ var frameworkDelegate = require('./framework-delegate-WkyjrnCx.js');
9
9
  var helpers = require('./helpers-DgwmcYAu.js');
10
10
  var lockController = require('./lock-controller-aDB9wrEf.js');
11
11
  var capacitor = require('./capacitor-DmA66EwP.js');
12
- var overlays = require('./overlays-CglR7j-u.js');
12
+ var overlays = require('./overlays-v_jc1Hok.js');
13
13
  var theme = require('./theme-CeDs6Hcv.js');
14
14
  var index$4 = require('./index-BzEyuIww.js');
15
15
  var ionicGlobal = require('./ionic-global-UI5YPSi-.js');
@@ -8,9 +8,9 @@ var helpers = require('./helpers-DgwmcYAu.js');
8
8
  var theme = require('./theme-CeDs6Hcv.js');
9
9
  var ionicGlobal = require('./ionic-global-UI5YPSi-.js');
10
10
 
11
- 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}";
11
+ 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}";
12
12
 
13
- 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)}";
13
+ 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)}";
14
14
 
15
15
  const PickerColumnOption = class {
16
16
  constructor(hostRef) {
@@ -102,7 +102,7 @@ const PickerColumnOption = class {
102
102
  return (index.h(index.Host, { key: 'f816729941aabcb31ddfdce3ffe2e2139030d715', class: theme.createColorClasses(color, {
103
103
  [mode]: true,
104
104
  ['option-disabled']: disabled,
105
- }) }, index.h("button", { key: '48dff7833bb60fc8331cd353a0885e6affa683d1', tabindex: "-1", "aria-label": ariaLabel, disabled: disabled, onClick: () => this.onClick() }, index.h("slot", { key: 'f9224d0e7b7aa6c05b29abfdcfe0f30ad6ee3141' }))));
105
+ }) }, index.h("div", { key: 'd942de84fd14d7dc06b1e5cf4f7920d1dc3c6371', class: 'picker-column-option-button', role: "button", "aria-label": ariaLabel, onClick: () => this.onClick() }, index.h("slot", { key: 'b0df5717b42209e649097209a01476e1a66f5c5c' }))));
106
106
  }
107
107
  get el() { return index.getElement(this); }
108
108
  static get watchers() { return {
@@ -410,23 +410,6 @@ const PickerColumn = class {
410
410
  var _a;
411
411
  return el ? (_a = el.getAttribute('aria-label')) !== null && _a !== void 0 ? _a : el.innerText : '';
412
412
  };
413
- /**
414
- * Render an element that overlays the column. This element is for assistive
415
- * tech to allow users to navigate the column up/down. This element should receive
416
- * focus as it listens for synthesized keyboard events as required by the
417
- * slider role: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/slider_role
418
- */
419
- this.renderAssistiveFocusable = () => {
420
- const { activeItem } = this;
421
- const valueText = this.getOptionValueText(activeItem);
422
- /**
423
- * When using the picker, the valuetext provides important context that valuenow
424
- * does not. Additionally, using non-zero valuemin/valuemax values can cause
425
- * WebKit to incorrectly announce numeric valuetext values (such as a year
426
- * like "2024") as percentages: https://bugs.webkit.org/show_bug.cgi?id=273126
427
- */
428
- return (index.h("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) }));
429
- };
430
413
  }
431
414
  ariaLabelChanged(newValue) {
432
415
  this.ariaLabel = newValue;
@@ -567,33 +550,14 @@ const PickerColumn = class {
567
550
  render() {
568
551
  const { color, disabled, isActive, numericInput } = this;
569
552
  const mode = ionicGlobal.getIonMode(this);
570
- return (index.h(index.Host, { key: 'ea0280355b2f87895bf7dddd289ccf473aa759f3', class: theme.createColorClasses(color, {
553
+ return (index.h(index.Host, { key: 'db903fd415f8a2d91994dececca481c1af8ba6a9', class: theme.createColorClasses(color, {
571
554
  [mode]: true,
572
555
  ['picker-column-active']: isActive,
573
556
  ['picker-column-numeric-input']: numericInput,
574
557
  ['picker-column-disabled']: disabled,
575
- }) }, this.renderAssistiveFocusable(), index.h("slot", { key: '482992131cdeb85b1f61430d7fe1322a16345769', name: "prefix" }), index.h("div", { key: '43f7f80d621d411ef366b3ca1396299e8c9a0c97', "aria-hidden": "true", class: "picker-opts", ref: (el) => {
558
+ }) }, index.h("slot", { key: '02ce9e1dd7df91afcd50b06416552bcffb5dec98', name: "prefix" }), index.h("div", { key: '6dfd7d2429bec19244a6b1afb4448121963a031b', class: "picker-opts", ref: (el) => {
576
559
  this.scrollEl = el;
577
- },
578
- /**
579
- * When an element has an overlay scroll style and
580
- * a fixed height, Firefox will focus the scrollable
581
- * container if the content exceeds the container's
582
- * dimensions.
583
- *
584
- * This causes keyboard navigation to focus to this
585
- * element instead of going to the next element in
586
- * the tab order.
587
- *
588
- * The desired behavior is for the user to be able to
589
- * focus the assistive focusable element and tab to
590
- * the next element in the tab order. Instead of tabbing
591
- * to this element.
592
- *
593
- * To prevent this, we set the tabIndex to -1. This
594
- * will match the behavior of the other browsers.
595
- */
596
- tabIndex: -1 }, index.h("div", { key: '13a9ee686132af32240710730765de4c0003a9e8', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), index.h("div", { key: 'dbccba4920833cfcebe9b0fc763458ec3053705a', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), index.h("div", { key: '682b43f83a5ea2e46067457f3af118535e111edb', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), index.h("slot", { key: 'd27e1e1dc0504b2f4627a29912a05bb91e8e413a' }), index.h("div", { key: '61c948dbb9cf7469aed3018542bc0954211585ba', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), index.h("div", { key: 'cf46c277fbee65e35ff44ce0d53ce12aa9cbf9db', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), index.h("div", { key: 'bbc0e2d491d3f836ab849493ade2f7fa6ad9244e', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0")), index.h("slot", { key: 'd25cbbe14b2914fe7b878d43b4e3f4a8c8177d24', name: "suffix" })));
560
+ }, 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) }, index.h("div", { key: 'e30ce0b9cefbfe4d4441fa33acf595da31855c3f', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), index.h("div", { key: '8be2bd293c12c6ba720d9b31d0d561a96f42e97d', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), index.h("div", { key: '8afdcddddabbf646fbb55cb0ba4448309a2c1dd9', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), index.h("slot", { key: '6aa0dacc34d6848575ad5b122b9046982308ca43' }), index.h("div", { key: '92ec8a357414c1b779b11d1dd18fb87a7ee63982', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), index.h("div", { key: 'b89457cb74b5907c25594ff6720ac54ca537e933', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), index.h("div", { key: '5bbc92e6bc24de08e39873bf08c5b668373ac0f8', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0")), index.h("slot", { key: 'd7bf2b519214f0f3576a4ca79844ad97827dd97f', name: "suffix" })));
597
561
  }
598
562
  get el() { return index.getElement(this); }
599
563
  static get watchers() { return {
@@ -4,7 +4,7 @@
4
4
  'use strict';
5
5
 
6
6
  var index = require('./index-DNh170BW.js');
7
- var overlays = require('./overlays-CglR7j-u.js');
7
+ var overlays = require('./overlays-v_jc1Hok.js');
8
8
  var frameworkDelegate = require('./framework-delegate-WkyjrnCx.js');
9
9
  var helpers = require('./helpers-DgwmcYAu.js');
10
10
  var lockController = require('./lock-controller-aDB9wrEf.js');
@@ -5,7 +5,7 @@
5
5
 
6
6
  var index = require('./index-DNh170BW.js');
7
7
  var ionicGlobal = require('./ionic-global-UI5YPSi-.js');
8
- var overlays = require('./overlays-CglR7j-u.js');
8
+ var overlays = require('./overlays-v_jc1Hok.js');
9
9
  var theme = require('./theme-CeDs6Hcv.js');
10
10
  require('./index-DkNv4J_i.js');
11
11
  require('./helpers-DgwmcYAu.js');
@@ -7,7 +7,7 @@ var index = require('./index-DNh170BW.js');
7
7
  var notchController = require('./notch-controller-Bf5Rr4R5.js');
8
8
  var compareWithUtils = require('./compare-with-utils-DSicavqM.js');
9
9
  var helpers = require('./helpers-DgwmcYAu.js');
10
- var overlays = require('./overlays-CglR7j-u.js');
10
+ var overlays = require('./overlays-v_jc1Hok.js');
11
11
  var dir = require('./dir-Cn0z1rJH.js');
12
12
  var theme = require('./theme-CeDs6Hcv.js');
13
13
  var watchOptions = require('./watch-options-CviOsrTS.js');
@@ -42,10 +42,6 @@ const Textarea = class {
42
42
  * is applied in both cases.
43
43
  */
44
44
  this.hasFocus = false;
45
- /**
46
- * Track validation state for proper aria-live announcements
47
- */
48
- this.isInvalid = false;
49
45
  /**
50
46
  * Indicates whether and how the text value should be automatically capitalized as it is entered/edited by the user.
51
47
  * Available options: `"off"`, `"none"`, `"on"`, `"sentences"`, `"words"`, `"characters"`.
@@ -135,19 +131,6 @@ const Textarea = class {
135
131
  }
136
132
  this.didTextareaClearOnEdit = false;
137
133
  this.ionBlur.emit(ev);
138
- /**
139
- * Check validation state after blur to handle framework-managed classes.
140
- * Frameworks like Angular update classes asynchronously, often using
141
- * requestAnimationFrame or promises. Using setTimeout ensures we check
142
- * after all microtasks and animation frames have completed.
143
- */
144
- setTimeout(() => {
145
- const newIsInvalid = this.checkValidationState();
146
- if (this.isInvalid !== newIsInvalid) {
147
- this.isInvalid = newIsInvalid;
148
- index.forceUpdate(this);
149
- }
150
- }, 100);
151
134
  };
152
135
  this.onKeyDown = (ev) => {
153
136
  this.checkClearOnEdit(ev);
@@ -205,42 +188,10 @@ const Textarea = class {
205
188
  this.el.click();
206
189
  }
207
190
  }
208
- /**
209
- * Checks if the textarea is in an invalid state based on validation classes
210
- */
211
- checkValidationState() {
212
- // Check for both Ionic and Angular validation classes on the element itself
213
- // Angular applies ng-touched/ng-invalid directly to the host element with ngModel
214
- const hasIonTouched = this.el.classList.contains('ion-touched');
215
- const hasIonInvalid = this.el.classList.contains('ion-invalid');
216
- const hasNgTouched = this.el.classList.contains('ng-touched');
217
- const hasNgInvalid = this.el.classList.contains('ng-invalid');
218
- // Return true if we have both touched and invalid states from either framework
219
- const isTouched = hasIonTouched || hasNgTouched;
220
- const isInvalid = hasIonInvalid || hasNgInvalid;
221
- return isTouched && isInvalid;
222
- }
223
191
  connectedCallback() {
224
192
  const { el } = this;
225
193
  this.slotMutationController = input_utils.createSlotMutationController(el, ['label', 'start', 'end'], () => index.forceUpdate(this));
226
194
  this.notchController = notchController.createNotchController(el, () => this.notchSpacerEl, () => this.labelSlot);
227
- // Watch for class changes to update validation state
228
- if (typeof MutationObserver !== 'undefined') {
229
- this.validationObserver = new MutationObserver(() => {
230
- const newIsInvalid = this.checkValidationState();
231
- if (this.isInvalid !== newIsInvalid) {
232
- this.isInvalid = newIsInvalid;
233
- // Force a re-render to update aria-describedby immediately
234
- index.forceUpdate(this);
235
- }
236
- });
237
- this.validationObserver.observe(el, {
238
- attributes: true,
239
- attributeFilter: ['class'],
240
- });
241
- }
242
- // Always set initial state
243
- this.isInvalid = this.checkValidationState();
244
195
  this.debounceChanged();
245
196
  {
246
197
  document.dispatchEvent(new CustomEvent('ionInputDidLoad', {
@@ -262,11 +213,6 @@ const Textarea = class {
262
213
  this.notchController.destroy();
263
214
  this.notchController = undefined;
264
215
  }
265
- // Clean up validation observer to prevent memory leaks
266
- if (this.validationObserver) {
267
- this.validationObserver.disconnect();
268
- this.validationObserver = undefined;
269
- }
270
216
  }
271
217
  componentWillLoad() {
272
218
  this.inheritedAttributes = Object.assign(Object.assign({}, helpers.inheritAriaAttributes(this.el)), helpers.inheritAttributes(this.el, ['data-form-type', 'title', 'tabindex', 'dir']));
@@ -437,15 +383,15 @@ const Textarea = class {
437
383
  * Renders the helper text or error text values
438
384
  */
439
385
  renderHintText() {
440
- const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
386
+ const { helperText, errorText, helperTextId, errorTextId } = this;
441
387
  return [
442
- helperText && (index.h("div", { id: helperTextId, class: "helper-text", "aria-live": "polite" }, helperText)),
443
- errorText && (index.h("div", { id: errorTextId, class: "error-text", "aria-live": "assertive", "aria-atomic": "true", role: "alert", style: { display: isInvalid ? 'block' : 'none' } }, errorText)),
388
+ index.h("div", { id: helperTextId, class: "helper-text" }, helperText),
389
+ index.h("div", { id: errorTextId, class: "error-text" }, errorText),
444
390
  ];
445
391
  }
446
392
  getHintTextID() {
447
- const { isInvalid, helperText, errorText, helperTextId, errorTextId } = this;
448
- if (isInvalid && errorText) {
393
+ const { el, helperText, errorText, helperTextId, errorTextId } = this;
394
+ if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) {
449
395
  return errorTextId;
450
396
  }
451
397
  if (helperText) {
@@ -504,7 +450,7 @@ const Textarea = class {
504
450
  * TODO(FW-5592): Remove hasStartEndSlots condition
505
451
  */
506
452
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
507
- return (index.h(index.Host, { key: '803c7648de15b8569c3df01692548018cc660510', class: theme.createColorClasses(this.color, {
453
+ return (index.h(index.Host, { key: 'd9f2ede0107987fc42c99e310cd2336bad5a5755', class: theme.createColorClasses(this.color, {
508
454
  [mode]: true,
509
455
  'has-value': hasValue,
510
456
  'has-focus': hasFocus,
@@ -513,7 +459,7 @@ const Textarea = class {
513
459
  [`textarea-shape-${shape}`]: shape !== undefined,
514
460
  [`textarea-label-placement-${labelPlacement}`]: true,
515
461
  'textarea-disabled': disabled,
516
- }) }, index.h("label", { key: '0e3a4e5fc809437abc6780eb7f99a0c770bb9f94', class: "textarea-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderLabelContainer(), index.h("div", { key: 'ff8d71e2d53daf4999338232d3b0a597627a3276', class: "textarea-wrapper-inner" }, index.h("div", { key: '313f5a8dc8b62e8ae6a0638a7e201b2594c180eb', class: "start-slot-wrapper" }, index.h("slot", { key: '32db088d41398be935f7060138e4d80a832fea85', name: "start" })), index.h("div", { key: '24b63ff40ffcae8816f24d9c8a6ec2e7848e0e0b', class: "native-wrapper", ref: (el) => (this.textareaWrapper = el) }, index.h("textarea", Object.assign({ key: '2a4f918351f87d444d8922254eefa0941a6ca238', 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)), index.h("div", { key: '2c32636d2d13560de0a54507e1668eb9f4bcc2cf', class: "end-slot-wrapper" }, index.h("slot", { key: 'ccc3549246fd9d2e309958767a7a24e1be8545fd', name: "end" }))), shouldRenderHighlight && index.h("div", { key: 'f4719399ec530ce295b19817688b8d39d84b6b09', class: "textarea-highlight" })), this.renderBottomContent()));
462
+ }) }, index.h("label", { key: '9de598b95237462bb3bccffaefe83afbb43554b8', class: "textarea-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderLabelContainer(), index.h("div", { key: 'e33c426c6541d723ccc246bb404c03687726ff83', class: "textarea-wrapper-inner" }, index.h("div", { key: '521e11af9d54d281b0a2b1c25bcfc6f742c18296', class: "start-slot-wrapper" }, index.h("slot", { key: '515523f6ca3ce0e5dd08f3275c21a190fb1ca177', name: "start" })), index.h("div", { key: '916e01e00de8400ae00ef06bc1fb62d8be2eee08', class: "native-wrapper", ref: (el) => (this.textareaWrapper = el) }, index.h("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)), index.h("div", { key: '80aca9ea9546dca9d38efd291a6b0be384bb6978', class: "end-slot-wrapper" }, index.h("slot", { key: '407fab16c66a9f4a542369bfecc0d9afa0065977', name: "end" }))), shouldRenderHighlight && index.h("div", { key: 'f00523a6698fac8a1996e04303487bef01d10f25', class: "textarea-highlight" })), this.renderBottomContent()));
517
463
  }
518
464
  get el() { return index.getElement(this); }
519
465
  static get watchers() { return {
@@ -7,7 +7,7 @@ var index$1 = require('./index-DNh170BW.js');
7
7
  var config = require('./config-CKhELRRu.js');
8
8
  var helpers = require('./helpers-DgwmcYAu.js');
9
9
  var lockController = require('./lock-controller-aDB9wrEf.js');
10
- var overlays = require('./overlays-CglR7j-u.js');
10
+ var overlays = require('./overlays-v_jc1Hok.js');
11
11
  var theme = require('./theme-CeDs6Hcv.js');
12
12
  var ionicGlobal = require('./ionic-global-UI5YPSi-.js');
13
13
  var animation = require('./animation-ZJ1lAkZD.js');