{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/ui/ajax-bar/index.ts"],"sourcesContent":["import { h, defineComponent, ref, computed, onMounted, onBeforeUnmount, getCurrentInstance, ComponentPublicInstance } from 'vue'\nimport type { CSSProperties, ExtractPropTypes } from 'vue'\n\nimport { between } from '@vue-cesium/utils/private/format'\nimport { AnyFunction } from '@vue-cesium/utils/types'\n\nconst xhr = XMLHttpRequest,\n  send = xhr.prototype.send,\n  open = xhr.prototype.open,\n  positionValues = ['top', 'right', 'bottom', 'left']\n\nlet stack = []\nlet highjackCount = 0\n\nfunction translate({ p, pos, active, horiz, reverse, dir }) {\n  let x = 1,\n    y = 1\n\n  if (horiz === true) {\n    if (reverse === true) {\n      x = -1\n    }\n    if (pos === 'bottom') {\n      y = -1\n    }\n    return { transform: `translate3d(${x * (p - 100)}%,${active ? 0 : y * -200}%,0)` }\n  }\n\n  if (reverse === true) {\n    y = -1\n  }\n  if (pos === 'right') {\n    x = -1\n  }\n  return { transform: `translate3d(${active ? 0 : dir * x * -200}%,${y * (p - 100)}%,0)` }\n}\n\nfunction inc(p, amount) {\n  if (typeof amount !== 'number') {\n    if (p < 25) {\n      amount = Math.random() * 3 + 3\n    } else if (p < 65) {\n      amount = Math.random() * 3\n    } else if (p < 85) {\n      amount = Math.random() * 2\n    } else if (p < 99) {\n      amount = 0.6\n    } else {\n      amount = 0\n    }\n  }\n  return between(p + amount, 0, 100)\n}\n\nfunction highjackAjax(stackEntry) {\n  highjackCount++\n\n  stack.push(stackEntry)\n\n  if (highjackCount > 1) {\n    return\n  }\n\n  xhr.prototype.open = function (_, url) {\n    const stopStack = []\n\n    const loadStart = () => {\n      stack.forEach(entry => {\n        if (entry.hijackFilter.value === null || entry.hijackFilter.value(url) === true) {\n          entry.start()\n          stopStack.push(entry.stop)\n        }\n      })\n    }\n\n    const loadEnd = () => {\n      stopStack.forEach(stop => {\n        stop()\n      })\n    }\n\n    this.addEventListener('loadstart', loadStart, { once: true })\n    this.addEventListener('loadend', loadEnd, { once: true })\n\n    // eslint-disable-next-line prefer-rest-params\n    open.apply(this, arguments as any)\n  }\n}\n\nfunction restoreAjax(start) {\n  stack = stack.filter(entry => entry.start !== start)\n\n  highjackCount = Math.max(0, highjackCount - 1)\n  if (highjackCount === 0) {\n    xhr.prototype.open = open\n  }\n}\n\nexport const ajaxBarProps = {\n  position: {\n    type: String,\n    default: 'top',\n    validator: val => positionValues.includes(val)\n  },\n  size: {\n    type: String,\n    default: '2px'\n  },\n  color: String,\n  skipHijack: Boolean,\n  reverse: Boolean,\n  positioning: {\n    type: String,\n    default: 'absolute',\n    validator: (val: string) => ['absolute', 'fixed'].includes(val)\n  },\n  hijackFilter: Function\n}\n\nexport default defineComponent({\n  name: 'VcAjaxBar',\n\n  props: ajaxBarProps,\n\n  emits: ['start', 'stop'],\n\n  setup(props, { emit }) {\n    const { proxy } = getCurrentInstance()!\n\n    const progress = ref(0)\n    const onScreen = ref(false)\n    const animate = ref(true)\n\n    let sessions = 0,\n      timer,\n      speed\n\n    const classes = computed(\n      () =>\n        `vc-loading-bar vc-loading-bar--${props.position}` +\n        (props.color !== void 0 ? ` bg-${props.color}` : '') +\n        (animate.value === true ? '' : ' no-transition')\n    )\n\n    const horizontal = computed(() => props.position === 'top' || props.position === 'bottom')\n    const sizeProp = computed(() => (horizontal.value === true ? 'height' : 'width'))\n\n    const style = computed(() => {\n      const active = onScreen.value\n\n      const obj: CSSProperties = translate({\n        p: progress.value,\n        pos: props.position,\n        active,\n        horiz: horizontal.value,\n        reverse: props.reverse,\n        dir: 1\n      })\n\n      obj[sizeProp.value] = props.size\n      obj.opacity = active ? 1 : 0\n      obj.position = props.positioning === 'absolute' ? 'absolute' : 'fixed'\n      obj.backgroundColor = props.color\n\n      return obj\n    })\n\n    const attributes = computed(() =>\n      onScreen.value === true\n        ? {\n            role: 'progressbar',\n            'aria-valuemin': 0,\n            'aria-valuemax': 100,\n            'aria-valuenow': progress.value\n          }\n        : { 'aria-hidden': 'true' }\n    )\n\n    function start(newSpeed = 300) {\n      const oldSpeed = speed\n      speed = Math.max(0, newSpeed) || 0\n\n      sessions++\n\n      if (sessions > 1) {\n        if (oldSpeed === 0 && newSpeed > 0) {\n          planNextStep()\n        } else if (oldSpeed > 0 && newSpeed <= 0) {\n          clearTimeout(timer)\n        }\n        return sessions\n      }\n\n      clearTimeout(timer)\n      emit('start')\n\n      progress.value = 0\n\n      timer = setTimeout(\n        () => {\n          animate.value = true\n          newSpeed > 0 && planNextStep()\n        },\n        onScreen.value === true ? 500 : 1\n      )\n\n      if (onScreen.value !== true) {\n        onScreen.value = true\n        animate.value = false\n      }\n\n      return sessions\n    }\n\n    function increment(amount?) {\n      if (sessions > 0) {\n        progress.value = inc(progress.value, amount)\n      }\n\n      return sessions\n    }\n\n    function stop() {\n      sessions = Math.max(0, sessions - 1)\n      if (sessions > 0) {\n        return sessions\n      }\n\n      clearTimeout(timer)\n      emit('stop')\n\n      const end = () => {\n        animate.value = true\n        progress.value = 100\n        timer = setTimeout(() => {\n          onScreen.value = false\n        }, 1000)\n      }\n\n      if (progress.value === 0) {\n        timer = setTimeout(end, 1)\n      } else {\n        end()\n      }\n    }\n\n    function planNextStep() {\n      if (progress.value < 100) {\n        timer = setTimeout(() => {\n          increment()\n          planNextStep()\n        }, speed)\n      }\n    }\n\n    let hijacked\n\n    onMounted(() => {\n      if (props.skipHijack !== true) {\n        hijacked = true\n        highjackAjax({\n          start,\n          stop,\n          hijackFilter: computed(() => props.hijackFilter || null)\n        })\n      }\n    })\n\n    onBeforeUnmount(() => {\n      clearTimeout(timer)\n      hijacked === true && restoreAjax(start)\n    })\n\n    // expose public methods\n    Object.assign(proxy, { start, stop, increment })\n\n    return () =>\n      h('div', {\n        class: classes.value,\n        style: style.value,\n        ...attributes.value\n      })\n  }\n})\n\n// export type VcAjaxBarProps = ExtractPropTypes<typeof ajaxBarProps>\nexport interface VcAjaxBarProps {\n  /**\n   * Position within window of where QAjaxBar should be displayed.\n   * Default value: top\n   */\n  position?: 'top' | 'right' | 'bottom' | 'left'\n  /**\n   * Size in CSS units, including unit name.\n   * Default value: 2px\n   */\n  size?: string\n  /**\n   * Color name for component from the css color.\n   */\n  color?: string\n  /**\n   * Reverse direction of progress.\n   */\n  reverse?: boolean\n  /**\n   * Skip Ajax hijacking (not a reactive prop).\n   */\n  skipHijack?: boolean\n  /**\n   * Specify the positioning of the progress bar.\n   */\n  positioning?: 'absolute' | 'fixed'\n  /**\n   * Filter which URL should trigger start() + stop().\n   * @param url The URL being triggered\n   * @returns Should the URL received as param trigger start() + stop()?\n   */\n  hijackFilter?: ((url: string) => boolean) | undefined\n  /**\n   * Emitted when bar is triggered to appear.\n   */\n  onStart?: () => void\n  /**\n   * Emitted when bar has finished its job.\n   */\n  onStop?: () => void\n}\n\nexport interface VcAjaxBarRef extends ComponentPublicInstance<VcAjaxBarProps> {\n  /**\n   * Notify bar you are waiting for a new process to finish\n   * @param speed Delay (in milliseconds) between progress auto-increments; If delay is 0 then it disables auto-incrementing\n   */\n  start: (speed?: number) => void\n  /**\n   * Manually trigger a bar progress increment\n   * @param amount Amount (0 < x <= 100) to increment with\n   */\n  increment: (amount?: number) => void\n  /**\n   * Notify bar that one process you were waiting has finished\n   */\n  stop: () => void\n}\n"],"names":[],"mappings":"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"}