text: 'use strict';
  
  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);
      };
  };
  
  exports.assert = assert;
  exports.clamp = clamp;
  exports.debounce = debounce;
  exports.debounceEvent = debounceEvent;
  exports.findItemLabel = findItemLabel;
  exports.hasShadowDom = hasShadowDom;
  exports.isEndSide = isEndSide;
  exports.now = now;
  exports.pointerCoord = pointerCoord;
  exports.rIC = rIC;
  exports.renderHiddenInput = renderHiddenInput;
  