{"version":3,"file":"video-control.vue2.cjs","sources":["../../../components/video/video-control.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Option } from '@/components/option'\nimport { Tooltip } from '@/components/tooltip'\n\nimport { computed, inject, onBeforeUnmount, ref, watch } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { listToMap } from '@vexip-ui/utils'\nimport { videoControlProps } from './props'\nimport { VIDEO_STATE } from './symbol'\n\nimport type { VideoControlOption } from './symbol'\n\ndefineOptions({ name: 'VideoControl' })\n\nconst _props = defineProps(videoControlProps)\nconst props = useProps('videoControl', _props, {\n  type: 'button',\n  label: {\n    static: true,\n    default: '',\n  },\n  tipClass: null,\n  disabled: false,\n  shortcut: {\n    static: true,\n    default: '',\n  },\n  focusable: false,\n  value: null,\n  options: () => [],\n})\n\ndefineSlots<{\n  selected: (params: { option: VideoControlOption }) => any,\n  default: () => any,\n  label: () => any,\n  panel: () => any,\n  option: (params: { option: VideoControlOption, index: number, selected: boolean }) => any\n}>()\n\nconst nh = useNameHelper('video')\n\nconst videoState = inject(VIDEO_STATE)!\n\nconst currentValue = ref(props.value)\n\nconst className = computed(() => {\n  return {\n    [nh.be('control')]: true,\n    [nh.bem('control', props.type)]: props.type !== 'button',\n    [nh.bem('control', 'disabled')]: props.disabled,\n  }\n})\nconst tipClass = computed(() => {\n  return props.type === 'button' ? nh.be('control-tip') : nh.be('control-panel')\n})\nconst objectOptions = computed(() => {\n  return props.options.map(option => {\n    return typeof option === 'string' ? { value: option } : option\n  })\n})\nconst optionMap = computed(() => listToMap(objectOptions.value, 'value', undefined, true))\nconst currentOption = computed(() => optionMap.value.get(currentValue.value))\n\nlet removeShortcut: (() => void) | undefined\n\nwatch(\n  () => props.shortcut,\n  value => {\n    removeShortcut?.()\n\n    if (value) {\n      removeShortcut = videoState.addShortcut(value, handleClick)\n    }\n  },\n  { immediate: true },\n)\n\nonBeforeUnmount(() => removeShortcut?.())\n\nfunction handleClick() {\n  !props.disabled && emitEvent(props.onClick)\n}\n\nfunction handleSelect(option: VideoControlOption) {\n  if (props.disabled || option.disabled) return\n\n  currentValue.value = option.value\n  emitEvent(props.onSelect, option)\n}\n</script>\n\n<template>\n  <div :class=\"className\">\n    <Tooltip\n      :trigger=\"props.focusable ? 'hover-focus' : 'hover'\"\n      raw\n      shift\n      :transfer=\"videoState.placeId && `#${videoState.placeId}`\"\n      :tip-class=\"[tipClass, props.tipClass]\"\n      :no-hover=\"props.type === 'button'\"\n      :disabled=\"props.type === 'button' ? !props.label : props.disabled\"\n      @tip-enter=\"emitEvent(props.onEnter)\"\n      @tip-leave=\"emitEvent(props.onLeave)\"\n    >\n      <template #trigger>\n        <button\n          :class=\"nh.be('control-button')\"\n          type=\"button\"\n          @focus=\"emitEvent(props.onFocus, $event)\"\n          @blur=\"emitEvent(props.onBlur, $event)\"\n          @click=\"handleClick\"\n        >\n          <slot v-if=\"currentOption\" name=\"selected\" :option=\"currentOption\">\n            {{ currentOption.selectedLabel || currentOption.label || currentOption.value }}\n          </slot>\n          <slot v-else></slot>\n        </button>\n      </template>\n      <template v-if=\"props.type === 'button'\">\n        <span :class=\"nh.be('control-name')\">\n          <slot name=\"label\">\n            {{ props.label }}\n            <span v-if=\"props.shortcut\" :class=\"nh.be('control-shortcut')\">\n              {{ `(${props.shortcut})` }}\n            </span>\n          </slot>\n        </span>\n      </template>\n      <slot v-else name=\"panel\">\n        <ul v-if=\"props.type === 'select'\" :class=\"nh.be('control-options')\">\n          <Option\n            v-for=\"(option, index) in objectOptions\"\n            :key=\"option.value\"\n            :class=\"{\n              [nh.be('control-option')]: true,\n              [nh.bem('control-option', 'selected')]: option.value === currentValue\n            }\"\n            :label=\"option.label\"\n            :value=\"option.value\"\n            :disabled=\"option.disabled\"\n            :divided=\"option.disabled\"\n            :title=\"option.title\"\n            no-hover\n            @select=\"handleSelect(option)\"\n          >\n            <slot\n              name=\"option\"\n              :option=\"option\"\n              :index=\"index\"\n              :selected=\"option.value === currentValue\"\n            >\n              {{ option.label || option.value }}\n            </slot>\n          </Option>\n        </ul>\n      </slot>\n    </Tooltip>\n  </div>\n</template>\n"],"names":["_props","__props","props","useProps","nh","useNameHelper","videoState","inject","VIDEO_STATE","currentValue","ref","className","computed","tipClass","objectOptions","option","optionMap","listToMap","currentOption","removeShortcut","watch","value","handleClick","onBeforeUnmount","emitEvent","handleSelect","_createElementBlock","_createVNode","_unref","Tooltip","_cache","$event","_createElementVNode","_normalizeClass","_renderSlot","_ctx","_toDisplayString","_openBlock","_Fragment","_renderList","index","_createBlock","Option","_createTextVNode"],"mappings":"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"}