@evercam/ui 0.0.41 → 0.0.43

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.
@@ -2,17 +2,31 @@ import * as d3 from "d3";
2
2
  import Vue from "vue";
3
3
  import { D3ZoomEvent } from "d3";
4
4
  import { TimelineAxesConfig, TimelineAxis, TimelineTicksConfig, Timestamp } from '../types';
5
- export type TimelineEvent = {
5
+ export type TimelineBarEvent = {
6
6
  timestamp: string | Date;
7
7
  [key: string]: any;
8
- } | {
8
+ };
9
+ export type TimelineRangeEvent = {
9
10
  startDate: string | Date;
10
11
  endDate: string | Date;
11
12
  [key: string]: any;
12
13
  };
14
+ export type TimelineCountEvent = {
15
+ timestamp: string | Date;
16
+ count: number;
17
+ [key: string]: any;
18
+ };
19
+ export type TimelineEvent = TimelineBarEvent | TimelineRangeEvent | TimelineCountEvent;
20
+ export declare enum TimelineChartType {
21
+ bars = "bars",
22
+ lineGraph = "lineGraph"
23
+ }
13
24
  export type TimelineEventsGroup = {
14
25
  label: string;
15
26
  color: string;
27
+ isLoading?: Boolean;
28
+ isHidden?: Boolean;
29
+ chartType?: TimelineChartType;
16
30
  events: Array<TimelineEvent>;
17
31
  };
18
32
  export type TimelineEventsByType = {
@@ -32,7 +46,7 @@ declare const _default: import("vue/types/vue").ExtendedVue<Vue<Record<string, a
32
46
  zoomBehavior: d3.ZoomBehavior<SVGSVGElement, unknown>;
33
47
  isMouseDown: boolean;
34
48
  axisHeight: number;
35
- eventGroupHeight: number;
49
+ barChartHeight: number;
36
50
  eventGroupPadding: number;
37
51
  isHoveringEvent: boolean;
38
52
  hoveredEvent: TimelineEvent;
@@ -41,48 +55,95 @@ declare const _default: import("vue/types/vue").ExtendedVue<Vue<Record<string, a
41
55
  eventTooltipStyle: {};
42
56
  hoveredEventType: string;
43
57
  utcOffset: number;
58
+ lastTransform: {
59
+ x: number;
60
+ k: number;
61
+ };
62
+ transformDiff: {
63
+ translation: number;
64
+ scale: number;
65
+ };
66
+ defaultLineGraphChartHeight: number;
67
+ yScale: d3.ScaleLinear<any, any, never>;
68
+ hoveredCounts: {
69
+ count: number;
70
+ type: string;
71
+ }[];
72
+ countsByTimestamp: Record<string, Record<string, number>>;
73
+ dotsByTimestamp: Record<string, d3.Selection<SVGCircleElement, any, any, any>[]>;
74
+ visibleFrom: Date;
75
+ visibleTo: Date;
44
76
  }, {
45
- tzStringToDate(timestamp: Timestamp): Date;
46
- dateToTzString(date: Date): string;
47
- getFormattedTimestamp(timestamp: Timestamp): string;
48
- handleResize({ contentRect }: ResizeObserverEntry): void;
49
- initTimeline(): void;
77
+ initTimeline(startDate?: string, endDate?: string): void;
50
78
  initRefs(): void;
51
79
  initSvg(): void;
80
+ initDefs(): void;
52
81
  initUtcOffset(): void;
53
- initTimeScale(): void;
82
+ initTimeScale(start?: string, end?: string): void;
54
83
  initXAxes(): void;
55
- createAxis(axisName: TimelineAxis): d3.Axis<Date>;
56
- getAxisTicksConfig(configs: TimelineTicksConfig[]): {
57
- formatFn: (d: Date) => string;
58
- interval: any;
59
- };
84
+ initYScale(): void;
60
85
  initZoomBehavior(): void;
61
86
  initSelectedTimestampCursor(): void;
87
+ updateAndRedrawTimeline(): void;
88
+ clearTimeline(): void;
62
89
  repositionSelectedTimestampCursor(): void;
63
90
  updateCurrentTimeScaleDensity(): void;
64
91
  registerEventsListeners(): void;
92
+ emitVisibleInterval(): void;
93
+ createAxis(axisName: TimelineAxis): d3.Axis<Date>;
94
+ getAxisTicksConfig(configs: TimelineTicksConfig[]): {
95
+ formatFn: (d: Date) => string;
96
+ interval: any;
97
+ };
98
+ handleResize({ contentRect }: ResizeObserverEntry): void;
99
+ handleDarkModeChange(): void;
65
100
  handleMouseDown(): void;
66
101
  handleDocumentMouseUp(): void;
67
102
  handleMouseLeave(): void;
68
103
  handleMouseMove(event: MouseEvent): void;
69
104
  handleClick(event: MouseEvent): void;
70
- handleEventMouseOver(_event: MouseEvent, eventData: TimelineEvent, eventType: string): void;
71
- handleEventMouseOut(): void;
105
+ handleLineMouseOver(_event: MouseEvent, eventData: TimelineCountEvent, eventType: string): void;
106
+ handleLineMouseOut(): void;
107
+ handleBarMouseOver(_event: MouseEvent, eventData: TimelineEvent, eventType: string): void;
108
+ handleBarMouseOut(): void;
109
+ handleLabelMouseOver(groupType: string): void;
110
+ handleLabelMouseLeave(groupType: string): void;
72
111
  handleZoom(event: D3ZoomEvent<SVGSVGElement, any>): void;
73
112
  zoomToStartAndEndDates(): void;
74
113
  rescaleAxis(axisName: string, newScale: d3.ScaleTime<any, any, unknown>): void;
75
114
  translateTicksText(axisName: string): void;
76
- updateEventsRects(): void;
115
+ updateBarCharts(): void;
116
+ updateLineGraphs(): void;
117
+ updateLineGraphHoverZones(): void;
77
118
  getEventRectX(d: TimelineEvent): any;
78
119
  getEventRectWidth(d: TimelineEvent): number;
79
120
  drawEventsGroups(): void;
121
+ drawLineGraphEventsGroups(): void;
122
+ drawLineGraph({ events, gElement, color, type, }: {
123
+ events: TimelineEvent[];
124
+ gElement: d3.Selection<SVGGElement, any, any, any>;
125
+ color: string;
126
+ type: string;
127
+ }): void;
128
+ drawLineGraphHoverZones({ events, gElement, color, type, }: {
129
+ events: TimelineCountEvent[];
130
+ gElement: d3.Selection<SVGGElement, any, any, any>;
131
+ color: string;
132
+ type: string;
133
+ }): void;
134
+ drawBarEventsGroups(): void;
135
+ drawProgressIndicator({ yPosition, type, isLoading, }: {
136
+ yPosition: number;
137
+ type: string;
138
+ color: string;
139
+ isLoading: Boolean | undefined;
140
+ }): void;
80
141
  drawBackground({ color, yPosition, gElement, }: {
81
142
  gElement: d3.Selection<SVGGElement, any, any, any>;
82
143
  yPosition: number;
83
144
  color: string;
84
145
  }): void;
85
- drawEvents({ events, gElement, yPosition, color, type, }: {
146
+ drawBars({ events, gElement, yPosition, color, type, }: {
86
147
  events: TimelineEvent[];
87
148
  gElement: d3.Selection<SVGGElement, any, any, any>;
88
149
  yPosition: number;
@@ -97,7 +158,15 @@ declare const _default: import("vue/types/vue").ExtendedVue<Vue<Record<string, a
97
158
  }): void;
98
159
  getTextFillColor(baseColor: string): string;
99
160
  getLabelBackgroundColor(baseColor: string): string;
100
- onDarkModeChange(): void;
161
+ tzStringToDate(timestamp: Timestamp): Date;
162
+ dateToTzString(date: Date): string;
163
+ getCurrentTimeBounds(): {
164
+ startDate: string;
165
+ endDate: string;
166
+ };
167
+ getFormattedTimestamp(timestamp: Timestamp): string;
168
+ fillTimeGaps(events: TimelineEvent[]): TimelineEvent[];
169
+ getNormalizedEvents(events: TimelineEvent[]): TimelineEvent[];
101
170
  }, {
102
171
  classes: {
103
172
  wrapper: string;
@@ -105,12 +174,20 @@ declare const _default: import("vue/types/vue").ExtendedVue<Vue<Record<string, a
105
174
  tooltipSlot: string;
106
175
  eventTooltipSlot: string;
107
176
  };
177
+ lineGraphGroups: TimelineEventsByType;
178
+ lineGraphChartHeight: number;
179
+ barGroups: TimelineEventsByType;
180
+ hasLineGraphChart: boolean;
108
181
  labelRectWidth: number;
109
182
  combinedXAxesHeight: number;
110
183
  timelineHeight: number;
184
+ filteredEventsGroups: TimelineEventsByType;
111
185
  allEventsSorted: TimelineEvent[];
112
186
  oldestEvent: TimelineEvent;
113
187
  latestEvent: TimelineEvent;
188
+ allLineChartTimestamps: string[];
189
+ placeholderLineChartGroup: TimelineEvent[];
190
+ normalizedLineGraphGroups: TimelineEventsByType;
114
191
  }, {
115
192
  eventsGroups: {};
116
193
  xAxesConfig: TimelineAxesConfig;
@@ -120,5 +197,7 @@ declare const _default: import("vue/types/vue").ExtendedVue<Vue<Record<string, a
120
197
  selectedTimestamp: string;
121
198
  showEventTooltip: boolean;
122
199
  disableZoom: boolean;
200
+ normalizeEvents: boolean;
201
+ flattenLineGraphEnds: boolean;
123
202
  }, {}, import("vue/types/v3-component-options").ComponentOptionsMixin, import("vue/types/v3-component-options").ComponentOptionsMixin>;
124
203
  export default _default;
@@ -184,7 +184,7 @@ export declare const components: {
184
184
  zoomBehavior: import("d3-zoom").ZoomBehavior<SVGSVGElement, unknown>;
185
185
  isMouseDown: boolean;
186
186
  axisHeight: number;
187
- eventGroupHeight: number;
187
+ barChartHeight: number;
188
188
  eventGroupPadding: number;
189
189
  isHoveringEvent: boolean;
190
190
  hoveredEvent: import('./components/ETimeline.vue').TimelineEvent;
@@ -193,48 +193,95 @@ export declare const components: {
193
193
  eventTooltipStyle: {};
194
194
  hoveredEventType: string;
195
195
  utcOffset: number;
196
+ lastTransform: {
197
+ x: number;
198
+ k: number;
199
+ };
200
+ transformDiff: {
201
+ translation: number;
202
+ scale: number;
203
+ };
204
+ defaultLineGraphChartHeight: number;
205
+ yScale: import("d3-scale").ScaleLinear<any, any, never>;
206
+ hoveredCounts: {
207
+ count: number;
208
+ type: string;
209
+ }[];
210
+ countsByTimestamp: Record<string, Record<string, number>>;
211
+ dotsByTimestamp: Record<string, import("d3-selection").Selection<SVGCircleElement, any, any, any>[]>;
212
+ visibleFrom: Date;
213
+ visibleTo: Date;
196
214
  }, {
197
- tzStringToDate(timestamp: import('./types').Timestamp): Date;
198
- dateToTzString(date: Date): string;
199
- getFormattedTimestamp(timestamp: import('./types').Timestamp): string;
200
- handleResize({ contentRect }: ResizeObserverEntry): void;
201
- initTimeline(): void;
215
+ initTimeline(startDate?: string | undefined, endDate?: string | undefined): void;
202
216
  initRefs(): void;
203
217
  initSvg(): void;
218
+ initDefs(): void;
204
219
  initUtcOffset(): void;
205
- initTimeScale(): void;
220
+ initTimeScale(start?: string | undefined, end?: string | undefined): void;
206
221
  initXAxes(): void;
207
- createAxis(axisName: import('./types').TimelineAxis): import("d3-axis").Axis<Date>;
208
- getAxisTicksConfig(configs: import('./types').TimelineTicksConfig[]): {
209
- formatFn: (d: Date) => string;
210
- interval: any;
211
- };
222
+ initYScale(): void;
212
223
  initZoomBehavior(): void;
213
224
  initSelectedTimestampCursor(): void;
225
+ updateAndRedrawTimeline(): void;
226
+ clearTimeline(): void;
214
227
  repositionSelectedTimestampCursor(): void;
215
228
  updateCurrentTimeScaleDensity(): void;
216
229
  registerEventsListeners(): void;
230
+ emitVisibleInterval(): void;
231
+ createAxis(axisName: import('./types').TimelineAxis): import("d3-axis").Axis<Date>;
232
+ getAxisTicksConfig(configs: import('./types').TimelineTicksConfig[]): {
233
+ formatFn: (d: Date) => string;
234
+ interval: any;
235
+ };
236
+ handleResize({ contentRect }: ResizeObserverEntry): void;
237
+ handleDarkModeChange(): void;
217
238
  handleMouseDown(): void;
218
239
  handleDocumentMouseUp(): void;
219
240
  handleMouseLeave(): void;
220
241
  handleMouseMove(event: MouseEvent): void;
221
242
  handleClick(event: MouseEvent): void;
222
- handleEventMouseOver(_event: MouseEvent, eventData: import('./components/ETimeline.vue').TimelineEvent, eventType: string): void;
223
- handleEventMouseOut(): void;
243
+ handleLineMouseOver(_event: MouseEvent, eventData: import('./components/ETimeline.vue').TimelineCountEvent, eventType: string): void;
244
+ handleLineMouseOut(): void;
245
+ handleBarMouseOver(_event: MouseEvent, eventData: import('./components/ETimeline.vue').TimelineEvent, eventType: string): void;
246
+ handleBarMouseOut(): void;
247
+ handleLabelMouseOver(groupType: string): void;
248
+ handleLabelMouseLeave(groupType: string): void;
224
249
  handleZoom(event: import("d3-zoom").D3ZoomEvent<SVGSVGElement, any>): void;
225
250
  zoomToStartAndEndDates(): void;
226
251
  rescaleAxis(axisName: string, newScale: import("d3-scale").ScaleTime<any, any, unknown>): void;
227
252
  translateTicksText(axisName: string): void;
228
- updateEventsRects(): void;
253
+ updateBarCharts(): void;
254
+ updateLineGraphs(): void;
255
+ updateLineGraphHoverZones(): void;
229
256
  getEventRectX(d: import('./components/ETimeline.vue').TimelineEvent): any;
230
257
  getEventRectWidth(d: import('./components/ETimeline.vue').TimelineEvent): number;
231
258
  drawEventsGroups(): void;
259
+ drawLineGraphEventsGroups(): void;
260
+ drawLineGraph({ events, gElement, color, type, }: {
261
+ events: import('./components/ETimeline.vue').TimelineEvent[];
262
+ gElement: import("d3-selection").Selection<SVGGElement, any, any, any>;
263
+ color: string;
264
+ type: string;
265
+ }): void;
266
+ drawLineGraphHoverZones({ events, gElement, color, type, }: {
267
+ events: import('./components/ETimeline.vue').TimelineCountEvent[];
268
+ gElement: import("d3-selection").Selection<SVGGElement, any, any, any>;
269
+ color: string;
270
+ type: string;
271
+ }): void;
272
+ drawBarEventsGroups(): void;
273
+ drawProgressIndicator({ yPosition, type, isLoading, }: {
274
+ yPosition: number;
275
+ type: string;
276
+ color: string;
277
+ isLoading: Boolean | undefined;
278
+ }): void;
232
279
  drawBackground({ color, yPosition, gElement, }: {
233
280
  gElement: import("d3-selection").Selection<SVGGElement, any, any, any>;
234
281
  yPosition: number;
235
282
  color: string;
236
283
  }): void;
237
- drawEvents({ events, gElement, yPosition, color, type, }: {
284
+ drawBars({ events, gElement, yPosition, color, type, }: {
238
285
  events: import('./components/ETimeline.vue').TimelineEvent[];
239
286
  gElement: import("d3-selection").Selection<SVGGElement, any, any, any>;
240
287
  yPosition: number;
@@ -249,7 +296,15 @@ export declare const components: {
249
296
  }): void;
250
297
  getTextFillColor(baseColor: string): string;
251
298
  getLabelBackgroundColor(baseColor: string): string;
252
- onDarkModeChange(): void;
299
+ tzStringToDate(timestamp: import('./types').Timestamp): Date;
300
+ dateToTzString(date: Date): string;
301
+ getCurrentTimeBounds(): {
302
+ startDate: string;
303
+ endDate: string;
304
+ };
305
+ getFormattedTimestamp(timestamp: import('./types').Timestamp): string;
306
+ fillTimeGaps(events: import('./components/ETimeline.vue').TimelineEvent[]): import('./components/ETimeline.vue').TimelineEvent[];
307
+ getNormalizedEvents(events: import('./components/ETimeline.vue').TimelineEvent[]): import('./components/ETimeline.vue').TimelineEvent[];
253
308
  }, {
254
309
  classes: {
255
310
  wrapper: string;
@@ -257,12 +312,20 @@ export declare const components: {
257
312
  tooltipSlot: string;
258
313
  eventTooltipSlot: string;
259
314
  };
315
+ lineGraphGroups: import('./components/ETimeline.vue').TimelineEventsByType;
316
+ lineGraphChartHeight: number;
317
+ barGroups: import('./components/ETimeline.vue').TimelineEventsByType;
318
+ hasLineGraphChart: boolean;
260
319
  labelRectWidth: number;
261
320
  combinedXAxesHeight: number;
262
321
  timelineHeight: number;
322
+ filteredEventsGroups: import('./components/ETimeline.vue').TimelineEventsByType;
263
323
  allEventsSorted: import('./components/ETimeline.vue').TimelineEvent[];
264
324
  oldestEvent: import('./components/ETimeline.vue').TimelineEvent;
265
325
  latestEvent: import('./components/ETimeline.vue').TimelineEvent;
326
+ allLineChartTimestamps: string[];
327
+ placeholderLineChartGroup: import('./components/ETimeline.vue').TimelineEvent[];
328
+ normalizedLineGraphGroups: import('./components/ETimeline.vue').TimelineEventsByType;
266
329
  }, {
267
330
  eventsGroups: {};
268
331
  xAxesConfig: import('./types').TimelineAxesConfig;
@@ -272,6 +335,8 @@ export declare const components: {
272
335
  selectedTimestamp: string;
273
336
  showEventTooltip: boolean;
274
337
  disableZoom: boolean;
338
+ normalizeEvents: boolean;
339
+ flattenLineGraphEnds: boolean;
275
340
  }, {}, import("vue/types/v3-component-options").ComponentOptionsMixin, import("vue/types/v3-component-options").ComponentOptionsMixin>;
276
341
  };
277
342
  declare const _default: {
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .e-spinner[data-v-29711f67]{vertical-align:center}.e-spinner__primary[data-v-29711f67],.e-spinner__secondary[data-v-29711f67]{stroke-width:0;animation:fade-29711f67;animation-iteration-count:infinite}@keyframes fade-29711f67{0%{fill-opacity:0}50%{fill-opacity:1}to{fill-opacity:0}}.e-row.e-row--no-gutters{margin:0}.e-row.e-row--no-gutters>.e-col{padding:0}.e-col{padding:.75rem}.spinner-container[data-v-99c9162d]{position:absolute;background:linear-gradient(to top,rgba(0,0,0,.65),transparent);inset:0;display:flex;justify-content:center;align-items:center;vertical-align:middle}.video-container[data-v-99c9162d]{position:relative;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;margin:0 auto}.video-container.full-screen[data-v-99c9162d]{max-width:initial;width:100%;max-height:100vh}video[data-v-99c9162d]{width:100%;height:inherit}.video-controls-container[data-v-99c9162d]{position:absolute;bottom:0;left:0;right:0;color:#fff;z-index:100;opacity:0;transition:opacity .15s ease-in-out}.hide[data-v-99c9162d]{display:none}.video-controls-container[data-v-99c9162d]:before{content:"";position:absolute;bottom:0;background:linear-gradient(to top,rgba(0,0,0,.75),transparent);width:100%;aspect-ratio:6 / 1;z-index:-1;pointer-events:none}.video-container:hover .video-controls-container[data-v-99c9162d],.video-container:focus-within .video-controls-container[data-v-99c9162d],.video-container.paused .video-controls-container[data-v-99c9162d]{opacity:1}.video-controls-container .controls[data-v-99c9162d]{display:flex;gap:.5rem;padding:.75rem 1rem;align-items:center;width:100%}.video-controls-container .controls button[data-v-99c9162d]{background:none;border:none;color:inherit;padding:0;height:32px;width:32px;font-size:1.35rem;cursor:pointer;opacity:.85;transition:opacity .15s ease-in-out}.video-controls-container .controls button[data-v-99c9162d]:hover{opacity:1}.duration-container[data-v-99c9162d]{display:flex;align-items:center;gap:.25rem;flex-grow:1}.video-container.captions .captions-btn[data-v-99c9162d]{border-bottom:3px solid red}.video-controls-container .controls button.wide-btn[data-v-99c9162d]{width:50px}.timeline-container[data-v-99c9162d]{width:100%;height:7px;margin-inline:.5rem;cursor:pointer;display:flex;align-items:center}.timeline[data-v-99c9162d]{background-color:#64646480;height:3px;width:100%;position:relative}.timeline[data-v-99c9162d]:before{content:"";position:absolute;left:0;top:0;bottom:0;right:calc(100% - var(--preview-position) * 100%);background-color:#969696;display:none}.timeline[data-v-99c9162d]:after{content:"";position:absolute;left:0;top:0;bottom:0;right:calc(100% - var(--progress-position) * 100%);background-color:red}.timeline .thumb-indicator[data-v-99c9162d]{--scale: 0;position:absolute;transform:translate(-50%) scale(var(--scale));height:200%;top:-50%;left:calc(var(--progress-position) * 100%);background-color:red;border-radius:50%;transition:transform .15s ease-in-out;aspect-ratio:1 / 1}.video-container.scrubbing .thumbnail-img[data-v-99c9162d]{display:block}.video-container.scrubbing .timeline[data-v-99c9162d]:before,.timeline-container:hover .timeline[data-v-99c9162d]:before{display:block}.video-container.scrubbing .thumb-indicator[data-v-99c9162d],.timeline-container:hover .thumb-indicator[data-v-99c9162d]{--scale: 1}.video-container.scrubbing .timeline[data-v-99c9162d],.timeline-container:hover .timeline[data-v-99c9162d]{height:100%}.e-timeline svg{display:block}.e-timeline .x-axis-overview .domain,.e-timeline .x-axis-detailed .domain,.e-timeline .x-axis-overviewBackground .domain,.e-timeline .x-axis-detailedBackground .domain{display:none}.e-timeline .x-axis-detailedBackground .domain,.e-timeline .x-axis-detailedBackground text{display:none}.e-timeline .x-axis-overview>g.tick>line{opacity:.1;stroke-width:3;stroke-linecap:round}.e-timeline .x-axis-detailed>g.tick>line{opacity:.1;stroke-linecap:round}.e-timeline .x-axis-detailedBackground>g.tick>line{opacity:.075;stroke-linecap:round}.e-timeline--dark line{stroke:#fff}.e-timeline--dark text{fill:#fff}
1
+ .e-spinner[data-v-29711f67]{vertical-align:center}.e-spinner__primary[data-v-29711f67],.e-spinner__secondary[data-v-29711f67]{stroke-width:0;animation:fade-29711f67;animation-iteration-count:infinite}@keyframes fade-29711f67{0%{fill-opacity:0}50%{fill-opacity:1}to{fill-opacity:0}}.e-row.e-row--no-gutters{margin:0}.e-row.e-row--no-gutters>.e-col{padding:0}.e-col{padding:.75rem}.spinner-container[data-v-99c9162d]{position:absolute;background:linear-gradient(to top,rgba(0,0,0,.65),transparent);inset:0;display:flex;justify-content:center;align-items:center;vertical-align:middle}.video-container[data-v-99c9162d]{position:relative;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;margin:0 auto}.video-container.full-screen[data-v-99c9162d]{max-width:initial;width:100%;max-height:100vh}video[data-v-99c9162d]{width:100%;height:inherit}.video-controls-container[data-v-99c9162d]{position:absolute;bottom:0;left:0;right:0;color:#fff;z-index:100;opacity:0;transition:opacity .15s ease-in-out}.hide[data-v-99c9162d]{display:none}.video-controls-container[data-v-99c9162d]:before{content:"";position:absolute;bottom:0;background:linear-gradient(to top,rgba(0,0,0,.75),transparent);width:100%;aspect-ratio:6 / 1;z-index:-1;pointer-events:none}.video-container:hover .video-controls-container[data-v-99c9162d],.video-container:focus-within .video-controls-container[data-v-99c9162d],.video-container.paused .video-controls-container[data-v-99c9162d]{opacity:1}.video-controls-container .controls[data-v-99c9162d]{display:flex;gap:.5rem;padding:.75rem 1rem;align-items:center;width:100%}.video-controls-container .controls button[data-v-99c9162d]{background:none;border:none;color:inherit;padding:0;height:32px;width:32px;font-size:1.35rem;cursor:pointer;opacity:.85;transition:opacity .15s ease-in-out}.video-controls-container .controls button[data-v-99c9162d]:hover{opacity:1}.duration-container[data-v-99c9162d]{display:flex;align-items:center;gap:.25rem;flex-grow:1}.video-container.captions .captions-btn[data-v-99c9162d]{border-bottom:3px solid red}.video-controls-container .controls button.wide-btn[data-v-99c9162d]{width:50px}.timeline-container[data-v-99c9162d]{width:100%;height:7px;margin-inline:.5rem;cursor:pointer;display:flex;align-items:center}.timeline[data-v-99c9162d]{background-color:#64646480;height:3px;width:100%;position:relative}.timeline[data-v-99c9162d]:before{content:"";position:absolute;left:0;top:0;bottom:0;right:calc(100% - var(--preview-position) * 100%);background-color:#969696;display:none}.timeline[data-v-99c9162d]:after{content:"";position:absolute;left:0;top:0;bottom:0;right:calc(100% - var(--progress-position) * 100%);background-color:red}.timeline .thumb-indicator[data-v-99c9162d]{--scale: 0;position:absolute;transform:translate(-50%) scale(var(--scale));height:200%;top:-50%;left:calc(var(--progress-position) * 100%);background-color:red;border-radius:50%;transition:transform .15s ease-in-out;aspect-ratio:1 / 1}.video-container.scrubbing .thumbnail-img[data-v-99c9162d]{display:block}.video-container.scrubbing .timeline[data-v-99c9162d]:before,.timeline-container:hover .timeline[data-v-99c9162d]:before{display:block}.video-container.scrubbing .thumb-indicator[data-v-99c9162d],.timeline-container:hover .thumb-indicator[data-v-99c9162d]{--scale: 1}.video-container.scrubbing .timeline[data-v-99c9162d],.timeline-container:hover .timeline[data-v-99c9162d]{height:100%}.e-timeline svg{display:block}.e-timeline .x-axis-overview .domain,.e-timeline .x-axis-detailed .domain,.e-timeline .x-axis-overviewBackground .domain,.e-timeline .x-axis-detailedBackground .domain{display:none}.e-timeline .x-axis-detailedBackground .domain,.e-timeline .x-axis-detailedBackground text{display:none}.e-timeline .x-axis-overview>g.tick>line{opacity:.1;stroke-width:3;stroke-linecap:round}.e-timeline .x-axis-detailed>g.tick>line{opacity:.1;stroke-linecap:round}.e-timeline .x-axis-detailedBackground>g.tick>line{opacity:.075;stroke-linecap:round}.e-timeline--dark .tick line{stroke:#fff}.e-timeline--dark .tick text{fill:#fff}@keyframes moveGradient{0%{transform:translate(-50%)}to{transform:translate(100%)}}@keyframes pulse-rect{0%{filter:saturate(3.5) drop-shadow(0 0 1px #0008)}50%{filter:saturate(.5) drop-shadow(0 0 0 #0000)}to{filter:saturate(3.5) drop-shadow(0 0 1px #0008)}}@keyframes pulse-circle{0%{r:4px}50%{r:1px}to{r:4px}}.loading-indicator{animation:moveGradient 1.5s ease-in infinite}.line-graph-dot--active{animation:pulse-circle 1s ease-in-out infinite}.event-rect--hovered{animation:pulse-rect 1s ease-in-out infinite}@keyframes dash{0%{filter:saturate(1) drop-shadow(0 0 0 #0000)}50%{stroke-width:2px;filter:saturate(2.5) drop-shadow(0 0 0 #0006)}to{filter:saturate(1) drop-shadow(0 0 0 #0000)}}.line-graph-group--highlighted path{animation:dash 1s ease-in-out infinite}
package/dist/styles.css CHANGED
@@ -621,6 +621,9 @@
621
621
  .e-flex-wrap{
622
622
  flex-wrap: wrap;
623
623
  }
624
+ .e-flex-nowrap{
625
+ flex-wrap: nowrap;
626
+ }
624
627
  .e-place-content-center{
625
628
  place-content: center;
626
629
  }
package/dist/tags.json CHANGED
@@ -85,7 +85,9 @@
85
85
  "end-date",
86
86
  "selected-timestamp",
87
87
  "show-event-tooltip",
88
- "disable-zoom"
88
+ "disable-zoom",
89
+ "normalize-events",
90
+ "flatten-line-graph-ends"
89
91
  ],
90
92
  "description": ""
91
93
  }
@@ -2,7 +2,7 @@
2
2
  "$schema": "http://json.schemastore.org/web-types",
3
3
  "framework": "vue",
4
4
  "name": "@evercam/ui",
5
- "version": "0.0.40",
5
+ "version": "0.0.42",
6
6
  "contributions": {
7
7
  "html": {
8
8
  "types-syntax": "typescript",
@@ -535,7 +535,7 @@
535
535
  {
536
536
  "name": "x-axes-config",
537
537
  "doc-url": "https://www.npmjs.com/package/@evercam/ui",
538
- "default": "() => Gt",
538
+ "default": "() => Wt",
539
539
  "value": {
540
540
  "kind": "expression",
541
541
  "type": "object"
@@ -594,6 +594,24 @@
594
594
  "kind": "expression",
595
595
  "type": "boolean"
596
596
  }
597
+ },
598
+ {
599
+ "name": "normalize-events",
600
+ "doc-url": "https://www.npmjs.com/package/@evercam/ui",
601
+ "default": "true",
602
+ "value": {
603
+ "kind": "expression",
604
+ "type": "boolean"
605
+ }
606
+ },
607
+ {
608
+ "name": "flatten-line-graph-ends",
609
+ "doc-url": "https://www.npmjs.com/package/@evercam/ui",
610
+ "default": "true",
611
+ "value": {
612
+ "kind": "expression",
613
+ "type": "boolean"
614
+ }
597
615
  }
598
616
  ]
599
617
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evercam/ui",
3
- "version": "0.0.41",
3
+ "version": "0.0.43",
4
4
  "license": "MIT",
5
5
  "private": false,
6
6
  "author": "Evercam - Constuction Cameras.",