text: import { __awaiter, __generator } from "tslib";
  import { r as registerInstance, e as createEvent, f as readTask, h, H as Host, i as getElement } from './index-92848855.js';
  import { b as getIonMode } from './ionic-global-23e7365a.js';
  import { d as debounceEvent, r as raf, f as findItemLabel } from './helpers-5c745fbd.js';
  import { c as createColorClasses } from './theme-5641d27f.js';
  var textareaIosCss = ".sc-ion-textarea-ios-h{--background:initial;--color:initial;--placeholder-color:initial;--placeholder-font-style:initial;--placeholder-font-weight:initial;--placeholder-opacity:.5;--padding-top:0;--padding-end:0;--padding-bottom:0;--padding-start:0;--border-radius:0;display:block;position:relative;-ms-flex:1;flex:1;width:100%;background:var(--background);color:var(--color);font-family:var(--ion-font-family, inherit);white-space:pre-wrap;z-index:2;-webkit-box-sizing:border-box;box-sizing:border-box}.ion-color.sc-ion-textarea-ios-h{background:initial}.ion-color.sc-ion-textarea-ios-h{color:var(--ion-color-base)}ion-item.sc-ion-textarea-ios-h,ion-item .sc-ion-textarea-ios-h{-ms-flex-item-align:baseline;align-self:baseline}ion-item.sc-ion-textarea-ios-h:not(.item-label),ion-item:not(.item-label) .sc-ion-textarea-ios-h{--padding-start:0}.textarea-wrapper.sc-ion-textarea-ios{min-width:inherit;max-width:inherit;min-height:inherit;max-height:inherit}.native-textarea.sc-ion-textarea-ios{border-radius:var(--border-radius);margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;padding-left:var(--padding-start);padding-right:var(--padding-end);padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-indent:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;display:block;width:100%;max-width:100%;max-height:100%;border:0;outline:none;background:transparent;-webkit-box-sizing:border-box;box-sizing:border-box;resize:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.native-textarea.sc-ion-textarea-ios{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end)}}.native-textarea.sc-ion-textarea-ios::-webkit-input-placeholder{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.native-textarea.sc-ion-textarea-ios::-moz-placeholder{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.native-textarea.sc-ion-textarea-ios:-ms-input-placeholder{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.native-textarea.sc-ion-textarea-ios::-ms-input-placeholder{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.native-textarea.sc-ion-textarea-ios::placeholder{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.native-textarea[disabled].sc-ion-textarea-ios{opacity:0.4}.cloned-input.sc-ion-textarea-ios{left:0;top:0;position:absolute;pointer-events:none}[dir=rtl].sc-ion-textarea-ios .cloned-input.sc-ion-textarea-ios,[dir=rtl].sc-ion-textarea-ios-h .cloned-input.sc-ion-textarea-ios,[dir=rtl] .sc-ion-textarea-ios-h .cloned-input.sc-ion-textarea-ios{left:unset;right:unset;right:0}.sc-ion-textarea-ios-h{--padding-top:10px;--padding-end:10px;--padding-bottom:10px;--padding-start:0;font-size:inherit}.item-label-stacked.sc-ion-textarea-ios-h,.item-label-stacked .sc-ion-textarea-ios-h,.item-label-floating.sc-ion-textarea-ios-h,.item-label-floating .sc-ion-textarea-ios-h{--padding-top:8px;--padding-bottom:8px;--padding-start:0px}";
  var textareaMdCss = ".sc-ion-textarea-md-h{--background:initial;--color:initial;--placeholder-color:initial;--placeholder-font-style:initial;--placeholder-font-weight:initial;--placeholder-opacity:.5;--padding-top:0;--padding-end:0;--padding-bottom:0;--padding-start:0;--border-radius:0;display:block;position:relative;-ms-flex:1;flex:1;width:100%;background:var(--background);color:var(--color);font-family:var(--ion-font-family, inherit);white-space:pre-wrap;z-index:2;-webkit-box-sizing:border-box;box-sizing:border-box}.ion-color.sc-ion-textarea-md-h{background:initial}.ion-color.sc-ion-textarea-md-h{color:var(--ion-color-base)}ion-item.sc-ion-textarea-md-h,ion-item .sc-ion-textarea-md-h{-ms-flex-item-align:baseline;align-self:baseline}ion-item.sc-ion-textarea-md-h:not(.item-label),ion-item:not(.item-label) .sc-ion-textarea-md-h{--padding-start:0}.textarea-wrapper.sc-ion-textarea-md{min-width:inherit;max-width:inherit;min-height:inherit;max-height:inherit}.native-textarea.sc-ion-textarea-md{border-radius:var(--border-radius);margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;padding-left:var(--padding-start);padding-right:var(--padding-end);padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-indent:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;display:block;width:100%;max-width:100%;max-height:100%;border:0;outline:none;background:transparent;-webkit-box-sizing:border-box;box-sizing:border-box;resize:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.native-textarea.sc-ion-textarea-md{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end)}}.native-textarea.sc-ion-textarea-md::-webkit-input-placeholder{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.native-textarea.sc-ion-textarea-md::-moz-placeholder{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.native-textarea.sc-ion-textarea-md:-ms-input-placeholder{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.native-textarea.sc-ion-textarea-md::-ms-input-placeholder{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.native-textarea.sc-ion-textarea-md::placeholder{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity)}.native-textarea[disabled].sc-ion-textarea-md{opacity:0.4}.cloned-input.sc-ion-textarea-md{left:0;top:0;position:absolute;pointer-events:none}[dir=rtl].sc-ion-textarea-md .cloned-input.sc-ion-textarea-md,[dir=rtl].sc-ion-textarea-md-h .cloned-input.sc-ion-textarea-md,[dir=rtl] .sc-ion-textarea-md-h .cloned-input.sc-ion-textarea-md{left:unset;right:unset;right:0}.sc-ion-textarea-md-h{--padding-top:10px;--padding-end:0;--padding-bottom:11px;--padding-start:8px;margin-left:0;margin-right:0;margin-top:8px;margin-bottom:0;font-size:inherit}.item-label-stacked.sc-ion-textarea-md-h,.item-label-stacked .sc-ion-textarea-md-h,.item-label-floating.sc-ion-textarea-md-h,.item-label-floating .sc-ion-textarea-md-h{--padding-top:8px;--padding-bottom:8px;--padding-start:0}";
  var Textarea = /** @class */ (function () {
      function class_1(hostRef) {
          var _this = this;
          registerInstance(this, hostRef);
          this.ionChange = createEvent(this, "ionChange", 7);
          this.ionInput = createEvent(this, "ionInput", 7);
          this.ionStyle = createEvent(this, "ionStyle", 7);
          this.ionBlur = createEvent(this, "ionBlur", 7);
          this.ionFocus = createEvent(this, "ionFocus", 7);
          this.inputId = "ion-textarea-" + textareaIds++;
          this.didBlurAfterEdit = false;
          /**
           * This is required for a WebKit bug which requires us to
           * blur and focus an input to properly focus the input in
           * an item with delegatesFocus. It will no longer be needed
           * with iOS 14.
           *
           * @internal
           */
          this.fireFocusEvents = true;
          this.hasFocus = false;
          /**
           * Indicates whether and how the text value should be automatically capitalized as it is entered/edited by the user.
           */
          this.autocapitalize = 'none';
          /**
           * This Boolean attribute lets you specify that a form control should have input focus when the page loads.
           */
          this.autofocus = false;
          /**
           * If `true`, the value will be cleared after focus upon edit. Defaults to `true` when `type` is `"password"`, `false` for all other types.
           */
          this.clearOnEdit = false;
          /**
           * Set the amount of time, in milliseconds, to wait to trigger the `ionChange` event after each keystroke.
           */
          this.debounce = 0;
          /**
           * If `true`, the user cannot interact with the textarea.
           */
          this.disabled = false;
          /**
           * The name of the control, which is submitted with the form data.
           */
          this.name = this.inputId;
          /**
           * If `true`, the user cannot modify the value.
           */
          this.readonly = false;
          /**
           * If `true`, the user must fill in a value before submitting a form.
           */
          this.required = false;
          /**
           * If `true`, the element will have its spelling and grammar checked.
           */
          this.spellcheck = false;
          /**
           * If `true`, the element height will increase based on the value.
           */
          this.autoGrow = false;
          /**
           * The value of the textarea.
           */
          this.value = '';
          this.onInput = function (ev) {
              if (_this.nativeInput) {
                  _this.value = _this.nativeInput.value;
              }
              _this.emitStyle();
              _this.ionInput.emit(ev);
          };
          this.onFocus = function (ev) {
              _this.hasFocus = true;
              _this.focusChange();
              if (_this.fireFocusEvents) {
                  _this.ionFocus.emit(ev);
              }
          };
          this.onBlur = function (ev) {
              _this.hasFocus = false;
              _this.focusChange();
              if (_this.fireFocusEvents) {
                  _this.ionBlur.emit(ev);
              }
          };
          this.onKeyDown = function () {
              _this.checkClearOnEdit();
          };
      }
      class_1.prototype.debounceChanged = function () {
          this.ionChange = debounceEvent(this.ionChange, this.debounce);
      };
      class_1.prototype.disabledChanged = function () {
          this.emitStyle();
      };
      /**
       * Update the native input element when the value changes
       */
      class_1.prototype.valueChanged = function () {
          var nativeInput = this.nativeInput;
          var value = this.getValue();
          if (nativeInput && nativeInput.value !== value) {
              nativeInput.value = value;
          }
          this.runAutoGrow();
          this.emitStyle();
          this.ionChange.emit({ value: value });
      };
      class_1.prototype.connectedCallback = function () {
          this.emitStyle();
          this.debounceChanged();
          {
              document.dispatchEvent(new CustomEvent('ionInputDidLoad', {
                  detail: this.el
              }));
          }
      };
      class_1.prototype.disconnectedCallback = function () {
          {
              document.dispatchEvent(new CustomEvent('ionInputDidUnload', {
                  detail: this.el
              }));
          }
      };
      class_1.prototype.componentDidLoad = function () {
          var _this = this;
          raf(function () { return _this.runAutoGrow(); });
      };
      class_1.prototype.runAutoGrow = function () {
          var _this = this;
          var nativeInput = this.nativeInput;
          if (nativeInput && this.autoGrow) {
              readTask(function () {
                  nativeInput.style.height = 'auto';
                  nativeInput.style.height = nativeInput.scrollHeight + 'px';
                  if (_this.textareaWrapper) {
                      _this.textareaWrapper.style.height = nativeInput.scrollHeight + 'px';
                  }
              });
          }
      };
      /**
       * Sets focus on the native `textarea` in `ion-textarea`. Use this method instead of the global
       * `textarea.focus()`.
       */
      class_1.prototype.setFocus = function () {
          return __awaiter(this, void 0, void 0, function () {
              return __generator(this, function (_a) {
                  if (this.nativeInput) {
                      this.nativeInput.focus();
                  }
                  return [2 /*return*/];
              });
          });
      };
      /**
       * Sets blur on the native `textarea` in `ion-textarea`. Use this method instead of the global
       * `textarea.blur()`.
       * @internal
       */
      class_1.prototype.setBlur = function () {
          return __awaiter(this, void 0, void 0, function () {
              return __generator(this, function (_a) {
                  if (this.nativeInput) {
                      this.nativeInput.blur();
                  }
                  return [2 /*return*/];
              });
          });
      };
      /**
       * Returns the native `<textarea>` element used under the hood.
       */
      class_1.prototype.getInputElement = function () {
          return Promise.resolve(this.nativeInput);
      };
      class_1.prototype.emitStyle = function () {
          this.ionStyle.emit({
              'interactive': true,
              'textarea': true,
              'input': true,
              'interactive-disabled': this.disabled,
              'has-placeholder': this.placeholder != null,
              'has-value': this.hasValue(),
              'has-focus': this.hasFocus
          });
      };
      /**
       * Check if we need to clear the text input if clearOnEdit is enabled
       */
      class_1.prototype.checkClearOnEdit = function () {
          if (!this.clearOnEdit) {
              return;
          }
          // Did the input value change after it was blurred and edited?
          if (this.didBlurAfterEdit && this.hasValue()) {
              // Clear the input
              this.value = '';
          }
          // Reset the flag
          this.didBlurAfterEdit = false;
      };
      class_1.prototype.focusChange = function () {
          // If clearOnEdit is enabled and the input blurred but has a value, set a flag
          if (this.clearOnEdit && !this.hasFocus && this.hasValue()) {
              this.didBlurAfterEdit = true;
          }
          this.emitStyle();
      };
      class_1.prototype.hasValue = function () {
          return this.getValue() !== '';
      };
      class_1.prototype.getValue = function () {
          return this.value || '';
      };
      class_1.prototype.render = function () {
          var _a;
          var _this = this;
          var mode = getIonMode(this);
          var value = this.getValue();
          var labelId = this.inputId + '-lbl';
          var label = findItemLabel(this.el);
          if (label) {
              label.id = labelId;
          }
          return (h(Host, { "aria-disabled": this.disabled ? 'true' : null, class: createColorClasses(this.color, (_a = {},
                  _a[mode] = true,
                  _a)) }, h("div", { class: "textarea-wrapper", ref: function (el) { return _this.textareaWrapper = el; } }, h("textarea", { class: "native-textarea", "aria-labelledby": labelId, ref: function (el) { return _this.nativeInput = el; }, autoCapitalize: this.autocapitalize, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, disabled: this.disabled, maxLength: this.maxlength, minLength: this.minlength, name: this.name, placeholder: this.placeholder || '', readOnly: this.readonly, required: this.required, spellcheck: this.spellcheck, cols: this.cols, rows: this.rows, wrap: this.wrap, onInput: this.onInput, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeyDown }, value))));
      };
      Object.defineProperty(class_1.prototype, "el", {
          get: function () { return getElement(this); },
          enumerable: false,
          configurable: true
      });
      Object.defineProperty(class_1, "watchers", {
          get: function () {
              return {
                  "debounce": ["debounceChanged"],
                  "disabled": ["disabledChanged"],
                  "value": ["valueChanged"]
              };
          },
          enumerable: false,
          configurable: true
      });
      return class_1;
  }());
  var textareaIds = 0;
  Textarea.style = {
      ios: textareaIosCss,
      md: textareaMdCss
  };
  export { Textarea as ion_textarea };
  