UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 8.89 kB
{"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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"}