@ionic/core 8.7.17-nightly.20260114 → 8.7.18-dev.11768592717.14a59d2f

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 (32) hide show
  1. package/components/ion-footer.js +23 -3
  2. package/components/ion-input.js +35 -6
  3. package/components/ion-tab-bar.js +23 -3
  4. package/components/ion-toast.js +2 -2
  5. package/dist/cjs/ion-app_8.cjs.entry.js +23 -3
  6. package/dist/cjs/ion-input.cjs.entry.js +35 -6
  7. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +23 -3
  8. package/dist/cjs/ion-toast.cjs.entry.js +2 -2
  9. package/dist/collection/components/footer/footer.js +23 -3
  10. package/dist/collection/components/input/input.js +35 -6
  11. package/dist/collection/components/tab-bar/tab-bar.js +23 -3
  12. package/dist/collection/components/toast/toast.ios.css +1 -1
  13. package/dist/collection/components/toast/toast.md.css +1 -1
  14. package/dist/docs.json +1 -1
  15. package/dist/esm/ion-app_8.entry.js +23 -3
  16. package/dist/esm/ion-input.entry.js +35 -6
  17. package/dist/esm/ion-tab-bar_2.entry.js +23 -3
  18. package/dist/esm/ion-toast.entry.js +2 -2
  19. package/dist/ionic/ionic.esm.js +1 -1
  20. package/dist/ionic/{p-b3d44509.entry.js → p-0e8c8a10.entry.js} +1 -1
  21. package/dist/ionic/p-172a579f.entry.js +4 -0
  22. package/dist/ionic/p-1ccd6829.entry.js +4 -0
  23. package/dist/ionic/p-66fbe052.entry.js +4 -0
  24. package/dist/types/components/footer/footer.d.ts +1 -0
  25. package/dist/types/components/input/input.d.ts +11 -0
  26. package/dist/types/components/tab-bar/tab-bar.d.ts +1 -0
  27. package/hydrate/index.js +82 -14
  28. package/hydrate/index.mjs +82 -14
  29. package/package.json +1 -1
  30. package/dist/ionic/p-7268efa5.entry.js +0 -4
  31. package/dist/ionic/p-9ab2d871.entry.js +0 -4
  32. package/dist/ionic/p-db8027bd.entry.js +0 -4
@@ -21,6 +21,7 @@ export class Input {
21
21
  this.inputId = `ion-input-${inputIds++}`;
22
22
  this.helperTextId = `${this.inputId}-helper-text`;
23
23
  this.errorTextId = `${this.inputId}-error-text`;
24
+ this.labelTextId = `${this.inputId}-label`;
24
25
  this.inheritedAttributes = {};
25
26
  this.isComposing = false;
26
27
  /**
@@ -229,7 +230,11 @@ export class Input {
229
230
  }
230
231
  connectedCallback() {
231
232
  const { el } = this;
232
- this.slotMutationController = createSlotMutationController(el, ['label', 'start', 'end'], () => forceUpdate(this));
233
+ this.slotMutationController = createSlotMutationController(el, ['label', 'start', 'end'], () => {
234
+ this.setSlottedLabelId();
235
+ forceUpdate(this);
236
+ });
237
+ this.setSlottedLabelId();
233
238
  this.notchController = createNotchController(el, () => this.notchSpacerEl, () => this.labelSlot);
234
239
  // Watch for class changes to update validation state
235
240
  if (Build.isBrowser && typeof MutationObserver !== 'undefined') {
@@ -432,11 +437,11 @@ export class Input {
432
437
  return (h("div", { class: "input-bottom" }, this.renderHintText(), this.renderCounter()));
433
438
  }
434
439
  renderLabel() {
435
- const { label } = this;
440
+ const { label, labelTextId } = this;
436
441
  return (h("div", { class: {
437
442
  'label-text-wrapper': true,
438
443
  'label-text-wrapper-hidden': !this.hasLabel,
439
- } }, label === undefined ? h("slot", { name: "label" }) : h("div", { class: "label-text" }, label)));
444
+ }, "aria-hidden": this.hasLabel ? 'true' : null }, label === undefined ? (h("slot", { name: "label" })) : (h("div", { class: "label-text", id: labelTextId }, label))));
440
445
  }
441
446
  /**
442
447
  * Gets any content passed into the `label` slot,
@@ -445,6 +450,30 @@ export class Input {
445
450
  get labelSlot() {
446
451
  return this.el.querySelector('[slot="label"]');
447
452
  }
453
+ /**
454
+ * Ensures the slotted label element has an ID for aria-labelledby.
455
+ * If no ID exists, we assign one using our generated labelTextId.
456
+ */
457
+ setSlottedLabelId() {
458
+ const slottedLabel = this.labelSlot;
459
+ if (slottedLabel && !slottedLabel.id) {
460
+ slottedLabel.id = this.labelTextId;
461
+ }
462
+ }
463
+ /**
464
+ * Returns the ID to use for aria-labelledby on the native input,
465
+ * or undefined if aria-label is explicitly set (to avoid conflicts).
466
+ */
467
+ getLabelledById() {
468
+ var _a;
469
+ if (this.inheritedAttributes['aria-label']) {
470
+ return undefined;
471
+ }
472
+ if (this.label !== undefined) {
473
+ return this.labelTextId;
474
+ }
475
+ return ((_a = this.labelSlot) === null || _a === void 0 ? void 0 : _a.id) || undefined;
476
+ }
448
477
  /**
449
478
  * Returns `true` if label content is provided
450
479
  * either by a prop or a content. If you want
@@ -511,7 +540,7 @@ export class Input {
511
540
  * TODO(FW-5592): Remove hasStartEndSlots condition
512
541
  */
513
542
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
514
- return (h(Host, { key: '97b5308021064d9e7434ef2d3d96f27045c1b0c4', class: createColorClasses(this.color, {
543
+ return (h(Host, { key: '9ba9cf425b573d2ca9ac34455a0e6b8474c4de6d', class: createColorClasses(this.color, {
515
544
  [mode]: true,
516
545
  'has-value': hasValue,
517
546
  'has-focus': hasFocus,
@@ -522,14 +551,14 @@ export class Input {
522
551
  'in-item': inItem,
523
552
  'in-item-color': hostContext('ion-item.ion-color', this.el),
524
553
  'input-disabled': disabled,
525
- }) }, h("label", { key: '353f68726ce180299bd9adc81e5ff7d26a48f54f', class: "input-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderLabelContainer(), h("div", { key: '2034b4bad04fc157f3298a1805819216b6f439d0', class: "native-wrapper", onClick: this.onLabelClick }, h("slot", { key: '96bb5e30176b2bd76dfb75bfbf6c1c3d4403f4bb', name: "start" }), h("input", Object.assign({ key: '1a1d75b0e414a95c89d5a760757c33548d234aca', 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 && (h("button", { key: '95f3df17b7691d9a2e7dcd4a51f16a94aa3ca36f', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
554
+ }) }, h("label", { key: '74b989d0aa5ab38f29f952519868f05119df6005', class: "input-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderLabelContainer(), h("div", { key: '47f2b42e2f74ea866b4f871026e08ab375d7a726', class: "native-wrapper", onClick: this.onLabelClick }, h("slot", { key: 'eaabe5a4a329a356cac3294d15c087d0d131fff2', name: "start" }), h("input", Object.assign({ key: 'c821a984a8a9b7f96f30892c06d8deda093ff24b', 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, "aria-labelledby": this.getLabelledById() }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (h("button", { key: '62069c11016ee190dc46ab941372e1c4ad8a36ed', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
526
555
  /**
527
556
  * This prevents mobile browsers from
528
557
  * blurring the input when the clear
529
558
  * button is activated.
530
559
  */
531
560
  ev.preventDefault();
532
- }, onClick: this.clearTextInput }, h("ion-icon", { key: '16b0af75eed50c8115fb5597f73b5fbf71c2530e', "aria-hidden": "true", icon: clearIconData }))), h("slot", { key: 'c48da0f8ddb3764ac43efa705bb4a6bb2d9cc2fd', name: "end" })), shouldRenderHighlight && h("div", { key: 'f15238481fc20de56ca7ecb6e350b3c024cc755e', class: "input-highlight" })), this.renderBottomContent()));
561
+ }, onClick: this.clearTextInput }, h("ion-icon", { key: 'dd75a516d32110d85382b664c663bd41f177ce12', "aria-hidden": "true", icon: clearIconData }))), h("slot", { key: '330d4b9389f2c62223a5ee24003e96ef3e6b2473', name: "end" })), shouldRenderHighlight && h("div", { key: '8e442bed130ddc84976ab70fd3f8578d6bcc6316', class: "input-highlight" })), this.renderBottomContent()));
533
562
  }
534
563
  static get is() { return "ion-input"; }
535
564
  static get encapsulation() { return "scoped"; }
@@ -11,6 +11,7 @@ import { getIonMode } from "../../global/ionic-global";
11
11
  export class TabBar {
12
12
  constructor() {
13
13
  this.keyboardCtrl = null;
14
+ this.keyboardCtrlPromise = null;
14
15
  this.didLoad = false;
15
16
  this.keyboardVisible = false;
16
17
  /**
@@ -46,7 +47,7 @@ export class TabBar {
46
47
  }
47
48
  }
48
49
  async connectedCallback() {
49
- this.keyboardCtrl = await createKeyboardController(async (keyboardOpen, waitForResize) => {
50
+ const promise = createKeyboardController(async (keyboardOpen, waitForResize) => {
50
51
  /**
51
52
  * If the keyboard is hiding, then we need to wait
52
53
  * for the webview to resize. Otherwise, the tab bar
@@ -57,21 +58,40 @@ export class TabBar {
57
58
  }
58
59
  this.keyboardVisible = keyboardOpen; // trigger re-render by updating state
59
60
  });
61
+ this.keyboardCtrlPromise = promise;
62
+ const keyboardCtrl = await promise;
63
+ /**
64
+ * Only assign if this is still the current promise.
65
+ * Otherwise, a new connectedCallback has started or
66
+ * disconnectedCallback was called, so destroy this instance.
67
+ */
68
+ if (this.keyboardCtrlPromise === promise) {
69
+ this.keyboardCtrl = keyboardCtrl;
70
+ this.keyboardCtrlPromise = null;
71
+ }
72
+ else {
73
+ keyboardCtrl.destroy();
74
+ }
60
75
  }
61
76
  disconnectedCallback() {
77
+ if (this.keyboardCtrlPromise) {
78
+ this.keyboardCtrlPromise.then((ctrl) => ctrl.destroy());
79
+ this.keyboardCtrlPromise = null;
80
+ }
62
81
  if (this.keyboardCtrl) {
63
82
  this.keyboardCtrl.destroy();
83
+ this.keyboardCtrl = null;
64
84
  }
65
85
  }
66
86
  render() {
67
87
  const { color, translucent, keyboardVisible } = this;
68
88
  const mode = getIonMode(this);
69
89
  const shouldHide = keyboardVisible && this.el.getAttribute('slot') !== 'top';
70
- return (h(Host, { key: '388ec37ce308035bab78d6c9a016bb616e9517a9', role: "tablist", "aria-hidden": shouldHide ? 'true' : null, class: createColorClasses(color, {
90
+ return (h(Host, { key: '9daf4e2acaff6e3ce3878cf9dd5109fb1afbbebe', role: "tablist", "aria-hidden": shouldHide ? 'true' : null, class: createColorClasses(color, {
71
91
  [mode]: true,
72
92
  'tab-bar-translucent': translucent,
73
93
  'tab-bar-hidden': shouldHide,
74
- }) }, h("slot", { key: 'ce10ade2b86725e24f3254516483eeedd8ecb16a' })));
94
+ }) }, h("slot", { key: '1d15aa2da8501e8e7eff11ad4a491478be845c43' })));
75
95
  }
76
96
  static get is() { return "ion-tab-bar"; }
77
97
  static get encapsulation() { return "shadow"; }
@@ -168,7 +168,6 @@
168
168
 
169
169
  .toast-layout-baseline .toast-content {
170
170
  display: flex;
171
- flex: 1;
172
171
  flex-direction: column;
173
172
  justify-content: center;
174
173
  }
@@ -179,6 +178,7 @@
179
178
  }
180
179
 
181
180
  .toast-content {
181
+ flex: 1;
182
182
  min-width: 0;
183
183
  }
184
184
 
@@ -168,7 +168,6 @@
168
168
 
169
169
  .toast-layout-baseline .toast-content {
170
170
  display: flex;
171
- flex: 1;
172
171
  flex-direction: column;
173
172
  justify-content: center;
174
173
  }
@@ -179,6 +178,7 @@
179
178
  }
180
179
 
181
180
  .toast-content {
181
+ flex: 1;
182
182
  min-width: 0;
183
183
  }
184
184
 
package/dist/docs.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2026-01-14T06:09:35",
2
+ "timestamp": "2026-01-16T19:47:08",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.38.0",
@@ -624,6 +624,7 @@ const Footer = class {
624
624
  constructor(hostRef) {
625
625
  registerInstance(this, hostRef);
626
626
  this.keyboardCtrl = null;
627
+ this.keyboardCtrlPromise = null;
627
628
  this.keyboardVisible = false;
628
629
  /**
629
630
  * If `true`, the footer will be translucent.
@@ -671,7 +672,7 @@ const Footer = class {
671
672
  this.checkCollapsibleFooter();
672
673
  }
673
674
  async connectedCallback() {
674
- this.keyboardCtrl = await createKeyboardController(async (keyboardOpen, waitForResize) => {
675
+ const promise = createKeyboardController(async (keyboardOpen, waitForResize) => {
675
676
  /**
676
677
  * If the keyboard is hiding, then we need to wait
677
678
  * for the webview to resize. Otherwise, the footer
@@ -682,10 +683,29 @@ const Footer = class {
682
683
  }
683
684
  this.keyboardVisible = keyboardOpen; // trigger re-render by updating state
684
685
  });
686
+ this.keyboardCtrlPromise = promise;
687
+ const keyboardCtrl = await promise;
688
+ /**
689
+ * Only assign if this is still the current promise.
690
+ * Otherwise, a new connectedCallback has started or
691
+ * disconnectedCallback was called, so destroy this instance.
692
+ */
693
+ if (this.keyboardCtrlPromise === promise) {
694
+ this.keyboardCtrl = keyboardCtrl;
695
+ this.keyboardCtrlPromise = null;
696
+ }
697
+ else {
698
+ keyboardCtrl.destroy();
699
+ }
685
700
  }
686
701
  disconnectedCallback() {
702
+ if (this.keyboardCtrlPromise) {
703
+ this.keyboardCtrlPromise.then((ctrl) => ctrl.destroy());
704
+ this.keyboardCtrlPromise = null;
705
+ }
687
706
  if (this.keyboardCtrl) {
688
707
  this.keyboardCtrl.destroy();
708
+ this.keyboardCtrl = null;
689
709
  }
690
710
  }
691
711
  destroyCollapsibleFooter() {
@@ -699,7 +719,7 @@ const Footer = class {
699
719
  const mode = getIonMode(this);
700
720
  const tabs = this.el.closest('ion-tabs');
701
721
  const tabBar = tabs === null || tabs === void 0 ? void 0 : tabs.querySelector(':scope > ion-tab-bar');
702
- return (h(Host, { key: 'ddc228f1a1e7fa4f707dccf74db2490ca3241137', role: "contentinfo", class: {
722
+ return (h(Host, { key: '71939c4bbaef5062532a99ee2e33574102a9abad', role: "contentinfo", class: {
703
723
  [mode]: true,
704
724
  // Used internally for styling
705
725
  [`footer-${mode}`]: true,
@@ -707,7 +727,7 @@ const Footer = class {
707
727
  [`footer-translucent-${mode}`]: translucent,
708
728
  ['footer-toolbar-padding']: !this.keyboardVisible && (!tabBar || tabBar.slot !== 'bottom'),
709
729
  [`footer-collapse-${collapse}`]: collapse !== undefined,
710
- } }, mode === 'ios' && translucent && h("div", { key: 'e16ed4963ff94e06de77eb8038201820af73937c', class: "footer-background" }), h("slot", { key: 'f186934febf85d37133d9351a96c1a64b0a4b203' })));
730
+ } }, mode === 'ios' && translucent && h("div", { key: '2fa14f61661c47c661cecd696176728d6eafa74f', class: "footer-background" }), h("slot", { key: '8e63696e7c528d5c38201e546bf08135290d0945' })));
711
731
  }
712
732
  get el() { return getElement(this); }
713
733
  };
@@ -25,6 +25,7 @@ const Input = class {
25
25
  this.inputId = `ion-input-${inputIds++}`;
26
26
  this.helperTextId = `${this.inputId}-helper-text`;
27
27
  this.errorTextId = `${this.inputId}-error-text`;
28
+ this.labelTextId = `${this.inputId}-label`;
28
29
  this.inheritedAttributes = {};
29
30
  this.isComposing = false;
30
31
  /**
@@ -233,7 +234,11 @@ const Input = class {
233
234
  }
234
235
  connectedCallback() {
235
236
  const { el } = this;
236
- this.slotMutationController = createSlotMutationController(el, ['label', 'start', 'end'], () => forceUpdate(this));
237
+ this.slotMutationController = createSlotMutationController(el, ['label', 'start', 'end'], () => {
238
+ this.setSlottedLabelId();
239
+ forceUpdate(this);
240
+ });
241
+ this.setSlottedLabelId();
237
242
  this.notchController = createNotchController(el, () => this.notchSpacerEl, () => this.labelSlot);
238
243
  // Watch for class changes to update validation state
239
244
  if (typeof MutationObserver !== 'undefined') {
@@ -436,11 +441,11 @@ const Input = class {
436
441
  return (h("div", { class: "input-bottom" }, this.renderHintText(), this.renderCounter()));
437
442
  }
438
443
  renderLabel() {
439
- const { label } = this;
444
+ const { label, labelTextId } = this;
440
445
  return (h("div", { class: {
441
446
  'label-text-wrapper': true,
442
447
  'label-text-wrapper-hidden': !this.hasLabel,
443
- } }, label === undefined ? h("slot", { name: "label" }) : h("div", { class: "label-text" }, label)));
448
+ }, "aria-hidden": this.hasLabel ? 'true' : null }, label === undefined ? (h("slot", { name: "label" })) : (h("div", { class: "label-text", id: labelTextId }, label))));
444
449
  }
445
450
  /**
446
451
  * Gets any content passed into the `label` slot,
@@ -449,6 +454,30 @@ const Input = class {
449
454
  get labelSlot() {
450
455
  return this.el.querySelector('[slot="label"]');
451
456
  }
457
+ /**
458
+ * Ensures the slotted label element has an ID for aria-labelledby.
459
+ * If no ID exists, we assign one using our generated labelTextId.
460
+ */
461
+ setSlottedLabelId() {
462
+ const slottedLabel = this.labelSlot;
463
+ if (slottedLabel && !slottedLabel.id) {
464
+ slottedLabel.id = this.labelTextId;
465
+ }
466
+ }
467
+ /**
468
+ * Returns the ID to use for aria-labelledby on the native input,
469
+ * or undefined if aria-label is explicitly set (to avoid conflicts).
470
+ */
471
+ getLabelledById() {
472
+ var _a;
473
+ if (this.inheritedAttributes['aria-label']) {
474
+ return undefined;
475
+ }
476
+ if (this.label !== undefined) {
477
+ return this.labelTextId;
478
+ }
479
+ return ((_a = this.labelSlot) === null || _a === void 0 ? void 0 : _a.id) || undefined;
480
+ }
452
481
  /**
453
482
  * Returns `true` if label content is provided
454
483
  * either by a prop or a content. If you want
@@ -515,7 +544,7 @@ const Input = class {
515
544
  * TODO(FW-5592): Remove hasStartEndSlots condition
516
545
  */
517
546
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
518
- return (h(Host, { key: '97b5308021064d9e7434ef2d3d96f27045c1b0c4', class: createColorClasses(this.color, {
547
+ return (h(Host, { key: '9ba9cf425b573d2ca9ac34455a0e6b8474c4de6d', class: createColorClasses(this.color, {
519
548
  [mode]: true,
520
549
  'has-value': hasValue,
521
550
  'has-focus': hasFocus,
@@ -526,14 +555,14 @@ const Input = class {
526
555
  'in-item': inItem,
527
556
  'in-item-color': hostContext('ion-item.ion-color', this.el),
528
557
  'input-disabled': disabled,
529
- }) }, h("label", { key: '353f68726ce180299bd9adc81e5ff7d26a48f54f', class: "input-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderLabelContainer(), h("div", { key: '2034b4bad04fc157f3298a1805819216b6f439d0', class: "native-wrapper", onClick: this.onLabelClick }, h("slot", { key: '96bb5e30176b2bd76dfb75bfbf6c1c3d4403f4bb', name: "start" }), h("input", Object.assign({ key: '1a1d75b0e414a95c89d5a760757c33548d234aca', 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 && (h("button", { key: '95f3df17b7691d9a2e7dcd4a51f16a94aa3ca36f', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
558
+ }) }, h("label", { key: '74b989d0aa5ab38f29f952519868f05119df6005', class: "input-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderLabelContainer(), h("div", { key: '47f2b42e2f74ea866b4f871026e08ab375d7a726', class: "native-wrapper", onClick: this.onLabelClick }, h("slot", { key: 'eaabe5a4a329a356cac3294d15c087d0d131fff2', name: "start" }), h("input", Object.assign({ key: 'c821a984a8a9b7f96f30892c06d8deda093ff24b', 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, "aria-labelledby": this.getLabelledById() }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (h("button", { key: '62069c11016ee190dc46ab941372e1c4ad8a36ed', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
530
559
  /**
531
560
  * This prevents mobile browsers from
532
561
  * blurring the input when the clear
533
562
  * button is activated.
534
563
  */
535
564
  ev.preventDefault();
536
- }, onClick: this.clearTextInput }, h("ion-icon", { key: '16b0af75eed50c8115fb5597f73b5fbf71c2530e', "aria-hidden": "true", icon: clearIconData }))), h("slot", { key: 'c48da0f8ddb3764ac43efa705bb4a6bb2d9cc2fd', name: "end" })), shouldRenderHighlight && h("div", { key: 'f15238481fc20de56ca7ecb6e350b3c024cc755e', class: "input-highlight" })), this.renderBottomContent()));
565
+ }, onClick: this.clearTextInput }, h("ion-icon", { key: 'dd75a516d32110d85382b664c663bd41f177ce12', "aria-hidden": "true", icon: clearIconData }))), h("slot", { key: '330d4b9389f2c62223a5ee24003e96ef3e6b2473', name: "end" })), shouldRenderHighlight && h("div", { key: '8e442bed130ddc84976ab70fd3f8578d6bcc6316', class: "input-highlight" })), this.renderBottomContent()));
537
566
  }
538
567
  get el() { return getElement(this); }
539
568
  static get watchers() { return {
@@ -20,6 +20,7 @@ const TabBar = class {
20
20
  this.ionTabBarChanged = createEvent(this, "ionTabBarChanged", 7);
21
21
  this.ionTabBarLoaded = createEvent(this, "ionTabBarLoaded", 7);
22
22
  this.keyboardCtrl = null;
23
+ this.keyboardCtrlPromise = null;
23
24
  this.didLoad = false;
24
25
  this.keyboardVisible = false;
25
26
  /**
@@ -55,7 +56,7 @@ const TabBar = class {
55
56
  }
56
57
  }
57
58
  async connectedCallback() {
58
- this.keyboardCtrl = await createKeyboardController(async (keyboardOpen, waitForResize) => {
59
+ const promise = createKeyboardController(async (keyboardOpen, waitForResize) => {
59
60
  /**
60
61
  * If the keyboard is hiding, then we need to wait
61
62
  * for the webview to resize. Otherwise, the tab bar
@@ -66,21 +67,40 @@ const TabBar = class {
66
67
  }
67
68
  this.keyboardVisible = keyboardOpen; // trigger re-render by updating state
68
69
  });
70
+ this.keyboardCtrlPromise = promise;
71
+ const keyboardCtrl = await promise;
72
+ /**
73
+ * Only assign if this is still the current promise.
74
+ * Otherwise, a new connectedCallback has started or
75
+ * disconnectedCallback was called, so destroy this instance.
76
+ */
77
+ if (this.keyboardCtrlPromise === promise) {
78
+ this.keyboardCtrl = keyboardCtrl;
79
+ this.keyboardCtrlPromise = null;
80
+ }
81
+ else {
82
+ keyboardCtrl.destroy();
83
+ }
69
84
  }
70
85
  disconnectedCallback() {
86
+ if (this.keyboardCtrlPromise) {
87
+ this.keyboardCtrlPromise.then((ctrl) => ctrl.destroy());
88
+ this.keyboardCtrlPromise = null;
89
+ }
71
90
  if (this.keyboardCtrl) {
72
91
  this.keyboardCtrl.destroy();
92
+ this.keyboardCtrl = null;
73
93
  }
74
94
  }
75
95
  render() {
76
96
  const { color, translucent, keyboardVisible } = this;
77
97
  const mode = getIonMode(this);
78
98
  const shouldHide = keyboardVisible && this.el.getAttribute('slot') !== 'top';
79
- return (h(Host, { key: '388ec37ce308035bab78d6c9a016bb616e9517a9', role: "tablist", "aria-hidden": shouldHide ? 'true' : null, class: createColorClasses(color, {
99
+ return (h(Host, { key: '9daf4e2acaff6e3ce3878cf9dd5109fb1afbbebe', role: "tablist", "aria-hidden": shouldHide ? 'true' : null, class: createColorClasses(color, {
80
100
  [mode]: true,
81
101
  'tab-bar-translucent': translucent,
82
102
  'tab-bar-hidden': shouldHide,
83
- }) }, h("slot", { key: 'ce10ade2b86725e24f3254516483eeedd8ecb16a' })));
103
+ }) }, h("slot", { key: '1d15aa2da8501e8e7eff11ad4a491478be845c43' })));
84
104
  }
85
105
  get el() { return getElement(this); }
86
106
  static get watchers() { return {
@@ -449,9 +449,9 @@ const createSwipeToDismissGesture = (el, toastPosition, onDismiss) => {
449
449
  return gesture;
450
450
  };
451
451
 
452
- const toastIosCss = ":host{--border-width:0;--border-style:none;--border-color:initial;--box-shadow:none;--min-width:auto;--width:auto;--min-height:auto;--height:auto;--max-height:auto;--white-space:normal;top:0;display:block;position:absolute;width:100%;height:100%;outline:none;color:var(--color);font-family:var(--ion-font-family, inherit);contain:strict;z-index:1001;pointer-events:none}:host{inset-inline-start:0}:host(.overlay-hidden){display:none}:host(.ion-color){--button-color:inherit;color:var(--ion-color-contrast)}:host(.ion-color) .toast-button-cancel{color:inherit}:host(.ion-color) .toast-wrapper{background:var(--ion-color-base)}.toast-wrapper{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);pointer-events:auto}.toast-wrapper{inset-inline-start:var(--start);inset-inline-end:var(--end)}.toast-wrapper.toast-top{-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0);top:0}.toast-wrapper.toast-bottom{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);bottom:0}.toast-container{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;height:inherit;min-height:inherit;max-height:inherit;contain:content}.toast-layout-stacked .toast-container{-ms-flex-wrap:wrap;flex-wrap:wrap}.toast-layout-baseline .toast-content{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.toast-icon{-webkit-margin-start:16px;margin-inline-start:16px}.toast-content{min-width:0}.toast-message{-ms-flex:1;flex:1;white-space:var(--white-space)}.toast-button-group{display:-ms-flexbox;display:flex}.toast-layout-stacked .toast-button-group{-ms-flex-pack:end;justify-content:end;width:100%}.toast-button{border:0;outline:none;color:var(--button-color);z-index:0}.toast-icon,.toast-button-icon{font-size:1.4em}.toast-button-inner{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}@media (any-hover: hover){.toast-button:hover{cursor:pointer}}:host{--background:var(--ion-color-step-50, var(--ion-background-color-step-50, #f2f2f2));--border-radius:14px;--button-color:var(--ion-color-primary, #0054e9);--color:var(--ion-color-step-850, var(--ion-text-color-step-150, #262626));--max-width:700px;--max-height:478px;--start:10px;--end:10px;font-size:clamp(14px, 0.875rem, 43.4px)}.toast-wrapper{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:auto;margin-bottom:auto;display:block;position:absolute;z-index:10}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))){:host(.toast-translucent) .toast-wrapper{background:rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.8);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}:host(.ion-color.toast-translucent) .toast-wrapper{background:rgba(var(--ion-color-base-rgb), 0.8)}}.toast-wrapper.toast-middle{opacity:0.01}.toast-content{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:15px;padding-bottom:15px}.toast-header{margin-bottom:2px;font-weight:500}.toast-button{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:10px;padding-bottom:10px;min-height:44px;-webkit-transition:background-color, opacity 100ms linear;transition:background-color, opacity 100ms linear;border:0;background-color:transparent;font-family:var(--ion-font-family);font-size:clamp(17px, 1.0625rem, 21.998px);font-weight:500;overflow:hidden}.toast-button.ion-activated{opacity:0.4}@media (any-hover: hover){.toast-button:hover{opacity:0.6}}";
452
+ const toastIosCss = ":host{--border-width:0;--border-style:none;--border-color:initial;--box-shadow:none;--min-width:auto;--width:auto;--min-height:auto;--height:auto;--max-height:auto;--white-space:normal;top:0;display:block;position:absolute;width:100%;height:100%;outline:none;color:var(--color);font-family:var(--ion-font-family, inherit);contain:strict;z-index:1001;pointer-events:none}:host{inset-inline-start:0}:host(.overlay-hidden){display:none}:host(.ion-color){--button-color:inherit;color:var(--ion-color-contrast)}:host(.ion-color) .toast-button-cancel{color:inherit}:host(.ion-color) .toast-wrapper{background:var(--ion-color-base)}.toast-wrapper{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);pointer-events:auto}.toast-wrapper{inset-inline-start:var(--start);inset-inline-end:var(--end)}.toast-wrapper.toast-top{-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0);top:0}.toast-wrapper.toast-bottom{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);bottom:0}.toast-container{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;height:inherit;min-height:inherit;max-height:inherit;contain:content}.toast-layout-stacked .toast-container{-ms-flex-wrap:wrap;flex-wrap:wrap}.toast-layout-baseline .toast-content{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.toast-icon{-webkit-margin-start:16px;margin-inline-start:16px}.toast-content{-ms-flex:1;flex:1;min-width:0}.toast-message{-ms-flex:1;flex:1;white-space:var(--white-space)}.toast-button-group{display:-ms-flexbox;display:flex}.toast-layout-stacked .toast-button-group{-ms-flex-pack:end;justify-content:end;width:100%}.toast-button{border:0;outline:none;color:var(--button-color);z-index:0}.toast-icon,.toast-button-icon{font-size:1.4em}.toast-button-inner{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}@media (any-hover: hover){.toast-button:hover{cursor:pointer}}:host{--background:var(--ion-color-step-50, var(--ion-background-color-step-50, #f2f2f2));--border-radius:14px;--button-color:var(--ion-color-primary, #0054e9);--color:var(--ion-color-step-850, var(--ion-text-color-step-150, #262626));--max-width:700px;--max-height:478px;--start:10px;--end:10px;font-size:clamp(14px, 0.875rem, 43.4px)}.toast-wrapper{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:auto;margin-bottom:auto;display:block;position:absolute;z-index:10}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))){:host(.toast-translucent) .toast-wrapper{background:rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.8);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}:host(.ion-color.toast-translucent) .toast-wrapper{background:rgba(var(--ion-color-base-rgb), 0.8)}}.toast-wrapper.toast-middle{opacity:0.01}.toast-content{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:15px;padding-bottom:15px}.toast-header{margin-bottom:2px;font-weight:500}.toast-button{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:10px;padding-bottom:10px;min-height:44px;-webkit-transition:background-color, opacity 100ms linear;transition:background-color, opacity 100ms linear;border:0;background-color:transparent;font-family:var(--ion-font-family);font-size:clamp(17px, 1.0625rem, 21.998px);font-weight:500;overflow:hidden}.toast-button.ion-activated{opacity:0.4}@media (any-hover: hover){.toast-button:hover{opacity:0.6}}";
453
453
 
454
- const toastMdCss = ":host{--border-width:0;--border-style:none;--border-color:initial;--box-shadow:none;--min-width:auto;--width:auto;--min-height:auto;--height:auto;--max-height:auto;--white-space:normal;top:0;display:block;position:absolute;width:100%;height:100%;outline:none;color:var(--color);font-family:var(--ion-font-family, inherit);contain:strict;z-index:1001;pointer-events:none}:host{inset-inline-start:0}:host(.overlay-hidden){display:none}:host(.ion-color){--button-color:inherit;color:var(--ion-color-contrast)}:host(.ion-color) .toast-button-cancel{color:inherit}:host(.ion-color) .toast-wrapper{background:var(--ion-color-base)}.toast-wrapper{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);pointer-events:auto}.toast-wrapper{inset-inline-start:var(--start);inset-inline-end:var(--end)}.toast-wrapper.toast-top{-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0);top:0}.toast-wrapper.toast-bottom{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);bottom:0}.toast-container{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;height:inherit;min-height:inherit;max-height:inherit;contain:content}.toast-layout-stacked .toast-container{-ms-flex-wrap:wrap;flex-wrap:wrap}.toast-layout-baseline .toast-content{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.toast-icon{-webkit-margin-start:16px;margin-inline-start:16px}.toast-content{min-width:0}.toast-message{-ms-flex:1;flex:1;white-space:var(--white-space)}.toast-button-group{display:-ms-flexbox;display:flex}.toast-layout-stacked .toast-button-group{-ms-flex-pack:end;justify-content:end;width:100%}.toast-button{border:0;outline:none;color:var(--button-color);z-index:0}.toast-icon,.toast-button-icon{font-size:1.4em}.toast-button-inner{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}@media (any-hover: hover){.toast-button:hover{cursor:pointer}}:host{--background:var(--ion-color-step-800, var(--ion-background-color-step-800, #333333));--border-radius:4px;--box-shadow:0 3px 5px -1px rgba(0, 0, 0, 0.2), 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12);--button-color:var(--ion-color-primary, #0054e9);--color:var(--ion-color-step-50, var(--ion-text-color-step-950, #f2f2f2));--max-width:700px;--start:8px;--end:8px;font-size:0.875rem}.toast-wrapper{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:auto;margin-bottom:auto;display:block;position:absolute;opacity:0.01;z-index:10}.toast-content{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:14px;padding-bottom:14px}.toast-header{margin-bottom:2px;font-weight:500;line-height:1.25rem}.toast-message{line-height:1.25rem}.toast-layout-baseline .toast-button-group-start{-webkit-margin-start:8px;margin-inline-start:8px}.toast-layout-stacked .toast-button-group-start{-webkit-margin-end:8px;margin-inline-end:8px;margin-top:8px}.toast-layout-baseline .toast-button-group-end{-webkit-margin-end:8px;margin-inline-end:8px}.toast-layout-stacked .toast-button-group-end{-webkit-margin-end:8px;margin-inline-end:8px;margin-bottom:8px}.toast-button{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:10px;padding-bottom:10px;position:relative;background-color:transparent;font-family:var(--ion-font-family);font-size:0.875rem;font-weight:500;letter-spacing:0.84px;text-transform:uppercase;overflow:hidden}.toast-button-cancel{color:var(--ion-color-step-100, var(--ion-text-color-step-900, #e6e6e6))}.toast-button-icon-only{border-radius:50%;-webkit-padding-start:9px;padding-inline-start:9px;-webkit-padding-end:9px;padding-inline-end:9px;padding-top:9px;padding-bottom:9px;width:36px;height:36px}@media (any-hover: hover){.toast-button:hover{background-color:rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.08)}.toast-button-cancel:hover{background-color:rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.08)}}";
454
+ const toastMdCss = ":host{--border-width:0;--border-style:none;--border-color:initial;--box-shadow:none;--min-width:auto;--width:auto;--min-height:auto;--height:auto;--max-height:auto;--white-space:normal;top:0;display:block;position:absolute;width:100%;height:100%;outline:none;color:var(--color);font-family:var(--ion-font-family, inherit);contain:strict;z-index:1001;pointer-events:none}:host{inset-inline-start:0}:host(.overlay-hidden){display:none}:host(.ion-color){--button-color:inherit;color:var(--ion-color-contrast)}:host(.ion-color) .toast-button-cancel{color:inherit}:host(.ion-color) .toast-wrapper{background:var(--ion-color-base)}.toast-wrapper{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);pointer-events:auto}.toast-wrapper{inset-inline-start:var(--start);inset-inline-end:var(--end)}.toast-wrapper.toast-top{-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0);top:0}.toast-wrapper.toast-bottom{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);bottom:0}.toast-container{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;height:inherit;min-height:inherit;max-height:inherit;contain:content}.toast-layout-stacked .toast-container{-ms-flex-wrap:wrap;flex-wrap:wrap}.toast-layout-baseline .toast-content{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.toast-icon{-webkit-margin-start:16px;margin-inline-start:16px}.toast-content{-ms-flex:1;flex:1;min-width:0}.toast-message{-ms-flex:1;flex:1;white-space:var(--white-space)}.toast-button-group{display:-ms-flexbox;display:flex}.toast-layout-stacked .toast-button-group{-ms-flex-pack:end;justify-content:end;width:100%}.toast-button{border:0;outline:none;color:var(--button-color);z-index:0}.toast-icon,.toast-button-icon{font-size:1.4em}.toast-button-inner{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}@media (any-hover: hover){.toast-button:hover{cursor:pointer}}:host{--background:var(--ion-color-step-800, var(--ion-background-color-step-800, #333333));--border-radius:4px;--box-shadow:0 3px 5px -1px rgba(0, 0, 0, 0.2), 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12);--button-color:var(--ion-color-primary, #0054e9);--color:var(--ion-color-step-50, var(--ion-text-color-step-950, #f2f2f2));--max-width:700px;--start:8px;--end:8px;font-size:0.875rem}.toast-wrapper{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:auto;margin-bottom:auto;display:block;position:absolute;opacity:0.01;z-index:10}.toast-content{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:14px;padding-bottom:14px}.toast-header{margin-bottom:2px;font-weight:500;line-height:1.25rem}.toast-message{line-height:1.25rem}.toast-layout-baseline .toast-button-group-start{-webkit-margin-start:8px;margin-inline-start:8px}.toast-layout-stacked .toast-button-group-start{-webkit-margin-end:8px;margin-inline-end:8px;margin-top:8px}.toast-layout-baseline .toast-button-group-end{-webkit-margin-end:8px;margin-inline-end:8px}.toast-layout-stacked .toast-button-group-end{-webkit-margin-end:8px;margin-inline-end:8px;margin-bottom:8px}.toast-button{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:10px;padding-bottom:10px;position:relative;background-color:transparent;font-family:var(--ion-font-family);font-size:0.875rem;font-weight:500;letter-spacing:0.84px;text-transform:uppercase;overflow:hidden}.toast-button-cancel{color:var(--ion-color-step-100, var(--ion-text-color-step-900, #e6e6e6))}.toast-button-icon-only{border-radius:50%;-webkit-padding-start:9px;padding-inline-start:9px;-webkit-padding-end:9px;padding-inline-end:9px;padding-top:9px;padding-bottom:9px;width:36px;height:36px}@media (any-hover: hover){.toast-button:hover{background-color:rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.08)}.toast-button-cancel:hover{background-color:rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.08)}}";
455
455
 
456
456
  const Toast = class {
457
457
  constructor(hostRef) {