/*!
 * (C) Ionic http://ionicframework.com - MIT License
 */
import { proxyCustomElement, HTMLElement, createEvent, forceUpdate, h, Host } from '@stencil/core/internal/client';
import { x as xSvg } from './x.js';
import { l as debounceEvent, d as inheritAttributes, c as componentOnReady, r as raf } from './helpers.js';
import { i as isRTL } from './dir.js';
import { c as createColorClasses, h as hostContext } from './theme.js';
import { j as closeSharp, k as closeCircle, t as searchSharp, u as searchOutline, a as arrowBackSharp } from './index6.js';
import { c as config } from './index4.js';
import { b as getIonTheme } from './ionic-global.js';
import { d as defineCustomElement$2 } from './icon.js';

const arrowLeftSvg = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjQsMTI4YTgsOCwwLDAsMS04LDhINTkuMzFsNTguMzUsNTguMzRhOCw4LDAsMCwxLTExLjMyLDExLjMybC03Mi03MmE4LDgsMCwwLDEsMC0xMS4zMmw3Mi03MmE4LDgsMCwwLDEsMTEuMzIsMTEuMzJMNTkuMzEsMTIwSDIxNkE4LDgsMCwwLDEsMjI0LDEyOFoiLz48L3N2Zz4=';

const magnifyingGlassSvg = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjkuNjYsMjE4LjM0bC01MC4wNy01MC4wNmE4OC4xMSw4OC4xMSwwLDEsMC0xMS4zMSwxMS4zMWw1MC4wNiw1MC4wN2E4LDgsMCwwLDAsMTEuMzItMTEuMzJaTTQwLDExMmE3Miw3MiwwLDEsMSw3Miw3MkE3Mi4wOCw3Mi4wOCwwLDAsMSw0MCwxMTJaIi8+PC9zdmc+';

const searchbarIonicCss = ".sc-ion-searchbar-ionic-h{--placeholder-color:initial;--placeholder-font-style:initial;--placeholder-font-weight:initial;--placeholder-opacity:var(--ion-placeholder-opacity, 1);-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:-ms-flexbox;display:flex;position:relative;-ms-flex-align:center;align-items:center;width:100%;color:var(--color);-webkit-box-sizing:border-box;box-sizing:border-box}.searchbar-search-icon.sc-ion-searchbar-ionic{color:var(--icon-color);pointer-events:none}.searchbar-input-container.sc-ion-searchbar-ionic{display:block;position:relative;-ms-flex-negative:1;flex-shrink:1;width:100%}.searchbar-input.sc-ion-searchbar-ionic{color:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-align:inherit;text-decoration:inherit;text-indent:inherit;text-overflow:inherit;text-transform:inherit;white-space:inherit;border-radius:var(--border-radius);display:block;width:100%;min-height:inherit;border:0;outline:none;background:var(--background);font-family:inherit;-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none;-moz-appearance:none;appearance:none}.searchbar-input.sc-ion-searchbar-ionic::-webkit-input-placeholder{color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.searchbar-input.sc-ion-searchbar-ionic::-moz-placeholder{color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.searchbar-input.sc-ion-searchbar-ionic:-ms-input-placeholder{color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.searchbar-input.sc-ion-searchbar-ionic::-ms-input-placeholder{color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.searchbar-input.sc-ion-searchbar-ionic::placeholder{color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.searchbar-input.sc-ion-searchbar-ionic::-webkit-search-cancel-button,.searchbar-input.sc-ion-searchbar-ionic::-ms-clear{display:none}.searchbar-cancel-button.sc-ion-searchbar-ionic{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;display:none;height:100%;border:0;outline:none;color:var(--cancel-button-color);cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none}.searchbar-cancel-button.sc-ion-searchbar-ionic>div.sc-ion-searchbar-ionic{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%}.searchbar-clear-button.sc-ion-searchbar-ionic{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;display:none;min-height:0;outline:none;color:var(--clear-button-color);-webkit-appearance:none;-moz-appearance:none;appearance:none}.searchbar-clear-button.sc-ion-searchbar-ionic:focus{opacity:0.5}.searchbar-has-value.searchbar-should-show-clear.sc-ion-searchbar-ionic-h .searchbar-clear-button.sc-ion-searchbar-ionic{display:block}.sc-ion-searchbar-ionic-h{--background:var(--token-bg-neutral-subtle-default, var(--token-primitives-neutral-200, #eae9e9));--border-radius:var(--token-border-radius-400, var(--token-scale-400, 16px));--box-shadow:none;--cancel-button-color:var(--token-primitives-neutral-800, #626262);--clear-button-color:var(--token-primitives-neutral-1000, #3b3b3b);--color:var(--token-text-default, var(--token-primitives-neutral-1200, #242424));--icon-color:var(--token-icon-subtlest, var(--token-primitives-neutral-800, #626262));--placeholder-color:var(--token-text-subtlest, var(--token-primitives-neutral-800, #626262));--focus-ring-color:var(--token-border-focus-default, var(--token-primitives-blue-400, #b5c0f7));--focus-ring-width:var(--token-border-size-050, var(--token-scale-050, 2px));font-size:var(--token-font-size-350, 14px);font-weight:var(--token-font-weight-regular, 400);letter-spacing:var(--token-font-letter-spacing-0, 0%);line-height:var(--token-font-line-height-600, var(--token-scale-600, 24px));text-decoration:none;text-transform:none;padding-left:0;padding-right:0;padding-top:0;padding-bottom:0}.searchbar-search-icon.sc-ion-searchbar-ionic{width:var(--token-scale-400, 16px);height:var(--token-scale-400, 16px)}.searchbar-input.sc-ion-searchbar-ionic{padding-top:var(--token-space-300, var(--token-scale-300, 12px));padding-bottom:var(--token-space-300, var(--token-scale-300, 12px));text-overflow:ellipsis;contain:strict}.searchbar-clear-button.sc-ion-searchbar-ionic{width:var(--token-scale-400, 16px);height:var(--token-scale-400, 16px);background-color:transparent;font-size:var(--token-scale-400, 16px);contain:strict}.searchbar-cancel-button.sc-ion-searchbar-ionic{width:var(--token-scale-400, 16px);height:var(--token-scale-400, 16px);background-color:transparent;font-size:var(--token-font-size-400, 16px)}.searchbar-search-icon.sc-ion-searchbar-ionic,.searchbar-clear-button.sc-ion-searchbar-ionic,.searchbar-cancel-button.sc-ion-searchbar-ionic{top:50%;position:absolute;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.searchbar-clear-button.sc-ion-searchbar-ionic:focus-visible,.searchbar-cancel-button.sc-ion-searchbar-ionic:focus-visible ion-icon.sc-ion-searchbar-ionic{border-radius:var(--token-border-radius-100, var(--token-scale-100, 4px));outline:var(--token-border-size-050, var(--token-scale-050, 2px)) var(--token-border-style-solid, solid) var(--token-border-focus-default, var(--token-primitives-blue-400, #b5c0f7));opacity:1}.searchbar-has-value.sc-ion-searchbar-ionic-h{--icon-color:var(--token-icon-default, var(--token-primitives-neutral-1200, #242424))}.in-toolbar.searchbar-should-show-cancel.sc-ion-searchbar-ionic-h .searchbar-cancel-button.sc-ion-searchbar-ionic{inset-inline-start:var(--token-space-200, var(--token-scale-200, 8px))}.sc-ion-searchbar-ionic-h:hover{--background:var(--token-primitives-neutral-200, #eae9e9)}.searchbar-has-focus.sc-ion-searchbar-ionic-h .searchbar-input.sc-ion-searchbar-ionic{outline:var(--focus-ring-width) var(--token-border-style-solid, solid) var(--focus-ring-color)}.searchbar-has-focus.sc-ion-searchbar-ionic-h .searchbar-search-icon.sc-ion-searchbar-ionic,.searchbar-has-focus.sc-ion-searchbar-ionic-h .searchbar-cancel-button.sc-ion-searchbar-ionic,.searchbar-should-show-cancel.sc-ion-searchbar-ionic-h .searchbar-cancel-button.sc-ion-searchbar-ionic{display:block}.searchbar-has-focus.sc-ion-searchbar-ionic-h .searchbar-cancel-button.sc-ion-searchbar-ionic+.searchbar-search-icon.sc-ion-searchbar-ionic,.searchbar-should-show-cancel.sc-ion-searchbar-ionic-h .searchbar-cancel-button.sc-ion-searchbar-ionic+.searchbar-search-icon.sc-ion-searchbar-ionic{display:none}.searchbar-disabled.sc-ion-searchbar-ionic-h{--color:var(--token-primitives-neutral-500, #a2a2a2);--icon-color:var(--token-icon-disabled, var(--token-primitives-neutral-500, #a2a2a2));--placeholder-color:var(--token-text-disabled, var(--token-primitives-neutral-500, #a2a2a2));cursor:default;pointer-events:none}.searchbar-shape-soft.sc-ion-searchbar-ionic-h{--border-radius:var(--token-border-radius-200, var(--token-scale-200, 8px))}.searchbar-shape-round.sc-ion-searchbar-ionic-h{--border-radius:var(--token-border-radius-400, var(--token-scale-400, 16px))}.searchbar-shape-rectangular.sc-ion-searchbar-ionic-h{--border-radius:var(--token-border-radius-0, var(--token-scale-0, 0px))}.searchbar-size-small.sc-ion-searchbar-ionic-h .searchbar-input.sc-ion-searchbar-ionic{-webkit-padding-start:var(--token-space-300, var(--token-scale-300, 12px));padding-inline-start:var(--token-space-300, var(--token-scale-300, 12px));-webkit-padding-end:var(--token-space-300, var(--token-scale-300, 12px));padding-inline-end:var(--token-space-300, var(--token-scale-300, 12px));height:var(--token-scale-1000, 40px)}.searchbar-size-small.searchbar-should-show-search-icon.sc-ion-searchbar-ionic-h .searchbar-input.sc-ion-searchbar-ionic,.searchbar-size-small.searchbar-should-show-cancel.sc-ion-searchbar-ionic-h .searchbar-input.sc-ion-searchbar-ionic{-webkit-padding-start:calc(var(--token-space-300, var(--token-scale-300, 12px)) + var(--token-scale-400, 16px) + var(--token-space-200, var(--token-scale-200, 8px)));padding-inline-start:calc(var(--token-space-300, var(--token-scale-300, 12px)) + var(--token-scale-400, 16px) + var(--token-space-200, var(--token-scale-200, 8px)));-webkit-padding-end:var(--token-space-300, var(--token-scale-300, 12px));padding-inline-end:var(--token-space-300, var(--token-scale-300, 12px))}.searchbar-size-small.searchbar-should-show-search-icon.searchbar-should-show-clear.sc-ion-searchbar-ionic-h .searchbar-input.sc-ion-searchbar-ionic,.searchbar-size-small.searchbar-should-show-cancel.searchbar-should-show-clear.sc-ion-searchbar-ionic-h .searchbar-input.sc-ion-searchbar-ionic{-webkit-padding-start:calc(var(--token-space-300, var(--token-scale-300, 12px)) + var(--token-scale-400, 16px) + var(--token-space-200, var(--token-scale-200, 8px)));padding-inline-start:calc(var(--token-space-300, var(--token-scale-300, 12px)) + var(--token-scale-400, 16px) + var(--token-space-200, var(--token-scale-200, 8px)));-webkit-padding-end:calc(var(--token-space-300, var(--token-scale-300, 12px)) + var(--token-scale-400, 16px) + var(--token-space-200, var(--token-scale-200, 8px)));padding-inline-end:calc(var(--token-space-300, var(--token-scale-300, 12px)) + var(--token-scale-400, 16px) + var(--token-space-200, var(--token-scale-200, 8px)))}.searchbar-size-small.searchbar-should-show-clear.sc-ion-searchbar-ionic-h .searchbar-input.sc-ion-searchbar-ionic{-webkit-padding-start:var(--token-space-300, var(--token-scale-300, 12px));padding-inline-start:var(--token-space-300, var(--token-scale-300, 12px));-webkit-padding-end:calc(var(--token-space-300, var(--token-scale-300, 12px)) + var(--token-scale-400, 16px) + var(--token-space-200, var(--token-scale-200, 8px)));padding-inline-end:calc(var(--token-space-300, var(--token-scale-300, 12px)) + var(--token-scale-400, 16px) + var(--token-space-200, var(--token-scale-200, 8px)))}.searchbar-size-small.sc-ion-searchbar-ionic-h .searchbar-search-icon.sc-ion-searchbar-ionic,.searchbar-size-small.sc-ion-searchbar-ionic-h .searchbar-cancel-button.sc-ion-searchbar-ionic{inset-inline-start:var(--token-space-300, var(--token-scale-300, 12px))}.searchbar-size-small.sc-ion-searchbar-ionic-h .searchbar-clear-button.sc-ion-searchbar-ionic{inset-inline-end:var(--token-space-300, var(--token-scale-300, 12px))}.searchbar-size-medium.sc-ion-searchbar-ionic-h .searchbar-input.sc-ion-searchbar-ionic{-webkit-padding-start:var(--token-space-400, var(--token-scale-400, 16px));padding-inline-start:var(--token-space-400, var(--token-scale-400, 16px));-webkit-padding-end:var(--token-space-400, var(--token-scale-400, 16px));padding-inline-end:var(--token-space-400, var(--token-scale-400, 16px));height:var(--token-scale-1200, 48px)}.searchbar-size-medium.searchbar-should-show-search-icon.sc-ion-searchbar-ionic-h .searchbar-input.sc-ion-searchbar-ionic,.searchbar-size-medium.searchbar-should-show-cancel.sc-ion-searchbar-ionic-h .searchbar-input.sc-ion-searchbar-ionic{-webkit-padding-start:calc(var(--token-space-400, var(--token-scale-400, 16px)) + var(--token-scale-400, 16px) + var(--token-space-200, var(--token-scale-200, 8px)));padding-inline-start:calc(var(--token-space-400, var(--token-scale-400, 16px)) + var(--token-scale-400, 16px) + var(--token-space-200, var(--token-scale-200, 8px)));-webkit-padding-end:var(--token-space-400, var(--token-scale-400, 16px));padding-inline-end:var(--token-space-400, var(--token-scale-400, 16px))}.searchbar-size-medium.searchbar-should-show-search-icon.searchbar-should-show-clear.sc-ion-searchbar-ionic-h .searchbar-input.sc-ion-searchbar-ionic,.searchbar-size-medium.searchbar-should-show-cancel.searchbar-should-show-clear.sc-ion-searchbar-ionic-h .searchbar-input.sc-ion-searchbar-ionic{-webkit-padding-start:calc(var(--token-space-400, var(--token-scale-400, 16px)) + var(--token-scale-400, 16px) + var(--token-space-200, var(--token-scale-200, 8px)));padding-inline-start:calc(var(--token-space-400, var(--token-scale-400, 16px)) + var(--token-scale-400, 16px) + var(--token-space-200, var(--token-scale-200, 8px)));-webkit-padding-end:calc(var(--token-space-400, var(--token-scale-400, 16px)) + var(--token-scale-400, 16px) + var(--token-space-200, var(--token-scale-200, 8px)));padding-inline-end:calc(var(--token-space-400, var(--token-scale-400, 16px)) + var(--token-scale-400, 16px) + var(--token-space-200, var(--token-scale-200, 8px)))}.searchbar-size-medium.searchbar-should-show-clear.sc-ion-searchbar-ionic-h .searchbar-input.sc-ion-searchbar-ionic{-webkit-padding-start:var(--token-space-400, var(--token-scale-400, 16px));padding-inline-start:var(--token-space-400, var(--token-scale-400, 16px));-webkit-padding-end:calc(var(--token-space-400, var(--token-scale-400, 16px)) + var(--token-scale-400, 16px) + var(--token-space-200, var(--token-scale-200, 8px)));padding-inline-end:calc(var(--token-space-400, var(--token-scale-400, 16px)) + var(--token-scale-400, 16px) + var(--token-space-200, var(--token-scale-200, 8px)))}.searchbar-size-medium.sc-ion-searchbar-ionic-h .searchbar-search-icon.sc-ion-searchbar-ionic,.searchbar-size-medium.sc-ion-searchbar-ionic-h .searchbar-cancel-button.sc-ion-searchbar-ionic{inset-inline-start:var(--token-space-400, var(--token-scale-400, 16px))}.searchbar-size-medium.sc-ion-searchbar-ionic-h .searchbar-clear-button.sc-ion-searchbar-ionic{inset-inline-end:var(--token-space-400, var(--token-scale-400, 16px))}.in-toolbar.searchbar-size-small.searchbar-should-show-cancel.sc-ion-searchbar-ionic-h .searchbar-input.sc-ion-searchbar-ionic,.in-toolbar.searchbar-size-medium.searchbar-should-show-cancel.sc-ion-searchbar-ionic-h .searchbar-input.sc-ion-searchbar-ionic{-webkit-padding-start:var(--token-space-800, var(--token-scale-800, 32px));padding-inline-start:var(--token-space-800, var(--token-scale-800, 32px))}.searchbar-size-large.sc-ion-searchbar-ionic-h .searchbar-search-icon.sc-ion-searchbar-ionic,.searchbar-size-large.sc-ion-searchbar-ionic-h .searchbar-cancel-button.sc-ion-searchbar-ionic{width:var(--token-scale-500, 20px);height:var(--token-scale-500, 20px)}.searchbar-size-large.sc-ion-searchbar-ionic-h .searchbar-cancel-button.sc-ion-searchbar-ionic{font-size:var(--token-font-size-500, 20px)}.searchbar-size-large.sc-ion-searchbar-ionic-h .searchbar-input.sc-ion-searchbar-ionic{padding-top:var(--token-space-400, var(--token-scale-400, 16px));padding-bottom:var(--token-space-400, var(--token-scale-400, 16px));-webkit-padding-start:var(--token-space-500, var(--token-scale-500, 20px));padding-inline-start:var(--token-space-500, var(--token-scale-500, 20px));-webkit-padding-end:var(--token-space-500, var(--token-scale-500, 20px));padding-inline-end:var(--token-space-500, var(--token-scale-500, 20px));height:var(--token-scale-1400, 56px)}.searchbar-size-large.searchbar-should-show-search-icon.sc-ion-searchbar-ionic-h .searchbar-input.sc-ion-searchbar-ionic,.searchbar-size-large.searchbar-should-show-cancel.sc-ion-searchbar-ionic-h .searchbar-input.sc-ion-searchbar-ionic{-webkit-padding-start:calc(var(--token-space-500, var(--token-scale-500, 20px)) + var(--token-scale-500, 20px) + var(--token-space-200, var(--token-scale-200, 8px)));padding-inline-start:calc(var(--token-space-500, var(--token-scale-500, 20px)) + var(--token-scale-500, 20px) + var(--token-space-200, var(--token-scale-200, 8px)));-webkit-padding-end:var(--token-space-500, var(--token-scale-500, 20px));padding-inline-end:var(--token-space-500, var(--token-scale-500, 20px))}.searchbar-size-large.searchbar-should-show-search-icon.searchbar-should-show-clear.sc-ion-searchbar-ionic-h .searchbar-input.sc-ion-searchbar-ionic,.searchbar-size-large.searchbar-should-show-cancel.searchbar-should-show-clear.sc-ion-searchbar-ionic-h .searchbar-input.sc-ion-searchbar-ionic{-webkit-padding-start:calc(var(--token-space-500, var(--token-scale-500, 20px)) + var(--token-scale-500, 20px) + var(--token-space-200, var(--token-scale-200, 8px)));padding-inline-start:calc(var(--token-space-500, var(--token-scale-500, 20px)) + var(--token-scale-500, 20px) + var(--token-space-200, var(--token-scale-200, 8px)));-webkit-padding-end:calc(var(--token-space-500, var(--token-scale-500, 20px)) + var(--token-scale-400, 16px) + var(--token-space-200, var(--token-scale-200, 8px)));padding-inline-end:calc(var(--token-space-500, var(--token-scale-500, 20px)) + var(--token-scale-400, 16px) + var(--token-space-200, var(--token-scale-200, 8px)))}.searchbar-size-large.searchbar-should-show-clear.sc-ion-searchbar-ionic-h .searchbar-input.sc-ion-searchbar-ionic{-webkit-padding-start:var(--token-space-500, var(--token-scale-500, 20px));padding-inline-start:var(--token-space-500, var(--token-scale-500, 20px));-webkit-padding-end:calc(var(--token-space-500, var(--token-scale-500, 20px)) + var(--token-scale-400, 16px) + var(--token-space-200, var(--token-scale-200, 8px)));padding-inline-end:calc(var(--token-space-500, var(--token-scale-500, 20px)) + var(--token-scale-400, 16px) + var(--token-space-200, var(--token-scale-200, 8px)))}.in-toolbar.searchbar-size-large.searchbar-should-show-cancel.sc-ion-searchbar-ionic-h .searchbar-input.sc-ion-searchbar-ionic{-webkit-padding-start:var(--token-space-900, var(--token-scale-900, 36px));padding-inline-start:var(--token-space-900, var(--token-scale-900, 36px))}.searchbar-size-large.sc-ion-searchbar-ionic-h .searchbar-search-icon.sc-ion-searchbar-ionic,.searchbar-size-large.sc-ion-searchbar-ionic-h .searchbar-cancel-button.sc-ion-searchbar-ionic{inset-inline-start:var(--token-space-500, var(--token-scale-500, 20px))}.searchbar-size-large.sc-ion-searchbar-ionic-h .searchbar-clear-button.sc-ion-searchbar-ionic{inset-inline-end:var(--token-space-500, var(--token-scale-500, 20px))}";

const searchbarIosCss = ".sc-ion-searchbar-ios-h{--placeholder-color:initial;--placeholder-font-style:initial;--placeholder-font-weight:initial;--placeholder-opacity:var(--ion-placeholder-opacity, 1);-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:-ms-flexbox;display:flex;position:relative;-ms-flex-align:center;align-items:center;width:100%;color:var(--color);-webkit-box-sizing:border-box;box-sizing:border-box}.searchbar-search-icon.sc-ion-searchbar-ios{color:var(--icon-color);pointer-events:none}.searchbar-input-container.sc-ion-searchbar-ios{display:block;position:relative;-ms-flex-negative:1;flex-shrink:1;width:100%}.searchbar-input.sc-ion-searchbar-ios{color:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-align:inherit;text-decoration:inherit;text-indent:inherit;text-overflow:inherit;text-transform:inherit;white-space:inherit;border-radius:var(--border-radius);display:block;width:100%;min-height:inherit;border:0;outline:none;background:var(--background);font-family:inherit;-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none;-moz-appearance:none;appearance:none}.searchbar-input.sc-ion-searchbar-ios::-webkit-input-placeholder{color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.searchbar-input.sc-ion-searchbar-ios::-moz-placeholder{color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.searchbar-input.sc-ion-searchbar-ios:-ms-input-placeholder{color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.searchbar-input.sc-ion-searchbar-ios::-ms-input-placeholder{color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.searchbar-input.sc-ion-searchbar-ios::placeholder{color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.searchbar-input.sc-ion-searchbar-ios::-webkit-search-cancel-button,.searchbar-input.sc-ion-searchbar-ios::-ms-clear{display:none}.searchbar-cancel-button.sc-ion-searchbar-ios{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;display:none;height:100%;border:0;outline:none;color:var(--cancel-button-color);cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none}.searchbar-cancel-button.sc-ion-searchbar-ios>div.sc-ion-searchbar-ios{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%}.searchbar-clear-button.sc-ion-searchbar-ios{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;display:none;min-height:0;outline:none;color:var(--clear-button-color);-webkit-appearance:none;-moz-appearance:none;appearance:none}.searchbar-clear-button.sc-ion-searchbar-ios:focus{opacity:0.5}.searchbar-has-value.searchbar-should-show-clear.sc-ion-searchbar-ios-h .searchbar-clear-button.sc-ion-searchbar-ios{display:block}.sc-ion-searchbar-ios-h{--placeholder-opacity:var(--ion-placeholder-opacity, 0.6);font-family:var(--ion-font-family, inherit)}.ion-color.sc-ion-searchbar-ios-h{color:var(--ion-color-contrast)}.ion-color.sc-ion-searchbar-ios-h .searchbar-input.sc-ion-searchbar-ios{background:var(--ion-color-base)}.ion-color.sc-ion-searchbar-ios-h .searchbar-clear-button.sc-ion-searchbar-ios,.ion-color.sc-ion-searchbar-ios-h .searchbar-cancel-button.sc-ion-searchbar-ios,.ion-color.sc-ion-searchbar-ios-h .searchbar-search-icon.sc-ion-searchbar-ios{color:inherit}.searchbar-disabled.sc-ion-searchbar-ios-h{cursor:default;opacity:0.4;pointer-events:none}.sc-ion-searchbar-ios-h{--background:rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.07);--border-radius:10px;--box-shadow:none;--cancel-button-color:var(--ion-color-primary, #0054e9);--clear-button-color:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666));--color:var(--ion-text-color, #000);--icon-color:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666));-webkit-padding-start:12px;padding-inline-start:12px;-webkit-padding-end:12px;padding-inline-end:12px;padding-top:12px;padding-bottom:12px;min-height:60px;contain:content}.searchbar-input-container.sc-ion-searchbar-ios{min-height:36px}.searchbar-search-icon.sc-ion-searchbar-ios{-webkit-margin-start:calc(50% - 60px);margin-inline-start:calc(50% - 60px);top:0;position:absolute;width:1.375rem;height:100%;contain:strict}.searchbar-search-icon.sc-ion-searchbar-ios{inset-inline-start:5px}.searchbar-input.sc-ion-searchbar-ios{-webkit-padding-start:0px;padding-inline-start:0px;-webkit-padding-end:0px;padding-inline-end:0px;padding-top:6px;padding-bottom:6px;height:100%;font-size:1.0625rem;font-weight:400;contain:strict}.searchbar-has-value.searchbar-should-show-clear.sc-ion-searchbar-ios-h .searchbar-input.sc-ion-searchbar-ios{-webkit-padding-start:1.75rem;padding-inline-start:1.75rem;-webkit-padding-end:1.75rem;padding-inline-end:1.75rem}.searchbar-clear-button.sc-ion-searchbar-ios{top:0;background-position:center;position:absolute;width:1.875rem;height:100%;border:0;background-color:transparent}.searchbar-clear-button.sc-ion-searchbar-ios{inset-inline-end:0}.searchbar-clear-icon.sc-ion-searchbar-ios{width:1.125rem;height:100%}.searchbar-cancel-button.sc-ion-searchbar-ios{-webkit-padding-start:12px;padding-inline-start:12px;-webkit-padding-end:0;padding-inline-end:0;padding-top:0;padding-bottom:0;-ms-flex-negative:0;flex-shrink:0;background-color:transparent;font-size:17px}.searchbar-left-aligned.sc-ion-searchbar-ios-h .searchbar-search-icon.sc-ion-searchbar-ios{-webkit-margin-start:0;margin-inline-start:0}.searchbar-left-aligned.sc-ion-searchbar-ios-h .searchbar-input.sc-ion-searchbar-ios{-webkit-padding-start:1.875rem;padding-inline-start:1.875rem}.searchbar-has-focus.sc-ion-searchbar-ios-h .searchbar-cancel-button.sc-ion-searchbar-ios,.searchbar-should-show-cancel.sc-ion-searchbar-ios-h .searchbar-cancel-button.sc-ion-searchbar-ios,.searchbar-animated.sc-ion-searchbar-ios-h .searchbar-cancel-button.sc-ion-searchbar-ios{display:block}.searchbar-animated.sc-ion-searchbar-ios-h .searchbar-search-icon.sc-ion-searchbar-ios,.searchbar-animated.sc-ion-searchbar-ios-h .searchbar-input.sc-ion-searchbar-ios{-webkit-transition:all 300ms ease;transition:all 300ms ease}.searchbar-animated.searchbar-has-focus.sc-ion-searchbar-ios-h .searchbar-cancel-button.sc-ion-searchbar-ios,.searchbar-animated.searchbar-should-show-cancel.sc-ion-searchbar-ios-h .searchbar-cancel-button.sc-ion-searchbar-ios{opacity:1;pointer-events:auto}.searchbar-animated.sc-ion-searchbar-ios-h .searchbar-cancel-button.sc-ion-searchbar-ios{-webkit-margin-end:-100%;margin-inline-end:-100%;-webkit-transform:translate3d(0,  0,  0);transform:translate3d(0,  0,  0);-webkit-transition:all 300ms ease;transition:all 300ms ease;opacity:0;pointer-events:none}.searchbar-no-animate.sc-ion-searchbar-ios-h .searchbar-search-icon.sc-ion-searchbar-ios,.searchbar-no-animate.sc-ion-searchbar-ios-h .searchbar-input.sc-ion-searchbar-ios,.searchbar-no-animate.sc-ion-searchbar-ios-h .searchbar-cancel-button.sc-ion-searchbar-ios{-webkit-transition-duration:0ms;transition-duration:0ms}.ion-color.sc-ion-searchbar-ios-h .searchbar-cancel-button.sc-ion-searchbar-ios{color:var(--ion-color-base)}@media (any-hover: hover){.ion-color.sc-ion-searchbar-ios-h .searchbar-cancel-button.sc-ion-searchbar-ios:hover{color:var(--ion-color-tint)}}ion-toolbar.sc-ion-searchbar-ios-h,ion-toolbar .sc-ion-searchbar-ios-h{padding-top:1px;padding-bottom:15px;min-height:52px}ion-toolbar.ion-color.sc-ion-searchbar-ios-h:not(.ion-color),ion-toolbar.ion-color .sc-ion-searchbar-ios-h:not(.ion-color){color:inherit}ion-toolbar.ion-color.sc-ion-searchbar-ios-h:not(.ion-color) .searchbar-cancel-button.sc-ion-searchbar-ios,ion-toolbar.ion-color .sc-ion-searchbar-ios-h:not(.ion-color) .searchbar-cancel-button.sc-ion-searchbar-ios{color:currentColor}ion-toolbar.ion-color.sc-ion-searchbar-ios-h .searchbar-search-icon.sc-ion-searchbar-ios,ion-toolbar.ion-color .sc-ion-searchbar-ios-h .searchbar-search-icon.sc-ion-searchbar-ios{color:currentColor;opacity:0.5}ion-toolbar.ion-color.sc-ion-searchbar-ios-h:not(.ion-color) .searchbar-input.sc-ion-searchbar-ios,ion-toolbar.ion-color .sc-ion-searchbar-ios-h:not(.ion-color) .searchbar-input.sc-ion-searchbar-ios{background:rgba(var(--ion-color-contrast-rgb), 0.07);color:currentColor}ion-toolbar.ion-color.sc-ion-searchbar-ios-h:not(.ion-color) .searchbar-clear-button.sc-ion-searchbar-ios,ion-toolbar.ion-color .sc-ion-searchbar-ios-h:not(.ion-color) .searchbar-clear-button.sc-ion-searchbar-ios{color:currentColor;opacity:0.5}";

const searchbarMdCss = ".sc-ion-searchbar-md-h{--placeholder-color:initial;--placeholder-font-style:initial;--placeholder-font-weight:initial;--placeholder-opacity:var(--ion-placeholder-opacity, 1);-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:-ms-flexbox;display:flex;position:relative;-ms-flex-align:center;align-items:center;width:100%;color:var(--color);-webkit-box-sizing:border-box;box-sizing:border-box}.searchbar-search-icon.sc-ion-searchbar-md{color:var(--icon-color);pointer-events:none}.searchbar-input-container.sc-ion-searchbar-md{display:block;position:relative;-ms-flex-negative:1;flex-shrink:1;width:100%}.searchbar-input.sc-ion-searchbar-md{color:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-align:inherit;text-decoration:inherit;text-indent:inherit;text-overflow:inherit;text-transform:inherit;white-space:inherit;border-radius:var(--border-radius);display:block;width:100%;min-height:inherit;border:0;outline:none;background:var(--background);font-family:inherit;-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none;-moz-appearance:none;appearance:none}.searchbar-input.sc-ion-searchbar-md::-webkit-input-placeholder{color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.searchbar-input.sc-ion-searchbar-md::-moz-placeholder{color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.searchbar-input.sc-ion-searchbar-md:-ms-input-placeholder{color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.searchbar-input.sc-ion-searchbar-md::-ms-input-placeholder{color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.searchbar-input.sc-ion-searchbar-md::placeholder{color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.searchbar-input.sc-ion-searchbar-md::-webkit-search-cancel-button,.searchbar-input.sc-ion-searchbar-md::-ms-clear{display:none}.searchbar-cancel-button.sc-ion-searchbar-md{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;display:none;height:100%;border:0;outline:none;color:var(--cancel-button-color);cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none}.searchbar-cancel-button.sc-ion-searchbar-md>div.sc-ion-searchbar-md{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%}.searchbar-clear-button.sc-ion-searchbar-md{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;display:none;min-height:0;outline:none;color:var(--clear-button-color);-webkit-appearance:none;-moz-appearance:none;appearance:none}.searchbar-clear-button.sc-ion-searchbar-md:focus{opacity:0.5}.searchbar-has-value.searchbar-should-show-clear.sc-ion-searchbar-md-h .searchbar-clear-button.sc-ion-searchbar-md{display:block}.sc-ion-searchbar-md-h{--placeholder-opacity:var(--ion-placeholder-opacity, 0.6);font-family:var(--ion-font-family, inherit)}.ion-color.sc-ion-searchbar-md-h{color:var(--ion-color-contrast)}.ion-color.sc-ion-searchbar-md-h .searchbar-input.sc-ion-searchbar-md{background:var(--ion-color-base)}.ion-color.sc-ion-searchbar-md-h .searchbar-clear-button.sc-ion-searchbar-md,.ion-color.sc-ion-searchbar-md-h .searchbar-cancel-button.sc-ion-searchbar-md,.ion-color.sc-ion-searchbar-md-h .searchbar-search-icon.sc-ion-searchbar-md{color:inherit}.searchbar-disabled.sc-ion-searchbar-md-h{cursor:default;opacity:0.4;pointer-events:none}.sc-ion-searchbar-md-h{--background:var(--ion-background-color, #fff);--border-radius:2px;--box-shadow:0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);--cancel-button-color:var(--ion-color-step-900, var(--ion-text-color-step-100, #1a1a1a));--clear-button-color:initial;--color:var(--ion-color-step-850, var(--ion-text-color-step-150, #262626));--icon-color:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666));-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:8px;padding-inline-end:8px;padding-top:8px;padding-bottom:8px;background:inherit}.searchbar-search-icon.sc-ion-searchbar-md{top:11px;width:1.3125rem;height:1.3125rem}.searchbar-search-icon.sc-ion-searchbar-md{inset-inline-start:16px}.searchbar-cancel-button.sc-ion-searchbar-md{top:0;background-color:transparent;font-size:1.5em}.searchbar-cancel-button.sc-ion-searchbar-md{inset-inline-start:9px}.searchbar-search-icon.sc-ion-searchbar-md,.searchbar-cancel-button.sc-ion-searchbar-md{position:absolute}.searchbar-search-icon.ion-activated.sc-ion-searchbar-md,.searchbar-cancel-button.ion-activated.sc-ion-searchbar-md{background-color:transparent}.searchbar-input.sc-ion-searchbar-md{-webkit-padding-start:3.4375rem;padding-inline-start:3.4375rem;-webkit-padding-end:3.4375rem;padding-inline-end:3.4375rem;padding-top:0.375rem;padding-bottom:0.375rem;background-position:left 8px center;height:auto;font-size:1rem;font-weight:400;line-height:30px}[dir=rtl].sc-ion-searchbar-md-h .searchbar-input.sc-ion-searchbar-md,[dir=rtl] .sc-ion-searchbar-md-h .searchbar-input.sc-ion-searchbar-md{background-position:right 8px center}[dir=rtl].sc-ion-searchbar-md .searchbar-input.sc-ion-searchbar-md{background-position:right 8px center}@supports selector(:dir(rtl)){.searchbar-input.sc-ion-searchbar-md:dir(rtl){background-position:right 8px center}}.searchbar-clear-button.sc-ion-searchbar-md{top:0;padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;position:absolute;height:100%;border:0;background-color:transparent}.searchbar-clear-button.sc-ion-searchbar-md{inset-inline-end:13px}.searchbar-clear-button.ion-activated.sc-ion-searchbar-md{background-color:transparent}.searchbar-clear-icon.sc-ion-searchbar-md{width:1.375rem;height:100%}.searchbar-has-focus.sc-ion-searchbar-md-h .searchbar-search-icon.sc-ion-searchbar-md{display:block}.searchbar-has-focus.sc-ion-searchbar-md-h .searchbar-cancel-button.sc-ion-searchbar-md,.searchbar-should-show-cancel.sc-ion-searchbar-md-h .searchbar-cancel-button.sc-ion-searchbar-md{display:block}.searchbar-has-focus.sc-ion-searchbar-md-h .searchbar-cancel-button.sc-ion-searchbar-md+.searchbar-search-icon.sc-ion-searchbar-md,.searchbar-should-show-cancel.sc-ion-searchbar-md-h .searchbar-cancel-button.sc-ion-searchbar-md+.searchbar-search-icon.sc-ion-searchbar-md{display:none}ion-toolbar.sc-ion-searchbar-md-h,ion-toolbar .sc-ion-searchbar-md-h{-webkit-padding-start:7px;padding-inline-start:7px;-webkit-padding-end:7px;padding-inline-end:7px;padding-top:3px;padding-bottom:3px}";

const Searchbar = /*@__PURE__*/ proxyCustomElement(class Searchbar extends HTMLElement {
    constructor(registerHost) {
        super();
        if (registerHost !== false) {
            this.__registerHost();
        }
        this.ionInput = createEvent(this, "ionInput", 7);
        this.ionChange = createEvent(this, "ionChange", 7);
        this.ionCancel = createEvent(this, "ionCancel", 7);
        this.ionClear = createEvent(this, "ionClear", 7);
        this.ionBlur = createEvent(this, "ionBlur", 7);
        this.ionFocus = createEvent(this, "ionFocus", 7);
        this.ionStyle = createEvent(this, "ionStyle", 7);
        this.isCancelVisible = false;
        this.shouldAlignLeft = true;
        this.inputId = `ion-searchbar-${searchbarIds++}`;
        this.inheritedAttributes = {};
        this.focused = false;
        this.noAnimate = true;
        /**
         * If `true`, enable searchbar animation.
         */
        this.animated = false;
        /**
         * Indicates whether and how the text value should be automatically capitalized as it is entered/edited by the user.
         * Available options: `"off"`, `"none"`, `"on"`, `"sentences"`, `"words"`, `"characters"`.
         */
        this.autocapitalize = 'off';
        /**
         * Set the input's autocomplete property.
         */
        this.autocomplete = 'off';
        /**
         * Set the input's autocorrect property.
         */
        this.autocorrect = 'off';
        /**
         * Set the cancel button text. Only available when the theme is `"ios"`.
         */
        this.cancelButtonText = 'Cancel';
        /**
         * If `true`, the user cannot interact with the input.
         */
        this.disabled = false;
        /**
         * If used in a form, set the name of the control, which is submitted with the form data.
         */
        this.name = this.inputId;
        /**
         * Set the input's placeholder.
         * `placeholder` can accept either plaintext or HTML as a string.
         * To display characters normally reserved for HTML, they
         * must be escaped. For example `<Ionic>` would become
         * `&lt;Ionic&gt;`
         *
         * For more information: [Security Documentation](https://ionicframework.com/docs/faq/security)
         */
        this.placeholder = 'Search';
        /**
         * Sets the behavior for the cancel button. Defaults to `"never"`.
         * Setting to `"focus"` shows the cancel button on focus.
         * Setting to `"never"` hides the cancel button.
         * Setting to `"always"` shows the cancel button regardless
         * of focus state.
         */
        this.showCancelButton = 'never';
        /**
         * Sets the behavior for the clear button. Defaults to `"focus"`.
         * Setting to `"focus"` shows the clear button on focus if the
         * input is not empty.
         * Setting to `"never"` hides the clear button.
         * Setting to `"always"` shows the clear button regardless
         * of focus state, but only if the input is not empty.
         */
        this.showClearButton = 'always';
        /**
         * If `true`, enable spellcheck on the input.
         */
        this.spellcheck = false;
        /**
         * Set the type of the input.
         */
        this.type = 'search';
        /**
         * the value of the searchbar.
         */
        this.value = '';
        /**
         * Clears the input field and triggers the control change.
         */
        this.onClearInput = async (shouldFocus) => {
            this.ionClear.emit();
            return new Promise((resolve) => {
                // setTimeout() fixes https://github.com/ionic-team/ionic-framework/issues/7527
                // wait for 4 frames
                setTimeout(() => {
                    const value = this.getValue();
                    if (value !== '') {
                        this.value = '';
                        this.emitInputChange();
                        /**
                         * When tapping clear button
                         * ensure input is focused after
                         * clearing input so users
                         * can quickly start typing.
                         */
                        if (shouldFocus && !this.focused) {
                            this.setFocus();
                            /**
                             * The setFocus call above will clear focusedValue,
                             * but ionChange will never have gotten a chance to
                             * fire. Manually revert focusedValue so onBlur can
                             * compare against what was in the box before the clear.
                             */
                            this.focusedValue = value;
                        }
                    }
                    resolve();
                }, 16 * 4);
            });
        };
        /**
         * Clears the input field and tells the input to blur since
         * the clearInput function doesn't want the input to blur
         * then calls the custom cancel function if the user passed one in.
         */
        this.onCancelSearchbar = async (ev) => {
            if (ev) {
                ev.preventDefault();
                ev.stopPropagation();
            }
            this.ionCancel.emit();
            // get cached values before clearing the input
            const value = this.getValue();
            const focused = this.focused;
            await this.onClearInput();
            /**
             * If there used to be something in the box, and we weren't focused
             * beforehand (meaning no blur fired that would already handle this),
             * manually fire ionChange.
             */
            if (value && !focused) {
                this.emitValueChange(ev);
            }
            if (this.nativeInput) {
                this.nativeInput.blur();
            }
        };
        /**
         * Update the Searchbar input value when the input changes
         */
        this.onInput = (ev) => {
            const input = ev.target;
            if (input) {
                this.value = input.value;
            }
            this.emitInputChange(ev);
        };
        this.onChange = (ev) => {
            this.emitValueChange(ev);
        };
        /**
         * Sets the Searchbar to not focused and checks if it should align left
         * based on whether there is a value in the searchbar or not.
         */
        this.onBlur = (ev) => {
            this.focused = false;
            this.ionBlur.emit();
            this.positionElements();
            if (this.focusedValue !== this.value) {
                this.emitValueChange(ev);
            }
            this.focusedValue = undefined;
        };
        /**
         * Sets the Searchbar to focused and active on input focus.
         */
        this.onFocus = () => {
            this.focused = true;
            this.focusedValue = this.value;
            this.ionFocus.emit();
            this.positionElements();
        };
    }
    /**
     * lang and dir are globally enumerated attributes.
     * As a result, creating these as properties
     * can have unintended side effects. Instead, we
     * listen for attribute changes and inherit them
     * to the inner `<input>` element.
     */
    onLangChanged(newValue) {
        this.inheritedAttributes = Object.assign(Object.assign({}, this.inheritedAttributes), { lang: newValue });
        forceUpdate(this);
    }
    onDirChanged(newValue) {
        this.inheritedAttributes = Object.assign(Object.assign({}, this.inheritedAttributes), { dir: newValue });
        forceUpdate(this);
    }
    debounceChanged() {
        const { ionInput, debounce, originalIonInput } = this;
        /**
         * If debounce is undefined, we have to manually revert the ionInput emitter in case
         * debounce used to be set to a number. Otherwise, the event would stay debounced.
         */
        this.ionInput = debounce === undefined ? originalIonInput !== null && originalIonInput !== void 0 ? originalIonInput : ionInput : debounceEvent(ionInput, debounce);
    }
    valueChanged() {
        const inputEl = this.nativeInput;
        const value = this.getValue();
        if (inputEl && inputEl.value !== value) {
            inputEl.value = value;
        }
    }
    showCancelButtonChanged() {
        requestAnimationFrame(() => {
            this.positionElements();
            forceUpdate(this);
        });
    }
    connectedCallback() {
        this.emitStyle();
    }
    componentWillLoad() {
        this.inheritedAttributes = Object.assign({}, inheritAttributes(this.el, ['lang', 'dir']));
    }
    componentDidLoad() {
        this.originalIonInput = this.ionInput;
        this.positionElements();
        this.debounceChanged();
        setTimeout(() => {
            this.noAnimate = false;
        }, 300);
    }
    emitStyle() {
        this.ionStyle.emit({
            searchbar: true,
        });
    }
    /**
     * Sets focus on the native `input` in `ion-searchbar`. Use this method instead of the global
     * `input.focus()`.
     * Developers who wish to focus an input when a page enters
     * should call `setFocus()` in the `ionViewDidEnter()` lifecycle method.
     * Developers who wish to focus an input when an overlay is presented
     * should call `setFocus` after `didPresent` has resolved.
     *
     * See [managing focus](/docs/developing/managing-focus) for more information.
     */
    async setFocus() {
        if (this.nativeInput) {
            this.nativeInput.focus();
        }
    }
    /**
     * Returns the native `<input>` element used under the hood.
     */
    async getInputElement() {
        /**
         * If this gets called in certain early lifecycle hooks (ex: Vue onMounted),
         * nativeInput won't be defined yet with the custom elements build, so wait for it to load in.
         */
        if (!this.nativeInput) {
            await new Promise((resolve) => componentOnReady(this.el, resolve));
        }
        return Promise.resolve(this.nativeInput);
    }
    /**
     * Emits an `ionChange` event.
     *
     * This API should be called for user committed changes.
     * This API should not be used for external value changes.
     */
    emitValueChange(event) {
        const { value } = this;
        // Checks for both null and undefined values
        const newValue = value == null ? value : value.toString();
        // Emitting a value change should update the internal state for tracking the focused value
        this.focusedValue = newValue;
        this.ionChange.emit({ value: newValue, event });
    }
    /**
     * Emits an `ionInput` event.
     */
    emitInputChange(event) {
        const { value } = this;
        this.ionInput.emit({ value, event });
    }
    /**
     * Positions the input search icon, placeholder, and the cancel button
     * based on the input value and if it is focused. (ios only)
     */
    positionElements() {
        const value = this.getValue();
        const prevAlignLeft = this.shouldAlignLeft;
        const theme = getIonTheme(this);
        const shouldAlignLeft = !this.animated || value.trim() !== '' || !!this.focused;
        this.shouldAlignLeft = shouldAlignLeft;
        if (theme !== 'ios') {
            return;
        }
        if (prevAlignLeft !== shouldAlignLeft) {
            this.positionPlaceholder();
        }
        if (this.animated) {
            this.positionCancelButton();
        }
    }
    /**
     * Positions the input placeholder
     */
    positionPlaceholder() {
        const inputEl = this.nativeInput;
        if (!inputEl) {
            return;
        }
        const rtl = isRTL(this.el);
        const iconEl = (this.el.shadowRoot || this.el).querySelector('.searchbar-search-icon');
        if (this.shouldAlignLeft) {
            inputEl.removeAttribute('style');
            iconEl.removeAttribute('style');
        }
        else {
            // Create a dummy span to get the placeholder width
            const doc = document;
            const tempSpan = doc.createElement('span');
            tempSpan.innerText = this.placeholder || '';
            doc.body.appendChild(tempSpan);
            // Get the width of the span then remove it
            raf(() => {
                const textWidth = tempSpan.offsetWidth;
                tempSpan.remove();
                // Calculate the input padding
                const inputLeft = 'calc(50% - ' + textWidth / 2 + 'px)';
                // Calculate the icon margin
                /**
                 * We take the icon width to account
                 * for any text scales applied to the icon
                 * such as Dynamic Type on iOS as well as 8px
                 * of padding.
                 */
                const iconLeft = 'calc(50% - ' + (textWidth / 2 + iconEl.clientWidth + 8) + 'px)';
                // Set the input padding start and icon margin start
                if (rtl) {
                    inputEl.style.paddingRight = inputLeft;
                    iconEl.style.marginRight = iconLeft;
                }
                else {
                    inputEl.style.paddingLeft = inputLeft;
                    iconEl.style.marginLeft = iconLeft;
                }
            });
        }
    }
    /**
     * Show the iOS Cancel button on focus, hide it offscreen otherwise
     */
    positionCancelButton() {
        const rtl = isRTL(this.el);
        const cancelButton = (this.el.shadowRoot || this.el).querySelector('.searchbar-cancel-button');
        const shouldShowCancel = this.shouldShowCancelButton();
        if (cancelButton !== null && shouldShowCancel !== this.isCancelVisible) {
            const cancelStyle = cancelButton.style;
            this.isCancelVisible = shouldShowCancel;
            if (shouldShowCancel) {
                if (rtl) {
                    cancelStyle.marginLeft = '0';
                }
                else {
                    cancelStyle.marginRight = '0';
                }
            }
            else {
                const offset = cancelButton.offsetWidth;
                if (offset > 0) {
                    if (rtl) {
                        cancelStyle.marginLeft = -offset + 'px';
                    }
                    else {
                        cancelStyle.marginRight = -offset + 'px';
                    }
                }
            }
        }
    }
    getValue() {
        return this.value || '';
    }
    hasValue() {
        return this.getValue() !== '';
    }
    shouldShowSearchIcon() {
        if (this.searchIcon === false || this.searchIcon === 'false') {
            return false;
        }
        return true;
    }
    /**
     * Determines whether or not the cancel button should be visible onscreen.
     * Cancel button should be shown if one of two conditions applies:
     * 1. `showCancelButton` is set to `always`.
     * 2. `showCancelButton` is set to `focus`, and the searchbar has been focused.
     */
    shouldShowCancelButton() {
        if (this.showCancelButton === 'never' || (this.showCancelButton === 'focus' && !this.focused)) {
            return false;
        }
        return true;
    }
    /**
     * Determines whether or not the clear button should be visible onscreen.
     * Clear button should be shown if one of two conditions applies:
     * 1. `showClearButton` is set to `always`.
     * 2. `showClearButton` is set to `focus`, and the searchbar has been focused.
     * Unless the `theme` is `ionic` and the searchbar is disabled.
     */
    shouldShowClearButton() {
        const theme = getIonTheme(this);
        if (this.showClearButton === 'never' || (this.showClearButton === 'focus' && !this.focused)) {
            return false;
        }
        if (theme === 'ionic' && this.disabled) {
            return false;
        }
        return true;
    }
    getShape() {
        const theme = getIonTheme(this);
        const { shape } = this;
        // TODO(ROU-11677): Remove theme check when shapes are defined for all themes.
        if (theme !== 'ionic') {
            return undefined;
        }
        if (shape === undefined) {
            return 'round';
        }
        return shape;
    }
    getSize() {
        const theme = getIonTheme(this);
        const { size } = this;
        // TODO(ROU-11678): Remove theme check when sizes are defined for all themes.
        if (theme !== 'ionic') {
            return undefined;
        }
        if (size === undefined) {
            return 'medium';
        }
        return size;
    }
    /**
     * Get the icon to use for the clear icon.
     * If an icon is set on the component, use that.
     * Otherwise, use the icon set in the config.
     * If no icon is set in the config, use the default icon.
     */
    get searchbarClearIcon() {
        // Return the icon if it is explicitly set
        if (this.clearIcon != null) {
            return this.clearIcon;
        }
        // Determine the theme and map to default icons
        const theme = getIonTheme(this);
        const defaultIcons = {
            ios: closeCircle,
            ionic: xSvg,
            md: closeSharp,
        };
        // Get the default icon based on the theme, falling back to 'md' icon if necessary
        const defaultIcon = defaultIcons[theme] || defaultIcons.md;
        // Return the configured searchbar clear icon or the default icon
        return config.get('searchbarClearIcon', defaultIcon);
    }
    /**
     * Get the icon to use for the search icon.
     * If an icon is set on the component, use that.
     * Otherwise, use the icon set in the config.
     * If no icon is set in the config, use the default icon.
     */
    get searchbarSearchIcon() {
        // Return the icon if it is explicitly set.
        // If the icon is set to a boolean or string 'true', use the default icon.
        if (this.searchIcon != null && this.searchIcon !== 'true' && typeof this.searchIcon !== 'boolean') {
            return this.searchIcon;
        }
        // Determine the theme and map to default icons
        const theme = getIonTheme(this);
        const defaultIcons = {
            ios: searchOutline,
            ionic: magnifyingGlassSvg,
            md: searchSharp,
        };
        // Get the default icon based on the theme, falling back to 'md' icon if necessary
        const defaultIcon = defaultIcons[theme] || defaultIcons.md;
        // Return the configured searchbar search icon or the default icon
        return config.get('searchbarSearchIcon', defaultIcon);
    }
    /**
     * Get the icon to use for the cancel icon.
     * If an icon is set on the component, use that.
     * Otherwise, use the icon set in the config.
     * If no icon is set in the config, use the default icon.
     */
    get searchbarCancelIcon() {
        // Return the icon if it is explicitly set
        if (this.cancelButtonIcon != null) {
            return this.cancelButtonIcon;
        }
        // Determine the theme and map to default icons
        const theme = getIonTheme(this);
        const defaultIcons = {
            ios: arrowBackSharp,
            ionic: arrowLeftSvg,
            md: arrowBackSharp,
        };
        // Get the default icon based on the theme, falling back to 'md' icon if necessary
        const defaultIcon = defaultIcons[theme] || defaultIcons.md;
        // Return the configured searchbar cancel icon, the back button icon or the default icon
        return config.get('searchbarCancelIcon', config.get('backButtonIcon', defaultIcon));
    }
    render() {
        const { cancelButtonText, autocapitalize, searchbarCancelIcon, searchbarClearIcon, searchbarSearchIcon } = this;
        const animated = this.animated && config.getBoolean('animated', true);
        const theme = getIonTheme(this);
        const shouldShowCancelButton = this.shouldShowCancelButton();
        const shape = this.getShape();
        const size = this.getSize();
        const cancelButton = this.showCancelButton !== 'never' && (h("button", { key: '3f7daa2a4ec57132e8baf591542569338e7ec9c8', "aria-label": cancelButtonText, "aria-hidden": shouldShowCancelButton ? undefined : 'true', type: "button", tabIndex: theme === 'ios' && !shouldShowCancelButton ? -1 : undefined, onMouseDown: this.onCancelSearchbar, onTouchStart: this.onCancelSearchbar, class: "searchbar-cancel-button" }, h("div", { key: 'f214142fec5644d91eae82644558e6b817094957', "aria-hidden": "true" }, theme === 'md' || theme === 'ionic' ? (h("ion-icon", { "aria-hidden": "true", icon: searchbarCancelIcon, lazy: false })) : (cancelButtonText))));
        return (h(Host, { key: '47e075305f28373fffab3e006ab4014da6dfb0c8', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: createColorClasses(this.color, {
                [theme]: true,
                'searchbar-animated': animated,
                'searchbar-disabled': this.disabled,
                'searchbar-no-animate': animated && this.noAnimate,
                'searchbar-has-value': this.hasValue(),
                'searchbar-left-aligned': this.shouldAlignLeft,
                'searchbar-has-focus': this.focused,
                'searchbar-should-show-search-icon': this.shouldShowSearchIcon(),
                'searchbar-should-show-clear': this.shouldShowClearButton(),
                'searchbar-should-show-cancel': this.shouldShowCancelButton(),
                [`searchbar-shape-${shape}`]: shape !== undefined,
                [`searchbar-size-${size}`]: size !== undefined,
                'in-toolbar': hostContext('ion-toolbar', this.el),
            }) }, h("div", { key: '14b271ab3eebf1b651a8cfd758c7880b548bb98d', class: "searchbar-input-container" }, h("input", Object.assign({ key: 'f84a9435002eba2084ce0269fa3c926b7c03209d', "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)), (theme === 'md' || theme === 'ionic') && cancelButton, this.shouldShowSearchIcon() && (h("ion-icon", { key: 'e1c7a66dba99591b0e3df5966acd027a561ee0ca', "aria-hidden": "true", icon: searchbarSearchIcon, lazy: false, class: "searchbar-search-icon" })), this.shouldShowClearButton() && (h("button", { key: 'bf55ac02128e22f9d303e75b9289c251bd582cdd', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
                /**
                 * This prevents mobile browsers from
                 * blurring the input when the clear
                 * button is activated.
                 */
                ev.preventDefault();
            }, onClick: () => this.onClearInput(true) }, h("ion-icon", { key: '1ce87193499ccb682ad115a64cc5579e9bb586c9', "aria-hidden": "true", icon: searchbarClearIcon, lazy: false, class: "searchbar-clear-icon" })))), theme === 'ios' && cancelButton));
    }
    get el() { return this; }
    static get watchers() { return {
        "lang": ["onLangChanged"],
        "dir": ["onDirChanged"],
        "debounce": ["debounceChanged"],
        "value": ["valueChanged"],
        "showCancelButton": ["showCancelButtonChanged"]
    }; }
    static get style() { return {
        ionic: searchbarIonicCss,
        ios: searchbarIosCss,
        md: searchbarMdCss
    }; }
}, [290, "ion-searchbar", {
        "color": [513],
        "animated": [4],
        "autocapitalize": [1],
        "autocomplete": [1],
        "autocorrect": [1],
        "cancelButtonIcon": [1, "cancel-button-icon"],
        "cancelButtonText": [1, "cancel-button-text"],
        "clearIcon": [1, "clear-icon"],
        "debounce": [2],
        "disabled": [4],
        "inputmode": [1],
        "enterkeyhint": [1],
        "maxlength": [2],
        "minlength": [2],
        "name": [1],
        "placeholder": [1],
        "searchIcon": [8, "search-icon"],
        "showCancelButton": [1, "show-cancel-button"],
        "showClearButton": [1, "show-clear-button"],
        "spellcheck": [4],
        "type": [1],
        "value": [1025],
        "shape": [1],
        "size": [1],
        "focused": [32],
        "noAnimate": [32],
        "setFocus": [64],
        "getInputElement": [64]
    }, undefined, {
        "lang": ["onLangChanged"],
        "dir": ["onDirChanged"],
        "debounce": ["debounceChanged"],
        "value": ["valueChanged"],
        "showCancelButton": ["showCancelButtonChanged"]
    }]);
let searchbarIds = 0;
function defineCustomElement$1() {
    if (typeof customElements === "undefined") {
        return;
    }
    const components = ["ion-searchbar", "ion-icon"];
    components.forEach(tagName => { switch (tagName) {
        case "ion-searchbar":
            if (!customElements.get(tagName)) {
                customElements.define(tagName, Searchbar);
            }
            break;
        case "ion-icon":
            if (!customElements.get(tagName)) {
                defineCustomElement$2();
            }
            break;
    } });
}

const IonSearchbar = Searchbar;
const defineCustomElement = defineCustomElement$1;

export { IonSearchbar, defineCustomElement };
