speechrecorderng 3.10.13 → 3.11.0
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/README.md +1 -1
- package/fesm2022/speechrecorderng.mjs +204 -201
- package/fesm2022/speechrecorderng.mjs.map +1 -1
- package/lib/audio/ui/audio_canvas_layer_comp.d.ts +2 -2
- package/lib/spr.module.version.d.ts +1 -1
- package/lib/ui/canvas_layer_comp.d.ts +1 -1
- package/lib/ui/responsive_component.d.ts +1 -1
- package/package.json +13 -15
- package/esm2022/lib/action/action.mjs +0 -73
- package/esm2022/lib/audio/array_audio_buffer.mjs +0 -164
- package/esm2022/lib/audio/array_audio_buffer_input_stream.mjs +0 -86
- package/esm2022/lib/audio/array_audio_buffer_random_access_stream.mjs +0 -16
- package/esm2022/lib/audio/audio_data_holder.mjs +0 -264
- package/esm2022/lib/audio/audio_display.mjs +0 -118
- package/esm2022/lib/audio/audio_player.mjs +0 -238
- package/esm2022/lib/audio/capture/capture.mjs +0 -855
- package/esm2022/lib/audio/context.mjs +0 -79
- package/esm2022/lib/audio/dsp/level_measure.mjs +0 -517
- package/esm2022/lib/audio/format.mjs +0 -20
- package/esm2022/lib/audio/impl/wavformat.mjs +0 -7
- package/esm2022/lib/audio/impl/wavreader.mjs +0 -144
- package/esm2022/lib/audio/impl/wavwriter.mjs +0 -191
- package/esm2022/lib/audio/inddb_audio_buffer.mjs +0 -508
- package/esm2022/lib/audio/io/stream.mjs +0 -59
- package/esm2022/lib/audio/net_audio_buffer.mjs +0 -293
- package/esm2022/lib/audio/persistor.mjs +0 -81
- package/esm2022/lib/audio/playback/array_audio_buffer_source_node.mjs +0 -126
- package/esm2022/lib/audio/playback/audio_source_node.mjs +0 -18
- package/esm2022/lib/audio/playback/audio_source_worklet_module_loader.mjs +0 -167
- package/esm2022/lib/audio/playback/inddb_audio_buffer_source_node.mjs +0 -167
- package/esm2022/lib/audio/playback/net_audio_buffer_source_node.mjs +0 -218
- package/esm2022/lib/audio/playback/player.mjs +0 -402
- package/esm2022/lib/audio/ui/audio_canvas_layer_comp.mjs +0 -347
- package/esm2022/lib/audio/ui/audio_display_control.mjs +0 -150
- package/esm2022/lib/audio/ui/audio_display_scroll_pane.mjs +0 -146
- package/esm2022/lib/audio/ui/audiosignal.mjs +0 -533
- package/esm2022/lib/audio/ui/common.mjs +0 -19
- package/esm2022/lib/audio/ui/container.mjs +0 -414
- package/esm2022/lib/audio/ui/livelevel.mjs +0 -361
- package/esm2022/lib/audio/ui/scroll_pane_horizontal.mjs +0 -11
- package/esm2022/lib/audio/ui/sonagram.mjs +0 -900
- package/esm2022/lib/db/inddb.mjs +0 -120
- package/esm2022/lib/dsp/utils.mjs +0 -48
- package/esm2022/lib/environment/environment.defaults.mjs +0 -9
- package/esm2022/lib/io/BinaryReader.mjs +0 -93
- package/esm2022/lib/io/BinaryWriter.mjs +0 -80
- package/esm2022/lib/io/stream.mjs +0 -259
- package/esm2022/lib/math/2d/geometry.mjs +0 -28
- package/esm2022/lib/math/complex.mjs +0 -58
- package/esm2022/lib/math/dft.mjs +0 -196
- package/esm2022/lib/media/utils.mjs +0 -14
- package/esm2022/lib/net/uploader.mjs +0 -367
- package/esm2022/lib/recorder_component.mjs +0 -65
- package/esm2022/lib/speechrecorder/project/project.mjs +0 -54
- package/esm2022/lib/speechrecorder/project/project.service.mjs +0 -64
- package/esm2022/lib/speechrecorder/recording.mjs +0 -124
- package/esm2022/lib/speechrecorder/recordings/basic_recording.service.mjs +0 -221
- package/esm2022/lib/speechrecorder/recordings/recordings.service.mjs +0 -1014
- package/esm2022/lib/speechrecorder/script/script.mjs +0 -114
- package/esm2022/lib/speechrecorder/script/script.service.mjs +0 -47
- package/esm2022/lib/speechrecorder/session/audiorecorder.mjs +0 -1179
- package/esm2022/lib/speechrecorder/session/basicrecorder.mjs +0 -676
- package/esm2022/lib/speechrecorder/session/controlpanel.mjs +0 -416
- package/esm2022/lib/speechrecorder/session/item.mjs +0 -30
- package/esm2022/lib/speechrecorder/session/progress.mjs +0 -135
- package/esm2022/lib/speechrecorder/session/prompting.mjs +0 -639
- package/esm2022/lib/speechrecorder/session/recorder_combi_pane.mjs +0 -88
- package/esm2022/lib/speechrecorder/session/recording_file_cache.mjs +0 -195
- package/esm2022/lib/speechrecorder/session/recording_list.mjs +0 -188
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +0 -128
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +0 -114
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +0 -146
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +0 -424
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file.mjs +0 -68
- package/esm2022/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +0 -288
- package/esm2022/lib/speechrecorder/session/session.mjs +0 -2
- package/esm2022/lib/speechrecorder/session/session.service.mjs +0 -69
- package/esm2022/lib/speechrecorder/session/session_finished_dialog.mjs +0 -46
- package/esm2022/lib/speechrecorder/session/sessionmanager.mjs +0 -1385
- package/esm2022/lib/speechrecorder/session/warning_bar.mjs +0 -33
- package/esm2022/lib/speechrecorder/spruploader.mjs +0 -22
- package/esm2022/lib/speechrecorder/startstopsignal/startstopsignal.mjs +0 -2
- package/esm2022/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +0 -57
- package/esm2022/lib/speechrecorderng.component.mjs +0 -392
- package/esm2022/lib/speechrecorderng.module.mjs +0 -97
- package/esm2022/lib/spr.config.mjs +0 -27
- package/esm2022/lib/spr.module.version.mjs +0 -2
- package/esm2022/lib/ui/canvas_layer_comp.mjs +0 -38
- package/esm2022/lib/ui/intersection-observer.directive.mjs +0 -32
- package/esm2022/lib/ui/message_dialog.mjs +0 -51
- package/esm2022/lib/ui/recordingitem_display.mjs +0 -253
- package/esm2022/lib/ui/responsive_component.mjs +0 -24
- package/esm2022/lib/utils/scrollIntoViewToBottom.mjs +0 -23
- package/esm2022/lib/utils/ua-parser.mjs +0 -190
- package/esm2022/lib/utils/utils.mjs +0 -132
- package/esm2022/lib/utils/wake_lock.mjs +0 -114
- package/esm2022/lib/utils/wake_lock_media.mjs +0 -2
- package/esm2022/public-api.mjs +0 -35
- package/esm2022/speechrecorderng.mjs +0 -5
|
@@ -1,361 +0,0 @@
|
|
|
1
|
-
import { Component, HostListener, Input, ViewChild } from "@angular/core";
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export const DEFAULT_WARN_DB_LEVEL = -2;
|
|
4
|
-
export const MIN_DB_LEVEL = -60.0;
|
|
5
|
-
export const CONSIDERED_SILENCE_DB_LEVEL = MIN_DB_LEVEL * 2;
|
|
6
|
-
export const LINE_WIDTH = 2;
|
|
7
|
-
export const LINE_DISTANCE = 2;
|
|
8
|
-
export const LEVEL_INDICATOR_HEIGHT = 3;
|
|
9
|
-
export const OVERFLOW_THRESHOLD = 0.25;
|
|
10
|
-
export const OVERFLOW_INCR_FACTOR = 0.5;
|
|
11
|
-
export var State;
|
|
12
|
-
(function (State) {
|
|
13
|
-
State[State["LOADING"] = 0] = "LOADING";
|
|
14
|
-
State[State["RENDERING"] = 1] = "RENDERING";
|
|
15
|
-
State[State["READY"] = 2] = "READY";
|
|
16
|
-
})(State || (State = {}));
|
|
17
|
-
export class LevelBar {
|
|
18
|
-
constructor(ref, changeDetectorRef) {
|
|
19
|
-
this.ref = ref;
|
|
20
|
-
this.changeDetectorRef = changeDetectorRef;
|
|
21
|
-
this.pixelsPerValue = LINE_DISTANCE + LINE_WIDTH;
|
|
22
|
-
this.peakDbLvl = MIN_DB_LEVEL;
|
|
23
|
-
this._streamingMode = false;
|
|
24
|
-
this._streamingFrameLength = 0;
|
|
25
|
-
this._staticLevelInfos = null;
|
|
26
|
-
this._playFramePosition = null;
|
|
27
|
-
this._state = null;
|
|
28
|
-
this.warnDBLevel = DEFAULT_WARN_DB_LEVEL;
|
|
29
|
-
this.dbValues = new Array();
|
|
30
|
-
}
|
|
31
|
-
ngAfterViewInit() {
|
|
32
|
-
this.ce = this.ref.nativeElement;
|
|
33
|
-
this.liveLevelCanvas = this.liveLevelCanvasRef.nativeElement;
|
|
34
|
-
this.markerCanvas = this.markerCanvasRef.nativeElement;
|
|
35
|
-
this.markerCanvas.style.zIndex = '4';
|
|
36
|
-
this.virtualCanvas = this.virtualCanvasRef.nativeElement;
|
|
37
|
-
this.layout();
|
|
38
|
-
this.drawAll();
|
|
39
|
-
}
|
|
40
|
-
onScroll(se) {
|
|
41
|
-
setTimeout(() => {
|
|
42
|
-
this.updateViewportPosition();
|
|
43
|
-
this.drawAll();
|
|
44
|
-
this.drawPlayPosition();
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
updateViewportPosition() {
|
|
48
|
-
// Move canvases to visible viewport position
|
|
49
|
-
let viewPortStyleLeft = this.ce.scrollLeft + 'px';
|
|
50
|
-
this.liveLevelCanvas.style.left = viewPortStyleLeft;
|
|
51
|
-
this.markerCanvas.style.left = viewPortStyleLeft;
|
|
52
|
-
}
|
|
53
|
-
set streamingMode(streamingMode) {
|
|
54
|
-
if (this._streamingMode !== streamingMode) {
|
|
55
|
-
this._streamingMode = streamingMode;
|
|
56
|
-
this.reset();
|
|
57
|
-
this.layoutStatic();
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
set displayLevelInfos(levelInfos) {
|
|
61
|
-
if (levelInfos) {
|
|
62
|
-
this._staticLevelInfos = levelInfos;
|
|
63
|
-
this.dbValues = levelInfos.bufferLevelInfos.map((li) => {
|
|
64
|
-
return li.powerLevelsDB();
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
this._staticLevelInfos = null;
|
|
69
|
-
this.dbValues = new Array();
|
|
70
|
-
}
|
|
71
|
-
this.layoutStatic();
|
|
72
|
-
}
|
|
73
|
-
set state(state) {
|
|
74
|
-
this._state = state;
|
|
75
|
-
this.layoutStatic();
|
|
76
|
-
}
|
|
77
|
-
set channelCount(channelCount) {
|
|
78
|
-
this.reset();
|
|
79
|
-
}
|
|
80
|
-
set playFramePosition(playFramePosition) {
|
|
81
|
-
this._playFramePosition = playFramePosition;
|
|
82
|
-
this.drawPlayPosition();
|
|
83
|
-
}
|
|
84
|
-
onResize(event) {
|
|
85
|
-
this.layout();
|
|
86
|
-
this.drawAll();
|
|
87
|
-
}
|
|
88
|
-
layout() {
|
|
89
|
-
// set Canvas size to viewport size
|
|
90
|
-
this.liveLevelCanvas.width = this.ce.offsetWidth;
|
|
91
|
-
this.liveLevelCanvas.height = this.ce.offsetHeight;
|
|
92
|
-
this.markerCanvas.width = this.ce.offsetWidth;
|
|
93
|
-
this.markerCanvas.height = this.ce.offsetHeight;
|
|
94
|
-
// and move to viewport position
|
|
95
|
-
this.updateViewportPosition();
|
|
96
|
-
this.drawAll();
|
|
97
|
-
this.drawPlayPosition();
|
|
98
|
-
}
|
|
99
|
-
update(levelInfos) {
|
|
100
|
-
if (this._streamingMode) {
|
|
101
|
-
let dbVals = levelInfos.powerLevelsDB();
|
|
102
|
-
let peakDBVal = levelInfos.powerLevelDB();
|
|
103
|
-
this._streamingFrameLength += levelInfos.frameLength;
|
|
104
|
-
//console.debug("Update level info frameLength: "+levelInfos.frameLength+", total streaming frame length: "+this._streamingFrameLength);
|
|
105
|
-
if (this.peakDbLvl < peakDBVal) {
|
|
106
|
-
this.peakDbLvl = peakDBVal;
|
|
107
|
-
this.changeDetectorRef.detectChanges();
|
|
108
|
-
}
|
|
109
|
-
this.dbValues.push(dbVals);
|
|
110
|
-
let i = this.dbValues.length - 1;
|
|
111
|
-
let x = i * this.pixelsPerValue;
|
|
112
|
-
this.drawPushValue(x, dbVals);
|
|
113
|
-
this.checkWidth();
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
streamFinished() {
|
|
117
|
-
this.layoutStatic();
|
|
118
|
-
}
|
|
119
|
-
layoutStatic() {
|
|
120
|
-
let requiredWidth = Math.round(this.dbValues.length * this.pixelsPerValue);
|
|
121
|
-
if (this.virtualCanvas && this.ce) {
|
|
122
|
-
this.virtualCanvas.style.width = requiredWidth + 'px';
|
|
123
|
-
this.ce.scrollLeft = requiredWidth - this.ce.offsetWidth;
|
|
124
|
-
this.layout();
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
checkWidth() {
|
|
128
|
-
let requiredWidth = this.dbValues.length * this.pixelsPerValue;
|
|
129
|
-
if (this.virtualCanvas.offsetWidth - requiredWidth < this.ce.offsetWidth * OVERFLOW_THRESHOLD) {
|
|
130
|
-
let newWidth = Math.floor(this.virtualCanvas.offsetWidth + (this.ce.offsetWidth * OVERFLOW_INCR_FACTOR));
|
|
131
|
-
this.virtualCanvas.style.width = newWidth + 'px';
|
|
132
|
-
this.ce.scrollLeft = newWidth - this.ce.offsetWidth;
|
|
133
|
-
// do not call layout here it is triggered by the scroll event
|
|
134
|
-
//this.layout();
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
reset(stat = false) {
|
|
138
|
-
this.peakDbLvl = MIN_DB_LEVEL;
|
|
139
|
-
this.dbValues = new Array();
|
|
140
|
-
this._streamingFrameLength = 0;
|
|
141
|
-
if (stat) {
|
|
142
|
-
this.layoutStatic();
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
this.layout();
|
|
146
|
-
}
|
|
147
|
-
this.drawAll();
|
|
148
|
-
this.drawPlayPosition();
|
|
149
|
-
}
|
|
150
|
-
drawLevelBackground(g, x, h) {
|
|
151
|
-
g.strokeStyle = 'black';
|
|
152
|
-
g.fillStyle = 'black';
|
|
153
|
-
g.fillRect(x, 0, this.pixelsPerValue, h);
|
|
154
|
-
}
|
|
155
|
-
// private drawLevelLine(g: CanvasRenderingContext2D, x: number, h: number, dbVal: number) {
|
|
156
|
-
// //translate to viewport
|
|
157
|
-
// let xc = x - this.ce.scrollLeft;
|
|
158
|
-
//
|
|
159
|
-
// this.drawLevelBackground(g,xc,h);
|
|
160
|
-
// g.lineWidth = LINE_WIDTH;
|
|
161
|
-
// if (dbVal >= this.warnDBLevel) {
|
|
162
|
-
// g.strokeStyle = 'red';
|
|
163
|
-
// g.fillStyle = 'red';
|
|
164
|
-
//
|
|
165
|
-
// } else {
|
|
166
|
-
// g.strokeStyle = '#00c853';
|
|
167
|
-
// g.fillStyle = '#00c853';
|
|
168
|
-
// }
|
|
169
|
-
// g.beginPath();
|
|
170
|
-
// g.moveTo(xc, h);
|
|
171
|
-
// let pVal = ((dbVal - MIN_DB_LEVEL) / -MIN_DB_LEVEL) * h;
|
|
172
|
-
//
|
|
173
|
-
// g.lineTo(xc, h - pVal);
|
|
174
|
-
// g.closePath();
|
|
175
|
-
// g.stroke();
|
|
176
|
-
//
|
|
177
|
-
// }
|
|
178
|
-
drawLevelLines(g, x, h, dbVals) {
|
|
179
|
-
//translate to viewport
|
|
180
|
-
let xc = x - this.ce.scrollLeft;
|
|
181
|
-
this.drawLevelBackground(g, xc, h);
|
|
182
|
-
let chH = Math.floor(h / dbVals.length);
|
|
183
|
-
g.lineWidth = LINE_WIDTH;
|
|
184
|
-
for (let ch = 0; ch < dbVals.length; ch++) {
|
|
185
|
-
let dbVal = dbVals[ch];
|
|
186
|
-
let y = Math.floor(ch * chH);
|
|
187
|
-
if (dbVal >= this.warnDBLevel) {
|
|
188
|
-
g.strokeStyle = 'red';
|
|
189
|
-
g.fillStyle = 'red';
|
|
190
|
-
}
|
|
191
|
-
else if (dbVal < CONSIDERED_SILENCE_DB_LEVEL) {
|
|
192
|
-
g.strokeStyle = 'grey';
|
|
193
|
-
g.fillStyle = 'grey';
|
|
194
|
-
}
|
|
195
|
-
else {
|
|
196
|
-
g.strokeStyle = '#00c853';
|
|
197
|
-
g.fillStyle = '#00c853';
|
|
198
|
-
}
|
|
199
|
-
g.beginPath();
|
|
200
|
-
g.moveTo(xc, y + chH);
|
|
201
|
-
g.lineTo(xc, y + chH - LEVEL_INDICATOR_HEIGHT);
|
|
202
|
-
let pnVal = ((dbVal - MIN_DB_LEVEL) / -MIN_DB_LEVEL);
|
|
203
|
-
let lvlIndicatorSpace = LEVEL_INDICATOR_HEIGHT + LINE_DISTANCE;
|
|
204
|
-
let levelH = chH - lvlIndicatorSpace;
|
|
205
|
-
let pVal = pnVal * levelH;
|
|
206
|
-
if (pVal > levelH - 1) {
|
|
207
|
-
pVal = levelH - 1;
|
|
208
|
-
}
|
|
209
|
-
else if (pVal < 0) {
|
|
210
|
-
pVal = 0;
|
|
211
|
-
}
|
|
212
|
-
g.moveTo(xc, y + chH - lvlIndicatorSpace);
|
|
213
|
-
g.lineTo(xc, y + chH - lvlIndicatorSpace - pVal);
|
|
214
|
-
g.closePath();
|
|
215
|
-
g.stroke();
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
drawPushValue(x, dbVals) {
|
|
219
|
-
if (this.liveLevelCanvas) {
|
|
220
|
-
let h = this.liveLevelCanvas.height;
|
|
221
|
-
let g = this.liveLevelCanvas.getContext("2d");
|
|
222
|
-
if (g) {
|
|
223
|
-
this.drawLevelLines(g, x, h, dbVals);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
drawAll() {
|
|
228
|
-
if (this.liveLevelCanvas) {
|
|
229
|
-
let w = this.liveLevelCanvas.width;
|
|
230
|
-
let h = this.liveLevelCanvas.height;
|
|
231
|
-
let g = this.liveLevelCanvas.getContext("2d");
|
|
232
|
-
if (g) {
|
|
233
|
-
// clear canvas
|
|
234
|
-
g.fillStyle = 'grey';
|
|
235
|
-
g.fillRect(0, 0, w, h);
|
|
236
|
-
g.lineWidth = LINE_WIDTH;
|
|
237
|
-
if (this.dbValues.length > 0) {
|
|
238
|
-
// draw only viewport part:
|
|
239
|
-
// draw from x1 to x2
|
|
240
|
-
let x1 = this.ce.scrollLeft;
|
|
241
|
-
let x2 = x1 + this.ce.offsetWidth;
|
|
242
|
-
// corresponds to this level values:
|
|
243
|
-
let i1 = Math.floor(x1 / this.pixelsPerValue);
|
|
244
|
-
let i2 = Math.ceil(x2 / this.pixelsPerValue);
|
|
245
|
-
// some values around
|
|
246
|
-
i1 -= 2;
|
|
247
|
-
i2 += 2;
|
|
248
|
-
// limits
|
|
249
|
-
if (i1 < 0) {
|
|
250
|
-
i1 = 0;
|
|
251
|
-
}
|
|
252
|
-
if (i2 > this.dbValues.length) {
|
|
253
|
-
i2 = this.dbValues.length;
|
|
254
|
-
}
|
|
255
|
-
let c = 0;
|
|
256
|
-
for (let i = i1; i < i2; i++) {
|
|
257
|
-
let x = i * this.pixelsPerValue;
|
|
258
|
-
let dbVals = this.dbValues[i];
|
|
259
|
-
if (dbVals) {
|
|
260
|
-
this.drawLevelLines(g, x, h, dbVals);
|
|
261
|
-
c++;
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
else if (this._state !== State.READY) {
|
|
266
|
-
g.strokeStyle = 'white';
|
|
267
|
-
g.fillStyle = 'white';
|
|
268
|
-
g.font = '20px sans-serif';
|
|
269
|
-
let stateTxt = '';
|
|
270
|
-
if (this._state === State.LOADING) {
|
|
271
|
-
stateTxt = "Loading...";
|
|
272
|
-
}
|
|
273
|
-
else if (this._state === State.RENDERING) {
|
|
274
|
-
stateTxt = "Rendering...";
|
|
275
|
-
}
|
|
276
|
-
g.fillText(stateTxt, 10, 25);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
framesPerPixel() {
|
|
282
|
-
let fpp = null;
|
|
283
|
-
// one buffer
|
|
284
|
-
if (this._staticLevelInfos) {
|
|
285
|
-
let framesPerBuffer = this._staticLevelInfos.framesPerBuffer();
|
|
286
|
-
fpp = framesPerBuffer / this.pixelsPerValue;
|
|
287
|
-
}
|
|
288
|
-
else {
|
|
289
|
-
if (this.dbValues && this.dbValues.length > 0) {
|
|
290
|
-
fpp = this._streamingFrameLength / (this.dbValues.length * this.pixelsPerValue);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
return fpp;
|
|
294
|
-
}
|
|
295
|
-
drawPlayPosition() {
|
|
296
|
-
if (this.markerCanvas) {
|
|
297
|
-
let w = this.markerCanvas.width;
|
|
298
|
-
let h = this.markerCanvas.height;
|
|
299
|
-
let g = this.markerCanvas.getContext("2d");
|
|
300
|
-
if (g) {
|
|
301
|
-
g.clearRect(0, 0, w, h);
|
|
302
|
-
let framesPerPixel = this.framesPerPixel();
|
|
303
|
-
if (framesPerPixel && this._playFramePosition) {
|
|
304
|
-
let x = this._playFramePosition / framesPerPixel;
|
|
305
|
-
// Get position in viewport
|
|
306
|
-
let xc = x - this.ce.scrollLeft;
|
|
307
|
-
// Only draw if inside marker (viewport) canvas
|
|
308
|
-
if (xc >= 0 && xc <= w) {
|
|
309
|
-
g.fillStyle = 'red';
|
|
310
|
-
g.strokeStyle = 'red';
|
|
311
|
-
g.lineWidth = LINE_WIDTH;
|
|
312
|
-
g.beginPath();
|
|
313
|
-
// paint over all channels
|
|
314
|
-
g.moveTo(xc, 0);
|
|
315
|
-
g.lineTo(xc, h);
|
|
316
|
-
g.closePath();
|
|
317
|
-
g.stroke();
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LevelBar, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
324
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: LevelBar, selector: "audio-levelbar", inputs: { streamingMode: "streamingMode", displayLevelInfos: "displayLevelInfos", state: "state" }, host: { listeners: { "scroll": "onScroll($event)", "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "virtualCanvasRef", first: true, predicate: ["virtualCanvas"], descendants: true, static: true }, { propertyName: "liveLevelCanvasRef", first: true, predicate: ["levelbar"], descendants: true, static: true }, { propertyName: "markerCanvasRef", first: true, predicate: ["markerCanvas"], descendants: true, static: true }], ngImport: i0, template: `
|
|
325
|
-
<div #virtualCanvas>
|
|
326
|
-
<canvas #levelbar></canvas>
|
|
327
|
-
<canvas #markerCanvas></canvas>
|
|
328
|
-
</div>
|
|
329
|
-
`, isInline: true, styles: [":host{width:100%;background:#a9a9a9;box-sizing:border-box;height:100%;position:relative;overflow-x:scroll;overflow-y:auto}\n", "div{top:0;left:0;width:100%;height:100%;box-sizing:border-box}\n", "canvas{top:0;left:0;width:100%;height:100%;position:absolute}\n"] }); }
|
|
330
|
-
}
|
|
331
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LevelBar, decorators: [{
|
|
332
|
-
type: Component,
|
|
333
|
-
args: [{ selector: 'audio-levelbar', template: `
|
|
334
|
-
<div #virtualCanvas>
|
|
335
|
-
<canvas #levelbar></canvas>
|
|
336
|
-
<canvas #markerCanvas></canvas>
|
|
337
|
-
</div>
|
|
338
|
-
`, styles: [":host{width:100%;background:#a9a9a9;box-sizing:border-box;height:100%;position:relative;overflow-x:scroll;overflow-y:auto}\n", "div{top:0;left:0;width:100%;height:100%;box-sizing:border-box}\n", "canvas{top:0;left:0;width:100%;height:100%;position:absolute}\n"] }]
|
|
339
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { virtualCanvasRef: [{
|
|
340
|
-
type: ViewChild,
|
|
341
|
-
args: ['virtualCanvas', { static: true }]
|
|
342
|
-
}], liveLevelCanvasRef: [{
|
|
343
|
-
type: ViewChild,
|
|
344
|
-
args: ['levelbar', { static: true }]
|
|
345
|
-
}], markerCanvasRef: [{
|
|
346
|
-
type: ViewChild,
|
|
347
|
-
args: ['markerCanvas', { static: true }]
|
|
348
|
-
}], onScroll: [{
|
|
349
|
-
type: HostListener,
|
|
350
|
-
args: ['scroll', ['$event']]
|
|
351
|
-
}], streamingMode: [{
|
|
352
|
-
type: Input
|
|
353
|
-
}], displayLevelInfos: [{
|
|
354
|
-
type: Input
|
|
355
|
-
}], state: [{
|
|
356
|
-
type: Input
|
|
357
|
-
}], onResize: [{
|
|
358
|
-
type: HostListener,
|
|
359
|
-
args: ['window:resize', ['$event']]
|
|
360
|
-
}] } });
|
|
361
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZWxldmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL3VpL2xpdmVsZXZlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1DLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQTs7QUFHckgsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEMsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQ2xDLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLFlBQVksR0FBQyxDQUFDLENBQUM7QUFDMUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQztBQUM1QixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFDLENBQUMsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDO0FBRXhDLE1BQU0sQ0FBTixJQUFZLEtBQStCO0FBQTNDLFdBQVksS0FBSztJQUFFLHVDQUFPLENBQUE7SUFBQywyQ0FBUyxDQUFBO0lBQUMsbUNBQUssQ0FBQTtBQUFBLENBQUMsRUFBL0IsS0FBSyxLQUFMLEtBQUssUUFBMEI7QUFxQzNDLE1BQU0sT0FBTyxRQUFRO0lBb0JuQixZQUFvQixHQUFlLEVBQVUsaUJBQW9DO1FBQTdELFFBQUcsR0FBSCxHQUFHLENBQVk7UUFBVSxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBVnpFLG1CQUFjLEdBQVEsYUFBYSxHQUFDLFVBQVUsQ0FBQztRQUN2RCxjQUFTLEdBQUcsWUFBWSxDQUFDO1FBQ2pCLG1C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SUFFSCxDQUFDOytHQXhXVSxRQUFRO21HQUFSLFFBQVEsc2xCQWhDVDs7Ozs7R0FLVDs7NEZBMkJVLFFBQVE7a0JBbkNwQixTQUFTOytCQUVFLGdCQUFnQixZQUNoQjs7Ozs7R0FLVDsrR0E2QjZDLGdCQUFnQjtzQkFBN0QsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVILGtCQUFrQjtzQkFBMUQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVNLGVBQWU7c0JBQTNELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkE4QjNDLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBaUI5QixhQUFhO3NCQURoQixLQUFLO2dCQVVGLGlCQUFpQjtzQkFEcEIsS0FBSztnQkFlRixLQUFLO3NCQURSLEtBQUs7Z0JBZ0JOLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIFZpZXdDaGlsZH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxyXG5pbXBvcnQge0xldmVsSW5mbywgTGV2ZWxJbmZvcywgTGV2ZWxMaXN0ZW5lcn0gZnJvbSBcIi4uL2RzcC9sZXZlbF9tZWFzdXJlXCI7XHJcblxyXG5leHBvcnQgY29uc3QgREVGQVVMVF9XQVJOX0RCX0xFVkVMID0gLTI7XHJcbmV4cG9ydCBjb25zdCBNSU5fREJfTEVWRUwgPSAtNjAuMDtcclxuZXhwb3J0IGNvbnN0IENPTlNJREVSRURfU0lMRU5DRV9EQl9MRVZFTCA9IE1JTl9EQl9MRVZFTCoyO1xyXG5leHBvcnQgY29uc3QgTElORV9XSURUSCA9IDI7XHJcbmV4cG9ydCBjb25zdCBMSU5FX0RJU1RBTkNFID0gMjtcclxuZXhwb3J0IGNvbnN0IExFVkVMX0lORElDQVRPUl9IRUlHSFQ9MztcclxuXHJcbmV4cG9ydCBjb25zdCBPVkVSRkxPV19USFJFU0hPTEQgPSAwLjI1O1xyXG5leHBvcnQgY29uc3QgT1ZFUkZMT1dfSU5DUl9GQUNUT1IgPSAwLjU7XHJcblxyXG5leHBvcnQgZW51bSBTdGF0ZSB7TE9BRElORyxSRU5ERVJJTkcsUkVBRFl9XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHJcbiAgc2VsZWN0b3I6ICdhdWRpby1sZXZlbGJhcicsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgI3ZpcnR1YWxDYW52YXM+XHJcbiAgICAgIDxjYW52YXMgI2xldmVsYmFyPjwvY2FudmFzPlxyXG4gICAgICA8Y2FudmFzICNtYXJrZXJDYW52YXM+PC9jYW52YXM+XHJcbiAgICA8L2Rpdj5cclxuICBgLFxyXG4gIHN0eWxlczogW2A6aG9zdCB7XHJcblxyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBiYWNrZ3JvdW5kOiBkYXJrZ3JheTtcclxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBvdmVyZmxvdy14OiBzY3JvbGw7XHJcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xyXG4gIH1gLCBgZGl2IHtcclxuICAgIHRvcDogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGhlaWdodDogMTAwJTtcclxuXHJcbiAgICAvKnBvc2l0aW9uOiBhYnNvbHV0ZTsqL1xyXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICB9YCwgYGNhbnZhcyB7XHJcbiAgICB0b3A6IDA7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgfWBdXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGV2ZWxCYXIgaW1wbGVtZW50cyBMZXZlbExpc3RlbmVyLEFmdGVyVmlld0luaXQge1xyXG5cclxuICBAVmlld0NoaWxkKCd2aXJ0dWFsQ2FudmFzJywgeyBzdGF0aWM6IHRydWUgfSkgdmlydHVhbENhbnZhc1JlZiE6IEVsZW1lbnRSZWY7XHJcbiAgdmlydHVhbENhbnZhcyE6IEhUTUxEaXZFbGVtZW50O1xyXG4gIEBWaWV3Q2hpbGQoJ2xldmVsYmFyJywgeyBzdGF0aWM6IHRydWUgfSkgbGl2ZUxldmVsQ2FudmFzUmVmITogRWxlbWVudFJlZjtcclxuICBsaXZlTGV2ZWxDYW52YXMhOiBIVE1MQ2FudmFzRWxlbWVudDtcclxuICBAVmlld0NoaWxkKCdtYXJrZXJDYW52YXMnLCB7IHN0YXRpYzogdHJ1ZSB9KSBtYXJrZXJDYW52YXNSZWYhOiBFbGVtZW50UmVmO1xyXG4gIG1hcmtlckNhbnZhcyE6IEhUTUxDYW52YXNFbGVtZW50O1xyXG4gIGNlITogSFRNTERpdkVsZW1lbnQ7XHJcbiAgZGJWYWx1ZXM6IEFycmF5PEFycmF5PG51bWJlcj4+O1xyXG4gIHByaXZhdGUgcGl4ZWxzUGVyVmFsdWU6bnVtYmVyPUxJTkVfRElTVEFOQ0UrTElORV9XSURUSDtcclxuICBwZWFrRGJMdmwgPSBNSU5fREJfTEVWRUw7XHJcbiAgcHJpdmF0ZSBfc3RyZWFtaW5nTW9kZSA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3N0cmVhbWluZ0ZyYW1lTGVuZ3RoPTA7XHJcbiAgcHJpdmF0ZSBfc3RhdGljTGV2ZWxJbmZvczogTGV2ZWxJbmZvcyB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgX3BsYXlGcmFtZVBvc2l0aW9uOiBudW1iZXJ8bnVsbD1udWxsO1xyXG4gIHByaXZhdGUgX3N0YXRlOlN0YXRlfG51bGw9bnVsbDtcclxuXHJcbiAgd2FybkRCTGV2ZWwgPSBERUZBVUxUX1dBUk5fREJfTEVWRUw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG4gICAgdGhpcy5kYlZhbHVlcyA9IG5ldyBBcnJheTxBcnJheTxudW1iZXI+PigpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jZSA9IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICB0aGlzLmxpdmVMZXZlbENhbnZhcyA9IHRoaXMubGl2ZUxldmVsQ2FudmFzUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICB0aGlzLm1hcmtlckNhbnZhcyA9IHRoaXMubWFya2VyQ2FudmFzUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICB0aGlzLm1hcmtlckNhbnZhcy5zdHlsZS56SW5kZXggPSAnNCc7XHJcbiAgICB0aGlzLnZpcnR1YWxDYW52YXMgPSB0aGlzLnZpcnR1YWxDYW52YXNSZWYubmF0aXZlRWxlbWVudDtcclxuICAgIHRoaXMubGF5b3V0KCk7XHJcbiAgICB0aGlzLmRyYXdBbGwoKTtcclxuICB9XHJcblxyXG5cclxuICBASG9zdExpc3RlbmVyKCdzY3JvbGwnLCBbJyRldmVudCddKVxyXG4gIG9uU2Nyb2xsKHNlOiBFdmVudCkge1xyXG4gICAgc2V0VGltZW91dCgoKT0+e1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydFBvc2l0aW9uKCk7XHJcbiAgICAgICAgICB0aGlzLmRyYXdBbGwoKTtcclxuICAgICAgICAgIHRoaXMuZHJhd1BsYXlQb3NpdGlvbigpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlVmlld3BvcnRQb3NpdGlvbigpe1xyXG4gICAgLy8gTW92ZSBjYW52YXNlcyB0byB2aXNpYmxlIHZpZXdwb3J0IHBvc2l0aW9uXHJcbiAgICBsZXQgdmlld1BvcnRTdHlsZUxlZnQ9dGhpcy5jZS5zY3JvbGxMZWZ0ICsgJ3B4JztcclxuICAgIHRoaXMubGl2ZUxldmVsQ2FudmFzLnN0eWxlLmxlZnQgPSB2aWV3UG9ydFN0eWxlTGVmdDtcclxuICAgIHRoaXMubWFya2VyQ2FudmFzLnN0eWxlLmxlZnQgPSB2aWV3UG9ydFN0eWxlTGVmdDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHN0cmVhbWluZ01vZGUoc3RyZWFtaW5nTW9kZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuX3N0cmVhbWluZ01vZGUgIT09IHN0cmVhbWluZ01vZGUpIHtcclxuICAgICAgdGhpcy5fc3RyZWFtaW5nTW9kZSA9IHN0cmVhbWluZ01vZGU7XHJcbiAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgdGhpcy5sYXlvdXRTdGF0aWMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRpc3BsYXlMZXZlbEluZm9zKGxldmVsSW5mb3M6IExldmVsSW5mb3MgfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAobGV2ZWxJbmZvcykge1xyXG4gICAgICB0aGlzLl9zdGF0aWNMZXZlbEluZm9zID0gbGV2ZWxJbmZvcztcclxuICAgICAgdGhpcy5kYlZhbHVlcyA9IGxldmVsSW5mb3MuYnVmZmVyTGV2ZWxJbmZvcy5tYXAoKGxpKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGxpLnBvd2VyTGV2ZWxzREIoKVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3N0YXRpY0xldmVsSW5mb3MgPW51bGw7XHJcbiAgICAgICAgdGhpcy5kYlZhbHVlcyA9IG5ldyBBcnJheTxBcnJheTxudW1iZXI+PigpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sYXlvdXRTdGF0aWMoKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHN0YXRlKHN0YXRlOlN0YXRlKXtcclxuICAgdGhpcy5fc3RhdGU9c3RhdGU7XHJcbiAgIHRoaXMubGF5b3V0U3RhdGljKCk7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hhbm5lbENvdW50KGNoYW5uZWxDb3VudDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnJlc2V0KCk7XHJcbiAgfVxyXG5cclxuICBzZXQgcGxheUZyYW1lUG9zaXRpb24ocGxheUZyYW1lUG9zaXRpb246IG51bWJlcikge1xyXG4gICAgdGhpcy5fcGxheUZyYW1lUG9zaXRpb24gPSBwbGF5RnJhbWVQb3NpdGlvbjtcclxuICAgIHRoaXMuZHJhd1BsYXlQb3NpdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXHJcbiAgb25SZXNpemUoZXZlbnQ6IEV2ZW50KSB7XHJcblxyXG4gICAgdGhpcy5sYXlvdXQoKTtcclxuICAgIHRoaXMuZHJhd0FsbCgpO1xyXG4gIH1cclxuXHJcbiAgbGF5b3V0KCkge1xyXG5cclxuICAgIC8vIHNldCBDYW52YXMgc2l6ZSB0byB2aWV3cG9ydCBzaXplXHJcbiAgICB0aGlzLmxpdmVMZXZlbENhbnZhcy53aWR0aCA9IHRoaXMuY2Uub2Zmc2V0V2lkdGg7XHJcbiAgICB0aGlzLmxpdmVMZXZlbENhbnZhcy5oZWlnaHQgPSB0aGlzLmNlLm9mZnNldEhlaWdodDtcclxuXHJcbiAgICB0aGlzLm1hcmtlckNhbnZhcy53aWR0aCA9IHRoaXMuY2Uub2Zmc2V0V2lkdGg7XHJcbiAgICB0aGlzLm1hcmtlckNhbnZhcy5oZWlnaHQgPSB0aGlzLmNlLm9mZnNldEhlaWdodDtcclxuXHJcbiAgICAvLyBhbmQgbW92ZSB0byB2aWV3cG9ydCBwb3NpdGlvblxyXG4gICAgdGhpcy51cGRhdGVWaWV3cG9ydFBvc2l0aW9uKCk7XHJcblxyXG4gICAgdGhpcy5kcmF3QWxsKCk7XHJcbiAgICB0aGlzLmRyYXdQbGF5UG9zaXRpb24oKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZShsZXZlbEluZm9zOiBMZXZlbEluZm8pIHtcclxuICAgIGlmICh0aGlzLl9zdHJlYW1pbmdNb2RlKSB7XHJcbiAgICAgIGxldCBkYlZhbHMgPSBsZXZlbEluZm9zLnBvd2VyTGV2ZWxzREIoKTtcclxuICAgICAgbGV0IHBlYWtEQlZhbCA9IGxldmVsSW5mb3MucG93ZXJMZXZlbERCKCk7XHJcbiAgICAgIHRoaXMuX3N0cmVhbWluZ0ZyYW1lTGVuZ3RoKz1sZXZlbEluZm9zLmZyYW1lTGVuZ3RoO1xyXG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJVcGRhdGUgbGV2ZWwgaW5mbyBmcmFtZUxlbmd0aDogXCIrbGV2ZWxJbmZvcy5mcmFtZUxlbmd0aCtcIiwgdG90YWwgc3RyZWFtaW5nIGZyYW1lIGxlbmd0aDogXCIrdGhpcy5fc3RyZWFtaW5nRnJhbWVMZW5ndGgpO1xyXG4gICAgICBpZiAodGhpcy5wZWFrRGJMdmwgPCBwZWFrREJWYWwpIHtcclxuICAgICAgICB0aGlzLnBlYWtEYkx2bCA9IHBlYWtEQlZhbDtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRiVmFsdWVzLnB1c2goZGJWYWxzKTtcclxuICAgICAgbGV0IGkgPSB0aGlzLmRiVmFsdWVzLmxlbmd0aCAtIDE7XHJcbiAgICAgIGxldCB4ID0gaSAqIHRoaXMucGl4ZWxzUGVyVmFsdWU7XHJcbiAgICAgIHRoaXMuZHJhd1B1c2hWYWx1ZSh4LCBkYlZhbHMpO1xyXG4gICAgICB0aGlzLmNoZWNrV2lkdGgoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0cmVhbUZpbmlzaGVkKCkge1xyXG4gICAgdGhpcy5sYXlvdXRTdGF0aWMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbGF5b3V0U3RhdGljKCkge1xyXG5cclxuICAgIGxldCByZXF1aXJlZFdpZHRoID0gTWF0aC5yb3VuZCh0aGlzLmRiVmFsdWVzLmxlbmd0aCAqIHRoaXMucGl4ZWxzUGVyVmFsdWUpO1xyXG4gICAgaWYgKHRoaXMudmlydHVhbENhbnZhcyAmJiB0aGlzLmNlKSB7XHJcblxyXG4gICAgICB0aGlzLnZpcnR1YWxDYW52YXMuc3R5bGUud2lkdGggPSByZXF1aXJlZFdpZHRoICsgJ3B4JztcclxuICAgICAgdGhpcy5jZS5zY3JvbGxMZWZ0ID0gcmVxdWlyZWRXaWR0aCAtIHRoaXMuY2Uub2Zmc2V0V2lkdGg7XHJcbiAgICAgIHRoaXMubGF5b3V0KCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1dpZHRoKCkge1xyXG4gICAgbGV0IHJlcXVpcmVkV2lkdGggPSB0aGlzLmRiVmFsdWVzLmxlbmd0aCp0aGlzLnBpeGVsc1BlclZhbHVlO1xyXG4gICAgaWYgKHRoaXMudmlydHVhbENhbnZhcy5vZmZzZXRXaWR0aCAtIHJlcXVpcmVkV2lkdGggPCB0aGlzLmNlLm9mZnNldFdpZHRoICogT1ZFUkZMT1dfVEhSRVNIT0xEKSB7XHJcbiAgICAgIGxldCBuZXdXaWR0aCA9IE1hdGguZmxvb3IodGhpcy52aXJ0dWFsQ2FudmFzLm9mZnNldFdpZHRoICsgKHRoaXMuY2Uub2Zmc2V0V2lkdGggKiBPVkVSRkxPV19JTkNSX0ZBQ1RPUikpO1xyXG4gICAgICB0aGlzLnZpcnR1YWxDYW52YXMuc3R5bGUud2lkdGggPSBuZXdXaWR0aCArICdweCc7XHJcbiAgICAgIHRoaXMuY2Uuc2Nyb2xsTGVmdCA9IG5ld1dpZHRoIC0gdGhpcy5jZS5vZmZzZXRXaWR0aDtcclxuXHJcbiAgICAgICAvLyBkbyBub3QgY2FsbCBsYXlvdXQgaGVyZSBpdCBpcyB0cmlnZ2VyZWQgYnkgdGhlIHNjcm9sbCBldmVudFxyXG4gICAgICAvL3RoaXMubGF5b3V0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldChzdGF0PWZhbHNlKSB7XHJcbiAgICB0aGlzLnBlYWtEYkx2bCA9IE1JTl9EQl9MRVZFTDtcclxuICAgIHRoaXMuZGJWYWx1ZXMgPSBuZXcgQXJyYXk8QXJyYXk8bnVtYmVyPj4oKTtcclxuICAgIHRoaXMuX3N0cmVhbWluZ0ZyYW1lTGVuZ3RoPTA7XHJcbiAgICBpZihzdGF0KXtcclxuICAgICAgdGhpcy5sYXlvdXRTdGF0aWMoKTtcclxuICAgIH1lbHNlIHtcclxuICAgICAgdGhpcy5sYXlvdXQoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZHJhd0FsbCgpO1xyXG4gICAgdGhpcy5kcmF3UGxheVBvc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBkcmF3TGV2ZWxCYWNrZ3JvdW5kKGc6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgeDogbnVtYmVyLCBoOiBudW1iZXIpe1xyXG4gICAgZy5zdHJva2VTdHlsZSA9ICdibGFjayc7XHJcbiAgICBnLmZpbGxTdHlsZSA9ICdibGFjayc7XHJcbiAgICBnLmZpbGxSZWN0KHgsMCx0aGlzLnBpeGVsc1BlclZhbHVlLGgpXHJcbiAgfVxyXG5cclxuICAvLyBwcml2YXRlIGRyYXdMZXZlbExpbmUoZzogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCB4OiBudW1iZXIsIGg6IG51bWJlciwgZGJWYWw6IG51bWJlcikge1xyXG4gIC8vICAgLy90cmFuc2xhdGUgdG8gdmlld3BvcnRcclxuICAvLyAgIGxldCB4YyA9IHggLSB0aGlzLmNlLnNjcm9sbExlZnQ7XHJcbiAgLy9cclxuICAvLyAgIHRoaXMuZHJhd0xldmVsQmFja2dyb3VuZChnLHhjLGgpO1xyXG4gIC8vICAgZy5saW5lV2lkdGggPSBMSU5FX1dJRFRIO1xyXG4gIC8vICAgaWYgKGRiVmFsID49IHRoaXMud2FybkRCTGV2ZWwpIHtcclxuICAvLyAgICAgZy5zdHJva2VTdHlsZSA9ICdyZWQnO1xyXG4gIC8vICAgICBnLmZpbGxTdHlsZSA9ICdyZWQnO1xyXG4gIC8vXHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICBnLnN0cm9rZVN0eWxlID0gJyMwMGM4NTMnO1xyXG4gIC8vICAgICBnLmZpbGxTdHlsZSA9ICcjMDBjODUzJztcclxuICAvLyAgIH1cclxuICAvLyAgIGcuYmVnaW5QYXRoKCk7XHJcbiAgLy8gICBnLm1vdmVUbyh4YywgaCk7XHJcbiAgLy8gICBsZXQgcFZhbCA9ICgoZGJWYWwgLSBNSU5fREJfTEVWRUwpIC8gLU1JTl9EQl9MRVZFTCkgKiBoO1xyXG4gIC8vXHJcbiAgLy8gICBnLmxpbmVUbyh4YywgaCAtIHBWYWwpO1xyXG4gIC8vICAgZy5jbG9zZVBhdGgoKTtcclxuICAvLyAgIGcuc3Ryb2tlKCk7XHJcbiAgLy9cclxuICAvLyB9XHJcblxyXG4gIHByaXZhdGUgZHJhd0xldmVsTGluZXMoZzogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCB4OiBudW1iZXIsIGg6IG51bWJlciwgZGJWYWxzOiBBcnJheTxudW1iZXI+KSB7XHJcbiAgICAvL3RyYW5zbGF0ZSB0byB2aWV3cG9ydFxyXG4gICAgbGV0IHhjID0geCAtIHRoaXMuY2Uuc2Nyb2xsTGVmdDtcclxuICAgIHRoaXMuZHJhd0xldmVsQmFja2dyb3VuZChnLHhjLGgpO1xyXG5cclxuICAgIGxldCBjaEggPSBNYXRoLmZsb29yKGggLyBkYlZhbHMubGVuZ3RoKTtcclxuICAgIGcubGluZVdpZHRoID0gTElORV9XSURUSDtcclxuICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBkYlZhbHMubGVuZ3RoOyBjaCsrKSB7XHJcbiAgICAgIGxldCBkYlZhbCA9IGRiVmFsc1tjaF07XHJcblxyXG4gICAgICBsZXQgeSA9IE1hdGguZmxvb3IoY2ggKiBjaEgpO1xyXG4gICAgICBpZiAoZGJWYWwgPj0gdGhpcy53YXJuREJMZXZlbCkge1xyXG4gICAgICAgIGcuc3Ryb2tlU3R5bGUgPSAncmVkJztcclxuICAgICAgICBnLmZpbGxTdHlsZSA9ICdyZWQnO1xyXG4gICAgICB9IGVsc2UgaWYoZGJWYWwgPCBDT05TSURFUkVEX1NJTEVOQ0VfREJfTEVWRUwpIHtcclxuICAgICAgICBnLnN0cm9rZVN0eWxlPSdncmV5JztcclxuICAgICAgICBnLmZpbGxTdHlsZT0nZ3JleSdcclxuICAgICAgfSBlbHNle1xyXG4gICAgICAgICAgZy5zdHJva2VTdHlsZSA9ICcjMDBjODUzJztcclxuICAgICAgICAgIGcuZmlsbFN0eWxlID0gJyMwMGM4NTMnXHJcbiAgICAgIH1cclxuICAgICAgZy5iZWdpblBhdGgoKTtcclxuICAgICAgZy5tb3ZlVG8oeGMsIHkgKyBjaEgpO1xyXG4gICAgICBnLmxpbmVUbyh4YywgeSArIGNoSCAtIExFVkVMX0lORElDQVRPUl9IRUlHSFQpO1xyXG4gICAgICBsZXQgcG5WYWw9KChkYlZhbCAtIE1JTl9EQl9MRVZFTCkgLyAtTUlOX0RCX0xFVkVMKTtcclxuICAgICAgbGV0IGx2bEluZGljYXRvclNwYWNlPUxFVkVMX0lORElDQVRPUl9IRUlHSFQrTElORV9ESVNUQU5DRTtcclxuICAgICAgbGV0IGxldmVsSD1jaEgtbHZsSW5kaWNhdG9yU3BhY2U7XHJcbiAgICAgIGxldCBwVmFsID0gcG5WYWwgKiBsZXZlbEg7XHJcbiAgICAgIGlmKHBWYWw+bGV2ZWxILTEpe1xyXG4gICAgICAgIHBWYWw9bGV2ZWxILTFcclxuICAgICAgfWVsc2UgaWYocFZhbDwwKXtcclxuICAgICAgICBwVmFsPTBcclxuICAgICAgfVxyXG4gICAgICBnLm1vdmVUbyh4YywgeSArIGNoSCAtIGx2bEluZGljYXRvclNwYWNlICk7XHJcbiAgICAgIGcubGluZVRvKHhjLCB5ICsgY2hIIC0gbHZsSW5kaWNhdG9yU3BhY2UgLSBwVmFsKTtcclxuICAgICAgZy5jbG9zZVBhdGgoKTtcclxuICAgICAgZy5zdHJva2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZHJhd1B1c2hWYWx1ZSh4OiBudW1iZXIsIGRiVmFsczogQXJyYXk8bnVtYmVyPikge1xyXG5cclxuICAgIGlmICh0aGlzLmxpdmVMZXZlbENhbnZhcykge1xyXG4gICAgICBsZXQgaCA9IHRoaXMubGl2ZUxldmVsQ2FudmFzLmhlaWdodDtcclxuICAgICAgbGV0IGcgPSB0aGlzLmxpdmVMZXZlbENhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgIGlmIChnKSB7XHJcbiAgICAgICAgdGhpcy5kcmF3TGV2ZWxMaW5lcyhnLCB4LCBoLCBkYlZhbHMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlICBkcmF3QWxsKCkge1xyXG4gICAgaWYgKHRoaXMubGl2ZUxldmVsQ2FudmFzKSB7XHJcbiAgICAgIGxldCB3ID0gdGhpcy5saXZlTGV2ZWxDYW52YXMud2lkdGg7XHJcbiAgICAgIGxldCBoID0gdGhpcy5saXZlTGV2ZWxDYW52YXMuaGVpZ2h0O1xyXG4gICAgICBsZXQgZyA9IHRoaXMubGl2ZUxldmVsQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuICAgICAgaWYgKGcpIHtcclxuICAgICAgICAvLyBjbGVhciBjYW52YXNcclxuICAgICAgICBnLmZpbGxTdHlsZSA9ICdncmV5JztcclxuICAgICAgICBnLmZpbGxSZWN0KDAsIDAsIHcsIGgpO1xyXG5cclxuICAgICAgICBnLmxpbmVXaWR0aCA9IExJTkVfV0lEVEg7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRiVmFsdWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIC8vIGRyYXcgb25seSB2aWV3cG9ydCBwYXJ0OlxyXG5cclxuICAgICAgICAgIC8vIGRyYXcgZnJvbSB4MSB0byB4MlxyXG4gICAgICAgICAgbGV0IHgxID0gdGhpcy5jZS5zY3JvbGxMZWZ0O1xyXG4gICAgICAgICAgbGV0IHgyID0geDEgKyB0aGlzLmNlLm9mZnNldFdpZHRoO1xyXG5cclxuICAgICAgICAgIC8vIGNvcnJlc3BvbmRzIHRvIHRoaXMgbGV2ZWwgdmFsdWVzOlxyXG4gICAgICAgICAgbGV0IGkxID0gTWF0aC5mbG9vcih4MSAvIHRoaXMucGl4ZWxzUGVyVmFsdWUpO1xyXG4gICAgICAgICAgbGV0IGkyID0gTWF0aC5jZWlsKHgyIC90aGlzLnBpeGVsc1BlclZhbHVlKTtcclxuICAgICAgICAgIC8vIHNvbWUgdmFsdWVzIGFyb3VuZFxyXG4gICAgICAgICAgaTEgLT0gMjtcclxuICAgICAgICAgIGkyICs9IDI7XHJcbiAgICAgICAgICAvLyBsaW1pdHNcclxuICAgICAgICAgIGlmIChpMSA8IDApIHtcclxuICAgICAgICAgICAgaTEgPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGkyID4gdGhpcy5kYlZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaTIgPSB0aGlzLmRiVmFsdWVzLmxlbmd0aDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBsZXQgYz0wO1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IGkxOyBpIDwgaTI7IGkrKykge1xyXG4gICAgICAgICAgICAgIGxldCB4ID0gaSAqIHRoaXMucGl4ZWxzUGVyVmFsdWU7XHJcbiAgICAgICAgICAgICAgbGV0IGRiVmFscyA9IHRoaXMuZGJWYWx1ZXNbaV07XHJcbiAgICAgICAgICAgICAgaWYgKGRiVmFscykge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmRyYXdMZXZlbExpbmVzKGcsIHgsIGgsIGRiVmFscyk7XHJcbiAgICAgICAgICAgICAgICAgIGMrKztcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNlIGlmKHRoaXMuX3N0YXRlIT09U3RhdGUuUkVBRFkpe1xyXG4gICAgICAgICAgZy5zdHJva2VTdHlsZSA9ICd3aGl0ZSc7XHJcbiAgICAgICAgICBnLmZpbGxTdHlsZSA9ICd3aGl0ZSc7XHJcbiAgICAgICAgICBnLmZvbnQgPSAnMjBweCBzYW5zLXNlcmlmJztcclxuXHJcbiAgICAgICAgICBsZXQgc3RhdGVUeHQ9Jyc7XHJcblxyXG4gICAgICAgICAgaWYodGhpcy5fc3RhdGU9PT1TdGF0ZS5MT0FESU5HKXtcclxuICAgICAgICAgICAgc3RhdGVUeHQ9XCJMb2FkaW5nLi4uXCI7XHJcbiAgICAgICAgICB9ZWxzZSBpZih0aGlzLl9zdGF0ZT09PVN0YXRlLlJFTkRFUklORyl7XHJcbiAgICAgICAgICAgIHN0YXRlVHh0PVwiUmVuZGVyaW5nLi4uXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBnLmZpbGxUZXh0KHN0YXRlVHh0LCAxMCwgMjUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGZyYW1lc1BlclBpeGVsKCk6IG51bWJlciB8IG51bGwge1xyXG4gICAgbGV0IGZwcDpudW1iZXJ8bnVsbD1udWxsO1xyXG4gICAgLy8gb25lIGJ1ZmZlclxyXG4gICAgaWYgKHRoaXMuX3N0YXRpY0xldmVsSW5mb3MpIHtcclxuICAgICAgbGV0IGZyYW1lc1BlckJ1ZmZlciA9IHRoaXMuX3N0YXRpY0xldmVsSW5mb3MuZnJhbWVzUGVyQnVmZmVyKCk7XHJcbiAgICAgIGZwcD1mcmFtZXNQZXJCdWZmZXIgLyB0aGlzLnBpeGVsc1BlclZhbHVlO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIGlmKHRoaXMuZGJWYWx1ZXMgJiYgdGhpcy5kYlZhbHVlcy5sZW5ndGg+MCkge1xyXG4gICAgICAgIGZwcD10aGlzLl9zdHJlYW1pbmdGcmFtZUxlbmd0aCAvICh0aGlzLmRiVmFsdWVzLmxlbmd0aCp0aGlzLnBpeGVsc1BlclZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZwcDtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGRyYXdQbGF5UG9zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5tYXJrZXJDYW52YXMpIHtcclxuICAgICAgbGV0IHcgPSB0aGlzLm1hcmtlckNhbnZhcy53aWR0aDtcclxuICAgICAgbGV0IGggPSB0aGlzLm1hcmtlckNhbnZhcy5oZWlnaHQ7XHJcbiAgICAgIGxldCBnID0gdGhpcy5tYXJrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xyXG4gICAgICBpZiAoZykge1xyXG4gICAgICAgIGcuY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICAgIGxldCBmcmFtZXNQZXJQaXhlbCA9IHRoaXMuZnJhbWVzUGVyUGl4ZWwoKTtcclxuICAgICAgICBpZiAoZnJhbWVzUGVyUGl4ZWwgJiYgdGhpcy5fcGxheUZyYW1lUG9zaXRpb24pIHtcclxuICAgICAgICAgIGxldCB4ID0gdGhpcy5fcGxheUZyYW1lUG9zaXRpb24gLyBmcmFtZXNQZXJQaXhlbDtcclxuXHJcbiAgICAgICAgICAvLyBHZXQgcG9zaXRpb24gaW4gdmlld3BvcnRcclxuICAgICAgICAgIGxldCB4YyA9IHggLSB0aGlzLmNlLnNjcm9sbExlZnQ7XHJcbiAgICAgICAgICAvLyBPbmx5IGRyYXcgaWYgaW5zaWRlIG1hcmtlciAodmlld3BvcnQpIGNhbnZhc1xyXG4gICAgICAgICAgaWYoeGM+PTAgJiYgeGM8PXcpIHtcclxuICAgICAgICAgICAgZy5maWxsU3R5bGUgPSAncmVkJztcclxuICAgICAgICAgICAgZy5zdHJva2VTdHlsZSA9ICdyZWQnO1xyXG4gICAgICAgICAgICBnLmxpbmVXaWR0aCA9IExJTkVfV0lEVEg7XHJcbiAgICAgICAgICAgIGcuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgICAgIC8vIHBhaW50IG92ZXIgYWxsIGNoYW5uZWxzXHJcbiAgICAgICAgICAgIGcubW92ZVRvKHhjLCAwKTtcclxuICAgICAgICAgICAgZy5saW5lVG8oeGMsIGgpO1xyXG4gICAgICAgICAgICBnLmNsb3NlUGF0aCgpO1xyXG4gICAgICAgICAgICBnLnN0cm9rZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxufVxyXG4iXX0=
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Component } from "@angular/core";
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class ScrollPaneHorizontal {
|
|
4
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScrollPaneHorizontal, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ScrollPaneHorizontal, selector: "scroll-pane-horizontal", ngImport: i0, template: '', isInline: true, styles: [":host{width:100%;background:#a9a9a9;box-sizing:border-box;height:100%;position:relative;overflow-x:scroll;overflow-y:auto}\n"] }); }
|
|
6
|
-
}
|
|
7
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScrollPaneHorizontal, decorators: [{
|
|
8
|
-
type: Component,
|
|
9
|
-
args: [{ selector: 'scroll-pane-horizontal', template: '', styles: [":host{width:100%;background:#a9a9a9;box-sizing:border-box;height:100%;position:relative;overflow-x:scroll;overflow-y:auto}\n"] }]
|
|
10
|
-
}] });
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsX3BhbmVfaG9yaXpvbnRhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby91aS9zY3JvbGxfcGFuZV9ob3Jpem9udGFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7O0FBa0J4QyxNQUFNLE9BQU8sb0JBQW9COytHQUFwQixvQkFBb0I7bUdBQXBCLG9CQUFvQiw4REFickIsRUFBRTs7NEZBYUQsb0JBQW9CO2tCQWhCaEMsU0FBUzsrQkFFRSx3QkFBd0IsWUFDeEIsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblxyXG4gIHNlbGVjdG9yOiAnc2Nyb2xsLXBhbmUtaG9yaXpvbnRhbCcsXHJcbiAgdGVtcGxhdGU6ICcnLFxyXG4gIHN0eWxlczogW1xyXG4gICAgYDpob3N0IHtcclxuICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICBiYWNrZ3JvdW5kOiBkYXJrZ3JheTtcclxuICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgICAgICAgb3ZlcmZsb3cteDogc2Nyb2xsO1xyXG4gICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbiAgICAgICAgIH1gXVxyXG5cclxufSlcclxuZXhwb3J0IGNsYXNzIFNjcm9sbFBhbmVIb3Jpem9udGFse1xyXG5cclxufVxyXG4iXX0=
|