@ionic/core 8.3.4-dev.11729609828.1dc55ac6 → 8.3.4-dev.11729642487.1f5bd24e

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 (83) hide show
  1. package/components/backdrop.js +1 -1
  2. package/components/ion-input.js +4 -21
  3. package/components/overlays.js +10 -1
  4. package/dist/cjs/index.cjs.js +1 -1
  5. package/dist/cjs/ion-action-sheet.cjs.entry.js +1 -1
  6. package/dist/cjs/ion-alert.cjs.entry.js +1 -1
  7. package/dist/cjs/ion-backdrop.cjs.entry.js +1 -1
  8. package/dist/cjs/ion-datetime_3.cjs.entry.js +1 -1
  9. package/dist/cjs/ion-input.cjs.entry.js +4 -21
  10. package/dist/cjs/ion-loading.cjs.entry.js +1 -1
  11. package/dist/cjs/ion-menu_3.cjs.entry.js +1 -1
  12. package/dist/cjs/ion-modal.cjs.entry.js +1 -1
  13. package/dist/cjs/ion-popover.cjs.entry.js +1 -1
  14. package/dist/cjs/ion-select_3.cjs.entry.js +1 -1
  15. package/dist/cjs/ion-toast.cjs.entry.js +1 -1
  16. package/dist/cjs/{overlays-0123d7d4.js → overlays-32de87c4.js} +10 -1
  17. package/dist/collection/components/backdrop/backdrop.js +1 -1
  18. package/dist/collection/components/input/input.js +4 -21
  19. package/dist/collection/utils/overlays.js +10 -1
  20. package/dist/docs.json +1 -1
  21. package/dist/esm/index.js +1 -1
  22. package/dist/esm/ion-action-sheet.entry.js +1 -1
  23. package/dist/esm/ion-alert.entry.js +1 -1
  24. package/dist/esm/ion-backdrop.entry.js +1 -1
  25. package/dist/esm/ion-datetime_3.entry.js +1 -1
  26. package/dist/esm/ion-input.entry.js +4 -21
  27. package/dist/esm/ion-loading.entry.js +1 -1
  28. package/dist/esm/ion-menu_3.entry.js +1 -1
  29. package/dist/esm/ion-modal.entry.js +1 -1
  30. package/dist/esm/ion-popover.entry.js +1 -1
  31. package/dist/esm/ion-select_3.entry.js +1 -1
  32. package/dist/esm/ion-toast.entry.js +1 -1
  33. package/dist/esm/{overlays-9c75ec54.js → overlays-0a2b29bd.js} +10 -1
  34. package/dist/esm-es5/index.js +1 -1
  35. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  36. package/dist/esm-es5/ion-alert.entry.js +1 -1
  37. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  38. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  39. package/dist/esm-es5/ion-input.entry.js +1 -1
  40. package/dist/esm-es5/ion-loading.entry.js +1 -1
  41. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  42. package/dist/esm-es5/ion-modal.entry.js +1 -1
  43. package/dist/esm-es5/ion-popover.entry.js +1 -1
  44. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  45. package/dist/esm-es5/ion-toast.entry.js +1 -1
  46. package/dist/esm-es5/overlays-0a2b29bd.js +4 -0
  47. package/dist/ionic/index.esm.js +1 -1
  48. package/dist/ionic/ionic.esm.js +1 -1
  49. package/dist/ionic/p-0241f63d.entry.js +4 -0
  50. package/dist/ionic/{p-cff5585e.system.entry.js → p-03f8812e.system.entry.js} +1 -1
  51. package/dist/ionic/{p-8ed31163.system.entry.js → p-2c039cb5.system.entry.js} +1 -1
  52. package/dist/ionic/{p-9cc3bcc5.system.entry.js → p-2f537637.system.entry.js} +1 -1
  53. package/dist/ionic/{p-f50ae0d5.system.entry.js → p-31505575.system.entry.js} +1 -1
  54. package/dist/ionic/p-322c5fb4.system.js +1 -1
  55. package/dist/ionic/p-325a45ae.js +4 -0
  56. package/dist/ionic/{p-5e66bcf2.entry.js → p-43c5fdf3.entry.js} +1 -1
  57. package/dist/ionic/{p-9fef1364.entry.js → p-4a7b057b.entry.js} +1 -1
  58. package/dist/ionic/{p-5c8eb6c7.system.entry.js → p-4b0fedb7.system.entry.js} +1 -1
  59. package/dist/ionic/{p-772dacba.system.entry.js → p-53add985.system.entry.js} +1 -1
  60. package/dist/ionic/{p-22c020db.system.entry.js → p-5e658f0a.system.entry.js} +1 -1
  61. package/dist/ionic/p-60cc7986.entry.js +4 -0
  62. package/dist/ionic/{p-a72fb8a1.system.entry.js → p-6ebfce44.system.entry.js} +1 -1
  63. package/dist/ionic/{p-a4d51b8d.system.js → p-776761d3.system.js} +1 -1
  64. package/dist/ionic/{p-2b7c93b4.entry.js → p-7cdf40c8.entry.js} +1 -1
  65. package/dist/ionic/{p-a41699db.entry.js → p-7e63d17a.entry.js} +1 -1
  66. package/dist/ionic/{p-7c50965e.entry.js → p-8087fa74.entry.js} +1 -1
  67. package/dist/ionic/{p-98871496.system.js → p-96f273ae.system.js} +1 -1
  68. package/dist/ionic/{p-b0568945.system.entry.js → p-b8f65a4b.system.entry.js} +1 -1
  69. package/dist/ionic/{p-0fa0c92b.entry.js → p-b9734222.entry.js} +1 -1
  70. package/dist/ionic/{p-9c23044d.entry.js → p-bef16705.entry.js} +1 -1
  71. package/dist/ionic/p-bfa2e81c.entry.js +4 -0
  72. package/dist/ionic/{p-ecb57d24.system.entry.js → p-c1d2cc3e.system.entry.js} +1 -1
  73. package/dist/ionic/{p-100b83fd.system.entry.js → p-d0b47384.system.entry.js} +1 -1
  74. package/dist/ionic/{p-d77e12ca.entry.js → p-f5455629.entry.js} +1 -1
  75. package/dist/types/components/input/input.d.ts +0 -1
  76. package/hydrate/index.js +15 -23
  77. package/hydrate/index.mjs +15 -23
  78. package/package.json +1 -1
  79. package/dist/esm-es5/overlays-9c75ec54.js +0 -4
  80. package/dist/ionic/p-a440397c.js +0 -4
  81. package/dist/ionic/p-a4aff4e3.entry.js +0 -4
  82. package/dist/ionic/p-ab8a2ff1.entry.js +0 -4
  83. package/dist/ionic/p-b4c950f8.entry.js +0 -4
@@ -34,7 +34,7 @@ const Backdrop = /*@__PURE__*/ proxyCustomElement(class Backdrop extends HTMLEle
34
34
  }
35
35
  render() {
36
36
  const mode = getIonMode(this);
37
- return (h(Host, { key: 'c803b4302c8e722064feb03dafe3cb6e190b4f2b', tabindex: "-1", "aria-hidden": "true", class: {
37
+ return (h(Host, { key: 'fe191068e2aaadfdbe7a463c08d227a1b36d7a98', "aria-hidden": "true", class: {
38
38
  [mode]: true,
39
39
  'backdrop-hide': !this.visible,
40
40
  'backdrop-no-tappable': !this.tappable,
@@ -298,20 +298,7 @@ const Input = /*@__PURE__*/ proxyCustomElement(class Input extends HTMLElement {
298
298
  */
299
299
  renderHintText() {
300
300
  const { helperText, errorText } = this;
301
- return [
302
- h("div", { id: HELPER_TEXT_ID, class: "helper-text" }, helperText),
303
- h("div", { id: ERROR_TEXT_ID, class: "error-text" }, errorText),
304
- ];
305
- }
306
- getHintTextID() {
307
- const { el, helperText, errorText } = this;
308
- if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) {
309
- return ERROR_TEXT_ID;
310
- }
311
- if (helperText) {
312
- return HELPER_TEXT_ID;
313
- }
314
- return undefined;
301
+ return [h("div", { class: "helper-text" }, helperText), h("div", { class: "error-text" }, errorText)];
315
302
  }
316
303
  renderCounter() {
317
304
  const { counter, maxlength, counterFormatter, value } = this;
@@ -400,8 +387,6 @@ const Input = /*@__PURE__*/ proxyCustomElement(class Input extends HTMLElement {
400
387
  const clearIconData = clearInputIcon !== null && clearInputIcon !== void 0 ? clearInputIcon : defaultClearIcon;
401
388
  const hasValue = this.hasValue();
402
389
  const hasStartEndSlots = el.querySelector('[slot="start"], [slot="end"]') !== null;
403
- console.log('el', this.el);
404
- console.log('id', this.getHintTextID());
405
390
  /**
406
391
  * If the label is stacked, it should always sit above the input.
407
392
  * For floating labels, the label should move above the input if
@@ -420,7 +405,7 @@ const Input = /*@__PURE__*/ proxyCustomElement(class Input extends HTMLElement {
420
405
  * TODO(FW-5592): Remove hasStartEndSlots condition
421
406
  */
422
407
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
423
- return (h(Host, { key: '6ea1ddbc1c13e2e93686135ee3c1d87c21839ea4', class: createColorClasses(this.color, {
408
+ return (h(Host, { key: '907ce98a82b5cfae5a08504cd79e00a2330b7444', class: createColorClasses(this.color, {
424
409
  [mode]: true,
425
410
  'has-value': hasValue,
426
411
  'has-focus': hasFocus,
@@ -431,7 +416,7 @@ const Input = /*@__PURE__*/ proxyCustomElement(class Input extends HTMLElement {
431
416
  'in-item': inItem,
432
417
  'in-item-color': hostContext('ion-item.ion-color', this.el),
433
418
  'input-disabled': disabled,
434
- }) }, h("label", { key: '37c80eff5361d5d8d14fa59fcab66a2f38d85fd2', class: "input-wrapper", htmlFor: inputId }, this.renderLabelContainer(), h("div", { key: '1bf4e5997beab1c7611d208465d7bec9da62fb54', class: "native-wrapper" }, h("slot", { key: '3b3eec55351462d72f04ab6b5b69f30bbe12b79f', name: "start" }), h("input", Object.assign({ key: '30673d8d272d0c21d2c3996608973c3e740433cd', 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() === ERROR_TEXT_ID }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (h("button", { key: '6414d510d72780262baceba2bb2a8c9fa1a48f2b', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
419
+ }) }, h("label", { key: '59d5bb45d2a5b828bba0ed8687a632a551e2f4d8', class: "input-wrapper", htmlFor: inputId }, this.renderLabelContainer(), h("div", { key: 'f93f129d08246d0e9a601c100d718534d6403853', class: "native-wrapper" }, h("slot", { key: '54eeb1a6bace662b7eb0d7e27180ea3d7e3a3729', name: "start" }), h("input", Object.assign({ key: 'b3e0be55bc1a4a539ae3b0fdcf7fc078723cca16', 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 }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (h("button", { key: '5f6373504a6d0d074bfbf875c794d45ea2748175', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
435
420
  /**
436
421
  * This prevents mobile browsers from
437
422
  * blurring the input when the clear
@@ -446,7 +431,7 @@ const Input = /*@__PURE__*/ proxyCustomElement(class Input extends HTMLElement {
446
431
  * for screen readers as it means users would be unable to swipe past the clear button.
447
432
  */
448
433
  ev.stopPropagation();
449
- }, onClick: this.clearTextInput }, h("ion-icon", { key: '517f2c7cd07fb22996ca2f63838de55346314993', "aria-hidden": "true", icon: clearIconData }))), h("slot", { key: 'ea2f1a12357da90098695c46cbc21d7d33923f9e', name: "end" })), shouldRenderHighlight && h("div", { key: '4a117a1ed80d6ea8e2a42a958509284cdf8b306f', class: "input-highlight" })), this.renderBottomContent()));
434
+ }, onClick: this.clearTextInput }, h("ion-icon", { key: '230d77973aa83458ceb32bf52e3abe9bc322cfe6', "aria-hidden": "true", icon: clearIconData }))), h("slot", { key: '9d69ac6e8a3c4b2b303dba2478f82695d5755ed2', name: "end" })), shouldRenderHighlight && h("div", { key: 'ac61f16237ce731e0745ab72d0fc3f066252464a', class: "input-highlight" })), this.renderBottomContent()));
450
435
  }
451
436
  get el() { return this; }
452
437
  static get watchers() { return {
@@ -502,8 +487,6 @@ const Input = /*@__PURE__*/ proxyCustomElement(class Input extends HTMLElement {
502
487
  "value": ["valueChanged"]
503
488
  }]);
504
489
  let inputIds = 0;
505
- const HELPER_TEXT_ID = `${'helper-text-' + inputIds}`;
506
- const ERROR_TEXT_ID = `${'error-text-' + inputIds}`;
507
490
  function defineCustomElement$1() {
508
491
  if (typeof customElements === "undefined") {
509
492
  return;
@@ -500,7 +500,16 @@ const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts)
500
500
  if (overlay.presented) {
501
501
  return;
502
502
  }
503
- setRootAriaHidden(true);
503
+ /**
504
+ * Due to accessibility guidelines, toasts do not have
505
+ * focus traps.
506
+ *
507
+ * All other overlays should have focus traps to prevent
508
+ * the keyboard focus from leaving the overlay.
509
+ */
510
+ if (overlay.el.tagName !== 'ION-TOAST') {
511
+ setRootAriaHidden(true);
512
+ }
504
513
  document.body.classList.add(BACKDROP_NO_SCROLL);
505
514
  hideOverlaysFromScreenReaders(overlay.el);
506
515
  overlay.presented = true;
@@ -16,7 +16,7 @@ const helpers = require('./helpers-afaa9001.js');
16
16
  const config = require('./config-4f60b98a.js');
17
17
  const theme = require('./theme-d1c573d2.js');
18
18
  const index$2 = require('./index-9cd00dc3.js');
19
- const overlays = require('./overlays-0123d7d4.js');
19
+ const overlays = require('./overlays-32de87c4.js');
20
20
  require('./index-c8d52405.js');
21
21
  require('./index-73f75efb.js');
22
22
  require('./index-5915f9b3.js');
@@ -9,7 +9,7 @@ const index = require('./index-73f75efb.js');
9
9
  const buttonActive = require('./button-active-3f2f60b4.js');
10
10
  const helpers = require('./helpers-afaa9001.js');
11
11
  const lockController = require('./lock-controller-6585a42a.js');
12
- const overlays = require('./overlays-0123d7d4.js');
12
+ const overlays = require('./overlays-32de87c4.js');
13
13
  const theme = require('./theme-d1c573d2.js');
14
14
  const ionicGlobal = require('./ionic-global-d9a8bb5b.js');
15
15
  const animation = require('./animation-b4fdf128.js');
@@ -10,7 +10,7 @@ const config = require('./config-4f60b98a.js');
10
10
  const buttonActive = require('./button-active-3f2f60b4.js');
11
11
  const helpers = require('./helpers-afaa9001.js');
12
12
  const lockController = require('./lock-controller-6585a42a.js');
13
- const overlays = require('./overlays-0123d7d4.js');
13
+ const overlays = require('./overlays-32de87c4.js');
14
14
  const theme = require('./theme-d1c573d2.js');
15
15
  const ionicGlobal = require('./ionic-global-d9a8bb5b.js');
16
16
  const animation = require('./animation-b4fdf128.js');
@@ -36,7 +36,7 @@ const Backdrop = class {
36
36
  }
37
37
  render() {
38
38
  const mode = ionicGlobal.getIonMode(this);
39
- return (index.h(index.Host, { key: 'c803b4302c8e722064feb03dafe3cb6e190b4f2b', tabindex: "-1", "aria-hidden": "true", class: {
39
+ return (index.h(index.Host, { key: 'fe191068e2aaadfdbe7a463c08d227a1b36d7a98', "aria-hidden": "true", class: {
40
40
  [mode]: true,
41
41
  'backdrop-hide': !this.visible,
42
42
  'backdrop-no-tappable': !this.tappable,
@@ -15,7 +15,7 @@ const index$2 = require('./index-073c7cdc.js');
15
15
  const ionicGlobal = require('./ionic-global-d9a8bb5b.js');
16
16
  const data = require('./data-21dc0f81.js');
17
17
  const lockController = require('./lock-controller-6585a42a.js');
18
- const overlays = require('./overlays-0123d7d4.js');
18
+ const overlays = require('./overlays-32de87c4.js');
19
19
  const animation = require('./animation-b4fdf128.js');
20
20
  const haptic = require('./haptic-f6b37aa3.js');
21
21
  require('./index-c8d52405.js');
@@ -302,20 +302,7 @@ const Input = class {
302
302
  */
303
303
  renderHintText() {
304
304
  const { helperText, errorText } = this;
305
- return [
306
- index.h("div", { id: HELPER_TEXT_ID, class: "helper-text" }, helperText),
307
- index.h("div", { id: ERROR_TEXT_ID, class: "error-text" }, errorText),
308
- ];
309
- }
310
- getHintTextID() {
311
- const { el, helperText, errorText } = this;
312
- if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) {
313
- return ERROR_TEXT_ID;
314
- }
315
- if (helperText) {
316
- return HELPER_TEXT_ID;
317
- }
318
- return undefined;
305
+ return [index.h("div", { class: "helper-text" }, helperText), index.h("div", { class: "error-text" }, errorText)];
319
306
  }
320
307
  renderCounter() {
321
308
  const { counter, maxlength, counterFormatter, value } = this;
@@ -404,8 +391,6 @@ const Input = class {
404
391
  const clearIconData = clearInputIcon !== null && clearInputIcon !== void 0 ? clearInputIcon : defaultClearIcon;
405
392
  const hasValue = this.hasValue();
406
393
  const hasStartEndSlots = el.querySelector('[slot="start"], [slot="end"]') !== null;
407
- console.log('el', this.el);
408
- console.log('id', this.getHintTextID());
409
394
  /**
410
395
  * If the label is stacked, it should always sit above the input.
411
396
  * For floating labels, the label should move above the input if
@@ -424,7 +409,7 @@ const Input = class {
424
409
  * TODO(FW-5592): Remove hasStartEndSlots condition
425
410
  */
426
411
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
427
- return (index.h(index.Host, { key: '6ea1ddbc1c13e2e93686135ee3c1d87c21839ea4', class: theme.createColorClasses(this.color, {
412
+ return (index.h(index.Host, { key: '907ce98a82b5cfae5a08504cd79e00a2330b7444', class: theme.createColorClasses(this.color, {
428
413
  [mode]: true,
429
414
  'has-value': hasValue,
430
415
  'has-focus': hasFocus,
@@ -435,7 +420,7 @@ const Input = class {
435
420
  'in-item': inItem,
436
421
  'in-item-color': theme.hostContext('ion-item.ion-color', this.el),
437
422
  'input-disabled': disabled,
438
- }) }, index.h("label", { key: '37c80eff5361d5d8d14fa59fcab66a2f38d85fd2', class: "input-wrapper", htmlFor: inputId }, this.renderLabelContainer(), index.h("div", { key: '1bf4e5997beab1c7611d208465d7bec9da62fb54', class: "native-wrapper" }, index.h("slot", { key: '3b3eec55351462d72f04ab6b5b69f30bbe12b79f', name: "start" }), index.h("input", Object.assign({ key: '30673d8d272d0c21d2c3996608973c3e740433cd', 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() === ERROR_TEXT_ID }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (index.h("button", { key: '6414d510d72780262baceba2bb2a8c9fa1a48f2b', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
423
+ }) }, index.h("label", { key: '59d5bb45d2a5b828bba0ed8687a632a551e2f4d8', class: "input-wrapper", htmlFor: inputId }, this.renderLabelContainer(), index.h("div", { key: 'f93f129d08246d0e9a601c100d718534d6403853', class: "native-wrapper" }, index.h("slot", { key: '54eeb1a6bace662b7eb0d7e27180ea3d7e3a3729', name: "start" }), index.h("input", Object.assign({ key: 'b3e0be55bc1a4a539ae3b0fdcf7fc078723cca16', 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 }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (index.h("button", { key: '5f6373504a6d0d074bfbf875c794d45ea2748175', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
439
424
  /**
440
425
  * This prevents mobile browsers from
441
426
  * blurring the input when the clear
@@ -450,7 +435,7 @@ const Input = class {
450
435
  * for screen readers as it means users would be unable to swipe past the clear button.
451
436
  */
452
437
  ev.stopPropagation();
453
- }, onClick: this.clearTextInput }, index.h("ion-icon", { key: '517f2c7cd07fb22996ca2f63838de55346314993', "aria-hidden": "true", icon: clearIconData }))), index.h("slot", { key: 'ea2f1a12357da90098695c46cbc21d7d33923f9e', name: "end" })), shouldRenderHighlight && index.h("div", { key: '4a117a1ed80d6ea8e2a42a958509284cdf8b306f', class: "input-highlight" })), this.renderBottomContent()));
438
+ }, onClick: this.clearTextInput }, index.h("ion-icon", { key: '230d77973aa83458ceb32bf52e3abe9bc322cfe6', "aria-hidden": "true", icon: clearIconData }))), index.h("slot", { key: '9d69ac6e8a3c4b2b303dba2478f82695d5755ed2', name: "end" })), shouldRenderHighlight && index.h("div", { key: 'ac61f16237ce731e0745ab72d0fc3f066252464a', class: "input-highlight" })), this.renderBottomContent()));
454
439
  }
455
440
  get el() { return index.getElement(this); }
456
441
  static get watchers() { return {
@@ -460,8 +445,6 @@ const Input = class {
460
445
  }; }
461
446
  };
462
447
  let inputIds = 0;
463
- const HELPER_TEXT_ID = `${'helper-text-' + inputIds}`;
464
- const ERROR_TEXT_ID = `${'error-text-' + inputIds}`;
465
448
  Input.style = {
466
449
  ios: IonInputIosStyle0,
467
450
  md: IonInputMdStyle0
@@ -9,7 +9,7 @@ const index = require('./index-73f75efb.js');
9
9
  const config = require('./config-4f60b98a.js');
10
10
  const helpers = require('./helpers-afaa9001.js');
11
11
  const lockController = require('./lock-controller-6585a42a.js');
12
- const overlays = require('./overlays-0123d7d4.js');
12
+ const overlays = require('./overlays-32de87c4.js');
13
13
  const theme = require('./theme-d1c573d2.js');
14
14
  const ionicGlobal = require('./ionic-global-d9a8bb5b.js');
15
15
  const animation = require('./animation-b4fdf128.js');
@@ -7,7 +7,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
8
  const index = require('./index-73f75efb.js');
9
9
  const cubicBezier = require('./cubic-bezier-f2dccc53.js');
10
- const overlays = require('./overlays-0123d7d4.js');
10
+ const overlays = require('./overlays-32de87c4.js');
11
11
  const gestureController = require('./gesture-controller-9436f482.js');
12
12
  const hardwareBackButton = require('./hardware-back-button-9e8a2c4f.js');
13
13
  const helpers = require('./helpers-afaa9001.js');
@@ -12,7 +12,7 @@ const helpers = require('./helpers-afaa9001.js');
12
12
  const lockController = require('./lock-controller-6585a42a.js');
13
13
  const index$4 = require('./index-5915f9b3.js');
14
14
  const capacitor = require('./capacitor-c04564bf.js');
15
- const overlays = require('./overlays-0123d7d4.js');
15
+ const overlays = require('./overlays-32de87c4.js');
16
16
  const theme = require('./theme-d1c573d2.js');
17
17
  const index$5 = require('./index-f05acd21.js');
18
18
  const ionicGlobal = require('./ionic-global-d9a8bb5b.js');
@@ -6,7 +6,7 @@
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
8
  const index = require('./index-73f75efb.js');
9
- const overlays = require('./overlays-0123d7d4.js');
9
+ const overlays = require('./overlays-32de87c4.js');
10
10
  const frameworkDelegate = require('./framework-delegate-55f5683a.js');
11
11
  const helpers = require('./helpers-afaa9001.js');
12
12
  const lockController = require('./lock-controller-6585a42a.js');
@@ -9,7 +9,7 @@ const index = require('./index-73f75efb.js');
9
9
  const notchController = require('./notch-controller-d69150f5.js');
10
10
  const compareWithUtils = require('./compare-with-utils-df1001d7.js');
11
11
  const helpers = require('./helpers-afaa9001.js');
12
- const overlays = require('./overlays-0123d7d4.js');
12
+ const overlays = require('./overlays-32de87c4.js');
13
13
  const dir = require('./dir-94c21456.js');
14
14
  const theme = require('./theme-d1c573d2.js');
15
15
  const watchOptions = require('./watch-options-f5f3e158.js');
@@ -10,7 +10,7 @@ const config = require('./config-4f60b98a.js');
10
10
  const helpers = require('./helpers-afaa9001.js');
11
11
  const lockController = require('./lock-controller-6585a42a.js');
12
12
  const index$1 = require('./index-5915f9b3.js');
13
- const overlays = require('./overlays-0123d7d4.js');
13
+ const overlays = require('./overlays-32de87c4.js');
14
14
  const theme = require('./theme-d1c573d2.js');
15
15
  const ionicGlobal = require('./ionic-global-d9a8bb5b.js');
16
16
  const animation = require('./animation-b4fdf128.js');
@@ -502,7 +502,16 @@ const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts)
502
502
  if (overlay.presented) {
503
503
  return;
504
504
  }
505
- setRootAriaHidden(true);
505
+ /**
506
+ * Due to accessibility guidelines, toasts do not have
507
+ * focus traps.
508
+ *
509
+ * All other overlays should have focus traps to prevent
510
+ * the keyboard focus from leaving the overlay.
511
+ */
512
+ if (overlay.el.tagName !== 'ION-TOAST') {
513
+ setRootAriaHidden(true);
514
+ }
506
515
  document.body.classList.add(gestureController.BACKDROP_NO_SCROLL);
507
516
  hideOverlaysFromScreenReaders(overlay.el);
508
517
  overlay.presented = true;
@@ -23,7 +23,7 @@ export class Backdrop {
23
23
  }
24
24
  render() {
25
25
  const mode = getIonMode(this);
26
- return (h(Host, { key: 'c803b4302c8e722064feb03dafe3cb6e190b4f2b', tabindex: "-1", "aria-hidden": "true", class: {
26
+ return (h(Host, { key: 'fe191068e2aaadfdbe7a463c08d227a1b36d7a98', "aria-hidden": "true", class: {
27
27
  [mode]: true,
28
28
  'backdrop-hide': !this.visible,
29
29
  'backdrop-no-tappable': !this.tappable,
@@ -292,20 +292,7 @@ export class Input {
292
292
  */
293
293
  renderHintText() {
294
294
  const { helperText, errorText } = this;
295
- return [
296
- h("div", { id: HELPER_TEXT_ID, class: "helper-text" }, helperText),
297
- h("div", { id: ERROR_TEXT_ID, class: "error-text" }, errorText),
298
- ];
299
- }
300
- getHintTextID() {
301
- const { el, helperText, errorText } = this;
302
- if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) {
303
- return ERROR_TEXT_ID;
304
- }
305
- if (helperText) {
306
- return HELPER_TEXT_ID;
307
- }
308
- return undefined;
295
+ return [h("div", { class: "helper-text" }, helperText), h("div", { class: "error-text" }, errorText)];
309
296
  }
310
297
  renderCounter() {
311
298
  const { counter, maxlength, counterFormatter, value } = this;
@@ -394,8 +381,6 @@ export class Input {
394
381
  const clearIconData = clearInputIcon !== null && clearInputIcon !== void 0 ? clearInputIcon : defaultClearIcon;
395
382
  const hasValue = this.hasValue();
396
383
  const hasStartEndSlots = el.querySelector('[slot="start"], [slot="end"]') !== null;
397
- console.log('el', this.el);
398
- console.log('id', this.getHintTextID());
399
384
  /**
400
385
  * If the label is stacked, it should always sit above the input.
401
386
  * For floating labels, the label should move above the input if
@@ -414,7 +399,7 @@ export class Input {
414
399
  * TODO(FW-5592): Remove hasStartEndSlots condition
415
400
  */
416
401
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
417
- return (h(Host, { key: '6ea1ddbc1c13e2e93686135ee3c1d87c21839ea4', class: createColorClasses(this.color, {
402
+ return (h(Host, { key: '907ce98a82b5cfae5a08504cd79e00a2330b7444', class: createColorClasses(this.color, {
418
403
  [mode]: true,
419
404
  'has-value': hasValue,
420
405
  'has-focus': hasFocus,
@@ -425,7 +410,7 @@ export class Input {
425
410
  'in-item': inItem,
426
411
  'in-item-color': hostContext('ion-item.ion-color', this.el),
427
412
  'input-disabled': disabled,
428
- }) }, h("label", { key: '37c80eff5361d5d8d14fa59fcab66a2f38d85fd2', class: "input-wrapper", htmlFor: inputId }, this.renderLabelContainer(), h("div", { key: '1bf4e5997beab1c7611d208465d7bec9da62fb54', class: "native-wrapper" }, h("slot", { key: '3b3eec55351462d72f04ab6b5b69f30bbe12b79f', name: "start" }), h("input", Object.assign({ key: '30673d8d272d0c21d2c3996608973c3e740433cd', 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() === ERROR_TEXT_ID }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (h("button", { key: '6414d510d72780262baceba2bb2a8c9fa1a48f2b', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
413
+ }) }, h("label", { key: '59d5bb45d2a5b828bba0ed8687a632a551e2f4d8', class: "input-wrapper", htmlFor: inputId }, this.renderLabelContainer(), h("div", { key: 'f93f129d08246d0e9a601c100d718534d6403853', class: "native-wrapper" }, h("slot", { key: '54eeb1a6bace662b7eb0d7e27180ea3d7e3a3729', name: "start" }), h("input", Object.assign({ key: 'b3e0be55bc1a4a539ae3b0fdcf7fc078723cca16', 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 }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (h("button", { key: '5f6373504a6d0d074bfbf875c794d45ea2748175', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
429
414
  /**
430
415
  * This prevents mobile browsers from
431
416
  * blurring the input when the clear
@@ -440,7 +425,7 @@ export class Input {
440
425
  * for screen readers as it means users would be unable to swipe past the clear button.
441
426
  */
442
427
  ev.stopPropagation();
443
- }, onClick: this.clearTextInput }, h("ion-icon", { key: '517f2c7cd07fb22996ca2f63838de55346314993', "aria-hidden": "true", icon: clearIconData }))), h("slot", { key: 'ea2f1a12357da90098695c46cbc21d7d33923f9e', name: "end" })), shouldRenderHighlight && h("div", { key: '4a117a1ed80d6ea8e2a42a958509284cdf8b306f', class: "input-highlight" })), this.renderBottomContent()));
428
+ }, onClick: this.clearTextInput }, h("ion-icon", { key: '230d77973aa83458ceb32bf52e3abe9bc322cfe6', "aria-hidden": "true", icon: clearIconData }))), h("slot", { key: '9d69ac6e8a3c4b2b303dba2478f82695d5755ed2', name: "end" })), shouldRenderHighlight && h("div", { key: 'ac61f16237ce731e0745ab72d0fc3f066252464a', class: "input-highlight" })), this.renderBottomContent()));
444
429
  }
445
430
  static get is() { return "ion-input"; }
446
431
  static get encapsulation() { return "scoped"; }
@@ -1215,5 +1200,3 @@ export class Input {
1215
1200
  }
1216
1201
  }
1217
1202
  let inputIds = 0;
1218
- const HELPER_TEXT_ID = `${'helper-text-' + inputIds}`;
1219
- const ERROR_TEXT_ID = `${'error-text-' + inputIds}`;
@@ -427,7 +427,16 @@ export const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation
427
427
  if (overlay.presented) {
428
428
  return;
429
429
  }
430
- setRootAriaHidden(true);
430
+ /**
431
+ * Due to accessibility guidelines, toasts do not have
432
+ * focus traps.
433
+ *
434
+ * All other overlays should have focus traps to prevent
435
+ * the keyboard focus from leaving the overlay.
436
+ */
437
+ if (overlay.el.tagName !== 'ION-TOAST') {
438
+ setRootAriaHidden(true);
439
+ }
431
440
  document.body.classList.add(BACKDROP_NO_SCROLL);
432
441
  hideOverlaysFromScreenReaders(overlay.el);
433
442
  overlay.presented = true;
package/dist/docs.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2024-10-22T15:12:45",
2
+ "timestamp": "2024-10-23T00:16:58",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.20.0",
package/dist/esm/index.js CHANGED
@@ -12,7 +12,7 @@ export { c as componentOnReady } from './helpers-da915de8.js';
12
12
  export { I as IonicSafeString, g as getMode, s as setupConfig } from './config-49c88215.js';
13
13
  export { o as openURL } from './theme-01f3f29c.js';
14
14
  export { m as menuController } from './index-fe1782b1.js';
15
- export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as pickerController, c as popoverController, t as toastController } from './overlays-9c75ec54.js';
15
+ export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as pickerController, c as popoverController, t as toastController } from './overlays-0a2b29bd.js';
16
16
  import './index-a5d50daf.js';
17
17
  import './index-28849c61.js';
18
18
  import './index-9b0d46f4.js';
@@ -5,7 +5,7 @@ import { r as registerInstance, d as createEvent, e as readTask, h, f as Host, i
5
5
  import { c as createButtonActiveGesture } from './button-active-f6503382.js';
6
6
  import { r as raf } from './helpers-da915de8.js';
7
7
  import { c as createLockController } from './lock-controller-316928be.js';
8
- import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, f as present, g as dismiss, h as eventMethod, s as safeCall, j as prepareOverlay, k as setOverlayId } from './overlays-9c75ec54.js';
8
+ import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, f as present, g as dismiss, h as eventMethod, s as safeCall, j as prepareOverlay, k as setOverlayId } from './overlays-0a2b29bd.js';
9
9
  import { g as getClassMap } from './theme-01f3f29c.js';
10
10
  import { b as getIonMode } from './ionic-global-c81d82ab.js';
11
11
  import { c as createAnimation } from './animation-eab5a4ca.js';
@@ -6,7 +6,7 @@ import { E as ENABLE_HTML_CONTENT_DEFAULT, a as sanitizeDOMString } from './conf
6
6
  import { c as createButtonActiveGesture } from './button-active-f6503382.js';
7
7
  import { r as raf } from './helpers-da915de8.js';
8
8
  import { c as createLockController } from './lock-controller-316928be.js';
9
- import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-9c75ec54.js';
9
+ import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-0a2b29bd.js';
10
10
  import { g as getClassMap } from './theme-01f3f29c.js';
11
11
  import { c as config, b as getIonMode } from './ionic-global-c81d82ab.js';
12
12
  import { c as createAnimation } from './animation-eab5a4ca.js';
@@ -32,7 +32,7 @@ const Backdrop = class {
32
32
  }
33
33
  render() {
34
34
  const mode = getIonMode(this);
35
- return (h(Host, { key: 'c803b4302c8e722064feb03dafe3cb6e190b4f2b', tabindex: "-1", "aria-hidden": "true", class: {
35
+ return (h(Host, { key: 'fe191068e2aaadfdbe7a463c08d227a1b36d7a98', "aria-hidden": "true", class: {
36
36
  [mode]: true,
37
37
  'backdrop-hide': !this.visible,
38
38
  'backdrop-no-tappable': !this.tappable,
@@ -11,7 +11,7 @@ import { c as chevronBack, o as chevronForward, l as chevronDown, p as caretUpSh
11
11
  import { b as getIonMode } from './ionic-global-c81d82ab.js';
12
12
  import { g as generateDayAriaLabel, a as getDay, i as isBefore, b as isAfter, c as isSameDay, d as getPreviousMonth, e as getNextMonth, v as validateParts, f as getPartsFromCalendarDay, h as getNextYear, j as getPreviousYear, k as getEndOfWeek, l as getStartOfWeek, m as getPreviousDay, n as getNextDay, o as getPreviousWeek, p as getNextWeek, q as parseMinParts, r as parseMaxParts, s as parseDate, w as warnIfValueOutOfBounds, t as convertToArrayOfNumbers, u as convertDataToISO, x as getToday, y as getClosestValidDate, z as generateMonths, A as getNumDaysInMonth, B as getCombinedDateColumnData, C as getMonthColumnData, D as getDayColumnData, E as getYearColumnData, F as isMonthFirstLocale, G as getTimeColumnsData, H as isLocaleDayPeriodRTL, I as getDaysOfWeek, J as getMonthAndYear, K as getDaysOfMonth, L as getHourCycle, M as getLocalizedTime, N as getLocalizedDateTime, O as formatValue, P as clampDate, Q as parseAmPm, R as calculateHourFromAMPM } from './data-ae11fd43.js';
13
13
  import { c as createLockController } from './lock-controller-316928be.js';
14
- import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-9c75ec54.js';
14
+ import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-0a2b29bd.js';
15
15
  import { c as createAnimation } from './animation-eab5a4ca.js';
16
16
  import { b as hapticSelectionChanged, h as hapticSelectionEnd, a as hapticSelectionStart } from './haptic-ac164e4c.js';
17
17
  import './index-a5d50daf.js';
@@ -298,20 +298,7 @@ const Input = class {
298
298
  */
299
299
  renderHintText() {
300
300
  const { helperText, errorText } = this;
301
- return [
302
- h("div", { id: HELPER_TEXT_ID, class: "helper-text" }, helperText),
303
- h("div", { id: ERROR_TEXT_ID, class: "error-text" }, errorText),
304
- ];
305
- }
306
- getHintTextID() {
307
- const { el, helperText, errorText } = this;
308
- if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) {
309
- return ERROR_TEXT_ID;
310
- }
311
- if (helperText) {
312
- return HELPER_TEXT_ID;
313
- }
314
- return undefined;
301
+ return [h("div", { class: "helper-text" }, helperText), h("div", { class: "error-text" }, errorText)];
315
302
  }
316
303
  renderCounter() {
317
304
  const { counter, maxlength, counterFormatter, value } = this;
@@ -400,8 +387,6 @@ const Input = class {
400
387
  const clearIconData = clearInputIcon !== null && clearInputIcon !== void 0 ? clearInputIcon : defaultClearIcon;
401
388
  const hasValue = this.hasValue();
402
389
  const hasStartEndSlots = el.querySelector('[slot="start"], [slot="end"]') !== null;
403
- console.log('el', this.el);
404
- console.log('id', this.getHintTextID());
405
390
  /**
406
391
  * If the label is stacked, it should always sit above the input.
407
392
  * For floating labels, the label should move above the input if
@@ -420,7 +405,7 @@ const Input = class {
420
405
  * TODO(FW-5592): Remove hasStartEndSlots condition
421
406
  */
422
407
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
423
- return (h(Host, { key: '6ea1ddbc1c13e2e93686135ee3c1d87c21839ea4', class: createColorClasses(this.color, {
408
+ return (h(Host, { key: '907ce98a82b5cfae5a08504cd79e00a2330b7444', class: createColorClasses(this.color, {
424
409
  [mode]: true,
425
410
  'has-value': hasValue,
426
411
  'has-focus': hasFocus,
@@ -431,7 +416,7 @@ const Input = class {
431
416
  'in-item': inItem,
432
417
  'in-item-color': hostContext('ion-item.ion-color', this.el),
433
418
  'input-disabled': disabled,
434
- }) }, h("label", { key: '37c80eff5361d5d8d14fa59fcab66a2f38d85fd2', class: "input-wrapper", htmlFor: inputId }, this.renderLabelContainer(), h("div", { key: '1bf4e5997beab1c7611d208465d7bec9da62fb54', class: "native-wrapper" }, h("slot", { key: '3b3eec55351462d72f04ab6b5b69f30bbe12b79f', name: "start" }), h("input", Object.assign({ key: '30673d8d272d0c21d2c3996608973c3e740433cd', 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() === ERROR_TEXT_ID }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (h("button", { key: '6414d510d72780262baceba2bb2a8c9fa1a48f2b', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
419
+ }) }, h("label", { key: '59d5bb45d2a5b828bba0ed8687a632a551e2f4d8', class: "input-wrapper", htmlFor: inputId }, this.renderLabelContainer(), h("div", { key: 'f93f129d08246d0e9a601c100d718534d6403853', class: "native-wrapper" }, h("slot", { key: '54eeb1a6bace662b7eb0d7e27180ea3d7e3a3729', name: "start" }), h("input", Object.assign({ key: 'b3e0be55bc1a4a539ae3b0fdcf7fc078723cca16', 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 }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (h("button", { key: '5f6373504a6d0d074bfbf875c794d45ea2748175', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
435
420
  /**
436
421
  * This prevents mobile browsers from
437
422
  * blurring the input when the clear
@@ -446,7 +431,7 @@ const Input = class {
446
431
  * for screen readers as it means users would be unable to swipe past the clear button.
447
432
  */
448
433
  ev.stopPropagation();
449
- }, onClick: this.clearTextInput }, h("ion-icon", { key: '517f2c7cd07fb22996ca2f63838de55346314993', "aria-hidden": "true", icon: clearIconData }))), h("slot", { key: 'ea2f1a12357da90098695c46cbc21d7d33923f9e', name: "end" })), shouldRenderHighlight && h("div", { key: '4a117a1ed80d6ea8e2a42a958509284cdf8b306f', class: "input-highlight" })), this.renderBottomContent()));
434
+ }, onClick: this.clearTextInput }, h("ion-icon", { key: '230d77973aa83458ceb32bf52e3abe9bc322cfe6', "aria-hidden": "true", icon: clearIconData }))), h("slot", { key: '9d69ac6e8a3c4b2b303dba2478f82695d5755ed2', name: "end" })), shouldRenderHighlight && h("div", { key: 'ac61f16237ce731e0745ab72d0fc3f066252464a', class: "input-highlight" })), this.renderBottomContent()));
450
435
  }
451
436
  get el() { return getElement(this); }
452
437
  static get watchers() { return {
@@ -456,8 +441,6 @@ const Input = class {
456
441
  }; }
457
442
  };
458
443
  let inputIds = 0;
459
- const HELPER_TEXT_ID = `${'helper-text-' + inputIds}`;
460
- const ERROR_TEXT_ID = `${'error-text-' + inputIds}`;
461
444
  Input.style = {
462
445
  ios: IonInputIosStyle0,
463
446
  md: IonInputMdStyle0
@@ -5,7 +5,7 @@ import { r as registerInstance, d as createEvent, h, f as Host, i as getElement
5
5
  import { E as ENABLE_HTML_CONTENT_DEFAULT, a as sanitizeDOMString } from './config-49c88215.js';
6
6
  import { r as raf } from './helpers-da915de8.js';
7
7
  import { c as createLockController } from './lock-controller-316928be.js';
8
- import { d as createDelegateController, e as createTriggerController, B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod } from './overlays-9c75ec54.js';
8
+ import { d as createDelegateController, e as createTriggerController, B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod } from './overlays-0a2b29bd.js';
9
9
  import { g as getClassMap } from './theme-01f3f29c.js';
10
10
  import { c as config, b as getIonMode } from './ionic-global-c81d82ab.js';
11
11
  import { c as createAnimation } from './animation-eab5a4ca.js';
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { r as registerInstance, d as createEvent, h, f as Host, i as getElement } from './index-28849c61.js';
5
5
  import { g as getTimeGivenProgression } from './cubic-bezier-fe2083dc.js';
6
- import { o as getPresentedOverlay, n as focusFirstDescendant, q as focusLastDescendant } from './overlays-9c75ec54.js';
6
+ import { o as getPresentedOverlay, n as focusFirstDescendant, q as focusLastDescendant } from './overlays-0a2b29bd.js';
7
7
  import { G as GESTURE_CONTROLLER } from './gesture-controller-314a54f6.js';
8
8
  import { shouldUseCloseWatcher } from './hardware-back-button-06ef3c3e.js';
9
9
  import { n as isEndSide, i as inheritAriaAttributes, m as assert, j as clamp } from './helpers-da915de8.js';
@@ -8,7 +8,7 @@ import { g as getElementRoot, j as clamp, r as raf, h as inheritAttributes, k as
8
8
  import { c as createLockController } from './lock-controller-316928be.js';
9
9
  import { p as printIonWarning } from './index-9b0d46f4.js';
10
10
  import { g as getCapacitor } from './capacitor-59395cbd.js';
11
- import { G as GESTURE, O as OVERLAY_GESTURE_PRIORITY, F as FOCUS_TRAP_DISABLE_CLASS, e as createTriggerController, B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod } from './overlays-9c75ec54.js';
11
+ import { G as GESTURE, O as OVERLAY_GESTURE_PRIORITY, F as FOCUS_TRAP_DISABLE_CLASS, e as createTriggerController, B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod } from './overlays-0a2b29bd.js';
12
12
  import { g as getClassMap } from './theme-01f3f29c.js';
13
13
  import { e as deepReady, w as waitForMount } from './index-3ad7f18b.js';
14
14
  import { b as getIonMode, c as config } from './ionic-global-c81d82ab.js';
@@ -2,7 +2,7 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { r as registerInstance, d as createEvent, h, f as Host, i as getElement } from './index-28849c61.js';
5
- import { B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, n as focusFirstDescendant, g as dismiss, h as eventMethod, F as FOCUS_TRAP_DISABLE_CLASS } from './overlays-9c75ec54.js';
5
+ import { B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, n as focusFirstDescendant, g as dismiss, h as eventMethod, F as FOCUS_TRAP_DISABLE_CLASS } from './overlays-0a2b29bd.js';
6
6
  import { C as CoreDelegate, a as attachComponent, d as detachComponent } from './framework-delegate-63d1a679.js';
7
7
  import { r as raf, g as getElementRoot, a as addEventListener, k as hasLazyBuild } from './helpers-da915de8.js';
8
8
  import { c as createLockController } from './lock-controller-316928be.js';
@@ -5,7 +5,7 @@ import { r as registerInstance, d as createEvent, h, f as Host, i as getElement,
5
5
  import { c as createNotchController } from './notch-controller-55b09e11.js';
6
6
  import { i as isOptionSelected, c as compareOptions } from './compare-with-utils-a96ff2ea.js';
7
7
  import { h as inheritAttributes, f as focusVisibleElement, d as renderHiddenInput } from './helpers-da915de8.js';
8
- import { c as popoverController, b as actionSheetController, a as alertController, s as safeCall } from './overlays-9c75ec54.js';
8
+ import { c as popoverController, b as actionSheetController, a as alertController, s as safeCall } from './overlays-0a2b29bd.js';
9
9
  import { i as isRTL } from './dir-babeabeb.js';
10
10
  import { h as hostContext, c as createColorClasses, g as getClassMap } from './theme-01f3f29c.js';
11
11
  import { w as watchForOptions } from './watch-options-c2911ace.js';
@@ -6,7 +6,7 @@ import { E as ENABLE_HTML_CONTENT_DEFAULT, a as sanitizeDOMString } from './conf
6
6
  import { g as getElementRoot, r as raf } from './helpers-da915de8.js';
7
7
  import { c as createLockController } from './lock-controller-316928be.js';
8
8
  import { p as printIonWarning } from './index-9b0d46f4.js';
9
- import { O as OVERLAY_GESTURE_PRIORITY, d as createDelegateController, e as createTriggerController, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall, G as GESTURE } from './overlays-9c75ec54.js';
9
+ import { O as OVERLAY_GESTURE_PRIORITY, d as createDelegateController, e as createTriggerController, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall, G as GESTURE } from './overlays-0a2b29bd.js';
10
10
  import { c as createColorClasses, g as getClassMap } from './theme-01f3f29c.js';
11
11
  import { c as config, b as getIonMode } from './ionic-global-c81d82ab.js';
12
12
  import { c as createAnimation } from './animation-eab5a4ca.js';