{"version":3,"file":"viewer.vue2.cjs","sources":["../../../components/viewer/viewer.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Divider } from '@/components/divider'\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, h, nextTick, onMounted, reactive, ref, toRef } from 'vue'\n\nimport { emitEvent, useIcons, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useFullScreen, useModifier, useMoving, useSetTimeout } from '@vexip-ui/hooks'\nimport { boundRange, callIfFunc, toCssSize, toFixed } from '@vexip-ui/utils'\nimport { viewerProps } from './props'\nimport { InternalActionName, viewerDefaultActionLayout } from './symbol'\n\nimport type { ViewerActionLayout, ViewerState, ViewerToolbarAction } from './symbol'\n\ndefineOptions({ name: 'Viewer' })\n\nconst _props = defineProps(viewerProps)\nconst props = useProps('viewer', _props, {\n  locale: null,\n  width: '100%',\n  height: '100%',\n  moveDisabled: false,\n  zoomDisabled: false,\n  zoomDelta: 0.15,\n  zoomMin: 0.1,\n  zoomMax: Infinity,\n  rotateDisabled: false,\n  rotateDelta: 90,\n  flipDisabled: false,\n  fullDisabled: false,\n  toolbarPlacement: 'bottom',\n  actions: () => [],\n  toolbarFade: false,\n  noTransition: false,\n  centerScale: false,\n  actionLayout: () => [],\n})\n\ndefineSlots<{\n  default: (params: { state: ViewerState }) => any,\n  [action: `action-${string}`]: (params: { state: ViewerState }) => any\n}>()\n\nconst nh = useNameHelper('viewer')\nconst locale = useLocale('viewer', toRef(props, 'locale'))\nconst icons = useIcons()\n\nconst { timer } = useSetTimeout()\nconst toolbarActive = ref(false)\n\nconst zoom = ref(1)\nconst rotate = ref(0)\nconst flipX = ref(false)\nconst flipY = ref(false)\n\nconst viewer = ref<HTMLElement>()\nconst transition = ref<HTMLElement>()\n\nconst { supported: fullSupported, full, enter: enterFull, exit: exitFull } = useFullScreen(viewer)\nconst {\n  target: container,\n  x: currentLeft,\n  y: currentTop,\n  moving,\n} = useMoving({\n  onStart: (_, event) => {\n    if (props.moveDisabled || event.button > 0) {\n      return false\n    }\n\n    emitEvent(props.onMoveStart, getState())\n  },\n  onMove: () => {\n    emitEvent(props.onMoveStart, getState())\n  },\n  onEnd: () => {\n    emitEvent(props.onMoveStart, getState())\n  },\n})\n\nconst state = reactive({\n  zoom,\n  rotate,\n  flipX,\n  flipY,\n  full,\n  moving,\n  x: currentLeft,\n  y: currentTop,\n}) as ViewerState\n\nconst zoomOrigin = {\n  x: 0,\n  y: 0,\n}\n\nuseModifier({\n  target: viewer,\n  passive: false,\n  onKeyDown: (event, modifier) => {\n    if (moving.value) return\n\n    if (modifier.up || modifier.down || modifier.left || modifier.right) {\n      event.preventDefault()\n\n      const current = modifier.up || modifier.down ? currentTop : currentLeft\n      const step = modifier.up || modifier.left ? -10 : 10\n\n      current.value += event.ctrlKey ? 5 * step : step\n\n      modifier.resetAll()\n    }\n  },\n})\n\nfunction getState() {\n  return state\n}\n\nfunction getActionProp<\n  K extends Exclude<keyof ViewerToolbarAction, 'name' | 'icon' | 'iconRenderer' | 'process'>,\n>(action: ViewerToolbarAction, prop: K) {\n  return callIfFunc(action[prop] as any, state) as Exclude<\n    ViewerToolbarAction[K],\n    (...args: any) => any\n  >\n}\n\nfunction getActionClass(name: string) {\n  return nh.be(name)\n}\n\nconst internalActions: ViewerToolbarAction[] = [\n  {\n    name: InternalActionName.RotateRight,\n    process: () => handleRotate(props.rotateDelta),\n    iconRenderer: () => h(Icon, icons.value.rotateRight),\n    class: getActionClass(InternalActionName.RotateRight),\n    title: () => locale.value.rotateRight,\n    hidden: () => props.rotateDisabled,\n  },\n  {\n    name: InternalActionName.RotateLeft,\n    process: () => handleRotate(-1 * props.rotateDelta),\n    iconRenderer: () => h(Icon, icons.value.rotateLeft),\n    class: getActionClass(InternalActionName.RotateLeft),\n    title: () => locale.value.rotateLeft,\n    hidden: () => props.rotateDisabled,\n  },\n  {\n    name: InternalActionName.FlipX,\n    process: () => toggleFlipX(),\n    iconRenderer: () => h(Icon, icons.value.flipX),\n    class: getActionClass(InternalActionName.FlipX),\n    title: () => locale.value.flipHorizontal,\n    hidden: () => props.flipDisabled,\n  },\n  {\n    name: InternalActionName.FlipY,\n    process: () => toggleFlipY(),\n    iconRenderer: () => h(Icon, icons.value.flipY),\n    class: getActionClass(InternalActionName.FlipY),\n    title: () => locale.value.flipVertical,\n    hidden: () => props.flipDisabled,\n  },\n  {\n    name: InternalActionName.ZoomIn,\n    process: () => handleZoom(props.zoomDelta),\n    iconRenderer: () => h(Icon, icons.value.zoomIn),\n    class: getActionClass(InternalActionName.ZoomIn),\n    title: () => locale.value.zoomIn,\n    hidden: () => props.zoomDisabled,\n  },\n  {\n    name: InternalActionName.ZoomOut,\n    process: () => handleZoom(-1 * props.zoomDelta),\n    iconRenderer: () => h(Icon, icons.value.zoonOut),\n    class: getActionClass(InternalActionName.ZoomOut),\n    title: () => locale.value.zoomOut,\n    hidden: () => props.zoomDisabled,\n  },\n  {\n    name: InternalActionName.FullScreen,\n    process: () => toggleFull(!full.value),\n    iconRenderer: () => h(Icon, full.value ? icons.value.resetScreen : icons.value.fullScreen),\n    class: getActionClass(InternalActionName.FullScreen),\n    title: () => (full.value ? locale.value.fullScreenExit : locale.value.fullScreen),\n    hidden: () => props.fullDisabled,\n  },\n  {\n    name: InternalActionName.Reset,\n    process: () => handleReset(),\n    iconRenderer: () => h(Icon, icons.value.refresh),\n    class: getActionClass(InternalActionName.Reset),\n    title: () => locale.value.reset,\n  },\n]\n\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('draggable')]: !props.moveDisabled,\n    [nh.bm('resizable')]: !props.zoomDisabled,\n    [nh.bm('full')]: full.value,\n    [nh.bm('moving')]: moving.value,\n    [nh.bm('static')]: props.noTransition,\n  }\n})\nconst style = computed(() => {\n  return {\n    width: toCssSize(props.width),\n    height: toCssSize(props.height),\n  }\n})\nconst toolbarVertical = computed(() => {\n  const [layout] = props.toolbarPlacement.split('-')\n\n  return layout === 'left' || layout === 'right'\n})\nconst toolbarFade = computed(() => {\n  return typeof props.toolbarFade === 'number' ? props.toolbarFade : props.toolbarFade ? 1500 : 0\n})\nconst toolbarClass = computed(() => {\n  return {\n    [nh.be('toolbar')]: true,\n    [nh.bem('toolbar', 'active')]: toolbarFade.value < 300 || toolbarActive.value,\n    [nh.bem('toolbar', props.toolbarPlacement)]: true,\n    [nh.bem('toolbar', 'vertical')]: toolbarVertical.value,\n  }\n})\nconst contentStyle = computed(() => {\n  return {\n    transform: `translate3d(${currentLeft.value}px, ${currentTop.value}px, 0) scale(${zoom.value})`,\n  }\n})\nconst transitionStyle = computed(() => {\n  return {\n    transform: `scaleX(${flipX.value ? -1 : 1}) scaleY(${flipY.value ? -1 : 1}) rotate(${\n      rotate.value\n    }deg)`,\n  }\n})\nconst allActions = computed(() => {\n  const map = new Map<string, ViewerToolbarAction>()\n  const actions: ViewerToolbarAction[][] = []\n\n  internalActions.concat(props.actions).forEach(action => {\n    if (action.name) {\n      map.set(action.name, action)\n    }\n  })\n\n  let layout: ViewerActionLayout\n\n  if (!props.actionLayout?.length) {\n    layout = [...viewerDefaultActionLayout]\n\n    if (props.actions.length) {\n      layout.push(props.actions.map(action => action.name))\n    }\n  } else {\n    layout = props.actionLayout\n  }\n\n  for (const names of layout) {\n    const group = names.map(name => map.get(name)!).filter(Boolean)\n\n    group.length && actions.push(group)\n  }\n\n  return actions\n})\n\ndefineExpose({\n  moving,\n  fullSupported,\n  state,\n  viewer,\n  container,\n  transition,\n  handleRotate,\n  toggleFlipHorizontal: toggleFlipX,\n  toggleFlipVertical: toggleFlipY,\n  handleZoom,\n  toggleFull,\n  handleReset,\n})\n\nonMounted(() => {\n  if (container.value) {\n    const rect = container.value.getBoundingClientRect()\n\n    zoomOrigin.x = rect.left + rect.width * 0.5\n    zoomOrigin.y = rect.top + rect.height * 0.5\n  }\n})\n\nfunction handleWheel(event: WheelEvent) {\n  event.stopPropagation()\n  event.preventDefault()\n\n  const sign = event.deltaY > 0 ? -1 : 1\n\n  zoomOrigin.x = event.clientX\n  zoomOrigin.y = event.clientY\n\n  emitEvent(props.onWheel, sign, state)\n  handleZoom(sign * props.zoomDelta)\n}\n\nfunction handleRotate(deg: number, emit = true) {\n  if (props.rotateDisabled) return\n\n  rotate.value += deg\n\n  if (props.noTransition && rotate.value % 360 === 0) {\n    rotate.value = 0\n  }\n\n  emit && emitEvent(props.onRotate, deg, state)\n\n  if (props.noTransition) {\n    nextTick(normalizeProps)\n  }\n}\n\nfunction toggleFlipX(target = !flipX.value, emit = true) {\n  if (props.flipDisabled) return\n\n  flipX.value = target\n  emit && emitEvent(props.onFlipX, target, state)\n}\n\nfunction toggleFlipY(target = !flipY.value, emit = true) {\n  if (props.flipDisabled) return\n\n  flipY.value = target\n  emit && emitEvent(props.onFlipY, target, state)\n}\n\nfunction handleZoom(ratio: number, emit = true) {\n  if (props.zoomDisabled || !container.value || moving.value) return\n\n  const containerRect = container.value.getBoundingClientRect()\n  const { x, y } = zoomOrigin\n  const { offsetWidth, offsetHeight } = container.value\n  const prevZoom = zoom.value\n\n  zoom.value = toFixed(boundRange(zoom.value + ratio, props.zoomMin, props.zoomMax), 5)\n\n  const delta = zoom.value / prevZoom - 1\n  const originX = delta * offsetWidth * 0.5\n  const originY = delta * offsetHeight * 0.5\n\n  if (!props.centerScale) {\n    currentLeft.value -= delta * (x - containerRect.left - currentLeft.value) - originX\n    currentTop.value -= delta * (y - containerRect.top - currentTop.value) - originY\n  }\n\n  emit && emitEvent(props.onZoom, zoom.value, state)\n}\n\nasync function toggleFull(isFull = !full.value, emit = true) {\n  isFull ? await enterFull() : await exitFull()\n\n  emit && emitEvent(props.onFull, isFull, state)\n}\n\nfunction handleReset(emit = true) {\n  currentTop.value = 0\n  currentLeft.value = 0\n  rotate.value = 0\n  flipX.value = false\n  flipY.value = false\n  zoom.value = 1\n\n  emit && emitEvent(props.onReset, state)\n}\n\nfunction normalizeProps() {\n  if (props.noTransition) {\n    if (rotate.value % 360 === 0) {\n      rotate.value = 0\n    }\n\n    return\n  }\n\n  const queue: Array<() => void> = []\n\n  if (rotate.value % 360 === 0) {\n    queue.push(\n      () => {\n        if (transition.value) {\n          transition.value.style.transitionDuration = '0ms'\n        }\n      },\n      () => {\n        rotate.value = 0\n      },\n      () => {\n        if (transition.value) {\n          transition.value.style.transitionDuration = ''\n        }\n      },\n    )\n  }\n\n  const run = () => {\n    queue.shift()?.()\n    queue.length && requestAnimationFrame(run)\n  }\n\n  run()\n}\n\nfunction handleEnterToolbar() {\n  clearTimeout(timer.toolbarFade)\n  toolbarActive.value = true\n}\n\nfunction handleLeaveToolbar() {\n  clearTimeout(timer.toolbarFade)\n\n  if (toolbarFade.value >= 300) {\n    timer.toolbarFade = setTimeout(() => {\n      toolbarActive.value = false\n    }, toolbarFade.value)\n  }\n}\n</script>\n\n<template>\n  <div\n    ref=\"viewer\"\n    :class=\"className\"\n    tabindex=\"0\"\n    :style=\"style\"\n  >\n    <div ref=\"container\" :class=\"nh.be('container')\" @wheel=\"handleWheel\">\n      <div :class=\"nh.be('content')\" :style=\"contentStyle\">\n        <div\n          ref=\"transition\"\n          :class=\"nh.be('transition')\"\n          :style=\"transitionStyle\"\n          @transitionend=\"normalizeProps\"\n        >\n          <slot :state=\"state\"></slot>\n        </div>\n      </div>\n    </div>\n    <div\n      :class=\"toolbarClass\"\n      role=\"toolbar\"\n      @mouseenter=\"handleEnterToolbar\"\n      @mouseleave=\"handleLeaveToolbar\"\n    >\n      <template v-for=\"(group, index) in allActions\" :key=\"index\">\n        <template v-for=\"action in group\" :key=\"action.name\">\n          <template v-if=\"!getActionProp(action, 'hidden')\">\n            <button\n              type=\"button\"\n              :class=\"[\n                {\n                  [nh.be('action')]: true,\n                  [nh.bem('action', 'disabled')]: getActionProp(action, 'disabled')\n                },\n                getActionProp(action, 'class')\n              ]\"\n              :title=\"getActionProp(action, 'title')\"\n              @click.stop=\"action.process(state)\"\n            >\n              <slot :name=\"`action-${action.name}`\" :state=\"state\">\n                <Renderer\n                  v-if=\"action.iconRenderer\"\n                  :renderer=\"action.iconRenderer\"\n                  :data=\"state\"\n                ></Renderer>\n                <Icon\n                  v-else-if=\"action.icon\"\n                  :icon=\"action.icon\"\n                  :style=\"getActionProp(action, 'iconStyle')\"\n                  :scale=\"getActionProp(action, 'iconScale') || 1\"\n                ></Icon>\n                <template v-else>\n                  {{ action.name }}\n                </template>\n              </slot>\n            </button>\n          </template>\n        </template>\n        <Divider\n          v-if=\"index !== allActions.length - 1\"\n          inherit\n          :vertical=\"!toolbarVertical\"\n        ></Divider>\n      </template>\n    </div>\n  </div>\n</template>\n"],"names":["_props","__props","props","useProps","nh","useNameHelper","locale","useLocale","toRef","icons","useIcons","timer","useSetTimeout","toolbarActive","ref","zoom","rotate","flipX","flipY","viewer","transition","fullSupported","full","enterFull","exitFull","useFullScreen","container","currentLeft","currentTop","moving","useMoving","_","event","emitEvent","getState","state","reactive","zoomOrigin","useModifier","modifier","current","step","getActionProp","action","prop","callIfFunc","getActionClass","name","internalActions","InternalActionName","handleRotate","h","Icon","toggleFlipX","toggleFlipY","handleZoom","toggleFull","handleReset","className","computed","style","toCssSize","toolbarVertical","layout","toolbarFade","toolbarClass","contentStyle","transitionStyle","allActions","map","actions","_a","viewerDefaultActionLayout","names","group","__expose","onMounted","rect","handleWheel","sign","deg","emit","nextTick","normalizeProps","target","ratio","containerRect","x","y","offsetWidth","offsetHeight","prevZoom","toFixed","boundRange","delta","originX","originY","isFull","queue","run","handleEnterToolbar","handleLeaveToolbar","_createElementBlock","_createElementVNode","_normalizeClass","_unref","_renderSlot","_ctx","_openBlock","_Fragment","_renderList","index","_withModifiers","$event","_createBlock","Renderer","_normalizeStyle","_createTextVNode","_toDisplayString","Divider"],"mappings":"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"}