text: /**
   * Patched version of requestAnimationFrame that avoids ngzone
   * Use only when you know ngzone should not run
   */
  const raf = (h) => {
      if (typeof __zone_symbol__requestAnimationFrame === 'function') {
          return __zone_symbol__requestAnimationFrame(h);
      }
      if (typeof requestAnimationFrame === 'function') {
          return requestAnimationFrame(h);
      }
      return setTimeout(h);
  };
  const rIC = (callback) => {
      if ('requestIdleCallback' in window) {
          window.requestIdleCallback(callback);
      }
      else {
          setTimeout(callback, 32);
      }
  };
  const hasShadowDom = (el) => {
      return !!el.shadowRoot && !!el.attachShadow;
  };
  const findItemLabel = (componentEl) => {
      const itemEl = componentEl.closest('ion-item');
      if (itemEl) {
          return itemEl.querySelector('ion-label');
      }
      return null;
  };
  const renderHiddenInput = (always, container, name, value, disabled) => {
      if (always || hasShadowDom(container)) {
          let input = container.querySelector('input.aux-input');
          if (!input) {
              input = container.ownerDocument.createElement('input');
              input.type = 'hidden';
              input.classList.add('aux-input');
              container.appendChild(input);
          }
          input.disabled = disabled;
          input.name = name;
          input.value = value || '';
      }
  };
  const clamp = (min, n, max) => {
      return Math.max(min, Math.min(n, max));
  };
  const assert = (actual, reason) => {
      if (!actual) {
          const message = 'ASSERT: ' + reason;
          console.error(message);
          debugger; // tslint:disable-line
          throw new Error(message);
      }
  };
  const now = (ev) => {
      return ev.timeStamp || Date.now();
  };
  const pointerCoord = (ev) => {
      // get X coordinates for either a mouse click
      // or a touch depending on the given event
      if (ev) {
          const changedTouches = ev.changedTouches;
          if (changedTouches && changedTouches.length > 0) {
              const touch = changedTouches[0];
              return { x: touch.clientX, y: touch.clientY };
          }
          if (ev.pageX !== undefined) {
              return { x: ev.pageX, y: ev.pageY };
          }
      }
      return { x: 0, y: 0 };
  };
  /**
   * @hidden
   * Given a side, return if it should be on the end
   * based on the value of dir
   * @param side the side
   * @param isRTL whether the application dir is rtl
   */
  const isEndSide = (side) => {
      const isRTL = document.dir === 'rtl';
      switch (side) {
          case 'start': return isRTL;
          case 'end': return !isRTL;
          default:
              throw new Error(`"${side}" is not a valid value for [side]. Use "start" or "end" instead.`);
      }
  };
  const debounceEvent = (event, wait) => {
      const original = event._original || event;
      return {
          _original: event,
          emit: debounce(original.emit.bind(original), wait)
      };
  };
  const debounce = (func, wait = 0) => {
      let timer;
      return (...args) => {
          clearTimeout(timer);
          timer = setTimeout(func, wait, ...args);
      };
  };
  
  export { renderHiddenInput as a, rIC as b, clamp as c, debounceEvent as d, assert as e, findItemLabel as f, debounce as g, hasShadowDom as h, isEndSide as i, now as n, pointerCoord as p, raf as r };
  