vuetify 3.9.3 → 3.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/json/attributes.json +3341 -3329
- package/dist/json/importMap-labs.json +12 -12
- package/dist/json/importMap.json +192 -192
- package/dist/json/tags.json +5 -2
- package/dist/json/web-types.json +6346 -6317
- package/dist/vuetify-labs.cjs +219 -116
- package/dist/vuetify-labs.css +3398 -3353
- package/dist/vuetify-labs.d.ts +180 -148
- package/dist/vuetify-labs.esm.js +219 -116
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +219 -116
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +161 -93
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +4301 -4271
- package/dist/vuetify.d.ts +63 -76
- package/dist/vuetify.esm.js +161 -93
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +161 -93
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +482 -481
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAlert/VAlert.css +9 -2
- package/lib/components/VAlert/VAlert.js +2 -2
- package/lib/components/VAlert/VAlert.js.map +1 -1
- package/lib/components/VAlert/VAlert.sass +10 -3
- package/lib/components/VAlert/_variables.scss +1 -1
- package/lib/components/VApp/VApp.d.ts +0 -25
- package/lib/components/VApp/VApp.js +6 -5
- package/lib/components/VApp/VApp.js.map +1 -1
- package/lib/components/VColorPicker/VColorPickerCanvas.css +1 -0
- package/lib/components/VColorPicker/VColorPickerCanvas.sass +1 -0
- package/lib/components/VColorPicker/VColorPickerEdit.css +5 -0
- package/lib/components/VColorPicker/VColorPickerEdit.js +8 -1
- package/lib/components/VColorPicker/VColorPickerEdit.js.map +1 -1
- package/lib/components/VColorPicker/VColorPickerEdit.sass +5 -0
- package/lib/components/VColorPicker/VColorPickerPreview.js +8 -1
- package/lib/components/VColorPicker/VColorPickerPreview.js.map +1 -1
- package/lib/components/VColorPicker/util/index.d.ts +1 -0
- package/lib/components/VColorPicker/util/index.js +20 -10
- package/lib/components/VColorPicker/util/index.js.map +1 -1
- package/lib/components/VConfirmEdit/VConfirmEdit.js +1 -1
- package/lib/components/VConfirmEdit/VConfirmEdit.js.map +1 -1
- package/lib/components/VDataTable/VDataTable.css +2 -1
- package/lib/components/VDataTable/VDataTable.sass +2 -1
- package/lib/components/VDataTable/composables/headers.js +53 -42
- package/lib/components/VDataTable/composables/headers.js.map +1 -1
- package/lib/components/VDataTable/composables/sort.js +1 -1
- package/lib/components/VDataTable/composables/sort.js.map +1 -1
- package/lib/components/VNumberInput/VNumberInput.js +1 -0
- package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
- package/lib/components/VOverlay/scrollStrategies.js +7 -7
- package/lib/components/VOverlay/scrollStrategies.js.map +1 -1
- package/lib/components/VSlider/VSliderThumb.css +2 -2
- package/lib/components/VSlider/VSliderThumb.sass +2 -2
- package/lib/components/VStepper/VStepperItem.css +2 -0
- package/lib/components/VStepper/VStepperItem.sass +3 -0
- package/lib/components/VTable/VTable.css +2 -2
- package/lib/components/VTable/VTable.js +32 -20
- package/lib/components/VTable/VTable.js.map +1 -1
- package/lib/components/VTable/VTable.sass +4 -4
- package/lib/components/VTreeview/VTreeviewItem.css +6 -0
- package/lib/components/VTreeview/VTreeviewItem.sass +7 -0
- package/lib/components/VWindow/VWindow.css +8 -0
- package/lib/components/VWindow/VWindow.sass +9 -0
- package/lib/entry-bundler.js +1 -1
- package/lib/framework.d.ts +62 -62
- package/lib/framework.js +1 -1
- package/lib/labs/VColorInput/VColorInput.css +15 -0
- package/lib/labs/VColorInput/VColorInput.d.ts +287 -215
- package/lib/labs/VColorInput/VColorInput.js +23 -8
- package/lib/labs/VColorInput/VColorInput.js.map +1 -1
- package/lib/labs/VColorInput/VColorInput.sass +8 -0
- package/lib/labs/VColorInput/_variables.scss +2 -0
- package/lib/labs/VVideo/VVideo.css +4 -4
- package/lib/labs/VVideo/VVideo.d.ts +10 -0
- package/lib/labs/VVideo/VVideo.js +6 -3
- package/lib/labs/VVideo/VVideo.js.map +1 -1
- package/lib/labs/VVideo/VVideo.sass +4 -2
- package/lib/labs/VVideo/VVideoControls.js +33 -16
- package/lib/labs/VVideo/VVideoControls.js.map +1 -1
- package/lib/labs/VVideo/VVideoVolume.js +1 -1
- package/lib/labs/VVideo/VVideoVolume.js.map +1 -1
- package/lib/labs/VVideo/_variables.scss +3 -2
- package/lib/labs/rules/rules.d.ts +10 -3
- package/lib/labs/rules/rules.js +13 -5
- package/lib/labs/rules/rules.js.map +1 -1
- package/lib/locale/af.d.ts +17 -0
- package/lib/locale/af.js +17 -0
- package/lib/locale/af.js.map +1 -1
- package/lib/locale/ar.d.ts +17 -0
- package/lib/locale/ar.js +17 -0
- package/lib/locale/ar.js.map +1 -1
- package/lib/locale/az.d.ts +17 -0
- package/lib/locale/az.js +17 -0
- package/lib/locale/az.js.map +1 -1
- package/lib/locale/bg.d.ts +17 -0
- package/lib/locale/bg.js +17 -0
- package/lib/locale/bg.js.map +1 -1
- package/lib/locale/ca.d.ts +17 -0
- package/lib/locale/ca.js +17 -0
- package/lib/locale/ca.js.map +1 -1
- package/lib/locale/ckb.d.ts +17 -0
- package/lib/locale/ckb.js +17 -0
- package/lib/locale/ckb.js.map +1 -1
- package/lib/locale/cs.d.ts +17 -0
- package/lib/locale/cs.js +17 -0
- package/lib/locale/cs.js.map +1 -1
- package/lib/locale/da.d.ts +17 -0
- package/lib/locale/da.js +17 -0
- package/lib/locale/da.js.map +1 -1
- package/lib/locale/de.d.ts +17 -0
- package/lib/locale/de.js +17 -0
- package/lib/locale/de.js.map +1 -1
- package/lib/locale/el.d.ts +17 -0
- package/lib/locale/el.js +17 -0
- package/lib/locale/el.js.map +1 -1
- package/lib/locale/en.d.ts +17 -0
- package/lib/locale/en.js +17 -0
- package/lib/locale/en.js.map +1 -1
- package/lib/locale/es.d.ts +17 -0
- package/lib/locale/es.js +17 -0
- package/lib/locale/es.js.map +1 -1
- package/lib/locale/et.d.ts +17 -0
- package/lib/locale/et.js +17 -0
- package/lib/locale/et.js.map +1 -1
- package/lib/locale/fa.d.ts +17 -0
- package/lib/locale/fa.js +17 -0
- package/lib/locale/fa.js.map +1 -1
- package/lib/locale/fi.d.ts +17 -0
- package/lib/locale/fi.js +17 -0
- package/lib/locale/fi.js.map +1 -1
- package/lib/locale/fr.d.ts +17 -0
- package/lib/locale/fr.js +17 -0
- package/lib/locale/fr.js.map +1 -1
- package/lib/locale/he.d.ts +17 -0
- package/lib/locale/he.js +17 -0
- package/lib/locale/he.js.map +1 -1
- package/lib/locale/hr.d.ts +17 -0
- package/lib/locale/hr.js +17 -0
- package/lib/locale/hr.js.map +1 -1
- package/lib/locale/hu.d.ts +17 -0
- package/lib/locale/hu.js +17 -0
- package/lib/locale/hu.js.map +1 -1
- package/lib/locale/id.d.ts +17 -0
- package/lib/locale/id.js +17 -0
- package/lib/locale/id.js.map +1 -1
- package/lib/locale/it.d.ts +17 -0
- package/lib/locale/it.js +17 -0
- package/lib/locale/it.js.map +1 -1
- package/lib/locale/ja.d.ts +17 -0
- package/lib/locale/ja.js +17 -0
- package/lib/locale/ja.js.map +1 -1
- package/lib/locale/km.d.ts +17 -0
- package/lib/locale/km.js +17 -0
- package/lib/locale/km.js.map +1 -1
- package/lib/locale/ko.d.ts +17 -0
- package/lib/locale/ko.js +17 -0
- package/lib/locale/ko.js.map +1 -1
- package/lib/locale/lt.d.ts +17 -0
- package/lib/locale/lt.js +17 -0
- package/lib/locale/lt.js.map +1 -1
- package/lib/locale/lv.d.ts +17 -0
- package/lib/locale/lv.js +17 -0
- package/lib/locale/lv.js.map +1 -1
- package/lib/locale/nl.d.ts +17 -0
- package/lib/locale/nl.js +17 -0
- package/lib/locale/nl.js.map +1 -1
- package/lib/locale/no.d.ts +17 -0
- package/lib/locale/no.js +17 -0
- package/lib/locale/no.js.map +1 -1
- package/lib/locale/pl.d.ts +17 -0
- package/lib/locale/pl.js +17 -0
- package/lib/locale/pl.js.map +1 -1
- package/lib/locale/pt.d.ts +17 -0
- package/lib/locale/pt.js +17 -0
- package/lib/locale/pt.js.map +1 -1
- package/lib/locale/ro.d.ts +17 -0
- package/lib/locale/ro.js +17 -0
- package/lib/locale/ro.js.map +1 -1
- package/lib/locale/ru.d.ts +17 -0
- package/lib/locale/ru.js +17 -0
- package/lib/locale/ru.js.map +1 -1
- package/lib/locale/sk.d.ts +17 -0
- package/lib/locale/sk.js +17 -0
- package/lib/locale/sk.js.map +1 -1
- package/lib/locale/sl.d.ts +17 -0
- package/lib/locale/sl.js +17 -0
- package/lib/locale/sl.js.map +1 -1
- package/lib/locale/sr-Cyrl.d.ts +17 -0
- package/lib/locale/sr-Cyrl.js +17 -0
- package/lib/locale/sr-Cyrl.js.map +1 -1
- package/lib/locale/sr-Latn.d.ts +17 -0
- package/lib/locale/sr-Latn.js +17 -0
- package/lib/locale/sr-Latn.js.map +1 -1
- package/lib/locale/sv.d.ts +17 -0
- package/lib/locale/sv.js +17 -0
- package/lib/locale/sv.js.map +1 -1
- package/lib/locale/th.d.ts +17 -0
- package/lib/locale/th.js +17 -0
- package/lib/locale/th.js.map +1 -1
- package/lib/locale/tr.d.ts +17 -0
- package/lib/locale/tr.js +17 -0
- package/lib/locale/tr.js.map +1 -1
- package/lib/locale/uk.d.ts +17 -0
- package/lib/locale/uk.js +17 -0
- package/lib/locale/uk.js.map +1 -1
- package/lib/locale/vi.d.ts +17 -0
- package/lib/locale/vi.js +17 -0
- package/lib/locale/vi.js.map +1 -1
- package/lib/locale/zh-Hans.d.ts +17 -0
- package/lib/locale/zh-Hans.js +17 -0
- package/lib/locale/zh-Hans.js.map +1 -1
- package/lib/locale/zh-Hant.d.ts +17 -0
- package/lib/locale/zh-Hant.js +17 -0
- package/lib/locale/zh-Hant.js.map +1 -1
- package/lib/util/getScrollParent.js +3 -1
- package/lib/util/getScrollParent.js.map +1 -1
- package/package.json +2 -2
|
@@ -3,21 +3,32 @@ import { Fragment as _Fragment, createVNode as _createVNode, createElementVNode
|
|
|
3
3
|
import "./VColorInput.css";
|
|
4
4
|
|
|
5
5
|
// Components
|
|
6
|
+
import { VAvatar } from "../../components/VAvatar/index.js";
|
|
6
7
|
import { makeVColorPickerProps, VColorPicker } from "../../components/VColorPicker/VColorPicker.js";
|
|
7
8
|
import { makeVConfirmEditProps, VConfirmEdit } from "../../components/VConfirmEdit/VConfirmEdit.js";
|
|
8
|
-
import { VIcon } from "../../components/VIcon/VIcon.js";
|
|
9
9
|
import { VMenu } from "../../components/VMenu/VMenu.js";
|
|
10
10
|
import { makeVTextFieldProps, VTextField } from "../../components/VTextField/VTextField.js"; // Composables
|
|
11
11
|
import { makeFocusProps } from "../../composables/focus.js";
|
|
12
12
|
import { useProxiedModel } from "../../composables/proxiedModel.js"; // Utilities
|
|
13
13
|
import { computed, shallowRef } from 'vue';
|
|
14
14
|
import { genericComponent, omit, propsFactory, useRender } from "../../util/index.js"; // Types
|
|
15
|
+
const availablePipLocations = ['prepend', 'prepend-inner', 'append', 'append-inner'];
|
|
15
16
|
export const makeVColorInputProps = propsFactory({
|
|
16
|
-
|
|
17
|
+
hidePip: Boolean,
|
|
18
|
+
colorPip: Boolean,
|
|
17
19
|
pipIcon: {
|
|
18
20
|
type: String,
|
|
19
21
|
default: '$color'
|
|
20
22
|
},
|
|
23
|
+
pipLocation: {
|
|
24
|
+
type: String,
|
|
25
|
+
default: 'prepend',
|
|
26
|
+
validator: v => availablePipLocations.includes(v)
|
|
27
|
+
},
|
|
28
|
+
pipVariant: {
|
|
29
|
+
type: String,
|
|
30
|
+
default: 'text'
|
|
31
|
+
},
|
|
21
32
|
...makeFocusProps(),
|
|
22
33
|
...makeVConfirmEditProps(),
|
|
23
34
|
...makeVTextFieldProps(),
|
|
@@ -61,8 +72,15 @@ export const VColorInput = genericComponent()({
|
|
|
61
72
|
useRender(() => {
|
|
62
73
|
const confirmEditProps = VConfirmEdit.filterProps(props);
|
|
63
74
|
const colorPickerProps = VColorPicker.filterProps(omit(props, ['active', 'color']));
|
|
64
|
-
const textFieldProps = VTextField.filterProps(
|
|
65
|
-
const
|
|
75
|
+
const textFieldProps = VTextField.filterProps(props);
|
|
76
|
+
const slotWithPip = props.hidePip ? undefined : {
|
|
77
|
+
[props.pipLocation]: arg => _createElementVNode(_Fragment, null, [_createVNode(VAvatar, {
|
|
78
|
+
"class": "v-color-input__pip",
|
|
79
|
+
"color": props.colorPip ? model.value : undefined,
|
|
80
|
+
"variant": props.pipVariant,
|
|
81
|
+
"icon": props.pipIcon
|
|
82
|
+
}, null), slots[props.pipLocation]?.(arg)])
|
|
83
|
+
};
|
|
66
84
|
return _createVNode(VTextField, _mergeProps(textFieldProps, {
|
|
67
85
|
"class": ['v-color-input', props.class],
|
|
68
86
|
"style": props.style,
|
|
@@ -78,10 +96,7 @@ export const VColorInput = genericComponent()({
|
|
|
78
96
|
}
|
|
79
97
|
}), {
|
|
80
98
|
...slots,
|
|
81
|
-
|
|
82
|
-
"color": props.pip ? model.value : undefined,
|
|
83
|
-
"icon": props.pipIcon
|
|
84
|
-
}, null), slots.prepend?.(arg)]) : undefined,
|
|
99
|
+
...slotWithPip,
|
|
85
100
|
default: () => _createElementVNode(_Fragment, null, [_createVNode(VMenu, {
|
|
86
101
|
"modelValue": menu.value,
|
|
87
102
|
"onUpdate:modelValue": $event => menu.value = $event,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VColorInput.js","names":["makeVColorPickerProps","VColorPicker","makeVConfirmEditProps","VConfirmEdit","VIcon","VMenu","makeVTextFieldProps","VTextField","makeFocusProps","useProxiedModel","computed","shallowRef","genericComponent","omit","propsFactory","useRender","makeVColorInputProps","pip","Boolean","pipIcon","type","String","default","VColorInput","name","props","emits","val","setup","_ref","slots","model","menu","isFocused","focused","isInteractive","disabled","readonly","display","value","onKeydown","e","key","target","onClick","preventDefault","stopPropagation","onSave","onCancel","confirmEditProps","filterProps","colorPickerProps","textFieldProps","hasPrepend","prepend","_createVNode","_mergeProps","class","style","undefined","event","arg","_createElementVNode","_Fragment","$event","_ref2","actions","proxyModel","save","cancel","isPristine","onUpdateModel","hideActions"],"sources":["../../../src/labs/VColorInput/VColorInput.tsx"],"sourcesContent":["// Styles\nimport './VColorInput.sass'\n\n// Components\nimport { makeVColorPickerProps, VColorPicker } from '@/components/VColorPicker/VColorPicker'\nimport { makeVConfirmEditProps, VConfirmEdit } from '@/components/VConfirmEdit/VConfirmEdit'\nimport { VIcon } from '@/components/VIcon/VIcon'\nimport { VMenu } from '@/components/VMenu/VMenu'\nimport { makeVTextFieldProps, VTextField } from '@/components/VTextField/VTextField'\n\n// Composables\nimport { makeFocusProps } from '@/composables/focus'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, shallowRef } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { VTextFieldSlots } from '@/components/VTextField/VTextField'\n\nexport type VColorInputActionsSlot = {\n save: () => void\n cancel: () => void\n isPristine: boolean\n}\n\nexport type VColorInputSlots = Omit<VTextFieldSlots, 'default'> & {\n actions: VColorInputActionsSlot\n default: never\n}\n\nexport const makeVColorInputProps = propsFactory({\n pip: Boolean,\n pipIcon: {\n type: String,\n default: '$color',\n },\n\n ...makeFocusProps(),\n ...makeVConfirmEditProps(),\n ...makeVTextFieldProps(),\n ...omit(makeVColorPickerProps(), ['width']),\n}, 'VColorInput')\n\nexport const VColorInput = genericComponent<VColorInputSlots>()({\n name: 'VColorInput',\n\n props: makeVColorInputProps(),\n\n emits: {\n 'update:modelValue': (val: string) => true,\n },\n\n setup (props, { slots }) {\n const model = useProxiedModel(props, 'modelValue')\n const menu = shallowRef(false)\n const isFocused = shallowRef(props.focused)\n\n const isInteractive = computed(() => !props.disabled && !props.readonly)\n\n const display = computed(() => model.value || null)\n\n function onKeydown (e: KeyboardEvent) {\n if (e.key !== 'Enter') return\n\n if (!menu.value || !isFocused.value) {\n menu.value = true\n\n return\n }\n\n const target = e.target as HTMLInputElement\n\n model.value = target.value\n }\n\n function onClick (e: MouseEvent) {\n e.preventDefault()\n e.stopPropagation()\n\n menu.value = true\n }\n\n function onSave () {\n menu.value = false\n }\n\n function onCancel () {\n menu.value = false\n }\n\n useRender(() => {\n const confirmEditProps = VConfirmEdit.filterProps(props)\n const colorPickerProps = VColorPicker.filterProps(omit(props, ['active', 'color']))\n const textFieldProps = VTextField.filterProps(omit(props, ['prependInnerIcon']))\n\n const hasPrepend = !!(slots.prepend || props.pipIcon)\n\n return (\n <VTextField\n { ...textFieldProps }\n class={[\n 'v-color-input',\n props.class,\n ]}\n style={ props.style }\n modelValue={ display.value }\n onKeydown={ isInteractive.value ? onKeydown : undefined }\n focused={ menu.value || isFocused.value }\n onClick:control={ isInteractive.value ? onClick : undefined }\n onClick:prependInner={ isInteractive.value ? onClick : undefined }\n onUpdate:focused={ event => isFocused.value = event }\n onClick:appendInner={ isInteractive.value ? onClick : undefined }\n onUpdate:modelValue={ val => {\n model.value = val\n }}\n >\n {{\n ...slots,\n prepend: props.pipIcon ? arg => (\n <>\n { hasPrepend && (\n <VIcon\n color={ props.pip ? model.value as string : undefined }\n icon={ props.pipIcon }\n />\n )}\n\n { slots.prepend?.(arg) }\n </>\n ) : undefined,\n default: () => (\n <>\n <VMenu\n v-model={ menu.value }\n activator=\"parent\"\n minWidth=\"0\"\n closeOnContentClick={ false }\n openOnClick={ false }\n >\n <VConfirmEdit\n { ...confirmEditProps }\n v-model={ model.value }\n onSave={ onSave }\n onCancel={ onCancel }\n >\n {{\n default: ({ actions, model: proxyModel, save, cancel, isPristine }) => {\n function onUpdateModel (value: string) {\n if (!props.hideActions) {\n proxyModel.value = value\n } else {\n model.value = value\n }\n }\n\n return (\n <VColorPicker\n { ...colorPickerProps }\n modelValue={ props.hideActions ? model.value : proxyModel.value }\n onUpdate:modelValue={ value => onUpdateModel(value) }\n onMousedown={ (e: MouseEvent) => e.preventDefault() }\n >\n {{\n actions: !props.hideActions ? () => slots.actions?.({ save, cancel, isPristine }) ?? actions() : undefined,\n }}\n </VColorPicker>\n )\n },\n }}\n </VConfirmEdit>\n </VMenu>\n\n { slots.default?.() }\n </>\n ),\n }}\n </VTextField>\n )\n })\n },\n})\n\nexport type VColorInput = InstanceType<typeof VColorInput>\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"VColorInput.js","names":["VAvatar","makeVColorPickerProps","VColorPicker","makeVConfirmEditProps","VConfirmEdit","VMenu","makeVTextFieldProps","VTextField","makeFocusProps","useProxiedModel","computed","shallowRef","genericComponent","omit","propsFactory","useRender","availablePipLocations","makeVColorInputProps","hidePip","Boolean","colorPip","pipIcon","type","String","default","pipLocation","validator","v","includes","pipVariant","VColorInput","name","props","emits","val","setup","_ref","slots","model","menu","isFocused","focused","isInteractive","disabled","readonly","display","value","onKeydown","e","key","target","onClick","preventDefault","stopPropagation","onSave","onCancel","confirmEditProps","filterProps","colorPickerProps","textFieldProps","slotWithPip","undefined","arg","_createElementVNode","_Fragment","_createVNode","_mergeProps","class","style","event","$event","_ref2","actions","proxyModel","save","cancel","isPristine","onUpdateModel","hideActions"],"sources":["../../../src/labs/VColorInput/VColorInput.tsx"],"sourcesContent":["// Styles\nimport './VColorInput.sass'\n\n// Components\nimport { VAvatar } from '@/components/VAvatar'\nimport { makeVColorPickerProps, VColorPicker } from '@/components/VColorPicker/VColorPicker'\nimport { makeVConfirmEditProps, VConfirmEdit } from '@/components/VConfirmEdit/VConfirmEdit'\nimport { VMenu } from '@/components/VMenu/VMenu'\nimport { makeVTextFieldProps, VTextField } from '@/components/VTextField/VTextField'\n\n// Composables\nimport { makeFocusProps } from '@/composables/focus'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, shallowRef } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VTextFieldSlots } from '@/components/VTextField/VTextField'\n\nexport type VColorInputActionsSlot = {\n save: () => void\n cancel: () => void\n isPristine: boolean\n}\n\nexport type VColorInputSlots = Omit<VTextFieldSlots, 'default'> & {\n actions: VColorInputActionsSlot\n default: never\n}\n\nconst availablePipLocations = ['prepend', 'prepend-inner', 'append', 'append-inner'] as const\nexport type PipLocation = typeof availablePipLocations[number]\n\nexport const makeVColorInputProps = propsFactory({\n hidePip: Boolean,\n colorPip: Boolean,\n pipIcon: {\n type: String,\n default: '$color',\n },\n pipLocation: {\n type: String as PropType<PipLocation>,\n default: 'prepend',\n validator: (v: any) => availablePipLocations.includes(v),\n },\n pipVariant: {\n type: String as PropType<VAvatar['$props']['variant']>,\n default: 'text',\n },\n\n ...makeFocusProps(),\n ...makeVConfirmEditProps(),\n ...makeVTextFieldProps(),\n ...omit(makeVColorPickerProps(), ['width']),\n}, 'VColorInput')\n\nexport const VColorInput = genericComponent<VColorInputSlots>()({\n name: 'VColorInput',\n\n props: makeVColorInputProps(),\n\n emits: {\n 'update:modelValue': (val: string) => true,\n },\n\n setup (props, { slots }) {\n const model = useProxiedModel(props, 'modelValue')\n const menu = shallowRef(false)\n const isFocused = shallowRef(props.focused)\n\n const isInteractive = computed(() => !props.disabled && !props.readonly)\n\n const display = computed(() => model.value || null)\n\n function onKeydown (e: KeyboardEvent) {\n if (e.key !== 'Enter') return\n\n if (!menu.value || !isFocused.value) {\n menu.value = true\n\n return\n }\n\n const target = e.target as HTMLInputElement\n\n model.value = target.value\n }\n\n function onClick (e: MouseEvent) {\n e.preventDefault()\n e.stopPropagation()\n\n menu.value = true\n }\n\n function onSave () {\n menu.value = false\n }\n\n function onCancel () {\n menu.value = false\n }\n\n useRender(() => {\n const confirmEditProps = VConfirmEdit.filterProps(props)\n const colorPickerProps = VColorPicker.filterProps(omit(props, ['active', 'color']))\n const textFieldProps = VTextField.filterProps(props)\n\n const slotWithPip = props.hidePip\n ? undefined\n : {\n [props.pipLocation]: (arg: any) => (\n <>\n <VAvatar\n class=\"v-color-input__pip\"\n color={ props.colorPip ? model.value as string : undefined }\n variant={ props.pipVariant }\n icon={ props.pipIcon }\n />\n { slots[props.pipLocation]?.(arg) }\n </>\n ),\n }\n\n return (\n <VTextField\n { ...textFieldProps }\n class={[\n 'v-color-input',\n props.class,\n ]}\n style={ props.style }\n modelValue={ display.value }\n onKeydown={ isInteractive.value ? onKeydown : undefined }\n focused={ menu.value || isFocused.value }\n onClick:control={ isInteractive.value ? onClick : undefined }\n onClick:prependInner={ isInteractive.value ? onClick : undefined }\n onUpdate:focused={ event => isFocused.value = event }\n onClick:appendInner={ isInteractive.value ? onClick : undefined }\n onUpdate:modelValue={ val => {\n model.value = val\n }}\n >\n {{\n ...slots,\n ...slotWithPip,\n default: () => (\n <>\n <VMenu\n v-model={ menu.value }\n activator=\"parent\"\n minWidth=\"0\"\n closeOnContentClick={ false }\n openOnClick={ false }\n >\n <VConfirmEdit\n { ...confirmEditProps }\n v-model={ model.value }\n onSave={ onSave }\n onCancel={ onCancel }\n >\n {{\n default: ({ actions, model: proxyModel, save, cancel, isPristine }) => {\n function onUpdateModel (value: string) {\n if (!props.hideActions) {\n proxyModel.value = value\n } else {\n model.value = value\n }\n }\n\n return (\n <VColorPicker\n { ...colorPickerProps }\n modelValue={ props.hideActions ? model.value : proxyModel.value }\n onUpdate:modelValue={ value => onUpdateModel(value) }\n onMousedown={ (e: MouseEvent) => e.preventDefault() }\n >\n {{\n actions: !props.hideActions ? () => slots.actions?.({ save, cancel, isPristine }) ?? actions() : undefined,\n }}\n </VColorPicker>\n )\n },\n }}\n </VConfirmEdit>\n </VMenu>\n\n { slots.default?.() }\n </>\n ),\n }}\n </VTextField>\n )\n })\n },\n})\n\nexport type VColorInput = InstanceType<typeof VColorInput>\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -5,3 +5,11 @@
|
|
|
5
5
|
/* region INPUT */
|
|
6
6
|
.v-color-input
|
|
7
7
|
padding: 0
|
|
8
|
+
|
|
9
|
+
@at-root
|
|
10
|
+
@include tools.density('v-color-input.v-input', $color-input-pip-density) using ($modifier)
|
|
11
|
+
.v-color-input__pip
|
|
12
|
+
--v-avatar-height: #{$color-input-pip-avatar-size + $modifier}
|
|
13
|
+
|
|
14
|
+
.v-color-input__pip.v-avatar--variant-text
|
|
15
|
+
--v-avatar-height: min-content
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
flex-direction: column;
|
|
4
4
|
align-items: center;
|
|
5
5
|
position: relative;
|
|
6
|
+
--v-video-aspect-ratio: 1.7777777778;
|
|
6
7
|
--v-video-controls-height: 58px;
|
|
7
8
|
--v-video-controls-pill-border-radius: 99px;
|
|
8
9
|
}
|
|
@@ -145,17 +146,16 @@
|
|
|
145
146
|
letter-spacing: 0.02em;
|
|
146
147
|
}
|
|
147
148
|
.v-video--variant-player {
|
|
148
|
-
width:
|
|
149
|
+
width: 100%;
|
|
149
150
|
}
|
|
150
151
|
.v-video--variant-player > .v-video__content {
|
|
151
152
|
width: 100%;
|
|
152
|
-
|
|
153
|
+
aspect-ratio: var(--v-video-aspect-ratio);
|
|
153
154
|
}
|
|
154
155
|
.v-video--variant-background {
|
|
155
156
|
outline: none;
|
|
156
157
|
position: absolute;
|
|
157
158
|
pointer-events: none;
|
|
158
|
-
width: 100%;
|
|
159
159
|
height: 100%;
|
|
160
160
|
}
|
|
161
161
|
.v-video--variant-background > .v-video__content {
|
|
@@ -196,7 +196,7 @@
|
|
|
196
196
|
transition: 0.6s ease-in-out;
|
|
197
197
|
transition-property: opacity, background-color;
|
|
198
198
|
}
|
|
199
|
-
.v-video-controls
|
|
199
|
+
.v-video-controls--pills > .v-video-control__pill {
|
|
200
200
|
box-shadow: 0px 2px 4px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, 0.2)), 0px 4px 5px 0px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, 0.14)), 0px 1px 10px 0px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, 0.12));
|
|
201
201
|
}
|
|
202
202
|
.v-video-controls:hover {
|
|
@@ -39,6 +39,7 @@ export declare const makeVVideoProps: <Defaults extends {
|
|
|
39
39
|
width?: unknown;
|
|
40
40
|
class?: unknown;
|
|
41
41
|
style?: unknown;
|
|
42
|
+
aspectRatio?: unknown;
|
|
42
43
|
autoplay?: unknown;
|
|
43
44
|
muted?: unknown;
|
|
44
45
|
eager?: unknown;
|
|
@@ -2110,6 +2111,10 @@ export declare const makeVVideoProps: <Defaults extends {
|
|
|
2110
2111
|
type: PropType<unknown extends Defaults["style"] ? import("vue").StyleValue : import("vue").StyleValue | Defaults["style"]>;
|
|
2111
2112
|
default: unknown extends Defaults["style"] ? import("vue").StyleValue : NonNullable<import("vue").StyleValue> | Defaults["style"];
|
|
2112
2113
|
};
|
|
2114
|
+
aspectRatio: unknown extends Defaults["aspectRatio"] ? (StringConstructor | NumberConstructor)[] : {
|
|
2115
|
+
type: PropType<unknown extends Defaults["aspectRatio"] ? string | number : string | number | Defaults["aspectRatio"]>;
|
|
2116
|
+
default: unknown extends Defaults["aspectRatio"] ? string | number : NonNullable<string | number> | Defaults["aspectRatio"];
|
|
2117
|
+
};
|
|
2113
2118
|
autoplay: unknown extends Defaults["autoplay"] ? BooleanConstructor : {
|
|
2114
2119
|
type: PropType<unknown extends Defaults["autoplay"] ? boolean : boolean | Defaults["autoplay"]>;
|
|
2115
2120
|
default: unknown extends Defaults["autoplay"] ? boolean : boolean | Defaults["autoplay"];
|
|
@@ -3984,6 +3989,7 @@ export declare const VVideo: {
|
|
|
3984
3989
|
type?: string | undefined;
|
|
3985
3990
|
height?: string | number | undefined;
|
|
3986
3991
|
width?: string | number | undefined;
|
|
3992
|
+
aspectRatio?: string | number | undefined;
|
|
3987
3993
|
backgroundColor?: string | undefined;
|
|
3988
3994
|
color?: string | undefined;
|
|
3989
3995
|
maxHeight?: string | number | undefined;
|
|
@@ -4933,6 +4939,7 @@ export declare const VVideo: {
|
|
|
4933
4939
|
type?: string | undefined;
|
|
4934
4940
|
height?: string | number | undefined;
|
|
4935
4941
|
width?: string | number | undefined;
|
|
4942
|
+
aspectRatio?: string | number | undefined;
|
|
4936
4943
|
backgroundColor?: string | undefined;
|
|
4937
4944
|
color?: string | undefined;
|
|
4938
4945
|
maxHeight?: string | number | undefined;
|
|
@@ -5867,6 +5874,7 @@ export declare const VVideo: {
|
|
|
5867
5874
|
type?: string | undefined;
|
|
5868
5875
|
height?: string | number | undefined;
|
|
5869
5876
|
width?: string | number | undefined;
|
|
5877
|
+
aspectRatio?: string | number | undefined;
|
|
5870
5878
|
backgroundColor?: string | undefined;
|
|
5871
5879
|
color?: string | undefined;
|
|
5872
5880
|
maxHeight?: string | number | undefined;
|
|
@@ -6828,6 +6836,7 @@ export declare const VVideo: {
|
|
|
6828
6836
|
type: PropType<import("vue").StyleValue>;
|
|
6829
6837
|
default: null;
|
|
6830
6838
|
};
|
|
6839
|
+
aspectRatio: (StringConstructor | NumberConstructor)[];
|
|
6831
6840
|
autoplay: BooleanConstructor;
|
|
6832
6841
|
muted: BooleanConstructor;
|
|
6833
6842
|
eager: BooleanConstructor;
|
|
@@ -6899,6 +6908,7 @@ export declare const VVideo: {
|
|
|
6899
6908
|
type: PropType<import("vue").StyleValue>;
|
|
6900
6909
|
default: null;
|
|
6901
6910
|
};
|
|
6911
|
+
aspectRatio: (StringConstructor | NumberConstructor)[];
|
|
6902
6912
|
autoplay: BooleanConstructor;
|
|
6903
6913
|
muted: BooleanConstructor;
|
|
6904
6914
|
eager: BooleanConstructor;
|
|
@@ -24,6 +24,7 @@ import { nextTick, onBeforeUnmount, onMounted, ref, shallowRef, toRef, watch } f
|
|
|
24
24
|
import { createRange, genericComponent, omit, pick, propsFactory, useRender } from "../../util/index.js"; // Types
|
|
25
25
|
const allowedVariants = ['background', 'player'];
|
|
26
26
|
export const makeVVideoProps = propsFactory({
|
|
27
|
+
aspectRatio: [String, Number],
|
|
27
28
|
autoplay: Boolean,
|
|
28
29
|
muted: Boolean,
|
|
29
30
|
eager: Boolean,
|
|
@@ -340,7 +341,9 @@ export const VVideo = genericComponent()({
|
|
|
340
341
|
"class": _normalizeClass(['v-video', `v-video--variant-${props.variant}`, `v-video--${state.value}`, {
|
|
341
342
|
'v-video--playing': playing.value
|
|
342
343
|
}, themeClasses.value, densityClasses.value, roundedContainerClasses.value, props.class]),
|
|
343
|
-
"style": _normalizeStyle([
|
|
344
|
+
"style": _normalizeStyle([{
|
|
345
|
+
'--v-video-aspect-ratio': props.aspectRatio
|
|
346
|
+
}, props.variant === 'background' ? [] : pick(dimensionStyles.value, ['width', 'minWidth', 'maxWidth']), props.style]),
|
|
344
347
|
"onKeydown": onKeydown,
|
|
345
348
|
"onClick": onClick
|
|
346
349
|
}, [_createElementVNode("div", {
|
|
@@ -390,9 +393,9 @@ export const VVideo = genericComponent()({
|
|
|
390
393
|
}, {
|
|
391
394
|
default: () => [_createElementVNode("div", {
|
|
392
395
|
"class": _normalizeClass(['v-video__overlay-fill', ...roundedContainerClasses.value])
|
|
393
|
-
}, [overlayPlayIcon])]
|
|
396
|
+
}, [props.variant === 'player' && overlayPlayIcon])]
|
|
394
397
|
})]
|
|
395
|
-
}), _createVNode(VOverlay, _mergeProps({
|
|
398
|
+
}), props.variant === 'player' && _createVNode(VOverlay, _mergeProps({
|
|
396
399
|
"key": "loading-overlay",
|
|
397
400
|
"modelValue": state.value === 'loading' || waiting.value,
|
|
398
401
|
"opacity": ".1"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VVideo.js","names":["makeVVideoControlsProps","VVideoControls","VFadeTransition","VSpacer","VImg","VOverlay","VProgressCircular","VIconBtn","useDisplay","makeComponentProps","makeDensityProps","useDensity","makeDimensionProps","useDimension","useElevation","forwardRefs","useProxiedModel","useRounded","makeThemeProps","provideTheme","MaybeTransition","nextTick","onBeforeUnmount","onMounted","ref","shallowRef","toRef","watch","createRange","genericComponent","omit","pick","propsFactory","useRender","allowedVariants","makeVVideoProps","autoplay","Boolean","muted","eager","src","String","type","image","hideOverlay","noFullscreen","startAt","Number","variant","default","validator","v","includes","controlsTransition","Object","component","controlsVariant","controlsProps","rounded","Array","VVideo","name","inheritAttrs","props","emits","loaded","element","val","setup","_ref","attrs","emit","slots","themeClasses","densityClasses","dimensionStyles","elevationClasses","ssr","roundedForContainer","isArray","roundedForControls","at","roundedClasses","roundedContainerClasses","roundedControlsClasses","containerRef","videoRef","controlsRef","playing","progress","volume","fullscreen","waiting","triggered","startAfterLoad","state","duration","fullscreenEnabled","controlsList","onTimeupdate","currentTime","value","onTriggered","addEventListener","onVideoLoaded","startTime","setTimeout","onClick","onKeydown","e","ctrlKey","key","startsWith","preventDefault","target","tagName","step","shiftKey","Math","min","max","map","skipTo","toggleMuted","toggleFullscreen","play","pause","once","immediate","removeEventListener","focusSlider","container","closest","innerSlider","querySelector","focus","fullscreenExitShortcut","document","body","fullscreenElement","exitFullscreen","onFullscreenExit","requestFullscreen","onVideoClick","onDoubleClick","lastTap","onTouchend","now","performance","showControls","posterTransition","overlayProps","contained","persistent","contentClass","filterProps","hideVolume","hideFullscreen","density","controlsEventHandlers","onSkip","onClick:fullscreen","stopPropagation","controlslist","filter","join","loadingIndicator","_createVNode","color","height","overlayPlayIcon","_createElementVNode","_normalizeClass","class","_normalizeStyle","style","_mergeProps","onPlay","onPause","onWaiting","onPlaying","sources","header","controls","prepend","append","video"],"sources":["../../../src/labs/VVideo/VVideo.tsx"],"sourcesContent":["// Styles\nimport './VVideo.sass'\n\n// Components\nimport { makeVVideoControlsProps, VVideoControls } from './VVideoControls'\nimport { VFadeTransition } from '@/components/transitions'\nimport { VSpacer } from '@/components/VGrid/VSpacer'\nimport { VImg } from '@/components/VImg/VImg'\nimport { VOverlay } from '@/components/VOverlay/VOverlay'\nimport { VProgressCircular } from '@/components/VProgressCircular/VProgressCircular'\nimport { VIconBtn } from '@/labs/VIconBtn/VIconBtn'\n\n// Composables\nimport { useDisplay } from '@/composables'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { useElevation } from '@/composables/elevation'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useRounded } from '@/composables/rounded'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { nextTick, onBeforeUnmount, onMounted, ref, shallowRef, toRef, watch } from 'vue'\nimport { createRange, genericComponent, omit, pick, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { Component, PropType, TransitionProps } from 'vue'\nimport type { VVideoControlsActionsSlot, VVideoControlsVariant } from './VVideoControls'\nimport type { LoaderSlotProps } from '@/composables/loader'\n\nexport type VVideoSlots = {\n header: never\n controls: VVideoControlsActionsSlot\n prepend: VVideoControlsActionsSlot\n append: VVideoControlsActionsSlot\n loader: LoaderSlotProps\n sources: never\n}\n\nconst allowedVariants = ['background', 'player'] as const\ntype Variant = typeof allowedVariants[number]\n\nexport const makeVVideoProps = propsFactory({\n autoplay: Boolean,\n muted: Boolean,\n eager: Boolean,\n src: String,\n type: String, // e.g. video/mp4\n image: String,\n hideOverlay: Boolean,\n noFullscreen: Boolean,\n startAt: [Number, String],\n variant: {\n type: String as PropType<Variant>,\n default: 'player',\n validator: (v: any) => allowedVariants.includes(v),\n },\n controlsTransition: {\n type: [Boolean, String, Object] as PropType<null | string | boolean | TransitionProps & { component?: any }>,\n component: VFadeTransition as Component,\n },\n controlsVariant: {\n type: String as PropType<VVideoControlsVariant>,\n default: 'default',\n },\n controlsProps: {\n type: Object as PropType<VVideoControls['$props']>,\n },\n rounded: [Boolean, Number, String, Array] as PropType<boolean | number | string | (boolean | number | string)[]>,\n\n ...makeComponentProps(),\n ...makeDensityProps(),\n ...makeDimensionProps(),\n ...makeThemeProps(),\n ...omit(makeVVideoControlsProps(), [\n 'fullscreen',\n 'variant',\n ]),\n}, 'VVideo')\n\nexport const VVideo = genericComponent<VVideoSlots>()({\n name: 'VVideo',\n\n inheritAttrs: false,\n\n props: makeVVideoProps(),\n\n emits: {\n loaded: (element: HTMLVideoElement) => true,\n 'update:playing': (val: boolean) => true,\n 'update:progress': (val: number) => true,\n 'update:volume': (val: number) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const { themeClasses } = provideTheme(props)\n const { densityClasses } = useDensity(props)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { ssr } = useDisplay()\n\n const roundedForContainer = toRef(() => Array.isArray(props.rounded) ? props.rounded[0] : props.rounded)\n const roundedForControls = toRef(() => Array.isArray(props.rounded) ? props.rounded.at(-1) : props.rounded ?? false)\n const { roundedClasses: roundedContainerClasses } = useRounded(roundedForContainer)\n const { roundedClasses: roundedControlsClasses } = useRounded(roundedForControls)\n\n const containerRef = ref<HTMLDivElement>()\n const videoRef = ref<HTMLVideoElement>()\n const controlsRef = ref<VVideoControls>()\n\n const playing = useProxiedModel(props, 'playing')\n const progress = useProxiedModel(props, 'progress')\n const volume = useProxiedModel(props, 'volume', 0, (v?: number | string) => Number(v ?? 0))\n\n const fullscreen = shallowRef(false)\n const waiting = shallowRef(false)\n const triggered = shallowRef(false)\n const startAfterLoad = shallowRef(false)\n const state = shallowRef<'idle' | 'loading' | 'loaded' | 'error'>(props.autoplay ? 'loading' : 'idle')\n const duration = shallowRef(0)\n\n const fullscreenEnabled = toRef(() => !props.noFullscreen && !String(attrs.controlsList ?? '').includes('nofullscreen'))\n\n function onTimeupdate () {\n const { currentTime, duration } = videoRef.value!\n progress.value = duration === 0 ? 0 : 100 * currentTime / duration\n }\n\n async function onTriggered () {\n await nextTick()\n if (!videoRef.value) return\n videoRef.value.addEventListener('timeupdate', onTimeupdate)\n videoRef.value.volume = volume.value / 100\n if (state.value !== 'loaded') {\n state.value = 'loading'\n }\n }\n\n function onVideoLoaded () {\n state.value = 'loaded'\n duration.value = videoRef.value!.duration\n\n const startTime = Number(props.startAt ?? 0)\n if (startTime && startTime <= duration.value) {\n videoRef.value!.currentTime = startTime\n progress.value = duration.value === 0 ? 0 : 100 * startTime / duration.value\n }\n\n if (startAfterLoad.value) {\n setTimeout(() => playing.value = true, 100)\n }\n\n emit('loaded', videoRef.value!)\n }\n\n function onClick () {\n if (state.value !== 'loaded') {\n triggered.value = true\n startAfterLoad.value = !startAfterLoad.value\n }\n }\n\n function onKeydown (e: KeyboardEvent) {\n if (!videoRef.value || e.ctrlKey) return\n if (e.key.startsWith('Arrow')) {\n e.preventDefault()\n }\n switch (true) {\n case e.key === ' ': {\n if (!['A', 'BUTTON'].includes((e.target as Element)?.tagName)) {\n e.preventDefault()\n playing.value = !playing.value\n }\n break\n }\n case e.key === 'ArrowRight': {\n const step = 10 * (e.shiftKey ? 6 : 1)\n videoRef.value.currentTime = Math.min(videoRef.value.currentTime + step, duration.value)\n // TODO: show skip indicator\n break\n }\n case e.key === 'ArrowLeft': {\n const step = 10 * (e.shiftKey ? 6 : 1)\n videoRef.value.currentTime = Math.max(videoRef.value.currentTime - step, 0)\n // TODO: show skip indicator\n break\n }\n case createRange(10).map(String).includes(e.key): {\n skipTo(Number(e.key) * 10)\n break\n }\n case e.key === 'ArrowUp': {\n volume.value = Math.min(volume.value + 10, 100)\n // TODO: show volume change indicator\n break\n }\n case e.key === 'ArrowDown': {\n volume.value = Math.max(volume.value - 10, 0)\n // TODO: show volume change indicator\n break\n }\n case e.key === 'm': {\n controlsRef.value?.toggleMuted()\n break\n }\n case e.key === 'f': {\n toggleFullscreen()\n break\n }\n }\n }\n\n function skipTo (v: number) {\n if (!videoRef.value) return\n progress.value = v\n videoRef.value.currentTime = duration.value * v / 100\n }\n\n watch(() => props.src, v => {\n progress.value = 0\n })\n\n watch(playing, v => {\n if (!videoRef.value) return\n if (v) {\n videoRef.value.play()\n } else {\n videoRef.value.pause()\n }\n })\n\n watch(volume, v => {\n if (!videoRef.value) return\n videoRef.value.volume = v / 100\n })\n\n watch(triggered, () => onTriggered(), { once: true })\n\n watch(() => props.eager, v => v && (triggered.value = true), { immediate: true })\n\n onMounted(() => {\n if (props.autoplay && !ssr) {\n triggered.value = true\n startAfterLoad.value = true\n }\n })\n\n onBeforeUnmount(() => {\n videoRef.value?.removeEventListener('timeupdate', onTimeupdate)\n })\n\n function focusSlider () {\n const container = videoRef.value?.closest('.v-video') as HTMLElement\n const innerSlider = container?.querySelector('[role=\"slider\"]') as HTMLElement\n innerSlider?.focus()\n }\n\n function fullscreenExitShortcut (e: KeyboardEvent) {\n if (['ESC', 'f'].includes(e.key)) {\n toggleFullscreen()\n document.body.removeEventListener('keydown', fullscreenExitShortcut)\n }\n }\n\n async function toggleFullscreen () {\n if (!fullscreenEnabled.value || !document.fullscreenEnabled) {\n return\n }\n if (document.fullscreenElement) {\n document.exitFullscreen()\n onFullscreenExit()\n } else {\n await containerRef.value?.requestFullscreen()\n document.body.addEventListener('keydown', fullscreenExitShortcut)\n document.addEventListener('fullscreenchange', onFullscreenExit)\n fullscreen.value = true\n }\n }\n\n function onFullscreenExit () {\n // event fires with a delay after requestFullscreen(), ignore first run\n if (document.fullscreenElement) return\n\n focusSlider()\n fullscreen.value = false\n document.body.removeEventListener('keydown', fullscreenExitShortcut)\n document.removeEventListener('fullscreenchange', onFullscreenExit)\n }\n\n function onVideoClick (e: Event) {\n e.preventDefault()\n if (state.value === 'loaded') {\n playing.value = !playing.value\n focusSlider()\n }\n }\n\n function onDoubleClick (e: Event) {\n e.preventDefault()\n toggleFullscreen()\n }\n\n let lastTap = 0\n function onTouchend (e: Event) {\n const now = performance.now()\n if ((now - lastTap) < 500) {\n e.preventDefault()\n toggleFullscreen()\n } else {\n lastTap = now\n }\n }\n\n useRender(() => {\n const showControls = state.value === 'loaded' &&\n props.variant === 'player' &&\n props.controlsVariant !== 'hidden'\n\n const posterTransition = props.variant === 'background'\n ? 'poster-fade-out'\n : 'fade-transition'\n\n const overlayProps = {\n contained: true,\n persistent: true,\n contentClass: 'v-video__overlay-fill',\n }\n\n const controlsProps = {\n ...VVideoControls.filterProps(omit(props, ['variant', 'rounded', 'hideVolume'])),\n rounded: Array.isArray(props.rounded) ? props.rounded.at(-1) : props.rounded,\n fullscreen: fullscreen.value,\n hideVolume: props.hideVolume || props.muted,\n hideFullscreen: props.hideFullscreen || !fullscreenEnabled.value,\n density: props.density,\n variant: props.controlsVariant,\n playing: playing.value,\n progress: progress.value,\n duration: duration.value,\n volume: volume.value,\n ...props.controlsProps,\n }\n\n const controlsEventHandlers = {\n onSkip: (v: number) => skipTo(v),\n 'onClick:fullscreen': () => toggleFullscreen(),\n 'onUpdate:playing': (v: boolean) => playing.value = v,\n 'onUpdate:progress': (v: number) => skipTo(v),\n 'onUpdate:volume': (v: number) => volume.value = v,\n onClick: (e: Event) => e.stopPropagation(),\n }\n\n const controlslist = [\n attrs.controlslist,\n props.noFullscreen ? 'nofullscreen' : '',\n ].filter(Boolean).join(' ')\n\n const loadingIndicator = (\n <VProgressCircular\n indeterminate\n color={ props.color }\n width=\"3\"\n size={ Math.min(100, Number(props.height) / 2 || 50) }\n />\n )\n\n const overlayPlayIcon = (\n <VIconBtn\n icon=\"$play\"\n size=\"80\"\n color=\"#fff\"\n variant=\"outlined\"\n iconSize=\"50\"\n class=\"v-video__center-icon\"\n />\n )\n\n return (\n <div\n ref={ containerRef }\n class={[\n 'v-video',\n `v-video--variant-${props.variant}`,\n `v-video--${state.value}`,\n { 'v-video--playing': playing.value },\n themeClasses.value,\n densityClasses.value,\n roundedContainerClasses.value,\n props.class,\n ]}\n style={[\n props.variant === 'background' ? [] : pick(dimensionStyles.value, ['width', 'min-width', 'max-width']),\n props.style,\n ]}\n onKeydown={ onKeydown }\n onClick={ onClick }\n >\n <div\n class={[\n 'v-video__content',\n elevationClasses.value,\n ]}\n style={[\n props.variant === 'background' ? [] : dimensionStyles.value,\n ]}\n >\n { (props.eager || triggered.value) && (\n <video\n key=\"video-element\"\n class={[\n 'v-video__video',\n roundedContainerClasses.value,\n ]}\n { ...omit(attrs, ['controlslist', 'class', 'style']) }\n controlslist={ controlslist }\n autoplay={ props.autoplay }\n muted={ props.muted }\n playsinline\n ref={ videoRef }\n onLoadeddata={ onVideoLoaded }\n onPlay={ () => playing.value = true }\n onPause={ () => playing.value = false }\n onWaiting={ () => waiting.value = true }\n onPlaying={ () => waiting.value = false }\n onClick={ onVideoClick }\n onDblclick={ onDoubleClick }\n onTouchend={ onTouchend }\n >\n { slots.sources?.() ?? <source src={ props.src } type={ props.type } /> }\n </video>\n )}\n { props.variant === 'player' && !props.hideOverlay && (\n <VOverlay\n key=\"pause-overlay\"\n modelValue={ state.value === 'loaded' }\n opacity=\"0\"\n { ...overlayProps }\n >\n <VSpacer />\n <MaybeTransition name=\"fade-transition\">\n { !playing.value && overlayPlayIcon }\n </MaybeTransition>\n <VSpacer />\n </VOverlay>\n )}\n { props.variant === 'player' && !!slots.header\n ? (\n <div key=\"header\" class=\"v-video__header\">\n { slots.header() }\n </div>\n )\n : '' }\n <VOverlay\n key=\"poster-overlay\"\n modelValue={ state.value !== 'loaded' }\n transition={ posterTransition }\n { ...overlayProps }\n >\n <VImg cover src={ props.image }>\n <div\n class={[\n 'v-video__overlay-fill',\n ...roundedContainerClasses.value,\n ]}\n >\n { overlayPlayIcon }\n </div>\n </VImg>\n </VOverlay>\n <VOverlay\n key=\"loading-overlay\"\n modelValue={ state.value === 'loading' || waiting.value }\n opacity=\".1\"\n { ...overlayProps }\n >\n { loadingIndicator }\n </VOverlay>\n </div>\n <MaybeTransition key=\"actions\" transition={ props.controlsTransition }>\n { showControls && (\n <VVideoControls\n ref={ controlsRef }\n class={ roundedControlsClasses.value }\n { ...controlsProps }\n { ...controlsEventHandlers }\n >\n {{\n default: slots.controls,\n prepend: slots.prepend,\n append: slots.append,\n }}\n </VVideoControls>\n )}\n </MaybeTransition>\n </div>\n )\n })\n\n return {\n video: videoRef,\n ...forwardRefs({\n skipTo,\n toggleFullscreen,\n }, controlsRef),\n }\n },\n})\n\nexport type VVideo = InstanceType<typeof VVideo>\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"VVideo.js","names":["makeVVideoControlsProps","VVideoControls","VFadeTransition","VSpacer","VImg","VOverlay","VProgressCircular","VIconBtn","useDisplay","makeComponentProps","makeDensityProps","useDensity","makeDimensionProps","useDimension","useElevation","forwardRefs","useProxiedModel","useRounded","makeThemeProps","provideTheme","MaybeTransition","nextTick","onBeforeUnmount","onMounted","ref","shallowRef","toRef","watch","createRange","genericComponent","omit","pick","propsFactory","useRender","allowedVariants","makeVVideoProps","aspectRatio","String","Number","autoplay","Boolean","muted","eager","src","type","image","hideOverlay","noFullscreen","startAt","variant","default","validator","v","includes","controlsTransition","Object","component","controlsVariant","controlsProps","rounded","Array","VVideo","name","inheritAttrs","props","emits","loaded","element","val","setup","_ref","attrs","emit","slots","themeClasses","densityClasses","dimensionStyles","elevationClasses","ssr","roundedForContainer","isArray","roundedForControls","at","roundedClasses","roundedContainerClasses","roundedControlsClasses","containerRef","videoRef","controlsRef","playing","progress","volume","fullscreen","waiting","triggered","startAfterLoad","state","duration","fullscreenEnabled","controlsList","onTimeupdate","currentTime","value","onTriggered","addEventListener","onVideoLoaded","startTime","setTimeout","onClick","onKeydown","e","ctrlKey","key","startsWith","preventDefault","target","tagName","step","shiftKey","Math","min","max","map","skipTo","toggleMuted","toggleFullscreen","play","pause","once","immediate","removeEventListener","focusSlider","container","closest","innerSlider","querySelector","focus","fullscreenExitShortcut","document","body","fullscreenElement","exitFullscreen","onFullscreenExit","requestFullscreen","onVideoClick","onDoubleClick","lastTap","onTouchend","now","performance","showControls","posterTransition","overlayProps","contained","persistent","contentClass","filterProps","hideVolume","hideFullscreen","density","controlsEventHandlers","onSkip","onClick:fullscreen","stopPropagation","controlslist","filter","join","loadingIndicator","_createVNode","color","height","overlayPlayIcon","_createElementVNode","_normalizeClass","class","_normalizeStyle","style","_mergeProps","onPlay","onPause","onWaiting","onPlaying","sources","header","controls","prepend","append","video"],"sources":["../../../src/labs/VVideo/VVideo.tsx"],"sourcesContent":["// Styles\nimport './VVideo.sass'\n\n// Components\nimport { makeVVideoControlsProps, VVideoControls } from './VVideoControls'\nimport { VFadeTransition } from '@/components/transitions'\nimport { VSpacer } from '@/components/VGrid/VSpacer'\nimport { VImg } from '@/components/VImg/VImg'\nimport { VOverlay } from '@/components/VOverlay/VOverlay'\nimport { VProgressCircular } from '@/components/VProgressCircular/VProgressCircular'\nimport { VIconBtn } from '@/labs/VIconBtn/VIconBtn'\n\n// Composables\nimport { useDisplay } from '@/composables'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { useElevation } from '@/composables/elevation'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useRounded } from '@/composables/rounded'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { nextTick, onBeforeUnmount, onMounted, ref, shallowRef, toRef, watch } from 'vue'\nimport { createRange, genericComponent, omit, pick, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { Component, PropType, TransitionProps } from 'vue'\nimport type { VVideoControlsActionsSlot, VVideoControlsVariant } from './VVideoControls'\nimport type { LoaderSlotProps } from '@/composables/loader'\n\nexport type VVideoSlots = {\n header: never\n controls: VVideoControlsActionsSlot\n prepend: VVideoControlsActionsSlot\n append: VVideoControlsActionsSlot\n loader: LoaderSlotProps\n sources: never\n}\n\nconst allowedVariants = ['background', 'player'] as const\ntype Variant = typeof allowedVariants[number]\n\nexport const makeVVideoProps = propsFactory({\n aspectRatio: [String, Number],\n autoplay: Boolean,\n muted: Boolean,\n eager: Boolean,\n src: String,\n type: String, // e.g. video/mp4\n image: String,\n hideOverlay: Boolean,\n noFullscreen: Boolean,\n startAt: [Number, String],\n variant: {\n type: String as PropType<Variant>,\n default: 'player',\n validator: (v: any) => allowedVariants.includes(v),\n },\n controlsTransition: {\n type: [Boolean, String, Object] as PropType<null | string | boolean | TransitionProps & { component?: any }>,\n component: VFadeTransition as Component,\n },\n controlsVariant: {\n type: String as PropType<VVideoControlsVariant>,\n default: 'default',\n },\n controlsProps: {\n type: Object as PropType<VVideoControls['$props']>,\n },\n rounded: [Boolean, Number, String, Array] as PropType<boolean | number | string | (boolean | number | string)[]>,\n\n ...makeComponentProps(),\n ...makeDensityProps(),\n ...makeDimensionProps(),\n ...makeThemeProps(),\n ...omit(makeVVideoControlsProps(), [\n 'fullscreen',\n 'variant',\n ]),\n}, 'VVideo')\n\nexport const VVideo = genericComponent<VVideoSlots>()({\n name: 'VVideo',\n\n inheritAttrs: false,\n\n props: makeVVideoProps(),\n\n emits: {\n loaded: (element: HTMLVideoElement) => true,\n 'update:playing': (val: boolean) => true,\n 'update:progress': (val: number) => true,\n 'update:volume': (val: number) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const { themeClasses } = provideTheme(props)\n const { densityClasses } = useDensity(props)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { ssr } = useDisplay()\n\n const roundedForContainer = toRef(() => Array.isArray(props.rounded) ? props.rounded[0] : props.rounded)\n const roundedForControls = toRef(() => Array.isArray(props.rounded) ? props.rounded.at(-1) : props.rounded ?? false)\n const { roundedClasses: roundedContainerClasses } = useRounded(roundedForContainer)\n const { roundedClasses: roundedControlsClasses } = useRounded(roundedForControls)\n\n const containerRef = ref<HTMLDivElement>()\n const videoRef = ref<HTMLVideoElement>()\n const controlsRef = ref<VVideoControls>()\n\n const playing = useProxiedModel(props, 'playing')\n const progress = useProxiedModel(props, 'progress')\n const volume = useProxiedModel(props, 'volume', 0, (v?: number | string) => Number(v ?? 0))\n\n const fullscreen = shallowRef(false)\n const waiting = shallowRef(false)\n const triggered = shallowRef(false)\n const startAfterLoad = shallowRef(false)\n const state = shallowRef<'idle' | 'loading' | 'loaded' | 'error'>(props.autoplay ? 'loading' : 'idle')\n const duration = shallowRef(0)\n\n const fullscreenEnabled = toRef(() => !props.noFullscreen && !String(attrs.controlsList ?? '').includes('nofullscreen'))\n\n function onTimeupdate () {\n const { currentTime, duration } = videoRef.value!\n progress.value = duration === 0 ? 0 : 100 * currentTime / duration\n }\n\n async function onTriggered () {\n await nextTick()\n if (!videoRef.value) return\n videoRef.value.addEventListener('timeupdate', onTimeupdate)\n videoRef.value.volume = volume.value / 100\n if (state.value !== 'loaded') {\n state.value = 'loading'\n }\n }\n\n function onVideoLoaded () {\n state.value = 'loaded'\n duration.value = videoRef.value!.duration\n\n const startTime = Number(props.startAt ?? 0)\n if (startTime && startTime <= duration.value) {\n videoRef.value!.currentTime = startTime\n progress.value = duration.value === 0 ? 0 : 100 * startTime / duration.value\n }\n\n if (startAfterLoad.value) {\n setTimeout(() => playing.value = true, 100)\n }\n\n emit('loaded', videoRef.value!)\n }\n\n function onClick () {\n if (state.value !== 'loaded') {\n triggered.value = true\n startAfterLoad.value = !startAfterLoad.value\n }\n }\n\n function onKeydown (e: KeyboardEvent) {\n if (!videoRef.value || e.ctrlKey) return\n if (e.key.startsWith('Arrow')) {\n e.preventDefault()\n }\n switch (true) {\n case e.key === ' ': {\n if (!['A', 'BUTTON'].includes((e.target as Element)?.tagName)) {\n e.preventDefault()\n playing.value = !playing.value\n }\n break\n }\n case e.key === 'ArrowRight': {\n const step = 10 * (e.shiftKey ? 6 : 1)\n videoRef.value.currentTime = Math.min(videoRef.value.currentTime + step, duration.value)\n // TODO: show skip indicator\n break\n }\n case e.key === 'ArrowLeft': {\n const step = 10 * (e.shiftKey ? 6 : 1)\n videoRef.value.currentTime = Math.max(videoRef.value.currentTime - step, 0)\n // TODO: show skip indicator\n break\n }\n case createRange(10).map(String).includes(e.key): {\n skipTo(Number(e.key) * 10)\n break\n }\n case e.key === 'ArrowUp': {\n volume.value = Math.min(volume.value + 10, 100)\n // TODO: show volume change indicator\n break\n }\n case e.key === 'ArrowDown': {\n volume.value = Math.max(volume.value - 10, 0)\n // TODO: show volume change indicator\n break\n }\n case e.key === 'm': {\n controlsRef.value?.toggleMuted()\n break\n }\n case e.key === 'f': {\n toggleFullscreen()\n break\n }\n }\n }\n\n function skipTo (v: number) {\n if (!videoRef.value) return\n progress.value = v\n videoRef.value.currentTime = duration.value * v / 100\n }\n\n watch(() => props.src, v => {\n progress.value = 0\n })\n\n watch(playing, v => {\n if (!videoRef.value) return\n if (v) {\n videoRef.value.play()\n } else {\n videoRef.value.pause()\n }\n })\n\n watch(volume, v => {\n if (!videoRef.value) return\n videoRef.value.volume = v / 100\n })\n\n watch(triggered, () => onTriggered(), { once: true })\n\n watch(() => props.eager, v => v && (triggered.value = true), { immediate: true })\n\n onMounted(() => {\n if (props.autoplay && !ssr) {\n triggered.value = true\n startAfterLoad.value = true\n }\n })\n\n onBeforeUnmount(() => {\n videoRef.value?.removeEventListener('timeupdate', onTimeupdate)\n })\n\n function focusSlider () {\n const container = videoRef.value?.closest('.v-video') as HTMLElement\n const innerSlider = container?.querySelector('[role=\"slider\"]') as HTMLElement\n innerSlider?.focus()\n }\n\n function fullscreenExitShortcut (e: KeyboardEvent) {\n if (['ESC', 'f'].includes(e.key)) {\n toggleFullscreen()\n document.body.removeEventListener('keydown', fullscreenExitShortcut)\n }\n }\n\n async function toggleFullscreen () {\n if (!fullscreenEnabled.value || !document.fullscreenEnabled) {\n return\n }\n if (document.fullscreenElement) {\n document.exitFullscreen()\n onFullscreenExit()\n } else {\n await containerRef.value?.requestFullscreen()\n document.body.addEventListener('keydown', fullscreenExitShortcut)\n document.addEventListener('fullscreenchange', onFullscreenExit)\n fullscreen.value = true\n }\n }\n\n function onFullscreenExit () {\n // event fires with a delay after requestFullscreen(), ignore first run\n if (document.fullscreenElement) return\n\n focusSlider()\n fullscreen.value = false\n document.body.removeEventListener('keydown', fullscreenExitShortcut)\n document.removeEventListener('fullscreenchange', onFullscreenExit)\n }\n\n function onVideoClick (e: Event) {\n e.preventDefault()\n if (state.value === 'loaded') {\n playing.value = !playing.value\n focusSlider()\n }\n }\n\n function onDoubleClick (e: Event) {\n e.preventDefault()\n toggleFullscreen()\n }\n\n let lastTap = 0\n function onTouchend (e: Event) {\n const now = performance.now()\n if ((now - lastTap) < 500) {\n e.preventDefault()\n toggleFullscreen()\n } else {\n lastTap = now\n }\n }\n\n useRender(() => {\n const showControls = state.value === 'loaded' &&\n props.variant === 'player' &&\n props.controlsVariant !== 'hidden'\n\n const posterTransition = props.variant === 'background'\n ? 'poster-fade-out'\n : 'fade-transition'\n\n const overlayProps = {\n contained: true,\n persistent: true,\n contentClass: 'v-video__overlay-fill',\n }\n\n const controlsProps = {\n ...VVideoControls.filterProps(omit(props, ['variant', 'rounded', 'hideVolume'])),\n rounded: Array.isArray(props.rounded) ? props.rounded.at(-1) : props.rounded,\n fullscreen: fullscreen.value,\n hideVolume: props.hideVolume || props.muted,\n hideFullscreen: props.hideFullscreen || !fullscreenEnabled.value,\n density: props.density,\n variant: props.controlsVariant,\n playing: playing.value,\n progress: progress.value,\n duration: duration.value,\n volume: volume.value,\n ...props.controlsProps,\n }\n\n const controlsEventHandlers = {\n onSkip: (v: number) => skipTo(v),\n 'onClick:fullscreen': () => toggleFullscreen(),\n 'onUpdate:playing': (v: boolean) => playing.value = v,\n 'onUpdate:progress': (v: number) => skipTo(v),\n 'onUpdate:volume': (v: number) => volume.value = v,\n onClick: (e: Event) => e.stopPropagation(),\n }\n\n const controlslist = [\n attrs.controlslist,\n props.noFullscreen ? 'nofullscreen' : '',\n ].filter(Boolean).join(' ')\n\n const loadingIndicator = (\n <VProgressCircular\n indeterminate\n color={ props.color }\n width=\"3\"\n size={ Math.min(100, Number(props.height) / 2 || 50) }\n />\n )\n\n const overlayPlayIcon = (\n <VIconBtn\n icon=\"$play\"\n size=\"80\"\n color=\"#fff\"\n variant=\"outlined\"\n iconSize=\"50\"\n class=\"v-video__center-icon\"\n />\n )\n\n return (\n <div\n ref={ containerRef }\n class={[\n 'v-video',\n `v-video--variant-${props.variant}`,\n `v-video--${state.value}`,\n { 'v-video--playing': playing.value },\n themeClasses.value,\n densityClasses.value,\n roundedContainerClasses.value,\n props.class,\n ]}\n style={[\n { '--v-video-aspect-ratio': props.aspectRatio },\n props.variant === 'background' ? [] : pick(dimensionStyles.value, ['width', 'minWidth', 'maxWidth']),\n props.style,\n ]}\n onKeydown={ onKeydown }\n onClick={ onClick }\n >\n <div\n class={[\n 'v-video__content',\n elevationClasses.value,\n ]}\n style={[\n props.variant === 'background' ? [] : dimensionStyles.value,\n ]}\n >\n { (props.eager || triggered.value) && (\n <video\n key=\"video-element\"\n class={[\n 'v-video__video',\n roundedContainerClasses.value,\n ]}\n { ...omit(attrs, ['controlslist', 'class', 'style']) }\n controlslist={ controlslist }\n autoplay={ props.autoplay }\n muted={ props.muted }\n playsinline\n ref={ videoRef }\n onLoadeddata={ onVideoLoaded }\n onPlay={ () => playing.value = true }\n onPause={ () => playing.value = false }\n onWaiting={ () => waiting.value = true }\n onPlaying={ () => waiting.value = false }\n onClick={ onVideoClick }\n onDblclick={ onDoubleClick }\n onTouchend={ onTouchend }\n >\n { slots.sources?.() ?? <source src={ props.src } type={ props.type } /> }\n </video>\n )}\n { props.variant === 'player' && !props.hideOverlay && (\n <VOverlay\n key=\"pause-overlay\"\n modelValue={ state.value === 'loaded' }\n opacity=\"0\"\n { ...overlayProps }\n >\n <VSpacer />\n <MaybeTransition name=\"fade-transition\">\n { !playing.value && overlayPlayIcon }\n </MaybeTransition>\n <VSpacer />\n </VOverlay>\n )}\n { props.variant === 'player' && !!slots.header\n ? (\n <div key=\"header\" class=\"v-video__header\">\n { slots.header() }\n </div>\n )\n : '' }\n <VOverlay\n key=\"poster-overlay\"\n modelValue={ state.value !== 'loaded' }\n transition={ posterTransition }\n { ...overlayProps }\n >\n <VImg cover src={ props.image }>\n <div\n class={[\n 'v-video__overlay-fill',\n ...roundedContainerClasses.value,\n ]}\n >\n { props.variant === 'player' && overlayPlayIcon }\n </div>\n </VImg>\n </VOverlay>\n { props.variant === 'player' && (\n <VOverlay\n key=\"loading-overlay\"\n modelValue={ state.value === 'loading' || waiting.value }\n opacity=\".1\"\n { ...overlayProps }\n >\n { loadingIndicator }\n </VOverlay>\n )}\n </div>\n <MaybeTransition key=\"actions\" transition={ props.controlsTransition }>\n { showControls && (\n <VVideoControls\n ref={ controlsRef }\n class={ roundedControlsClasses.value }\n { ...controlsProps }\n { ...controlsEventHandlers }\n >\n {{\n default: slots.controls,\n prepend: slots.prepend,\n append: slots.append,\n }}\n </VVideoControls>\n )}\n </MaybeTransition>\n </div>\n )\n })\n\n return {\n video: videoRef,\n ...forwardRefs({\n skipTo,\n toggleFullscreen,\n }, controlsRef),\n }\n },\n})\n\nexport type VVideo = InstanceType<typeof VVideo>\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
flex-direction: column
|
|
9
9
|
align-items: center
|
|
10
10
|
position: relative
|
|
11
|
+
--v-video-aspect-ratio: #{$video-aspect-ratio}
|
|
11
12
|
--v-video-controls-height: #{$video-controls-height}
|
|
12
13
|
--v-video-controls-pill-border-radius: #{$video-controls-pill-border-radius}
|
|
13
14
|
|
|
@@ -137,13 +138,12 @@
|
|
|
137
138
|
|
|
138
139
|
> .v-video__content
|
|
139
140
|
width: 100%
|
|
140
|
-
|
|
141
|
+
aspect-ratio: var(--v-video-aspect-ratio)
|
|
141
142
|
|
|
142
143
|
&--variant-background
|
|
143
144
|
outline: none
|
|
144
145
|
position: absolute
|
|
145
146
|
pointer-events: none
|
|
146
|
-
width: 100%
|
|
147
147
|
height: 100%
|
|
148
148
|
|
|
149
149
|
> .v-video__content
|
|
@@ -178,6 +178,8 @@
|
|
|
178
178
|
&, &--pills > .v-video-control__pill
|
|
179
179
|
transition: .6s ease-in-out
|
|
180
180
|
transition-property: opacity, background-color
|
|
181
|
+
|
|
182
|
+
&--pills > .v-video-control__pill
|
|
181
183
|
@include tools.elevation($video-elevation)
|
|
182
184
|
|
|
183
185
|
&:hover
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Fragment as _Fragment, createVNode as _createVNode, withDirectives as _withDirectives, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, mergeProps as _mergeProps
|
|
1
|
+
import { Fragment as _Fragment, createVNode as _createVNode, withDirectives as _withDirectives, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, mergeProps as _mergeProps } from "vue";
|
|
2
2
|
/* eslint-disable complexity */
|
|
3
3
|
// Components
|
|
4
4
|
import { VVideoVolume } from "./VVideoVolume.js";
|
|
@@ -6,14 +6,14 @@ import { VDefaultsProvider } from "../../components/VDefaultsProvider/VDefaultsP
|
|
|
6
6
|
import { VSpacer } from "../../components/VGrid/VSpacer.js";
|
|
7
7
|
import { VSlider } from "../../components/VSlider/VSlider.js";
|
|
8
8
|
import { VIconBtn } from "../VIconBtn/VIconBtn.js"; // Composables
|
|
9
|
-
import { useLocale } from "../../composables/index.js";
|
|
10
9
|
import { useBackgroundColor } from "../../composables/color.js";
|
|
11
10
|
import { makeDensityProps, useDensity } from "../../composables/density.js";
|
|
12
11
|
import { makeElevationProps, useElevation } from "../../composables/elevation.js";
|
|
12
|
+
import { useLocale } from "../../composables/locale.js";
|
|
13
13
|
import { useProxiedModel } from "../../composables/proxiedModel.js";
|
|
14
14
|
import { makeThemeProps, provideTheme } from "../../composables/theme.js"; // Directives
|
|
15
15
|
import vTooltip from "../../directives/tooltip/index.js"; // Utilities
|
|
16
|
-
import { computed, shallowRef } from 'vue';
|
|
16
|
+
import { computed, shallowRef, toRef } from 'vue';
|
|
17
17
|
import { formatTime, genericComponent, propsFactory, useRender } from "../../util/index.js"; // Types
|
|
18
18
|
const allowedVariants = ['hidden', 'default', 'tube', 'mini'];
|
|
19
19
|
export const makeVVideoControlsProps = propsFactory({
|
|
@@ -70,7 +70,8 @@ export const VVideoControls = genericComponent()({
|
|
|
70
70
|
t
|
|
71
71
|
} = useLocale();
|
|
72
72
|
const {
|
|
73
|
-
themeClasses
|
|
73
|
+
themeClasses,
|
|
74
|
+
current: currentTheme
|
|
74
75
|
} = provideTheme(props);
|
|
75
76
|
const {
|
|
76
77
|
densityClasses
|
|
@@ -85,6 +86,13 @@ export const VVideoControls = genericComponent()({
|
|
|
85
86
|
const fallbackBackground = props.detached ? 'surface' : undefined;
|
|
86
87
|
return props.backgroundColor ?? fallbackBackground;
|
|
87
88
|
});
|
|
89
|
+
const trackColor = toRef(() => {
|
|
90
|
+
if (props.trackColor) {
|
|
91
|
+
return props.trackColor;
|
|
92
|
+
}
|
|
93
|
+
const fallback = currentTheme.value.dark || !props.pills ? undefined : 'surface';
|
|
94
|
+
return (props.pills ? props.backgroundColor : props.color) ?? fallback;
|
|
95
|
+
});
|
|
88
96
|
const playing = useProxiedModel(props, 'playing');
|
|
89
97
|
const progress = useProxiedModel(props, 'progress');
|
|
90
98
|
const volume = useProxiedModel(props, 'volume', 0, v => Number(v ?? 0));
|
|
@@ -145,7 +153,8 @@ export const VVideoControls = genericComponent()({
|
|
|
145
153
|
};
|
|
146
154
|
const regularBtnSize = innerDefaults.VIconBtn.size;
|
|
147
155
|
const playBtnSize = props.pills ? regularBtnSize + 8 : regularBtnSize;
|
|
148
|
-
const pillClasses = ['v-video-control__pill', props.pills ? elevationClasses.value : []];
|
|
156
|
+
const pillClasses = ['v-video-control__pill', props.pills ? elevationClasses.value : [], props.pills ? backgroundColorClasses.value : []];
|
|
157
|
+
const pillStyles = props.pills ? backgroundColorStyles.value : [];
|
|
149
158
|
const slotProps = {
|
|
150
159
|
play,
|
|
151
160
|
pause,
|
|
@@ -168,30 +177,34 @@ export const VVideoControls = genericComponent()({
|
|
|
168
177
|
'v-video-controls--floating': props.floating
|
|
169
178
|
}, {
|
|
170
179
|
'v-video-controls--split-time': props.splitTime
|
|
171
|
-
}, backgroundColorClasses.value, props.detached && !props.pills ? elevationClasses.value : [], densityClasses.value, themeClasses.value]),
|
|
172
|
-
"style": _normalizeStyle([backgroundColorStyles.value, {
|
|
180
|
+
}, !props.pills ? backgroundColorClasses.value : [], props.detached && !props.pills ? elevationClasses.value : [], densityClasses.value, themeClasses.value]),
|
|
181
|
+
"style": _normalizeStyle([!props.pills ? backgroundColorStyles.value : [], {
|
|
173
182
|
'--v-video-controls-pill-height': `${regularBtnSize}px`
|
|
174
183
|
}])
|
|
175
184
|
}, [_createVNode(VDefaultsProvider, {
|
|
176
185
|
"defaults": innerDefaults
|
|
177
186
|
}, {
|
|
178
187
|
default: () => [slots.default?.(slotProps) ?? _createElementVNode(_Fragment, null, [props.variant !== 'mini' && _createElementVNode(_Fragment, null, [!props.hidePlay && _createElementVNode("div", {
|
|
179
|
-
"class": _normalizeClass([pillClasses, 'v-video__action-play'])
|
|
188
|
+
"class": _normalizeClass([pillClasses, 'v-video__action-play']),
|
|
189
|
+
"style": _normalizeStyle(pillStyles)
|
|
180
190
|
}, [_withDirectives(_createVNode(VIconBtn, {
|
|
181
191
|
"icon": playing.value ? '$pause' : '$play',
|
|
182
192
|
"size": playBtnSize,
|
|
183
193
|
"aria-label": labels.value.playAction,
|
|
184
194
|
"onClick": () => playing.value = !playing.value
|
|
185
195
|
}, null), [[vTooltip, labels.value.playAction, 'top']])]), slots.prepend && _createElementVNode("div", {
|
|
186
|
-
"class": _normalizeClass(pillClasses)
|
|
196
|
+
"class": _normalizeClass(pillClasses),
|
|
197
|
+
"style": _normalizeStyle(pillStyles)
|
|
187
198
|
}, [slots.prepend(slotProps)]), props.splitTime ? _createElementVNode("span", {
|
|
188
|
-
"class": _normalizeClass([pillClasses, 'v-video__time'])
|
|
199
|
+
"class": _normalizeClass([pillClasses, 'v-video__time']),
|
|
200
|
+
"style": _normalizeStyle(pillStyles)
|
|
189
201
|
}, [currentTime.value.elapsed]) : props.variant !== 'default' ? _createElementVNode("span", {
|
|
190
|
-
"class": _normalizeClass([pillClasses, 'v-video__time'])
|
|
202
|
+
"class": _normalizeClass([pillClasses, 'v-video__time']),
|
|
203
|
+
"style": _normalizeStyle(pillStyles)
|
|
191
204
|
}, [currentTime.value.elapsed, _createTextVNode(" / "), currentTime.value.total]) : '', _createVNode(VSlider, {
|
|
192
205
|
"modelValue": props.progress,
|
|
193
206
|
"noKeyboard": true,
|
|
194
|
-
"color":
|
|
207
|
+
"color": trackColor.value ?? 'surface-variant',
|
|
195
208
|
"trackColor": props.variant === 'tube' ? 'white' : undefined,
|
|
196
209
|
"class": "v-video__track",
|
|
197
210
|
"thumbLabel": "always",
|
|
@@ -200,18 +213,22 @@ export const VVideoControls = genericComponent()({
|
|
|
200
213
|
}, {
|
|
201
214
|
'thumb-label': () => currentTime.value.elapsed
|
|
202
215
|
}), props.variant === 'tube' && _createVNode(VSpacer, null, null), props.splitTime ? _createElementVNode("span", {
|
|
203
|
-
"class": _normalizeClass([pillClasses, 'v-video__time'])
|
|
216
|
+
"class": _normalizeClass([pillClasses, 'v-video__time']),
|
|
217
|
+
"style": _normalizeStyle(pillStyles)
|
|
204
218
|
}, [currentTime.value.remaining]) : '']), props.variant === 'mini' && _createElementVNode(_Fragment, null, [_createVNode(VSpacer, null, null), slots.prepend && _createElementVNode("div", {
|
|
205
|
-
"class": _normalizeClass(pillClasses)
|
|
219
|
+
"class": _normalizeClass(pillClasses),
|
|
220
|
+
"style": _normalizeStyle(pillStyles)
|
|
206
221
|
}, [slots.prepend(slotProps)]), !props.hidePlay && _createElementVNode("div", {
|
|
207
|
-
"class": _normalizeClass([pillClasses, 'v-video__action-play'])
|
|
222
|
+
"class": _normalizeClass([pillClasses, 'v-video__action-play']),
|
|
223
|
+
"style": _normalizeStyle(pillStyles)
|
|
208
224
|
}, [_withDirectives(_createVNode(VIconBtn, {
|
|
209
225
|
"icon": playing.value ? '$pause' : '$play',
|
|
210
226
|
"size": playBtnSize,
|
|
211
227
|
"aria-label": labels.value.playAction,
|
|
212
228
|
"onClick": () => playing.value = !playing.value
|
|
213
229
|
}, null), [[vTooltip, labels.value.playAction, 'top']])])]), (!props.hideVolume || !props.hideFullscreen || slots.append) && _createElementVNode("div", {
|
|
214
|
-
"class": _normalizeClass(pillClasses)
|
|
230
|
+
"class": _normalizeClass(pillClasses),
|
|
231
|
+
"style": _normalizeStyle(pillStyles)
|
|
215
232
|
}, [!props.hideVolume && _createVNode(VVideoVolume, _mergeProps({
|
|
216
233
|
"key": "volume-control",
|
|
217
234
|
"sliderProps": {
|