text: import * as tslib_1 from "tslib";
  import { r as registerInstance, d as getIonMode, c as createEvent, h, H as Host, e as getElement } from './chunk-d0403a2f.js';
  import { b as config } from './chunk-1074393c.js';
  import { B as BACKDROP, d as present, e as dismiss, f as eventMethod } from './chunk-d83bfeae.js';
  import { g as getClassMap } from './chunk-353a032e.js';
  import { s as sanitizeDOMString } from './chunk-cae2ca23.js';
  /**
   * iOS Loading Enter Animation
   */
  var iosEnterAnimation = function (AnimationC, baseEl) {
      var baseAnimation = new AnimationC();
      var backdropAnimation = new AnimationC();
      backdropAnimation.addElement(baseEl.querySelector('ion-backdrop'));
      var wrapperAnimation = new AnimationC();
      wrapperAnimation.addElement(baseEl.querySelector('.loading-wrapper'));
      backdropAnimation.fromTo('opacity', 0.01, 0.3);
      wrapperAnimation.fromTo('opacity', 0.01, 1)
          .fromTo('scale', 1.1, 1);
      return Promise.resolve(baseAnimation
          .addElement(baseEl)
          .easing('ease-in-out')
          .duration(200)
          .add(backdropAnimation)
          .add(wrapperAnimation));
  };
  /**
   * iOS Loading Leave Animation
   */
  var iosLeaveAnimation = function (AnimationC, baseEl) {
      var baseAnimation = new AnimationC();
      var backdropAnimation = new AnimationC();
      backdropAnimation.addElement(baseEl.querySelector('ion-backdrop'));
      var wrapperAnimation = new AnimationC();
      wrapperAnimation.addElement(baseEl.querySelector('.loading-wrapper'));
      backdropAnimation.fromTo('opacity', 0.3, 0);
      wrapperAnimation.fromTo('opacity', 0.99, 0)
          .fromTo('scale', 1, 0.9);
      return Promise.resolve(baseAnimation
          .addElement(baseEl)
          .easing('ease-in-out')
          .duration(200)
          .add(backdropAnimation)
          .add(wrapperAnimation));
  };
  /**
   * Md Loading Enter Animation
   */
  var mdEnterAnimation = function (AnimationC, baseEl) {
      var baseAnimation = new AnimationC();
      var backdropAnimation = new AnimationC();
      backdropAnimation.addElement(baseEl.querySelector('ion-backdrop'));
      var wrapperAnimation = new AnimationC();
      wrapperAnimation.addElement(baseEl.querySelector('.loading-wrapper'));
      backdropAnimation.fromTo('opacity', 0.01, 0.32);
      wrapperAnimation.fromTo('opacity', 0.01, 1).fromTo('scale', 1.1, 1);
      return Promise.resolve(baseAnimation
          .addElement(baseEl)
          .easing('ease-in-out')
          .duration(200)
          .add(backdropAnimation)
          .add(wrapperAnimation));
  };
  /**
   * Md Loading Leave Animation
   */
  var mdLeaveAnimation = function (AnimationC, baseEl) {
      var baseAnimation = new AnimationC();
      var backdropAnimation = new AnimationC();
      backdropAnimation.addElement(baseEl.querySelector('ion-backdrop'));
      var wrapperAnimation = new AnimationC();
      wrapperAnimation.addElement(baseEl.querySelector('.loading-wrapper'));
      backdropAnimation.fromTo('opacity', 0.32, 0);
      wrapperAnimation.fromTo('opacity', 0.99, 0).fromTo('scale', 1, 0.9);
      return Promise.resolve(baseAnimation
          .addElement(baseEl)
          .easing('ease-in-out')
          .duration(200)
          .add(backdropAnimation)
          .add(wrapperAnimation));
  };
  /**
   * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
   */
  var Loading = /** @class */ (function () {
      function Loading(hostRef) {
          var _this = this;
          registerInstance(this, hostRef);
          this.presented = false;
          this.mode = getIonMode(this);
          /**
           * If `true`, the keyboard will be automatically dismissed when the overlay is presented.
           */
          this.keyboardClose = true;
          /**
           * Number of milliseconds to wait before dismissing the loading indicator.
           */
          this.duration = 0;
          /**
           * If `true`, the loading indicator will be dismissed when the backdrop is clicked.
           */
          this.backdropDismiss = false;
          /**
           * If `true`, a backdrop will be displayed behind the loading indicator.
           */
          this.showBackdrop = true;
          /**
           * If `true`, the loading indicator will be translucent.
           * Only applies when the mode is `"ios"` and the device supports
           * [`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility).
           */
          this.translucent = false;
          /**
           * If `true`, the loading indicator will animate.
           */
          this.animated = true;
          this.onBackdropTap = function () {
              _this.dismiss(undefined, BACKDROP);
          };
          this.didPresent = createEvent(this, "ionLoadingDidPresent", 7);
          this.willPresent = createEvent(this, "ionLoadingWillPresent", 7);
          this.willDismiss = createEvent(this, "ionLoadingWillDismiss", 7);
          this.didDismiss = createEvent(this, "ionLoadingDidDismiss", 7);
      }
      Loading.prototype.componentWillLoad = function () {
          if (this.spinner === undefined) {
              var mode = getIonMode(this);
              this.spinner = config.get('loadingSpinner', config.get('spinner', mode === 'ios' ? 'lines' : 'crescent'));
          }
      };
      /**
       * Present the loading overlay after it has been created.
       */
      Loading.prototype.present = function () {
          return tslib_1.__awaiter(this, void 0, void 0, function () {
              var _this = this;
              return tslib_1.__generator(this, function (_a) {
                  switch (_a.label) {
                      case 0: return [4 /*yield*/, present(this, 'loadingEnter', iosEnterAnimation, mdEnterAnimation, undefined)];
                      case 1:
                          _a.sent();
                          if (this.duration > 0) {
                              this.durationTimeout = setTimeout(function () { return _this.dismiss(); }, this.duration + 10);
                          }
                          return [2 /*return*/];
                  }
              });
          });
      };
      /**
       * Dismiss the loading overlay after it has been presented.
       *
       * @param data Any data to emit in the dismiss events.
       * @param role The role of the element that is dismissing the loading.
       * This can be useful in a button handler for determining which button was
       * clicked to dismiss the loading.
       * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
       */
      Loading.prototype.dismiss = function (data, role) {
          if (this.durationTimeout) {
              clearTimeout(this.durationTimeout);
          }
          return dismiss(this, data, role, 'loadingLeave', iosLeaveAnimation, mdLeaveAnimation);
      };
      /**
       * Returns a promise that resolves when the loading did dismiss.
       */
      Loading.prototype.onDidDismiss = function () {
          return eventMethod(this.el, 'ionLoadingDidDismiss');
      };
      /**
       * Returns a promise that resolves when the loading will dismiss.
       */
      Loading.prototype.onWillDismiss = function () {
          return eventMethod(this.el, 'ionLoadingWillDismiss');
      };
      Loading.prototype.render = function () {
          var _a;
          var _b = this, message = _b.message, spinner = _b.spinner;
          var mode = getIonMode(this);
          return (h(Host, { onIonBackdropTap: this.onBackdropTap, style: {
                  zIndex: "" + (40000 + this.overlayIndex)
              }, class: Object.assign({}, getClassMap(this.cssClass), (_a = {}, _a[mode] = true, _a['loading-translucent'] = this.translucent, _a)) }, h("ion-backdrop", { visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { class: "loading-wrapper", role: "dialog" }, spinner && (h("div", { class: "loading-spinner" }, h("ion-spinner", { name: spinner }))), message && h("div", { class: "loading-content", innerHTML: sanitizeDOMString(message) }))));
      };
      Object.defineProperty(Loading.prototype, "el", {
          get: function () { return getElement(this); },
          enumerable: true,
          configurable: true
      });
      Object.defineProperty(Loading, "style", {
          get: function () { return ".sc-ion-loading-md-h{--min-width:auto;--width:auto;--min-height:auto;--height:auto;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;left:0;right:0;top:0;bottom:0;display:-ms-flexbox;display:flex;position:fixed;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;font-family:var(--ion-font-family,inherit);contain:strict;-ms-touch-action:none;touch-action:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:1000}.overlay-hidden.sc-ion-loading-md-h{display:none}.loading-wrapper.sc-ion-loading-md{display:-ms-flexbox;display:flex;-ms-flex-align:inherit;align-items:inherit;-ms-flex-pack:inherit;justify-content:inherit;width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);background:var(--background);opacity:0;z-index:10}.spinner-bubbles.sc-ion-loading-md, .spinner-circles.sc-ion-loading-md, .spinner-crescent.sc-ion-loading-md, .spinner-dots.sc-ion-loading-md, .spinner-lines.sc-ion-loading-md, .spinner-lines-small.sc-ion-loading-md{color:var(--spinner-color)}.sc-ion-loading-md-h{--background:var(--ion-color-step-50,#f2f2f2);--max-width:280px;--max-height:90%;--spinner-color:var(--ion-color-primary,#3880ff);color:var(--ion-color-step-850,#262626);font-size:14px}.loading-wrapper.sc-ion-loading-md{border-radius:2px;padding-left:24px;padding-right:24px;padding-top:24px;padding-bottom:24px;-webkit-box-shadow:0 16px 20px rgba(0,0,0,.4);box-shadow:0 16px 20px rgba(0,0,0,.4)}\@supports ((-webkit-margin-start:0) or (margin-inline-start:0)) or (-webkit-margin-start:0){.loading-wrapper.sc-ion-loading-md{padding-left:unset;padding-right:unset;-webkit-padding-start:24px;padding-inline-start:24px;-webkit-padding-end:24px;padding-inline-end:24px}}.loading-spinner.sc-ion-loading-md + .loading-content.sc-ion-loading-md{margin-left:16px}\@supports ((-webkit-margin-start:0) or (margin-inline-start:0)) or (-webkit-margin-start:0){.loading-spinner.sc-ion-loading-md + .loading-content.sc-ion-loading-md{margin-left:unset;-webkit-margin-start:16px;margin-inline-start:16px}}"; },
          enumerable: true,
          configurable: true
      });
      return Loading;
  }());
  export { Loading as ion_loading };
  