@evercam/ui 0.0.41 → 0.0.42

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,63 +55,122 @@ 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, {
73
+ count: number;
74
+ type: string;
75
+ }[]>;
76
+ dotsByTimestamp: Record<string, d3.Selection<SVGCircleElement, any, any, any>[]>;
77
+ visibleFrom: Date;
78
+ visibleTo: Date;
44
79
  }, {
45
- tzStringToDate(timestamp: Timestamp): Date;
46
- dateToTzString(date: Date): string;
47
- getFormattedTimestamp(timestamp: Timestamp): string;
48
- handleResize({ contentRect }: ResizeObserverEntry): void;
49
- initTimeline(): void;
80
+ initTimeline(startDate?: string, endDate?: string): void;
50
81
  initRefs(): void;
51
82
  initSvg(): void;
83
+ initDefs(): void;
52
84
  initUtcOffset(): void;
53
- initTimeScale(): void;
85
+ initTimeScale(start?: string, end?: string): void;
54
86
  initXAxes(): void;
55
- createAxis(axisName: TimelineAxis): d3.Axis<Date>;
56
- getAxisTicksConfig(configs: TimelineTicksConfig[]): {
57
- formatFn: (d: Date) => string;
58
- interval: any;
59
- };
87
+ initYScale(): void;
60
88
  initZoomBehavior(): void;
61
89
  initSelectedTimestampCursor(): void;
90
+ updateAndRedrawTimeline(): void;
91
+ clearTimeline(): void;
62
92
  repositionSelectedTimestampCursor(): void;
63
93
  updateCurrentTimeScaleDensity(): void;
64
94
  registerEventsListeners(): void;
95
+ emitVisibleInterval(): void;
96
+ createAxis(axisName: TimelineAxis): d3.Axis<Date>;
97
+ getAxisTicksConfig(configs: TimelineTicksConfig[]): {
98
+ formatFn: (d: Date) => string;
99
+ interval: any;
100
+ };
101
+ handleResize({ contentRect }: ResizeObserverEntry): void;
102
+ handleDarkModeChange(): void;
65
103
  handleMouseDown(): void;
66
104
  handleDocumentMouseUp(): void;
67
105
  handleMouseLeave(): void;
68
106
  handleMouseMove(event: MouseEvent): void;
69
107
  handleClick(event: MouseEvent): void;
70
- handleEventMouseOver(_event: MouseEvent, eventData: TimelineEvent, eventType: string): void;
71
- handleEventMouseOut(): void;
108
+ handleLineMouseOver(_event: MouseEvent, eventData: TimelineCountEvent, eventType: string): void;
109
+ handleLineMouseOut(): void;
110
+ handleBarMouseOver(_event: MouseEvent, eventData: TimelineEvent, eventType: string): void;
111
+ handleBarMouseOut(): void;
112
+ handleLabelMouseOver(groupType: string): void;
113
+ handleLabelMouseLeave(groupType: string): void;
72
114
  handleZoom(event: D3ZoomEvent<SVGSVGElement, any>): void;
73
115
  zoomToStartAndEndDates(): void;
74
116
  rescaleAxis(axisName: string, newScale: d3.ScaleTime<any, any, unknown>): void;
75
117
  translateTicksText(axisName: string): void;
76
- updateEventsRects(): void;
118
+ updateBarCharts(): void;
119
+ updateLineGraphs(): void;
120
+ updateLineGraphHoverZones(): void;
77
121
  getEventRectX(d: TimelineEvent): any;
78
122
  getEventRectWidth(d: TimelineEvent): number;
79
123
  drawEventsGroups(): void;
124
+ drawLineGraphEventsGroups(): void;
125
+ drawLineGraph({ events, gElement, color, type, }: {
126
+ events: TimelineEvent[];
127
+ gElement: d3.Selection<SVGGElement, any, any, any>;
128
+ color: string;
129
+ type: string;
130
+ }): void;
131
+ drawLineGraphHoverZones({ events, gElement, color, type, }: {
132
+ events: TimelineCountEvent[];
133
+ gElement: d3.Selection<SVGGElement, any, any, any>;
134
+ color: string;
135
+ type: string;
136
+ }): void;
137
+ drawBarEventsGroups(): void;
138
+ drawProgressIndicator({ yPosition, type, isLoading, }: {
139
+ yPosition: number;
140
+ type: string;
141
+ color: string;
142
+ isLoading: Boolean | undefined;
143
+ }): void;
80
144
  drawBackground({ color, yPosition, gElement, }: {
81
145
  gElement: d3.Selection<SVGGElement, any, any, any>;
82
146
  yPosition: number;
83
147
  color: string;
84
148
  }): void;
85
- drawEvents({ events, gElement, yPosition, color, type, }: {
149
+ drawBars({ events, gElement, yPosition, color, type, }: {
86
150
  events: TimelineEvent[];
87
151
  gElement: d3.Selection<SVGGElement, any, any, any>;
88
152
  yPosition: number;
89
153
  color: string;
90
154
  type: string;
91
155
  }): void;
92
- drawTextLabel({ gElement, yPosition, color, label, }: {
156
+ drawTextLabel({ gElement, yPosition, color, label, type, }: {
93
157
  gElement: d3.Selection<SVGGElement, any, any, any>;
94
158
  yPosition: number;
95
159
  color: string;
96
160
  label: string;
161
+ type: string;
97
162
  }): void;
98
163
  getTextFillColor(baseColor: string): string;
99
164
  getLabelBackgroundColor(baseColor: string): string;
100
- onDarkModeChange(): void;
165
+ tzStringToDate(timestamp: Timestamp): Date;
166
+ dateToTzString(date: Date): string;
167
+ getCurrentTimeBounds(): {
168
+ startDate: string;
169
+ endDate: string;
170
+ };
171
+ getFormattedTimestamp(timestamp: Timestamp): string;
172
+ fillTimeGaps(events: TimelineEvent[]): TimelineEvent[];
173
+ getNormalizedEvents(events: TimelineEvent[]): TimelineEvent[];
101
174
  }, {
102
175
  classes: {
103
176
  wrapper: string;
@@ -105,12 +178,20 @@ declare const _default: import("vue/types/vue").ExtendedVue<Vue<Record<string, a
105
178
  tooltipSlot: string;
106
179
  eventTooltipSlot: string;
107
180
  };
181
+ lineGraphGroups: TimelineEventsByType;
182
+ lineGraphChartHeight: number;
183
+ barGroups: TimelineEventsByType;
184
+ hasLineGraphChart: boolean;
108
185
  labelRectWidth: number;
109
186
  combinedXAxesHeight: number;
110
187
  timelineHeight: number;
188
+ filteredEventsGroups: TimelineEventsByType;
111
189
  allEventsSorted: TimelineEvent[];
112
190
  oldestEvent: TimelineEvent;
113
191
  latestEvent: TimelineEvent;
192
+ allLineChartTimestamps: string[];
193
+ placeholderLineChartGroup: TimelineEvent[];
194
+ normalizedLineGraphGroups: TimelineEventsByType;
114
195
  }, {
115
196
  eventsGroups: {};
116
197
  xAxesConfig: TimelineAxesConfig;
@@ -120,5 +201,7 @@ declare const _default: import("vue/types/vue").ExtendedVue<Vue<Record<string, a
120
201
  selectedTimestamp: string;
121
202
  showEventTooltip: boolean;
122
203
  disableZoom: boolean;
204
+ normalizeEvents: boolean;
205
+ flattenLineGraphEnds: boolean;
123
206
  }, {}, import("vue/types/v3-component-options").ComponentOptionsMixin, import("vue/types/v3-component-options").ComponentOptionsMixin>;
124
207
  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,63 +193,122 @@ 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, {
211
+ count: number;
212
+ type: string;
213
+ }[]>;
214
+ dotsByTimestamp: Record<string, import("d3-selection").Selection<SVGCircleElement, any, any, any>[]>;
215
+ visibleFrom: Date;
216
+ visibleTo: Date;
196
217
  }, {
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;
218
+ initTimeline(startDate?: string | undefined, endDate?: string | undefined): void;
202
219
  initRefs(): void;
203
220
  initSvg(): void;
221
+ initDefs(): void;
204
222
  initUtcOffset(): void;
205
- initTimeScale(): void;
223
+ initTimeScale(start?: string | undefined, end?: string | undefined): void;
206
224
  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
- };
225
+ initYScale(): void;
212
226
  initZoomBehavior(): void;
213
227
  initSelectedTimestampCursor(): void;
228
+ updateAndRedrawTimeline(): void;
229
+ clearTimeline(): void;
214
230
  repositionSelectedTimestampCursor(): void;
215
231
  updateCurrentTimeScaleDensity(): void;
216
232
  registerEventsListeners(): void;
233
+ emitVisibleInterval(): void;
234
+ createAxis(axisName: import('./types').TimelineAxis): import("d3-axis").Axis<Date>;
235
+ getAxisTicksConfig(configs: import('./types').TimelineTicksConfig[]): {
236
+ formatFn: (d: Date) => string;
237
+ interval: any;
238
+ };
239
+ handleResize({ contentRect }: ResizeObserverEntry): void;
240
+ handleDarkModeChange(): void;
217
241
  handleMouseDown(): void;
218
242
  handleDocumentMouseUp(): void;
219
243
  handleMouseLeave(): void;
220
244
  handleMouseMove(event: MouseEvent): void;
221
245
  handleClick(event: MouseEvent): void;
222
- handleEventMouseOver(_event: MouseEvent, eventData: import('./components/ETimeline.vue').TimelineEvent, eventType: string): void;
223
- handleEventMouseOut(): void;
246
+ handleLineMouseOver(_event: MouseEvent, eventData: import('./components/ETimeline.vue').TimelineCountEvent, eventType: string): void;
247
+ handleLineMouseOut(): void;
248
+ handleBarMouseOver(_event: MouseEvent, eventData: import('./components/ETimeline.vue').TimelineEvent, eventType: string): void;
249
+ handleBarMouseOut(): void;
250
+ handleLabelMouseOver(groupType: string): void;
251
+ handleLabelMouseLeave(groupType: string): void;
224
252
  handleZoom(event: import("d3-zoom").D3ZoomEvent<SVGSVGElement, any>): void;
225
253
  zoomToStartAndEndDates(): void;
226
254
  rescaleAxis(axisName: string, newScale: import("d3-scale").ScaleTime<any, any, unknown>): void;
227
255
  translateTicksText(axisName: string): void;
228
- updateEventsRects(): void;
256
+ updateBarCharts(): void;
257
+ updateLineGraphs(): void;
258
+ updateLineGraphHoverZones(): void;
229
259
  getEventRectX(d: import('./components/ETimeline.vue').TimelineEvent): any;
230
260
  getEventRectWidth(d: import('./components/ETimeline.vue').TimelineEvent): number;
231
261
  drawEventsGroups(): void;
262
+ drawLineGraphEventsGroups(): void;
263
+ drawLineGraph({ events, gElement, color, type, }: {
264
+ events: import('./components/ETimeline.vue').TimelineEvent[];
265
+ gElement: import("d3-selection").Selection<SVGGElement, any, any, any>;
266
+ color: string;
267
+ type: string;
268
+ }): void;
269
+ drawLineGraphHoverZones({ events, gElement, color, type, }: {
270
+ events: import('./components/ETimeline.vue').TimelineCountEvent[];
271
+ gElement: import("d3-selection").Selection<SVGGElement, any, any, any>;
272
+ color: string;
273
+ type: string;
274
+ }): void;
275
+ drawBarEventsGroups(): void;
276
+ drawProgressIndicator({ yPosition, type, isLoading, }: {
277
+ yPosition: number;
278
+ type: string;
279
+ color: string;
280
+ isLoading: Boolean | undefined;
281
+ }): void;
232
282
  drawBackground({ color, yPosition, gElement, }: {
233
283
  gElement: import("d3-selection").Selection<SVGGElement, any, any, any>;
234
284
  yPosition: number;
235
285
  color: string;
236
286
  }): void;
237
- drawEvents({ events, gElement, yPosition, color, type, }: {
287
+ drawBars({ events, gElement, yPosition, color, type, }: {
238
288
  events: import('./components/ETimeline.vue').TimelineEvent[];
239
289
  gElement: import("d3-selection").Selection<SVGGElement, any, any, any>;
240
290
  yPosition: number;
241
291
  color: string;
242
292
  type: string;
243
293
  }): void;
244
- drawTextLabel({ gElement, yPosition, color, label, }: {
294
+ drawTextLabel({ gElement, yPosition, color, label, type, }: {
245
295
  gElement: import("d3-selection").Selection<SVGGElement, any, any, any>;
246
296
  yPosition: number;
247
297
  color: string;
248
298
  label: string;
299
+ type: string;
249
300
  }): void;
250
301
  getTextFillColor(baseColor: string): string;
251
302
  getLabelBackgroundColor(baseColor: string): string;
252
- onDarkModeChange(): void;
303
+ tzStringToDate(timestamp: import('./types').Timestamp): Date;
304
+ dateToTzString(date: Date): string;
305
+ getCurrentTimeBounds(): {
306
+ startDate: string;
307
+ endDate: string;
308
+ };
309
+ getFormattedTimestamp(timestamp: import('./types').Timestamp): string;
310
+ fillTimeGaps(events: import('./components/ETimeline.vue').TimelineEvent[]): import('./components/ETimeline.vue').TimelineEvent[];
311
+ getNormalizedEvents(events: import('./components/ETimeline.vue').TimelineEvent[]): import('./components/ETimeline.vue').TimelineEvent[];
253
312
  }, {
254
313
  classes: {
255
314
  wrapper: string;
@@ -257,12 +316,20 @@ export declare const components: {
257
316
  tooltipSlot: string;
258
317
  eventTooltipSlot: string;
259
318
  };
319
+ lineGraphGroups: import('./components/ETimeline.vue').TimelineEventsByType;
320
+ lineGraphChartHeight: number;
321
+ barGroups: import('./components/ETimeline.vue').TimelineEventsByType;
322
+ hasLineGraphChart: boolean;
260
323
  labelRectWidth: number;
261
324
  combinedXAxesHeight: number;
262
325
  timelineHeight: number;
326
+ filteredEventsGroups: import('./components/ETimeline.vue').TimelineEventsByType;
263
327
  allEventsSorted: import('./components/ETimeline.vue').TimelineEvent[];
264
328
  oldestEvent: import('./components/ETimeline.vue').TimelineEvent;
265
329
  latestEvent: import('./components/ETimeline.vue').TimelineEvent;
330
+ allLineChartTimestamps: string[];
331
+ placeholderLineChartGroup: import('./components/ETimeline.vue').TimelineEvent[];
332
+ normalizedLineGraphGroups: import('./components/ETimeline.vue').TimelineEventsByType;
266
333
  }, {
267
334
  eventsGroups: {};
268
335
  xAxesConfig: import('./types').TimelineAxesConfig;
@@ -272,6 +339,8 @@ export declare const components: {
272
339
  selectedTimestamp: string;
273
340
  showEventTooltip: boolean;
274
341
  disableZoom: boolean;
342
+ normalizeEvents: boolean;
343
+ flattenLineGraphEnds: boolean;
275
344
  }, {}, import("vue/types/v3-component-options").ComponentOptionsMixin, import("vue/types/v3-component-options").ComponentOptionsMixin>;
276
345
  };
277
346
  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.42",
4
4
  "license": "MIT",
5
5
  "private": false,
6
6
  "author": "Evercam - Constuction Cameras.",