{"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 'casc-cesium-utils/private/format'\nimport { AnyFunction } from 'casc-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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"}