@byomakase/omakase-player 0.0.2
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/LICENSE +228 -0
- package/README.md +233 -0
- package/dist/api/api.d.ts +17 -0
- package/dist/api/audio-api.d.ts +24 -0
- package/dist/api/marker-lane-api.d.ts +33 -0
- package/dist/api/omakase-player-api.d.ts +38 -0
- package/dist/api/subtitles-api.d.ts +36 -0
- package/dist/api/timeline-api.d.ts +91 -0
- package/dist/api/video-api.d.ts +68 -0
- package/dist/audio/audio-controller.d.ts +32 -0
- package/dist/common/browser-provider.d.ts +34 -0
- package/dist/common/component.d.ts +56 -0
- package/dist/common/measurement.d.ts +41 -0
- package/dist/common/style-adapter.d.ts +27 -0
- package/dist/common/styles-provider.d.ts +33 -0
- package/dist/constants.d.ts +9 -0
- package/dist/dom/dom-controller.d.ts +53 -0
- package/dist/dom/fullscreen.d.ts +32 -0
- package/dist/events.d.ts +14 -0
- package/dist/http.d.ts +2 -0
- package/dist/images/help.svg +17 -0
- package/dist/images/loading.svg +29 -0
- package/dist/images/pause.svg +19 -0
- package/dist/images/play.svg +18 -0
- package/dist/images/replay.svg +23 -0
- package/dist/index.d.ts +3 -0
- package/dist/omakase-player.cjs.js +71 -0
- package/dist/omakase-player.cjs.js.map +1 -0
- package/dist/omakase-player.d.ts +51 -0
- package/dist/omakase-player.es.js +17439 -0
- package/dist/omakase-player.es.js.map +1 -0
- package/dist/omakase-player.umd.js +71 -0
- package/dist/omakase-player.umd.js.map +1 -0
- package/dist/style.css +1 -0
- package/dist/subtitles/subtitles-controller.d.ts +51 -0
- package/dist/timeline/audio-track/audio-track-lane-item.d.ts +38 -0
- package/dist/timeline/audio-track/audio-track-lane.d.ts +46 -0
- package/dist/timeline/audio-track/index.d.ts +1 -0
- package/dist/timeline/index.d.ts +5 -0
- package/dist/timeline/marker/index.d.ts +4 -0
- package/dist/timeline/marker/marker-handle.d.ts +55 -0
- package/dist/timeline/marker/marker-lane.d.ts +38 -0
- package/dist/timeline/marker/marker.d.ts +64 -0
- package/dist/timeline/marker/moment-marker.d.ts +31 -0
- package/dist/timeline/marker/period-marker.d.ts +43 -0
- package/dist/timeline/playhead-hover.d.ts +36 -0
- package/dist/timeline/playhead.d.ts +40 -0
- package/dist/timeline/scrollbar.d.ts +60 -0
- package/dist/timeline/scrubber-lane.d.ts +44 -0
- package/dist/timeline/subtitles/index.d.ts +1 -0
- package/dist/timeline/subtitles/subtitles-lane-item.d.ts +40 -0
- package/dist/timeline/subtitles/subtitles-lane.d.ts +38 -0
- package/dist/timeline/thumbnail/index.d.ts +1 -0
- package/dist/timeline/thumbnail/thumbnail-lane.d.ts +54 -0
- package/dist/timeline/thumbnail/thumbnail.d.ts +46 -0
- package/dist/timeline/timecode-display.d.ts +32 -0
- package/dist/timeline/timeline-lane.d.ts +70 -0
- package/dist/timeline/timeline.d.ts +222 -0
- package/dist/track/audio-vtt-file.d.ts +8 -0
- package/dist/track/subtitles-vtt-file.d.ts +8 -0
- package/dist/track/subtitles-vtt-track.d.ts +5 -0
- package/dist/track/thumbnail-vtt-file.d.ts +11 -0
- package/dist/track/track.d.ts +12 -0
- package/dist/track/vtt-file.d.ts +32 -0
- package/dist/types/common.d.ts +6 -0
- package/dist/types/events.d.ts +125 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/model.d.ts +17 -0
- package/dist/types/track.d.ts +21 -0
- package/dist/types/types.d.ts +3 -0
- package/dist/types/vtt.d.ts +23 -0
- package/dist/util/animation-util.d.ts +11 -0
- package/dist/util/color-util.d.ts +3 -0
- package/dist/util/frame-util.d.ts +18 -0
- package/dist/util/image-util.d.ts +9 -0
- package/dist/util/observable-util.d.ts +2 -0
- package/dist/util/shape-util.d.ts +17 -0
- package/dist/util/time-util.d.ts +6 -0
- package/dist/util/window-util.d.ts +4 -0
- package/dist/validators.d.ts +6 -0
- package/dist/video/playback-state.d.ts +23 -0
- package/dist/video/video-controller.d.ts +139 -0
- package/dist/video/video-hls-controller.d.ts +15 -0
- package/dist/video/video.d.ts +19 -0
- package/package.json +56 -0
- package/style/omakase-player.scss +144 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ThumbnailLane } from './thumbnail-lane';
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import Konva from "konva";
|
|
2
|
+
import { Thumbnail } from "./thumbnail";
|
|
3
|
+
import { Subject } from "rxjs";
|
|
4
|
+
import { BaseTimelineLane, TimelaneLaneConfig, TimelineLaneStyle } from "../timeline-lane";
|
|
5
|
+
import { ThumbnailVttFile } from "../../track/thumbnail-vtt-file";
|
|
6
|
+
import { ThumbnailEvent } from "../../types";
|
|
7
|
+
import { ComponentConfigStyleComposed } from "../../common/component";
|
|
8
|
+
export interface ThumbnailLaneStyle extends TimelineLaneStyle {
|
|
9
|
+
thumbnailHeight: number;
|
|
10
|
+
thumbnailStroke: string;
|
|
11
|
+
thumbnailStrokeWidth: number;
|
|
12
|
+
thumbnailHoverScale: number;
|
|
13
|
+
thumbnailHoverStroke: string;
|
|
14
|
+
thumbnailHoverStrokeWidth: number;
|
|
15
|
+
}
|
|
16
|
+
export interface ThumbnailLaneConfig extends TimelaneLaneConfig<ThumbnailLaneStyle> {
|
|
17
|
+
thumbnailVttUrl: string;
|
|
18
|
+
}
|
|
19
|
+
export declare class ThumbnailLane extends BaseTimelineLane<ThumbnailLaneConfig, ThumbnailLaneStyle> {
|
|
20
|
+
private _thumbnailVttUrl;
|
|
21
|
+
protected readonly thumbnailsMap: Map<number, Thumbnail>;
|
|
22
|
+
protected readonly thumbnailsVisibleSet: Set<number>;
|
|
23
|
+
protected thumbnailHover: Thumbnail;
|
|
24
|
+
protected timecodedGroup: Konva.Group;
|
|
25
|
+
protected timecodedEventCatcher: Konva.Rect;
|
|
26
|
+
protected thumbnailsGroup: Konva.Group;
|
|
27
|
+
private thumbnailVttFile;
|
|
28
|
+
private thumbnailWidth;
|
|
29
|
+
private readonly onSettleLayout$;
|
|
30
|
+
private eventStreamBreaker$;
|
|
31
|
+
readonly onClick$: Subject<ThumbnailEvent>;
|
|
32
|
+
constructor(config: ComponentConfigStyleComposed<ThumbnailLaneConfig>);
|
|
33
|
+
protected createCanvasNode(): Konva.Group;
|
|
34
|
+
protected settleLayout(): void;
|
|
35
|
+
protected afterCanvasNodeInit(): void;
|
|
36
|
+
onMeasurementsChange(): void;
|
|
37
|
+
destroy(): void;
|
|
38
|
+
clearContent(): void;
|
|
39
|
+
private clearItems;
|
|
40
|
+
private fireEventStreamBreaker;
|
|
41
|
+
private createAndAdjustThumbnails;
|
|
42
|
+
private adjustThumbnails;
|
|
43
|
+
private resolveVisibleTimestamps;
|
|
44
|
+
private createThumbnail;
|
|
45
|
+
private showThumbnailHover;
|
|
46
|
+
private hideThumbnailHover;
|
|
47
|
+
private resolveThumbnailHoverPosition;
|
|
48
|
+
private fetchAndCreateThumbnails;
|
|
49
|
+
private fetchThumbnailVttFile;
|
|
50
|
+
isVttLoaded(): boolean;
|
|
51
|
+
getThumbnailVttFile(): ThumbnailVttFile;
|
|
52
|
+
get thumbnailVttUrl(): string;
|
|
53
|
+
set thumbnailVttUrl(value: string);
|
|
54
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { BaseComponent, ComponentConfig, ComponentConfigStyleComposed } from "../../common/component";
|
|
2
|
+
import Konva from "konva";
|
|
3
|
+
import { Dimension, HasRectMeasurement, OnMeasurementsChange, Position, RectMeasurement } from "../../common/measurement";
|
|
4
|
+
import { Comparable, ThumbnailEvent, ThumbnailVttCue } from "../../types";
|
|
5
|
+
import { Subject } from "rxjs";
|
|
6
|
+
export interface ThumbnailStyle {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
stroke: string;
|
|
12
|
+
strokeWidth: number;
|
|
13
|
+
visible: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface ThumbnailConfig extends ComponentConfig<ThumbnailStyle> {
|
|
16
|
+
listening: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare class Thumbnail extends BaseComponent<ThumbnailConfig, ThumbnailStyle, Konva.Group> implements OnMeasurementsChange, HasRectMeasurement, Comparable<Thumbnail> {
|
|
19
|
+
private listening;
|
|
20
|
+
private thumbnailVttCue;
|
|
21
|
+
private group;
|
|
22
|
+
private backgroundRect;
|
|
23
|
+
private image;
|
|
24
|
+
readonly onClick$: Subject<ThumbnailEvent>;
|
|
25
|
+
readonly onMouseOver$: Subject<ThumbnailEvent>;
|
|
26
|
+
readonly onMouseMove$: Subject<ThumbnailEvent>;
|
|
27
|
+
readonly onMouseOut$: Subject<ThumbnailEvent>;
|
|
28
|
+
readonly onMouseLeave$: Subject<ThumbnailEvent>;
|
|
29
|
+
constructor(config: Partial<ComponentConfigStyleComposed<ThumbnailConfig>>);
|
|
30
|
+
protected createCanvasNode(): Konva.Group;
|
|
31
|
+
protected afterCanvasNodeInit(): void;
|
|
32
|
+
destroy(): void;
|
|
33
|
+
onMeasurementsChange(): void;
|
|
34
|
+
setImage(image: Konva.Image): void;
|
|
35
|
+
setVisible(visible: boolean): void;
|
|
36
|
+
setPosition(position: Position): void;
|
|
37
|
+
setVisibleAndX(visible: boolean, x: number): void;
|
|
38
|
+
getPosition(): Position;
|
|
39
|
+
getDimension(): Dimension;
|
|
40
|
+
setDimension(dimension: Dimension): void;
|
|
41
|
+
getRect(): RectMeasurement;
|
|
42
|
+
getThumbnailVttCue(): ThumbnailVttCue;
|
|
43
|
+
setThumbnailVttCue(thumbnailVttCue: ThumbnailVttCue): void;
|
|
44
|
+
getImage(): Konva.Image;
|
|
45
|
+
compareTo(o: Thumbnail): number;
|
|
46
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { BaseComponent, ComponentConfig, ComponentConfigStyleComposed } from "../common/component";
|
|
2
|
+
import Konva from "konva";
|
|
3
|
+
import { HasRectMeasurement, OnMeasurementsChange, Position, RectMeasurement } from "../common/measurement";
|
|
4
|
+
import { VideoController } from "../video/video-controller";
|
|
5
|
+
import { StylesProvider } from "../common/styles-provider";
|
|
6
|
+
export interface TimecodeDisplayStyle {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
textFontSize: number;
|
|
12
|
+
textFill: string;
|
|
13
|
+
visible: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface TimecodeDisplayConfig extends ComponentConfig<TimecodeDisplayStyle> {
|
|
16
|
+
}
|
|
17
|
+
export declare class TimecodeDisplay extends BaseComponent<TimecodeDisplayConfig, TimecodeDisplayStyle, Konva.Group> implements OnMeasurementsChange, HasRectMeasurement {
|
|
18
|
+
protected readonly stylesProvider: StylesProvider;
|
|
19
|
+
private group;
|
|
20
|
+
private text;
|
|
21
|
+
private videoController;
|
|
22
|
+
private videoEventStreamBreaker$;
|
|
23
|
+
constructor(config: Partial<ComponentConfigStyleComposed<TimecodeDisplayConfig>>, videoController: VideoController);
|
|
24
|
+
protected createCanvasNode(): Konva.Group;
|
|
25
|
+
protected afterCanvasNodeInit(): void;
|
|
26
|
+
onMeasurementsChange(): void;
|
|
27
|
+
private fireVideoEventStreamBreaker;
|
|
28
|
+
private onVideoLoadedEvent;
|
|
29
|
+
setVisible(visible: boolean): void;
|
|
30
|
+
setPosition(position: Position): void;
|
|
31
|
+
getRect(): RectMeasurement;
|
|
32
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { BaseComponent, Component, ComponentConfig } from "../common/component";
|
|
2
|
+
import Konva from "konva";
|
|
3
|
+
import { Dimension, OnMeasurementsChange, Position, RectMeasurement } from "../common/measurement";
|
|
4
|
+
import { Timeline } from "./timeline";
|
|
5
|
+
import { StylesProvider } from "../common/styles-provider";
|
|
6
|
+
import { VideoController } from "../video/video-controller";
|
|
7
|
+
export interface TimelineLaneStyle {
|
|
8
|
+
height: number;
|
|
9
|
+
backgroundFill: string;
|
|
10
|
+
backgroundOpacity: number;
|
|
11
|
+
descriptionTextFill: string;
|
|
12
|
+
descriptionFontSize: number;
|
|
13
|
+
leftBackgroundFill: string;
|
|
14
|
+
leftBackgroundOpacity: number;
|
|
15
|
+
}
|
|
16
|
+
export declare const TIMELINE_LANE_STYLE_DEFAULT: TimelineLaneStyle;
|
|
17
|
+
export interface TimelaneLaneConfig<S extends TimelineLaneStyle> extends ComponentConfig<S> {
|
|
18
|
+
id: string;
|
|
19
|
+
description: string;
|
|
20
|
+
}
|
|
21
|
+
export interface TimelaneLane<C extends TimelaneLaneConfig<S>, S extends TimelineLaneStyle> extends Component<C, S, Konva.Group>, OnMeasurementsChange {
|
|
22
|
+
style: S;
|
|
23
|
+
getId(): string;
|
|
24
|
+
getDescription(): string;
|
|
25
|
+
getRect(): RectMeasurement;
|
|
26
|
+
getPosition(): Position;
|
|
27
|
+
getDimension(): Dimension;
|
|
28
|
+
setTimelinePosition(position: Position): any;
|
|
29
|
+
getTimelinePosition(): Position;
|
|
30
|
+
clearContent(): any;
|
|
31
|
+
setTimeline(timeline: Timeline): any;
|
|
32
|
+
setVideoController(videoController: VideoController): any;
|
|
33
|
+
}
|
|
34
|
+
export type GenericTimelaneLane = TimelaneLane<TimelaneLaneConfig<TimelineLaneStyle>, TimelineLaneStyle>;
|
|
35
|
+
export declare abstract class BaseTimelineLane<C extends TimelaneLaneConfig<S>, S extends TimelineLaneStyle> extends BaseComponent<C, S, Konva.Group> implements TimelaneLane<C, S> {
|
|
36
|
+
protected readonly stylesProvider: StylesProvider;
|
|
37
|
+
protected id: string;
|
|
38
|
+
protected description: string;
|
|
39
|
+
protected timelinePosition: Position;
|
|
40
|
+
protected bodyGroup: Konva.Group;
|
|
41
|
+
protected bodyBackground: Konva.Rect;
|
|
42
|
+
protected leftGroup: Konva.Group;
|
|
43
|
+
protected leftBackground: Konva.Rect;
|
|
44
|
+
protected leftPanelText: Konva.Text;
|
|
45
|
+
protected timeline: Timeline;
|
|
46
|
+
protected videoController: VideoController;
|
|
47
|
+
protected constructor(config: C);
|
|
48
|
+
protected createCanvasNode(): Konva.Group;
|
|
49
|
+
protected afterCanvasNodeInit(): void;
|
|
50
|
+
onMeasurementsChange(): void;
|
|
51
|
+
/***
|
|
52
|
+
* Global styles
|
|
53
|
+
*/
|
|
54
|
+
onStylesProviderChange(): void;
|
|
55
|
+
onStyleChange(): void;
|
|
56
|
+
protected settleLayout(): void;
|
|
57
|
+
protected isTimelineReady(): boolean;
|
|
58
|
+
clearContent(): void;
|
|
59
|
+
setTimeline(timeline: Timeline): void;
|
|
60
|
+
setVideoController(videoController: VideoController): void;
|
|
61
|
+
get style(): S;
|
|
62
|
+
set style(value: Partial<S>);
|
|
63
|
+
getRect(): RectMeasurement;
|
|
64
|
+
getPosition(): Position;
|
|
65
|
+
getDimension(): Dimension;
|
|
66
|
+
getId(): string;
|
|
67
|
+
getDescription(): string;
|
|
68
|
+
setTimelinePosition(position: Position): void;
|
|
69
|
+
getTimelinePosition(): Position;
|
|
70
|
+
}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { BaseComponent, ComponentConfig, ComponentConfigStyleComposed } from "../common/component";
|
|
2
|
+
import Konva from "konva";
|
|
3
|
+
import { ScrollableHorizontally, Scrollbar } from "./scrollbar";
|
|
4
|
+
import { Dimension, HasRectMeasurement, HorizontalMeasurement, OnMeasurementsChange, Position, RectMeasurement } from "../common/measurement";
|
|
5
|
+
import { VideoController } from "../video/video-controller";
|
|
6
|
+
import { Observable, Subject } from "rxjs";
|
|
7
|
+
import { TimelineScrollEvent, TimelineZoomEvent } from "../types";
|
|
8
|
+
import { ThumbnailVttFile } from "../track/thumbnail-vtt-file";
|
|
9
|
+
import { GenericTimelaneLane } from "./timeline-lane";
|
|
10
|
+
import { ScrubberLane } from "./scrubber-lane";
|
|
11
|
+
import { TimelineApi } from "../api/timeline-api";
|
|
12
|
+
import { MarkerLane } from "./marker";
|
|
13
|
+
import { ThumbnailLane } from "./thumbnail";
|
|
14
|
+
import { SubtitlesLane } from "./subtitles";
|
|
15
|
+
import { AudioTrackLane } from "./audio-track";
|
|
16
|
+
import { MarkerLaneConfig } from "./marker/marker-lane";
|
|
17
|
+
import { ThumbnailLaneConfig } from "./thumbnail/thumbnail-lane";
|
|
18
|
+
import { SubtitlesLaneConfig } from "./subtitles/subtitles-lane";
|
|
19
|
+
export interface TimelineStyle {
|
|
20
|
+
stageMinWidth: number;
|
|
21
|
+
backgroundFill: string;
|
|
22
|
+
headerBackgroundFill: string;
|
|
23
|
+
footerBackgroundFill: string;
|
|
24
|
+
scrollbarHeight: number;
|
|
25
|
+
thumbnailHoverWidth: number;
|
|
26
|
+
thumbnailHoverStroke: string;
|
|
27
|
+
thumbnailHoverStrokeWidth: number;
|
|
28
|
+
thumbnailHoverYOffset: number;
|
|
29
|
+
headerHeight: number;
|
|
30
|
+
footerHeight: number;
|
|
31
|
+
leftPanelWidth: number;
|
|
32
|
+
rightPanelLeftGutterWidth: number;
|
|
33
|
+
rightPanelRightGutterWidth: number;
|
|
34
|
+
timecodedContainerClipPadding: number;
|
|
35
|
+
playheadVisible: boolean;
|
|
36
|
+
playheadFill: string;
|
|
37
|
+
playheadLineWidth: number;
|
|
38
|
+
playheadSymbolHeight: number;
|
|
39
|
+
playheadScrubberHeight: number;
|
|
40
|
+
playheadBackgroundFill: string;
|
|
41
|
+
playheadBackgroundOpacity: number;
|
|
42
|
+
playheadPlayProgressFill: string;
|
|
43
|
+
playheadPlayProgressOpacity: number;
|
|
44
|
+
playheadBufferedFill: string;
|
|
45
|
+
playheadBufferedOpacity: number;
|
|
46
|
+
}
|
|
47
|
+
export interface TimelineConfig extends ComponentConfig<TimelineStyle> {
|
|
48
|
+
thumbnailVttUrl?: string;
|
|
49
|
+
timelineHTMLElementId: string;
|
|
50
|
+
playheadHoverSnapArea: number;
|
|
51
|
+
zoomScale: number;
|
|
52
|
+
zoomBaseline: number;
|
|
53
|
+
zoomMax: number;
|
|
54
|
+
}
|
|
55
|
+
export declare class Timeline extends BaseComponent<TimelineConfig, TimelineStyle, Konva.Stage> implements OnMeasurementsChange, HasRectMeasurement, ScrollableHorizontally, TimelineApi {
|
|
56
|
+
private timelineHTMLElementId;
|
|
57
|
+
private thumbnailVttUrl;
|
|
58
|
+
private width;
|
|
59
|
+
private zoomScale;
|
|
60
|
+
private zoomBaseline;
|
|
61
|
+
private zoomMax;
|
|
62
|
+
private playheadHoverSnapArea;
|
|
63
|
+
private timelineHTMLElement;
|
|
64
|
+
private stage;
|
|
65
|
+
private layer;
|
|
66
|
+
private layoutGroup;
|
|
67
|
+
private layoutBackground;
|
|
68
|
+
private headerGroup;
|
|
69
|
+
private headerBackground;
|
|
70
|
+
private bodyGroup;
|
|
71
|
+
private footerGroup;
|
|
72
|
+
private footerBackground;
|
|
73
|
+
private bodyContentGroup;
|
|
74
|
+
private leftPanel;
|
|
75
|
+
private rightPanel;
|
|
76
|
+
private timecodedContainer;
|
|
77
|
+
private timecodedGroup;
|
|
78
|
+
private timecodedBaseGroup;
|
|
79
|
+
private timecodedThumbnailsGroup;
|
|
80
|
+
private timecodedSubtitlesGroup;
|
|
81
|
+
private timecodedAudioGroup;
|
|
82
|
+
private timecodedMarkersGroup;
|
|
83
|
+
private timecodedSurfaceGroup;
|
|
84
|
+
private timecodedBackground;
|
|
85
|
+
private timecodedEventCatcher;
|
|
86
|
+
private timecodedGroupNodes;
|
|
87
|
+
private videoController;
|
|
88
|
+
private scrollbar;
|
|
89
|
+
private playheadHover;
|
|
90
|
+
private playhead;
|
|
91
|
+
private timelaneLanes;
|
|
92
|
+
private timelaneLanesMap;
|
|
93
|
+
private scrubberLane;
|
|
94
|
+
private thumbnailHover;
|
|
95
|
+
private headerTimecodeDisplay;
|
|
96
|
+
private maxTimecodedGroupWidth;
|
|
97
|
+
private thumbnailVttFile;
|
|
98
|
+
private scrollWithPlayhead;
|
|
99
|
+
private syncTimelineWithPlayheadInProgress;
|
|
100
|
+
private mouseWheelEnabled;
|
|
101
|
+
private leftPanelVisible;
|
|
102
|
+
private videoEventBreaker$;
|
|
103
|
+
readonly onScroll$: Subject<TimelineScrollEvent>;
|
|
104
|
+
readonly onZoom$: Subject<TimelineZoomEvent>;
|
|
105
|
+
constructor(config: Partial<ComponentConfigStyleComposed<TimelineConfig>>, videoController: VideoController);
|
|
106
|
+
protected createCanvasNode(): Konva.Stage;
|
|
107
|
+
protected afterCanvasNodeInit(): void;
|
|
108
|
+
private settleLayout;
|
|
109
|
+
onMeasurementsChange(): void;
|
|
110
|
+
private onWindowResize;
|
|
111
|
+
private calculateHeights;
|
|
112
|
+
private resolveStageDimension;
|
|
113
|
+
private getTimelineHTMLElementRect;
|
|
114
|
+
private showThumbnailHover;
|
|
115
|
+
private hideThumbnailHover;
|
|
116
|
+
private resolveThumbnailPosition;
|
|
117
|
+
private createScrollEvent;
|
|
118
|
+
private createZoomEvent;
|
|
119
|
+
getHorizontalScrollPercent(): number;
|
|
120
|
+
setHorizontalScrollPercent(percent: number): void;
|
|
121
|
+
getScrollHandleHorizontalMeasurement(scrollbarWidth: number): HorizontalMeasurement;
|
|
122
|
+
scrollTo(percent: number): Observable<number>;
|
|
123
|
+
scrollToPlayhead(): Observable<number>;
|
|
124
|
+
private scrollToPercent;
|
|
125
|
+
private scrollToPercentEased;
|
|
126
|
+
private scrollToEased;
|
|
127
|
+
private isPlayheadInTimecodedView;
|
|
128
|
+
private updateScrollWithPlayhead;
|
|
129
|
+
/***
|
|
130
|
+
* Scrolls timecoded group so that playhead is at left most position
|
|
131
|
+
* @private
|
|
132
|
+
*/
|
|
133
|
+
private syncTimelineWithPlayhead;
|
|
134
|
+
private setTimelinePosition;
|
|
135
|
+
private scrollTimeline;
|
|
136
|
+
private calculateTimelineXFromScrollPercent;
|
|
137
|
+
getZoomPercent(): number;
|
|
138
|
+
zoomTo(percent: number): Observable<number>;
|
|
139
|
+
zoomIn(): Observable<number>;
|
|
140
|
+
zoomOut(): Observable<number>;
|
|
141
|
+
private zoomToEased;
|
|
142
|
+
private zoomStep;
|
|
143
|
+
private zoomByPercent;
|
|
144
|
+
private zoomByWidth;
|
|
145
|
+
/***
|
|
146
|
+
* Move group proportionally to reposition focus
|
|
147
|
+
*
|
|
148
|
+
* @param newWidth
|
|
149
|
+
* @param repositionFocus
|
|
150
|
+
* @private
|
|
151
|
+
*/
|
|
152
|
+
private calculateNewPosition;
|
|
153
|
+
private resolveZoomFocus;
|
|
154
|
+
private calculateWidthFromZoomRatioPercent;
|
|
155
|
+
private getConstrainedWidth;
|
|
156
|
+
private getConstrainedZoomPercent;
|
|
157
|
+
private getConstrainedScrollPercent;
|
|
158
|
+
private playheadHoverMove;
|
|
159
|
+
private resolvePlayheadSyncPosition;
|
|
160
|
+
private onVideoLoadedEvent;
|
|
161
|
+
private fireVideoEventBreaker;
|
|
162
|
+
setThumbnailVttFile(thumbnailVttFile: ThumbnailVttFile): void;
|
|
163
|
+
private syncVideoMetadata;
|
|
164
|
+
addLane(timelaneLane: GenericTimelaneLane): void;
|
|
165
|
+
removeLane(id: string): void;
|
|
166
|
+
getScrollbar(): Scrollbar;
|
|
167
|
+
addLanes(timelaneLanes: GenericTimelaneLane[]): void;
|
|
168
|
+
getLanes(): GenericTimelaneLane[];
|
|
169
|
+
getLane(id: string): GenericTimelaneLane;
|
|
170
|
+
getScrubberLane(): ScrubberLane;
|
|
171
|
+
getMarkerLane(id: string): MarkerLane;
|
|
172
|
+
getThumbnailLane(id: string): ThumbnailLane;
|
|
173
|
+
getSubtitlesLane(id: string): SubtitlesLane;
|
|
174
|
+
getAudioTrackLane(id: string): AudioTrackLane;
|
|
175
|
+
createMarkerLane(config: MarkerLaneConfig): MarkerLane;
|
|
176
|
+
createThumbnailLane(config: ThumbnailLaneConfig): ThumbnailLane;
|
|
177
|
+
createSubtitlesLane(config: SubtitlesLaneConfig): SubtitlesLane;
|
|
178
|
+
isTimelineReady(): boolean;
|
|
179
|
+
addToTimecodedBaseGroup(node: Konva.Group | Konva.Shape): void;
|
|
180
|
+
addToTimecodedSurfaceGroup(node: Konva.Group | Konva.Shape): void;
|
|
181
|
+
addToTimecodedMarkersGroup(node: Konva.Group | Konva.Shape): void;
|
|
182
|
+
addToTimecodedThumbnailsGroup(node: Konva.Group | Konva.Shape): void;
|
|
183
|
+
addToTimecodedSubtitlesGroup(node: Konva.Group | Konva.Shape): void;
|
|
184
|
+
addToTimecodedAudioGroup(node: Konva.Group | Konva.Shape): void;
|
|
185
|
+
constrainTimelinePosition(x: number): number;
|
|
186
|
+
timelinePositionToTime(xOnTimeline: number): number;
|
|
187
|
+
timelinePositionToTimeFormatted(x: number): string;
|
|
188
|
+
timelinePositionToFrame(x: number): number;
|
|
189
|
+
timeToTimelinePosition(time: number): number;
|
|
190
|
+
private getConstrainedTimelineX;
|
|
191
|
+
getBodyGroupRect(): RectMeasurement;
|
|
192
|
+
getLeftPanelRect(): RectMeasurement;
|
|
193
|
+
getLeftPanelVisible(): boolean;
|
|
194
|
+
getRightPanelRect(): RectMeasurement;
|
|
195
|
+
getTimecodedContainerDimension(): Dimension;
|
|
196
|
+
getTimecodedContainerPosition(): Position;
|
|
197
|
+
getTimecodedContainerRect(): RectMeasurement;
|
|
198
|
+
getTimecodedGroupDimension(): Dimension;
|
|
199
|
+
getTimecodedGroupPosition(): Position;
|
|
200
|
+
getTimecodedGroupRect(): RectMeasurement;
|
|
201
|
+
getTimecodedGroupHorizontalMeasurement(): HorizontalMeasurement;
|
|
202
|
+
getRelativePointerPosition(): Position;
|
|
203
|
+
getLayoutGroupDimension(): Dimension;
|
|
204
|
+
getLayoutGroupPosition(): Position;
|
|
205
|
+
getRect(): RectMeasurement;
|
|
206
|
+
getVisiblePositionRange(): {
|
|
207
|
+
start: number;
|
|
208
|
+
end: number;
|
|
209
|
+
};
|
|
210
|
+
isInVisiblePositionRange(x: number): boolean;
|
|
211
|
+
isSnappedStart(): boolean;
|
|
212
|
+
isSnappedEnd(): boolean;
|
|
213
|
+
getVisibleTimeRange(): {
|
|
214
|
+
start: number;
|
|
215
|
+
end: number;
|
|
216
|
+
};
|
|
217
|
+
private getZoomBaseline;
|
|
218
|
+
private getZoomMax;
|
|
219
|
+
private fetchThumbnailVttFile;
|
|
220
|
+
toggleLeftPanelVisible(visible: boolean): void;
|
|
221
|
+
clearContent(): void;
|
|
222
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BaseOmakaseVttFile, VttCueParsed } from "./vtt-file";
|
|
2
|
+
import { AudioVttCue } from "../types";
|
|
3
|
+
import { Observable } from "rxjs";
|
|
4
|
+
export declare class AudioVttFile extends BaseOmakaseVttFile<AudioVttCue> {
|
|
5
|
+
protected constructor(url: string);
|
|
6
|
+
static create(url: string): Observable<AudioVttFile>;
|
|
7
|
+
protected mapCue(vttCueParsed: VttCueParsed): AudioVttCue;
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BaseOmakaseVttFile, VttCueParsed } from "./vtt-file";
|
|
2
|
+
import { SubtitlesVttCue } from "../types";
|
|
3
|
+
import { Observable } from "rxjs";
|
|
4
|
+
export declare class SubtitlesVttFile extends BaseOmakaseVttFile<SubtitlesVttCue> {
|
|
5
|
+
protected constructor(url: string);
|
|
6
|
+
static create(url: string): Observable<SubtitlesVttFile>;
|
|
7
|
+
protected mapCue(vttCueParsed: VttCueParsed): SubtitlesVttCue;
|
|
8
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BaseOmakaseVttFile, VttCueParsed } from "./vtt-file";
|
|
2
|
+
import { ThumbnailVttCue } from "../types";
|
|
3
|
+
import { Observable } from "rxjs";
|
|
4
|
+
export declare class ThumbnailVttFile extends BaseOmakaseVttFile<ThumbnailVttCue> {
|
|
5
|
+
protected constructor(url: string);
|
|
6
|
+
static create(url: string): Observable<ThumbnailVttFile>;
|
|
7
|
+
protected mapCue(vttCueParsed: VttCueParsed): ThumbnailVttCue;
|
|
8
|
+
private resolveThumbnailUrl;
|
|
9
|
+
private createThumbnailUrlFromRelativeUrl;
|
|
10
|
+
private isUrlAbsolute;
|
|
11
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { OmakaseTextTrack, OmakaseTextTrackCue, OmakaseTrackConfig } from "../types";
|
|
2
|
+
export declare abstract class BaseOmakaseTrack<T extends OmakaseTextTrackCue> implements OmakaseTextTrack<T> {
|
|
3
|
+
id: string;
|
|
4
|
+
src: string;
|
|
5
|
+
default: boolean;
|
|
6
|
+
label: string;
|
|
7
|
+
language: string;
|
|
8
|
+
cues: T[];
|
|
9
|
+
hidden: boolean;
|
|
10
|
+
element: HTMLTrackElement;
|
|
11
|
+
protected constructor(config: OmakaseTrackConfig);
|
|
12
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Observable } from "rxjs";
|
|
2
|
+
import { OmakaseVttCue, OmakaseVttFile } from "../types";
|
|
3
|
+
export interface VttCueParsed {
|
|
4
|
+
identifier: string;
|
|
5
|
+
start: number;
|
|
6
|
+
end: number;
|
|
7
|
+
text: string;
|
|
8
|
+
styles: string;
|
|
9
|
+
}
|
|
10
|
+
export interface VttFileMetaParsed {
|
|
11
|
+
kind: string;
|
|
12
|
+
language: string;
|
|
13
|
+
}
|
|
14
|
+
export interface VttFileParsed {
|
|
15
|
+
valid: any;
|
|
16
|
+
meta: VttFileMetaParsed;
|
|
17
|
+
cues: VttCueParsed[];
|
|
18
|
+
}
|
|
19
|
+
export declare abstract class BaseOmakaseVttFile<T extends OmakaseVttCue> implements OmakaseVttFile<T> {
|
|
20
|
+
protected url: string;
|
|
21
|
+
protected cues: Map<number, T>;
|
|
22
|
+
protected cuesKeysSorted: number[];
|
|
23
|
+
protected constructor(url: string);
|
|
24
|
+
fetch(): Observable<boolean>;
|
|
25
|
+
protected abstract mapCue(vttCueParsed: VttCueParsed): T;
|
|
26
|
+
getUrl(): string;
|
|
27
|
+
hasCues(): boolean;
|
|
28
|
+
findCue(time: number): T;
|
|
29
|
+
findCues(startTime: number, endTime: number): T[];
|
|
30
|
+
getCues(): T[];
|
|
31
|
+
protected findCueIndex(time: number): number;
|
|
32
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { Position } from "../common/measurement";
|
|
2
|
+
import { MomentObservation, PeriodObservation } from "./model";
|
|
3
|
+
import { Thumbnail } from "../timeline/thumbnail/thumbnail";
|
|
4
|
+
import { Video } from "../video/video";
|
|
5
|
+
import { CamelToSnakeCase } from "./types";
|
|
6
|
+
import { OmakaseTextTrack, OmakaseTextTrackCue } from "./track";
|
|
7
|
+
import { GenericMarker } from "../timeline/marker/marker";
|
|
8
|
+
export declare const OmakasePlayerEvents: OmakasePlayerEventsType;
|
|
9
|
+
export type OmakasePlayerEventsType = OmakasePlayerEventsMappingType<OmakasePlayerEventMap>;
|
|
10
|
+
export type OmakasePlayerEventsMappingType<T> = {
|
|
11
|
+
[K in keyof T as Uppercase<CamelToSnakeCase<string & K>>]: K;
|
|
12
|
+
};
|
|
13
|
+
export type OmakasePlayerEventMap = VideoEventMap & AudioEventMap & SubtitlesEventMap & TimelineEventMap;
|
|
14
|
+
export type VideoEventMap = {
|
|
15
|
+
'omakaseVideoLoaded': VideoLoadedEvent;
|
|
16
|
+
'omakaseVideoPlay': VideoPlayEvent;
|
|
17
|
+
'omakaseVideoPause': VideoPlayEvent;
|
|
18
|
+
'omakaseVideoTimeChange': VideoTimeChangeEvent;
|
|
19
|
+
'omakaseVideoSeeking': VideoSeekingEvent;
|
|
20
|
+
'omakaseVideoSeeked': VideoSeekedEvent;
|
|
21
|
+
'omakaseVideoEnded': VideoEndedEvent;
|
|
22
|
+
'omakaseVideoAudioSwitched': AudioEvent;
|
|
23
|
+
'omakaseVideoBuffering': VideoBufferingEvent;
|
|
24
|
+
};
|
|
25
|
+
export type AudioEventMap = {
|
|
26
|
+
'omakaseAudioSwitched': AudioEvent;
|
|
27
|
+
};
|
|
28
|
+
export type SubtitlesEventMap = {
|
|
29
|
+
'omakaseSubtitlesCreate': SubtitlesCreateEvent;
|
|
30
|
+
'omakaseSubtitlesRemove': SubtitlesEvent;
|
|
31
|
+
'omakaseSubtitlesShow': SubtitlesEvent;
|
|
32
|
+
'omakaseSubtitlesHide': SubtitlesEvent;
|
|
33
|
+
};
|
|
34
|
+
export type TimelineEventMap = {
|
|
35
|
+
'omakaseTimelineScroll': TimelineScrollEvent;
|
|
36
|
+
'omakaseTimelineZoom': TimelineZoomEvent;
|
|
37
|
+
};
|
|
38
|
+
export interface OmakaseEvent {
|
|
39
|
+
}
|
|
40
|
+
export interface OmakaseMouseEvent extends OmakaseEvent {
|
|
41
|
+
evt: MouseEvent;
|
|
42
|
+
position: Position;
|
|
43
|
+
}
|
|
44
|
+
export interface ClickEvent extends OmakaseMouseEvent {
|
|
45
|
+
}
|
|
46
|
+
export interface MouseEnterEvent extends OmakaseMouseEvent {
|
|
47
|
+
}
|
|
48
|
+
export interface MouseMoveEvent extends OmakaseMouseEvent {
|
|
49
|
+
}
|
|
50
|
+
export interface MouseLeaveEvent extends OmakaseMouseEvent {
|
|
51
|
+
}
|
|
52
|
+
export interface MouseOutEvent extends OmakaseMouseEvent {
|
|
53
|
+
}
|
|
54
|
+
export interface MouseOverEvent extends OmakaseMouseEvent {
|
|
55
|
+
}
|
|
56
|
+
export interface VideoEvent extends OmakaseEvent {
|
|
57
|
+
}
|
|
58
|
+
export interface VideoLoadingEvent extends VideoEvent {
|
|
59
|
+
sourceUrl: string;
|
|
60
|
+
frameRate: number;
|
|
61
|
+
}
|
|
62
|
+
export interface VideoLoadedEvent extends VideoEvent {
|
|
63
|
+
video: Video;
|
|
64
|
+
}
|
|
65
|
+
export interface VideoPlayEvent extends VideoEvent {
|
|
66
|
+
}
|
|
67
|
+
export interface VideoTimeChangeEvent extends VideoEvent {
|
|
68
|
+
currentTime: number;
|
|
69
|
+
frame: number;
|
|
70
|
+
}
|
|
71
|
+
export interface VideoSeekingEvent extends VideoEvent {
|
|
72
|
+
currentTime: number;
|
|
73
|
+
newTime: number;
|
|
74
|
+
}
|
|
75
|
+
export interface VideoSeekedEvent extends VideoEvent {
|
|
76
|
+
currentTime: number;
|
|
77
|
+
}
|
|
78
|
+
export interface VideoBufferingEvent extends VideoEvent {
|
|
79
|
+
bufferedTimespans: {
|
|
80
|
+
start: number;
|
|
81
|
+
end: number;
|
|
82
|
+
}[];
|
|
83
|
+
}
|
|
84
|
+
export interface VideoEndedEvent extends VideoEvent {
|
|
85
|
+
}
|
|
86
|
+
export interface AudioEvent extends OmakaseEvent {
|
|
87
|
+
audioTrack: any;
|
|
88
|
+
}
|
|
89
|
+
export interface SubtitlesEvent extends OmakaseEvent {
|
|
90
|
+
}
|
|
91
|
+
export interface SubtitlesCreateEvent extends OmakaseEvent {
|
|
92
|
+
textTrack: OmakaseTextTrack<OmakaseTextTrackCue>;
|
|
93
|
+
}
|
|
94
|
+
export interface TimelineEvent extends OmakaseEvent {
|
|
95
|
+
}
|
|
96
|
+
export interface TimelineZoomEvent extends TimelineEvent {
|
|
97
|
+
zoomPercent: number;
|
|
98
|
+
}
|
|
99
|
+
export interface TimelineScrollEvent extends TimelineEvent {
|
|
100
|
+
scrollPercent: number;
|
|
101
|
+
}
|
|
102
|
+
export interface ScrollbarEvent extends OmakaseEvent {
|
|
103
|
+
}
|
|
104
|
+
export interface ScrollbarScrollEvent extends ScrollbarEvent {
|
|
105
|
+
scrollPercent: number;
|
|
106
|
+
}
|
|
107
|
+
export interface ScrollbarZoomEvent extends ScrollbarEvent {
|
|
108
|
+
zoomPercent: number;
|
|
109
|
+
}
|
|
110
|
+
export interface ThumbnailEvent extends OmakaseEvent {
|
|
111
|
+
thumbnail: Thumbnail;
|
|
112
|
+
}
|
|
113
|
+
export interface MarkerEvent extends OmakaseEvent {
|
|
114
|
+
}
|
|
115
|
+
export interface MarkerChangeEvent extends MarkerEvent {
|
|
116
|
+
}
|
|
117
|
+
export interface MarkerFocusEvent extends MarkerEvent {
|
|
118
|
+
marker: GenericMarker;
|
|
119
|
+
}
|
|
120
|
+
export interface MomentMarkerChangeEvent extends MarkerChangeEvent {
|
|
121
|
+
timeObservation: MomentObservation;
|
|
122
|
+
}
|
|
123
|
+
export interface PeriodMarkerChangeEvent extends MarkerChangeEvent {
|
|
124
|
+
timeObservation: PeriodObservation;
|
|
125
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface TimeObservation {
|
|
2
|
+
}
|
|
3
|
+
export interface MomentObservation extends TimeObservation {
|
|
4
|
+
time: number;
|
|
5
|
+
}
|
|
6
|
+
export interface PeriodObservation extends TimeObservation {
|
|
7
|
+
start: number;
|
|
8
|
+
end: number;
|
|
9
|
+
}
|
|
10
|
+
export interface HelpMenuGroup {
|
|
11
|
+
name: string;
|
|
12
|
+
items: HelpMenuItem[];
|
|
13
|
+
}
|
|
14
|
+
export interface HelpMenuItem {
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
}
|