@vuetify/nightly 3.9.2-master.2025-07-29 → 3.9.3-master.2025-07-30

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.
Files changed (40) hide show
  1. package/CHANGELOG.md +9 -62
  2. package/dist/json/attributes.json +3905 -3905
  3. package/dist/json/importMap-labs.json +18 -18
  4. package/dist/json/importMap.json +134 -134
  5. package/dist/json/web-types.json +7077 -7077
  6. package/dist/vuetify-labs.cjs +47 -24
  7. package/dist/vuetify-labs.css +3395 -3387
  8. package/dist/vuetify-labs.d.ts +48 -47
  9. package/dist/vuetify-labs.esm.js +47 -24
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +47 -24
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.cjs +15 -9
  14. package/dist/vuetify.cjs.map +1 -1
  15. package/dist/vuetify.css +2289 -2281
  16. package/dist/vuetify.d.ts +48 -47
  17. package/dist/vuetify.esm.js +15 -9
  18. package/dist/vuetify.esm.js.map +1 -1
  19. package/dist/vuetify.js +15 -9
  20. package/dist/vuetify.js.map +1 -1
  21. package/dist/vuetify.min.css +2 -2
  22. package/dist/vuetify.min.js +13 -12
  23. package/dist/vuetify.min.js.map +1 -1
  24. package/lib/components/VCombobox/VCombobox.js +10 -6
  25. package/lib/components/VCombobox/VCombobox.js.map +1 -1
  26. package/lib/components/VWindow/VWindow.css +8 -0
  27. package/lib/components/VWindow/VWindow.sass +9 -0
  28. package/lib/composables/theme.d.ts +1 -0
  29. package/lib/composables/theme.js +3 -1
  30. package/lib/composables/theme.js.map +1 -1
  31. package/lib/entry-bundler.js +1 -1
  32. package/lib/framework.d.ts +48 -47
  33. package/lib/framework.js +1 -1
  34. package/lib/labs/VVideo/VVideo.css +1 -1
  35. package/lib/labs/VVideo/VVideo.js +2 -2
  36. package/lib/labs/VVideo/VVideo.js.map +1 -1
  37. package/lib/labs/VVideo/VVideo.sass +2 -0
  38. package/lib/labs/VVideo/VVideoControls.js +32 -15
  39. package/lib/labs/VVideo/VVideoControls.js.map +1 -1
  40. package/package.json +1 -1
@@ -110,6 +110,7 @@ interface ThemeInstance {
110
110
  cycle: (themeArray?: string[]) => void;
111
111
  toggle: (themeArray?: [string, string]) => void;
112
112
  readonly isDisabled: boolean;
113
+ readonly isSystem: Readonly<Ref<boolean>>;
113
114
  readonly themes: Ref<Record<string, InternalThemeDefinition>>;
114
115
  readonly name: Readonly<Ref<string>>;
115
116
  readonly current: DeepReadonly<Ref<InternalThemeDefinition>>;
@@ -2607,38 +2608,38 @@ declare module 'vue' {
2607
2608
  VApp: typeof import('vuetify/components')['VApp']
2608
2609
  VAlert: typeof import('vuetify/components')['VAlert']
2609
2610
  VAlertTitle: typeof import('vuetify/components')['VAlertTitle']
2610
- VAvatar: typeof import('vuetify/components')['VAvatar']
2611
2611
  VAppBar: typeof import('vuetify/components')['VAppBar']
2612
2612
  VAppBarNavIcon: typeof import('vuetify/components')['VAppBarNavIcon']
2613
2613
  VAppBarTitle: typeof import('vuetify/components')['VAppBarTitle']
2614
2614
  VAutocomplete: typeof import('vuetify/components')['VAutocomplete']
2615
+ VBottomNavigation: typeof import('vuetify/components')['VBottomNavigation']
2616
+ VAvatar: typeof import('vuetify/components')['VAvatar']
2615
2617
  VBadge: typeof import('vuetify/components')['VBadge']
2618
+ VBottomSheet: typeof import('vuetify/components')['VBottomSheet']
2616
2619
  VBanner: typeof import('vuetify/components')['VBanner']
2617
2620
  VBannerActions: typeof import('vuetify/components')['VBannerActions']
2618
2621
  VBannerText: typeof import('vuetify/components')['VBannerText']
2619
- VBottomNavigation: typeof import('vuetify/components')['VBottomNavigation']
2620
- VBottomSheet: typeof import('vuetify/components')['VBottomSheet']
2621
- VBtnGroup: typeof import('vuetify/components')['VBtnGroup']
2622
- VBtn: typeof import('vuetify/components')['VBtn']
2623
- VCheckbox: typeof import('vuetify/components')['VCheckbox']
2624
- VCheckboxBtn: typeof import('vuetify/components')['VCheckboxBtn']
2625
2622
  VBtnToggle: typeof import('vuetify/components')['VBtnToggle']
2626
2623
  VBreadcrumbs: typeof import('vuetify/components')['VBreadcrumbs']
2627
2624
  VBreadcrumbsItem: typeof import('vuetify/components')['VBreadcrumbsItem']
2628
2625
  VBreadcrumbsDivider: typeof import('vuetify/components')['VBreadcrumbsDivider']
2626
+ VBtn: typeof import('vuetify/components')['VBtn']
2627
+ VBtnGroup: typeof import('vuetify/components')['VBtnGroup']
2629
2628
  VCarousel: typeof import('vuetify/components')['VCarousel']
2630
2629
  VCarouselItem: typeof import('vuetify/components')['VCarouselItem']
2631
- VChipGroup: typeof import('vuetify/components')['VChipGroup']
2632
- VCode: typeof import('vuetify/components')['VCode']
2633
2630
  VChip: typeof import('vuetify/components')['VChip']
2634
- VCombobox: typeof import('vuetify/components')['VCombobox']
2631
+ VCheckbox: typeof import('vuetify/components')['VCheckbox']
2632
+ VCheckboxBtn: typeof import('vuetify/components')['VCheckboxBtn']
2635
2633
  VCard: typeof import('vuetify/components')['VCard']
2636
2634
  VCardActions: typeof import('vuetify/components')['VCardActions']
2637
2635
  VCardItem: typeof import('vuetify/components')['VCardItem']
2638
2636
  VCardSubtitle: typeof import('vuetify/components')['VCardSubtitle']
2639
2637
  VCardText: typeof import('vuetify/components')['VCardText']
2640
2638
  VCardTitle: typeof import('vuetify/components')['VCardTitle']
2639
+ VChipGroup: typeof import('vuetify/components')['VChipGroup']
2640
+ VCode: typeof import('vuetify/components')['VCode']
2641
2641
  VColorPicker: typeof import('vuetify/components')['VColorPicker']
2642
+ VCombobox: typeof import('vuetify/components')['VCombobox']
2642
2643
  VCounter: typeof import('vuetify/components')['VCounter']
2643
2644
  VDataTable: typeof import('vuetify/components')['VDataTable']
2644
2645
  VDataTableHeaders: typeof import('vuetify/components')['VDataTableHeaders']
@@ -2654,29 +2655,29 @@ declare module 'vue' {
2654
2655
  VDatePickerMonth: typeof import('vuetify/components')['VDatePickerMonth']
2655
2656
  VDatePickerMonths: typeof import('vuetify/components')['VDatePickerMonths']
2656
2657
  VDatePickerYears: typeof import('vuetify/components')['VDatePickerYears']
2658
+ VDivider: typeof import('vuetify/components')['VDivider']
2659
+ VEmptyState: typeof import('vuetify/components')['VEmptyState']
2657
2660
  VExpansionPanels: typeof import('vuetify/components')['VExpansionPanels']
2658
2661
  VExpansionPanel: typeof import('vuetify/components')['VExpansionPanel']
2659
2662
  VExpansionPanelText: typeof import('vuetify/components')['VExpansionPanelText']
2660
2663
  VExpansionPanelTitle: typeof import('vuetify/components')['VExpansionPanelTitle']
2664
+ VFileInput: typeof import('vuetify/components')['VFileInput']
2661
2665
  VFab: typeof import('vuetify/components')['VFab']
2662
- VDivider: typeof import('vuetify/components')['VDivider']
2663
- VEmptyState: typeof import('vuetify/components')['VEmptyState']
2666
+ VFooter: typeof import('vuetify/components')['VFooter']
2664
2667
  VField: typeof import('vuetify/components')['VField']
2665
2668
  VFieldLabel: typeof import('vuetify/components')['VFieldLabel']
2666
- VFileInput: typeof import('vuetify/components')['VFileInput']
2667
- VImg: typeof import('vuetify/components')['VImg']
2668
2669
  VIcon: typeof import('vuetify/components')['VIcon']
2669
2670
  VComponentIcon: typeof import('vuetify/components')['VComponentIcon']
2670
2671
  VSvgIcon: typeof import('vuetify/components')['VSvgIcon']
2671
2672
  VLigatureIcon: typeof import('vuetify/components')['VLigatureIcon']
2672
2673
  VClassIcon: typeof import('vuetify/components')['VClassIcon']
2673
- VInput: typeof import('vuetify/components')['VInput']
2674
- VKbd: typeof import('vuetify/components')['VKbd']
2675
- VInfiniteScroll: typeof import('vuetify/components')['VInfiniteScroll']
2676
2674
  VItemGroup: typeof import('vuetify/components')['VItemGroup']
2677
2675
  VItem: typeof import('vuetify/components')['VItem']
2676
+ VInfiniteScroll: typeof import('vuetify/components')['VInfiniteScroll']
2677
+ VImg: typeof import('vuetify/components')['VImg']
2678
+ VInput: typeof import('vuetify/components')['VInput']
2679
+ VKbd: typeof import('vuetify/components')['VKbd']
2678
2680
  VLabel: typeof import('vuetify/components')['VLabel']
2679
- VMessages: typeof import('vuetify/components')['VMessages']
2680
2681
  VList: typeof import('vuetify/components')['VList']
2681
2682
  VListGroup: typeof import('vuetify/components')['VListGroup']
2682
2683
  VListImg: typeof import('vuetify/components')['VListImg']
@@ -2686,71 +2687,75 @@ declare module 'vue' {
2686
2687
  VListItemSubtitle: typeof import('vuetify/components')['VListItemSubtitle']
2687
2688
  VListItemTitle: typeof import('vuetify/components')['VListItemTitle']
2688
2689
  VListSubheader: typeof import('vuetify/components')['VListSubheader']
2689
- VMenu: typeof import('vuetify/components')['VMenu']
2690
- VNavigationDrawer: typeof import('vuetify/components')['VNavigationDrawer']
2691
2690
  VMain: typeof import('vuetify/components')['VMain']
2692
- VNumberInput: typeof import('vuetify/components')['VNumberInput']
2691
+ VMessages: typeof import('vuetify/components')['VMessages']
2692
+ VNavigationDrawer: typeof import('vuetify/components')['VNavigationDrawer']
2693
2693
  VOtpInput: typeof import('vuetify/components')['VOtpInput']
2694
+ VNumberInput: typeof import('vuetify/components')['VNumberInput']
2695
+ VMenu: typeof import('vuetify/components')['VMenu']
2696
+ VProgressLinear: typeof import('vuetify/components')['VProgressLinear']
2694
2697
  VOverlay: typeof import('vuetify/components')['VOverlay']
2695
2698
  VPagination: typeof import('vuetify/components')['VPagination']
2696
2699
  VProgressCircular: typeof import('vuetify/components')['VProgressCircular']
2697
- VProgressLinear: typeof import('vuetify/components')['VProgressLinear']
2698
- VRadioGroup: typeof import('vuetify/components')['VRadioGroup']
2699
2700
  VRating: typeof import('vuetify/components')['VRating']
2700
- VSelectionControl: typeof import('vuetify/components')['VSelectionControl']
2701
+ VRadioGroup: typeof import('vuetify/components')['VRadioGroup']
2701
2702
  VSelect: typeof import('vuetify/components')['VSelect']
2702
2703
  VSheet: typeof import('vuetify/components')['VSheet']
2703
- VSelectionControlGroup: typeof import('vuetify/components')['VSelectionControlGroup']
2704
+ VSlider: typeof import('vuetify/components')['VSlider']
2704
2705
  VSkeletonLoader: typeof import('vuetify/components')['VSkeletonLoader']
2706
+ VSelectionControlGroup: typeof import('vuetify/components')['VSelectionControlGroup']
2705
2707
  VSlideGroup: typeof import('vuetify/components')['VSlideGroup']
2706
2708
  VSlideGroupItem: typeof import('vuetify/components')['VSlideGroupItem']
2707
- VSlider: typeof import('vuetify/components')['VSlider']
2708
- VSnackbar: typeof import('vuetify/components')['VSnackbar']
2709
+ VSelectionControl: typeof import('vuetify/components')['VSelectionControl']
2709
2710
  VStepper: typeof import('vuetify/components')['VStepper']
2710
2711
  VStepperActions: typeof import('vuetify/components')['VStepperActions']
2711
2712
  VStepperHeader: typeof import('vuetify/components')['VStepperHeader']
2712
2713
  VStepperItem: typeof import('vuetify/components')['VStepperItem']
2713
2714
  VStepperWindow: typeof import('vuetify/components')['VStepperWindow']
2714
2715
  VStepperWindowItem: typeof import('vuetify/components')['VStepperWindowItem']
2716
+ VSnackbar: typeof import('vuetify/components')['VSnackbar']
2715
2717
  VSwitch: typeof import('vuetify/components')['VSwitch']
2718
+ VTable: typeof import('vuetify/components')['VTable']
2716
2719
  VSystemBar: typeof import('vuetify/components')['VSystemBar']
2717
- VTextField: typeof import('vuetify/components')['VTextField']
2718
- VTextarea: typeof import('vuetify/components')['VTextarea']
2719
2720
  VTab: typeof import('vuetify/components')['VTab']
2720
2721
  VTabs: typeof import('vuetify/components')['VTabs']
2721
2722
  VTabsWindow: typeof import('vuetify/components')['VTabsWindow']
2722
2723
  VTabsWindowItem: typeof import('vuetify/components')['VTabsWindowItem']
2723
- VTable: typeof import('vuetify/components')['VTable']
2724
- VToolbar: typeof import('vuetify/components')['VToolbar']
2725
- VToolbarTitle: typeof import('vuetify/components')['VToolbarTitle']
2726
- VToolbarItems: typeof import('vuetify/components')['VToolbarItems']
2724
+ VTextField: typeof import('vuetify/components')['VTextField']
2725
+ VTextarea: typeof import('vuetify/components')['VTextarea']
2726
+ VTimeline: typeof import('vuetify/components')['VTimeline']
2727
+ VTimelineItem: typeof import('vuetify/components')['VTimelineItem']
2727
2728
  VTimePicker: typeof import('vuetify/components')['VTimePicker']
2728
2729
  VTimePickerClock: typeof import('vuetify/components')['VTimePickerClock']
2729
2730
  VTimePickerControls: typeof import('vuetify/components')['VTimePickerControls']
2730
- VTreeview: typeof import('vuetify/components')['VTreeview']
2731
- VTreeviewItem: typeof import('vuetify/components')['VTreeviewItem']
2732
- VTreeviewGroup: typeof import('vuetify/components')['VTreeviewGroup']
2731
+ VToolbar: typeof import('vuetify/components')['VToolbar']
2732
+ VToolbarTitle: typeof import('vuetify/components')['VToolbarTitle']
2733
+ VToolbarItems: typeof import('vuetify/components')['VToolbarItems']
2733
2734
  VTooltip: typeof import('vuetify/components')['VTooltip']
2734
2735
  VWindow: typeof import('vuetify/components')['VWindow']
2735
2736
  VWindowItem: typeof import('vuetify/components')['VWindowItem']
2737
+ VTreeview: typeof import('vuetify/components')['VTreeview']
2738
+ VTreeviewItem: typeof import('vuetify/components')['VTreeviewItem']
2739
+ VTreeviewGroup: typeof import('vuetify/components')['VTreeviewGroup']
2736
2740
  VConfirmEdit: typeof import('vuetify/components')['VConfirmEdit']
2737
2741
  VDataIterator: typeof import('vuetify/components')['VDataIterator']
2738
2742
  VDefaultsProvider: typeof import('vuetify/components')['VDefaultsProvider']
2739
2743
  VForm: typeof import('vuetify/components')['VForm']
2744
+ VHover: typeof import('vuetify/components')['VHover']
2740
2745
  VContainer: typeof import('vuetify/components')['VContainer']
2741
2746
  VCol: typeof import('vuetify/components')['VCol']
2742
2747
  VRow: typeof import('vuetify/components')['VRow']
2743
2748
  VSpacer: typeof import('vuetify/components')['VSpacer']
2744
- VHover: typeof import('vuetify/components')['VHover']
2745
2749
  VLayout: typeof import('vuetify/components')['VLayout']
2746
2750
  VLayoutItem: typeof import('vuetify/components')['VLayoutItem']
2747
2751
  VLazy: typeof import('vuetify/components')['VLazy']
2748
2752
  VLocaleProvider: typeof import('vuetify/components')['VLocaleProvider']
2749
2753
  VNoSsr: typeof import('vuetify/components')['VNoSsr']
2750
2754
  VParallax: typeof import('vuetify/components')['VParallax']
2751
- VRadio: typeof import('vuetify/components')['VRadio']
2752
2755
  VRangeSlider: typeof import('vuetify/components')['VRangeSlider']
2756
+ VRadio: typeof import('vuetify/components')['VRadio']
2753
2757
  VResponsive: typeof import('vuetify/components')['VResponsive']
2758
+ VSparkline: typeof import('vuetify/components')['VSparkline']
2754
2759
  VSpeedDial: typeof import('vuetify/components')['VSpeedDial']
2755
2760
  VThemeProvider: typeof import('vuetify/components')['VThemeProvider']
2756
2761
  VValidation: typeof import('vuetify/components')['VValidation']
@@ -2771,27 +2776,22 @@ declare module 'vue' {
2771
2776
  VExpandTransition: typeof import('vuetify/components')['VExpandTransition']
2772
2777
  VExpandXTransition: typeof import('vuetify/components')['VExpandXTransition']
2773
2778
  VDialogTransition: typeof import('vuetify/components')['VDialogTransition']
2774
- VFooter: typeof import('vuetify/components')['VFooter']
2775
- VSparkline: typeof import('vuetify/components')['VSparkline']
2776
2779
  VSnackbarQueue: typeof import('vuetify/components')['VSnackbarQueue']
2777
- VTimeline: typeof import('vuetify/components')['VTimeline']
2778
- VTimelineItem: typeof import('vuetify/components')['VTimelineItem']
2780
+ VColorInput: typeof import('vuetify/labs/components')['VColorInput']
2781
+ VFileUpload: typeof import('vuetify/labs/components')['VFileUpload']
2782
+ VFileUploadItem: typeof import('vuetify/labs/components')['VFileUploadItem']
2779
2783
  VCalendar: typeof import('vuetify/labs/components')['VCalendar']
2780
2784
  VCalendarDay: typeof import('vuetify/labs/components')['VCalendarDay']
2781
2785
  VCalendarHeader: typeof import('vuetify/labs/components')['VCalendarHeader']
2782
2786
  VCalendarInterval: typeof import('vuetify/labs/components')['VCalendarInterval']
2783
2787
  VCalendarIntervalEvent: typeof import('vuetify/labs/components')['VCalendarIntervalEvent']
2784
2788
  VCalendarMonthDay: typeof import('vuetify/labs/components')['VCalendarMonthDay']
2785
- VFileUpload: typeof import('vuetify/labs/components')['VFileUpload']
2786
- VFileUploadItem: typeof import('vuetify/labs/components')['VFileUploadItem']
2787
- VColorInput: typeof import('vuetify/labs/components')['VColorInput']
2789
+ VIconBtn: typeof import('vuetify/labs/components')['VIconBtn']
2788
2790
  VStepperVertical: typeof import('vuetify/labs/components')['VStepperVertical']
2789
2791
  VStepperVerticalItem: typeof import('vuetify/labs/components')['VStepperVerticalItem']
2790
2792
  VStepperVerticalActions: typeof import('vuetify/labs/components')['VStepperVerticalActions']
2791
2793
  VPicker: typeof import('vuetify/labs/components')['VPicker']
2792
2794
  VPickerTitle: typeof import('vuetify/labs/components')['VPickerTitle']
2793
- VIconBtn: typeof import('vuetify/labs/components')['VIconBtn']
2794
- VHotkey: typeof import('vuetify/labs/components')['VHotkey']
2795
2795
  VPie: typeof import('vuetify/labs/components')['VPie']
2796
2796
  VPieSegment: typeof import('vuetify/labs/components')['VPieSegment']
2797
2797
  VPieTooltip: typeof import('vuetify/labs/components')['VPieTooltip']
@@ -2801,6 +2801,7 @@ declare module 'vue' {
2801
2801
  VDateInput: typeof import('vuetify/labs/components')['VDateInput']
2802
2802
  VMaskInput: typeof import('vuetify/labs/components')['VMaskInput']
2803
2803
  VPullToRefresh: typeof import('vuetify/labs/components')['VPullToRefresh']
2804
+ VHotkey: typeof import('vuetify/labs/components')['VHotkey']
2804
2805
  }
2805
2806
  export interface GlobalDirectives {
2806
2807
  vClickOutside: typeof import('vuetify/directives')['ClickOutside']
package/lib/framework.js CHANGED
@@ -109,7 +109,7 @@ export function createVuetify() {
109
109
  };
110
110
  });
111
111
  }
112
- export const version = "3.9.2-master.2025-07-29";
112
+ export const version = "3.9.3-master.2025-07-30";
113
113
  createVuetify.version = version;
114
114
 
115
115
  // Vue's inject() can only be used in setup
@@ -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, .v-video-controls--pills > .v-video-control__pill {
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 {
@@ -390,9 +390,9 @@ export const VVideo = genericComponent()({
390
390
  }, {
391
391
  default: () => [_createElementVNode("div", {
392
392
  "class": _normalizeClass(['v-video__overlay-fill', ...roundedContainerClasses.value])
393
- }, [overlayPlayIcon])]
393
+ }, [props.variant === 'player' && overlayPlayIcon])]
394
394
  })]
395
- }), _createVNode(VOverlay, _mergeProps({
395
+ }), props.variant === 'player' && _createVNode(VOverlay, _mergeProps({
396
396
  "key": "loading-overlay",
397
397
  "modelValue": state.value === 'loading' || waiting.value,
398
398
  "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","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 { 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":[]}
@@ -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, normalizeStyle as _normalizeStyle } from "vue";
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";
@@ -13,7 +13,7 @@ import { makeElevationProps, useElevation } from "../../composables/elevation.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": props.trackColor ?? props.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": {