@ionic/core 8.7.18-nightly.20260218 → 8.7.18-nightly.20260219

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 (47) hide show
  1. package/components/content.js +7 -3
  2. package/components/ion-app.js +16 -11
  3. package/components/ion-datetime.js +6 -3
  4. package/components/ion-fab-list.js +10 -3
  5. package/components/ion-img.js +11 -2
  6. package/components/ion-searchbar.js +17 -6
  7. package/components/label.js +8 -3
  8. package/dist/cjs/ion-app_8.cjs.entry.js +22 -13
  9. package/dist/cjs/ion-datetime_3.cjs.entry.js +6 -3
  10. package/dist/cjs/ion-fab_3.cjs.entry.js +10 -3
  11. package/dist/cjs/ion-img.cjs.entry.js +11 -2
  12. package/dist/cjs/ion-item_8.cjs.entry.js +8 -3
  13. package/dist/cjs/ion-searchbar.cjs.entry.js +17 -6
  14. package/dist/collection/components/app/app.js +15 -10
  15. package/dist/collection/components/content/content.js +7 -3
  16. package/dist/collection/components/datetime/datetime.js +6 -3
  17. package/dist/collection/components/fab-list/fab-list.js +10 -3
  18. package/dist/collection/components/img/img.js +11 -2
  19. package/dist/collection/components/label/label.js +8 -3
  20. package/dist/collection/components/searchbar/searchbar.js +17 -6
  21. package/dist/docs.json +1 -1
  22. package/dist/esm/ion-app_8.entry.js +24 -15
  23. package/dist/esm/ion-datetime_3.entry.js +6 -3
  24. package/dist/esm/ion-fab_3.entry.js +10 -3
  25. package/dist/esm/ion-img.entry.js +11 -2
  26. package/dist/esm/ion-item_8.entry.js +8 -3
  27. package/dist/esm/ion-searchbar.entry.js +17 -6
  28. package/dist/ionic/ionic.esm.js +1 -1
  29. package/dist/ionic/p-3ff66221.entry.js +4 -0
  30. package/dist/ionic/p-7cad388a.entry.js +4 -0
  31. package/dist/ionic/p-805cf662.entry.js +4 -0
  32. package/dist/ionic/p-e2c8efa4.entry.js +4 -0
  33. package/dist/ionic/{p-6241ce47.entry.js → p-e81e5ab3.entry.js} +1 -1
  34. package/dist/ionic/{p-6444c606.entry.js → p-f9f7b9db.entry.js} +1 -1
  35. package/dist/types/components/app/app.d.ts +3 -0
  36. package/dist/types/components/datetime/datetime.d.ts +1 -0
  37. package/dist/types/components/fab-list/fab-list.d.ts +2 -0
  38. package/dist/types/components/img/img.d.ts +2 -0
  39. package/dist/types/components/label/label.d.ts +2 -0
  40. package/dist/types/components/searchbar/searchbar.d.ts +3 -0
  41. package/hydrate/index.js +73 -21
  42. package/hydrate/index.mjs +73 -21
  43. package/package.json +1 -1
  44. package/dist/ionic/p-074839fc.entry.js +0 -4
  45. package/dist/ionic/p-1ccd6829.entry.js +0 -4
  46. package/dist/ionic/p-46d74291.entry.js +0 -4
  47. package/dist/ionic/p-c19af093.entry.js +0 -4
@@ -134,6 +134,10 @@ const Content = /*@__PURE__*/ proxyCustomElement(class Content extends HTMLEleme
134
134
  this.tabsElement = null;
135
135
  this.tabsLoadCallback = undefined;
136
136
  }
137
+ if (this.resizeTimeout) {
138
+ clearTimeout(this.resizeTimeout);
139
+ this.resizeTimeout = null;
140
+ }
137
141
  }
138
142
  /**
139
143
  * Rotating certain devices can update
@@ -372,7 +376,7 @@ const Content = /*@__PURE__*/ proxyCustomElement(class Content extends HTMLEleme
372
376
  const forceOverscroll = this.shouldForceOverscroll();
373
377
  const transitionShadow = mode === 'ios';
374
378
  this.resize();
375
- return (h(Host, Object.assign({ key: 'cd8781f848d8dc926fe66f43d43c49564425a507', role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
379
+ return (h(Host, Object.assign({ key: '287f5bb78888b0f66394a35ba2a3ad636d8f3412', role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
376
380
  [mode]: true,
377
381
  'content-sizing': hostContext('ion-popover', this.el),
378
382
  overscroll: forceOverscroll,
@@ -380,12 +384,12 @@ const Content = /*@__PURE__*/ proxyCustomElement(class Content extends HTMLEleme
380
384
  }), style: {
381
385
  '--offset-top': `${this.cTop}px`,
382
386
  '--offset-bottom': `${this.cBottom}px`,
383
- } }, inheritedAttributes), h("div", { key: '95b112d7cae30f22ef778ceffb88edb4d941c170', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? h("slot", { name: "fixed" }) : null, h("div", { key: '2fdfcbc39fb66f11b6191911f2941c660f4c12e5', class: {
387
+ } }, inheritedAttributes), h("div", { key: '2e70e5e0ab4209478ea711a630058fa0e83af7f8', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? h("slot", { name: "fixed" }) : null, h("div", { key: '018a83406173ec7f7725f09b4bd1c0d964874ee4', class: {
384
388
  'inner-scroll': true,
385
389
  'scroll-x': scrollX,
386
390
  'scroll-y': scrollY,
387
391
  overscroll: (scrollX || scrollY) && forceOverscroll,
388
- }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: '6bc77e0054ec8e21635a7f2abfe0ca46e0962e03' })), transitionShadow ? (h("div", { class: "transition-effect" }, h("div", { class: "transition-cover" }), h("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? h("slot", { name: "fixed" }) : null));
392
+ }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: '6f028eeb7c9dc7e1b82a8e549e1dd8aaf1d15fca' })), transitionShadow ? (h("div", { class: "transition-effect" }, h("div", { class: "transition-cover" }), h("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? h("slot", { name: "fixed" }) : null));
389
393
  }
390
394
  get el() { return this; }
391
395
  static get style() { return contentCss; }
@@ -4,7 +4,7 @@
4
4
  import { proxyCustomElement, HTMLElement, Build, h, Host } from '@stencil/core/internal/client';
5
5
  import { shouldUseCloseWatcher } from './hardware-back-button.js';
6
6
  import { c as config, p as printIonWarning } from './index4.js';
7
- import { b as getIonMode, a as isPlatform } from './ionic-global.js';
7
+ import { a as isPlatform, b as getIonMode } from './ionic-global.js';
8
8
 
9
9
  const appCss = "html.plt-mobile ion-app{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.plt-mobile ion-app [contenteditable]{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}ion-app.force-statusbar-padding{--ion-safe-area-top:20px}";
10
10
 
@@ -17,7 +17,7 @@ const App = /*@__PURE__*/ proxyCustomElement(class App extends HTMLElement {
17
17
  }
18
18
  componentDidLoad() {
19
19
  if (Build.isBrowser) {
20
- rIC(async () => {
20
+ this.rIC(async () => {
21
21
  const isHybrid = isPlatform(window, 'hybrid');
22
22
  if (!config.getBoolean('_testing')) {
23
23
  import('./index7.js').then((module) => module.startTapClick(config));
@@ -55,6 +55,11 @@ const App = /*@__PURE__*/ proxyCustomElement(class App extends HTMLElement {
55
55
  });
56
56
  }
57
57
  }
58
+ disconnectedCallback() {
59
+ if (this.loadTimeout) {
60
+ clearTimeout(this.loadTimeout);
61
+ }
62
+ }
58
63
  /**
59
64
  * Used to set focus on an element that uses `ion-focusable`.
60
65
  * Do not use this if focusing the element as a result of a keyboard
@@ -71,9 +76,17 @@ const App = /*@__PURE__*/ proxyCustomElement(class App extends HTMLElement {
71
76
  this.focusVisible.setFocus(elements);
72
77
  }
73
78
  }
79
+ rIC(callback) {
80
+ if ('requestIdleCallback' in window) {
81
+ window.requestIdleCallback(callback);
82
+ }
83
+ else {
84
+ this.loadTimeout = setTimeout(callback, 32);
85
+ }
86
+ }
74
87
  render() {
75
88
  const mode = getIonMode(this);
76
- return (h(Host, { key: '9be440c65819e4fa67c2c3c6477ab40b3ad3eed3', class: {
89
+ return (h(Host, { key: '77a7459d3e42b3715a5a7e1cf468e2ebc99e54bb', class: {
77
90
  [mode]: true,
78
91
  'ion-page': true,
79
92
  'force-statusbar-padding': config.getBoolean('_forceStatusbarPadding'),
@@ -103,14 +116,6 @@ const needInputShims = () => {
103
116
  }
104
117
  return false;
105
118
  };
106
- const rIC = (callback) => {
107
- if ('requestIdleCallback' in window) {
108
- window.requestIdleCallback(callback);
109
- }
110
- else {
111
- setTimeout(callback, 32);
112
- }
113
- };
114
119
  function defineCustomElement$1() {
115
120
  if (typeof customElements === "undefined") {
116
121
  return;
@@ -1089,6 +1089,9 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
1089
1089
  this.clearFocusVisible();
1090
1090
  this.clearFocusVisible = undefined;
1091
1091
  }
1092
+ if (this.loadTimeout) {
1093
+ clearTimeout(this.loadTimeout);
1094
+ }
1092
1095
  }
1093
1096
  initializeListeners() {
1094
1097
  this.initializeCalendarListener();
@@ -1137,7 +1140,7 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
1137
1140
  *
1138
1141
  * We schedule this after everything has had a chance to run.
1139
1142
  */
1140
- setTimeout(() => {
1143
+ this.loadTimeout = setTimeout(() => {
1141
1144
  this.ensureReadyIfVisible();
1142
1145
  }, 100);
1143
1146
  /**
@@ -1895,7 +1898,7 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
1895
1898
  const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
1896
1899
  const hasWheelVariant = hasDatePresentation && preferWheel;
1897
1900
  renderHiddenInput(true, el, name, formatValue(value), disabled);
1898
- return (h(Host, { key: 'efdbc0922670a841bc667ceac392cdc1dedffd01', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses(color, {
1901
+ return (h(Host, { key: 'b81c3531f4654be3f6948df5f790c0f6ab488000', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses(color, {
1899
1902
  [mode]: true,
1900
1903
  ['datetime-readonly']: readonly,
1901
1904
  ['datetime-disabled']: disabled,
@@ -1905,7 +1908,7 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
1905
1908
  [`datetime-size-${size}`]: true,
1906
1909
  [`datetime-prefer-wheel`]: hasWheelVariant,
1907
1910
  [`datetime-grid`]: isGridStyle,
1908
- })) }, h("div", { key: '3f8bb75fcb0baff55182ef3aa1b535eacc58d81f', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
1911
+ })) }, h("div", { key: 'f7f39f8e56146186210d0ab70ae95e829573e549', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
1909
1912
  }
1910
1913
  get el() { return this; }
1911
1914
  static get watchers() { return {
@@ -13,6 +13,7 @@ const FabList = /*@__PURE__*/ proxyCustomElement(class FabList extends HTMLEleme
13
13
  this.__registerHost();
14
14
  }
15
15
  this.__attachShadow();
16
+ this.activateTimeouts = [];
16
17
  /**
17
18
  * If `true`, the fab list will show all fab buttons in the list.
18
19
  */
@@ -23,20 +24,26 @@ const FabList = /*@__PURE__*/ proxyCustomElement(class FabList extends HTMLEleme
23
24
  this.side = 'bottom';
24
25
  }
25
26
  activatedChanged(activated) {
27
+ this.activateTimeouts.forEach(clearTimeout);
28
+ this.activateTimeouts = [];
26
29
  const fabs = Array.from(this.el.querySelectorAll('ion-fab-button'));
27
30
  // if showing the fabs add a timeout, else show immediately
28
31
  const timeout = activated ? 30 : 0;
29
32
  fabs.forEach((fab, i) => {
30
- setTimeout(() => (fab.show = activated), i * timeout);
33
+ this.activateTimeouts.push(setTimeout(() => (fab.show = activated), i * timeout));
31
34
  });
32
35
  }
36
+ disconnectedCallback() {
37
+ this.activateTimeouts.forEach(clearTimeout);
38
+ this.activateTimeouts = [];
39
+ }
33
40
  render() {
34
41
  const mode = getIonMode(this);
35
- return (h(Host, { key: '64b33366447f66c7f979cfac56307fbb1a6fac1c', class: {
42
+ return (h(Host, { key: '03a8920c29a93c6df4bab14753a78a8a30722ce8', class: {
36
43
  [mode]: true,
37
44
  'fab-list-active': this.activated,
38
45
  [`fab-list-side-${this.side}`]: true,
39
- } }, h("slot", { key: 'd9f474f7f20fd7e813db358fddc720534ca05bb6' })));
46
+ } }, h("slot", { key: 'd9e1541cb044e209bc2dff14080f3b938a2b84ae' })));
40
47
  }
41
48
  get el() { return this; }
42
49
  static get watchers() { return {
@@ -34,7 +34,16 @@ const Img = /*@__PURE__*/ proxyCustomElement(class Img extends HTMLElement {
34
34
  componentDidLoad() {
35
35
  this.addIO();
36
36
  }
37
+ disconnectedCallback() {
38
+ if (this.loadTimeout) {
39
+ clearTimeout(this.loadTimeout);
40
+ }
41
+ }
37
42
  addIO() {
43
+ if (this.loadTimeout) {
44
+ clearTimeout(this.loadTimeout);
45
+ this.loadTimeout = undefined;
46
+ }
38
47
  if (this.src === undefined) {
39
48
  return;
40
49
  }
@@ -58,7 +67,7 @@ const Img = /*@__PURE__*/ proxyCustomElement(class Img extends HTMLElement {
58
67
  }
59
68
  else {
60
69
  // fall back to setTimeout for Safari and IE
61
- setTimeout(() => this.load(), 200);
70
+ this.loadTimeout = setTimeout(() => this.load(), 200);
62
71
  }
63
72
  }
64
73
  load() {
@@ -75,7 +84,7 @@ const Img = /*@__PURE__*/ proxyCustomElement(class Img extends HTMLElement {
75
84
  render() {
76
85
  const { loadSrc, alt, onLoad, loadError, inheritedAttributes } = this;
77
86
  const { draggable } = inheritedAttributes;
78
- return (h(Host, { key: 'da600442894427dee1974a28e545613afac69fca', class: getIonMode(this) }, h("img", { key: '16df0c7069af86c0fa7ce5af598bc0f63b4eb71a', decoding: "async", src: loadSrc, alt: alt, onLoad: onLoad, onError: loadError, part: "image", draggable: isDraggable(draggable) })));
87
+ return (h(Host, { key: '9bfaa659b0680189fd29f3acb2fdce7f70be6060', class: getIonMode(this) }, h("img", { key: 'd484beae0d5cbe0406958bfad40cdd6c05625340', decoding: "async", src: loadSrc, alt: alt, onLoad: onLoad, onError: loadError, part: "image", draggable: isDraggable(draggable) })));
79
88
  }
80
89
  get el() { return this; }
81
90
  static get watchers() { return {
@@ -110,11 +110,14 @@ const Searchbar = /*@__PURE__*/ proxyCustomElement(class Searchbar extends HTMLE
110
110
  * Clears the input field and triggers the control change.
111
111
  */
112
112
  this.onClearInput = async (shouldFocus) => {
113
+ if (this.clearTimeout) {
114
+ clearTimeout(this.clearTimeout);
115
+ }
113
116
  this.ionClear.emit();
114
117
  return new Promise((resolve) => {
115
118
  // setTimeout() fixes https://github.com/ionic-team/ionic-framework/issues/7527
116
119
  // wait for 4 frames
117
- setTimeout(() => {
120
+ this.clearTimeout = setTimeout(() => {
118
121
  const value = this.getValue();
119
122
  if (value !== '') {
120
123
  this.value = '';
@@ -249,10 +252,18 @@ const Searchbar = /*@__PURE__*/ proxyCustomElement(class Searchbar extends HTMLE
249
252
  this.originalIonInput = this.ionInput;
250
253
  this.positionElements();
251
254
  this.debounceChanged();
252
- setTimeout(() => {
255
+ this.loadTimeout = setTimeout(() => {
253
256
  this.noAnimate = false;
254
257
  }, 300);
255
258
  }
259
+ disconnectedCallback() {
260
+ if (this.loadTimeout) {
261
+ clearTimeout(this.loadTimeout);
262
+ }
263
+ if (this.clearTimeout) {
264
+ clearTimeout(this.clearTimeout);
265
+ }
266
+ }
256
267
  emitStyle() {
257
268
  this.ionStyle.emit({
258
269
  searchbar: true,
@@ -441,8 +452,8 @@ const Searchbar = /*@__PURE__*/ proxyCustomElement(class Searchbar extends HTMLE
441
452
  const clearIcon = this.clearIcon || (mode === 'ios' ? closeCircle : closeSharp);
442
453
  const searchIcon = this.searchIcon || (mode === 'ios' ? searchOutline : searchSharp);
443
454
  const shouldShowCancelButton = this.shouldShowCancelButton();
444
- const cancelButton = this.showCancelButton !== 'never' && (h("button", { key: '19e18775856db87daeb4b9e3d7bca0461915a0df', "aria-label": cancelButtonText, "aria-hidden": shouldShowCancelButton ? undefined : 'true', type: "button", tabIndex: mode === 'ios' && !shouldShowCancelButton ? -1 : undefined, onMouseDown: this.onCancelSearchbar, onTouchStart: this.onCancelSearchbar, class: "searchbar-cancel-button" }, h("div", { key: 'b3bbdcc033f3bd3441d619e4a252cef0dad4d07e', "aria-hidden": "true" }, mode === 'md' ? (h("ion-icon", { "aria-hidden": "true", mode: mode, icon: this.cancelButtonIcon, lazy: false })) : (cancelButtonText))));
445
- return (h(Host, { key: '074aa60e051bfb3225e87d44bbb6346c59c73574', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: createColorClasses(this.color, {
455
+ const cancelButton = this.showCancelButton !== 'never' && (h("button", { key: '95c145052574faeb35dc2529302c93155889e2e9', "aria-label": cancelButtonText, "aria-hidden": shouldShowCancelButton ? undefined : 'true', type: "button", tabIndex: mode === 'ios' && !shouldShowCancelButton ? -1 : undefined, onMouseDown: this.onCancelSearchbar, onTouchStart: this.onCancelSearchbar, class: "searchbar-cancel-button" }, h("div", { key: 'e937413cee6c03f39c6b251fe4a05e151665276b', "aria-hidden": "true" }, mode === 'md' ? (h("ion-icon", { "aria-hidden": "true", mode: mode, icon: this.cancelButtonIcon, lazy: false })) : (cancelButtonText))));
456
+ return (h(Host, { key: '475038e23abdfeaf09d3ea89e0fa329a10fd4164', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: createColorClasses(this.color, {
446
457
  [mode]: true,
447
458
  'searchbar-animated': animated,
448
459
  'searchbar-disabled': this.disabled,
@@ -452,14 +463,14 @@ const Searchbar = /*@__PURE__*/ proxyCustomElement(class Searchbar extends HTMLE
452
463
  'searchbar-has-focus': this.focused,
453
464
  'searchbar-should-show-clear': this.shouldShowClearButton(),
454
465
  'searchbar-should-show-cancel': this.shouldShowCancelButton(),
455
- }) }, h("div", { key: '54f58a79fe36e85d9295157303f1be89c98bbdaf', class: "searchbar-input-container" }, h("input", Object.assign({ key: 'f991a37fcf54d26b7ad10d89084764e03d97b9de', "aria-label": "search text", disabled: this.disabled, ref: (el) => (this.nativeInput = el), class: "searchbar-input", inputMode: this.inputmode, enterKeyHint: this.enterkeyhint, name: this.name, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, minLength: this.minlength, maxLength: this.maxlength, placeholder: this.placeholder, type: this.type, value: this.getValue(), autoCapitalize: autocapitalize === 'default' ? undefined : autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, spellcheck: this.spellcheck }, this.inheritedAttributes)), mode === 'md' && cancelButton, h("ion-icon", { key: '8b44dd90a3292c5cf872ef16a8520675f5673494', "aria-hidden": "true", mode: mode, icon: searchIcon, lazy: false, class: "searchbar-search-icon" }), h("button", { key: '79d9cfed8f01268044f82811a35d323a12dca749', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
466
+ }) }, h("div", { key: 'f17bf0705bf44f84794ff871aadd58c05fdf1f11', class: "searchbar-input-container" }, h("input", Object.assign({ key: '1ec519e2128d74b647827f4d49d3bee532cdab03', "aria-label": "search text", disabled: this.disabled, ref: (el) => (this.nativeInput = el), class: "searchbar-input", inputMode: this.inputmode, enterKeyHint: this.enterkeyhint, name: this.name, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, minLength: this.minlength, maxLength: this.maxlength, placeholder: this.placeholder, type: this.type, value: this.getValue(), autoCapitalize: autocapitalize === 'default' ? undefined : autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, spellcheck: this.spellcheck }, this.inheritedAttributes)), mode === 'md' && cancelButton, h("ion-icon", { key: '9c131bc107b5e45318aed9df4eb6ce07df990d0a', "aria-hidden": "true", mode: mode, icon: searchIcon, lazy: false, class: "searchbar-search-icon" }), h("button", { key: '45a2fdd52be212d80d32a1ae6b2c8f443038d5bc', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
456
467
  /**
457
468
  * This prevents mobile browsers from
458
469
  * blurring the input when the clear
459
470
  * button is activated.
460
471
  */
461
472
  ev.preventDefault();
462
- }, onClick: () => this.onClearInput(true) }, h("ion-icon", { key: 'aa3b9fa8a61f853236783ac7bcd0b113ea65ece2', "aria-hidden": "true", mode: mode, icon: clearIcon, lazy: false, class: "searchbar-clear-icon" }))), mode === 'ios' && cancelButton));
473
+ }, onClick: () => this.onClearInput(true) }, h("ion-icon", { key: 'ad2e605d1d37118ea80abfca3fd9238ed112a625', "aria-hidden": "true", mode: mode, icon: clearIcon, lazy: false, class: "searchbar-clear-icon" }))), mode === 'ios' && cancelButton));
463
474
  }
464
475
  get el() { return this; }
465
476
  static get watchers() { return {
@@ -28,11 +28,16 @@ const Label = /*@__PURE__*/ proxyCustomElement(class Label extends HTMLElement {
28
28
  }
29
29
  componentDidLoad() {
30
30
  if (this.noAnimate) {
31
- setTimeout(() => {
31
+ this.loadTimeout = setTimeout(() => {
32
32
  this.noAnimate = false;
33
33
  }, 1000);
34
34
  }
35
35
  }
36
+ disconnectedCallback() {
37
+ if (this.loadTimeout) {
38
+ clearTimeout(this.loadTimeout);
39
+ }
40
+ }
36
41
  colorChanged() {
37
42
  this.emitColor();
38
43
  }
@@ -61,13 +66,13 @@ const Label = /*@__PURE__*/ proxyCustomElement(class Label extends HTMLElement {
61
66
  render() {
62
67
  const position = this.position;
63
68
  const mode = getIonMode(this);
64
- return (h(Host, { key: 'd6fba1a97189acc8ddfd64a2f009954a3e46e188', class: createColorClasses(this.color, {
69
+ return (h(Host, { key: '6c88acd0f6595b14a0d80b86c95b6e7950d12258', class: createColorClasses(this.color, {
65
70
  [mode]: true,
66
71
  'in-item-color': hostContext('ion-item.ion-color', this.el),
67
72
  [`label-${position}`]: position !== undefined,
68
73
  [`label-no-animate`]: this.noAnimate,
69
74
  'label-rtl': document.dir === 'rtl',
70
- }) }, h("slot", { key: 'ce0ab50b5700398fdf50f36d02b7ad287eb71481' })));
75
+ }) }, h("slot", { key: 'a8db21737719e9a059a5671d968fa285f09afd2a' })));
71
76
  }
72
77
  get el() { return this; }
73
78
  static get watchers() { return {
@@ -27,7 +27,7 @@ const App = class {
27
27
  }
28
28
  componentDidLoad() {
29
29
  {
30
- rIC(async () => {
30
+ this.rIC(async () => {
31
31
  const isHybrid = ionicGlobal.isPlatform(window, 'hybrid');
32
32
  if (!index.config.getBoolean('_testing')) {
33
33
  Promise.resolve().then(function () { return require('./index-C534ULug.js'); }).then((module) => module.startTapClick(index.config));
@@ -65,6 +65,11 @@ const App = class {
65
65
  });
66
66
  }
67
67
  }
68
+ disconnectedCallback() {
69
+ if (this.loadTimeout) {
70
+ clearTimeout(this.loadTimeout);
71
+ }
72
+ }
68
73
  /**
69
74
  * Used to set focus on an element that uses `ion-focusable`.
70
75
  * Do not use this if focusing the element as a result of a keyboard
@@ -81,9 +86,17 @@ const App = class {
81
86
  this.focusVisible.setFocus(elements);
82
87
  }
83
88
  }
89
+ rIC(callback) {
90
+ if ('requestIdleCallback' in window) {
91
+ window.requestIdleCallback(callback);
92
+ }
93
+ else {
94
+ this.loadTimeout = setTimeout(callback, 32);
95
+ }
96
+ }
84
97
  render() {
85
98
  const mode = ionicGlobal.getIonMode(this);
86
- return (index.h(index.Host, { key: '9be440c65819e4fa67c2c3c6477ab40b3ad3eed3', class: {
99
+ return (index.h(index.Host, { key: '77a7459d3e42b3715a5a7e1cf468e2ebc99e54bb', class: {
87
100
  [mode]: true,
88
101
  'ion-page': true,
89
102
  'force-statusbar-padding': index.config.getBoolean('_forceStatusbarPadding'),
@@ -110,14 +123,6 @@ const needInputShims = () => {
110
123
  }
111
124
  return false;
112
125
  };
113
- const rIC = (callback) => {
114
- if ('requestIdleCallback' in window) {
115
- window.requestIdleCallback(callback);
116
- }
117
- else {
118
- setTimeout(callback, 32);
119
- }
120
- };
121
126
  App.style = appCss;
122
127
 
123
128
  const buttonsIosCss = ".sc-ion-buttons-ios-h{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:99}.sc-ion-buttons-ios-s ion-button{--padding-top:0;--padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.sc-ion-buttons-ios-s ion-button{--padding-top:3px;--padding-bottom:3px;--padding-start:5px;--padding-end:5px;-webkit-margin-start:2px;margin-inline-start:2px;-webkit-margin-end:2px;margin-inline-end:2px;min-height:32px}.sc-ion-buttons-ios-s .button-has-icon-only{--padding-top:0;--padding-bottom:0}.sc-ion-buttons-ios-s ion-button:not(.button-round){--border-radius:4px}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button{--color:initial;--border-color:initial;--background-focused:var(--ion-color-contrast)}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button-solid,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button-solid{--background:var(--ion-color-contrast);--background-focused:#000;--background-focused-opacity:.12;--background-activated:#000;--background-activated-opacity:.12;--background-hover:var(--ion-color-base);--background-hover-opacity:0.45;--color:var(--ion-color-base);--color-focused:var(--ion-color-base)}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button-clear,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button-clear{--color-activated:var(--ion-color-contrast);--color-focused:var(--ion-color-contrast)}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button-outline,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button-outline{--color-activated:var(--ion-color-base);--color-focused:var(--ion-color-contrast);--background-activated:var(--ion-color-contrast)}.sc-ion-buttons-ios-s .button-clear,.sc-ion-buttons-ios-s .button-outline{--background-activated:transparent;--background-focused:currentColor;--background-hover:transparent}.sc-ion-buttons-ios-s .button-solid:not(.ion-color){--background-focused:#000;--background-focused-opacity:.12;--background-activated:#000;--background-activated-opacity:.12}.sc-ion-buttons-ios-s ion-icon[slot=start]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-margin-end:0.3em;margin-inline-end:0.3em;font-size:1.41em;line-height:0.67}.sc-ion-buttons-ios-s ion-icon[slot=end]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-margin-start:0.4em;margin-inline-start:0.4em;font-size:1.41em;line-height:0.67}.sc-ion-buttons-ios-s ion-icon[slot=icon-only]{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;font-size:1.65em;line-height:0.67}";
@@ -277,6 +282,10 @@ const Content = class {
277
282
  this.tabsElement = null;
278
283
  this.tabsLoadCallback = undefined;
279
284
  }
285
+ if (this.resizeTimeout) {
286
+ clearTimeout(this.resizeTimeout);
287
+ this.resizeTimeout = null;
288
+ }
280
289
  }
281
290
  /**
282
291
  * Rotating certain devices can update
@@ -515,7 +524,7 @@ const Content = class {
515
524
  const forceOverscroll = this.shouldForceOverscroll();
516
525
  const transitionShadow = mode === 'ios';
517
526
  this.resize();
518
- return (index.h(index.Host, Object.assign({ key: 'cd8781f848d8dc926fe66f43d43c49564425a507', role: isMainContent ? 'main' : undefined, class: theme.createColorClasses(this.color, {
527
+ return (index.h(index.Host, Object.assign({ key: '287f5bb78888b0f66394a35ba2a3ad636d8f3412', role: isMainContent ? 'main' : undefined, class: theme.createColorClasses(this.color, {
519
528
  [mode]: true,
520
529
  'content-sizing': theme.hostContext('ion-popover', this.el),
521
530
  overscroll: forceOverscroll,
@@ -523,12 +532,12 @@ const Content = class {
523
532
  }), style: {
524
533
  '--offset-top': `${this.cTop}px`,
525
534
  '--offset-bottom': `${this.cBottom}px`,
526
- } }, inheritedAttributes), index.h("div", { key: '95b112d7cae30f22ef778ceffb88edb4d941c170', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? index.h("slot", { name: "fixed" }) : null, index.h("div", { key: '2fdfcbc39fb66f11b6191911f2941c660f4c12e5', class: {
535
+ } }, inheritedAttributes), index.h("div", { key: '2e70e5e0ab4209478ea711a630058fa0e83af7f8', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? index.h("slot", { name: "fixed" }) : null, index.h("div", { key: '018a83406173ec7f7725f09b4bd1c0d964874ee4', class: {
527
536
  'inner-scroll': true,
528
537
  'scroll-x': scrollX,
529
538
  'scroll-y': scrollY,
530
539
  overscroll: (scrollX || scrollY) && forceOverscroll,
531
- }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, index.h("slot", { key: '6bc77e0054ec8e21635a7f2abfe0ca46e0962e03' })), transitionShadow ? (index.h("div", { class: "transition-effect" }, index.h("div", { class: "transition-cover" }), index.h("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? index.h("slot", { name: "fixed" }) : null));
540
+ }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, index.h("slot", { key: '6f028eeb7c9dc7e1b82a8e549e1dd8aaf1d15fca' })), transitionShadow ? (index.h("div", { class: "transition-effect" }, index.h("div", { class: "transition-cover" }), index.h("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? index.h("slot", { name: "fixed" }) : null));
532
541
  }
533
542
  get el() { return index.getElement(this); }
534
543
  };
@@ -1085,6 +1085,9 @@ const Datetime = class {
1085
1085
  this.clearFocusVisible();
1086
1086
  this.clearFocusVisible = undefined;
1087
1087
  }
1088
+ if (this.loadTimeout) {
1089
+ clearTimeout(this.loadTimeout);
1090
+ }
1088
1091
  }
1089
1092
  initializeListeners() {
1090
1093
  this.initializeCalendarListener();
@@ -1133,7 +1136,7 @@ const Datetime = class {
1133
1136
  *
1134
1137
  * We schedule this after everything has had a chance to run.
1135
1138
  */
1136
- setTimeout(() => {
1139
+ this.loadTimeout = setTimeout(() => {
1137
1140
  this.ensureReadyIfVisible();
1138
1141
  }, 100);
1139
1142
  /**
@@ -1891,7 +1894,7 @@ const Datetime = class {
1891
1894
  const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
1892
1895
  const hasWheelVariant = hasDatePresentation && preferWheel;
1893
1896
  helpers.renderHiddenInput(true, el, name, data.formatValue(value), disabled);
1894
- return (index.h(index.Host, { key: 'efdbc0922670a841bc667ceac392cdc1dedffd01', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, theme.createColorClasses(color, {
1897
+ return (index.h(index.Host, { key: 'b81c3531f4654be3f6948df5f790c0f6ab488000', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, theme.createColorClasses(color, {
1895
1898
  [mode]: true,
1896
1899
  ['datetime-readonly']: readonly,
1897
1900
  ['datetime-disabled']: disabled,
@@ -1901,7 +1904,7 @@ const Datetime = class {
1901
1904
  [`datetime-size-${size}`]: true,
1902
1905
  [`datetime-prefer-wheel`]: hasWheelVariant,
1903
1906
  [`datetime-grid`]: isGridStyle,
1904
- })) }, index.h("div", { key: '3f8bb75fcb0baff55182ef3aa1b535eacc58d81f', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
1907
+ })) }, index.h("div", { key: 'f7f39f8e56146186210d0ab70ae95e829573e549', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
1905
1908
  }
1906
1909
  get el() { return index.getElement(this); }
1907
1910
  static get watchers() { return {
@@ -179,6 +179,7 @@ const fabListCss = ":host{margin-left:0;margin-right:0;margin-top:calc(100% + 10
179
179
  const FabList = class {
180
180
  constructor(hostRef) {
181
181
  index.registerInstance(this, hostRef);
182
+ this.activateTimeouts = [];
182
183
  /**
183
184
  * If `true`, the fab list will show all fab buttons in the list.
184
185
  */
@@ -189,20 +190,26 @@ const FabList = class {
189
190
  this.side = 'bottom';
190
191
  }
191
192
  activatedChanged(activated) {
193
+ this.activateTimeouts.forEach(clearTimeout);
194
+ this.activateTimeouts = [];
192
195
  const fabs = Array.from(this.el.querySelectorAll('ion-fab-button'));
193
196
  // if showing the fabs add a timeout, else show immediately
194
197
  const timeout = activated ? 30 : 0;
195
198
  fabs.forEach((fab, i) => {
196
- setTimeout(() => (fab.show = activated), i * timeout);
199
+ this.activateTimeouts.push(setTimeout(() => (fab.show = activated), i * timeout));
197
200
  });
198
201
  }
202
+ disconnectedCallback() {
203
+ this.activateTimeouts.forEach(clearTimeout);
204
+ this.activateTimeouts = [];
205
+ }
199
206
  render() {
200
207
  const mode = ionicGlobal.getIonMode(this);
201
- return (index.h(index.Host, { key: '64b33366447f66c7f979cfac56307fbb1a6fac1c', class: {
208
+ return (index.h(index.Host, { key: '03a8920c29a93c6df4bab14753a78a8a30722ce8', class: {
202
209
  [mode]: true,
203
210
  'fab-list-active': this.activated,
204
211
  [`fab-list-side-${this.side}`]: true,
205
- } }, index.h("slot", { key: 'd9f474f7f20fd7e813db358fddc720534ca05bb6' })));
212
+ } }, index.h("slot", { key: 'd9e1541cb044e209bc2dff14080f3b938a2b84ae' })));
206
213
  }
207
214
  get el() { return index.getElement(this); }
208
215
  static get watchers() { return {
@@ -32,7 +32,16 @@ const Img = class {
32
32
  componentDidLoad() {
33
33
  this.addIO();
34
34
  }
35
+ disconnectedCallback() {
36
+ if (this.loadTimeout) {
37
+ clearTimeout(this.loadTimeout);
38
+ }
39
+ }
35
40
  addIO() {
41
+ if (this.loadTimeout) {
42
+ clearTimeout(this.loadTimeout);
43
+ this.loadTimeout = undefined;
44
+ }
36
45
  if (this.src === undefined) {
37
46
  return;
38
47
  }
@@ -56,7 +65,7 @@ const Img = class {
56
65
  }
57
66
  else {
58
67
  // fall back to setTimeout for Safari and IE
59
- setTimeout(() => this.load(), 200);
68
+ this.loadTimeout = setTimeout(() => this.load(), 200);
60
69
  }
61
70
  }
62
71
  load() {
@@ -73,7 +82,7 @@ const Img = class {
73
82
  render() {
74
83
  const { loadSrc, alt, onLoad, loadError, inheritedAttributes } = this;
75
84
  const { draggable } = inheritedAttributes;
76
- return (index.h(index.Host, { key: 'da600442894427dee1974a28e545613afac69fca', class: ionicGlobal.getIonMode(this) }, index.h("img", { key: '16df0c7069af86c0fa7ce5af598bc0f63b4eb71a', decoding: "async", src: loadSrc, alt: alt, onLoad: onLoad, onError: loadError, part: "image", draggable: isDraggable(draggable) })));
85
+ return (index.h(index.Host, { key: '9bfaa659b0680189fd29f3acb2fdce7f70be6060', class: ionicGlobal.getIonMode(this) }, index.h("img", { key: 'd484beae0d5cbe0406958bfad40cdd6c05625340', decoding: "async", src: loadSrc, alt: alt, onLoad: onLoad, onError: loadError, part: "image", draggable: isDraggable(draggable) })));
77
86
  }
78
87
  get el() { return index.getElement(this); }
79
88
  static get watchers() { return {
@@ -330,11 +330,16 @@ const Label = class {
330
330
  }
331
331
  componentDidLoad() {
332
332
  if (this.noAnimate) {
333
- setTimeout(() => {
333
+ this.loadTimeout = setTimeout(() => {
334
334
  this.noAnimate = false;
335
335
  }, 1000);
336
336
  }
337
337
  }
338
+ disconnectedCallback() {
339
+ if (this.loadTimeout) {
340
+ clearTimeout(this.loadTimeout);
341
+ }
342
+ }
338
343
  colorChanged() {
339
344
  this.emitColor();
340
345
  }
@@ -363,13 +368,13 @@ const Label = class {
363
368
  render() {
364
369
  const position = this.position;
365
370
  const mode = ionicGlobal.getIonMode(this);
366
- return (index.h(index.Host, { key: 'd6fba1a97189acc8ddfd64a2f009954a3e46e188', class: theme.createColorClasses(this.color, {
371
+ return (index.h(index.Host, { key: '6c88acd0f6595b14a0d80b86c95b6e7950d12258', class: theme.createColorClasses(this.color, {
367
372
  [mode]: true,
368
373
  'in-item-color': theme.hostContext('ion-item.ion-color', this.el),
369
374
  [`label-${position}`]: position !== undefined,
370
375
  [`label-no-animate`]: this.noAnimate,
371
376
  'label-rtl': document.dir === 'rtl',
372
- }) }, index.h("slot", { key: 'ce0ab50b5700398fdf50f36d02b7ad287eb71481' })));
377
+ }) }, index.h("slot", { key: 'a8db21737719e9a059a5671d968fa285f09afd2a' })));
373
378
  }
374
379
  get el() { return index.getElement(this); }
375
380
  static get watchers() { return {
@@ -107,11 +107,14 @@ const Searchbar = class {
107
107
  * Clears the input field and triggers the control change.
108
108
  */
109
109
  this.onClearInput = async (shouldFocus) => {
110
+ if (this.clearTimeout) {
111
+ clearTimeout(this.clearTimeout);
112
+ }
110
113
  this.ionClear.emit();
111
114
  return new Promise((resolve) => {
112
115
  // setTimeout() fixes https://github.com/ionic-team/ionic-framework/issues/7527
113
116
  // wait for 4 frames
114
- setTimeout(() => {
117
+ this.clearTimeout = setTimeout(() => {
115
118
  const value = this.getValue();
116
119
  if (value !== '') {
117
120
  this.value = '';
@@ -246,10 +249,18 @@ const Searchbar = class {
246
249
  this.originalIonInput = this.ionInput;
247
250
  this.positionElements();
248
251
  this.debounceChanged();
249
- setTimeout(() => {
252
+ this.loadTimeout = setTimeout(() => {
250
253
  this.noAnimate = false;
251
254
  }, 300);
252
255
  }
256
+ disconnectedCallback() {
257
+ if (this.loadTimeout) {
258
+ clearTimeout(this.loadTimeout);
259
+ }
260
+ if (this.clearTimeout) {
261
+ clearTimeout(this.clearTimeout);
262
+ }
263
+ }
253
264
  emitStyle() {
254
265
  this.ionStyle.emit({
255
266
  searchbar: true,
@@ -438,8 +449,8 @@ const Searchbar = class {
438
449
  const clearIcon = this.clearIcon || (mode === 'ios' ? index$1.closeCircle : index$1.closeSharp);
439
450
  const searchIcon = this.searchIcon || (mode === 'ios' ? index$1.searchOutline : index$1.searchSharp);
440
451
  const shouldShowCancelButton = this.shouldShowCancelButton();
441
- const cancelButton = this.showCancelButton !== 'never' && (index.h("button", { key: '19e18775856db87daeb4b9e3d7bca0461915a0df', "aria-label": cancelButtonText, "aria-hidden": shouldShowCancelButton ? undefined : 'true', type: "button", tabIndex: mode === 'ios' && !shouldShowCancelButton ? -1 : undefined, onMouseDown: this.onCancelSearchbar, onTouchStart: this.onCancelSearchbar, class: "searchbar-cancel-button" }, index.h("div", { key: 'b3bbdcc033f3bd3441d619e4a252cef0dad4d07e', "aria-hidden": "true" }, mode === 'md' ? (index.h("ion-icon", { "aria-hidden": "true", mode: mode, icon: this.cancelButtonIcon, lazy: false })) : (cancelButtonText))));
442
- return (index.h(index.Host, { key: '074aa60e051bfb3225e87d44bbb6346c59c73574', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: theme.createColorClasses(this.color, {
452
+ const cancelButton = this.showCancelButton !== 'never' && (index.h("button", { key: '95c145052574faeb35dc2529302c93155889e2e9', "aria-label": cancelButtonText, "aria-hidden": shouldShowCancelButton ? undefined : 'true', type: "button", tabIndex: mode === 'ios' && !shouldShowCancelButton ? -1 : undefined, onMouseDown: this.onCancelSearchbar, onTouchStart: this.onCancelSearchbar, class: "searchbar-cancel-button" }, index.h("div", { key: 'e937413cee6c03f39c6b251fe4a05e151665276b', "aria-hidden": "true" }, mode === 'md' ? (index.h("ion-icon", { "aria-hidden": "true", mode: mode, icon: this.cancelButtonIcon, lazy: false })) : (cancelButtonText))));
453
+ return (index.h(index.Host, { key: '475038e23abdfeaf09d3ea89e0fa329a10fd4164', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: theme.createColorClasses(this.color, {
443
454
  [mode]: true,
444
455
  'searchbar-animated': animated,
445
456
  'searchbar-disabled': this.disabled,
@@ -449,14 +460,14 @@ const Searchbar = class {
449
460
  'searchbar-has-focus': this.focused,
450
461
  'searchbar-should-show-clear': this.shouldShowClearButton(),
451
462
  'searchbar-should-show-cancel': this.shouldShowCancelButton(),
452
- }) }, index.h("div", { key: '54f58a79fe36e85d9295157303f1be89c98bbdaf', class: "searchbar-input-container" }, index.h("input", Object.assign({ key: 'f991a37fcf54d26b7ad10d89084764e03d97b9de', "aria-label": "search text", disabled: this.disabled, ref: (el) => (this.nativeInput = el), class: "searchbar-input", inputMode: this.inputmode, enterKeyHint: this.enterkeyhint, name: this.name, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, minLength: this.minlength, maxLength: this.maxlength, placeholder: this.placeholder, type: this.type, value: this.getValue(), autoCapitalize: autocapitalize === 'default' ? undefined : autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, spellcheck: this.spellcheck }, this.inheritedAttributes)), mode === 'md' && cancelButton, index.h("ion-icon", { key: '8b44dd90a3292c5cf872ef16a8520675f5673494', "aria-hidden": "true", mode: mode, icon: searchIcon, lazy: false, class: "searchbar-search-icon" }), index.h("button", { key: '79d9cfed8f01268044f82811a35d323a12dca749', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
463
+ }) }, index.h("div", { key: 'f17bf0705bf44f84794ff871aadd58c05fdf1f11', class: "searchbar-input-container" }, index.h("input", Object.assign({ key: '1ec519e2128d74b647827f4d49d3bee532cdab03', "aria-label": "search text", disabled: this.disabled, ref: (el) => (this.nativeInput = el), class: "searchbar-input", inputMode: this.inputmode, enterKeyHint: this.enterkeyhint, name: this.name, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, minLength: this.minlength, maxLength: this.maxlength, placeholder: this.placeholder, type: this.type, value: this.getValue(), autoCapitalize: autocapitalize === 'default' ? undefined : autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, spellcheck: this.spellcheck }, this.inheritedAttributes)), mode === 'md' && cancelButton, index.h("ion-icon", { key: '9c131bc107b5e45318aed9df4eb6ce07df990d0a', "aria-hidden": "true", mode: mode, icon: searchIcon, lazy: false, class: "searchbar-search-icon" }), index.h("button", { key: '45a2fdd52be212d80d32a1ae6b2c8f443038d5bc', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
453
464
  /**
454
465
  * This prevents mobile browsers from
455
466
  * blurring the input when the clear
456
467
  * button is activated.
457
468
  */
458
469
  ev.preventDefault();
459
- }, onClick: () => this.onClearInput(true) }, index.h("ion-icon", { key: 'aa3b9fa8a61f853236783ac7bcd0b113ea65ece2', "aria-hidden": "true", mode: mode, icon: clearIcon, lazy: false, class: "searchbar-clear-icon" }))), mode === 'ios' && cancelButton));
470
+ }, onClick: () => this.onClearInput(true) }, index.h("ion-icon", { key: 'ad2e605d1d37118ea80abfca3fd9238ed112a625', "aria-hidden": "true", mode: mode, icon: clearIcon, lazy: false, class: "searchbar-clear-icon" }))), mode === 'ios' && cancelButton));
460
471
  }
461
472
  get el() { return index.getElement(this); }
462
473
  static get watchers() { return {