@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.
Files changed (86) hide show
  1. package/LICENSE +228 -0
  2. package/README.md +233 -0
  3. package/dist/api/api.d.ts +17 -0
  4. package/dist/api/audio-api.d.ts +24 -0
  5. package/dist/api/marker-lane-api.d.ts +33 -0
  6. package/dist/api/omakase-player-api.d.ts +38 -0
  7. package/dist/api/subtitles-api.d.ts +36 -0
  8. package/dist/api/timeline-api.d.ts +91 -0
  9. package/dist/api/video-api.d.ts +68 -0
  10. package/dist/audio/audio-controller.d.ts +32 -0
  11. package/dist/common/browser-provider.d.ts +34 -0
  12. package/dist/common/component.d.ts +56 -0
  13. package/dist/common/measurement.d.ts +41 -0
  14. package/dist/common/style-adapter.d.ts +27 -0
  15. package/dist/common/styles-provider.d.ts +33 -0
  16. package/dist/constants.d.ts +9 -0
  17. package/dist/dom/dom-controller.d.ts +53 -0
  18. package/dist/dom/fullscreen.d.ts +32 -0
  19. package/dist/events.d.ts +14 -0
  20. package/dist/http.d.ts +2 -0
  21. package/dist/images/help.svg +17 -0
  22. package/dist/images/loading.svg +29 -0
  23. package/dist/images/pause.svg +19 -0
  24. package/dist/images/play.svg +18 -0
  25. package/dist/images/replay.svg +23 -0
  26. package/dist/index.d.ts +3 -0
  27. package/dist/omakase-player.cjs.js +71 -0
  28. package/dist/omakase-player.cjs.js.map +1 -0
  29. package/dist/omakase-player.d.ts +51 -0
  30. package/dist/omakase-player.es.js +17439 -0
  31. package/dist/omakase-player.es.js.map +1 -0
  32. package/dist/omakase-player.umd.js +71 -0
  33. package/dist/omakase-player.umd.js.map +1 -0
  34. package/dist/style.css +1 -0
  35. package/dist/subtitles/subtitles-controller.d.ts +51 -0
  36. package/dist/timeline/audio-track/audio-track-lane-item.d.ts +38 -0
  37. package/dist/timeline/audio-track/audio-track-lane.d.ts +46 -0
  38. package/dist/timeline/audio-track/index.d.ts +1 -0
  39. package/dist/timeline/index.d.ts +5 -0
  40. package/dist/timeline/marker/index.d.ts +4 -0
  41. package/dist/timeline/marker/marker-handle.d.ts +55 -0
  42. package/dist/timeline/marker/marker-lane.d.ts +38 -0
  43. package/dist/timeline/marker/marker.d.ts +64 -0
  44. package/dist/timeline/marker/moment-marker.d.ts +31 -0
  45. package/dist/timeline/marker/period-marker.d.ts +43 -0
  46. package/dist/timeline/playhead-hover.d.ts +36 -0
  47. package/dist/timeline/playhead.d.ts +40 -0
  48. package/dist/timeline/scrollbar.d.ts +60 -0
  49. package/dist/timeline/scrubber-lane.d.ts +44 -0
  50. package/dist/timeline/subtitles/index.d.ts +1 -0
  51. package/dist/timeline/subtitles/subtitles-lane-item.d.ts +40 -0
  52. package/dist/timeline/subtitles/subtitles-lane.d.ts +38 -0
  53. package/dist/timeline/thumbnail/index.d.ts +1 -0
  54. package/dist/timeline/thumbnail/thumbnail-lane.d.ts +54 -0
  55. package/dist/timeline/thumbnail/thumbnail.d.ts +46 -0
  56. package/dist/timeline/timecode-display.d.ts +32 -0
  57. package/dist/timeline/timeline-lane.d.ts +70 -0
  58. package/dist/timeline/timeline.d.ts +222 -0
  59. package/dist/track/audio-vtt-file.d.ts +8 -0
  60. package/dist/track/subtitles-vtt-file.d.ts +8 -0
  61. package/dist/track/subtitles-vtt-track.d.ts +5 -0
  62. package/dist/track/thumbnail-vtt-file.d.ts +11 -0
  63. package/dist/track/track.d.ts +12 -0
  64. package/dist/track/vtt-file.d.ts +32 -0
  65. package/dist/types/common.d.ts +6 -0
  66. package/dist/types/events.d.ts +125 -0
  67. package/dist/types/index.d.ts +5 -0
  68. package/dist/types/model.d.ts +17 -0
  69. package/dist/types/track.d.ts +21 -0
  70. package/dist/types/types.d.ts +3 -0
  71. package/dist/types/vtt.d.ts +23 -0
  72. package/dist/util/animation-util.d.ts +11 -0
  73. package/dist/util/color-util.d.ts +3 -0
  74. package/dist/util/frame-util.d.ts +18 -0
  75. package/dist/util/image-util.d.ts +9 -0
  76. package/dist/util/observable-util.d.ts +2 -0
  77. package/dist/util/shape-util.d.ts +17 -0
  78. package/dist/util/time-util.d.ts +6 -0
  79. package/dist/util/window-util.d.ts +4 -0
  80. package/dist/validators.d.ts +6 -0
  81. package/dist/video/playback-state.d.ts +23 -0
  82. package/dist/video/video-controller.d.ts +139 -0
  83. package/dist/video/video-hls-controller.d.ts +15 -0
  84. package/dist/video/video.d.ts +19 -0
  85. package/package.json +56 -0
  86. package/style/omakase-player.scss +144 -0
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ .omakase-player{display:block}.omakase-player .d-none{display:none}.omakase-player .d-block{display:block}.omakase-player .float-start{float:left!important}.omakase-player .float-end{float:right!important}.omakase-player .omakase-player-wrapper{display:block;position:relative;width:700px}.omakase-player .omakase-player-wrapper .omakase-video{display:block;width:100%;opacity:100%}.omakase-player .omakase-player-wrapper .omakase-video-controls .omakase-overlay-buttons .omakase-video-overlay-button{background-repeat:no-repeat;width:128px;height:128px;position:absolute;left:0;right:0;top:0;bottom:0;margin:auto;background-size:contain;background-position:center}.omakase-player .omakase-player-wrapper .omakase-video-controls .omakase-overlay-buttons .omakase-button-play{background-image:url(/images/play.svg)}.omakase-player .omakase-player-wrapper .omakase-video-controls .omakase-overlay-buttons .omakase-button-pause{background-image:url(/images/pause.svg)}.omakase-player .omakase-player-wrapper .omakase-video-controls .omakase-overlay-buttons .omakase-button-replay{background-image:url(/images/replay.svg)}.omakase-player .omakase-player-wrapper .omakase-video-controls .omakase-overlay-buttons .omakase-button-loading{background-image:url(/images/loading.svg);animation:loading 3s linear infinite}@keyframes loading{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.omakase-player .omakase-player-wrapper .omakase-help{font-family:Arial;font-size:13px;position:absolute;right:20px;top:20px}.omakase-player .omakase-player-wrapper .omakase-help .omakase-help-dropdown{position:absolute;right:0;top:0}.omakase-player .omakase-player-wrapper .omakase-help .omakase-help-dropdown .omakase-help-button{background-color:transparent;background-image:url(/images/help.svg);background-repeat:no-repeat;background-size:contain;background-position:center;border:0;padding:0;width:30px;height:30px;margin:0 0 5px}.omakase-player .omakase-player-wrapper .omakase-help .omakase-help-dropdown .omakase-help-menu{z-index:100;position:absolute;right:0;width:400px}.omakase-player .omakase-player-wrapper .omakase-help .omakase-help-dropdown .omakase-help-menu .omakase-help-group-title{background:rgb(2,171,141);display:block;padding:5px 10px;color:#fff;font-weight:700;text-align:left}.omakase-player .omakase-player-wrapper .omakase-help .omakase-help-dropdown .omakase-help-menu .omakase-help-group{overflow-y:scroll;display:block;height:200px;background:rgba(2,171,141,.2)}.omakase-player .omakase-player-wrapper .omakase-help .omakase-help-dropdown .omakase-help-menu .omakase-help-group .omakase-help-item{display:list-item;padding:5px 10px;color:#fff}.omakase-player .omakase-player-wrapper .omakase-help .omakase-help-dropdown .omakase-help-menu .omakase-help-group .omakase-help-item:hover{background-color:#a93232}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Copyright 2023 ByOmakase, LLC (https://byomakase.org)
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ *
16
+ * Includes rxjs <https://github.com/ReactiveX/rxjs>
17
+ * Available under Apache License Version 2.0
18
+ * <https://github.com/ReactiveX/rxjs/blob/master/LICENSE.txt>
19
+ */
20
+ import { SubtitlesVttTrack } from "../track/subtitles-vtt-track";
21
+ import { OmakaseTextTrack, OmakaseTextTrackCue, SubtitlesCreateEvent, SubtitlesEvent, SubtitlesVttTrackConfig } from "../types";
22
+ import { Observable, Subject } from "rxjs";
23
+ import { VideoController } from "../video/video-controller";
24
+ import { SubtitlesApi } from "../api/subtitles-api";
25
+ export declare class SubtitlesController implements SubtitlesApi {
26
+ protected currentTrack: OmakaseTextTrack<OmakaseTextTrackCue>;
27
+ protected videoController: VideoController;
28
+ protected subtitlesTracks: Map<string, OmakaseTextTrack<OmakaseTextTrackCue>>;
29
+ readonly onCreate$: Subject<SubtitlesCreateEvent>;
30
+ readonly onRemove$: Subject<SubtitlesEvent>;
31
+ readonly onShow$: Subject<SubtitlesEvent>;
32
+ readonly onHide$: Subject<SubtitlesEvent>;
33
+ constructor(videoController: VideoController);
34
+ private getDomTextTrack;
35
+ /***
36
+ * https://github.com/whatwg/html/issues/1921
37
+ * https://github.com/web-platform-tests/wpt/pull/6594
38
+ *
39
+ * @param track
40
+ * @private
41
+ */
42
+ private removeDomTextTrack;
43
+ private static createHTMLTrackElement;
44
+ createVttTrack(config: SubtitlesVttTrackConfig): Observable<SubtitlesVttTrack | undefined>;
45
+ getTracks(): OmakaseTextTrack<OmakaseTextTrackCue>[];
46
+ removeAllTracks(): void;
47
+ removeTrack(id: string): void;
48
+ getCurrentTrack(): OmakaseTextTrack<OmakaseTextTrackCue> | undefined;
49
+ showTrack(id?: string): void;
50
+ hideTrack(id?: string): void;
51
+ }
@@ -0,0 +1,38 @@
1
+ import { BaseComponent, ComponentConfig, ComponentConfigStyleComposed } from "../../common/component";
2
+ import Konva from "konva";
3
+ import { Dimension, HasRectMeasurement, Position, RectMeasurement } from "../../common/measurement";
4
+ import { AudioVttCue } from "../../types";
5
+ import { WithOptionalPartial } from "../../types/types";
6
+ export interface AudioTrackLaneItemStyle {
7
+ height: number;
8
+ cornerRadius: number;
9
+ opacity: number;
10
+ visible: boolean;
11
+ maxSampleFillLinearGradientColorStops: (number | string)[];
12
+ minSampleFillLinearGradientColorStops: (number | string)[];
13
+ }
14
+ export interface AudioTrackLaneItemConfig extends ComponentConfig<AudioTrackLaneItemStyle> {
15
+ audioVttCue: AudioVttCue;
16
+ x: number;
17
+ width: number;
18
+ listening?: boolean;
19
+ }
20
+ export declare class AudioTrackLaneItem extends BaseComponent<AudioTrackLaneItemConfig, AudioTrackLaneItemStyle, Konva.Group> implements HasRectMeasurement {
21
+ private x;
22
+ private width;
23
+ private listening;
24
+ private group;
25
+ private maxSampleBar;
26
+ private minSampleBar;
27
+ private audioVttCue;
28
+ constructor(config: ComponentConfigStyleComposed<AudioTrackLaneItemConfig>);
29
+ protected createCanvasNode(): Konva.Group;
30
+ private resolveMaxSampleBarHeight;
31
+ private resolveMinSampleBarHeight;
32
+ setPosition(position: WithOptionalPartial<Position, 'y'>): void;
33
+ getPosition(): Position;
34
+ getDimension(): Dimension;
35
+ getRect(): RectMeasurement;
36
+ getAudioVttCue(): AudioVttCue;
37
+ setAudioVttCue(audioVttCue: AudioVttCue): void;
38
+ }
@@ -0,0 +1,46 @@
1
+ import { BaseTimelineLane, TimelaneLaneConfig, TimelineLaneStyle } from "../timeline-lane";
2
+ import Konva from "konva";
3
+ import { Subject } from "rxjs";
4
+ import { ComponentConfigStyleComposed } from "../../common/component";
5
+ import { AudioTrackLaneItem } from "./audio-track-lane-item";
6
+ export interface AudioTrackLaneStyle extends TimelineLaneStyle {
7
+ paddingTop: number;
8
+ paddingBottom: number;
9
+ itemWidth: number;
10
+ itemMinPadding: number;
11
+ itemCornerRadius: number;
12
+ maxSampleFillLinearGradientColorStops: (number | string)[];
13
+ minSampleFillLinearGradientColorStops: (number | string)[];
14
+ }
15
+ export interface AudioTrackLaneConfig extends TimelaneLaneConfig<AudioTrackLaneStyle> {
16
+ audioVttFileUrl: string;
17
+ }
18
+ export declare class AudioTrackLane extends BaseTimelineLane<AudioTrackLaneConfig, AudioTrackLaneStyle> {
19
+ private _audioVttFileUrl;
20
+ protected readonly audioTrackLaneItemsMap: Map<number, AudioTrackLaneItem>;
21
+ protected timecodedGroup: Konva.Group;
22
+ protected timecodedEventCatcher: Konva.Rect;
23
+ protected audioTrackLaneItemsGroup: Konva.Group;
24
+ private audioVttFile;
25
+ private numOfInterpolations;
26
+ private itemPadding;
27
+ readonly onSettleLayout$: Subject<void>;
28
+ constructor(config: ComponentConfigStyleComposed<AudioTrackLaneConfig>);
29
+ protected createCanvasNode(): Konva.Group;
30
+ protected settleLayout(): void;
31
+ protected afterCanvasNodeInit(): void;
32
+ clearContent(): void;
33
+ private clearItems;
34
+ private getVisibleCues;
35
+ private createEntities;
36
+ private resolveNumOfCuesPerInterpolation;
37
+ private resolveCuesInterpolations;
38
+ private settleAll;
39
+ private resolveInterpolatedItemPosition;
40
+ private settlePosition;
41
+ private fetchAndCreateAudioTrack;
42
+ private fetchAudioTrackVttFile;
43
+ private isVttLoaded;
44
+ get audioVttFileUrl(): string;
45
+ set audioVttFileUrl(value: string);
46
+ }
@@ -0,0 +1 @@
1
+ export { AudioTrackLane } from './audio-track-lane';
@@ -0,0 +1,5 @@
1
+ export type { TimelaneLane } from './timeline-lane';
2
+ export * from "./marker";
3
+ export * from "./subtitles";
4
+ export * from "./thumbnail";
5
+ export * from "./audio-track";
@@ -0,0 +1,4 @@
1
+ export type { Marker } from "./marker";
2
+ export { MarkerLane } from "./marker-lane";
3
+ export { MomentMarker } from "./moment-marker";
4
+ export { PeriodMarker } from "./period-marker";
@@ -0,0 +1,55 @@
1
+ import { BaseComponent, Component, ComponentConfig } from "../../common/component";
2
+ import Konva from "konva";
3
+ import { OnMeasurementsChange, Position, VerticalMeasurement } from "../../common/measurement";
4
+ import { MarkerLane } from "./marker-lane";
5
+ import { Timeline } from "../timeline";
6
+ import { MarkerRenderType, MarkerSymbolType } from "./marker";
7
+ export interface MarkerHandleStyle {
8
+ color: string;
9
+ markerRenderType: MarkerRenderType;
10
+ markerSymbolType: MarkerSymbolType;
11
+ lineStrokeWidth: number;
12
+ lineOpacity: number;
13
+ }
14
+ export declare const MARKER_HANDLE_STYLE_DEFAULT: MarkerHandleStyle;
15
+ export interface MarkerHandleConfig<S extends MarkerHandleStyle> extends ComponentConfig<S> {
16
+ x: number;
17
+ editable: boolean;
18
+ }
19
+ export interface MarkerHandle<C extends MarkerHandleConfig<S>, S extends MarkerHandleStyle> extends Component<C, S, Konva.Group>, OnMeasurementsChange {
20
+ getPosition(): Position;
21
+ setPosition(position: Position): any;
22
+ getHandleGroup(): Konva.Group;
23
+ getSymbol(): Konva.Shape;
24
+ getVerticalMeasurement(): VerticalMeasurement;
25
+ setColor(color: string): any;
26
+ onDrag: (markerHandleGroup: Konva.Group) => void;
27
+ onDragEnd: (markerHandleGroup: Konva.Group) => void;
28
+ }
29
+ export declare abstract class BaseMarkerHandle<C extends MarkerHandleConfig<S>, S extends MarkerHandleStyle> extends BaseComponent<C, S, Konva.Group> implements MarkerHandle<C, S> {
30
+ protected x: number;
31
+ protected editable: boolean;
32
+ protected group: Konva.Group;
33
+ protected symbol: Konva.Shape;
34
+ protected line: Konva.Line;
35
+ protected handleGroup: Konva.Group;
36
+ protected markerLane: MarkerLane;
37
+ protected timeline: Timeline;
38
+ onDrag: (markerHandleGroup: Konva.Group) => void;
39
+ onDragEnd: (markerHandleGroup: Konva.Group) => void;
40
+ protected constructor(config: C, markerLane: MarkerLane, timeline: Timeline);
41
+ protected createCanvasNode(): Konva.Group;
42
+ protected abstract createSymbol(): Konva.Shape;
43
+ protected afterCanvasNodeInit(): void;
44
+ onMeasurementsChange(): void;
45
+ getVerticalMeasurement(): VerticalMeasurement;
46
+ getHandleGroup(): Konva.Group;
47
+ getSymbol(): Konva.Shape;
48
+ /**
49
+ * Caution: returns group that is draggable
50
+ */
51
+ getPosition(): Position;
52
+ setPosition(position: Position): void;
53
+ setColor(color: string): void;
54
+ setEditable(editable: boolean): void;
55
+ }
@@ -0,0 +1,38 @@
1
+ import { GenericMarker } from "./marker";
2
+ import Konva from "konva";
3
+ import { BaseTimelineLane, TimelaneLaneConfig, TimelineLaneStyle } from "../timeline-lane";
4
+ import { MarkerLaneApi } from "../../api/marker-lane-api";
5
+ import { ComponentConfigStyleComposed } from "../../common/component";
6
+ import { PeriodMarker, PeriodMarkerConfig } from "./period-marker";
7
+ import { MomentMarker, MomentMarkerConfig } from "./moment-marker";
8
+ import { Subject } from "rxjs";
9
+ import { MarkerFocusEvent } from "../../types";
10
+ export interface HasMarkerLane {
11
+ setMarkerLane(markerLane: MarkerLane): void;
12
+ }
13
+ export interface MarkerLaneStyle extends TimelineLaneStyle {
14
+ }
15
+ export interface MarkerLaneConfig extends TimelaneLaneConfig<MarkerLaneStyle> {
16
+ }
17
+ export declare class MarkerLane extends BaseTimelineLane<MarkerLaneConfig, MarkerLaneStyle> implements MarkerLaneApi {
18
+ protected markersGroup: Konva.Group;
19
+ private markers;
20
+ private markersMap;
21
+ private markerInFocus;
22
+ readonly onMarkerFocus$: Subject<MarkerFocusEvent>;
23
+ constructor(config: ComponentConfigStyleComposed<MarkerLaneConfig>);
24
+ protected createCanvasNode(): Konva.Group;
25
+ protected settleLayout(): void;
26
+ destroy(): void;
27
+ clearContent(): void;
28
+ createMomentMarker(config: MomentMarkerConfig): MomentMarker;
29
+ createPeriodMarker(config: PeriodMarkerConfig): PeriodMarker;
30
+ addMarker(marker: GenericMarker): GenericMarker;
31
+ removeAllMarkers(): void;
32
+ removeMarker(id: string): void;
33
+ getMarker(id: string): GenericMarker;
34
+ getMarkers(): GenericMarker[];
35
+ focusMarker(id: string): void;
36
+ getMarkerInFocus(): GenericMarker;
37
+ private moveToTop;
38
+ }
@@ -0,0 +1,64 @@
1
+ import { OnMeasurementsChange } from "../../common/measurement";
2
+ import { BaseComponent, Component, ComponentConfig } from "../../common/component";
3
+ import Konva from "konva";
4
+ import { HasMarkerLane, MarkerLane } from "./marker-lane";
5
+ import { MarkerChangeEvent, MarkerEvent, TimeObservation } from "../../types";
6
+ import { Subject } from "rxjs";
7
+ import { Timeline } from "../timeline";
8
+ export type MarkerRenderType = 'lane' | 'spanning';
9
+ export type MarkerSymbolType = 'square' | 'triangle' | 'circle';
10
+ export interface MarkerStyle {
11
+ color: string;
12
+ renderType: MarkerRenderType;
13
+ symbolType: MarkerSymbolType;
14
+ }
15
+ export declare const MARKER_STYLE_DEFAULT: MarkerStyle;
16
+ export interface MarkerConfig<T extends TimeObservation, S extends MarkerStyle> extends ComponentConfig<S> {
17
+ id: string;
18
+ observation: T;
19
+ description?: string;
20
+ editable?: boolean;
21
+ }
22
+ export interface Marker<T extends TimeObservation, C extends MarkerConfig<T, S>, S extends MarkerStyle, E extends MarkerChangeEvent> extends Component<C, S, Konva.Group>, HasMarkerLane, OnMeasurementsChange {
23
+ onChange$: Subject<E>;
24
+ onClick$: Subject<MarkerEvent>;
25
+ onMouseEnter$: Subject<MarkerEvent>;
26
+ onMouseLeave$: Subject<MarkerEvent>;
27
+ get style(): S;
28
+ setStyle(value: Partial<S>): any;
29
+ getId(): string;
30
+ getDescription(): string;
31
+ getTimeObservation(): T;
32
+ setTimeObservation(timeObservation: T): void;
33
+ setEditable(editable: boolean): any;
34
+ setTimeline(timeline: Timeline): any;
35
+ }
36
+ export type GenericMarker = Marker<TimeObservation, MarkerConfig<TimeObservation, MarkerStyle>, MarkerStyle, MarkerChangeEvent>;
37
+ export declare abstract class BaseMarker<T extends TimeObservation, C extends MarkerConfig<T, S>, S extends MarkerStyle, E extends MarkerChangeEvent> extends BaseComponent<C, S, Konva.Group> implements Marker<T, C, S, E> {
38
+ protected id: string;
39
+ protected observation: T;
40
+ protected description: string;
41
+ protected editable: boolean;
42
+ protected group: Konva.Group;
43
+ protected markerLane: MarkerLane;
44
+ protected timeline: Timeline;
45
+ readonly onChange$: Subject<E>;
46
+ readonly onClick$: Subject<MarkerEvent>;
47
+ readonly onMouseEnter$: Subject<MarkerEvent>;
48
+ readonly onMouseLeave$: Subject<MarkerEvent>;
49
+ protected constructor(config: C);
50
+ protected createCanvasNode(): Konva.Group;
51
+ protected afterCanvasNodeInit(): void;
52
+ onMeasurementsChange(): void;
53
+ destroy(): void;
54
+ abstract onChange(): any;
55
+ setTimeline(timeline: Timeline): void;
56
+ setMarkerLane(markerLane: MarkerLane): void;
57
+ getId(): string;
58
+ getDescription(): string;
59
+ getTimeObservation(): T;
60
+ setTimeObservation(timeObservation: T): void;
61
+ setEditable(editable: boolean): void;
62
+ get style(): S;
63
+ setStyle(value: Partial<S>): void;
64
+ }
@@ -0,0 +1,31 @@
1
+ import Konva from "konva";
2
+ import { BaseMarker, MarkerConfig, MarkerStyle } from "./marker";
3
+ import { MomentMarkerChangeEvent, MomentObservation } from "../../types";
4
+ import { BaseMarkerHandle, MarkerHandleConfig, MarkerHandleStyle } from "./marker-handle";
5
+ import { MarkerLane } from "./marker-lane";
6
+ import { Timeline } from "../timeline";
7
+ import { ComponentConfigStyleComposed } from "../../common/component";
8
+ export interface MomentMarkerHandleStyle extends MarkerHandleStyle {
9
+ markerSymbolSize: number;
10
+ }
11
+ export interface MomentMarkerHandleConfig extends MarkerHandleConfig<MomentMarkerHandleStyle> {
12
+ }
13
+ export declare class MomentMarkerHandle extends BaseMarkerHandle<MomentMarkerHandleConfig, MomentMarkerHandleStyle> {
14
+ constructor(config: ComponentConfigStyleComposed<MomentMarkerHandleConfig>, markerLane: MarkerLane, timeline: Timeline);
15
+ protected createSymbol(): Konva.Shape;
16
+ }
17
+ export interface MomentMarkerStyle extends MarkerStyle {
18
+ }
19
+ export interface MomentMarkerConfig extends MarkerConfig<MomentObservation, MomentMarkerStyle> {
20
+ }
21
+ export declare class MomentMarker extends BaseMarker<MomentObservation, MomentMarkerConfig, MomentMarkerStyle, MomentMarkerChangeEvent> {
22
+ private markerHandle;
23
+ constructor(config: ComponentConfigStyleComposed<MomentMarkerConfig>);
24
+ protected createCanvasNode(): Konva.Group;
25
+ protected afterCanvasNodeInit(): void;
26
+ private initMarkerHandle;
27
+ onChange(): void;
28
+ onMeasurementsChange(): void;
29
+ settlePosition(): void;
30
+ setEditable(editable: boolean): void;
31
+ }
@@ -0,0 +1,43 @@
1
+ import Konva from "konva";
2
+ import { BaseMarker, MarkerConfig, MarkerStyle } from "./marker";
3
+ import { PeriodMarkerChangeEvent, PeriodObservation } from "../../types";
4
+ import { BaseMarkerHandle, MarkerHandleConfig, MarkerHandleStyle } from "./marker-handle";
5
+ import { Timeline } from "../timeline";
6
+ import { MarkerLane } from "./marker-lane";
7
+ import { ComponentConfigStyleComposed } from "../../common/component";
8
+ export interface PeriodMarkerHandleStyle extends MarkerHandleStyle {
9
+ markerSymbolSize: number;
10
+ periodMarkerHandleType: 'start' | 'end';
11
+ }
12
+ export interface PeriodMarkerHandleConfig extends MarkerHandleConfig<PeriodMarkerHandleStyle> {
13
+ }
14
+ export declare class PeriodMarkerHandle extends BaseMarkerHandle<PeriodMarkerHandleConfig, PeriodMarkerHandleStyle> {
15
+ constructor(config: ComponentConfigStyleComposed<PeriodMarkerHandleConfig>, markerLane: MarkerLane, timeline: Timeline);
16
+ protected createSymbol(): Konva.Shape;
17
+ }
18
+ export interface PeriodMarkerStyle extends MarkerStyle {
19
+ selectedAreaOpacity: number;
20
+ markerHandleAreaOpacity: number;
21
+ }
22
+ export interface PeriodMarkerConfig extends MarkerConfig<PeriodObservation, PeriodMarkerStyle> {
23
+ }
24
+ export declare class PeriodMarker extends BaseMarker<PeriodObservation, PeriodMarkerConfig, PeriodMarkerStyle, PeriodMarkerChangeEvent> {
25
+ private startMarkerHandle;
26
+ private endMarkerHandle;
27
+ private selectedAreaRect;
28
+ private markerHandleRect;
29
+ constructor(config: ComponentConfigStyleComposed<PeriodMarkerConfig>);
30
+ protected createCanvasNode(): Konva.Group;
31
+ onChange(): void;
32
+ onMeasurementsChange(): void;
33
+ private initSelectedAreaRect;
34
+ private initStartMarkerHandle;
35
+ private initEndMarkerHandle;
36
+ private settlePosition;
37
+ private settleMeasurements;
38
+ setTimeObservation(timeObservation: PeriodObservation): void;
39
+ setEditable(editable: boolean): void;
40
+ protected afterCanvasNodeInit(): void;
41
+ private hasStart;
42
+ private hasEnd;
43
+ }
@@ -0,0 +1,36 @@
1
+ import { BaseComponent, ComponentConfig, ComponentConfigStyleComposed } from "../common/component";
2
+ import Konva from "konva";
3
+ import { OnMeasurementsChange } from "../common/measurement";
4
+ import { Timeline } from "./timeline";
5
+ import { StylesProvider } from "../common/styles-provider";
6
+ export interface PlayheadHoverStyle {
7
+ x: number;
8
+ y: number;
9
+ height: number;
10
+ fill: string;
11
+ fillSnapped: string;
12
+ lineWidth: number;
13
+ symbolY: number;
14
+ symbolHeight: number;
15
+ textFontSize: number;
16
+ textFill: string;
17
+ textSnappedFill: string;
18
+ visible: boolean;
19
+ }
20
+ export interface PlayheadHoverConfig extends ComponentConfig<PlayheadHoverStyle> {
21
+ }
22
+ export declare class PlayheadHover extends BaseComponent<PlayheadHoverConfig, PlayheadHoverStyle, Konva.Group> implements OnMeasurementsChange {
23
+ protected readonly stylesProvider: StylesProvider;
24
+ protected group: Konva.Group;
25
+ protected line: Konva.Line;
26
+ protected symbol: Konva.Circle;
27
+ protected label: Konva.Label;
28
+ protected text: Konva.Text;
29
+ private timeline;
30
+ constructor(config: Partial<ComponentConfigStyleComposed<PlayheadHoverConfig>>, timeline: Timeline);
31
+ protected createCanvasNode(): Konva.Group;
32
+ protected afterCanvasNodeInit(): void;
33
+ onMeasurementsChange(): void;
34
+ sync(x: number, isSnapped?: boolean): void;
35
+ toggleVisible(visible: boolean): void;
36
+ }
@@ -0,0 +1,40 @@
1
+ import { BaseComponent, ComponentConfig, ComponentConfigStyleComposed } from "../common/component";
2
+ import Konva from "konva";
3
+ import { OnMeasurementsChange } from "../common/measurement";
4
+ import { Timeline } from "./timeline";
5
+ import { VideoController } from "../video/video-controller";
6
+ export interface PlayheadStyle {
7
+ visible: boolean;
8
+ fill: string;
9
+ lineWidth: number;
10
+ symbolHeight: number;
11
+ scrubberHeight: number;
12
+ backgroundFill: string;
13
+ backgroundOpacity: number;
14
+ playProgressFill: string;
15
+ playProgressOpacity: number;
16
+ bufferedFill: string;
17
+ bufferedOpacity: number;
18
+ }
19
+ export interface PlayheadConfig extends ComponentConfig<PlayheadStyle> {
20
+ }
21
+ export declare class Playhead extends BaseComponent<PlayheadConfig, PlayheadStyle, Konva.Group> implements OnMeasurementsChange {
22
+ protected timeline: Timeline;
23
+ protected videoController: VideoController;
24
+ protected group: Konva.Group;
25
+ protected background: Konva.Rect;
26
+ protected playProgressBackground: Konva.Rect;
27
+ protected playheadGroup: Konva.Group;
28
+ protected playheadLine: Konva.Line;
29
+ protected playheadSymbol: Konva.Line;
30
+ protected bufferedGroup: Konva.Group;
31
+ constructor(config: Partial<ComponentConfigStyleComposed<PlayheadConfig>>, timeline: Timeline, videoController: VideoController);
32
+ protected createCanvasNode(): Konva.Group;
33
+ protected afterCanvasNodeInit(): void;
34
+ onMeasurementsChange(): void;
35
+ getPlayheadPosition(): number;
36
+ protected settleLayout(): void;
37
+ private doPlayProgress;
38
+ private doBufferingProgress;
39
+ private createBuffers;
40
+ }
@@ -0,0 +1,60 @@
1
+ import { BaseComponent, ComponentConfig, ComponentConfigStyleComposed } from "../common/component";
2
+ import Konva from "konva";
3
+ import { HasRectMeasurement, HorizontalMeasurement, OnMeasurementsChange, Position, RectMeasurement } from "../common/measurement";
4
+ import { ScrollbarScrollEvent, ScrollbarZoomEvent } from "../types";
5
+ import { Subject } from "rxjs";
6
+ export interface ScrollableHorizontally {
7
+ setHorizontalScrollPercent(percent: number): void;
8
+ getHorizontalScrollPercent(): number;
9
+ getScrollHandleHorizontalMeasurement(scrollbarWidth: number): HorizontalMeasurement;
10
+ }
11
+ export interface ScrollbarStyle {
12
+ height: number;
13
+ backgroundFill: string;
14
+ backgroundFillOpacity: number;
15
+ handleBarFill: string;
16
+ handleBarOpacity: number;
17
+ handleOpacity: number;
18
+ }
19
+ export interface ScrollbarConfig extends ComponentConfig<ScrollbarStyle> {
20
+ x: number;
21
+ y: number;
22
+ width: number;
23
+ zoomMax: number;
24
+ scrollStepNumberOfDivisions: number;
25
+ }
26
+ export declare class Scrollbar extends BaseComponent<ScrollbarConfig, ScrollbarStyle, Konva.Group> implements OnMeasurementsChange, HasRectMeasurement {
27
+ protected x: number;
28
+ protected y: number;
29
+ protected width: number;
30
+ protected scrollStepNumberOfDivisions: number;
31
+ protected zoomMax: number;
32
+ protected minHandleBarWidth: any;
33
+ private group;
34
+ private handleGroup;
35
+ private background;
36
+ private handleBar;
37
+ private leftZoomHandle;
38
+ private rightZoomHandle;
39
+ readonly onScroll$: Subject<ScrollbarScrollEvent>;
40
+ readonly onZoom$: Subject<ScrollbarZoomEvent>;
41
+ constructor(config: Partial<ComponentConfigStyleComposed<ScrollbarConfig>>);
42
+ protected createCanvasNode(): Konva.Group;
43
+ protected afterCanvasNodeInit(): void;
44
+ onMeasurementsChange(): void;
45
+ onStyleChange(): void;
46
+ private getScrollHandleMaxX;
47
+ private getConstrainedHandleBarX;
48
+ private clickScrollTo;
49
+ private scrollTo;
50
+ private scrollToEased;
51
+ private calculateHandleBarWidthFromZoomRatioPercent;
52
+ getZoomPercent(): number;
53
+ getScrollHandlePercent(): number;
54
+ updateScrollHandle(scrollable: ScrollableHorizontally): void;
55
+ private syncLeftRightHandles;
56
+ setWidth(value: number): void;
57
+ setPosition(position: Position): void;
58
+ getPosition(): Position;
59
+ getRect(): RectMeasurement;
60
+ }
@@ -0,0 +1,44 @@
1
+ import Konva from "konva";
2
+ import { BaseTimelineLane, TimelaneLaneConfig, TimelineLaneStyle } from "./timeline-lane";
3
+ import { Subject } from "rxjs";
4
+ import { ClickEvent, MouseEnterEvent, MouseLeaveEvent, MouseMoveEvent, MouseOutEvent, MouseOverEvent } from "../types";
5
+ import { TimecodeDisplay } from "./timecode-display";
6
+ import { VideoController } from "../video/video-controller";
7
+ import { ComponentConfigStyleComposed } from "../common/component";
8
+ export interface ScrubberLaneStyle extends TimelineLaneStyle {
9
+ tickDivisor: number;
10
+ tickDivisionMinWidth: number;
11
+ tickFill: string;
12
+ tickHeight: number;
13
+ divisionTickFill: string;
14
+ divisionTickHeight: number;
15
+ timecodeShowFirst: boolean;
16
+ timecodeFontSize: number;
17
+ timecodeFill: string;
18
+ }
19
+ export interface ScrubberLaneConfig extends TimelaneLaneConfig<ScrubberLaneStyle> {
20
+ }
21
+ export declare class ScrubberLane extends BaseTimelineLane<ScrubberLaneConfig, ScrubberLaneStyle> {
22
+ protected tickDivisionWidth: number;
23
+ protected tickTotalDivisions: number;
24
+ protected timecodeDisplay: TimecodeDisplay;
25
+ protected timecodedGroup: Konva.Group;
26
+ protected timecodedEventCatcher: Konva.Rect;
27
+ protected ticksGroup: Konva.Group;
28
+ protected videoController: VideoController;
29
+ readonly onClick$: Subject<ClickEvent>;
30
+ readonly onMouseEnter$: Subject<MouseEnterEvent>;
31
+ readonly onMouseOver$: Subject<MouseOverEvent>;
32
+ readonly onMouseMove$: Subject<MouseMoveEvent>;
33
+ readonly onMouseOut$: Subject<MouseOutEvent>;
34
+ readonly onMouseLeave$: Subject<MouseLeaveEvent>;
35
+ constructor(config: ComponentConfigStyleComposed<ScrubberLaneConfig>, videoController: VideoController);
36
+ protected createCanvasNode(): Konva.Group;
37
+ protected settleLayout(): void;
38
+ protected afterCanvasNodeInit(): void;
39
+ onStyleChange(): void;
40
+ destroy(): void;
41
+ clearContent(): void;
42
+ refreshTimeDivisions(forceCreate?: boolean): void;
43
+ private resolveTimeDivisionWidth;
44
+ }
@@ -0,0 +1 @@
1
+ export { SubtitlesLane } from './subtitles-lane';
@@ -0,0 +1,40 @@
1
+ import { BaseComponent, ComponentConfig, ComponentConfigStyleComposed } from "../../common/component";
2
+ import Konva from "konva";
3
+ import { Dimension, HasRectMeasurement, HorizontalMeasurement, OnMeasurementsChange, Position, RectMeasurement } from "../../common/measurement";
4
+ import { Comparable, OmakaseTextTrackCue } from "../../types";
5
+ import { WithOptionalPartial } from "../../types/types";
6
+ import { SubtitlesLane } from "./subtitles-lane";
7
+ export interface SubtitlesLaneItemStyle {
8
+ height: number;
9
+ fill: string;
10
+ opacity: number;
11
+ visible: boolean;
12
+ }
13
+ export interface SubtitlesLaneItemConfig extends ComponentConfig<SubtitlesLaneItemStyle> {
14
+ textTrackCue: OmakaseTextTrackCue;
15
+ x: number;
16
+ width: number;
17
+ listening?: boolean;
18
+ }
19
+ export declare class SubtitlesLaneItem extends BaseComponent<SubtitlesLaneItemConfig, SubtitlesLaneItemStyle, Konva.Group> implements OnMeasurementsChange, HasRectMeasurement, Comparable<SubtitlesLaneItem> {
20
+ private x;
21
+ private width;
22
+ private listening;
23
+ private group;
24
+ private backgroundRect;
25
+ private textTrackCue;
26
+ private subtitlesLane;
27
+ constructor(config: ComponentConfigStyleComposed<SubtitlesLaneItemConfig>, subtitlesLane: SubtitlesLane);
28
+ protected createCanvasNode(): Konva.Group;
29
+ onMeasurementsChange(): void;
30
+ setPosition(position: WithOptionalPartial<Position, 'y'>): void;
31
+ getPosition(): Position;
32
+ getDimension(): Dimension;
33
+ getRect(): RectMeasurement;
34
+ getHorizontalMeasurement(): HorizontalMeasurement;
35
+ setHorizontalMeasurement(horizontalMeasurement: HorizontalMeasurement): void;
36
+ setVisible(visible: boolean): void;
37
+ getTextTrackCue(): OmakaseTextTrackCue;
38
+ setTextTrackCue(textTrackCue: OmakaseTextTrackCue): void;
39
+ compareTo(o: SubtitlesLaneItem): number;
40
+ }
@@ -0,0 +1,38 @@
1
+ import { BaseTimelineLane, TimelaneLaneConfig, TimelineLaneStyle } from "../timeline-lane";
2
+ import Konva from "konva";
3
+ import { Subject } from "rxjs";
4
+ import { HorizontalMeasurement } from "../../common/measurement";
5
+ import { OmakaseTextTrackCue } from "../../types";
6
+ import { SubtitlesLaneItem } from "./subtitles-lane-item";
7
+ import { ComponentConfigStyleComposed } from "../../common/component";
8
+ export interface SubtitlesLaneStyle extends TimelineLaneStyle {
9
+ paddingTop: number;
10
+ paddingBottom: number;
11
+ subtitlesLaneItemOpacity: number;
12
+ subtitlesLaneItemFill: string;
13
+ }
14
+ export interface SubtitlesLaneConfig extends TimelaneLaneConfig<SubtitlesLaneStyle> {
15
+ subtitlesVttUrl: string;
16
+ }
17
+ export declare class SubtitlesLane extends BaseTimelineLane<SubtitlesLaneConfig, SubtitlesLaneStyle> {
18
+ private _subtitlesVttUrl;
19
+ protected readonly subtitlesLaneItemsMap: Map<number, SubtitlesLaneItem>;
20
+ protected timecodedGroup: Konva.Group;
21
+ protected timecodedEventCatcher: Konva.Rect;
22
+ protected subtitlesLaneItemsGroup: Konva.Group;
23
+ private subtitlesVttFile;
24
+ readonly onSettleLayout$: Subject<void>;
25
+ constructor(config: ComponentConfigStyleComposed<SubtitlesLaneConfig>);
26
+ protected createCanvasNode(): Konva.Group;
27
+ protected settleLayout(): void;
28
+ protected afterCanvasNodeInit(): void;
29
+ clearContent(): void;
30
+ private clearItems;
31
+ private createEntities;
32
+ resolveItemHorizontalMeasurement(textTrackCue: OmakaseTextTrackCue): HorizontalMeasurement;
33
+ private fetchAndCreateSubtitles;
34
+ private fetchSubtitlesVttFile;
35
+ isVttLoaded(): boolean;
36
+ get subtitlesVttUrl(): string;
37
+ set subtitlesVttUrl(value: string);
38
+ }