1import { 2 buildAdminBreadcrumbs 3} from "./chunk-B57R6CYU.js"; 4import { 5 RigaDateTimeService 6} from "./chunk-RAL4KSWL.js"; 7import { 8 BreadcrumbNavigationComponent 9} from "./chunk-C5APCOMN.js"; 10import { 11 addCircleOutline, 12 addIcons, 13 alertCircleOutline, 14 analyticsOutline, 15 archiveOutline, 16 bluetoothOutline, 17 bugOutline, 18 businessOutline, 19 checkmarkCircleOutline, 20 checkmarkOutline, 21 chevronDownOutline, 22 chevronUpOutline, 23 closeCircleOutline, 24 closeOutline, 25 closeSharp, 26 codeSlashOutline, 27 documentOutline, 28 documentTextOutline, 29 downloadOutline, 30 ellipsisVerticalOutline, 31 eyeOutline, 32 filterOutline, 33 imageOutline, 34 locationOutline, 35 navigateOutline, 36 phonePortraitOutline, 37 pulseOutline, 38 radioOutline, 39 refreshOutline, 40 searchCircleOutline, 41 searchOutline, 42 settingsOutline, 43 syncOutline, 44 timeOutline, 45 trashOutline 46} from "./chunk-5VZGNM5O.js"; 47import { 48 BUG_REPORT_CATEGORIES, 49 BUG_REPORT_STATUSES, 50 BugReportService 51} from "./chunk-NM2GQ3VU.js"; 52import "./chunk-4Y5EMHGE.js"; 53import "./chunk-GEY5NERW.js"; 54import "./chunk-CZMIP4ZQ.js"; 55import "./chunk-ODH7QDZO.js"; 56import "./chunk-4UEQF233.js"; 57import "./chunk-K52XM66R.js"; 58import "./chunk-PYYASMRY.js"; 59import { 60 UserCampusService 61} from "./chunk-63DLEHZF.js"; 62import "./chunk-PFRFKH6U.js"; 63import "./chunk-UZKEIBGO.js"; 64import "./chunk-2E4THSOE.js"; 65import "./chunk-JISY7VJD.js"; 66import "./chunk-KP4RHBP7.js"; 67import "./chunk-QI7JV4VS.js"; 68import "./chunk-OTQ6GTAJ.js"; 69import "./chunk-RLZ522BW.js"; 70import "./chunk-RLJCY5HS.js"; 71import { 72 TranslateModule, 73 TranslatePipe, 74 TranslateService 75} from "./chunk-O5XYYQCR.js"; 76import "./chunk-QGEJYSW7.js"; 77import { 78 ApiUrlService 79} from "./chunk-MAIAEXGG.js"; 80import "./chunk-L4O6SE3A.js"; 81import { 82 AlertController, 83 IonBadge, 84 IonButton, 85 IonCard, 86 IonCardContent, 87 IonCardHeader, 88 IonContent, 89 IonIcon, 90 IonList, 91 IonSelect, 92 IonSelectOption, 93 IonSpinner, 94 IonicModule, 95 LoadingController, 96 SelectValueAccessorDirective, 97 ToastController 98} from "./chunk-INK5THDW.js"; 99import "./chunk-GMPIA5L4.js"; 100import { 101 ActivatedRoute, 102 CommonModule, 103 Component, 104 FormsModule, 105 NgClass, 106 NgControlStatus, 107 NgModel, 108 Subject, 109 UpperCasePipe, 110 finalize, 111 setClassMetadata, 112 takeUntil, 113 ɵsetClassDebugInfo, 114 ɵɵadvance, 115 ɵɵattribute, 116 ɵɵclassProp, 117 ɵɵconditional, 118 ɵɵdefineComponent, 119 ɵɵdirectiveInject, 120 ɵɵelement, 121 ɵɵelementEnd, 122 ɵɵelementStart, 123 ɵɵgetCurrentView, 124 ɵɵlistener, 125 ɵɵnextContext, 126 ɵɵpipe, 127 ɵɵpipeBind1, 128 ɵɵpipeBind2, 129 ɵɵproperty, 130 ɵɵpureFunction2, 131 ɵɵrepeater, 132 ɵɵrepeaterCreate, 133 ɵɵresetView, 134 ɵɵrestoreView, 135 ɵɵsanitizeUrl, 136 ɵɵtemplate, 137 ɵɵtext, 138 ɵɵtextInterpolate, 139 ɵɵtextInterpolate1, 140 ɵɵtextInterpolate2, 141 ɵɵtextInterpolate3, 142 ɵɵtextInterpolate6, 143 ɵɵtwoWayBindingSet, 144 ɵɵtwoWayListener, 145 ɵɵtwoWayProperty 146} from "./chunk-UQ6LLOJ6.js"; 147import "./chunk-BD3NMR2S.js"; 148import "./chunk-6HPUB4U6.js"; 149import "./chunk-JTG2GCS6.js"; 150import "./chunk-WGFJL45C.js"; 151import "./chunk-7WVISTDL.js"; 152import "./chunk-2S57T3GS.js"; 153import "./chunk-R4QHACMO.js"; 154import "./chunk-4MEJEBWM.js"; 155import "./chunk-RIBVNXHQ.js"; 156import "./chunk-Z42OVMMO.js"; 157import "./chunk-O5S42IXR.js"; 158import "./chunk-QBR2RTFG.js"; 159import "./chunk-MIOLVGSM.js"; 160import "./chunk-V3YFOG6Q.js"; 161import "./chunk-LPMBLWVS.js"; 162import "./chunk-5LKHIIQE.js"; 163import "./chunk-ITE2OHLM.js"; 164import "./chunk-C46CB72A.js"; 165import "./chunk-SRPSML5O.js"; 166import "./chunk-NRSVX4KN.js"; 167import "./chunk-T4GYAOTA.js"; 168import "./chunk-2VHYZHLL.js"; 169import "./chunk-S6LHOZ5A.js"; 170import "./chunk-Y6HZOH3Q.js"; 171import "./chunk-TWQHADEW.js"; 172import "./chunk-3J4L7S6G.js"; 173import "./chunk-IL42VKT6.js"; 174import "./chunk-LONO5O5R.js"; 175import "./chunk-KFBF5L4X.js"; 176import "./chunk-PWC4K6CW.js"; 177import "./chunk-R6JLIESI.js"; 178import "./chunk-UG6K57PI.js"; 179import "./chunk-UR6VIRNL.js"; 180import "./chunk-OJO5RD3M.js"; 181import { 182 __async, 183 __commonJS, 184 __require, 185 __toESM 186} from "./chunk-CO64IJQE.js"; 187
vendor: 162,773 bytes, lines 188-3106
188// node_modules/jszip/dist/jszip.min.js 189var require_jszip_min = __commonJS({ 190 "node_modules/jszip/dist/jszip.min.js"(exports, module) { 191 "use strict"; 192 !function(e) { 193 if ("object" == typeof exports && "undefined" != typeof module) module.exports = e(); 194 else if ("function" == typeof define && define.amd) define([], e); 195 else { 196 ("undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this).JSZip = e(); 197 } 198 }(function() { 199 return function s(a, o, h) { 200 function u(r, e2) { 201 if (!o[r]) { 202 if (!a[r]) { 203 var t = "function" == typeof __require && __require; 204 if (!e2 && t) return t(r, true); 205 if (l) return l(r, true); 206 var n = new Error("Cannot find module '" + r + "'"); 207 throw n.code = "MODULE_NOT_FOUND", n; 208 } 209 var i = o[r] = { 210 exports: {} 211 }; 212 a[r][0].call(i.exports, function(e3) { 213 var t2 = a[r][1][e3]; 214 return u(t2 || e3); 215 }, i, i.exports, s, a, o, h); 216 } 217 return o[r].exports; 218 } 219 for (var l = "function" == typeof __require && __require, e = 0; e < h.length; e++) u(h[e]); 220 return u; 221 }({ 222 1: [function(e, t, r) { 223 "use strict"; 224 var d = e("./utils"), c = e("./support"), p = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; 225 r.encode = function(e2) { 226 for (var t2, r2, n, i, s, a, o, h = [], u = 0, l = e2.length, f = l, c2 = "string" !== d.getTypeOf(e2); u < e2.length; ) f = l - u, n = c2 ? (t2 = e2[u++], r2 = u < l ? e2[u++] : 0, u < l ? e2[u++] : 0) : (t2 = e2.charCodeAt(u++), r2 = u < l ? e2.charCodeAt(u++) : 0, u < l ? e2.charCodeAt(u++) : 0), i = t2 >> 2, s = (3 & t2) << 4 | r2 >> 4, a = 1 < f ? (15 & r2) << 2 | n >> 6 : 64, o = 2 < f ? 63 & n : 64, h.push(p.charAt(i) + p.charAt(s) + p.charAt(a) + p.charAt(o)); 227 return h.join(""); 228 }, r.decode = function(e2) { 229 var t2, r2, n, i, s, a, o = 0, h = 0, u = "data:"; 230 if (e2.substr(0, u.length) === u) throw new Error("Invalid base64 input, it looks like a data url."); 231 var l, f = 3 * (e2 = e2.replace(/[^A-Za-z0-9+/=]/g, "")).length / 4; 232 if (e2.charAt(e2.length - 1) === p.charAt(64) && f--, e2.charAt(e2.length - 2) === p.charAt(64) && f--, f % 1 != 0) throw new Error("Invalid base64 input, bad content length."); 233 for (l = c.uint8array ? new Uint8Array(0 | f) : new Array(0 | f); o < e2.length; ) t2 = p.indexOf(e2.charAt(o++)) << 2 | (i = p.indexOf(e2.charAt(o++))) >> 4, r2 = (15 & i) << 4 | (s = p.indexOf(e2.charAt(o++))) >> 2, n = (3 & s) << 6 | (a = p.indexOf(e2.charAt(o++))), l[h++] = t2, 64 !== s && (l[h++] = r2), 64 !== a && (l[h++] = n); 234 return l; 235 }; 236 }, { 237 "./support": 30, 238 "./utils": 32 239 }], 240 2: [function(e, t, r) { 241 "use strict"; 242 var n = e("./external"), i = e("./stream/DataWorker"), s = e("./stream/Crc32Probe"), a = e("./stream/DataLengthProbe"); 243 function o(e2, t2, r2, n2, i2) { 244 this.compressedSize = e2, this.uncompressedSize = t2, this.crc32 = r2, this.compression = n2, this.compressedContent = i2; 245 } 246 o.prototype = { 247 getContentWorker: function() { 248 var e2 = new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a("data_length")), t2 = this; 249 return e2.on("end", function() { 250 if (this.streamInfo.data_length !== t2.uncompressedSize) throw new Error("Bug : uncompressed data size mismatch"); 251 }), e2; 252 }, 253 getCompressedWorker: function() { 254 return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize", this.compressedSize).withStreamInfo("uncompressedSize", this.uncompressedSize).withStreamInfo("crc32", this.crc32).withStreamInfo("compression", this.compression); 255 } 256 }, o.createWorkerFrom = function(e2, t2, r2) { 257 return e2.pipe(new s()).pipe(new a("uncompressedSize")).pipe(t2.compressWorker(r2)).pipe(new a("compressedSize")).withStreamInfo("compression", t2); 258 }, t.exports = o; 259 }, { 260 "./external": 6, 261 "./stream/Crc32Probe": 25, 262 "./stream/DataLengthProbe": 26, 263 "./stream/DataWorker": 27 264 }], 265 3: [function(e, t, r) { 266 "use strict"; 267 var n = e("./stream/GenericWorker"); 268 r.STORE = { 269 magic: "\0\0", 270 compressWorker: function() { 271 return new n("STORE compression"); 272 }, 273 uncompressWorker: function() { 274 return new n("STORE decompression"); 275 } 276 }, r.DEFLATE = e("./flate"); 277 }, { 278 "./flate": 7, 279 "./stream/GenericWorker": 28 280 }], 281 4: [function(e, t, r) { 282 "use strict"; 283 var n = e("./utils"); 284 var o = function() { 285 for (var e2, t2 = [], r2 = 0; r2 < 256; r2++) { 286 e2 = r2; 287 for (var n2 = 0; n2 < 8; n2++) e2 = 1 & e2 ? 3988292384 ^ e2 >>> 1 : e2 >>> 1; 288 t2[r2] = e2; 289 } 290 return t2; 291 }(); 292 t.exports = function(e2, t2) { 293 return void 0 !== e2 && e2.length ? "string" !== n.getTypeOf(e2) ? function(e3, t3, r2, n2) { 294 var i = o, s = n2 + r2; 295 e3 ^= -1; 296 for (var a = n2; a < s; a++) e3 = e3 >>> 8 ^ i[255 & (e3 ^ t3[a])]; 297 return -1 ^ e3; 298 }(0 | t2, e2, e2.length, 0) : function(e3, t3, r2, n2) { 299 var i = o, s = n2 + r2; 300 e3 ^= -1; 301 for (var a = n2; a < s; a++) e3 = e3 >>> 8 ^ i[255 & (e3 ^ t3.charCodeAt(a))]; 302 return -1 ^ e3; 303 }(0 | t2, e2, e2.length, 0) : 0; 304 }; 305 }, { 306 "./utils": 32 307 }], 308 5: [function(e, t, r) { 309 "use strict"; 310 r.base64 = false, r.binary = false, r.dir = false, r.createFolders = true, r.date = null, r.compression = null, r.compressionOptions = null, r.comment = null, r.unixPermissions = null, r.dosPermissions = null; 311 }, {}], 312 6: [function(e, t, r) { 313 "use strict"; 314 var n = null; 315 n = "undefined" != typeof Promise ? Promise : e("lie"), t.exports = { 316 Promise: n 317 }; 318 }, { 319 lie: 37 320 }], 321 7: [function(e, t, r) { 322 "use strict"; 323 var n = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && "undefined" != typeof Uint32Array, i = e("pako"), s = e("./utils"), a = e("./stream/GenericWorker"), o = n ? "uint8array" : "array"; 324 function h(e2, t2) { 325 a.call(this, "FlateWorker/" + e2), this._pako = null, this._pakoAction = e2, this._pakoOptions = t2, this.meta = {}; 326 } 327 r.magic = "\b\0", s.inherits(h, a), h.prototype.processChunk = function(e2) { 328 this.meta = e2.meta, null === this._pako && this._createPako(), this._pako.push(s.transformTo(o, e2.data), false); 329 }, h.prototype.flush = function() { 330 a.prototype.flush.call(this), null === this._pako && this._createPako(), this._pako.push([], true); 331 }, h.prototype.cleanUp = function() { 332 a.prototype.cleanUp.call(this), this._pako = null; 333 }, h.prototype._createPako = function() { 334 this._pako = new i[this._pakoAction]({ 335 raw: true, 336 level: this._pakoOptions.level || -1 337 }); 338 var t2 = this; 339 this._pako.onData = function(e2) { 340 t2.push({ 341 data: e2, 342 meta: t2.meta 343 }); 344 }; 345 }, r.compressWorker = function(e2) { 346 return new h("Deflate", e2); 347 }, r.uncompressWorker = function() { 348 return new h("Inflate", {}); 349 }; 350 }, { 351 "./stream/GenericWorker": 28, 352 "./utils": 32, 353 pako: 38 354 }], 355 8: [function(e, t, r) { 356 "use strict"; 357 function A(e2, t2) { 358 var r2, n2 = ""; 359 for (r2 = 0; r2 < t2; r2++) n2 += String.fromCharCode(255 & e2), e2 >>>= 8; 360 return n2; 361 } 362 function n(e2, t2, r2, n2, i2, s2) { 363 var a, o, h = e2.file, u = e2.compression, l = s2 !== O.utf8encode, f = I.transformTo("string", s2(h.name)), c = I.transformTo("string", O.utf8encode(h.name)), d = h.comment, p = I.transformTo("string", s2(d)), m = I.transformTo("string", O.utf8encode(d)), _ = c.length !== h.name.length, g = m.length !== d.length, b = "", v = "", y = "", w = h.dir, k = h.date, x = { 364 crc32: 0, 365 compressedSize: 0, 366 uncompressedSize: 0 367 }; 368 t2 && !r2 || (x.crc32 = e2.crc32, x.compressedSize = e2.compressedSize, x.uncompressedSize = e2.uncompressedSize); 369 var S = 0; 370 t2 && (S |= 8), l || !_ && !g || (S |= 2048); 371 var z = 0, C = 0; 372 w && (z |= 16), "UNIX" === i2 ? (C = 798, z |= function(e3, t3) { 373 var r3 = e3; 374 return e3 || (r3 = t3 ? 16893 : 33204), (65535 & r3) << 16; 375 }(h.unixPermissions, w)) : (C = 20, z |= function(e3) { 376 return 63 & (e3 || 0); 377 }(h.dosPermissions)), a = k.getUTCHours(), a <<= 6, a |= k.getUTCMinutes(), a <<= 5, a |= k.getUTCSeconds() / 2, o = k.getUTCFullYear() - 1980, o <<= 4, o |= k.getUTCMonth() + 1, o <<= 5, o |= k.getUTCDate(), _ && (v = A(1, 1) + A(B(f), 4) + c, b += "up" + A(v.length, 2) + v), g && (y = A(1, 1) + A(B(p), 4) + m, b += "uc" + A(y.length, 2) + y); 378 var E = ""; 379 return E += "\n\0", E += A(S, 2), E += u.magic, E += A(a, 2), E += A(o, 2), E += A(x.crc32, 4), E += A(x.compressedSize, 4), E += A(x.uncompressedSize, 4), E += A(f.length, 2), E += A(b.length, 2), { 380 fileRecord: R.LOCAL_FILE_HEADER + E + f + b, 381 dirRecord: R.CENTRAL_FILE_HEADER + A(C, 2) + E + A(p.length, 2) + "\0\0\0\0" + A(z, 4) + A(n2, 4) + f + b + p 382 }; 383 } 384 var I = e("../utils"), i = e("../stream/GenericWorker"), O = e("../utf8"), B = e("../crc32"), R = e("../signature"); 385 function s(e2, t2, r2, n2) { 386 i.call(this, "ZipFileWorker"), this.bytesWritten = 0, this.zipComment = t2, this.zipPlatform = r2, this.encodeFileName = n2, this.streamFiles = e2, this.accumulate = false, this.contentBuffer = [], this.dirRecords = [], this.currentSourceOffset = 0, this.entriesCount = 0, this.currentFile = null, this._sources = []; 387 } 388 I.inherits(s, i), s.prototype.push = function(e2) { 389 var t2 = e2.meta.percent || 0, r2 = this.entriesCount, n2 = this._sources.length; 390 this.accumulate ? this.contentBuffer.push(e2) : (this.bytesWritten += e2.data.length, i.prototype.push.call(this, { 391 data: e2.data, 392 meta: { 393 currentFile: this.currentFile, 394 percent: r2 ? (t2 + 100 * (r2 - n2 - 1)) / r2 : 100 395 } 396 })); 397 }, s.prototype.openedSource = function(e2) { 398 this.currentSourceOffset = this.bytesWritten, this.currentFile = e2.file.name; 399 var t2 = this.streamFiles && !e2.file.dir; 400 if (t2) { 401 var r2 = n(e2, t2, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); 402 this.push({ 403 data: r2.fileRecord, 404 meta: { 405 percent: 0 406 } 407 }); 408 } else this.accumulate = true; 409 }, s.prototype.closedSource = function(e2) { 410 this.accumulate = false; 411 var t2 = this.streamFiles && !e2.file.dir, r2 = n(e2, t2, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); 412 if (this.dirRecords.push(r2.dirRecord), t2) this.push({ 413 data: function(e3) { 414 return R.DATA_DESCRIPTOR + A(e3.crc32, 4) + A(e3.compressedSize, 4) + A(e3.uncompressedSize, 4); 415 }(e2), 416 meta: { 417 percent: 100 418 } 419 }); 420 else for (this.push({ 421 data: r2.fileRecord, 422 meta: { 423 percent: 0 424 } 425 }); this.contentBuffer.length; ) this.push(this.contentBuffer.shift()); 426 this.currentFile = null; 427 }, s.prototype.flush = function() { 428 for (var e2 = this.bytesWritten, t2 = 0; t2 < this.dirRecords.length; t2++) this.push({ 429 data: this.dirRecords[t2], 430 meta: { 431 percent: 100 432 } 433 }); 434 var r2 = this.bytesWritten - e2, n2 = function(e3, t3, r3, n3, i2) { 435 var s2 = I.transformTo("string", i2(n3)); 436 return R.CENTRAL_DIRECTORY_END + "\0\0\0\0" + A(e3, 2) + A(e3, 2) + A(t3, 4) + A(r3, 4) + A(s2.length, 2) + s2; 437 }(this.dirRecords.length, r2, e2, this.zipComment, this.encodeFileName); 438 this.push({ 439 data: n2, 440 meta: { 441 percent: 100 442 } 443 }); 444 }, s.prototype.prepareNextSource = function() { 445 this.previous = this._sources.shift(), this.openedSource(this.previous.streamInfo), this.isPaused ? this.previous.pause() : this.previous.resume(); 446 }, s.prototype.registerPrevious = function(e2) { 447 this._sources.push(e2); 448 var t2 = this; 449 return e2.on("data", function(e3) { 450 t2.processChunk(e3); 451 }), e2.on("end", function() { 452 t2.closedSource(t2.previous.streamInfo), t2._sources.length ? t2.prepareNextSource() : t2.end(); 453 }), e2.on("error", function(e3) { 454 t2.error(e3); 455 }), this; 456 }, s.prototype.resume = function() { 457 return !!i.prototype.resume.call(this) && (!this.previous && this._sources.length ? (this.prepareNextSource(), true) : this.previous || this._sources.length || this.generatedError ? void 0 : (this.end(), true)); 458 }, s.prototype.error = function(e2) { 459 var t2 = this._sources; 460 if (!i.prototype.error.call(this, e2)) return false; 461 for (var r2 = 0; r2 < t2.length; r2++) try { 462 t2[r2].error(e2); 463 } catch (e3) { 464 } 465 return true; 466 }, s.prototype.lock = function() { 467 i.prototype.lock.call(this); 468 for (var e2 = this._sources, t2 = 0; t2 < e2.length; t2++) e2[t2].lock(); 469 }, t.exports = s; 470 }, { 471 "../crc32": 4, 472 "../signature": 23, 473 "../stream/GenericWorker": 28, 474 "../utf8": 31, 475 "../utils": 32 476 }], 477 9: [function(e, t, r) { 478 "use strict"; 479 var u = e("../compressions"), n = e("./ZipFileWorker"); 480 r.generateWorker = function(e2, a, t2) { 481 var o = new n(a.streamFiles, t2, a.platform, a.encodeFileName), h = 0; 482 try { 483 e2.forEach(function(e3, t3) { 484 h++; 485 var r2 = function(e4, t4) { 486 var r3 = e4 || t4, n3 = u[r3]; 487 if (!n3) throw new Error(r3 + " is not a valid compression method !"); 488 return n3; 489 }(t3.options.compression, a.compression), n2 = t3.options.compressionOptions || a.compressionOptions || {}, i = t3.dir, s = t3.date; 490 t3._compressWorker(r2, n2).withStreamInfo("file", { 491 name: e3, 492 dir: i, 493 date: s, 494 comment: t3.comment || "", 495 unixPermissions: t3.unixPermissions, 496 dosPermissions: t3.dosPermissions 497 }).pipe(o); 498 }), o.entriesCount = h; 499 } catch (e3) { 500 o.error(e3); 501 } 502 return o; 503 }; 504 }, { 505 "../compressions": 3, 506 "./ZipFileWorker": 8 507 }], 508 10: [function(e, t, r) { 509 "use strict"; 510 function n() { 511 if (!(this instanceof n)) return new n(); 512 if (arguments.length) throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide."); 513 this.files = /* @__PURE__ */ Object.create(null), this.comment = null, this.root = "", this.clone = function() { 514 var e2 = new n(); 515 for (var t2 in this) "function" != typeof this[t2] && (e2[t2] = this[t2]); 516 return e2; 517 }; 518 } 519 (n.prototype = e("./object")).loadAsync = e("./load"), n.support = e("./support"), n.defaults = e("./defaults"), n.version = "3.10.1", n.loadAsync = function(e2, t2) { 520 return new n().loadAsync(e2, t2); 521 }, n.external = e("./external"), t.exports = n; 522 }, { 523 "./defaults": 5, 524 "./external": 6, 525 "./load": 11, 526 "./object": 15, 527 "./support": 30 528 }], 529 11: [function(e, t, r) { 530 "use strict"; 531 var u = e("./utils"), i = e("./external"), n = e("./utf8"), s = e("./zipEntries"), a = e("./stream/Crc32Probe"), l = e("./nodejsUtils"); 532 function f(n2) { 533 return new i.Promise(function(e2, t2) { 534 var r2 = n2.decompressed.getContentWorker().pipe(new a()); 535 r2.on("error", function(e3) { 536 t2(e3); 537 }).on("end", function() { 538 r2.streamInfo.crc32 !== n2.decompressed.crc32 ? t2(new Error("Corrupted zip : CRC32 mismatch")) : e2(); 539 }).resume(); 540 }); 541 } 542 t.exports = function(e2, o) { 543 var h = this; 544 return o = u.extend(o || {}, { 545 base64: false, 546 checkCRC32: false, 547 optimizedBinaryString: false, 548 createFolders: false, 549 decodeFileName: n.utf8decode 550 }), l.isNode && l.isStream(e2) ? i.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")) : u.prepareContent("the loaded zip file", e2, true, o.optimizedBinaryString, o.base64).then(function(e3) { 551 var t2 = new s(o); 552 return t2.load(e3), t2; 553 }).then(function(e3) { 554 var t2 = [i.Promise.resolve(e3)], r2 = e3.files; 555 if (o.checkCRC32) for (var n2 = 0; n2 < r2.length; n2++) t2.push(f(r2[n2])); 556 return i.Promise.all(t2); 557 }).then(function(e3) { 558 for (var t2 = e3.shift(), r2 = t2.files, n2 = 0; n2 < r2.length; n2++) { 559 var i2 = r2[n2], s2 = i2.fileNameStr, a2 = u.resolve(i2.fileNameStr); 560 h.file(a2, i2.decompressed, { 561 binary: true, 562 optimizedBinaryString: true, 563 date: i2.date, 564 dir: i2.dir, 565 comment: i2.fileCommentStr.length ? i2.fileCommentStr : null, 566 unixPermissions: i2.unixPermissions, 567 dosPermissions: i2.dosPermissions, 568 createFolders: o.createFolders 569 }), i2.dir || (h.file(a2).unsafeOriginalName = s2); 570 } 571 return t2.zipComment.length && (h.comment = t2.zipComment), h; 572 }); 573 }; 574 }, { 575 "./external": 6, 576 "./nodejsUtils": 14, 577 "./stream/Crc32Probe": 25, 578 "./utf8": 31, 579 "./utils": 32, 580 "./zipEntries": 33 581 }], 582 12: [function(e, t, r) { 583 "use strict"; 584 var n = e("../utils"), i = e("../stream/GenericWorker"); 585 function s(e2, t2) { 586 i.call(this, "Nodejs stream input adapter for " + e2), this._upstreamEnded = false, this._bindStream(t2); 587 } 588 n.inherits(s, i), s.prototype._bindStream = function(e2) { 589 var t2 = this; 590 (this._stream = e2).pause(), e2.on("data", function(e3) { 591 t2.push({ 592 data: e3, 593 meta: { 594 percent: 0 595 } 596 }); 597 }).on("error", function(e3) { 598 t2.isPaused ? this.generatedError = e3 : t2.error(e3); 599 }).on("end", function() { 600 t2.isPaused ? t2._upstreamEnded = true : t2.end(); 601 }); 602 }, s.prototype.pause = function() { 603 return !!i.prototype.pause.call(this) && (this._stream.pause(), true); 604 }, s.prototype.resume = function() { 605 return !!i.prototype.resume.call(this) && (this._upstreamEnded ? this.end() : this._stream.resume(), true); 606 }, t.exports = s; 607 }, { 608 "../stream/GenericWorker": 28, 609 "../utils": 32 610 }], 611 13: [function(e, t, r) { 612 "use strict"; 613 var i = e("readable-stream").Readable; 614 function n(e2, t2, r2) { 615 i.call(this, t2), this._helper = e2; 616 var n2 = this; 617 e2.on("data", function(e3, t3) { 618 n2.push(e3) || n2._helper.pause(), r2 && r2(t3); 619 }).on("error", function(e3) { 620 n2.emit("error", e3); 621 }).on("end", function() { 622 n2.push(null); 623 }); 624 } 625 e("../utils").inherits(n, i), n.prototype._read = function() { 626 this._helper.resume(); 627 }, t.exports = n; 628 }, { 629 "../utils": 32, 630 "readable-stream": 16 631 }], 632 14: [function(e, t, r) { 633 "use strict"; 634 t.exports = { 635 isNode: "undefined" != typeof Buffer, 636 newBufferFrom: function(e2, t2) { 637 if (Buffer.from && Buffer.from !== Uint8Array.from) return Buffer.from(e2, t2); 638 if ("number" == typeof e2) throw new Error('The "data" argument must not be a number'); 639 return new Buffer(e2, t2); 640 }, 641 allocBuffer: function(e2) { 642 if (Buffer.alloc) return Buffer.alloc(e2); 643 var t2 = new Buffer(e2); 644 return t2.fill(0), t2; 645 }, 646 isBuffer: function(e2) { 647 return Buffer.isBuffer(e2); 648 }, 649 isStream: function(e2) { 650 return e2 && "function" == typeof e2.on && "function" == typeof e2.pause && "function" == typeof e2.resume; 651 } 652 }; 653 }, {}], 654 15: [function(e, t, r) { 655 "use strict"; 656 function s(e2, t2, r2) { 657 var n2, i2 = u.getTypeOf(t2), s2 = u.extend(r2 || {}, f); 658 s2.date = s2.date || /* @__PURE__ */ new Date(), null !== s2.compression && (s2.compression = s2.compression.toUpperCase()), "string" == typeof s2.unixPermissions && (s2.unixPermissions = parseInt(s2.unixPermissions, 8)), s2.unixPermissions && 16384 & s2.unixPermissions && (s2.dir = true), s2.dosPermissions && 16 & s2.dosPermissions && (s2.dir = true), s2.dir && (e2 = g(e2)), s2.createFolders && (n2 = _(e2)) && b.call(this, n2, true); 659 var a2 = "string" === i2 && false === s2.binary && false === s2.base64; 660 r2 && void 0 !== r2.binary || (s2.binary = !a2), (t2 instanceof c && 0 === t2.uncompressedSize || s2.dir || !t2 || 0 === t2.length) && (s2.base64 = false, s2.binary = true, t2 = "", s2.compression = "STORE", i2 = "string"); 661 var o2 = null; 662 o2 = t2 instanceof c || t2 instanceof l ? t2 : p.isNode && p.isStream(t2) ? new m(e2, t2) : u.prepareContent(e2, t2, s2.binary, s2.optimizedBinaryString, s2.base64); 663 var h2 = new d(e2, o2, s2); 664 this.files[e2] = h2; 665 } 666 var i = e("./utf8"), u = e("./utils"), l = e("./stream/GenericWorker"), a = e("./stream/StreamHelper"), f = e("./defaults"), c = e("./compressedObject"), d = e("./zipObject"), o = e("./generate"), p = e("./nodejsUtils"), m = e("./nodejs/NodejsStreamInputAdapter"), _ = function(e2) { 667 "/" === e2.slice(-1) && (e2 = e2.substring(0, e2.length - 1)); 668 var t2 = e2.lastIndexOf("/"); 669 return 0 < t2 ? e2.substring(0, t2) : ""; 670 }, g = function(e2) { 671 return "/" !== e2.slice(-1) && (e2 += "/"), e2; 672 }, b = function(e2, t2) { 673 return t2 = void 0 !== t2 ? t2 : f.createFolders, e2 = g(e2), this.files[e2] || s.call(this, e2, null, { 674 dir: true, 675 createFolders: t2 676 }), this.files[e2]; 677 }; 678 function h(e2) { 679 return "[object RegExp]" === Object.prototype.toString.call(e2); 680 } 681 var n = { 682 load: function() { 683 throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); 684 }, 685 forEach: function(e2) { 686 var t2, r2, n2; 687 for (t2 in this.files) n2 = this.files[t2], (r2 = t2.slice(this.root.length, t2.length)) && t2.slice(0, this.root.length) === this.root && e2(r2, n2); 688 }, 689 filter: function(r2) { 690 var n2 = []; 691 return this.forEach(function(e2, t2) { 692 r2(e2, t2) && n2.push(t2); 693 }), n2; 694 }, 695 file: function(e2, t2, r2) { 696 if (1 !== arguments.length) return e2 = this.root + e2, s.call(this, e2, t2, r2), this; 697 if (h(e2)) { 698 var n2 = e2; 699 return this.filter(function(e3, t3) { 700 return !t3.dir && n2.test(e3); 701 }); 702 } 703 var i2 = this.files[this.root + e2]; 704 return i2 && !i2.dir ? i2 : null; 705 }, 706 folder: function(r2) { 707 if (!r2) return this; 708 if (h(r2)) return this.filter(function(e3, t3) { 709 return t3.dir && r2.test(e3); 710 }); 711 var e2 = this.root + r2, t2 = b.call(this, e2), n2 = this.clone(); 712 return n2.root = t2.name, n2; 713 }, 714 remove: function(r2) { 715 r2 = this.root + r2; 716 var e2 = this.files[r2]; 717 if (e2 || ("/" !== r2.slice(-1) && (r2 += "/"), e2 = this.files[r2]), e2 && !e2.dir) delete this.files[r2]; 718 else for (var t2 = this.filter(function(e3, t3) { 719 return t3.name.slice(0, r2.length) === r2; 720 }), n2 = 0; n2 < t2.length; n2++) delete this.files[t2[n2].name]; 721 return this; 722 }, 723 generate: function() { 724 throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); 725 }, 726 generateInternalStream: function(e2) { 727 var t2, r2 = {}; 728 try { 729 if ((r2 = u.extend(e2 || {}, { 730 streamFiles: false, 731 compression: "STORE", 732 compressionOptions: null, 733 type: "", 734 platform: "DOS", 735 comment: null, 736 mimeType: "application/zip", 737 encodeFileName: i.utf8encode 738 })).type = r2.type.toLowerCase(), r2.compression = r2.compression.toUpperCase(), "binarystring" === r2.type && (r2.type = "string"), !r2.type) throw new Error("No output type specified."); 739 u.checkSupport(r2.type), "darwin" !== r2.platform && "freebsd" !== r2.platform && "linux" !== r2.platform && "sunos" !== r2.platform || (r2.platform = "UNIX"), "win32" === r2.platform && (r2.platform = "DOS"); 740 var n2 = r2.comment || this.comment || ""; 741 t2 = o.generateWorker(this, r2, n2); 742 } catch (e3) { 743 (t2 = new l("error")).error(e3); 744 } 745 return new a(t2, r2.type || "string", r2.mimeType); 746 }, 747 generateAsync: function(e2, t2) { 748 return this.generateInternalStream(e2).accumulate(t2); 749 }, 750 generateNodeStream: function(e2, t2) { 751 return (e2 = e2 || {}).type || (e2.type = "nodebuffer"), this.generateInternalStream(e2).toNodejsStream(t2); 752 } 753 }; 754 t.exports = n; 755 }, { 756 "./compressedObject": 2, 757 "./defaults": 5, 758 "./generate": 9, 759 "./nodejs/NodejsStreamInputAdapter": 12, 760 "./nodejsUtils": 14, 761 "./stream/GenericWorker": 28, 762 "./stream/StreamHelper": 29, 763 "./utf8": 31, 764 "./utils": 32, 765 "./zipObject": 35 766 }], 767 16: [function(e, t, r) { 768 "use strict"; 769 t.exports = e("stream"); 770 }, { 771 stream: void 0 772 }], 773 17: [function(e, t, r) { 774 "use strict"; 775 var n = e("./DataReader"); 776 function i(e2) { 777 n.call(this, e2); 778 for (var t2 = 0; t2 < this.data.length; t2++) e2[t2] = 255 & e2[t2]; 779 } 780 e("../utils").inherits(i, n), i.prototype.byteAt = function(e2) { 781 return this.data[this.zero + e2]; 782 }, i.prototype.lastIndexOfSignature = function(e2) { 783 for (var t2 = e2.charCodeAt(0), r2 = e2.charCodeAt(1), n2 = e2.charCodeAt(2), i2 = e2.charCodeAt(3), s = this.length - 4; 0 <= s; --s) if (this.data[s] === t2 && this.data[s + 1] === r2 && this.data[s + 2] === n2 && this.data[s + 3] === i2) return s - this.zero; 784 return -1; 785 }, i.prototype.readAndCheckSignature = function(e2) { 786 var t2 = e2.charCodeAt(0), r2 = e2.charCodeAt(1), n2 = e2.charCodeAt(2), i2 = e2.charCodeAt(3), s = this.readData(4); 787 return t2 === s[0] && r2 === s[1] && n2 === s[2] && i2 === s[3]; 788 }, i.prototype.readData = function(e2) { 789 if (this.checkOffset(e2), 0 === e2) return []; 790 var t2 = this.data.slice(this.zero + this.index, this.zero + this.index + e2); 791 return this.index += e2, t2; 792 }, t.exports = i; 793 }, { 794 "../utils": 32, 795 "./DataReader": 18 796 }], 797 18: [function(e, t, r) { 798 "use strict"; 799 var n = e("../utils"); 800 function i(e2) { 801 this.data = e2, this.length = e2.length, this.index = 0, this.zero = 0; 802 } 803 i.prototype = { 804 checkOffset: function(e2) { 805 this.checkIndex(this.index + e2); 806 }, 807 checkIndex: function(e2) { 808 if (this.length < this.zero + e2 || e2 < 0) throw new Error("End of data reached (data length = " + this.length + ", asked index = " + e2 + "). Corrupted zip ?"); 809 }, 810 setIndex: function(e2) { 811 this.checkIndex(e2), this.index = e2; 812 }, 813 skip: function(e2) { 814 this.setIndex(this.index + e2); 815 }, 816 byteAt: function() { 817 }, 818 readInt: function(e2) { 819 var t2, r2 = 0; 820 for (this.checkOffset(e2), t2 = this.index + e2 - 1; t2 >= this.index; t2--) r2 = (r2 << 8) + this.byteAt(t2); 821 return this.index += e2, r2; 822 }, 823 readString: function(e2) { 824 return n.transformTo("string", this.readData(e2)); 825 }, 826 readData: function() { 827 }, 828 lastIndexOfSignature: function() { 829 }, 830 readAndCheckSignature: function() { 831 }, 832 readDate: function() { 833 var e2 = this.readInt(4); 834 return new Date(Date.UTC(1980 + (e2 >> 25 & 127), (e2 >> 21 & 15) - 1, e2 >> 16 & 31, e2 >> 11 & 31, e2 >> 5 & 63, (31 & e2) << 1)); 835 } 836 }, t.exports = i; 837 }, { 838 "../utils": 32 839 }], 840 19: [function(e, t, r) { 841 "use strict"; 842 var n = e("./Uint8ArrayReader"); 843 function i(e2) { 844 n.call(this, e2); 845 } 846 e("../utils").inherits(i, n), i.prototype.readData = function(e2) { 847 this.checkOffset(e2); 848 var t2 = this.data.slice(this.zero + this.index, this.zero + this.index + e2); 849 return this.index += e2, t2; 850 }, t.exports = i; 851 }, { 852 "../utils": 32, 853 "./Uint8ArrayReader": 21 854 }], 855 20: [function(e, t, r) { 856 "use strict"; 857 var n = e("./DataReader"); 858 function i(e2) { 859 n.call(this, e2); 860 } 861 e("../utils").inherits(i, n), i.prototype.byteAt = function(e2) { 862 return this.data.charCodeAt(this.zero + e2); 863 }, i.prototype.lastIndexOfSignature = function(e2) { 864 return this.data.lastIndexOf(e2) - this.zero; 865 }, i.prototype.readAndCheckSignature = function(e2) { 866 return e2 === this.readData(4); 867 }, i.prototype.readData = function(e2) { 868 this.checkOffset(e2); 869 var t2 = this.data.slice(this.zero + this.index, this.zero + this.index + e2); 870 return this.index += e2, t2; 871 }, t.exports = i; 872 }, { 873 "../utils": 32, 874 "./DataReader": 18 875 }], 876 21: [function(e, t, r) { 877 "use strict"; 878 var n = e("./ArrayReader"); 879 function i(e2) { 880 n.call(this, e2); 881 } 882 e("../utils").inherits(i, n), i.prototype.readData = function(e2) { 883 if (this.checkOffset(e2), 0 === e2) return new Uint8Array(0); 884 var t2 = this.data.subarray(this.zero + this.index, this.zero + this.index + e2); 885 return this.index += e2, t2; 886 }, t.exports = i; 887 }, { 888 "../utils": 32, 889 "./ArrayReader": 17 890 }], 891 22: [function(e, t, r) { 892 "use strict"; 893 var n = e("../utils"), i = e("../support"), s = e("./ArrayReader"), a = e("./StringReader"), o = e("./NodeBufferReader"), h = e("./Uint8ArrayReader"); 894 t.exports = function(e2) { 895 var t2 = n.getTypeOf(e2); 896 return n.checkSupport(t2), "string" !== t2 || i.uint8array ? "nodebuffer" === t2 ? new o(e2) : i.uint8array ? new h(n.transformTo("uint8array", e2)) : new s(n.transformTo("array", e2)) : new a(e2); 897 }; 898 }, { 899 "../support": 30, 900 "../utils": 32, 901 "./ArrayReader": 17, 902 "./NodeBufferReader": 19, 903 "./StringReader": 20, 904 "./Uint8ArrayReader": 21 905 }], 906 23: [function(e, t, r) { 907 "use strict"; 908 r.LOCAL_FILE_HEADER = "PK��", r.CENTRAL_FILE_HEADER = "PK��", r.CENTRAL_DIRECTORY_END = "PK��", r.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK�\x07", r.ZIP64_CENTRAL_DIRECTORY_END = "PK��", r.DATA_DESCRIPTOR = "PK\x07\b"; 909 }, {}], 910 24: [function(e, t, r) { 911 "use strict"; 912 var n = e("./GenericWorker"), i = e("../utils"); 913 function s(e2) { 914 n.call(this, "ConvertWorker to " + e2), this.destType = e2; 915 } 916 i.inherits(s, n), s.prototype.processChunk = function(e2) { 917 this.push({ 918 data: i.transformTo(this.destType, e2.data), 919 meta: e2.meta 920 }); 921 }, t.exports = s; 922 }, { 923 "../utils": 32, 924 "./GenericWorker": 28 925 }], 926 25: [function(e, t, r) { 927 "use strict"; 928 var n = e("./GenericWorker"), i = e("../crc32"); 929 function s() { 930 n.call(this, "Crc32Probe"), this.withStreamInfo("crc32", 0); 931 } 932 e("../utils").inherits(s, n), s.prototype.processChunk = function(e2) { 933 this.streamInfo.crc32 = i(e2.data, this.streamInfo.crc32 || 0), this.push(e2); 934 }, t.exports = s; 935 }, { 936 "../crc32": 4, 937 "../utils": 32, 938 "./GenericWorker": 28 939 }], 940 26: [function(e, t, r) { 941 "use strict"; 942 var n = e("../utils"), i = e("./GenericWorker"); 943 function s(e2) { 944 i.call(this, "DataLengthProbe for " + e2), this.propName = e2, this.withStreamInfo(e2, 0); 945 } 946 n.inherits(s, i), s.prototype.processChunk = function(e2) { 947 if (e2) { 948 var t2 = this.streamInfo[this.propName] || 0; 949 this.streamInfo[this.propName] = t2 + e2.data.length; 950 } 951 i.prototype.processChunk.call(this, e2); 952 }, t.exports = s; 953 }, { 954 "../utils": 32, 955 "./GenericWorker": 28 956 }], 957 27: [function(e, t, r) { 958 "use strict"; 959 var n = e("../utils"), i = e("./GenericWorker"); 960 function s(e2) { 961 i.call(this, "DataWorker"); 962 var t2 = this; 963 this.dataIsReady = false, this.index = 0, this.max = 0, this.data = null, this.type = "", this._tickScheduled = false, e2.then(function(e3) { 964 t2.dataIsReady = true, t2.data = e3, t2.max = e3 && e3.length || 0, t2.type = n.getTypeOf(e3), t2.isPaused || t2._tickAndRepeat(); 965 }, function(e3) { 966 t2.error(e3); 967 }); 968 } 969 n.inherits(s, i), s.prototype.cleanUp = function() { 970 i.prototype.cleanUp.call(this), this.data = null; 971 }, s.prototype.resume = function() { 972 return !!i.prototype.resume.call(this) && (!this._tickScheduled && this.dataIsReady && (this._tickScheduled = true, n.delay(this._tickAndRepeat, [], this)), true); 973 }, s.prototype._tickAndRepeat = function() { 974 this._tickScheduled = false, this.isPaused || this.isFinished || (this._tick(), this.isFinished || (n.delay(this._tickAndRepeat, [], this), this._tickScheduled = true)); 975 }, s.prototype._tick = function() { 976 if (this.isPaused || this.isFinished) return false; 977 var e2 = null, t2 = Math.min(this.max, this.index + 16384); 978 if (this.index >= this.max) return this.end(); 979 switch (this.type) { 980 case "string": 981 e2 = this.data.substring(this.index, t2); 982 break; 983 case "uint8array": 984 e2 = this.data.subarray(this.index, t2); 985 break; 986 case "array": 987 case "nodebuffer": 988 e2 = this.data.slice(this.index, t2); 989 } 990 return this.index = t2, this.push({ 991 data: e2, 992 meta: { 993 percent: this.max ? this.index / this.max * 100 : 0 994 } 995 }); 996 }, t.exports = s; 997 }, { 998 "../utils": 32, 999 "./GenericWorker": 28 1000 }], 1001 28: [function(e, t, r) { 1002 "use strict"; 1003 function n(e2) { 1004 this.name = e2 || "default", this.streamInfo = {}, this.generatedError = null, this.extraStreamInfo = {}, this.isPaused = true, this.isFinished = false, this.isLocked = false, this._listeners = { 1005 data: [], 1006 end: [], 1007 error: [] 1008 }, this.previous = null; 1009 } 1010 n.prototype = { 1011 push: function(e2) { 1012 this.emit("data", e2); 1013 }, 1014 end: function() { 1015 if (this.isFinished) return false; 1016 this.flush(); 1017 try { 1018 this.emit("end"), this.cleanUp(), this.isFinished = true; 1019 } catch (e2) { 1020 this.emit("error", e2); 1021 } 1022 return true; 1023 }, 1024 error: function(e2) { 1025 return !this.isFinished && (this.isPaused ? this.generatedError = e2 : (this.isFinished = true, this.emit("error", e2), this.previous && this.previous.error(e2), this.cleanUp()), true); 1026 }, 1027 on: function(e2, t2) { 1028 return this._listeners[e2].push(t2), this; 1029 }, 1030 cleanUp: function() { 1031 this.streamInfo = this.generatedError = this.extraStreamInfo = null, this._listeners = []; 1032 }, 1033 emit: function(e2, t2) { 1034 if (this._listeners[e2]) for (var r2 = 0; r2 < this._listeners[e2].length; r2++) this._listeners[e2][r2].call(this, t2); 1035 }, 1036 pipe: function(e2) { 1037 return e2.registerPrevious(this); 1038 }, 1039 registerPrevious: function(e2) { 1040 if (this.isLocked) throw new Error("The stream '" + this + "' has already been used."); 1041 this.streamInfo = e2.streamInfo, this.mergeStreamInfo(), this.previous = e2; 1042 var t2 = this; 1043 return e2.on("data", function(e3) { 1044 t2.processChunk(e3); 1045 }), e2.on("end", function() { 1046 t2.end(); 1047 }), e2.on("error", function(e3) { 1048 t2.error(e3); 1049 }), this; 1050 }, 1051 pause: function() { 1052 return !this.isPaused && !this.isFinished && (this.isPaused = true, this.previous && this.previous.pause(), true); 1053 }, 1054 resume: function() { 1055 if (!this.isPaused || this.isFinished) return false; 1056 var e2 = this.isPaused = false; 1057 return this.generatedError && (this.error(this.generatedError), e2 = true), this.previous && this.previous.resume(), !e2; 1058 }, 1059 flush: function() { 1060 }, 1061 processChunk: function(e2) { 1062 this.push(e2); 1063 }, 1064 withStreamInfo: function(e2, t2) { 1065 return this.extraStreamInfo[e2] = t2, this.mergeStreamInfo(), this; 1066 }, 1067 mergeStreamInfo: function() { 1068 for (var e2 in this.extraStreamInfo) Object.prototype.hasOwnProperty.call(this.extraStreamInfo, e2) && (this.streamInfo[e2] = this.extraStreamInfo[e2]); 1069 }, 1070 lock: function() { 1071 if (this.isLocked) throw new Error("The stream '" + this + "' has already been used."); 1072 this.isLocked = true, this.previous && this.previous.lock(); 1073 }, 1074 toString: function() { 1075 var e2 = "Worker " + this.name; 1076 return this.previous ? this.previous + " -> " + e2 : e2; 1077 } 1078 }, t.exports = n; 1079 }, {}], 1080 29: [function(e, t, r) { 1081 "use strict"; 1082 var h = e("../utils"), i = e("./ConvertWorker"), s = e("./GenericWorker"), u = e("../base64"), n = e("../support"), a = e("../external"), o = null; 1083 if (n.nodestream) try { 1084 o = e("../nodejs/NodejsStreamOutputAdapter"); 1085 } catch (e2) { 1086 } 1087 function l(e2, o2) { 1088 return new a.Promise(function(t2, r2) { 1089 var n2 = [], i2 = e2._internalType, s2 = e2._outputType, a2 = e2._mimeType; 1090 e2.on("data", function(e3, t3) { 1091 n2.push(e3), o2 && o2(t3); 1092 }).on("error", function(e3) { 1093 n2 = [], r2(e3); 1094 }).on("end", function() { 1095 try { 1096 var e3 = function(e4, t3, r3) { 1097 switch (e4) { 1098 case "blob": 1099 return h.newBlob(h.transformTo("arraybuffer", t3), r3); 1100 case "base64": 1101 return u.encode(t3); 1102 default: 1103 return h.transformTo(e4, t3); 1104 } 1105 }(s2, function(e4, t3) { 1106 var r3, n3 = 0, i3 = null, s3 = 0; 1107 for (r3 = 0; r3 < t3.length; r3++) s3 += t3[r3].length; 1108 switch (e4) { 1109 case "string": 1110 return t3.join(""); 1111 case "array": 1112 return Array.prototype.concat.apply([], t3); 1113 case "uint8array": 1114 for (i3 = new Uint8Array(s3), r3 = 0; r3 < t3.length; r3++) i3.set(t3[r3], n3), n3 += t3[r3].length; 1115 return i3; 1116 case "nodebuffer": 1117 return Buffer.concat(t3); 1118 default: 1119 throw new Error("concat : unsupported type '" + e4 + "'"); 1120 } 1121 }(i2, n2), a2); 1122 t2(e3); 1123 } catch (e4) { 1124 r2(e4); 1125 } 1126 n2 = []; 1127 }).resume(); 1128 }); 1129 } 1130 function f(e2, t2, r2) { 1131 var n2 = t2; 1132 switch (t2) { 1133 case "blob": 1134 case "arraybuffer": 1135 n2 = "uint8array"; 1136 break; 1137 case "base64": 1138 n2 = "string"; 1139 } 1140 try { 1141 this._internalType = n2, this._outputType = t2, this._mimeType = r2, h.checkSupport(n2), this._worker = e2.pipe(new i(n2)), e2.lock(); 1142 } catch (e3) { 1143 this._worker = new s("error"), this._worker.error(e3); 1144 } 1145 } 1146 f.prototype = { 1147 accumulate: function(e2) { 1148 return l(this, e2); 1149 }, 1150 on: function(e2, t2) { 1151 var r2 = this; 1152 return "data" === e2 ? this._worker.on(e2, function(e3) { 1153 t2.call(r2, e3.data, e3.meta); 1154 }) : this._worker.on(e2, function() { 1155 h.delay(t2, arguments, r2); 1156 }), this; 1157 }, 1158 resume: function() { 1159 return h.delay(this._worker.resume, [], this._worker), this; 1160 }, 1161 pause: function() { 1162 return this._worker.pause(), this; 1163 }, 1164 toNodejsStream: function(e2) { 1165 if (h.checkSupport("nodestream"), "nodebuffer" !== this._outputType) throw new Error(this._outputType + " is not supported by this method"); 1166 return new o(this, { 1167 objectMode: "nodebuffer" !== this._outputType 1168 }, e2); 1169 } 1170 }, t.exports = f; 1171 }, { 1172 "../base64": 1, 1173 "../external": 6, 1174 "../nodejs/NodejsStreamOutputAdapter": 13, 1175 "../support": 30, 1176 "../utils": 32, 1177 "./ConvertWorker": 24, 1178 "./GenericWorker": 28 1179 }], 1180 30: [function(e, t, r) { 1181 "use strict"; 1182 if (r.base64 = true, r.array = true, r.string = true, r.arraybuffer = "undefined" != typeof ArrayBuffer && "undefined" != typeof Uint8Array, r.nodebuffer = "undefined" != typeof Buffer, r.uint8array = "undefined" != typeof Uint8Array, "undefined" == typeof ArrayBuffer) r.blob = false; 1183 else { 1184 var n = new ArrayBuffer(0); 1185 try { 1186 r.blob = 0 === new Blob([n], { 1187 type: "application/zip" 1188 }).size; 1189 } catch (e2) { 1190 try { 1191 var i = new (self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder)(); 1192 i.append(n), r.blob = 0 === i.getBlob("application/zip").size; 1193 } catch (e3) { 1194 r.blob = false; 1195 } 1196 } 1197 } 1198 try { 1199 r.nodestream = !!e("readable-stream").Readable; 1200 } catch (e2) { 1201 r.nodestream = false; 1202 } 1203 }, { 1204 "readable-stream": 16 1205 }], 1206 31: [function(e, t, s) { 1207 "use strict"; 1208 for (var o = e("./utils"), h = e("./support"), r = e("./nodejsUtils"), n = e("./stream/GenericWorker"), u = new Array(256), i = 0; i < 256; i++) u[i] = 252 <= i ? 6 : 248 <= i ? 5 : 240 <= i ? 4 : 224 <= i ? 3 : 192 <= i ? 2 : 1; 1209 u[254] = u[254] = 1; 1210 function a() { 1211 n.call(this, "utf-8 decode"), this.leftOver = null; 1212 } 1213 function l() { 1214 n.call(this, "utf-8 encode"); 1215 } 1216 s.utf8encode = function(e2) { 1217 return h.nodebuffer ? r.newBufferFrom(e2, "utf-8") : function(e3) { 1218 var t2, r2, n2, i2, s2, a2 = e3.length, o2 = 0; 1219 for (i2 = 0; i2 < a2; i2++) 55296 == (64512 & (r2 = e3.charCodeAt(i2))) && i2 + 1 < a2 && 56320 == (64512 & (n2 = e3.charCodeAt(i2 + 1))) && (r2 = 65536 + (r2 - 55296 << 10) + (n2 - 56320), i2++), o2 += r2 < 128 ? 1 : r2 < 2048 ? 2 : r2 < 65536 ? 3 : 4; 1220 for (t2 = h.uint8array ? new Uint8Array(o2) : new Array(o2), i2 = s2 = 0; s2 < o2; i2++) 55296 == (64512 & (r2 = e3.charCodeAt(i2))) && i2 + 1 < a2 && 56320 == (64512 & (n2 = e3.charCodeAt(i2 + 1))) && (r2 = 65536 + (r2 - 55296 << 10) + (n2 - 56320), i2++), r2 < 128 ? t2[s2++] = r2 : (r2 < 2048 ? t2[s2++] = 192 | r2 >>> 6 : (r2 < 65536 ? t2[s2++] = 224 | r2 >>> 12 : (t2[s2++] = 240 | r2 >>> 18, t2[s2++] = 128 | r2 >>> 12 & 63), t2[s2++] = 128 | r2 >>> 6 & 63), t2[s2++] = 128 | 63 & r2); 1221 return t2; 1222 }(e2); 1223 }, s.utf8decode = function(e2) { 1224 return h.nodebuffer ? o.transformTo("nodebuffer", e2).toString("utf-8") : function(e3) { 1225 var t2, r2, n2, i2, s2 = e3.length, a2 = new Array(2 * s2); 1226 for (t2 = r2 = 0; t2 < s2; ) if ((n2 = e3[t2++]) < 128) a2[r2++] = n2; 1227 else if (4 < (i2 = u[n2])) a2[r2++] = 65533, t2 += i2 - 1; 1228 else { 1229 for (n2 &= 2 === i2 ? 31 : 3 === i2 ? 15 : 7; 1 < i2 && t2 < s2; ) n2 = n2 << 6 | 63 & e3[t2++], i2--; 1230 1 < i2 ? a2[r2++] = 65533 : n2 < 65536 ? a2[r2++] = n2 : (n2 -= 65536, a2[r2++] = 55296 | n2 >> 10 & 1023, a2[r2++] = 56320 | 1023 & n2); 1231 } 1232 return a2.length !== r2 && (a2.subarray ? a2 = a2.subarray(0, r2) : a2.length = r2), o.applyFromCharCode(a2); 1233 }(e2 = o.transformTo(h.uint8array ? "uint8array" : "array", e2)); 1234 }, o.inherits(a, n), a.prototype.processChunk = function(e2) { 1235 var t2 = o.transformTo(h.uint8array ? "uint8array" : "array", e2.data); 1236 if (this.leftOver && this.leftOver.length) { 1237 if (h.uint8array) { 1238 var r2 = t2; 1239 (t2 = new Uint8Array(r2.length + this.leftOver.length)).set(this.leftOver, 0), t2.set(r2, this.leftOver.length); 1240 } else t2 = this.leftOver.concat(t2); 1241 this.leftOver = null; 1242 } 1243 var n2 = function(e3, t3) { 1244 var r3; 1245 for ((t3 = t3 || e3.length) > e3.length && (t3 = e3.length), r3 = t3 - 1; 0 <= r3 && 128 == (192 & e3[r3]); ) r3--; 1246 return r3 < 0 ? t3 : 0 === r3 ? t3 : r3 + u[e3[r3]] > t3 ? r3 : t3; 1247 }(t2), i2 = t2; 1248 n2 !== t2.length && (h.uint8array ? (i2 = t2.subarray(0, n2), this.leftOver = t2.subarray(n2, t2.length)) : (i2 = t2.slice(0, n2), this.leftOver = t2.slice(n2, t2.length))), this.push({ 1249 data: s.utf8decode(i2), 1250 meta: e2.meta 1251 }); 1252 }, a.prototype.flush = function() { 1253 this.leftOver && this.leftOver.length && (this.push({ 1254 data: s.utf8decode(this.leftOver), 1255 meta: {} 1256 }), this.leftOver = null); 1257 }, s.Utf8DecodeWorker = a, o.inherits(l, n), l.prototype.processChunk = function(e2) { 1258 this.push({ 1259 data: s.utf8encode(e2.data), 1260 meta: e2.meta 1261 }); 1262 }, s.Utf8EncodeWorker = l; 1263 }, { 1264 "./nodejsUtils": 14, 1265 "./stream/GenericWorker": 28, 1266 "./support": 30, 1267 "./utils": 32 1268 }], 1269 32: [function(e, t, a) { 1270 "use strict"; 1271 var o = e("./support"), h = e("./base64"), r = e("./nodejsUtils"), u = e("./external"); 1272 function n(e2) { 1273 return e2; 1274 } 1275 function l(e2, t2) { 1276 for (var r2 = 0; r2 < e2.length; ++r2) t2[r2] = 255 & e2.charCodeAt(r2); 1277 return t2; 1278 } 1279 e("setimmediate"), a.newBlob = function(t2, r2) { 1280 a.checkSupport("blob"); 1281 try { 1282 return new Blob([t2], { 1283 type: r2 1284 }); 1285 } catch (e2) { 1286 try { 1287 var n2 = new (self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder)(); 1288 return n2.append(t2), n2.getBlob(r2); 1289 } catch (e3) { 1290 throw new Error("Bug : can't construct the Blob."); 1291 } 1292 } 1293 }; 1294 var i = { 1295 stringifyByChunk: function(e2, t2, r2) { 1296 var n2 = [], i2 = 0, s2 = e2.length; 1297 if (s2 <= r2) return String.fromCharCode.apply(null, e2); 1298 for (; i2 < s2; ) "array" === t2 || "nodebuffer" === t2 ? n2.push(String.fromCharCode.apply(null, e2.slice(i2, Math.min(i2 + r2, s2)))) : n2.push(String.fromCharCode.apply(null, e2.subarray(i2, Math.min(i2 + r2, s2)))), i2 += r2; 1299 return n2.join(""); 1300 }, 1301 stringifyByChar: function(e2) { 1302 for (var t2 = "", r2 = 0; r2 < e2.length; r2++) t2 += String.fromCharCode(e2[r2]); 1303 return t2; 1304 }, 1305 applyCanBeUsed: { 1306 uint8array: function() { 1307 try { 1308 return o.uint8array && 1 === String.fromCharCode.apply(null, new Uint8Array(1)).length; 1309 } catch (e2) { 1310 return false; 1311 } 1312 }(), 1313 nodebuffer: function() { 1314 try { 1315 return o.nodebuffer && 1 === String.fromCharCode.apply(null, r.allocBuffer(1)).length; 1316 } catch (e2) { 1317 return false; 1318 } 1319 }() 1320 } 1321 }; 1322 function s(e2) { 1323 var t2 = 65536, r2 = a.getTypeOf(e2), n2 = true; 1324 if ("uint8array" === r2 ? n2 = i.applyCanBeUsed.uint8array : "nodebuffer" === r2 && (n2 = i.applyCanBeUsed.nodebuffer), n2) for (; 1 < t2; ) try { 1325 return i.stringifyByChunk(e2, r2, t2); 1326 } catch (e3) { 1327 t2 = Math.floor(t2 / 2); 1328 } 1329 return i.stringifyByChar(e2); 1330 } 1331 function f(e2, t2) { 1332 for (var r2 = 0; r2 < e2.length; r2++) t2[r2] = e2[r2]; 1333 return t2; 1334 } 1335 a.applyFromCharCode = s; 1336 var c = {}; 1337 c.string = { 1338 string: n, 1339 array: function(e2) { 1340 return l(e2, new Array(e2.length)); 1341 }, 1342 arraybuffer: function(e2) { 1343 return c.string.uint8array(e2).buffer; 1344 }, 1345 uint8array: function(e2) { 1346 return l(e2, new Uint8Array(e2.length)); 1347 }, 1348 nodebuffer: function(e2) { 1349 return l(e2, r.allocBuffer(e2.length)); 1350 } 1351 }, c.array = { 1352 string: s, 1353 array: n, 1354 arraybuffer: function(e2) { 1355 return new Uint8Array(e2).buffer; 1356 }, 1357 uint8array: function(e2) { 1358 return new Uint8Array(e2); 1359 }, 1360 nodebuffer: function(e2) { 1361 return r.newBufferFrom(e2); 1362 } 1363 }, c.arraybuffer = { 1364 string: function(e2) { 1365 return s(new Uint8Array(e2)); 1366 }, 1367 array: function(e2) { 1368 return f(new Uint8Array(e2), new Array(e2.byteLength)); 1369 }, 1370 arraybuffer: n, 1371 uint8array: function(e2) { 1372 return new Uint8Array(e2); 1373 }, 1374 nodebuffer: function(e2) { 1375 return r.newBufferFrom(new Uint8Array(e2)); 1376 } 1377 }, c.uint8array = { 1378 string: s, 1379 array: function(e2) { 1380 return f(e2, new Array(e2.length)); 1381 }, 1382 arraybuffer: function(e2) { 1383 return e2.buffer; 1384 }, 1385 uint8array: n, 1386 nodebuffer: function(e2) { 1387 return r.newBufferFrom(e2); 1388 } 1389 }, c.nodebuffer = { 1390 string: s, 1391 array: function(e2) { 1392 return f(e2, new Array(e2.length)); 1393 }, 1394 arraybuffer: function(e2) { 1395 return c.nodebuffer.uint8array(e2).buffer; 1396 }, 1397 uint8array: function(e2) { 1398 return f(e2, new Uint8Array(e2.length)); 1399 }, 1400 nodebuffer: n 1401 }, a.transformTo = function(e2, t2) { 1402 if (t2 = t2 || "", !e2) return t2; 1403 a.checkSupport(e2); 1404 var r2 = a.getTypeOf(t2); 1405 return c[r2][e2](t2); 1406 }, a.resolve = function(e2) { 1407 for (var t2 = e2.split("/"), r2 = [], n2 = 0; n2 < t2.length; n2++) { 1408 var i2 = t2[n2]; 1409 "." === i2 || "" === i2 && 0 !== n2 && n2 !== t2.length - 1 || (".." === i2 ? r2.pop() : r2.push(i2)); 1410 } 1411 return r2.join("/"); 1412 }, a.getTypeOf = function(e2) { 1413 return "string" == typeof e2 ? "string" : "[object Array]" === Object.prototype.toString.call(e2) ? "array" : o.nodebuffer && r.isBuffer(e2) ? "nodebuffer" : o.uint8array && e2 instanceof Uint8Array ? "uint8array" : o.arraybuffer && e2 instanceof ArrayBuffer ? "arraybuffer" : void 0; 1414 }, a.checkSupport = function(e2) { 1415 if (!o[e2.toLowerCase()]) throw new Error(e2 + " is not supported by this platform"); 1416 }, a.MAX_VALUE_16BITS = 65535, a.MAX_VALUE_32BITS = -1, a.pretty = function(e2) { 1417 var t2, r2, n2 = ""; 1418 for (r2 = 0; r2 < (e2 || "").length; r2++) n2 += "\\x" + ((t2 = e2.charCodeAt(r2)) < 16 ? "0" : "") + t2.toString(16).toUpperCase(); 1419 return n2; 1420 }, a.delay = function(e2, t2, r2) { 1421 setImmediate(function() { 1422 e2.apply(r2 || null, t2 || []); 1423 }); 1424 }, a.inherits = function(e2, t2) { 1425 function r2() { 1426 } 1427 r2.prototype = t2.prototype, e2.prototype = new r2(); 1428 }, a.extend = function() { 1429 var e2, t2, r2 = {}; 1430 for (e2 = 0; e2 < arguments.length; e2++) for (t2 in arguments[e2]) Object.prototype.hasOwnProperty.call(arguments[e2], t2) && void 0 === r2[t2] && (r2[t2] = arguments[e2][t2]); 1431 return r2; 1432 }, a.prepareContent = function(r2, e2, n2, i2, s2) { 1433 return u.Promise.resolve(e2).then(function(n3) { 1434 return o.blob && (n3 instanceof Blob || -1 !== ["[object File]", "[object Blob]"].indexOf(Object.prototype.toString.call(n3))) && "undefined" != typeof FileReader ? new u.Promise(function(t2, r3) { 1435 var e3 = new FileReader(); 1436 e3.onload = function(e4) { 1437 t2(e4.target.result); 1438 }, e3.onerror = function(e4) { 1439 r3(e4.target.error); 1440 }, e3.readAsArrayBuffer(n3); 1441 }) : n3; 1442 }).then(function(e3) { 1443 var t2 = a.getTypeOf(e3); 1444 return t2 ? ("arraybuffer" === t2 ? e3 = a.transformTo("uint8array", e3) : "string" === t2 && (s2 ? e3 = h.decode(e3) : n2 && true !== i2 && (e3 = function(e4) { 1445 return l(e4, o.uint8array ? new Uint8Array(e4.length) : new Array(e4.length)); 1446 }(e3))), e3) : u.Promise.reject(new Error("Can't read the data of '" + r2 + "'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?")); 1447 }); 1448 }; 1449 }, { 1450 "./base64": 1, 1451 "./external": 6, 1452 "./nodejsUtils": 14, 1453 "./support": 30, 1454 setimmediate: 54 1455 }], 1456 33: [function(e, t, r) { 1457 "use strict"; 1458 var n = e("./reader/readerFor"), i = e("./utils"), s = e("./signature"), a = e("./zipEntry"), o = e("./support"); 1459 function h(e2) { 1460 this.files = [], this.loadOptions = e2; 1461 } 1462 h.prototype = { 1463 checkSignature: function(e2) { 1464 if (!this.reader.readAndCheckSignature(e2)) { 1465 this.reader.index -= 4; 1466 var t2 = this.reader.readString(4); 1467 throw new Error("Corrupted zip or bug: unexpected signature (" + i.pretty(t2) + ", expected " + i.pretty(e2) + ")"); 1468 } 1469 }, 1470 isSignature: function(e2, t2) { 1471 var r2 = this.reader.index; 1472 this.reader.setIndex(e2); 1473 var n2 = this.reader.readString(4) === t2; 1474 return this.reader.setIndex(r2), n2; 1475 }, 1476 readBlockEndOfCentral: function() { 1477 this.diskNumber = this.reader.readInt(2), this.diskWithCentralDirStart = this.reader.readInt(2), this.centralDirRecordsOnThisDisk = this.reader.readInt(2), this.centralDirRecords = this.reader.readInt(2), this.centralDirSize = this.reader.readInt(4), this.centralDirOffset = this.reader.readInt(4), this.zipCommentLength = this.reader.readInt(2); 1478 var e2 = this.reader.readData(this.zipCommentLength), t2 = o.uint8array ? "uint8array" : "array", r2 = i.transformTo(t2, e2); 1479 this.zipComment = this.loadOptions.decodeFileName(r2); 1480 }, 1481 readBlockZip64EndOfCentral: function() { 1482 this.zip64EndOfCentralSize = this.reader.readInt(8), this.reader.skip(4), this.diskNumber = this.reader.readInt(4), this.diskWithCentralDirStart = this.reader.readInt(4), this.centralDirRecordsOnThisDisk = this.reader.readInt(8), this.centralDirRecords = this.reader.readInt(8), this.centralDirSize = this.reader.readInt(8), this.centralDirOffset = this.reader.readInt(8), this.zip64ExtensibleData = {}; 1483 for (var e2, t2, r2, n2 = this.zip64EndOfCentralSize - 44; 0 < n2; ) e2 = this.reader.readInt(2), t2 = this.reader.readInt(4), r2 = this.reader.readData(t2), this.zip64ExtensibleData[e2] = { 1484 id: e2, 1485 length: t2, 1486 value: r2 1487 }; 1488 }, 1489 readBlockZip64EndOfCentralLocator: function() { 1490 if (this.diskWithZip64CentralDirStart = this.reader.readInt(4), this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8), this.disksCount = this.reader.readInt(4), 1 < this.disksCount) throw new Error("Multi-volumes zip are not supported"); 1491 }, 1492 readLocalFiles: function() { 1493 var e2, t2; 1494 for (e2 = 0; e2 < this.files.length; e2++) t2 = this.files[e2], this.reader.setIndex(t2.localHeaderOffset), this.checkSignature(s.LOCAL_FILE_HEADER), t2.readLocalPart(this.reader), t2.handleUTF8(), t2.processAttributes(); 1495 }, 1496 readCentralDir: function() { 1497 var e2; 1498 for (this.reader.setIndex(this.centralDirOffset); this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER); ) (e2 = new a({ 1499 zip64: this.zip64 1500 }, this.loadOptions)).readCentralPart(this.reader), this.files.push(e2); 1501 if (this.centralDirRecords !== this.files.length && 0 !== this.centralDirRecords && 0 === this.files.length) throw new Error("Corrupted zip or bug: expected " + this.centralDirRecords + " records in central dir, got " + this.files.length); 1502 }, 1503 readEndOfCentral: function() { 1504 var e2 = this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END); 1505 if (e2 < 0) throw !this.isSignature(0, s.LOCAL_FILE_HEADER) ? new Error("Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html") : new Error("Corrupted zip: can't find end of central directory"); 1506 this.reader.setIndex(e2); 1507 var t2 = e2; 1508 if (this.checkSignature(s.CENTRAL_DIRECTORY_END), this.readBlockEndOfCentral(), this.diskNumber === i.MAX_VALUE_16BITS || this.diskWithCentralDirStart === i.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === i.MAX_VALUE_16BITS || this.centralDirRecords === i.MAX_VALUE_16BITS || this.centralDirSize === i.MAX_VALUE_32BITS || this.centralDirOffset === i.MAX_VALUE_32BITS) { 1509 if (this.zip64 = true, (e2 = this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR)) < 0) throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator"); 1510 if (this.reader.setIndex(e2), this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR), this.readBlockZip64EndOfCentralLocator(), !this.isSignature(this.relativeOffsetEndOfZip64CentralDir, s.ZIP64_CENTRAL_DIRECTORY_END) && (this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END), this.relativeOffsetEndOfZip64CentralDir < 0)) throw new Error("Corrupted zip: can't find the ZIP64 end of central directory"); 1511 this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir), this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END), this.readBlockZip64EndOfCentral(); 1512 } 1513 var r2 = this.centralDirOffset + this.centralDirSize; 1514 this.zip64 && (r2 += 20, r2 += 12 + this.zip64EndOfCentralSize); 1515 var n2 = t2 - r2; 1516 if (0 < n2) this.isSignature(t2, s.CENTRAL_FILE_HEADER) || (this.reader.zero = n2); 1517 else if (n2 < 0) throw new Error("Corrupted zip: missing " + Math.abs(n2) + " bytes."); 1518 }, 1519 prepareReader: function(e2) { 1520 this.reader = n(e2); 1521 }, 1522 load: function(e2) { 1523 this.prepareReader(e2), this.readEndOfCentral(), this.readCentralDir(), this.readLocalFiles(); 1524 } 1525 }, t.exports = h; 1526 }, { 1527 "./reader/readerFor": 22, 1528 "./signature": 23, 1529 "./support": 30, 1530 "./utils": 32, 1531 "./zipEntry": 34 1532 }], 1533 34: [function(e, t, r) { 1534 "use strict"; 1535 var n = e("./reader/readerFor"), s = e("./utils"), i = e("./compressedObject"), a = e("./crc32"), o = e("./utf8"), h = e("./compressions"), u = e("./support"); 1536 function l(e2, t2) { 1537 this.options = e2, this.loadOptions = t2; 1538 } 1539 l.prototype = { 1540 isEncrypted: function() { 1541 return 1 == (1 & this.bitFlag); 1542 }, 1543 useUTF8: function() { 1544 return 2048 == (2048 & this.bitFlag); 1545 }, 1546 readLocalPart: function(e2) { 1547 var t2, r2; 1548 if (e2.skip(22), this.fileNameLength = e2.readInt(2), r2 = e2.readInt(2), this.fileName = e2.readData(this.fileNameLength), e2.skip(r2), -1 === this.compressedSize || -1 === this.uncompressedSize) throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)"); 1549 if (null === (t2 = function(e3) { 1550 for (var t3 in h) if (Object.prototype.hasOwnProperty.call(h, t3) && h[t3].magic === e3) return h[t3]; 1551 return null; 1552 }(this.compressionMethod))) throw new Error("Corrupted zip : compression " + s.pretty(this.compressionMethod) + " unknown (inner file : " + s.transformTo("string", this.fileName) + ")"); 1553 this.decompressed = new i(this.compressedSize, this.uncompressedSize, this.crc32, t2, e2.readData(this.compressedSize)); 1554 }, 1555 readCentralPart: function(e2) { 1556 this.versionMadeBy = e2.readInt(2), e2.skip(2), this.bitFlag = e2.readInt(2), this.compressionMethod = e2.readString(2), this.date = e2.readDate(), this.crc32 = e2.readInt(4), this.compressedSize = e2.readInt(4), this.uncompressedSize = e2.readInt(4); 1557 var t2 = e2.readInt(2); 1558 if (this.extraFieldsLength = e2.readInt(2), this.fileCommentLength = e2.readInt(2), this.diskNumberStart = e2.readInt(2), this.internalFileAttributes = e2.readInt(2), this.externalFileAttributes = e2.readInt(4), this.localHeaderOffset = e2.readInt(4), this.isEncrypted()) throw new Error("Encrypted zip are not supported"); 1559 e2.skip(t2), this.readExtraFields(e2), this.parseZIP64ExtraField(e2), this.fileComment = e2.readData(this.fileCommentLength); 1560 }, 1561 processAttributes: function() { 1562 this.unixPermissions = null, this.dosPermissions = null; 1563 var e2 = this.versionMadeBy >> 8; 1564 this.dir = !!(16 & this.externalFileAttributes), 0 == e2 && (this.dosPermissions = 63 & this.externalFileAttributes), 3 == e2 && (this.unixPermissions = this.externalFileAttributes >> 16 & 65535), this.dir || "/" !== this.fileNameStr.slice(-1) || (this.dir = true); 1565 }, 1566 parseZIP64ExtraField: function() { 1567 if (this.extraFields[1]) { 1568 var e2 = n(this.extraFields[1].value); 1569 this.uncompressedSize === s.MAX_VALUE_32BITS && (this.uncompressedSize = e2.readInt(8)), this.compressedSize === s.MAX_VALUE_32BITS && (this.compressedSize = e2.readInt(8)), this.localHeaderOffset === s.MAX_VALUE_32BITS && (this.localHeaderOffset = e2.readInt(8)), this.diskNumberStart === s.MAX_VALUE_32BITS && (this.diskNumberStart = e2.readInt(4)); 1570 } 1571 }, 1572 readExtraFields: function(e2) { 1573 var t2, r2, n2, i2 = e2.index + this.extraFieldsLength; 1574 for (this.extraFields || (this.extraFields = {}); e2.index + 4 < i2; ) t2 = e2.readInt(2), r2 = e2.readInt(2), n2 = e2.readData(r2), this.extraFields[t2] = { 1575 id: t2, 1576 length: r2, 1577 value: n2 1578 }; 1579 e2.setIndex(i2); 1580 }, 1581 handleUTF8: function() { 1582 var e2 = u.uint8array ? "uint8array" : "array"; 1583 if (this.useUTF8()) this.fileNameStr = o.utf8decode(this.fileName), this.fileCommentStr = o.utf8decode(this.fileComment); 1584 else { 1585 var t2 = this.findExtraFieldUnicodePath(); 1586 if (null !== t2) this.fileNameStr = t2; 1587 else { 1588 var r2 = s.transformTo(e2, this.fileName); 1589 this.fileNameStr = this.loadOptions.decodeFileName(r2); 1590 } 1591 var n2 = this.findExtraFieldUnicodeComment(); 1592 if (null !== n2) this.fileCommentStr = n2; 1593 else { 1594 var i2 = s.transformTo(e2, this.fileComment); 1595 this.fileCommentStr = this.loadOptions.decodeFileName(i2); 1596 } 1597 } 1598 }, 1599 findExtraFieldUnicodePath: function() { 1600 var e2 = this.extraFields[28789]; 1601 if (e2) { 1602 var t2 = n(e2.value); 1603 return 1 !== t2.readInt(1) ? null : a(this.fileName) !== t2.readInt(4) ? null : o.utf8decode(t2.readData(e2.length - 5)); 1604 } 1605 return null; 1606 }, 1607 findExtraFieldUnicodeComment: function() { 1608 var e2 = this.extraFields[25461]; 1609 if (e2) { 1610 var t2 = n(e2.value); 1611 return 1 !== t2.readInt(1) ? null : a(this.fileComment) !== t2.readInt(4) ? null : o.utf8decode(t2.readData(e2.length - 5)); 1612 } 1613 return null; 1614 } 1615 }, t.exports = l; 1616 }, { 1617 "./compressedObject": 2, 1618 "./compressions": 3, 1619 "./crc32": 4, 1620 "./reader/readerFor": 22, 1621 "./support": 30, 1622 "./utf8": 31, 1623 "./utils": 32 1624 }], 1625 35: [function(e, t, r) { 1626 "use strict"; 1627 function n(e2, t2, r2) { 1628 this.name = e2, this.dir = r2.dir, this.date = r2.date, this.comment = r2.comment, this.unixPermissions = r2.unixPermissions, this.dosPermissions = r2.dosPermissions, this._data = t2, this._dataBinary = r2.binary, this.options = { 1629 compression: r2.compression, 1630 compressionOptions: r2.compressionOptions 1631 }; 1632 } 1633 var s = e("./stream/StreamHelper"), i = e("./stream/DataWorker"), a = e("./utf8"), o = e("./compressedObject"), h = e("./stream/GenericWorker"); 1634 n.prototype = { 1635 internalStream: function(e2) { 1636 var t2 = null, r2 = "string"; 1637 try { 1638 if (!e2) throw new Error("No output type specified."); 1639 var n2 = "string" === (r2 = e2.toLowerCase()) || "text" === r2; 1640 "binarystring" !== r2 && "text" !== r2 || (r2 = "string"), t2 = this._decompressWorker(); 1641 var i2 = !this._dataBinary; 1642 i2 && !n2 && (t2 = t2.pipe(new a.Utf8EncodeWorker())), !i2 && n2 && (t2 = t2.pipe(new a.Utf8DecodeWorker())); 1643 } catch (e3) { 1644 (t2 = new h("error")).error(e3); 1645 } 1646 return new s(t2, r2, ""); 1647 }, 1648 async: function(e2, t2) { 1649 return this.internalStream(e2).accumulate(t2); 1650 }, 1651 nodeStream: function(e2, t2) { 1652 return this.internalStream(e2 || "nodebuffer").toNodejsStream(t2); 1653 }, 1654 _compressWorker: function(e2, t2) { 1655 if (this._data instanceof o && this._data.compression.magic === e2.magic) return this._data.getCompressedWorker(); 1656 var r2 = this._decompressWorker(); 1657 return this._dataBinary || (r2 = r2.pipe(new a.Utf8EncodeWorker())), o.createWorkerFrom(r2, e2, t2); 1658 }, 1659 _decompressWorker: function() { 1660 return this._data instanceof o ? this._data.getContentWorker() : this._data instanceof h ? this._data : new i(this._data); 1661 } 1662 }; 1663 for (var u = ["asText", "asBinary", "asNodeBuffer", "asUint8Array", "asArrayBuffer"], l = function() { 1664 throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); 1665 }, f = 0; f < u.length; f++) n.prototype[u[f]] = l; 1666 t.exports = n; 1667 }, { 1668 "./compressedObject": 2, 1669 "./stream/DataWorker": 27, 1670 "./stream/GenericWorker": 28, 1671 "./stream/StreamHelper": 29, 1672 "./utf8": 31 1673 }], 1674 36: [function(e, l, t) { 1675 (function(t2) { 1676 "use strict"; 1677 var r, n, e2 = t2.MutationObserver || t2.WebKitMutationObserver; 1678 if (e2) { 1679 var i = 0, s = new e2(u), a = t2.document.createTextNode(""); 1680 s.observe(a, { 1681 characterData: true 1682 }), r = function() { 1683 a.data = i = ++i % 2; 1684 }; 1685 } else if (t2.setImmediate || void 0 === t2.MessageChannel) r = "document" in t2 && "onreadystatechange" in t2.document.createElement("script") ? function() { 1686 var e3 = t2.document.createElement("script"); 1687 e3.onreadystatechange = function() { 1688 u(), e3.onreadystatechange = null, e3.parentNode.removeChild(e3), e3 = null; 1689 }, t2.document.documentElement.appendChild(e3); 1690 } : function() { 1691 setTimeout(u, 0); 1692 }; 1693 else { 1694 var o = new t2.MessageChannel(); 1695 o.port1.onmessage = u, r = function() { 1696 o.port2.postMessage(0); 1697 }; 1698 } 1699 var h = []; 1700 function u() { 1701 var e3, t3; 1702 n = true; 1703 for (var r2 = h.length; r2; ) { 1704 for (t3 = h, h = [], e3 = -1; ++e3 < r2; ) t3[e3](); 1705 r2 = h.length; 1706 } 1707 n = false; 1708 } 1709 l.exports = function(e3) { 1710 1 !== h.push(e3) || n || r(); 1711 }; 1712 }).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {}); 1713 }, {}], 1714 37: [function(e, t, r) { 1715 "use strict"; 1716 var i = e("immediate"); 1717 function u() { 1718 } 1719 var l = {}, s = ["REJECTED"], a = ["FULFILLED"], n = ["PENDING"]; 1720 function o(e2) { 1721 if ("function" != typeof e2) throw new TypeError("resolver must be a function"); 1722 this.state = n, this.queue = [], this.outcome = void 0, e2 !== u && d(this, e2); 1723 } 1724 function h(e2, t2, r2) { 1725 this.promise = e2, "function" == typeof t2 && (this.onFulfilled = t2, this.callFulfilled = this.otherCallFulfilled), "function" == typeof r2 && (this.onRejected = r2, this.callRejected = this.otherCallRejected); 1726 } 1727 function f(t2, r2, n2) { 1728 i(function() { 1729 var e2; 1730 try { 1731 e2 = r2(n2); 1732 } catch (e3) { 1733 return l.reject(t2, e3); 1734 } 1735 e2 === t2 ? l.reject(t2, new TypeError("Cannot resolve promise with itself")) : l.resolve(t2, e2); 1736 }); 1737 } 1738 function c(e2) { 1739 var t2 = e2 && e2.then; 1740 if (e2 && ("object" == typeof e2 || "function" == typeof e2) && "function" == typeof t2) return function() { 1741 t2.apply(e2, arguments); 1742 }; 1743 } 1744 function d(t2, e2) { 1745 var r2 = false; 1746 function n2(e3) { 1747 r2 || (r2 = true, l.reject(t2, e3)); 1748 } 1749 function i2(e3) { 1750 r2 || (r2 = true, l.resolve(t2, e3)); 1751 } 1752 var s2 = p(function() { 1753 e2(i2, n2); 1754 }); 1755 "error" === s2.status && n2(s2.value); 1756 } 1757 function p(e2, t2) { 1758 var r2 = {}; 1759 try { 1760 r2.value = e2(t2), r2.status = "success"; 1761 } catch (e3) { 1762 r2.status = "error", r2.value = e3; 1763 } 1764 return r2; 1765 } 1766 (t.exports = o).prototype.finally = function(t2) { 1767 if ("function" != typeof t2) return this; 1768 var r2 = this.constructor; 1769 return this.then(function(e2) { 1770 return r2.resolve(t2()).then(function() { 1771 return e2; 1772 }); 1773 }, function(e2) { 1774 return r2.resolve(t2()).then(function() { 1775 throw e2; 1776 }); 1777 }); 1778 }, o.prototype.catch = function(e2) { 1779 return this.then(null, e2); 1780 }, o.prototype.then = function(e2, t2) { 1781 if ("function" != typeof e2 && this.state === a || "function" != typeof t2 && this.state === s) return this; 1782 var r2 = new this.constructor(u); 1783 this.state !== n ? f(r2, this.state === a ? e2 : t2, this.outcome) : this.queue.push(new h(r2, e2, t2)); 1784 return r2; 1785 }, h.prototype.callFulfilled = function(e2) { 1786 l.resolve(this.promise, e2); 1787 }, h.prototype.otherCallFulfilled = function(e2) { 1788 f(this.promise, this.onFulfilled, e2); 1789 }, h.prototype.callRejected = function(e2) { 1790 l.reject(this.promise, e2); 1791 }, h.prototype.otherCallRejected = function(e2) { 1792 f(this.promise, this.onRejected, e2); 1793 }, l.resolve = function(e2, t2) { 1794 var r2 = p(c, t2); 1795 if ("error" === r2.status) return l.reject(e2, r2.value); 1796 var n2 = r2.value; 1797 if (n2) d(e2, n2); 1798 else { 1799 e2.state = a, e2.outcome = t2; 1800 for (var i2 = -1, s2 = e2.queue.length; ++i2 < s2; ) e2.queue[i2].callFulfilled(t2); 1801 } 1802 return e2; 1803 }, l.reject = function(e2, t2) { 1804 e2.state = s, e2.outcome = t2; 1805 for (var r2 = -1, n2 = e2.queue.length; ++r2 < n2; ) e2.queue[r2].callRejected(t2); 1806 return e2; 1807 }, o.resolve = function(e2) { 1808 if (e2 instanceof this) return e2; 1809 return l.resolve(new this(u), e2); 1810 }, o.reject = function(e2) { 1811 var t2 = new this(u); 1812 return l.reject(t2, e2); 1813 }, o.all = function(e2) { 1814 var r2 = this; 1815 if ("[object Array]" !== Object.prototype.toString.call(e2)) return this.reject(new TypeError("must be an array")); 1816 var n2 = e2.length, i2 = false; 1817 if (!n2) return this.resolve([]); 1818 var s2 = new Array(n2), a2 = 0, t2 = -1, o2 = new this(u); 1819 for (; ++t2 < n2; ) h2(e2[t2], t2); 1820 return o2; 1821 function h2(e3, t3) { 1822 r2.resolve(e3).then(function(e4) { 1823 s2[t3] = e4, ++a2 !== n2 || i2 || (i2 = true, l.resolve(o2, s2)); 1824 }, function(e4) { 1825 i2 || (i2 = true, l.reject(o2, e4)); 1826 }); 1827 } 1828 }, o.race = function(e2) { 1829 var t2 = this; 1830 if ("[object Array]" !== Object.prototype.toString.call(e2)) return this.reject(new TypeError("must be an array")); 1831 var r2 = e2.length, n2 = false; 1832 if (!r2) return this.resolve([]); 1833 var i2 = -1, s2 = new this(u); 1834 for (; ++i2 < r2; ) a2 = e2[i2], t2.resolve(a2).then(function(e3) { 1835 n2 || (n2 = true, l.resolve(s2, e3)); 1836 }, function(e3) { 1837 n2 || (n2 = true, l.reject(s2, e3)); 1838 }); 1839 var a2; 1840 return s2; 1841 }; 1842 }, { 1843 immediate: 36 1844 }], 1845 38: [function(e, t, r) { 1846 "use strict"; 1847 var n = {}; 1848 (0, e("./lib/utils/common").assign)(n, e("./lib/deflate"), e("./lib/inflate"), e("./lib/zlib/constants")), t.exports = n; 1849 }, { 1850 "./lib/deflate": 39, 1851 "./lib/inflate": 40, 1852 "./lib/utils/common": 41, 1853 "./lib/zlib/constants": 44 1854 }], 1855 39: [function(e, t, r) { 1856 "use strict"; 1857 var a = e("./zlib/deflate"), o = e("./utils/common"), h = e("./utils/strings"), i = e("./zlib/messages"), s = e("./zlib/zstream"), u = Object.prototype.toString, l = 0, f = -1, c = 0, d = 8; 1858 function p(e2) { 1859 if (!(this instanceof p)) return new p(e2); 1860 this.options = o.assign({ 1861 level: f, 1862 method: d, 1863 chunkSize: 16384, 1864 windowBits: 15, 1865 memLevel: 8, 1866 strategy: c, 1867 to: "" 1868 }, e2 || {}); 1869 var t2 = this.options; 1870 t2.raw && 0 < t2.windowBits ? t2.windowBits = -t2.windowBits : t2.gzip && 0 < t2.windowBits && t2.windowBits < 16 && (t2.windowBits += 16), this.err = 0, this.msg = "", this.ended = false, this.chunks = [], this.strm = new s(), this.strm.avail_out = 0; 1871 var r2 = a.deflateInit2(this.strm, t2.level, t2.method, t2.windowBits, t2.memLevel, t2.strategy); 1872 if (r2 !== l) throw new Error(i[r2]); 1873 if (t2.header && a.deflateSetHeader(this.strm, t2.header), t2.dictionary) { 1874 var n2; 1875 if (n2 = "string" == typeof t2.dictionary ? h.string2buf(t2.dictionary) : "[object ArrayBuffer]" === u.call(t2.dictionary) ? new Uint8Array(t2.dictionary) : t2.dictionary, (r2 = a.deflateSetDictionary(this.strm, n2)) !== l) throw new Error(i[r2]); 1876 this._dict_set = true; 1877 } 1878 } 1879 function n(e2, t2) { 1880 var r2 = new p(t2); 1881 if (r2.push(e2, true), r2.err) throw r2.msg || i[r2.err]; 1882 return r2.result; 1883 } 1884 p.prototype.push = function(e2, t2) { 1885 var r2, n2, i2 = this.strm, s2 = this.options.chunkSize; 1886 if (this.ended) return false; 1887 n2 = t2 === ~~t2 ? t2 : true === t2 ? 4 : 0, "string" == typeof e2 ? i2.input = h.string2buf(e2) : "[object ArrayBuffer]" === u.call(e2) ? i2.input = new Uint8Array(e2) : i2.input = e2, i2.next_in = 0, i2.avail_in = i2.input.length; 1888 do { 1889 if (0 === i2.avail_out && (i2.output = new o.Buf8(s2), i2.next_out = 0, i2.avail_out = s2), 1 !== (r2 = a.deflate(i2, n2)) && r2 !== l) return this.onEnd(r2), !(this.ended = true); 1890 0 !== i2.avail_out && (0 !== i2.avail_in || 4 !== n2 && 2 !== n2) || ("string" === this.options.to ? this.onData(h.buf2binstring(o.shrinkBuf(i2.output, i2.next_out))) : this.onData(o.shrinkBuf(i2.output, i2.next_out))); 1891 } while ((0 < i2.avail_in || 0 === i2.avail_out) && 1 !== r2); 1892 return 4 === n2 ? (r2 = a.deflateEnd(this.strm), this.onEnd(r2), this.ended = true, r2 === l) : 2 !== n2 || (this.onEnd(l), !(i2.avail_out = 0)); 1893 }, p.prototype.onData = function(e2) { 1894 this.chunks.push(e2); 1895 }, p.prototype.onEnd = function(e2) { 1896 e2 === l && ("string" === this.options.to ? this.result = this.chunks.join("") : this.result = o.flattenChunks(this.chunks)), this.chunks = [], this.err = e2, this.msg = this.strm.msg; 1897 }, r.Deflate = p, r.deflate = n, r.deflateRaw = function(e2, t2) { 1898 return (t2 = t2 || {}).raw = true, n(e2, t2); 1899 }, r.gzip = function(e2, t2) { 1900 return (t2 = t2 || {}).gzip = true, n(e2, t2); 1901 }; 1902 }, { 1903 "./utils/common": 41, 1904 "./utils/strings": 42, 1905 "./zlib/deflate": 46, 1906 "./zlib/messages": 51, 1907 "./zlib/zstream": 53 1908 }], 1909 40: [function(e, t, r) { 1910 "use strict"; 1911 var c = e("./zlib/inflate"), d = e("./utils/common"), p = e("./utils/strings"), m = e("./zlib/constants"), n = e("./zlib/messages"), i = e("./zlib/zstream"), s = e("./zlib/gzheader"), _ = Object.prototype.toString; 1912 function a(e2) { 1913 if (!(this instanceof a)) return new a(e2); 1914 this.options = d.assign({ 1915 chunkSize: 16384, 1916 windowBits: 0, 1917 to: "" 1918 }, e2 || {}); 1919 var t2 = this.options; 1920 t2.raw && 0 <= t2.windowBits && t2.windowBits < 16 && (t2.windowBits = -t2.windowBits, 0 === t2.windowBits && (t2.windowBits = -15)), !(0 <= t2.windowBits && t2.windowBits < 16) || e2 && e2.windowBits || (t2.windowBits += 32), 15 < t2.windowBits && t2.windowBits < 48 && 0 == (15 & t2.windowBits) && (t2.windowBits |= 15), this.err = 0, this.msg = "", this.ended = false, this.chunks = [], this.strm = new i(), this.strm.avail_out = 0; 1921 var r2 = c.inflateInit2(this.strm, t2.windowBits); 1922 if (r2 !== m.Z_OK) throw new Error(n[r2]); 1923 this.header = new s(), c.inflateGetHeader(this.strm, this.header); 1924 } 1925 function o(e2, t2) { 1926 var r2 = new a(t2); 1927 if (r2.push(e2, true), r2.err) throw r2.msg || n[r2.err]; 1928 return r2.result; 1929 } 1930 a.prototype.push = function(e2, t2) { 1931 var r2, n2, i2, s2, a2, o2, h = this.strm, u = this.options.chunkSize, l = this.options.dictionary, f = false; 1932 if (this.ended) return false; 1933 n2 = t2 === ~~t2 ? t2 : true === t2 ? m.Z_FINISH : m.Z_NO_FLUSH, "string" == typeof e2 ? h.input = p.binstring2buf(e2) : "[object ArrayBuffer]" === _.call(e2) ? h.input = new Uint8Array(e2) : h.input = e2, h.next_in = 0, h.avail_in = h.input.length; 1934 do { 1935 if (0 === h.avail_out && (h.output = new d.Buf8(u), h.next_out = 0, h.avail_out = u), (r2 = c.inflate(h, m.Z_NO_FLUSH)) === m.Z_NEED_DICT && l && (o2 = "string" == typeof l ? p.string2buf(l) : "[object ArrayBuffer]" === _.call(l) ? new Uint8Array(l) : l, r2 = c.inflateSetDictionary(this.strm, o2)), r2 === m.Z_BUF_ERROR && true === f && (r2 = m.Z_OK, f = false), r2 !== m.Z_STREAM_END && r2 !== m.Z_OK) return this.onEnd(r2), !(this.ended = true); 1936 h.next_out && (0 !== h.avail_out && r2 !== m.Z_STREAM_END && (0 !== h.avail_in || n2 !== m.Z_FINISH && n2 !== m.Z_SYNC_FLUSH) || ("string" === this.options.to ? (i2 = p.utf8border(h.output, h.next_out), s2 = h.next_out - i2, a2 = p.buf2string(h.output, i2), h.next_out = s2, h.avail_out = u - s2, s2 && d.arraySet(h.output, h.output, i2, s2, 0), this.onData(a2)) : this.onData(d.shrinkBuf(h.output, h.next_out)))), 0 === h.avail_in && 0 === h.avail_out && (f = true); 1937 } while ((0 < h.avail_in || 0 === h.avail_out) && r2 !== m.Z_STREAM_END); 1938 return r2 === m.Z_STREAM_END && (n2 = m.Z_FINISH), n2 === m.Z_FINISH ? (r2 = c.inflateEnd(this.strm), this.onEnd(r2), this.ended = true, r2 === m.Z_OK) : n2 !== m.Z_SYNC_FLUSH || (this.onEnd(m.Z_OK), !(h.avail_out = 0)); 1939 }, a.prototype.onData = function(e2) { 1940 this.chunks.push(e2); 1941 }, a.prototype.onEnd = function(e2) { 1942 e2 === m.Z_OK && ("string" === this.options.to ? this.result = this.chunks.join("") : this.result = d.flattenChunks(this.chunks)), this.chunks = [], this.err = e2, this.msg = this.strm.msg; 1943 }, r.Inflate = a, r.inflate = o, r.inflateRaw = function(e2, t2) { 1944 return (t2 = t2 || {}).raw = true, o(e2, t2); 1945 }, r.ungzip = o; 1946 }, { 1947 "./utils/common": 41, 1948 "./utils/strings": 42, 1949 "./zlib/constants": 44, 1950 "./zlib/gzheader": 47, 1951 "./zlib/inflate": 49, 1952 "./zlib/messages": 51, 1953 "./zlib/zstream": 53 1954 }], 1955 41: [function(e, t, r) { 1956 "use strict"; 1957 var n = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && "undefined" != typeof Int32Array; 1958 r.assign = function(e2) { 1959 for (var t2 = Array.prototype.slice.call(arguments, 1); t2.length; ) { 1960 var r2 = t2.shift(); 1961 if (r2) { 1962 if ("object" != typeof r2) throw new TypeError(r2 + "must be non-object"); 1963 for (var n2 in r2) r2.hasOwnProperty(n2) && (e2[n2] = r2[n2]); 1964 } 1965 } 1966 return e2; 1967 }, r.shrinkBuf = function(e2, t2) { 1968 return e2.length === t2 ? e2 : e2.subarray ? e2.subarray(0, t2) : (e2.length = t2, e2); 1969 }; 1970 var i = { 1971 arraySet: function(e2, t2, r2, n2, i2) { 1972 if (t2.subarray && e2.subarray) e2.set(t2.subarray(r2, r2 + n2), i2); 1973 else for (var s2 = 0; s2 < n2; s2++) e2[i2 + s2] = t2[r2 + s2]; 1974 }, 1975 flattenChunks: function(e2) { 1976 var t2, r2, n2, i2, s2, a; 1977 for (t2 = n2 = 0, r2 = e2.length; t2 < r2; t2++) n2 += e2[t2].length; 1978 for (a = new Uint8Array(n2), t2 = i2 = 0, r2 = e2.length; t2 < r2; t2++) s2 = e2[t2], a.set(s2, i2), i2 += s2.length; 1979 return a; 1980 } 1981 }, s = { 1982 arraySet: function(e2, t2, r2, n2, i2) { 1983 for (var s2 = 0; s2 < n2; s2++) e2[i2 + s2] = t2[r2 + s2]; 1984 }, 1985 flattenChunks: function(e2) { 1986 return [].concat.apply([], e2); 1987 } 1988 }; 1989 r.setTyped = function(e2) { 1990 e2 ? (r.Buf8 = Uint8Array, r.Buf16 = Uint16Array, r.Buf32 = Int32Array, r.assign(r, i)) : (r.Buf8 = Array, r.Buf16 = Array, r.Buf32 = Array, r.assign(r, s)); 1991 }, r.setTyped(n); 1992 }, {}], 1993 42: [function(e, t, r) { 1994 "use strict"; 1995 var h = e("./common"), i = true, s = true; 1996 try { 1997 String.fromCharCode.apply(null, [0]); 1998 } catch (e2) { 1999 i = false; 2000 } 2001 try { 2002 String.fromCharCode.apply(null, new Uint8Array(1)); 2003 } catch (e2) { 2004 s = false; 2005 } 2006 for (var u = new h.Buf8(256), n = 0; n < 256; n++) u[n] = 252 <= n ? 6 : 248 <= n ? 5 : 240 <= n ? 4 : 224 <= n ? 3 : 192 <= n ? 2 : 1; 2007 function l(e2, t2) { 2008 if (t2 < 65537 && (e2.subarray && s || !e2.subarray && i)) return String.fromCharCode.apply(null, h.shrinkBuf(e2, t2)); 2009 for (var r2 = "", n2 = 0; n2 < t2; n2++) r2 += String.fromCharCode(e2[n2]); 2010 return r2; 2011 } 2012 u[254] = u[254] = 1, r.string2buf = function(e2) { 2013 var t2, r2, n2, i2, s2, a = e2.length, o = 0; 2014 for (i2 = 0; i2 < a; i2++) 55296 == (64512 & (r2 = e2.charCodeAt(i2))) && i2 + 1 < a && 56320 == (64512 & (n2 = e2.charCodeAt(i2 + 1))) && (r2 = 65536 + (r2 - 55296 << 10) + (n2 - 56320), i2++), o += r2 < 128 ? 1 : r2 < 2048 ? 2 : r2 < 65536 ? 3 : 4; 2015 for (t2 = new h.Buf8(o), i2 = s2 = 0; s2 < o; i2++) 55296 == (64512 & (r2 = e2.charCodeAt(i2))) && i2 + 1 < a && 56320 == (64512 & (n2 = e2.charCodeAt(i2 + 1))) && (r2 = 65536 + (r2 - 55296 << 10) + (n2 - 56320), i2++), r2 < 128 ? t2[s2++] = r2 : (r2 < 2048 ? t2[s2++] = 192 | r2 >>> 6 : (r2 < 65536 ? t2[s2++] = 224 | r2 >>> 12 : (t2[s2++] = 240 | r2 >>> 18, t2[s2++] = 128 | r2 >>> 12 & 63), t2[s2++] = 128 | r2 >>> 6 & 63), t2[s2++] = 128 | 63 & r2); 2016 return t2; 2017 }, r.buf2binstring = function(e2) { 2018 return l(e2, e2.length); 2019 }, r.binstring2buf = function(e2) { 2020 for (var t2 = new h.Buf8(e2.length), r2 = 0, n2 = t2.length; r2 < n2; r2++) t2[r2] = e2.charCodeAt(r2); 2021 return t2; 2022 }, r.buf2string = function(e2, t2) { 2023 var r2, n2, i2, s2, a = t2 || e2.length, o = new Array(2 * a); 2024 for (r2 = n2 = 0; r2 < a; ) if ((i2 = e2[r2++]) < 128) o[n2++] = i2; 2025 else if (4 < (s2 = u[i2])) o[n2++] = 65533, r2 += s2 - 1; 2026 else { 2027 for (i2 &= 2 === s2 ? 31 : 3 === s2 ? 15 : 7; 1 < s2 && r2 < a; ) i2 = i2 << 6 | 63 & e2[r2++], s2--; 2028 1 < s2 ? o[n2++] = 65533 : i2 < 65536 ? o[n2++] = i2 : (i2 -= 65536, o[n2++] = 55296 | i2 >> 10 & 1023, o[n2++] = 56320 | 1023 & i2); 2029 } 2030 return l(o, n2); 2031 }, r.utf8border = function(e2, t2) { 2032 var r2; 2033 for ((t2 = t2 || e2.length) > e2.length && (t2 = e2.length), r2 = t2 - 1; 0 <= r2 && 128 == (192 & e2[r2]); ) r2--; 2034 return r2 < 0 ? t2 : 0 === r2 ? t2 : r2 + u[e2[r2]] > t2 ? r2 : t2; 2035 }; 2036 }, { 2037 "./common": 41 2038 }], 2039 43: [function(e, t, r) { 2040 "use strict"; 2041 t.exports = function(e2, t2, r2, n) { 2042 for (var i = 65535 & e2 | 0, s = e2 >>> 16 & 65535 | 0, a = 0; 0 !== r2; ) { 2043 for (r2 -= a = 2e3 < r2 ? 2e3 : r2; s = s + (i = i + t2[n++] | 0) | 0, --a; ) ; 2044 i %= 65521, s %= 65521; 2045 } 2046 return i | s << 16 | 0; 2047 }; 2048 }, {}], 2049 44: [function(e, t, r) { 2050 "use strict"; 2051 t.exports = { 2052 Z_NO_FLUSH: 0, 2053 Z_PARTIAL_FLUSH: 1, 2054 Z_SYNC_FLUSH: 2, 2055 Z_FULL_FLUSH: 3, 2056 Z_FINISH: 4, 2057 Z_BLOCK: 5, 2058 Z_TREES: 6, 2059 Z_OK: 0, 2060 Z_STREAM_END: 1, 2061 Z_NEED_DICT: 2, 2062 Z_ERRNO: -1, 2063 Z_STREAM_ERROR: -2, 2064 Z_DATA_ERROR: -3, 2065 Z_BUF_ERROR: -5, 2066 Z_NO_COMPRESSION: 0, 2067 Z_BEST_SPEED: 1, 2068 Z_BEST_COMPRESSION: 9, 2069 Z_DEFAULT_COMPRESSION: -1, 2070 Z_FILTERED: 1, 2071 Z_HUFFMAN_ONLY: 2, 2072 Z_RLE: 3, 2073 Z_FIXED: 4, 2074 Z_DEFAULT_STRATEGY: 0, 2075 Z_BINARY: 0, 2076 Z_TEXT: 1, 2077 Z_UNKNOWN: 2, 2078 Z_DEFLATED: 8 2079 }; 2080 }, {}], 2081 45: [function(e, t, r) { 2082 "use strict"; 2083 var o = function() { 2084 for (var e2, t2 = [], r2 = 0; r2 < 256; r2++) { 2085 e2 = r2; 2086 for (var n = 0; n < 8; n++) e2 = 1 & e2 ? 3988292384 ^ e2 >>> 1 : e2 >>> 1; 2087 t2[r2] = e2; 2088 } 2089 return t2; 2090 }(); 2091 t.exports = function(e2, t2, r2, n) { 2092 var i = o, s = n + r2; 2093 e2 ^= -1; 2094 for (var a = n; a < s; a++) e2 = e2 >>> 8 ^ i[255 & (e2 ^ t2[a])]; 2095 return -1 ^ e2; 2096 }; 2097 }, {}], 2098 46: [function(e, t, r) { 2099 "use strict"; 2100 var h, c = e("../utils/common"), u = e("./trees"), d = e("./adler32"), p = e("./crc32"), n = e("./messages"), l = 0, f = 4, m = 0, _ = -2, g = -1, b = 4, i = 2, v = 8, y = 9, s = 286, a = 30, o = 19, w = 2 * s + 1, k = 15, x = 3, S = 258, z = S + x + 1, C = 42, E = 113, A = 1, I = 2, O = 3, B = 4; 2101 function R(e2, t2) { 2102 return e2.msg = n[t2], t2; 2103 } 2104 function T(e2) { 2105 return (e2 << 1) - (4 < e2 ? 9 : 0); 2106 } 2107 function D(e2) { 2108 for (var t2 = e2.length; 0 <= --t2; ) e2[t2] = 0; 2109 } 2110 function F(e2) { 2111 var t2 = e2.state, r2 = t2.pending; 2112 r2 > e2.avail_out && (r2 = e2.avail_out), 0 !== r2 && (c.arraySet(e2.output, t2.pending_buf, t2.pending_out, r2, e2.next_out), e2.next_out += r2, t2.pending_out += r2, e2.total_out += r2, e2.avail_out -= r2, t2.pending -= r2, 0 === t2.pending && (t2.pending_out = 0)); 2113 } 2114 function N(e2, t2) { 2115 u._tr_flush_block(e2, 0 <= e2.block_start ? e2.block_start : -1, e2.strstart - e2.block_start, t2), e2.block_start = e2.strstart, F(e2.strm); 2116 } 2117 function U(e2, t2) { 2118 e2.pending_buf[e2.pending++] = t2; 2119 } 2120 function P(e2, t2) { 2121 e2.pending_buf[e2.pending++] = t2 >>> 8 & 255, e2.pending_buf[e2.pending++] = 255 & t2; 2122 } 2123 function L(e2, t2) { 2124 var r2, n2, i2 = e2.max_chain_length, s2 = e2.strstart, a2 = e2.prev_length, o2 = e2.nice_match, h2 = e2.strstart > e2.w_size - z ? e2.strstart - (e2.w_size - z) : 0, u2 = e2.window, l2 = e2.w_mask, f2 = e2.prev, c2 = e2.strstart + S, d2 = u2[s2 + a2 - 1], p2 = u2[s2 + a2]; 2125 e2.prev_length >= e2.good_match && (i2 >>= 2), o2 > e2.lookahead && (o2 = e2.lookahead); 2126 do { 2127 if (u2[(r2 = t2) + a2] === p2 && u2[r2 + a2 - 1] === d2 && u2[r2] === u2[s2] && u2[++r2] === u2[s2 + 1]) { 2128 s2 += 2, r2++; 2129 do { 2130 } while (u2[++s2] === u2[++r2] && u2[++s2] === u2[++r2] && u2[++s2] === u2[++r2] && u2[++s2] === u2[++r2] && u2[++s2] === u2[++r2] && u2[++s2] === u2[++r2] && u2[++s2] === u2[++r2] && u2[++s2] === u2[++r2] && s2 < c2); 2131 if (n2 = S - (c2 - s2), s2 = c2 - S, a2 < n2) { 2132 if (e2.match_start = t2, o2 <= (a2 = n2)) break; 2133 d2 = u2[s2 + a2 - 1], p2 = u2[s2 + a2]; 2134 } 2135 } 2136 } while ((t2 = f2[t2 & l2]) > h2 && 0 != --i2); 2137 return a2 <= e2.lookahead ? a2 : e2.lookahead; 2138 } 2139 function j(e2) { 2140 var t2, r2, n2, i2, s2, a2, o2, h2, u2, l2, f2 = e2.w_size; 2141 do { 2142 if (i2 = e2.window_size - e2.lookahead - e2.strstart, e2.strstart >= f2 + (f2 - z)) { 2143 for (c.arraySet(e2.window, e2.window, f2, f2, 0), e2.match_start -= f2, e2.strstart -= f2, e2.block_start -= f2, t2 = r2 = e2.hash_size; n2 = e2.head[--t2], e2.head[t2] = f2 <= n2 ? n2 - f2 : 0, --r2; ) ; 2144 for (t2 = r2 = f2; n2 = e2.prev[--t2], e2.prev[t2] = f2 <= n2 ? n2 - f2 : 0, --r2; ) ; 2145 i2 += f2; 2146 } 2147 if (0 === e2.strm.avail_in) break; 2148 if (a2 = e2.strm, o2 = e2.window, h2 = e2.strstart + e2.lookahead, u2 = i2, l2 = void 0, l2 = a2.avail_in, u2 < l2 && (l2 = u2), r2 = 0 === l2 ? 0 : (a2.avail_in -= l2, c.arraySet(o2, a2.input, a2.next_in, l2, h2), 1 === a2.state.wrap ? a2.adler = d(a2.adler, o2, l2, h2) : 2 === a2.state.wrap && (a2.adler = p(a2.adler, o2, l2, h2)), a2.next_in += l2, a2.total_in += l2, l2), e2.lookahead += r2, e2.lookahead + e2.insert >= x) for (s2 = e2.strstart - e2.insert, e2.ins_h = e2.window[s2], e2.ins_h = (e2.ins_h << e2.hash_shift ^ e2.window[s2 + 1]) & e2.hash_mask; e2.insert && (e2.ins_h = (e2.ins_h << e2.hash_shift ^ e2.window[s2 + x - 1]) & e2.hash_mask, e2.prev[s2 & e2.w_mask] = e2.head[e2.ins_h], e2.head[e2.ins_h] = s2, s2++, e2.insert--, !(e2.lookahead + e2.insert < x)); ) ; 2149 } while (e2.lookahead < z && 0 !== e2.strm.avail_in); 2150 } 2151 function Z(e2, t2) { 2152 for (var r2, n2; ; ) { 2153 if (e2.lookahead < z) { 2154 if (j(e2), e2.lookahead < z && t2 === l) return A; 2155 if (0 === e2.lookahead) break; 2156 } 2157 if (r2 = 0, e2.lookahead >= x && (e2.ins_h = (e2.ins_h << e2.hash_shift ^ e2.window[e2.strstart + x - 1]) & e2.hash_mask, r2 = e2.prev[e2.strstart & e2.w_mask] = e2.head[e2.ins_h], e2.head[e2.ins_h] = e2.strstart), 0 !== r2 && e2.strstart - r2 <= e2.w_size - z && (e2.match_length = L(e2, r2)), e2.match_length >= x) { 2158 if (n2 = u._tr_tally(e2, e2.strstart - e2.match_start, e2.match_length - x), e2.lookahead -= e2.match_length, e2.match_length <= e2.max_lazy_match && e2.lookahead >= x) { 2159 for (e2.match_length--; e2.strstart++, e2.ins_h = (e2.ins_h << e2.hash_shift ^ e2.window[e2.strstart + x - 1]) & e2.hash_mask, r2 = e2.prev[e2.strstart & e2.w_mask] = e2.head[e2.ins_h], e2.head[e2.ins_h] = e2.strstart, 0 != --e2.match_length; ) ; 2160 e2.strstart++; 2161 } else e2.strstart += e2.match_length, e2.match_length = 0, e2.ins_h = e2.window[e2.strstart], e2.ins_h = (e2.ins_h << e2.hash_shift ^ e2.window[e2.strstart + 1]) & e2.hash_mask; 2162 } else n2 = u._tr_tally(e2, 0, e2.window[e2.strstart]), e2.lookahead--, e2.strstart++; 2163 if (n2 && (N(e2, false), 0 === e2.strm.avail_out)) return A; 2164 } 2165 return e2.insert = e2.strstart < x - 1 ? e2.strstart : x - 1, t2 === f ? (N(e2, true), 0 === e2.strm.avail_out ? O : B) : e2.last_lit && (N(e2, false), 0 === e2.strm.avail_out) ? A : I; 2166 } 2167 function W(e2, t2) { 2168 for (var r2, n2, i2; ; ) { 2169 if (e2.lookahead < z) { 2170 if (j(e2), e2.lookahead < z && t2 === l) return A; 2171 if (0 === e2.lookahead) break; 2172 } 2173 if (r2 = 0, e2.lookahead >= x && (e2.ins_h = (e2.ins_h << e2.hash_shift ^ e2.window[e2.strstart + x - 1]) & e2.hash_mask, r2 = e2.prev[e2.strstart & e2.w_mask] = e2.head[e2.ins_h], e2.head[e2.ins_h] = e2.strstart), e2.prev_length = e2.match_length, e2.prev_match = e2.match_start, e2.match_length = x - 1, 0 !== r2 && e2.prev_length < e2.max_lazy_match && e2.strstart - r2 <= e2.w_size - z && (e2.match_length = L(e2, r2), e2.match_length <= 5 && (1 === e2.strategy || e2.match_length === x && 4096 < e2.strstart - e2.match_start) && (e2.match_length = x - 1)), e2.prev_length >= x && e2.match_length <= e2.prev_length) { 2174 for (i2 = e2.strstart + e2.lookahead - x, n2 = u._tr_tally(e2, e2.strstart - 1 - e2.prev_match, e2.prev_length - x), e2.lookahead -= e2.prev_length - 1, e2.prev_length -= 2; ++e2.strstart <= i2 && (e2.ins_h = (e2.ins_h << e2.hash_shift ^ e2.window[e2.strstart + x - 1]) & e2.hash_mask, r2 = e2.prev[e2.strstart & e2.w_mask] = e2.head[e2.ins_h], e2.head[e2.ins_h] = e2.strstart), 0 != --e2.prev_length; ) ; 2175 if (e2.match_available = 0, e2.match_length = x - 1, e2.strstart++, n2 && (N(e2, false), 0 === e2.strm.avail_out)) return A; 2176 } else if (e2.match_available) { 2177 if ((n2 = u._tr_tally(e2, 0, e2.window[e2.strstart - 1])) && N(e2, false), e2.strstart++, e2.lookahead--, 0 === e2.strm.avail_out) return A; 2178 } else e2.match_available = 1, e2.strstart++, e2.lookahead--; 2179 } 2180 return e2.match_available && (n2 = u._tr_tally(e2, 0, e2.window[e2.strstart - 1]), e2.match_available = 0), e2.insert = e2.strstart < x - 1 ? e2.strstart : x - 1, t2 === f ? (N(e2, true), 0 === e2.strm.avail_out ? O : B) : e2.last_lit && (N(e2, false), 0 === e2.strm.avail_out) ? A : I; 2181 } 2182 function M(e2, t2, r2, n2, i2) { 2183 this.good_length = e2, this.max_lazy = t2, this.nice_length = r2, this.max_chain = n2, this.func = i2; 2184 } 2185 function H() { 2186 this.strm = null, this.status = 0, this.pending_buf = null, this.pending_buf_size = 0, this.pending_out = 0, this.pending = 0, this.wrap = 0, this.gzhead = null, this.gzindex = 0, this.method = v, this.last_flush = -1, this.w_size = 0, this.w_bits = 0, this.w_mask = 0, this.window = null, this.window_size = 0, this.prev = null, this.head = null, this.ins_h = 0, this.hash_size = 0, this.hash_bits = 0, this.hash_mask = 0, this.hash_shift = 0, this.block_start = 0, this.match_length = 0, this.prev_match = 0, this.match_available = 0, this.strstart = 0, this.match_start = 0, this.lookahead = 0, this.prev_length = 0, this.max_chain_length = 0, this.max_lazy_match = 0, this.level = 0, this.strategy = 0, this.good_match = 0, this.nice_match = 0, this.dyn_ltree = new c.Buf16(2 * w), this.dyn_dtree = new c.Buf16(2 * (2 * a + 1)), this.bl_tree = new c.Buf16(2 * (2 * o + 1)), D(this.dyn_ltree), D(this.dyn_dtree), D(this.bl_tree), this.l_desc = null, this.d_desc = null, this.bl_desc = null, this.bl_count = new c.Buf16(k + 1), this.heap = new c.Buf16(2 * s + 1), D(this.heap), this.heap_len = 0, this.heap_max = 0, this.depth = new c.Buf16(2 * s + 1), D(this.depth), this.l_buf = 0, this.lit_bufsize = 0, this.last_lit = 0, this.d_buf = 0, this.opt_len = 0, this.static_len = 0, this.matches = 0, this.insert = 0, this.bi_buf = 0, this.bi_valid = 0; 2187 } 2188 function G(e2) { 2189 var t2; 2190 return e2 && e2.state ? (e2.total_in = e2.total_out = 0, e2.data_type = i, (t2 = e2.state).pending = 0, t2.pending_out = 0, t2.wrap < 0 && (t2.wrap = -t2.wrap), t2.status = t2.wrap ? C : E, e2.adler = 2 === t2.wrap ? 0 : 1, t2.last_flush = l, u._tr_init(t2), m) : R(e2, _); 2191 } 2192 function K(e2) { 2193 var t2 = G(e2); 2194 return t2 === m && function(e3) { 2195 e3.window_size = 2 * e3.w_size, D(e3.head), e3.max_lazy_match = h[e3.level].max_lazy, e3.good_match = h[e3.level].good_length, e3.nice_match = h[e3.level].nice_length, e3.max_chain_length = h[e3.level].max_chain, e3.strstart = 0, e3.block_start = 0, e3.lookahead = 0, e3.insert = 0, e3.match_length = e3.prev_length = x - 1, e3.match_available = 0, e3.ins_h = 0; 2196 }(e2.state), t2; 2197 } 2198 function Y(e2, t2, r2, n2, i2, s2) { 2199 if (!e2) return _; 2200 var a2 = 1; 2201 if (t2 === g && (t2 = 6), n2 < 0 ? (a2 = 0, n2 = -n2) : 15 < n2 && (a2 = 2, n2 -= 16), i2 < 1 || y < i2 || r2 !== v || n2 < 8 || 15 < n2 || t2 < 0 || 9 < t2 || s2 < 0 || b < s2) return R(e2, _); 2202 8 === n2 && (n2 = 9); 2203 var o2 = new H(); 2204 return (e2.state = o2).strm = e2, o2.wrap = a2, o2.gzhead = null, o2.w_bits = n2, o2.w_size = 1 << o2.w_bits, o2.w_mask = o2.w_size - 1, o2.hash_bits = i2 + 7, o2.hash_size = 1 << o2.hash_bits, o2.hash_mask = o2.hash_size - 1, o2.hash_shift = ~~((o2.hash_bits + x - 1) / x), o2.window = new c.Buf8(2 * o2.w_size), o2.head = new c.Buf16(o2.hash_size), o2.prev = new c.Buf16(o2.w_size), o2.lit_bufsize = 1 << i2 + 6, o2.pending_buf_size = 4 * o2.lit_bufsize, o2.pending_buf = new c.Buf8(o2.pending_buf_size), o2.d_buf = 1 * o2.lit_bufsize, o2.l_buf = 3 * o2.lit_bufsize, o2.level = t2, o2.strategy = s2, o2.method = r2, K(e2); 2205 } 2206 h = [new M(0, 0, 0, 0, function(e2, t2) { 2207 var r2 = 65535; 2208 for (r2 > e2.pending_buf_size - 5 && (r2 = e2.pending_buf_size - 5); ; ) { 2209 if (e2.lookahead <= 1) { 2210 if (j(e2), 0 === e2.lookahead && t2 === l) return A; 2211 if (0 === e2.lookahead) break; 2212 } 2213 e2.strstart += e2.lookahead, e2.lookahead = 0; 2214 var n2 = e2.block_start + r2; 2215 if ((0 === e2.strstart || e2.strstart >= n2) && (e2.lookahead = e2.strstart - n2, e2.strstart = n2, N(e2, false), 0 === e2.strm.avail_out)) return A; 2216 if (e2.strstart - e2.block_start >= e2.w_size - z && (N(e2, false), 0 === e2.strm.avail_out)) return A; 2217 } 2218 return e2.insert = 0, t2 === f ? (N(e2, true), 0 === e2.strm.avail_out ? O : B) : (e2.strstart > e2.block_start && (N(e2, false), e2.strm.avail_out), A); 2219 }), new M(4, 4, 8, 4, Z), new M(4, 5, 16, 8, Z), new M(4, 6, 32, 32, Z), new M(4, 4, 16, 16, W), new M(8, 16, 32, 32, W), new M(8, 16, 128, 128, W), new M(8, 32, 128, 256, W), new M(32, 128, 258, 1024, W), new M(32, 258, 258, 4096, W)], r.deflateInit = function(e2, t2) { 2220 return Y(e2, t2, v, 15, 8, 0); 2221 }, r.deflateInit2 = Y, r.deflateReset = K, r.deflateResetKeep = G, r.deflateSetHeader = function(e2, t2) { 2222 return e2 && e2.state ? 2 !== e2.state.wrap ? _ : (e2.state.gzhead = t2, m) : _; 2223 }, r.deflate = function(e2, t2) { 2224 var r2, n2, i2, s2; 2225 if (!e2 || !e2.state || 5 < t2 || t2 < 0) return e2 ? R(e2, _) : _; 2226 if (n2 = e2.state, !e2.output || !e2.input && 0 !== e2.avail_in || 666 === n2.status && t2 !== f) return R(e2, 0 === e2.avail_out ? -5 : _); 2227 if (n2.strm = e2, r2 = n2.last_flush, n2.last_flush = t2, n2.status === C) if (2 === n2.wrap) e2.adler = 0, U(n2, 31), U(n2, 139), U(n2, 8), n2.gzhead ? (U(n2, (n2.gzhead.text ? 1 : 0) + (n2.gzhead.hcrc ? 2 : 0) + (n2.gzhead.extra ? 4 : 0) + (n2.gzhead.name ? 8 : 0) + (n2.gzhead.comment ? 16 : 0)), U(n2, 255 & n2.gzhead.time), U(n2, n2.gzhead.time >> 8 & 255), U(n2, n2.gzhead.time >> 16 & 255), U(n2, n2.gzhead.time >> 24 & 255), U(n2, 9 === n2.level ? 2 : 2 <= n2.strategy || n2.level < 2 ? 4 : 0), U(n2, 255 & n2.gzhead.os), n2.gzhead.extra && n2.gzhead.extra.length && (U(n2, 255 & n2.gzhead.extra.length), U(n2, n2.gzhead.extra.length >> 8 & 255)), n2.gzhead.hcrc && (e2.adler = p(e2.adler, n2.pending_buf, n2.pending, 0)), n2.gzindex = 0, n2.status = 69) : (U(n2, 0), U(n2, 0), U(n2, 0), U(n2, 0), U(n2, 0), U(n2, 9 === n2.level ? 2 : 2 <= n2.strategy || n2.level < 2 ? 4 : 0), U(n2, 3), n2.status = E); 2228 else { 2229 var a2 = v + (n2.w_bits - 8 << 4) << 8; 2230 a2 |= (2 <= n2.strategy || n2.level < 2 ? 0 : n2.level < 6 ? 1 : 6 === n2.level ? 2 : 3) << 6, 0 !== n2.strstart && (a2 |= 32), a2 += 31 - a2 % 31, n2.status = E, P(n2, a2), 0 !== n2.strstart && (P(n2, e2.adler >>> 16), P(n2, 65535 & e2.adler)), e2.adler = 1; 2231 } 2232 if (69 === n2.status) if (n2.gzhead.extra) { 2233 for (i2 = n2.pending; n2.gzindex < (65535 & n2.gzhead.extra.length) && (n2.pending !== n2.pending_buf_size || (n2.gzhead.hcrc && n2.pending > i2 && (e2.adler = p(e2.adler, n2.pending_buf, n2.pending - i2, i2)), F(e2), i2 = n2.pending, n2.pending !== n2.pending_buf_size)); ) U(n2, 255 & n2.gzhead.extra[n2.gzindex]), n2.gzindex++; 2234 n2.gzhead.hcrc && n2.pending > i2 && (e2.adler = p(e2.adler, n2.pending_buf, n2.pending - i2, i2)), n2.gzindex === n2.gzhead.extra.length && (n2.gzindex = 0, n2.status = 73); 2235 } else n2.status = 73; 2236 if (73 === n2.status) if (n2.gzhead.name) { 2237 i2 = n2.pending; 2238 do { 2239 if (n2.pending === n2.pending_buf_size && (n2.gzhead.hcrc && n2.pending > i2 && (e2.adler = p(e2.adler, n2.pending_buf, n2.pending - i2, i2)), F(e2), i2 = n2.pending, n2.pending === n2.pending_buf_size)) { 2240 s2 = 1; 2241 break; 2242 } 2243 s2 = n2.gzindex < n2.gzhead.name.length ? 255 & n2.gzhead.name.charCodeAt(n2.gzindex++) : 0, U(n2, s2); 2244 } while (0 !== s2); 2245 n2.gzhead.hcrc && n2.pending > i2 && (e2.adler = p(e2.adler, n2.pending_buf, n2.pending - i2, i2)), 0 === s2 && (n2.gzindex = 0, n2.status = 91); 2246 } else n2.status = 91; 2247 if (91 === n2.status) if (n2.gzhead.comment) { 2248 i2 = n2.pending; 2249 do { 2250 if (n2.pending === n2.pending_buf_size && (n2.gzhead.hcrc && n2.pending > i2 && (e2.adler = p(e2.adler, n2.pending_buf, n2.pending - i2, i2)), F(e2), i2 = n2.pending, n2.pending === n2.pending_buf_size)) { 2251 s2 = 1; 2252 break; 2253 } 2254 s2 = n2.gzindex < n2.gzhead.comment.length ? 255 & n2.gzhead.comment.charCodeAt(n2.gzindex++) : 0, U(n2, s2); 2255 } while (0 !== s2); 2256 n2.gzhead.hcrc && n2.pending > i2 && (e2.adler = p(e2.adler, n2.pending_buf, n2.pending - i2, i2)), 0 === s2 && (n2.status = 103); 2257 } else n2.status = 103; 2258 if (103 === n2.status && (n2.gzhead.hcrc ? (n2.pending + 2 > n2.pending_buf_size && F(e2), n2.pending + 2 <= n2.pending_buf_size && (U(n2, 255 & e2.adler), U(n2, e2.adler >> 8 & 255), e2.adler = 0, n2.status = E)) : n2.status = E), 0 !== n2.pending) { 2259 if (F(e2), 0 === e2.avail_out) return n2.last_flush = -1, m; 2260 } else if (0 === e2.avail_in && T(t2) <= T(r2) && t2 !== f) return R(e2, -5); 2261 if (666 === n2.status && 0 !== e2.avail_in) return R(e2, -5); 2262 if (0 !== e2.avail_in || 0 !== n2.lookahead || t2 !== l && 666 !== n2.status) { 2263 var o2 = 2 === n2.strategy ? function(e3, t3) { 2264 for (var r3; ; ) { 2265 if (0 === e3.lookahead && (j(e3), 0 === e3.lookahead)) { 2266 if (t3 === l) return A; 2267 break; 2268 } 2269 if (e3.match_length = 0, r3 = u._tr_tally(e3, 0, e3.window[e3.strstart]), e3.lookahead--, e3.strstart++, r3 && (N(e3, false), 0 === e3.strm.avail_out)) return A; 2270 } 2271 return e3.insert = 0, t3 === f ? (N(e3, true), 0 === e3.strm.avail_out ? O : B) : e3.last_lit && (N(e3, false), 0 === e3.strm.avail_out) ? A : I; 2272 }(n2, t2) : 3 === n2.strategy ? function(e3, t3) { 2273 for (var r3, n3, i3, s3, a3 = e3.window; ; ) { 2274 if (e3.lookahead <= S) { 2275 if (j(e3), e3.lookahead <= S && t3 === l) return A; 2276 if (0 === e3.lookahead) break; 2277 } 2278 if (e3.match_length = 0, e3.lookahead >= x && 0 < e3.strstart && (n3 = a3[i3 = e3.strstart - 1]) === a3[++i3] && n3 === a3[++i3] && n3 === a3[++i3]) { 2279 s3 = e3.strstart + S; 2280 do { 2281 } while (n3 === a3[++i3] && n3 === a3[++i3] && n3 === a3[++i3] && n3 === a3[++i3] && n3 === a3[++i3] && n3 === a3[++i3] && n3 === a3[++i3] && n3 === a3[++i3] && i3 < s3); 2282 e3.match_length = S - (s3 - i3), e3.match_length > e3.lookahead && (e3.match_length = e3.lookahead); 2283 } 2284 if (e3.match_length >= x ? (r3 = u._tr_tally(e3, 1, e3.match_length - x), e3.lookahead -= e3.match_length, e3.strstart += e3.match_length, e3.match_length = 0) : (r3 = u._tr_tally(e3, 0, e3.window[e3.strstart]), e3.lookahead--, e3.strstart++), r3 && (N(e3, false), 0 === e3.strm.avail_out)) return A; 2285 } 2286 return e3.insert = 0, t3 === f ? (N(e3, true), 0 === e3.strm.avail_out ? O : B) : e3.last_lit && (N(e3, false), 0 === e3.strm.avail_out) ? A : I; 2287 }(n2, t2) : h[n2.level].func(n2, t2); 2288 if (o2 !== O && o2 !== B || (n2.status = 666), o2 === A || o2 === O) return 0 === e2.avail_out && (n2.last_flush = -1), m; 2289 if (o2 === I && (1 === t2 ? u._tr_align(n2) : 5 !== t2 && (u._tr_stored_block(n2, 0, 0, false), 3 === t2 && (D(n2.head), 0 === n2.lookahead && (n2.strstart = 0, n2.block_start = 0, n2.insert = 0))), F(e2), 0 === e2.avail_out)) return n2.last_flush = -1, m; 2290 } 2291 return t2 !== f ? m : n2.wrap <= 0 ? 1 : (2 === n2.wrap ? (U(n2, 255 & e2.adler), U(n2, e2.adler >> 8 & 255), U(n2, e2.adler >> 16 & 255), U(n2, e2.adler >> 24 & 255), U(n2, 255 & e2.total_in), U(n2, e2.total_in >> 8 & 255), U(n2, e2.total_in >> 16 & 255), U(n2, e2.total_in >> 24 & 255)) : (P(n2, e2.adler >>> 16), P(n2, 65535 & e2.adler)), F(e2), 0 < n2.wrap && (n2.wrap = -n2.wrap), 0 !== n2.pending ? m : 1); 2292 }, r.deflateEnd = function(e2) { 2293 var t2; 2294 return e2 && e2.state ? (t2 = e2.state.status) !== C && 69 !== t2 && 73 !== t2 && 91 !== t2 && 103 !== t2 && t2 !== E && 666 !== t2 ? R(e2, _) : (e2.state = null, t2 === E ? R(e2, -3) : m) : _; 2295 }, r.deflateSetDictionary = function(e2, t2) { 2296 var r2, n2, i2, s2, a2, o2, h2, u2, l2 = t2.length; 2297 if (!e2 || !e2.state) return _; 2298 if (2 === (s2 = (r2 = e2.state).wrap) || 1 === s2 && r2.status !== C || r2.lookahead) return _; 2299 for (1 === s2 && (e2.adler = d(e2.adler, t2, l2, 0)), r2.wrap = 0, l2 >= r2.w_size && (0 === s2 && (D(r2.head), r2.strstart = 0, r2.block_start = 0, r2.insert = 0), u2 = new c.Buf8(r2.w_size), c.arraySet(u2, t2, l2 - r2.w_size, r2.w_size, 0), t2 = u2, l2 = r2.w_size), a2 = e2.avail_in, o2 = e2.next_in, h2 = e2.input, e2.avail_in = l2, e2.next_in = 0, e2.input = t2, j(r2); r2.lookahead >= x; ) { 2300 for (n2 = r2.strstart, i2 = r2.lookahead - (x - 1); r2.ins_h = (r2.ins_h << r2.hash_shift ^ r2.window[n2 + x - 1]) & r2.hash_mask, r2.prev[n2 & r2.w_mask] = r2.head[r2.ins_h], r2.head[r2.ins_h] = n2, n2++, --i2; ) ; 2301 r2.strstart = n2, r2.lookahead = x - 1, j(r2); 2302 } 2303 return r2.strstart += r2.lookahead, r2.block_start = r2.strstart, r2.insert = r2.lookahead, r2.lookahead = 0, r2.match_length = r2.prev_length = x - 1, r2.match_available = 0, e2.next_in = o2, e2.input = h2, e2.avail_in = a2, r2.wrap = s2, m; 2304 }, r.deflateInfo = "pako deflate (from Nodeca project)"; 2305 }, { 2306 "../utils/common": 41, 2307 "./adler32": 43, 2308 "./crc32": 45, 2309 "./messages": 51, 2310 "./trees": 52 2311 }], 2312 47: [function(e, t, r) { 2313 "use strict"; 2314 t.exports = function() { 2315 this.text = 0, this.time = 0, this.xflags = 0, this.os = 0, this.extra = null, this.extra_len = 0, this.name = "", this.comment = "", this.hcrc = 0, this.done = false; 2316 }; 2317 }, {}], 2318 48: [function(e, t, r) { 2319 "use strict"; 2320 t.exports = function(e2, t2) { 2321 var r2, n, i, s, a, o, h, u, l, f, c, d, p, m, _, g, b, v, y, w, k, x, S, z, C; 2322 r2 = e2.state, n = e2.next_in, z = e2.input, i = n + (e2.avail_in - 5), s = e2.next_out, C = e2.output, a = s - (t2 - e2.avail_out), o = s + (e2.avail_out - 257), h = r2.dmax, u = r2.wsize, l = r2.whave, f = r2.wnext, c = r2.window, d = r2.hold, p = r2.bits, m = r2.lencode, _ = r2.distcode, g = (1 << r2.lenbits) - 1, b = (1 << r2.distbits) - 1; 2323 e: do { 2324 p < 15 && (d += z[n++] << p, p += 8, d += z[n++] << p, p += 8), v = m[d & g]; 2325 t: for (; ; ) { 2326 if (d >>>= y = v >>> 24, p -= y, 0 === (y = v >>> 16 & 255)) C[s++] = 65535 & v; 2327 else { 2328 if (!(16 & y)) { 2329 if (0 == (64 & y)) { 2330 v = m[(65535 & v) + (d & (1 << y) - 1)]; 2331 continue t; 2332 } 2333 if (32 & y) { 2334 r2.mode = 12; 2335 break e; 2336 } 2337 e2.msg = "invalid literal/length code", r2.mode = 30; 2338 break e; 2339 } 2340 w = 65535 & v, (y &= 15) && (p < y && (d += z[n++] << p, p += 8), w += d & (1 << y) - 1, d >>>= y, p -= y), p < 15 && (d += z[n++] << p, p += 8, d += z[n++] << p, p += 8), v = _[d & b]; 2341 r: for (; ; ) { 2342 if (d >>>= y = v >>> 24, p -= y, !(16 & (y = v >>> 16 & 255))) { 2343 if (0 == (64 & y)) { 2344 v = _[(65535 & v) + (d & (1 << y) - 1)]; 2345 continue r; 2346 } 2347 e2.msg = "invalid distance code", r2.mode = 30; 2348 break e; 2349 } 2350 if (k = 65535 & v, p < (y &= 15) && (d += z[n++] << p, (p += 8) < y && (d += z[n++] << p, p += 8)), h < (k += d & (1 << y) - 1)) { 2351 e2.msg = "invalid distance too far back", r2.mode = 30; 2352 break e; 2353 } 2354 if (d >>>= y, p -= y, (y = s - a) < k) { 2355 if (l < (y = k - y) && r2.sane) { 2356 e2.msg = "invalid distance too far back", r2.mode = 30; 2357 break e; 2358 } 2359 if (S = c, (x = 0) === f) { 2360 if (x += u - y, y < w) { 2361 for (w -= y; C[s++] = c[x++], --y; ) ; 2362 x = s - k, S = C; 2363 } 2364 } else if (f < y) { 2365 if (x += u + f - y, (y -= f) < w) { 2366 for (w -= y; C[s++] = c[x++], --y; ) ; 2367 if (x = 0, f < w) { 2368 for (w -= y = f; C[s++] = c[x++], --y; ) ; 2369 x = s - k, S = C; 2370 } 2371 } 2372 } else if (x += f - y, y < w) { 2373 for (w -= y; C[s++] = c[x++], --y; ) ; 2374 x = s - k, S = C; 2375 } 2376 for (; 2 < w; ) C[s++] = S[x++], C[s++] = S[x++], C[s++] = S[x++], w -= 3; 2377 w && (C[s++] = S[x++], 1 < w && (C[s++] = S[x++])); 2378 } else { 2379 for (x = s - k; C[s++] = C[x++], C[s++] = C[x++], C[s++] = C[x++], 2 < (w -= 3); ) ; 2380 w && (C[s++] = C[x++], 1 < w && (C[s++] = C[x++])); 2381 } 2382 break; 2383 } 2384 } 2385 break; 2386 } 2387 } while (n < i && s < o); 2388 n -= w = p >> 3, d &= (1 << (p -= w << 3)) - 1, e2.next_in = n, e2.next_out = s, e2.avail_in = n < i ? i - n + 5 : 5 - (n - i), e2.avail_out = s < o ? o - s + 257 : 257 - (s - o), r2.hold = d, r2.bits = p; 2389 }; 2390 }, {}], 2391 49: [function(e, t, r) { 2392 "use strict"; 2393 var I = e("../utils/common"), O = e("./adler32"), B = e("./crc32"), R = e("./inffast"), T = e("./inftrees"), D = 1, F = 2, N = 0, U = -2, P = 1, n = 852, i = 592; 2394 function L(e2) { 2395 return (e2 >>> 24 & 255) + (e2 >>> 8 & 65280) + ((65280 & e2) << 8) + ((255 & e2) << 24); 2396 } 2397 function s() { 2398 this.mode = 0, this.last = false, this.wrap = 0, this.havedict = false, this.flags = 0, this.dmax = 0, this.check = 0, this.total = 0, this.head = null, this.wbits = 0, this.wsize = 0, this.whave = 0, this.wnext = 0, this.window = null, this.hold = 0, this.bits = 0, this.length = 0, this.offset = 0, this.extra = 0, this.lencode = null, this.distcode = null, this.lenbits = 0, this.distbits = 0, this.ncode = 0, this.nlen = 0, this.ndist = 0, this.have = 0, this.next = null, this.lens = new I.Buf16(320), this.work = new I.Buf16(288), this.lendyn = null, this.distdyn = null, this.sane = 0, this.back = 0, this.was = 0; 2399 } 2400 function a(e2) { 2401 var t2; 2402 return e2 && e2.state ? (t2 = e2.state, e2.total_in = e2.total_out = t2.total = 0, e2.msg = "", t2.wrap && (e2.adler = 1 & t2.wrap), t2.mode = P, t2.last = 0, t2.havedict = 0, t2.dmax = 32768, t2.head = null, t2.hold = 0, t2.bits = 0, t2.lencode = t2.lendyn = new I.Buf32(n), t2.distcode = t2.distdyn = new I.Buf32(i), t2.sane = 1, t2.back = -1, N) : U; 2403 } 2404 function o(e2) { 2405 var t2; 2406 return e2 && e2.state ? ((t2 = e2.state).wsize = 0, t2.whave = 0, t2.wnext = 0, a(e2)) : U; 2407 } 2408 function h(e2, t2) { 2409 var r2, n2; 2410 return e2 && e2.state ? (n2 = e2.state, t2 < 0 ? (r2 = 0, t2 = -t2) : (r2 = 1 + (t2 >> 4), t2 < 48 && (t2 &= 15)), t2 && (t2 < 8 || 15 < t2) ? U : (null !== n2.window && n2.wbits !== t2 && (n2.window = null), n2.wrap = r2, n2.wbits = t2, o(e2))) : U; 2411 } 2412 function u(e2, t2) { 2413 var r2, n2; 2414 return e2 ? (n2 = new s(), (e2.state = n2).window = null, (r2 = h(e2, t2)) !== N && (e2.state = null), r2) : U; 2415 } 2416 var l, f, c = true; 2417 function j(e2) { 2418 if (c) { 2419 var t2; 2420 for (l = new I.Buf32(512), f = new I.Buf32(32), t2 = 0; t2 < 144; ) e2.lens[t2++] = 8; 2421 for (; t2 < 256; ) e2.lens[t2++] = 9; 2422 for (; t2 < 280; ) e2.lens[t2++] = 7; 2423 for (; t2 < 288; ) e2.lens[t2++] = 8; 2424 for (T(D, e2.lens, 0, 288, l, 0, e2.work, { 2425 bits: 9 2426 }), t2 = 0; t2 < 32; ) e2.lens[t2++] = 5; 2427 T(F, e2.lens, 0, 32, f, 0, e2.work, { 2428 bits: 5 2429 }), c = false; 2430 } 2431 e2.lencode = l, e2.lenbits = 9, e2.distcode = f, e2.distbits = 5; 2432 } 2433 function Z(e2, t2, r2, n2) { 2434 var i2, s2 = e2.state; 2435 return null === s2.window && (s2.wsize = 1 << s2.wbits, s2.wnext = 0, s2.whave = 0, s2.window = new I.Buf8(s2.wsize)), n2 >= s2.wsize ? (I.arraySet(s2.window, t2, r2 - s2.wsize, s2.wsize, 0), s2.wnext = 0, s2.whave = s2.wsize) : (n2 < (i2 = s2.wsize - s2.wnext) && (i2 = n2), I.arraySet(s2.window, t2, r2 - n2, i2, s2.wnext), (n2 -= i2) ? (I.arraySet(s2.window, t2, r2 - n2, n2, 0), s2.wnext = n2, s2.whave = s2.wsize) : (s2.wnext += i2, s2.wnext === s2.wsize && (s2.wnext = 0), s2.whave < s2.wsize && (s2.whave += i2))), 0; 2436 } 2437 r.inflateReset = o, r.inflateReset2 = h, r.inflateResetKeep = a, r.inflateInit = function(e2) { 2438 return u(e2, 15); 2439 }, r.inflateInit2 = u, r.inflate = function(e2, t2) { 2440 var r2, n2, i2, s2, a2, o2, h2, u2, l2, f2, c2, d, p, m, _, g, b, v, y, w, k, x, S, z, C = 0, E = new I.Buf8(4), A = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]; 2441 if (!e2 || !e2.state || !e2.output || !e2.input && 0 !== e2.avail_in) return U; 2442 12 === (r2 = e2.state).mode && (r2.mode = 13), a2 = e2.next_out, i2 = e2.output, h2 = e2.avail_out, s2 = e2.next_in, n2 = e2.input, o2 = e2.avail_in, u2 = r2.hold, l2 = r2.bits, f2 = o2, c2 = h2, x = N; 2443 e: for (; ; ) switch (r2.mode) { 2444 case P: 2445 if (0 === r2.wrap) { 2446 r2.mode = 13; 2447 break; 2448 } 2449 for (; l2 < 16; ) { 2450 if (0 === o2) break e; 2451 o2--, u2 += n2[s2++] << l2, l2 += 8; 2452 } 2453 if (2 & r2.wrap && 35615 === u2) { 2454 E[r2.check = 0] = 255 & u2, E[1] = u2 >>> 8 & 255, r2.check = B(r2.check, E, 2, 0), l2 = u2 = 0, r2.mode = 2; 2455 break; 2456 } 2457 if (r2.flags = 0, r2.head && (r2.head.done = false), !(1 & r2.wrap) || (((255 & u2) << 8) + (u2 >> 8)) % 31) { 2458 e2.msg = "incorrect header check", r2.mode = 30; 2459 break; 2460 } 2461 if (8 != (15 & u2)) { 2462 e2.msg = "unknown compression method", r2.mode = 30; 2463 break; 2464 } 2465 if (l2 -= 4, k = 8 + (15 & (u2 >>>= 4)), 0 === r2.wbits) r2.wbits = k; 2466 else if (k > r2.wbits) { 2467 e2.msg = "invalid window size", r2.mode = 30; 2468 break; 2469 } 2470 r2.dmax = 1 << k, e2.adler = r2.check = 1, r2.mode = 512 & u2 ? 10 : 12, l2 = u2 = 0; 2471 break; 2472 case 2: 2473 for (; l2 < 16; ) { 2474 if (0 === o2) break e; 2475 o2--, u2 += n2[s2++] << l2, l2 += 8; 2476 } 2477 if (r2.flags = u2, 8 != (255 & r2.flags)) { 2478 e2.msg = "unknown compression method", r2.mode = 30; 2479 break; 2480 } 2481 if (57344 & r2.flags) { 2482 e2.msg = "unknown header flags set", r2.mode = 30; 2483 break; 2484 } 2485 r2.head && (r2.head.text = u2 >> 8 & 1), 512 & r2.flags && (E[0] = 255 & u2, E[1] = u2 >>> 8 & 255, r2.check = B(r2.check, E, 2, 0)), l2 = u2 = 0, r2.mode = 3; 2486 case 3: 2487 for (; l2 < 32; ) { 2488 if (0 === o2) break e; 2489 o2--, u2 += n2[s2++] << l2, l2 += 8; 2490 } 2491 r2.head && (r2.head.time = u2), 512 & r2.flags && (E[0] = 255 & u2, E[1] = u2 >>> 8 & 255, E[2] = u2 >>> 16 & 255, E[3] = u2 >>> 24 & 255, r2.check = B(r2.check, E, 4, 0)), l2 = u2 = 0, r2.mode = 4; 2492 case 4: 2493 for (; l2 < 16; ) { 2494 if (0 === o2) break e; 2495 o2--, u2 += n2[s2++] << l2, l2 += 8; 2496 } 2497 r2.head && (r2.head.xflags = 255 & u2, r2.head.os = u2 >> 8), 512 & r2.flags && (E[0] = 255 & u2, E[1] = u2 >>> 8 & 255, r2.check = B(r2.check, E, 2, 0)), l2 = u2 = 0, r2.mode = 5; 2498 case 5: 2499 if (1024 & r2.flags) { 2500 for (; l2 < 16; ) { 2501 if (0 === o2) break e; 2502 o2--, u2 += n2[s2++] << l2, l2 += 8; 2503 } 2504 r2.length = u2, r2.head && (r2.head.extra_len = u2), 512 & r2.flags && (E[0] = 255 & u2, E[1] = u2 >>> 8 & 255, r2.check = B(r2.check, E, 2, 0)), l2 = u2 = 0; 2505 } else r2.head && (r2.head.extra = null); 2506 r2.mode = 6; 2507 case 6: 2508 if (1024 & r2.flags && (o2 < (d = r2.length) && (d = o2), d && (r2.head && (k = r2.head.extra_len - r2.length, r2.head.extra || (r2.head.extra = new Array(r2.head.extra_len)), I.arraySet(r2.head.extra, n2, s2, d, k)), 512 & r2.flags && (r2.check = B(r2.check, n2, d, s2)), o2 -= d, s2 += d, r2.length -= d), r2.length)) break e; 2509 r2.length = 0, r2.mode = 7; 2510 case 7: 2511 if (2048 & r2.flags) { 2512 if (0 === o2) break e; 2513 for (d = 0; k = n2[s2 + d++], r2.head && k && r2.length < 65536 && (r2.head.name += String.fromCharCode(k)), k && d < o2; ) ; 2514 if (512 & r2.flags && (r2.check = B(r2.check, n2, d, s2)), o2 -= d, s2 += d, k) break e; 2515 } else r2.head && (r2.head.name = null); 2516 r2.length = 0, r2.mode = 8; 2517 case 8: 2518 if (4096 & r2.flags) { 2519 if (0 === o2) break e; 2520 for (d = 0; k = n2[s2 + d++], r2.head && k && r2.length < 65536 && (r2.head.comment += String.fromCharCode(k)), k && d < o2; ) ; 2521 if (512 & r2.flags && (r2.check = B(r2.check, n2, d, s2)), o2 -= d, s2 += d, k) break e; 2522 } else r2.head && (r2.head.comment = null); 2523 r2.mode = 9; 2524 case 9: 2525 if (512 & r2.flags) { 2526 for (; l2 < 16; ) { 2527 if (0 === o2) break e; 2528 o2--, u2 += n2[s2++] << l2, l2 += 8; 2529 } 2530 if (u2 !== (65535 & r2.check)) { 2531 e2.msg = "header crc mismatch", r2.mode = 30; 2532 break; 2533 } 2534 l2 = u2 = 0; 2535 } 2536 r2.head && (r2.head.hcrc = r2.flags >> 9 & 1, r2.head.done = true), e2.adler = r2.check = 0, r2.mode = 12; 2537 break; 2538 case 10: 2539 for (; l2 < 32; ) { 2540 if (0 === o2) break e; 2541 o2--, u2 += n2[s2++] << l2, l2 += 8; 2542 } 2543 e2.adler = r2.check = L(u2), l2 = u2 = 0, r2.mode = 11; 2544 case 11: 2545 if (0 === r2.havedict) return e2.next_out = a2, e2.avail_out = h2, e2.next_in = s2, e2.avail_in = o2, r2.hold = u2, r2.bits = l2, 2; 2546 e2.adler = r2.check = 1, r2.mode = 12; 2547 case 12: 2548 if (5 === t2 || 6 === t2) break e; 2549 case 13: 2550 if (r2.last) { 2551 u2 >>>= 7 & l2, l2 -= 7 & l2, r2.mode = 27; 2552 break; 2553 } 2554 for (; l2 < 3; ) { 2555 if (0 === o2) break e; 2556 o2--, u2 += n2[s2++] << l2, l2 += 8; 2557 } 2558 switch (r2.last = 1 & u2, l2 -= 1, 3 & (u2 >>>= 1)) { 2559 case 0: 2560 r2.mode = 14; 2561 break; 2562 case 1: 2563 if (j(r2), r2.mode = 20, 6 !== t2) break; 2564 u2 >>>= 2, l2 -= 2; 2565 break e; 2566 case 2: 2567 r2.mode = 17; 2568 break; 2569 case 3: 2570 e2.msg = "invalid block type", r2.mode = 30; 2571 } 2572 u2 >>>= 2, l2 -= 2; 2573 break; 2574 case 14: 2575 for (u2 >>>= 7 & l2, l2 -= 7 & l2; l2 < 32; ) { 2576 if (0 === o2) break e; 2577 o2--, u2 += n2[s2++] << l2, l2 += 8; 2578 } 2579 if ((65535 & u2) != (u2 >>> 16 ^ 65535)) { 2580 e2.msg = "invalid stored block lengths", r2.mode = 30; 2581 break; 2582 } 2583 if (r2.length = 65535 & u2, l2 = u2 = 0, r2.mode = 15, 6 === t2) break e; 2584 case 15: 2585 r2.mode = 16; 2586 case 16: 2587 if (d = r2.length) { 2588 if (o2 < d && (d = o2), h2 < d && (d = h2), 0 === d) break e; 2589 I.arraySet(i2, n2, s2, d, a2), o2 -= d, s2 += d, h2 -= d, a2 += d, r2.length -= d; 2590 break; 2591 } 2592 r2.mode = 12; 2593 break; 2594 case 17: 2595 for (; l2 < 14; ) { 2596 if (0 === o2) break e; 2597 o2--, u2 += n2[s2++] << l2, l2 += 8; 2598 } 2599 if (r2.nlen = 257 + (31 & u2), u2 >>>= 5, l2 -= 5, r2.ndist = 1 + (31 & u2), u2 >>>= 5, l2 -= 5, r2.ncode = 4 + (15 & u2), u2 >>>= 4, l2 -= 4, 286 < r2.nlen || 30 < r2.ndist) { 2600 e2.msg = "too many length or distance symbols", r2.mode = 30; 2601 break; 2602 } 2603 r2.have = 0, r2.mode = 18; 2604 case 18: 2605 for (; r2.have < r2.ncode; ) { 2606 for (; l2 < 3; ) { 2607 if (0 === o2) break e; 2608 o2--, u2 += n2[s2++] << l2, l2 += 8; 2609 } 2610 r2.lens[A[r2.have++]] = 7 & u2, u2 >>>= 3, l2 -= 3; 2611 } 2612 for (; r2.have < 19; ) r2.lens[A[r2.have++]] = 0; 2613 if (r2.lencode = r2.lendyn, r2.lenbits = 7, S = { 2614 bits: r2.lenbits 2615 }, x = T(0, r2.lens, 0, 19, r2.lencode, 0, r2.work, S), r2.lenbits = S.bits, x) { 2616 e2.msg = "invalid code lengths set", r2.mode = 30; 2617 break; 2618 } 2619 r2.have = 0, r2.mode = 19; 2620 case 19: 2621 for (; r2.have < r2.nlen + r2.ndist; ) { 2622 for (; g = (C = r2.lencode[u2 & (1 << r2.lenbits) - 1]) >>> 16 & 255, b = 65535 & C, !((_ = C >>> 24) <= l2); ) { 2623 if (0 === o2) break e; 2624 o2--, u2 += n2[s2++] << l2, l2 += 8; 2625 } 2626 if (b < 16) u2 >>>= _, l2 -= _, r2.lens[r2.have++] = b; 2627 else { 2628 if (16 === b) { 2629 for (z = _ + 2; l2 < z; ) { 2630 if (0 === o2) break e; 2631 o2--, u2 += n2[s2++] << l2, l2 += 8; 2632 } 2633 if (u2 >>>= _, l2 -= _, 0 === r2.have) { 2634 e2.msg = "invalid bit length repeat", r2.mode = 30; 2635 break; 2636 } 2637 k = r2.lens[r2.have - 1], d = 3 + (3 & u2), u2 >>>= 2, l2 -= 2; 2638 } else if (17 === b) { 2639 for (z = _ + 3; l2 < z; ) { 2640 if (0 === o2) break e; 2641 o2--, u2 += n2[s2++] << l2, l2 += 8; 2642 } 2643 l2 -= _, k = 0, d = 3 + (7 & (u2 >>>= _)), u2 >>>= 3, l2 -= 3; 2644 } else { 2645 for (z = _ + 7; l2 < z; ) { 2646 if (0 === o2) break e; 2647 o2--, u2 += n2[s2++] << l2, l2 += 8; 2648 } 2649 l2 -= _, k = 0, d = 11 + (127 & (u2 >>>= _)), u2 >>>= 7, l2 -= 7; 2650 } 2651 if (r2.have + d > r2.nlen + r2.ndist) { 2652 e2.msg = "invalid bit length repeat", r2.mode = 30; 2653 break; 2654 } 2655 for (; d--; ) r2.lens[r2.have++] = k; 2656 } 2657 } 2658 if (30 === r2.mode) break; 2659 if (0 === r2.lens[256]) { 2660 e2.msg = "invalid code -- missing end-of-block", r2.mode = 30; 2661 break; 2662 } 2663 if (r2.lenbits = 9, S = { 2664 bits: r2.lenbits 2665 }, x = T(D, r2.lens, 0, r2.nlen, r2.lencode, 0, r2.work, S), r2.lenbits = S.bits, x) { 2666 e2.msg = "invalid literal/lengths set", r2.mode = 30; 2667 break; 2668 } 2669 if (r2.distbits = 6, r2.distcode = r2.distdyn, S = { 2670 bits: r2.distbits 2671 }, x = T(F, r2.lens, r2.nlen, r2.ndist, r2.distcode, 0, r2.work, S), r2.distbits = S.bits, x) { 2672 e2.msg = "invalid distances set", r2.mode = 30; 2673 break; 2674 } 2675 if (r2.mode = 20, 6 === t2) break e; 2676 case 20: 2677 r2.mode = 21; 2678 case 21: 2679 if (6 <= o2 && 258 <= h2) { 2680 e2.next_out = a2, e2.avail_out = h2, e2.next_in = s2, e2.avail_in = o2, r2.hold = u2, r2.bits = l2, R(e2, c2), a2 = e2.next_out, i2 = e2.output, h2 = e2.avail_out, s2 = e2.next_in, n2 = e2.input, o2 = e2.avail_in, u2 = r2.hold, l2 = r2.bits, 12 === r2.mode && (r2.back = -1); 2681 break; 2682 } 2683 for (r2.back = 0; g = (C = r2.lencode[u2 & (1 << r2.lenbits) - 1]) >>> 16 & 255, b = 65535 & C, !((_ = C >>> 24) <= l2); ) { 2684 if (0 === o2) break e; 2685 o2--, u2 += n2[s2++] << l2, l2 += 8; 2686 } 2687 if (g && 0 == (240 & g)) { 2688 for (v = _, y = g, w = b; g = (C = r2.lencode[w + ((u2 & (1 << v + y) - 1) >> v)]) >>> 16 & 255, b = 65535 & C, !(v + (_ = C >>> 24) <= l2); ) { 2689 if (0 === o2) break e; 2690 o2--, u2 += n2[s2++] << l2, l2 += 8; 2691 } 2692 u2 >>>= v, l2 -= v, r2.back += v; 2693 } 2694 if (u2 >>>= _, l2 -= _, r2.back += _, r2.length = b, 0 === g) { 2695 r2.mode = 26; 2696 break; 2697 } 2698 if (32 & g) { 2699 r2.back = -1, r2.mode = 12; 2700 break; 2701 } 2702 if (64 & g) { 2703 e2.msg = "invalid literal/length code", r2.mode = 30; 2704 break; 2705 } 2706 r2.extra = 15 & g, r2.mode = 22; 2707 case 22: 2708 if (r2.extra) { 2709 for (z = r2.extra; l2 < z; ) { 2710 if (0 === o2) break e; 2711 o2--, u2 += n2[s2++] << l2, l2 += 8; 2712 } 2713 r2.length += u2 & (1 << r2.extra) - 1, u2 >>>= r2.extra, l2 -= r2.extra, r2.back += r2.extra; 2714 } 2715 r2.was = r2.length, r2.mode = 23; 2716 case 23: 2717 for (; g = (C = r2.distcode[u2 & (1 << r2.distbits) - 1]) >>> 16 & 255, b = 65535 & C, !((_ = C >>> 24) <= l2); ) { 2718 if (0 === o2) break e; 2719 o2--, u2 += n2[s2++] << l2, l2 += 8; 2720 } 2721 if (0 == (240 & g)) { 2722 for (v = _, y = g, w = b; g = (C = r2.distcode[w + ((u2 & (1 << v + y) - 1) >> v)]) >>> 16 & 255, b = 65535 & C, !(v + (_ = C >>> 24) <= l2); ) { 2723 if (0 === o2) break e; 2724 o2--, u2 += n2[s2++] << l2, l2 += 8; 2725 } 2726 u2 >>>= v, l2 -= v, r2.back += v; 2727 } 2728 if (u2 >>>= _, l2 -= _, r2.back += _, 64 & g) { 2729 e2.msg = "invalid distance code", r2.mode = 30; 2730 break; 2731 } 2732 r2.offset = b, r2.extra = 15 & g, r2.mode = 24; 2733 case 24: 2734 if (r2.extra) { 2735 for (z = r2.extra; l2 < z; ) { 2736 if (0 === o2) break e; 2737 o2--, u2 += n2[s2++] << l2, l2 += 8; 2738 } 2739 r2.offset += u2 & (1 << r2.extra) - 1, u2 >>>= r2.extra, l2 -= r2.extra, r2.back += r2.extra; 2740 } 2741 if (r2.offset > r2.dmax) { 2742 e2.msg = "invalid distance too far back", r2.mode = 30; 2743 break; 2744 } 2745 r2.mode = 25; 2746 case 25: 2747 if (0 === h2) break e; 2748 if (d = c2 - h2, r2.offset > d) { 2749 if ((d = r2.offset - d) > r2.whave && r2.sane) { 2750 e2.msg = "invalid distance too far back", r2.mode = 30; 2751 break; 2752 } 2753 p = d > r2.wnext ? (d -= r2.wnext, r2.wsize - d) : r2.wnext - d, d > r2.length && (d = r2.length), m = r2.window; 2754 } else m = i2, p = a2 - r2.offset, d = r2.length; 2755 for (h2 < d && (d = h2), h2 -= d, r2.length -= d; i2[a2++] = m[p++], --d; ) ; 2756 0 === r2.length && (r2.mode = 21); 2757 break; 2758 case 26: 2759 if (0 === h2) break e; 2760 i2[a2++] = r2.length, h2--, r2.mode = 21; 2761 break; 2762 case 27: 2763 if (r2.wrap) { 2764 for (; l2 < 32; ) { 2765 if (0 === o2) break e; 2766 o2--, u2 |= n2[s2++] << l2, l2 += 8; 2767 } 2768 if (c2 -= h2, e2.total_out += c2, r2.total += c2, c2 && (e2.adler = r2.check = r2.flags ? B(r2.check, i2, c2, a2 - c2) : O(r2.check, i2, c2, a2 - c2)), c2 = h2, (r2.flags ? u2 : L(u2)) !== r2.check) { 2769 e2.msg = "incorrect data check", r2.mode = 30; 2770 break; 2771 } 2772 l2 = u2 = 0; 2773 } 2774 r2.mode = 28; 2775 case 28: 2776 if (r2.wrap && r2.flags) { 2777 for (; l2 < 32; ) { 2778 if (0 === o2) break e; 2779 o2--, u2 += n2[s2++] << l2, l2 += 8; 2780 } 2781 if (u2 !== (4294967295 & r2.total)) { 2782 e2.msg = "incorrect length check", r2.mode = 30; 2783 break; 2784 } 2785 l2 = u2 = 0; 2786 } 2787 r2.mode = 29; 2788 case 29: 2789 x = 1; 2790 break e; 2791 case 30: 2792 x = -3; 2793 break e; 2794 case 31: 2795 return -4; 2796 case 32: 2797 default: 2798 return U; 2799 } 2800 return e2.next_out = a2, e2.avail_out = h2, e2.next_in = s2, e2.avail_in = o2, r2.hold = u2, r2.bits = l2, (r2.wsize || c2 !== e2.avail_out && r2.mode < 30 && (r2.mode < 27 || 4 !== t2)) && Z(e2, e2.output, e2.next_out, c2 - e2.avail_out) ? (r2.mode = 31, -4) : (f2 -= e2.avail_in, c2 -= e2.avail_out, e2.total_in += f2, e2.total_out += c2, r2.total += c2, r2.wrap && c2 && (e2.adler = r2.check = r2.flags ? B(r2.check, i2, c2, e2.next_out - c2) : O(r2.check, i2, c2, e2.next_out - c2)), e2.data_type = r2.bits + (r2.last ? 64 : 0) + (12 === r2.mode ? 128 : 0) + (20 === r2.mode || 15 === r2.mode ? 256 : 0), (0 == f2 && 0 === c2 || 4 === t2) && x === N && (x = -5), x); 2801 }, r.inflateEnd = function(e2) { 2802 if (!e2 || !e2.state) return U; 2803 var t2 = e2.state; 2804 return t2.window && (t2.window = null), e2.state = null, N; 2805 }, r.inflateGetHeader = function(e2, t2) { 2806 var r2; 2807 return e2 && e2.state ? 0 == (2 & (r2 = e2.state).wrap) ? U : ((r2.head = t2).done = false, N) : U; 2808 }, r.inflateSetDictionary = function(e2, t2) { 2809 var r2, n2 = t2.length; 2810 return e2 && e2.state ? 0 !== (r2 = e2.state).wrap && 11 !== r2.mode ? U : 11 === r2.mode && O(1, t2, n2, 0) !== r2.check ? -3 : Z(e2, t2, n2, n2) ? (r2.mode = 31, -4) : (r2.havedict = 1, N) : U; 2811 }, r.inflateInfo = "pako inflate (from Nodeca project)"; 2812 }, { 2813 "../utils/common": 41, 2814 "./adler32": 43, 2815 "./crc32": 45, 2816 "./inffast": 48, 2817 "./inftrees": 50 2818 }], 2819 50: [function(e, t, r) { 2820 "use strict"; 2821 var D = e("../utils/common"), F = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0], N = [16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78], U = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0], P = [16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64]; 2822 t.exports = function(e2, t2, r2, n, i, s, a, o) { 2823 var h, u, l, f, c, d, p, m, _, g = o.bits, b = 0, v = 0, y = 0, w = 0, k = 0, x = 0, S = 0, z = 0, C = 0, E = 0, A = null, I = 0, O = new D.Buf16(16), B = new D.Buf16(16), R = null, T = 0; 2824 for (b = 0; b <= 15; b++) O[b] = 0; 2825 for (v = 0; v < n; v++) O[t2[r2 + v]]++; 2826 for (k = g, w = 15; 1 <= w && 0 === O[w]; w--) ; 2827 if (w < k && (k = w), 0 === w) return i[s++] = 20971520, i[s++] = 20971520, o.bits = 1, 0; 2828 for (y = 1; y < w && 0 === O[y]; y++) ; 2829 for (k < y && (k = y), b = z = 1; b <= 15; b++) if (z <<= 1, (z -= O[b]) < 0) return -1; 2830 if (0 < z && (0 === e2 || 1 !== w)) return -1; 2831 for (B[1] = 0, b = 1; b < 15; b++) B[b + 1] = B[b] + O[b]; 2832 for (v = 0; v < n; v++) 0 !== t2[r2 + v] && (a[B[t2[r2 + v]]++] = v); 2833 if (d = 0 === e2 ? (A = R = a, 19) : 1 === e2 ? (A = F, I -= 257, R = N, T -= 257, 256) : (A = U, R = P, -1), b = y, c = s, S = v = E = 0, l = -1, f = (C = 1 << (x = k)) - 1, 1 === e2 && 852 < C || 2 === e2 && 592 < C) return 1; 2834 for (; ; ) { 2835 for (p = b - S, _ = a[v] < d ? (m = 0, a[v]) : a[v] > d ? (m = R[T + a[v]], A[I + a[v]]) : (m = 96, 0), h = 1 << b - S, y = u = 1 << x; i[c + (E >> S) + (u -= h)] = p << 24 | m << 16 | _ | 0, 0 !== u; ) ; 2836 for (h = 1 << b - 1; E & h; ) h >>= 1; 2837 if (0 !== h ? (E &= h - 1, E += h) : E = 0, v++, 0 == --O[b]) { 2838 if (b === w) break; 2839 b = t2[r2 + a[v]]; 2840 } 2841 if (k < b && (E & f) !== l) { 2842 for (0 === S && (S = k), c += y, z = 1 << (x = b - S); x + S < w && !((z -= O[x + S]) <= 0); ) x++, z <<= 1; 2843 if (C += 1 << x, 1 === e2 && 852 < C || 2 === e2 && 592 < C) return 1; 2844 i[l = E & f] = k << 24 | x << 16 | c - s | 0; 2845 } 2846 } 2847 return 0 !== E && (i[c + E] = b - S << 24 | 64 << 16 | 0), o.bits = k, 0; 2848 }; 2849 }, { 2850 "../utils/common": 41 2851 }], 2852 51: [function(e, t, r) { 2853 "use strict"; 2854 t.exports = { 2855 2: "need dictionary", 2856 1: "stream end", 2857 0: "", 2858 "-1": "file error", 2859 "-2": "stream error", 2860 "-3": "data error", 2861 "-4": "insufficient memory", 2862 "-5": "buffer error", 2863 "-6": "incompatible version" 2864 }; 2865 }, {}], 2866 52: [function(e, t, r) { 2867 "use strict"; 2868 var i = e("../utils/common"), o = 0, h = 1; 2869 function n(e2) { 2870 for (var t2 = e2.length; 0 <= --t2; ) e2[t2] = 0; 2871 } 2872 var s = 0, a = 29, u = 256, l = u + 1 + a, f = 30, c = 19, _ = 2 * l + 1, g = 15, d = 16, p = 7, m = 256, b = 16, v = 17, y = 18, w = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0], k = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13], x = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7], S = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15], z = new Array(2 * (l + 2)); 2873 n(z); 2874 var C = new Array(2 * f); 2875 n(C); 2876 var E = new Array(512); 2877 n(E); 2878 var A = new Array(256); 2879 n(A); 2880 var I = new Array(a); 2881 n(I); 2882 var O, B, R, T = new Array(f); 2883 function D(e2, t2, r2, n2, i2) { 2884 this.static_tree = e2, this.extra_bits = t2, this.extra_base = r2, this.elems = n2, this.max_length = i2, this.has_stree = e2 && e2.length; 2885 } 2886 function F(e2, t2) { 2887 this.dyn_tree = e2, this.max_code = 0, this.stat_desc = t2; 2888 } 2889 function N(e2) { 2890 return e2 < 256 ? E[e2] : E[256 + (e2 >>> 7)]; 2891 } 2892 function U(e2, t2) { 2893 e2.pending_buf[e2.pending++] = 255 & t2, e2.pending_buf[e2.pending++] = t2 >>> 8 & 255; 2894 } 2895 function P(e2, t2, r2) { 2896 e2.bi_valid > d - r2 ? (e2.bi_buf |= t2 << e2.bi_valid & 65535, U(e2, e2.bi_buf), e2.bi_buf = t2 >> d - e2.bi_valid, e2.bi_valid += r2 - d) : (e2.bi_buf |= t2 << e2.bi_valid & 65535, e2.bi_valid += r2); 2897 } 2898 function L(e2, t2, r2) { 2899 P(e2, r2[2 * t2], r2[2 * t2 + 1]); 2900 } 2901 function j(e2, t2) { 2902 for (var r2 = 0; r2 |= 1 & e2, e2 >>>= 1, r2 <<= 1, 0 < --t2; ) ; 2903 return r2 >>> 1; 2904 } 2905 function Z(e2, t2, r2) { 2906 var n2, i2, s2 = new Array(g + 1), a2 = 0; 2907 for (n2 = 1; n2 <= g; n2++) s2[n2] = a2 = a2 + r2[n2 - 1] << 1; 2908 for (i2 = 0; i2 <= t2; i2++) { 2909 var o2 = e2[2 * i2 + 1]; 2910 0 !== o2 && (e2[2 * i2] = j(s2[o2]++, o2)); 2911 } 2912 } 2913 function W(e2) { 2914 var t2; 2915 for (t2 = 0; t2 < l; t2++) e2.dyn_ltree[2 * t2] = 0; 2916 for (t2 = 0; t2 < f; t2++) e2.dyn_dtree[2 * t2] = 0; 2917 for (t2 = 0; t2 < c; t2++) e2.bl_tree[2 * t2] = 0; 2918 e2.dyn_ltree[2 * m] = 1, e2.opt_len = e2.static_len = 0, e2.last_lit = e2.matches = 0; 2919 } 2920 function M(e2) { 2921 8 < e2.bi_valid ? U(e2, e2.bi_buf) : 0 < e2.bi_valid && (e2.pending_buf[e2.pending++] = e2.bi_buf), e2.bi_buf = 0, e2.bi_valid = 0; 2922 } 2923 function H(e2, t2, r2, n2) { 2924 var i2 = 2 * t2, s2 = 2 * r2; 2925 return e2[i2] < e2[s2] || e2[i2] === e2[s2] && n2[t2] <= n2[r2]; 2926 } 2927 function G(e2, t2, r2) { 2928 for (var n2 = e2.heap[r2], i2 = r2 << 1; i2 <= e2.heap_len && (i2 < e2.heap_len && H(t2, e2.heap[i2 + 1], e2.heap[i2], e2.depth) && i2++, !H(t2, n2, e2.heap[i2], e2.depth)); ) e2.heap[r2] = e2.heap[i2], r2 = i2, i2 <<= 1; 2929 e2.heap[r2] = n2; 2930 } 2931 function K(e2, t2, r2) { 2932 var n2, i2, s2, a2, o2 = 0; 2933 if (0 !== e2.last_lit) for (; n2 = e2.pending_buf[e2.d_buf + 2 * o2] << 8 | e2.pending_buf[e2.d_buf + 2 * o2 + 1], i2 = e2.pending_buf[e2.l_buf + o2], o2++, 0 === n2 ? L(e2, i2, t2) : (L(e2, (s2 = A[i2]) + u + 1, t2), 0 !== (a2 = w[s2]) && P(e2, i2 -= I[s2], a2), L(e2, s2 = N(--n2), r2), 0 !== (a2 = k[s2]) && P(e2, n2 -= T[s2], a2)), o2 < e2.last_lit; ) ; 2934 L(e2, m, t2); 2935 } 2936 function Y(e2, t2) { 2937 var r2, n2, i2, s2 = t2.dyn_tree, a2 = t2.stat_desc.static_tree, o2 = t2.stat_desc.has_stree, h2 = t2.stat_desc.elems, u2 = -1; 2938 for (e2.heap_len = 0, e2.heap_max = _, r2 = 0; r2 < h2; r2++) 0 !== s2[2 * r2] ? (e2.heap[++e2.heap_len] = u2 = r2, e2.depth[r2] = 0) : s2[2 * r2 + 1] = 0; 2939 for (; e2.heap_len < 2; ) s2[2 * (i2 = e2.heap[++e2.heap_len] = u2 < 2 ? ++u2 : 0)] = 1, e2.depth[i2] = 0, e2.opt_len--, o2 && (e2.static_len -= a2[2 * i2 + 1]); 2940 for (t2.max_code = u2, r2 = e2.heap_len >> 1; 1 <= r2; r2--) G(e2, s2, r2); 2941 for (i2 = h2; r2 = e2.heap[1], e2.heap[1] = e2.heap[e2.heap_len--], G(e2, s2, 1), n2 = e2.heap[1], e2.heap[--e2.heap_max] = r2, e2.heap[--e2.heap_max] = n2, s2[2 * i2] = s2[2 * r2] + s2[2 * n2], e2.depth[i2] = (e2.depth[r2] >= e2.depth[n2] ? e2.depth[r2] : e2.depth[n2]) + 1, s2[2 * r2 + 1] = s2[2 * n2 + 1] = i2, e2.heap[1] = i2++, G(e2, s2, 1), 2 <= e2.heap_len; ) ; 2942 e2.heap[--e2.heap_max] = e2.heap[1], function(e3, t3) { 2943 var r3, n3, i3, s3, a3, o3, h3 = t3.dyn_tree, u3 = t3.max_code, l2 = t3.stat_desc.static_tree, f2 = t3.stat_desc.has_stree, c2 = t3.stat_desc.extra_bits, d2 = t3.stat_desc.extra_base, p2 = t3.stat_desc.max_length, m2 = 0; 2944 for (s3 = 0; s3 <= g; s3++) e3.bl_count[s3] = 0; 2945 for (h3[2 * e3.heap[e3.heap_max] + 1] = 0, r3 = e3.heap_max + 1; r3 < _; r3++) p2 < (s3 = h3[2 * h3[2 * (n3 = e3.heap[r3]) + 1] + 1] + 1) && (s3 = p2, m2++), h3[2 * n3 + 1] = s3, u3 < n3 || (e3.bl_count[s3]++, a3 = 0, d2 <= n3 && (a3 = c2[n3 - d2]), o3 = h3[2 * n3], e3.opt_len += o3 * (s3 + a3), f2 && (e3.static_len += o3 * (l2[2 * n3 + 1] + a3))); 2946 if (0 !== m2) { 2947 do { 2948 for (s3 = p2 - 1; 0 === e3.bl_count[s3]; ) s3--; 2949 e3.bl_count[s3]--, e3.bl_count[s3 + 1] += 2, e3.bl_count[p2]--, m2 -= 2; 2950 } while (0 < m2); 2951 for (s3 = p2; 0 !== s3; s3--) for (n3 = e3.bl_count[s3]; 0 !== n3; ) u3 < (i3 = e3.heap[--r3]) || (h3[2 * i3 + 1] !== s3 && (e3.opt_len += (s3 - h3[2 * i3 + 1]) * h3[2 * i3], h3[2 * i3 + 1] = s3), n3--); 2952 } 2953 }(e2, t2), Z(s2, u2, e2.bl_count); 2954 } 2955 function X(e2, t2, r2) { 2956 var n2, i2, s2 = -1, a2 = t2[1], o2 = 0, h2 = 7, u2 = 4; 2957 for (0 === a2 && (h2 = 138, u2 = 3), t2[2 * (r2 + 1) + 1] = 65535, n2 = 0; n2 <= r2; n2++) i2 = a2, a2 = t2[2 * (n2 + 1) + 1], ++o2 < h2 && i2 === a2 || (o2 < u2 ? e2.bl_tree[2 * i2] += o2 : 0 !== i2 ? (i2 !== s2 && e2.bl_tree[2 * i2]++, e2.bl_tree[2 * b]++) : o2 <= 10 ? e2.bl_tree[2 * v]++ : e2.bl_tree[2 * y]++, s2 = i2, u2 = (o2 = 0) === a2 ? (h2 = 138, 3) : i2 === a2 ? (h2 = 6, 3) : (h2 = 7, 4)); 2958 } 2959 function V(e2, t2, r2) { 2960 var n2, i2, s2 = -1, a2 = t2[1], o2 = 0, h2 = 7, u2 = 4; 2961 for (0 === a2 && (h2 = 138, u2 = 3), n2 = 0; n2 <= r2; n2++) if (i2 = a2, a2 = t2[2 * (n2 + 1) + 1], !(++o2 < h2 && i2 === a2)) { 2962 if (o2 < u2) for (; L(e2, i2, e2.bl_tree), 0 != --o2; ) ; 2963 else 0 !== i2 ? (i2 !== s2 && (L(e2, i2, e2.bl_tree), o2--), L(e2, b, e2.bl_tree), P(e2, o2 - 3, 2)) : o2 <= 10 ? (L(e2, v, e2.bl_tree), P(e2, o2 - 3, 3)) : (L(e2, y, e2.bl_tree), P(e2, o2 - 11, 7)); 2964 s2 = i2, u2 = (o2 = 0) === a2 ? (h2 = 138, 3) : i2 === a2 ? (h2 = 6, 3) : (h2 = 7, 4); 2965 } 2966 } 2967 n(T); 2968 var q = false; 2969 function J(e2, t2, r2, n2) { 2970 P(e2, (s << 1) + (n2 ? 1 : 0), 3), function(e3, t3, r3, n3) { 2971 M(e3), n3 && (U(e3, r3), U(e3, ~r3)), i.arraySet(e3.pending_buf, e3.window, t3, r3, e3.pending), e3.pending += r3; 2972 }(e2, t2, r2, true); 2973 } 2974 r._tr_init = function(e2) { 2975 q || (function() { 2976 var e3, t2, r2, n2, i2, s2 = new Array(g + 1); 2977 for (n2 = r2 = 0; n2 < a - 1; n2++) for (I[n2] = r2, e3 = 0; e3 < 1 << w[n2]; e3++) A[r2++] = n2; 2978 for (A[r2 - 1] = n2, n2 = i2 = 0; n2 < 16; n2++) for (T[n2] = i2, e3 = 0; e3 < 1 << k[n2]; e3++) E[i2++] = n2; 2979 for (i2 >>= 7; n2 < f; n2++) for (T[n2] = i2 << 7, e3 = 0; e3 < 1 << k[n2] - 7; e3++) E[256 + i2++] = n2; 2980 for (t2 = 0; t2 <= g; t2++) s2[t2] = 0; 2981 for (e3 = 0; e3 <= 143; ) z[2 * e3 + 1] = 8, e3++, s2[8]++; 2982 for (; e3 <= 255; ) z[2 * e3 + 1] = 9, e3++, s2[9]++; 2983 for (; e3 <= 279; ) z[2 * e3 + 1] = 7, e3++, s2[7]++; 2984 for (; e3 <= 287; ) z[2 * e3 + 1] = 8, e3++, s2[8]++; 2985 for (Z(z, l + 1, s2), e3 = 0; e3 < f; e3++) C[2 * e3 + 1] = 5, C[2 * e3] = j(e3, 5); 2986 O = new D(z, w, u + 1, l, g), B = new D(C, k, 0, f, g), R = new D(new Array(0), x, 0, c, p); 2987 }(), q = true), e2.l_desc = new F(e2.dyn_ltree, O), e2.d_desc = new F(e2.dyn_dtree, B), e2.bl_desc = new F(e2.bl_tree, R), e2.bi_buf = 0, e2.bi_valid = 0, W(e2); 2988 }, r._tr_stored_block = J, r._tr_flush_block = function(e2, t2, r2, n2) { 2989 var i2, s2, a2 = 0; 2990 0 < e2.level ? (2 === e2.strm.data_type && (e2.strm.data_type = function(e3) { 2991 var t3, r3 = 4093624447; 2992 for (t3 = 0; t3 <= 31; t3++, r3 >>>= 1) if (1 & r3 && 0 !== e3.dyn_ltree[2 * t3]) return o; 2993 if (0 !== e3.dyn_ltree[18] || 0 !== e3.dyn_ltree[20] || 0 !== e3.dyn_ltree[26]) return h; 2994 for (t3 = 32; t3 < u; t3++) if (0 !== e3.dyn_ltree[2 * t3]) return h; 2995 return o; 2996 }(e2)), Y(e2, e2.l_desc), Y(e2, e2.d_desc), a2 = function(e3) { 2997 var t3; 2998 for (X(e3, e3.dyn_ltree, e3.l_desc.max_code), X(e3, e3.dyn_dtree, e3.d_desc.max_code), Y(e3, e3.bl_desc), t3 = c - 1; 3 <= t3 && 0 === e3.bl_tree[2 * S[t3] + 1]; t3--) ; 2999 return e3.opt_len += 3 * (t3 + 1) + 5 + 5 + 4, t3; 3000 }(e2), i2 = e2.opt_len + 3 + 7 >>> 3, (s2 = e2.static_len + 3 + 7 >>> 3) <= i2 && (i2 = s2)) : i2 = s2 = r2 + 5, r2 + 4 <= i2 && -1 !== t2 ? J(e2, t2, r2, n2) : 4 === e2.strategy || s2 === i2 ? (P(e2, 2 + (n2 ? 1 : 0), 3), K(e2, z, C)) : (P(e2, 4 + (n2 ? 1 : 0), 3), function(e3, t3, r3, n3) { 3001 var i3; 3002 for (P(e3, t3 - 257, 5), P(e3, r3 - 1, 5), P(e3, n3 - 4, 4), i3 = 0; i3 < n3; i3++) P(e3, e3.bl_tree[2 * S[i3] + 1], 3); 3003 V(e3, e3.dyn_ltree, t3 - 1), V(e3, e3.dyn_dtree, r3 - 1); 3004 }(e2, e2.l_desc.max_code + 1, e2.d_desc.max_code + 1, a2 + 1), K(e2, e2.dyn_ltree, e2.dyn_dtree)), W(e2), n2 && M(e2); 3005 }, r._tr_tally = function(e2, t2, r2) { 3006 return e2.pending_buf[e2.d_buf + 2 * e2.last_lit] = t2 >>> 8 & 255, e2.pending_buf[e2.d_buf + 2 * e2.last_lit + 1] = 255 & t2, e2.pending_buf[e2.l_buf + e2.last_lit] = 255 & r2, e2.last_lit++, 0 === t2 ? e2.dyn_ltree[2 * r2]++ : (e2.matches++, t2--, e2.dyn_ltree[2 * (A[r2] + u + 1)]++, e2.dyn_dtree[2 * N(t2)]++), e2.last_lit === e2.lit_bufsize - 1; 3007 }, r._tr_align = function(e2) { 3008 P(e2, 2, 3), L(e2, m, z), function(e3) { 3009 16 === e3.bi_valid ? (U(e3, e3.bi_buf), e3.bi_buf = 0, e3.bi_valid = 0) : 8 <= e3.bi_valid && (e3.pending_buf[e3.pending++] = 255 & e3.bi_buf, e3.bi_buf >>= 8, e3.bi_valid -= 8); 3010 }(e2); 3011 }; 3012 }, { 3013 "../utils/common": 41 3014 }], 3015 53: [function(e, t, r) { 3016 "use strict"; 3017 t.exports = function() { 3018 this.input = null, this.next_in = 0, this.avail_in = 0, this.total_in = 0, this.output = null, this.next_out = 0, this.avail_out = 0, this.total_out = 0, this.msg = "", this.state = null, this.data_type = 2, this.adler = 0; 3019 }; 3020 }, {}], 3021 54: [function(e, t, r) { 3022 (function(e2) { 3023 !function(r2, n) { 3024 "use strict"; 3025 if (!r2.setImmediate) { 3026 var i, s, t2, a, o = 1, h = {}, u = false, l = r2.document, e3 = Object.getPrototypeOf && Object.getPrototypeOf(r2); 3027 e3 = e3 && e3.setTimeout ? e3 : r2, i = "[object process]" === {}.toString.call(r2.process) ? function(e4) { 3028 process.nextTick(function() { 3029 c(e4); 3030 }); 3031 } : function() { 3032 if (r2.postMessage && !r2.importScripts) { 3033 var e4 = true, t3 = r2.onmessage; 3034 return r2.onmessage = function() { 3035 e4 = false; 3036 }, r2.postMessage("", "*"), r2.onmessage = t3, e4; 3037 } 3038 }() ? (a = "setImmediate$" + Math.random() + "$", r2.addEventListener ? r2.addEventListener("message", d, false) : r2.attachEvent("onmessage", d), function(e4) { 3039 r2.postMessage(a + e4, "*"); 3040 }) : r2.MessageChannel ? ((t2 = new MessageChannel()).port1.onmessage = function(e4) { 3041 c(e4.data); 3042 }, function(e4) { 3043 t2.port2.postMessage(e4); 3044 }) : l && "onreadystatechange" in l.createElement("script") ? (s = l.documentElement, function(e4) { 3045 var t3 = l.createElement("script"); 3046 t3.onreadystatechange = function() { 3047 c(e4), t3.onreadystatechange = null, s.removeChild(t3), t3 = null; 3048 }, s.appendChild(t3); 3049 }) : function(e4) { 3050 setTimeout(c, 0, e4); 3051 }, e3.setImmediate = function(e4) { 3052 "function" != typeof e4 && (e4 = new Function("" + e4)); 3053 for (var t3 = new Array(arguments.length - 1), r3 = 0; r3 < t3.length; r3++) t3[r3] = arguments[r3 + 1]; 3054 var n2 = { 3055 callback: e4, 3056 args: t3 3057 }; 3058 return h[o] = n2, i(o), o++; 3059 }, e3.clearImmediate = f; 3060 } 3061 function f(e4) { 3062 delete h[e4]; 3063 } 3064 function c(e4) { 3065 if (u) setTimeout(c, 0, e4); 3066 else { 3067 var t3 = h[e4]; 3068 if (t3) { 3069 u = true; 3070 try { 3071 !function(e5) { 3072 var t4 = e5.callback, r3 = e5.args; 3073 switch (r3.length) { 3074 case 0: 3075 t4(); 3076 break; 3077 case 1: 3078 t4(r3[0]); 3079 break; 3080 case 2: 3081 t4(r3[0], r3[1]); 3082 break; 3083 case 3: 3084 t4(r3[0], r3[1], r3[2]); 3085 break; 3086 default: 3087 t4.apply(n, r3); 3088 } 3089 }(t3); 3090 } finally { 3091 f(e4), u = false; 3092 } 3093 } 3094 } 3095 } 3096 function d(e4) { 3097 e4.source === r2 && "string" == typeof e4.data && 0 === e4.data.indexOf(a) && c(+e4.data.slice(a.length)); 3098 } 3099 }("undefined" == typeof self ? void 0 === e2 ? this : e2 : self); 3100 }).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {}); 3101 }, {}] 3102 }, {}, [10])(10); 3103 }); 3104 } 3105}); 3106
3107// src/app/pages/admin/bug-reports/bug-reports.page.ts 3108var import_jszip = __toESM(require_jszip_min()); 3109var _c0 = (a0, a1) => ({ count: a0, total: a1 }); 3110var _forTrack0 = ($index, $item) => $item.value; 3111var _forTrack1 = ($index, $item) => $item.id; 3112function BugReportsPage_Conditional_20_For_8_Template(rf, ctx) { 3113 if (rf & 1) { 3114 \u0275\u0275elementStart(0, "ion-select-option", 21); 3115 \u0275\u0275text(1); 3116 \u0275\u0275pipe(2, "translate"); 3117 \u0275\u0275elementEnd(); 3118 } 3119 if (rf & 2) { 3120 const status_r3 = ctx.$implicit; 3121 \u0275\u0275property("value", status_r3.value); 3122 \u0275\u0275advance(); 3123 \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(2, 2, status_r3.labelKey), " "); 3124 } 3125} 3126function BugReportsPage_Conditional_20_For_15_Template(rf, ctx) { 3127 if (rf & 1) { 3128 \u0275\u0275elementStart(0, "ion-select-option", 21); 3129 \u0275\u0275text(1); 3130 \u0275\u0275pipe(2, "translate"); 3131 \u0275\u0275elementEnd(); 3132 } 3133 if (rf & 2) { 3134 const cat_r4 = ctx.$implicit; 3135 \u0275\u0275property("value", cat_r4.value); 3136 \u0275\u0275advance(); 3137 \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(2, 2, cat_r4.labelKey), " "); 3138 } 3139} 3140function BugReportsPage_Conditional_20_For_22_Template(rf, ctx) { 3141 if (rf & 1) { 3142 \u0275\u0275elementStart(0, "ion-select-option", 21); 3143 \u0275\u0275text(1); 3144 \u0275\u0275elementEnd(); 3145 } 3146 if (rf & 2) { 3147 const campus_r5 = ctx.$implicit; 3148 \u0275\u0275property("value", campus_r5.id); 3149 \u0275\u0275advance(); 3150 \u0275\u0275textInterpolate(campus_r5.name); 3151 } 3152} 3153function BugReportsPage_Conditional_20_Conditional_23_Template(rf, ctx) { 3154 if (rf & 1) { 3155 const _r6 = \u0275\u0275getCurrentView(); 3156 \u0275\u0275elementStart(0, "ion-button", 23); 3157 \u0275\u0275listener("click", function BugReportsPage_Conditional_20_Conditional_23_Template_ion_button_click_0_listener() { 3158 \u0275\u0275restoreView(_r6); 3159 const ctx_r1 = \u0275\u0275nextContext(2); 3160 return \u0275\u0275resetView(ctx_r1.clearFilters()); 3161 }); 3162 \u0275\u0275element(1, "ion-icon", 24); 3163 \u0275\u0275text(2); 3164 \u0275\u0275pipe(3, "translate"); 3165 \u0275\u0275elementEnd(); 3166 } 3167 if (rf & 2) { 3168 \u0275\u0275advance(2); 3169 \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(3, 1, "bugReportAdmin.clearFilters"), " "); 3170 } 3171} 3172function BugReportsPage_Conditional_20_Template(rf, ctx) { 3173 if (rf & 1) { 3174 const _r1 = \u0275\u0275getCurrentView(); 3175 \u0275\u0275elementStart(0, "div", 14)(1, "div", 18)(2, "ion-select", 19); 3176 \u0275\u0275pipe(3, "translate"); 3177 \u0275\u0275twoWayListener("ngModelChange", function BugReportsPage_Conditional_20_Template_ion_select_ngModelChange_2_listener($event) { 3178 \u0275\u0275restoreView(_r1); 3179 const ctx_r1 = \u0275\u0275nextContext(); 3180 \u0275\u0275twoWayBindingSet(ctx_r1.filterStatus, $event) || (ctx_r1.filterStatus = $event); 3181 return \u0275\u0275resetView($event); 3182 }); 3183 \u0275\u0275listener("ionChange", function BugReportsPage_Conditional_20_Template_ion_select_ionChange_2_listener() { 3184 \u0275\u0275restoreView(_r1); 3185 const ctx_r1 = \u0275\u0275nextContext(); 3186 return \u0275\u0275resetView(ctx_r1.onFilterChange()); 3187 }); 3188 \u0275\u0275elementStart(4, "ion-select-option", 20); 3189 \u0275\u0275text(5); 3190 \u0275\u0275pipe(6, "translate"); 3191 \u0275\u0275elementEnd(); 3192 \u0275\u0275repeaterCreate(7, BugReportsPage_Conditional_20_For_8_Template, 3, 4, "ion-select-option", 21, _forTrack0); 3193 \u0275\u0275elementEnd(); 3194 \u0275\u0275elementStart(9, "ion-select", 19); 3195 \u0275\u0275pipe(10, "translate"); 3196 \u0275\u0275twoWayListener("ngModelChange", function BugReportsPage_Conditional_20_Template_ion_select_ngModelChange_9_listener($event) { 3197 \u0275\u0275restoreView(_r1); 3198 const ctx_r1 = \u0275\u0275nextContext(); 3199 \u0275\u0275twoWayBindingSet(ctx_r1.filterCategory, $event) || (ctx_r1.filterCategory = $event); 3200 return \u0275\u0275resetView($event); 3201 }); 3202 \u0275\u0275listener("ionChange", function BugReportsPage_Conditional_20_Template_ion_select_ionChange_9_listener() { 3203 \u0275\u0275restoreView(_r1); 3204 const ctx_r1 = \u0275\u0275nextContext();
3205 return \u0275\u0275resetView(ctx_r1.onFilterChange()); 3206 }); 3207 \u0275\u0275elementStart(11, "ion-select-option", 20); 3208 \u0275\u0275text(12); 3209 \u0275\u0275pipe(13, "translate"); 3210 \u0275\u0275elementEnd(); 3211 \u0275\u0275repeaterCreate(14, BugReportsPage_Conditional_20_For_15_Template, 3, 4, "ion-select-option", 21, _forTrack0); 3212 \u0275\u0275elementEnd(); 3213 \u0275\u0275elementStart(16, "ion-select", 19); 3214 \u0275\u0275pipe(17, "translate"); 3215 \u0275\u0275twoWayListener("ngModelChange", function BugReportsPage_Conditional_20_Template_ion_select_ngModelChange_16_listener($event) { 3216 \u0275\u0275restoreView(_r1); 3217 const ctx_r1 = \u0275\u0275nextContext(); 3218 \u0275\u0275twoWayBindingSet(ctx_r1.selectedCampusId, $event) || (ctx_r1.selectedCampusId = $event); 3219 return \u0275\u0275resetView($event); 3220 }); 3221 \u0275\u0275listener("ionChange", function BugReportsPage_Conditional_20_Template_ion_select_ionChange_16_listener() { 3222 \u0275\u0275restoreView(_r1); 3223 const ctx_r1 = \u0275\u0275nextContext(); 3224 return \u0275\u0275resetView(ctx_r1.onFilterChange()); 3225 }); 3226 \u0275\u0275elementStart(18, "ion-select-option", 20); 3227 \u0275\u0275text(19); 3228 \u0275\u0275pipe(20, "translate"); 3229 \u0275\u0275elementEnd(); 3230 \u0275\u0275repeaterCreate(21, BugReportsPage_Conditional_20_For_22_Template, 2, 2, "ion-select-option", 21, _forTrack1); 3231 \u0275\u0275elementEnd(); 3232 \u0275\u0275template(23, BugReportsPage_Conditional_20_Conditional_23_Template, 4, 3, "ion-button", 22); 3233 \u0275\u0275elementEnd()(); 3234 } 3235 if (rf & 2) { 3236 const ctx_r1 = \u0275\u0275nextContext(); 3237 \u0275\u0275advance(2); 3238 \u0275\u0275twoWayProperty("ngModel", ctx_r1.filterStatus); 3239 \u0275\u0275property("placeholder", \u0275\u0275pipeBind1(3, 10, "bugReportAdmin.filterStatus")); 3240 \u0275\u0275advance(3); 3241 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(6, 12, "bugReportAdmin.allStatuses")); 3242 \u0275\u0275advance(2); 3243 \u0275\u0275repeater(ctx_r1.statuses); 3244 \u0275\u0275advance(2); 3245 \u0275\u0275twoWayProperty("ngModel", ctx_r1.filterCategory); 3246 \u0275\u0275property("placeholder", \u0275\u0275pipeBind1(10, 14, "bugReportAdmin.filterCategory")); 3247 \u0275\u0275advance(3); 3248 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(13, 16, "bugReportAdmin.allCategories")); 3249 \u0275\u0275advance(2); 3250 \u0275\u0275repeater(ctx_r1.categories); 3251 \u0275\u0275advance(2); 3252 \u0275\u0275twoWayProperty("ngModel", ctx_r1.selectedCampusId); 3253 \u0275\u0275property("placeholder", \u0275\u0275pipeBind1(17, 18, "admin.users.campusFilter")); 3254 \u0275\u0275advance(3); 3255 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(20, 20, "admin.users.allCampuses")); 3256 \u0275\u0275advance(2); 3257 \u0275\u0275repeater(ctx_r1.accessibleCampuses); 3258 \u0275\u0275advance(2); 3259 \u0275\u0275conditional(ctx_r1.hasActiveFilters() ? 23 : -1); 3260 } 3261} 3262function BugReportsPage_Conditional_21_Template(rf, ctx) { 3263 if (rf & 1) { 3264 \u0275\u0275elementStart(0, "div", 15); 3265 \u0275\u0275element(1, "ion-spinner"); 3266 \u0275\u0275elementStart(2, "p"); 3267 \u0275\u0275text(3); 3268 \u0275\u0275pipe(4, "translate"); 3269 \u0275\u0275elementEnd()(); 3270 } 3271 if (rf & 2) { 3272 \u0275\u0275advance(3); 3273 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(4, 1, "bugReportAdmin.loading")); 3274 } 3275} 3276function BugReportsPage_Conditional_22_Template(rf, ctx) { 3277 if (rf & 1) { 3278 const _r7 = \u0275\u0275getCurrentView(); 3279 \u0275\u0275elementStart(0, "div", 16)(1, "div", 25); 3280 \u0275\u0275element(2, "ion-icon", 26); 3281 \u0275\u0275elementEnd(); 3282 \u0275\u0275elementStart(3, "h3"); 3283 \u0275\u0275text(4, "Unable to load reports"); 3284 \u0275\u0275elementEnd(); 3285 \u0275\u0275elementStart(5, "p"); 3286 \u0275\u0275text(6); 3287 \u0275\u0275elementEnd(); 3288 \u0275\u0275elementStart(7, "ion-button", 27); 3289 \u0275\u0275listener("click", function BugReportsPage_Conditional_22_Template_ion_button_click_7_listener() { 3290 \u0275\u0275restoreView(_r7); 3291 const ctx_r1 = \u0275\u0275nextContext();
3292 return \u0275\u0275resetView(ctx_r1.loadReports()); 3293 }); 3294 \u0275\u0275element(8, "ion-icon", 28); 3295 \u0275\u0275text(9); 3296 \u0275\u0275pipe(10, "translate"); 3297 \u0275\u0275elementEnd()(); 3298 } 3299 if (rf & 2) { 3300 const ctx_r1 = \u0275\u0275nextContext(); 3301 \u0275\u0275advance(6); 3302 \u0275\u0275textInterpolate(ctx_r1.error); 3303 \u0275\u0275advance(3); 3304 \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(10, 2, "common.retry"), " "); 3305 } 3306} 3307function BugReportsPage_Conditional_23_Conditional_9_Template(rf, ctx) { 3308 if (rf & 1) { 3309 const _r8 = \u0275\u0275getCurrentView(); 3310 \u0275\u0275elementStart(0, "ion-button", 27); 3311 \u0275\u0275listener("click", function BugReportsPage_Conditional_23_Conditional_9_Template_ion_button_click_0_listener() { 3312 \u0275\u0275restoreView(_r8); 3313 const ctx_r1 = \u0275\u0275nextContext(2); 3314 return \u0275\u0275resetView(ctx_r1.clearFilters()); 3315 }); 3316 \u0275\u0275element(1, "ion-icon", 24); 3317 \u0275\u0275text(2); 3318 \u0275\u0275pipe(3, "translate"); 3319 \u0275\u0275elementEnd(); 3320 } 3321 if (rf & 2) { 3322 \u0275\u0275advance(2); 3323 \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(3, 1, "bugReportAdmin.clearFilters"), " "); 3324 } 3325} 3326function BugReportsPage_Conditional_23_Template(rf, ctx) { 3327 if (rf & 1) { 3328 \u0275\u0275elementStart(0, "div", 17)(1, "div", 29)(2, "div", 30); 3329 \u0275\u0275element(3, "ion-icon", 5); 3330 \u0275\u0275elementEnd(); 3331 \u0275\u0275elementStart(4, "h3"); 3332 \u0275\u0275text(5); 3333 \u0275\u0275pipe(6, "translate"); 3334 \u0275\u0275elementEnd(); 3335 \u0275\u0275elementStart(7, "p"); 3336 \u0275\u0275text(8, "No bug reports have been submitted yet."); 3337 \u0275\u0275elementEnd(); 3338 \u0275\u0275template(9, BugReportsPage_Conditional_23_Conditional_9_Template, 4, 3, "ion-button"); 3339 \u0275\u0275elementEnd()(); 3340 } 3341 if (rf & 2) { 3342 const ctx_r1 = \u0275\u0275nextContext(); 3343 \u0275\u0275advance(5); 3344 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(6, 2, "bugReportAdmin.noReports")); 3345 \u0275\u0275advance(4); 3346 \u0275\u0275conditional(ctx_r1.hasActiveFilters() ? 9 : -1); 3347 } 3348} 3349function BugReportsPage_Conditional_24_For_2_Conditional_19_Template(rf, ctx) { 3350 if (rf & 1) { 3351 \u0275\u0275elementStart(0, "span", 46); 3352 \u0275\u0275element(1, "ion-icon", 51); 3353 \u0275\u0275text(2); 3354 \u0275\u0275elementEnd(); 3355 } 3356 if (rf & 2) { 3357 const report_r10 = \u0275\u0275nextContext().$implicit; 3358 \u0275\u0275advance(2); 3359 \u0275\u0275textInterpolate1(" ", report_r10.campusName, " "); 3360 } 3361} 3362function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_1_Template(rf, ctx) { 3363 if (rf & 1) { 3364 \u0275\u0275elementStart(0, "div", 52)(1, "h4"); 3365 \u0275\u0275element(2, "ion-icon", 68); 3366 \u0275\u0275text(3); 3367 \u0275\u0275pipe(4, "translate"); 3368 \u0275\u0275elementEnd(); 3369 \u0275\u0275element(5, "img", 69); 3370 \u0275\u0275elementEnd(); 3371 } 3372 if (rf & 2) { 3373 \u0275\u0275advance(3); 3374 \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(4, 2, "bugReportAdmin.screenshot"), " "); 3375 \u0275\u0275advance(2); 3376 \u0275\u0275property("src", ctx, \u0275\u0275sanitizeUrl); 3377 } 3378} 3379function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_2_Template(rf, ctx) { 3380 if (rf & 1) { 3381 const _r12 = \u0275\u0275getCurrentView(); 3382 \u0275\u0275elementStart(0, "div", 53)(1, "h4"); 3383 \u0275\u0275element(2, "ion-icon", 70); 3384 \u0275\u0275text(3); 3385 \u0275\u0275pipe(4, "translate"); 3386 \u0275\u0275elementEnd(); 3387 \u0275\u0275elementStart(5, "ion-button", 62); 3388 \u0275\u0275listener("click", function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_2_Template_ion_button_click_5_listener() { 3389 \u0275\u0275restoreView(_r12); 3390 const report_r10 = \u0275\u0275nextContext(2).$implicit; 3391 const ctx_r1 = \u0275\u0275nextContext(2); 3392 return \u0275\u0275resetView(ctx_r1.downloadRecording(report_r10)); 3393 }); 3394 \u0275\u0275element(6, "ion-icon", 71); 3395 \u0275\u0275text(7); 3396 \u0275\u0275pipe(8, "translate"); 3397 \u0275\u0275elementEnd()(); 3398 } 3399 if (rf & 2) { 3400 \u0275\u0275advance(3); 3401 \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(4, 2, "bugReportAdmin.recording"), " "); 3402 \u0275\u0275advance(4); 3403 \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(8, 4, "bugReportAdmin.downloadRecording"), " "); 3404 } 3405} 3406function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_5_Conditional_7_Conditional_8_Template(rf, ctx) { 3407 if (rf & 1) { 3408 \u0275\u0275elementStart(0, "div", 56)(1, "span", 57); 3409 \u0275\u0275text(2); 3410 \u0275\u0275pipe(3, "translate"); 3411 \u0275\u0275elementEnd(); 3412 \u0275\u0275elementStart(4, "span", 58); 3413 \u0275\u0275text(5); 3414 \u0275\u0275elementEnd()(); 3415 } 3416 if (rf & 2) { 3417 const techData_r14 = \u0275\u0275nextContext(3); 3418 \u0275\u0275advance(2); 3419 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 2, "bugReportAdmin.tech.target")); 3420 \u0275\u0275advance(3); 3421 \u0275\u0275textInterpolate(techData_r14.navigation.targetName); 3422 } 3423} 3424function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_5_Conditional_7_Conditional_9_Template(rf, ctx) { 3425 if (rf & 1) { 3426 \u0275\u0275elementStart(0, "div", 56)(1, "span", 57); 3427 \u0275\u0275text(2); 3428 \u0275\u0275pipe(3, "translate"); 3429 \u0275\u0275elementEnd(); 3430 \u0275\u0275elementStart(4, "span", 58); 3431 \u0275\u0275text(5); 3432 \u0275\u0275elementEnd()(); 3433 } 3434 if (rf & 2) { 3435 const techData_r14 = \u0275\u0275nextContext(3); 3436 \u0275\u0275advance(2); 3437 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 2, "bugReportAdmin.tech.direction")); 3438 \u0275\u0275advance(3); 3439 \u0275\u0275textInterpolate(techData_r14.navigation.currentDirection); 3440 } 3441} 3442function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_5_Conditional_7_Conditional_10_Template(rf, ctx) { 3443 if (rf & 1) { 3444 \u0275\u0275elementStart(0, "div", 56)(1, "span", 57); 3445 \u0275\u0275text(2); 3446 \u0275\u0275pipe(3, "translate"); 3447 \u0275\u0275elementEnd(); 3448 \u0275\u0275elementStart(4, "span", 58); 3449 \u0275\u0275text(5); 3450 \u0275\u0275elementEnd()(); 3451 } 3452 if (rf & 2) { 3453 const techData_r14 = \u0275\u0275nextContext(3); 3454 const ctx_r1 = \u0275\u0275nextContext(4); 3455 \u0275\u0275advance(2); 3456 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 2, "bugReportAdmin.tech.distanceRemaining")); 3457 \u0275\u0275advance(3); 3458 \u0275\u0275textInterpolate(ctx_r1.formatDistanceCm(techData_r14.navigation.distanceRemaining)); 3459 } 3460} 3461function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_5_Conditional_7_Template(rf, ctx) { 3462 if (rf & 1) { 3463 \u0275\u0275elementStart(0, "div", 76)(1, "div", 55)(2, "div", 56)(3, "span", 57); 3464 \u0275\u0275text(4); 3465 \u0275\u0275pipe(5, "translate"); 3466 \u0275\u0275elementEnd(); 3467 \u0275\u0275elementStart(6, "span", 58); 3468 \u0275\u0275text(7); 3469 \u0275\u0275elementEnd()(); 3470 \u0275\u0275template(8, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_5_Conditional_7_Conditional_8_Template, 6, 4, "div", 56)(9, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_5_Conditional_7_Conditional_9_Template, 6, 4, "div", 56)(10, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_5_Conditional_7_Conditional_10_Template, 6, 4, "div", 56); 3471 \u0275\u0275elementStart(11, "div", 56)(12, "span", 57); 3472 \u0275\u0275text(13); 3473 \u0275\u0275pipe(14, "translate"); 3474 \u0275\u0275elementEnd(); 3475 \u0275\u0275elementStart(15, "span", 58)(16, "span", 77); 3476 \u0275\u0275element(17, "ion-icon", 38); 3477 \u0275\u0275text(18); 3478 \u0275\u0275elementEnd()()()()(); 3479 } 3480 if (rf & 2) { 3481 const techData_r14 = \u0275\u0275nextContext(2); 3482 \u0275\u0275advance(4); 3483 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(5, 12, "bugReportAdmin.tech.mode")); 3484 \u0275\u0275advance(3); 3485 \u0275\u0275textInterpolate(techData_r14.navigation.mode); 3486 \u0275\u0275advance(); 3487 \u0275\u0275conditional(techData_r14.navigation.targetName ? 8 : -1); 3488 \u0275\u0275advance(); 3489 \u0275\u0275conditional(techData_r14.navigation.currentDirection ? 9 : -1); 3490 \u0275\u0275advance(); 3491 \u0275\u0275conditional(techData_r14.navigation.distanceRemaining !== void 0 ? 10 : -1); 3492 \u0275\u0275advance(3); 3493 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(14, 14, "bugReportAdmin.tech.offRoute")); 3494 \u0275\u0275advance(3); 3495 \u0275\u0275classProp("true", techData_r14.navigation.isOffRoute)("false", !techData_r14.navigation.isOffRoute); 3496 \u0275\u0275advance(); 3497 \u0275\u0275property("name", techData_r14.navigation.isOffRoute ? "checkmark-outline" : "close-sharp"); 3498 \u0275\u0275advance(); 3499 \u0275\u0275textInterpolate1(" ", techData_r14.navigation.isOffRoute ? "Yes" : "No", " "); 3500 } 3501} 3502function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_5_Template(rf, ctx) { 3503 if (rf & 1) { 3504 const _r13 = \u0275\u0275getCurrentView(); 3505 \u0275\u0275elementStart(0, "div", 73)(1, "div", 74); 3506 \u0275\u0275listener("click", function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_5_Template_div_click_1_listener() { 3507 \u0275\u0275restoreView(_r13); 3508 const report_r10 = \u0275\u0275nextContext(3).$implicit; 3509 const ctx_r1 = \u0275\u0275nextContext(2);
3510 return \u0275\u0275resetView(ctx_r1.toggleTechSection(report_r10.id, "navigation")); 3511 }); 3512 \u0275\u0275element(2, "ion-icon", 75); 3513 \u0275\u0275elementStart(3, "span"); 3514 \u0275\u0275text(4); 3515 \u0275\u0275pipe(5, "translate"); 3516 \u0275\u0275elementEnd(); 3517 \u0275\u0275element(6, "ion-icon", 38); 3518 \u0275\u0275elementEnd(); 3519 \u0275\u0275template(7, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_5_Conditional_7_Template, 19, 16, "div", 76); 3520 \u0275\u0275elementEnd(); 3521 } 3522 if (rf & 2) { 3523 const report_r10 = \u0275\u0275nextContext(3).$implicit; 3524 const ctx_r1 = \u0275\u0275nextContext(2); 3525 \u0275\u0275advance(4); 3526 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(5, 3, "bugReportAdmin.tech.navigation")); 3527 \u0275\u0275advance(2); 3528 \u0275\u0275property("name", ctx_r1.isTechSectionExpanded(report_r10.id, "navigation") ? "chevron-up-outline" : "chevron-down-outline"); 3529 \u0275\u0275advance(); 3530 \u0275\u0275conditional(ctx_r1.isTechSectionExpanded(report_r10.id, "navigation") ? 7 : -1); 3531 } 3532} 3533function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_6_Conditional_7_Conditional_2_Template(rf, ctx) { 3534 if (rf & 1) { 3535 \u0275\u0275elementStart(0, "div", 56)(1, "span", 57); 3536 \u0275\u0275text(2); 3537 \u0275\u0275pipe(3, "translate"); 3538 \u0275\u0275elementEnd(); 3539 \u0275\u0275elementStart(4, "span", 59); 3540 \u0275\u0275text(5); 3541 \u0275\u0275elementEnd()(); 3542 } 3543 if (rf & 2) { 3544 const techData_r14 = \u0275\u0275nextContext(3); 3545 const ctx_r1 = \u0275\u0275nextContext(4); 3546 \u0275\u0275advance(2); 3547 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 3, "bugReportAdmin.tech.coordinates")); 3548 \u0275\u0275advance(3); 3549 \u0275\u0275textInterpolate2("", ctx_r1.formatCoord(techData_r14.position.x), ", ", ctx_r1.formatCoord(techData_r14.position.y), ""); 3550 } 3551} 3552function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_6_Conditional_7_Conditional_3_Template(rf, ctx) { 3553 if (rf & 1) { 3554 \u0275\u0275elementStart(0, "div", 56)(1, "span", 57); 3555 \u0275\u0275text(2); 3556 \u0275\u0275pipe(3, "translate"); 3557 \u0275\u0275elementEnd(); 3558 \u0275\u0275elementStart(4, "span", 58); 3559 \u0275\u0275text(5); 3560 \u0275\u0275elementEnd()(); 3561 } 3562 if (rf & 2) { 3563 const techData_r14 = \u0275\u0275nextContext(3); 3564 \u0275\u0275advance(2); 3565 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 2, "bugReportAdmin.floor")); 3566 \u0275\u0275advance(3); 3567 \u0275\u0275textInterpolate(techData_r14.position.floorName); 3568 } 3569} 3570function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_6_Conditional_7_Conditional_4_Template(rf, ctx) { 3571 if (rf & 1) { 3572 \u0275\u0275elementStart(0, "div", 56)(1, "span", 57); 3573 \u0275\u0275text(2); 3574 \u0275\u0275pipe(3, "translate"); 3575 \u0275\u0275elementEnd(); 3576 \u0275\u0275elementStart(4, "span", 58); 3577 \u0275\u0275text(5); 3578 \u0275\u0275elementEnd()(); 3579 } 3580 if (rf & 2) { 3581 const techData_r14 = \u0275\u0275nextContext(3); 3582 \u0275\u0275advance(2); 3583 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 2, "bugReportAdmin.building")); 3584 \u0275\u0275advance(3); 3585 \u0275\u0275textInterpolate(techData_r14.position.buildingName); 3586 } 3587} 3588function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_6_Conditional_7_Conditional_5_Template(rf, ctx) { 3589 if (rf & 1) { 3590 \u0275\u0275elementStart(0, "div", 56)(1, "span", 57); 3591 \u0275\u0275text(2); 3592 \u0275\u0275pipe(3, "translate"); 3593 \u0275\u0275elementEnd(); 3594 \u0275\u0275elementStart(4, "span", 58)(5, "span", 79); 3595 \u0275\u0275text(6); 3596 \u0275\u0275pipe(7, "uppercase"); 3597 \u0275\u0275elementEnd()()(); 3598 } 3599 if (rf & 2) { 3600 const techData_r14 = \u0275\u0275nextContext(3); 3601 \u0275\u0275advance(2); 3602 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 3, "bugReportAdmin.tech.activeSource")); 3603 \u0275\u0275advance(3); 3604 \u0275\u0275property("ngClass", techData_r14.position.activeSource); 3605 \u0275\u0275advance();
3606 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(7, 5, techData_r14.position.activeSource)); 3607 } 3608} 3609function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_6_Conditional_7_Conditional_6_Template(rf, ctx) { 3610 if (rf & 1) { 3611 \u0275\u0275elementStart(0, "div", 56)(1, "span", 57); 3612 \u0275\u0275text(2); 3613 \u0275\u0275pipe(3, "translate"); 3614 \u0275\u0275elementEnd(); 3615 \u0275\u0275elementStart(4, "span", 58); 3616 \u0275\u0275text(5); 3617 \u0275\u0275elementEnd()(); 3618 } 3619 if (rf & 2) { 3620 const techData_r14 = \u0275\u0275nextContext(3); 3621 const ctx_r1 = \u0275\u0275nextContext(4); 3622 \u0275\u0275advance(2); 3623 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 2, "bugReportAdmin.tech.beaconConfidence")); 3624 \u0275\u0275advance(3); 3625 \u0275\u0275textInterpolate(ctx_r1.formatConfidence(techData_r14.confidence.beacon.raw, techData_r14.confidence.beacon.adjusted)); 3626 } 3627} 3628function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_6_Conditional_7_Conditional_7_Template(rf, ctx) { 3629 if (rf & 1) { 3630 \u0275\u0275elementStart(0, "div", 56)(1, "span", 57); 3631 \u0275\u0275text(2); 3632 \u0275\u0275pipe(3, "translate"); 3633 \u0275\u0275elementEnd(); 3634 \u0275\u0275elementStart(4, "span", 58); 3635 \u0275\u0275text(5); 3636 \u0275\u0275elementEnd()(); 3637 } 3638 if (rf & 2) { 3639 const techData_r14 = \u0275\u0275nextContext(3); 3640 const ctx_r1 = \u0275\u0275nextContext(4); 3641 \u0275\u0275advance(2); 3642 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 2, "bugReportAdmin.tech.gpsConfidence")); 3643 \u0275\u0275advance(3); 3644 \u0275\u0275textInterpolate(ctx_r1.formatConfidence(techData_r14.confidence.gps.raw, techData_r14.confidence.gps.adjusted)); 3645 } 3646} 3647function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_6_Conditional_7_Conditional_8_Template(rf, ctx) { 3648 if (rf & 1) { 3649 \u0275\u0275elementStart(0, "div", 56)(1, "span", 57); 3650 \u0275\u0275text(2); 3651 \u0275\u0275pipe(3, "translate"); 3652 \u0275\u0275elementEnd(); 3653 \u0275\u0275elementStart(4, "span", 58); 3654 \u0275\u0275text(5); 3655 \u0275\u0275elementEnd()(); 3656 } 3657 if (rf & 2) { 3658 const techData_r14 = \u0275\u0275nextContext(3); 3659 \u0275\u0275advance(2); 3660 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 2, "bugReportAdmin.tech.delta")); 3661 \u0275\u0275advance(3); 3662 \u0275\u0275textInterpolate(techData_r14.confidence.delta.toFixed(2)); 3663 } 3664} 3665function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_6_Conditional_7_Template(rf, ctx) { 3666 if (rf & 1) { 3667 \u0275\u0275elementStart(0, "div", 76)(1, "div", 55); 3668 \u0275\u0275template(2, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_6_Conditional_7_Conditional_2_Template, 6, 5, "div", 56)(3, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_6_Conditional_7_Conditional_3_Template, 6, 4, "div", 56)(4, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_6_Conditional_7_Conditional_4_Template, 6, 4, "div", 56)(5, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_6_Conditional_7_Conditional_5_Template, 8, 7, "div", 56)(6, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_6_Conditional_7_Conditional_6_Template, 6, 4, "div", 56)(7, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_6_Conditional_7_Conditional_7_Template, 6, 4, "div", 56)(8, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_6_Conditional_7_Conditional_8_Template, 6, 4, "div", 56); 3669 \u0275\u0275elementEnd()(); 3670 } 3671 if (rf & 2) { 3672 const techData_r14 = \u0275\u0275nextContext(2); 3673 \u0275\u0275advance(2); 3674 \u0275\u0275conditional(techData_r14.position.x !== void 0 && techData_r14.position.y !== void 0 ? 2 : -1); 3675 \u0275\u0275advance(); 3676 \u0275\u0275conditional(techData_r14.position.floorName ? 3 : -1); 3677 \u0275\u0275advance(); 3678 \u0275\u0275conditional(techData_r14.position.buildingName ? 4 : -1); 3679 \u0275\u0275advance(); 3680 \u0275\u0275conditional(techData_r14.position.activeSource ? 5 : -1); 3681 \u0275\u0275advance(); 3682 \u0275\u0275conditional(techData_r14.confidence.beacon ? 6 : -1); 3683 \u0275\u0275advance(); 3684 \u0275\u0275conditional(techData_r14.confidence.gps ? 7 : -1); 3685 \u0275\u0275advance(); 3686 \u0275\u0275conditional(techData_r14.confidence.delta !== void 0 ? 8 : -1); 3687 } 3688} 3689function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_6_Template(rf, ctx) { 3690 if (rf & 1) { 3691 const _r15 = \u0275\u0275getCurrentView(); 3692 \u0275\u0275elementStart(0, "div", 73)(1, "div", 74); 3693 \u0275\u0275listener("click", function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_6_Template_div_click_1_listener() { 3694 \u0275\u0275restoreView(_r15); 3695 const report_r10 = \u0275\u0275nextContext(3).$implicit; 3696 const ctx_r1 = \u0275\u0275nextContext(2);
3697 return \u0275\u0275resetView(ctx_r1.toggleTechSection(report_r10.id, "position")); 3698 }); 3699 \u0275\u0275element(2, "ion-icon", 78); 3700 \u0275\u0275elementStart(3, "span"); 3701 \u0275\u0275text(4); 3702 \u0275\u0275pipe(5, "translate"); 3703 \u0275\u0275elementEnd(); 3704 \u0275\u0275element(6, "ion-icon", 38); 3705 \u0275\u0275elementEnd(); 3706 \u0275\u0275template(7, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_6_Conditional_7_Template, 9, 7, "div", 76); 3707 \u0275\u0275elementEnd(); 3708 } 3709 if (rf & 2) { 3710 const report_r10 = \u0275\u0275nextContext(3).$implicit; 3711 const ctx_r1 = \u0275\u0275nextContext(2); 3712 \u0275\u0275advance(4); 3713 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(5, 3, "bugReportAdmin.tech.position")); 3714 \u0275\u0275advance(2); 3715 \u0275\u0275property("name", ctx_r1.isTechSectionExpanded(report_r10.id, "position") ? "chevron-up-outline" : "chevron-down-outline"); 3716 \u0275\u0275advance(); 3717 \u0275\u0275conditional(ctx_r1.isTechSectionExpanded(report_r10.id, "position") ? 7 : -1); 3718 } 3719} 3720function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_7_Conditional_7_Template(rf, ctx) { 3721 if (rf & 1) { 3722 \u0275\u0275elementStart(0, "div", 76)(1, "div", 55)(2, "div", 56)(3, "span", 57); 3723 \u0275\u0275text(4); 3724 \u0275\u0275pipe(5, "translate"); 3725 \u0275\u0275elementEnd(); 3726 \u0275\u0275elementStart(6, "span", 58)(7, "span", 77); 3727 \u0275\u0275element(8, "ion-icon", 38); 3728 \u0275\u0275text(9); 3729 \u0275\u0275elementEnd()()(); 3730 \u0275\u0275elementStart(10, "div", 56)(11, "span", 57); 3731 \u0275\u0275text(12); 3732 \u0275\u0275pipe(13, "translate"); 3733 \u0275\u0275elementEnd(); 3734 \u0275\u0275elementStart(14, "span", 58); 3735 \u0275\u0275text(15); 3736 \u0275\u0275elementEnd()(); 3737 \u0275\u0275elementStart(16, "div", 56)(17, "span", 57); 3738 \u0275\u0275text(18); 3739 \u0275\u0275pipe(19, "translate"); 3740 \u0275\u0275elementEnd(); 3741 \u0275\u0275elementStart(20, "span", 58); 3742 \u0275\u0275text(21); 3743 \u0275\u0275elementEnd()(); 3744 \u0275\u0275elementStart(22, "div", 56)(23, "span", 57); 3745 \u0275\u0275text(24); 3746 \u0275\u0275pipe(25, "translate"); 3747 \u0275\u0275elementEnd(); 3748 \u0275\u0275elementStart(26, "span", 58); 3749 \u0275\u0275text(27); 3750 \u0275\u0275elementEnd()(); 3751 \u0275\u0275elementStart(28, "div", 56)(29, "span", 57); 3752 \u0275\u0275text(30); 3753 \u0275\u0275pipe(31, "translate"); 3754 \u0275\u0275elementEnd(); 3755 \u0275\u0275elementStart(32, "span", 58); 3756 \u0275\u0275text(33); 3757 \u0275\u0275elementEnd()()()(); 3758 } 3759 if (rf & 2) { 3760 const techData_r14 = \u0275\u0275nextContext(2); 3761 \u0275\u0275advance(4); 3762 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(5, 15, "bugReportAdmin.tech.enabled")); 3763 \u0275\u0275advance(3); 3764 \u0275\u0275classProp("true", techData_r14.position.kalmanState.enabled)("false", !techData_r14.position.kalmanState.enabled); 3765 \u0275\u0275advance(); 3766 \u0275\u0275property("name", techData_r14.position.kalmanState.enabled ? "checkmark-outline" : "close-sharp"); 3767 \u0275\u0275advance(); 3768 \u0275\u0275textInterpolate1(" ", techData_r14.position.kalmanState.enabled ? "Yes" : "No", " "); 3769 \u0275\u0275advance(3); 3770 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(13, 17, "bugReportAdmin.tech.speed")); 3771 \u0275\u0275advance(3); 3772 \u0275\u0275textInterpolate1("", techData_r14.position.kalmanState.speed.toFixed(4), " cm/s"); 3773 \u0275\u0275advance(3); 3774 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(19, 19, "bugReportAdmin.tech.velocityX")); 3775 \u0275\u0275advance(3); 3776 \u0275\u0275textInterpolate1("", techData_r14.position.kalmanState.velocityX.toFixed(4), " cm/s"); 3777 \u0275\u0275advance(3); 3778 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(25, 21, "bugReportAdmin.tech.velocityY")); 3779 \u0275\u0275advance(3); 3780 \u0275\u0275textInterpolate1("", techData_r14.position.kalmanState.velocityY.toFixed(4), " cm/s"); 3781 \u0275\u0275advance(3); 3782 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(31, 23, "bugReportAdmin.tech.uncertainty")); 3783 \u0275\u0275advance(3); 3784 \u0275\u0275textInterpolate1("", techData_r14.position.kalmanState.uncertainty.toFixed(2), " cm"); 3785 } 3786} 3787function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_7_Template(rf, ctx) { 3788 if (rf & 1) { 3789 const _r16 = \u0275\u0275getCurrentView(); 3790 \u0275\u0275elementStart(0, "div", 73)(1, "div", 74); 3791 \u0275\u0275listener("click", function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_7_Template_div_click_1_listener() { 3792 \u0275\u0275restoreView(_r16); 3793 const report_r10 = \u0275\u0275nextContext(3).$implicit; 3794 const ctx_r1 = \u0275\u0275nextContext(2);
3795 return \u0275\u0275resetView(ctx_r1.toggleTechSection(report_r10.id, "kalman")); 3796 }); 3797 \u0275\u0275element(2, "ion-icon", 80); 3798 \u0275\u0275elementStart(3, "span"); 3799 \u0275\u0275text(4); 3800 \u0275\u0275pipe(5, "translate"); 3801 \u0275\u0275elementEnd(); 3802 \u0275\u0275element(6, "ion-icon", 38); 3803 \u0275\u0275elementEnd(); 3804 \u0275\u0275template(7, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_7_Conditional_7_Template, 34, 25, "div", 76); 3805 \u0275\u0275elementEnd(); 3806 } 3807 if (rf & 2) { 3808 const report_r10 = \u0275\u0275nextContext(3).$implicit; 3809 const ctx_r1 = \u0275\u0275nextContext(2); 3810 \u0275\u0275advance(4); 3811 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(5, 3, "bugReportAdmin.tech.kalman")); 3812 \u0275\u0275advance(2); 3813 \u0275\u0275property("name", ctx_r1.isTechSectionExpanded(report_r10.id, "kalman") ? "chevron-up-outline" : "chevron-down-outline"); 3814 \u0275\u0275advance(); 3815 \u0275\u0275conditional(ctx_r1.isTechSectionExpanded(report_r10.id, "kalman") ? 7 : -1); 3816 } 3817} 3818function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_8_Conditional_7_Conditional_11_Template(rf, ctx) { 3819 if (rf & 1) { 3820 \u0275\u0275elementStart(0, "div", 56)(1, "span", 57); 3821 \u0275\u0275text(2); 3822 \u0275\u0275pipe(3, "translate"); 3823 \u0275\u0275elementEnd(); 3824 \u0275\u0275elementStart(4, "span", 58); 3825 \u0275\u0275text(5); 3826 \u0275\u0275element(6, "br"); 3827 \u0275\u0275elementStart(7, "span", 82); 3828 \u0275\u0275text(8); 3829 \u0275\u0275elementEnd()()(); 3830 } 3831 if (rf & 2) { 3832 const techData_r14 = \u0275\u0275nextContext(3); 3833 \u0275\u0275advance(2); 3834 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 3, "bugReportAdmin.tech.secondaryBeacon")); 3835 \u0275\u0275advance(3); 3836 \u0275\u0275textInterpolate1(" ", techData_r14.position.stablePair.secondaryBeaconName || "-", " "); 3837 \u0275\u0275advance(3); 3838 \u0275\u0275textInterpolate(techData_r14.position.stablePair.secondaryBeaconId); 3839 } 3840} 3841function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_8_Conditional_7_Template(rf, ctx) { 3842 if (rf & 1) { 3843 \u0275\u0275elementStart(0, "div", 76)(1, "div", 55)(2, "div", 56)(3, "span", 57); 3844 \u0275\u0275text(4); 3845 \u0275\u0275pipe(5, "translate"); 3846 \u0275\u0275elementEnd(); 3847 \u0275\u0275elementStart(6, "span", 58); 3848 \u0275\u0275text(7); 3849 \u0275\u0275element(8, "br"); 3850 \u0275\u0275elementStart(9, "span", 82); 3851 \u0275\u0275text(10); 3852 \u0275\u0275elementEnd()()(); 3853 \u0275\u0275template(11, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_8_Conditional_7_Conditional_11_Template, 9, 5, "div", 56); 3854 \u0275\u0275elementEnd()(); 3855 } 3856 if (rf & 2) { 3857 const techData_r14 = \u0275\u0275nextContext(2); 3858 \u0275\u0275advance(4); 3859 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(5, 4, "bugReportAdmin.tech.primaryBeacon")); 3860 \u0275\u0275advance(3); 3861 \u0275\u0275textInterpolate1(" ", techData_r14.position.stablePair.primaryBeaconName || "-", " "); 3862 \u0275\u0275advance(3); 3863 \u0275\u0275textInterpolate(techData_r14.position.stablePair.primaryBeaconId); 3864 \u0275\u0275advance(); 3865 \u0275\u0275conditional(techData_r14.position.stablePair.secondaryBeaconId ? 11 : -1); 3866 } 3867} 3868function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_8_Template(rf, ctx) { 3869 if (rf & 1) { 3870 const _r17 = \u0275\u0275getCurrentView(); 3871 \u0275\u0275elementStart(0, "div", 73)(1, "div", 74); 3872 \u0275\u0275listener("click", function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_8_Template_div_click_1_listener() { 3873 \u0275\u0275restoreView(_r17); 3874 const report_r10 = \u0275\u0275nextContext(3).$implicit; 3875 const ctx_r1 = \u0275\u0275nextContext(2); 3876 return \u0275\u0275resetView(ctx_r1.toggleTechSection(report_r10.id, "beaconPair")); 3877 }); 3878 \u0275\u0275element(2, "ion-icon", 81); 3879 \u0275\u0275elementStart(3, "span"); 3880 \u0275\u0275text(4); 3881 \u0275\u0275pipe(5, "translate"); 3882 \u0275\u0275elementEnd(); 3883 \u0275\u0275element(6, "ion-icon", 38); 3884 \u0275\u0275elementEnd(); 3885 \u0275\u0275template(7, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_8_Conditional_7_Template, 12, 6, "div", 76); 3886 \u0275\u0275elementEnd(); 3887 } 3888 if (rf & 2) { 3889 const report_r10 = \u0275\u0275nextContext(3).$implicit; 3890 const ctx_r1 = \u0275\u0275nextContext(2); 3891 \u0275\u0275advance(4); 3892 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(5, 3, "bugReportAdmin.tech.beaconPair")); 3893 \u0275\u0275advance(2); 3894 \u0275\u0275property("name", ctx_r1.isTechSectionExpanded(report_r10.id, "beaconPair") ? "chevron-up-outline" : "chevron-down-outline"); 3895 \u0275\u0275advance(); 3896 \u0275\u0275conditional(ctx_r1.isTechSectionExpanded(report_r10.id, "beaconPair") ? 7 : -1); 3897 } 3898} 3899function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_9_Conditional_7_Conditional_8_Template(rf, ctx) { 3900 if (rf & 1) { 3901 \u0275\u0275elementStart(0, "div", 56)(1, "span", 57); 3902 \u0275\u0275text(2); 3903 \u0275\u0275pipe(3, "translate"); 3904 \u0275\u0275elementEnd(); 3905 \u0275\u0275elementStart(4, "span", 58); 3906 \u0275\u0275text(5); 3907 \u0275\u0275elementEnd()(); 3908 } 3909 if (rf & 2) { 3910 const techData_r14 = \u0275\u0275nextContext(3); 3911 \u0275\u0275advance(2); 3912 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 2, "bugReportAdmin.tech.strongestSignal")); 3913 \u0275\u0275advance(3); 3914 \u0275\u0275textInterpolate1("", techData_r14.beacons.signalQuality == null ? null : techData_r14.beacons.signalQuality.strongestRssi, " dBm"); 3915 } 3916} 3917function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_9_Conditional_7_Conditional_9_Template(rf, ctx) { 3918 if (rf & 1) { 3919 \u0275\u0275elementStart(0, "div", 56)(1, "span", 57); 3920 \u0275\u0275text(2); 3921 \u0275\u0275pipe(3, "translate"); 3922 \u0275\u0275elementEnd(); 3923 \u0275\u0275elementStart(4, "span", 58); 3924 \u0275\u0275text(5); 3925 \u0275\u0275elementEnd()(); 3926 } 3927 if (rf & 2) { 3928 const techData_r14 = \u0275\u0275nextContext(3); 3929 \u0275\u0275advance(2); 3930 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 2, "bugReportAdmin.tech.avgRssi")); 3931 \u0275\u0275advance(3); 3932 \u0275\u0275textInterpolate1("", techData_r14.beacons.signalQuality == null ? null : techData_r14.beacons.signalQuality.avgRssi, " dBm"); 3933 } 3934} 3935function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_9_Conditional_7_Conditional_10_Template(rf, ctx) { 3936 if (rf & 1) { 3937 \u0275\u0275elementStart(0, "div", 56)(1, "span", 57); 3938 \u0275\u0275text(2); 3939 \u0275\u0275pipe(3, "translate"); 3940 \u0275\u0275elementEnd(); 3941 \u0275\u0275elementStart(4, "span", 58); 3942 \u0275\u0275text(5); 3943 \u0275\u0275elementEnd()(); 3944 } 3945 if (rf & 2) { 3946 const techData_r14 = \u0275\u0275nextContext(3); 3947 const ctx_r1 = \u0275\u0275nextContext(4); 3948 \u0275\u0275advance(2); 3949 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 2, "bugReportAdmin.tech.lastUpdate")); 3950 \u0275\u0275advance(3); 3951 \u0275\u0275textInterpolate(ctx_r1.formatTimeSince(techData_r14.beacons.timeSinceLastMs)); 3952 } 3953} 3954function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_9_Conditional_7_Conditional_11_For_24_Template(rf, ctx) { 3955 if (rf & 1) { 3956 \u0275\u0275elementStart(0, "tr")(1, "td", 86); 3957 \u0275\u0275text(2); 3958 \u0275\u0275elementEnd(); 3959 \u0275\u0275elementStart(3, "td", 87); 3960 \u0275\u0275text(4); 3961 \u0275\u0275elementEnd(); 3962 \u0275\u0275elementStart(5, "td", 87); 3963 \u0275\u0275text(6); 3964 \u0275\u0275elementEnd(); 3965 \u0275\u0275elementStart(7, "td"); 3966 \u0275\u0275text(8); 3967 \u0275\u0275elementEnd(); 3968 \u0275\u0275elementStart(9, "td"); 3969 \u0275\u0275text(10); 3970 \u0275\u0275elementEnd(); 3971 \u0275\u0275elementStart(11, "td"); 3972 \u0275\u0275text(12); 3973 \u0275\u0275elementEnd()(); 3974 } 3975 if (rf & 2) { 3976 const beacon_r19 = ctx.$implicit; 3977 const ctx_r1 = \u0275\u0275nextContext(8); 3978 \u0275\u0275advance(2); 3979 \u0275\u0275textInterpolate(beacon_r19.name); 3980 \u0275\u0275advance(2); 3981 \u0275\u0275textInterpolate1("", beacon_r19.rssi, " dBm"); 3982 \u0275\u0275advance(2); 3983 \u0275\u0275textInterpolate(beacon_r19.filteredRssi.toFixed(1)); 3984 \u0275\u0275advance(2); 3985 \u0275\u0275textInterpolate(ctx_r1.formatDistanceCm(beacon_r19.distanceCm)); 3986 \u0275\u0275advance(2); 3987 \u0275\u0275textInterpolate(beacon_r19.batteryPercent !== null ? beacon_r19.batteryPercent + "%" : "-"); 3988 \u0275\u0275advance(2); 3989 \u0275\u0275textInterpolate(ctx_r1.formatTimeSince(beacon_r19.lastSeenMs)); 3990 } 3991} 3992function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_9_Conditional_7_Conditional_11_Template(rf, ctx) { 3993 if (rf & 1) { 3994 \u0275\u0275elementStart(0, "div", 84)(1, "table", 85)(2, "thead")(3, "tr")(4, "th"); 3995 \u0275\u0275text(5); 3996 \u0275\u0275pipe(6, "translate"); 3997 \u0275\u0275elementEnd(); 3998 \u0275\u0275elementStart(7, "th"); 3999 \u0275\u0275text(8); 4000 \u0275\u0275pipe(9, "translate"); 4001 \u0275\u0275elementEnd(); 4002 \u0275\u0275elementStart(10, "th"); 4003 \u0275\u0275text(11); 4004 \u0275\u0275pipe(12, "translate"); 4005 \u0275\u0275elementEnd(); 4006 \u0275\u0275elementStart(13, "th"); 4007 \u0275\u0275text(14); 4008 \u0275\u0275pipe(15, "translate"); 4009 \u0275\u0275elementEnd(); 4010 \u0275\u0275elementStart(16, "th"); 4011 \u0275\u0275text(17); 4012 \u0275\u0275pipe(18, "translate"); 4013 \u0275\u0275elementEnd(); 4014 \u0275\u0275elementStart(19, "th"); 4015 \u0275\u0275text(20); 4016 \u0275\u0275pipe(21, "translate"); 4017 \u0275\u0275elementEnd()()(); 4018 \u0275\u0275elementStart(22, "tbody"); 4019 \u0275\u0275repeaterCreate(23, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_9_Conditional_7_Conditional_11_For_24_Template, 13, 6, "tr", null, _forTrack1); 4020 \u0275\u0275elementEnd()()(); 4021 } 4022 if (rf & 2) { 4023 const techData_r14 = \u0275\u0275nextContext(3); 4024 \u0275\u0275advance(5); 4025 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(6, 6, "bugReportAdmin.tech.beacon")); 4026 \u0275\u0275advance(3); 4027 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(9, 8, "bugReportAdmin.tech.r
4027ssi")); 4028 \u0275\u0275advance(3); 4029 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(12, 10, "bugReportAdmin.tech.filteredRssi")); 4030 \u0275\u0275advance(3); 4031 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(15, 12, "bugReportAdmin.tech.distance")); 4032 \u0275\u0275advance(3); 4033 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(18, 14, "bugReportAdmin.tech.battery")); 4034 \u0275\u0275advance(3); 4035 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(21, 16, "bugReportAdmin.tech.lastSeen")); 4036 \u0275\u0275advance(3); 4037 \u0275\u0275repeater(techData_r14.beacons.activeBeacons); 4038 } 4039} 4040function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_9_Conditional_7_Template(rf, ctx) { 4041 if (rf & 1) { 4042 \u0275\u0275elementStart(0, "div", 76)(1, "div", 55)(2, "div", 56)(3, "span", 57); 4043 \u0275\u0275text(4); 4044 \u0275\u0275pipe(5, "translate"); 4045 \u0275\u0275elementEnd(); 4046 \u0275\u0275elementStart(6, "span", 58); 4047 \u0275\u0275text(7); 4048 \u0275\u0275elementEnd()(); 4049 \u0275\u0275template(8, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_9_Conditional_7_Conditional_8_Template, 6, 4, "div", 56)(9, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_9_Conditional_7_Conditional_9_Template, 6, 4, "div", 56)(10, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_9_Conditional_7_Conditional_10_Template, 6, 4, "div", 56); 4050 \u0275\u0275elementEnd(); 4051 \u0275\u0275template(11, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_9_Conditional_7_Conditional_11_Template, 25, 18, "div", 84); 4052 \u0275\u0275elementEnd(); 4053 } 4054 if (rf & 2) { 4055 const techData_r14 = \u0275\u0275nextContext(2); 4056 \u0275\u0275advance(4); 4057 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(5, 6, "bugReportAdmin.tech.mode")); 4058 \u0275\u0275advance(3); 4059 \u0275\u0275textInterpolate(techData_r14.beacons.mode); 4060 \u0275\u0275advance(); 4061 \u0275\u0275conditional((techData_r14.beacons.signalQuality == null ? null : techData_r14.beacons.signalQuality.strongestRssi) !== void 0 ? 8 : -1); 4062 \u0275\u0275advance(); 4063 \u0275\u0275conditional((techData_r14.beacons.signalQuality == null ? null : techData_r14.beacons.signalQuality.avgRssi) !== void 0 ? 9 : -1); 4064 \u0275\u0275advance(); 4065 \u0275\u0275conditional(techData_r14.beacons.timeSinceLastMs !== null ? 10 : -1); 4066 \u0275\u0275advance(); 4067 \u0275\u0275conditional(techData_r14.beacons.activeBeacons.length ? 11 : -1); 4068 } 4069} 4070function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_9_Template(rf, ctx) { 4071 if (rf & 1) { 4072 const _r18 = \u0275\u0275getCurrentView(); 4073 \u0275\u0275elementStart(0, "div", 73)(1, "div", 74); 4074 \u0275\u0275listener("click", function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_9_Template_div_click_1_listener() { 4075 \u0275\u0275restoreView(_r18); 4076 const report_r10 = \u0275\u0275nextContext(3).$implicit; 4077 const ctx_r1 = \u0275\u0275nextContext(2); 4078 return \u0275\u0275resetView(ctx_r1.toggleTechSection(report_r10.id, "beacons")); 4079 }); 4080 \u0275\u0275element(2, "ion-icon", 83); 4081 \u0275\u0275elementStart(3, "span"); 4082 \u0275\u0275text(4); 4083 \u0275\u0275pipe(5, "translate"); 4084 \u0275\u0275elementEnd(); 4085 \u0275\u0275element(6, "ion-icon", 38); 4086 \u0275\u0275elementEnd(); 4087 \u0275\u0275template(7, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_9_Conditional_7_Template, 12, 8, "div", 76); 4088 \u0275\u0275elementEnd(); 4089 } 4090 if (rf & 2) { 4091 const techData_r14 = \u0275\u0275nextContext(); 4092 const report_r10 = \u0275\u0275nextContext(2).$implicit; 4093 const ctx_r1 = \u0275\u0275nextContext(2); 4094 \u0275\u0275advance(4); 4095 \u0275\u0275textInterpolate2("", \u0275\u0275pipeBind1(5, 4, "bugReportAdmin.tech.beacons"), " (", techData_r14.beacons.count, ")"); 4096 \u0275\u0275advance(2); 4097 \u0275\u0275property("name", ctx_r1.isTechSectionExpanded(report_r10.id, "beacons") ? "chevron-up-outline" : "chevron-down-outline"); 4098 \u0275\u0275advance(); 4099 \u0275\u0275conditional(ctx_r1.isTechSectionExpanded(report_r10.id, "beacons") ? 7 : -1); 4100 } 4101} 4102function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_10_Conditional_7_Conditional_10_Template(rf, ctx) { 4103 if (rf & 1) { 4104 \u0275\u0275elementStart(0, "div", 56)(1, "span", 57); 4105 \u0275\u0275text(2); 4106 \u0275\u0275pipe(3, "translate"); 4107 \u0275\u0275elementEnd(); 4108 \u0275\u0275elementStart(4, "span", 59); 4109 \u0275\u0275text(5); 4110 \u0275\u0275elementEnd()(); 4111 } 4112 if (rf & 2) { 4113 const techData_r14 = \u0275\u0275nextContext(3); 4114 const ctx_r1 = \u0275\u0275nextContext(4); 4115 \u0275\u0275advance(2); 4116 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 3, "bugReportAdmin.tech.coordinates")); 4117 \u0275\u0275advance(3); 4118 \u0275\u0275textInterpolate2("", ctx_r1.formatGpsCoord(techData_r14.gps.position == null ? null : techData_r14.gps.position.latitude), ", ", ctx_r1.formatGpsCoord(techData_r14.gps.position == null ? null : techData_r14.gps.position.longitude), ""); 4119 } 4120} 4121function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_10_Conditional_7_Conditional_11_Template(rf, ctx) { 4122 if (rf & 1) { 4123 \u0275\u0275elementStart(0, "div", 56)(1, "span", 57); 4124 \u0275\u0275text(2); 4125 \u0275\u0275pipe(3, "translate"); 4126 \u0275\u0275elementEnd(); 4127 \u0275\u0275elementStart(4, "span", 58); 4128 \u0275\u0275text(5); 4129 \u0275\u0275elementEnd()(); 4130 } 4131 if (rf & 2) { 4132 const techData_r14 = \u0275\u0275nextContext(3); 4133 \u0275\u0275advance(2); 4134 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 2, "bugReportAdmin.tech.accuracy")); 4135 \u0275\u0275advance(3); 4136 \u0275\u0275textInterpolate1("", techData_r14.gps.position == null ? null : techData_r14.gps.position.accuracyMeters, "m"); 4137 } 4138} 4139function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_10_Conditional_7_Conditional_12_Template(rf, ctx) { 4140 if (rf & 1) { 4141 \u0275\u0275elementStart(0, "div", 56)(1, "span", 57); 4142 \u0275\u0275text(2); 4143 \u0275\u0275pipe(3, "translate"); 4144 \u0275\u0275elementEnd(); 4145 \u0275\u0275elementStart(4, "span", 58); 4146 \u0275\u0275text(5); 4147 \u0275\u0275elementEnd()(); 4148 } 4149 if (rf & 2) { 4150 const techData_r14 = \u0275\u0275nextContext(3); 4151 const ctx_r1 = \u0275\u0275nextContext(4); 4152 \u0275\u0275advance(2); 4153 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 2, "bugReportAdmin.tech.lastUpdate")); 4154 \u0275\u0275advance(3); 4155 \u0275\u0275textInterpolate(ctx_r1.formatTimeSince(techData_r14.gps.timeSinceLastMs)); 4156 } 4157} 4158function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_10_Conditional_7_Conditional_13_Template(rf, ctx) { 4159 if (rf & 1) { 4160 \u0275\u0275elementStart(0, "div", 56)(1, "span", 57); 4161 \u0275\u0275text(2); 4162 \u0275\u0275pipe(3, "translate"); 4163 \u0275\u0275elementEnd(); 4164 \u0275\u0275elementStart(4, "span", 58); 4165 \u0275\u0275text(5); 4166 \u0275\u0275elementEnd()(); 4167 } 4168 if (rf & 2) { 4169 const techData_r14 = \u0275\u0275nextContext(3); 4170 \u0275\u0275advance(2); 4171 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 2, "bugReportAdmin.tech.altitude")); 4172 \u0275\u0275advance(3); 4173 \u0275\u0275textInterpolate1("", techData_r14.gps.position == null ? null : techData_r14.gps.position.altitude == null ? null : techData_r14.gps.position.altitude.toFixed(1), "m"); 4174 } 4175} 4176function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_10_Conditional_7_Conditional_14_Template(rf, ctx) { 4177 if (rf & 1) { 4178 \u0275\u0275elementStart(0, "div", 56)(1, "span", 57); 4179 \u0275\u0275text(2); 4180 \u0275\u0275pipe(3, "translate"); 4181 \u0275\u0275elementEnd(); 4182 \u0275\u0275elementStart(4, "span", 58); 4183 \u0275\u0275text(5); 4184 \u0275\u0275elementEnd()(); 4185 } 4186 if (rf & 2) { 4187 const techData_r14 = \u0275\u0275nextContext(3); 4188 \u0275\u0275advance(2); 4189 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 2, "bugReportAdmin.tech.speed")); 4190 \u0275\u0275advance(3); 4191 \u0275\u0275textInterpolate1("", techData_r14.gps.position == null ? null : techData_r14.gps.position.speed == null ? null : techData_r14.gps.position.speed.toFixed(2), " m/s"); 4192 } 4193} 4194function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_10_Conditional_7_Template(rf, ctx) { 4195 if (rf & 1) { 4196 \u0275\u0275elementStart(0, "div", 76)(1, "div", 55)(2, "div", 56)(3, "span", 57); 4197 \u0275\u0275text(4); 4198 \u0275\u0275pipe(5, "translate"); 4199 \u0275\u0275elementEnd(); 4200 \u0275\u0275elementStart(6, "span", 58)(7, "span", 77); 4201 \u0275\u0275element(8, "ion-icon", 38); 4202 \u0275\u0275text(9); 4203 \u0275\u0275elementEnd()()(); 4204 \u0275\u0275template(10, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_10_Conditional_7_Conditional_10_Template, 6, 5, "div", 56)(11, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_10_Conditional_7_Conditional_11_Template, 6, 4, "div", 56)(12, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_10_Conditional_7_Conditional_12_Template, 6, 4, "div", 56)(13, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_10_Conditional_7_Conditional_13_Template, 6, 4, "div", 56)(14, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_10_Conditional_7_Conditional_14_Template, 6, 4, "div", 56); 4205 \u0275\u0275elementEnd()(); 4206 } 4207 if (rf & 2) { 4208 const techData_r14 = \u0275\u0275nextContext(2); 4209 \u0275\u0275advance(4); 4210 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(5, 12, "bugReportAdmin.tech.gpsStatus")); 4211 \u0275\u0275advance(3); 4212 \u0275\u0275classProp("true", techData_r14.gps.status.available)("false", !techData_r14.gps.status.available); 4213 \u0275\u0275advance(); 4214 \u0275\u0275property("name", techData_r14.gps.status.available ? "checkmark-outline" : "close-sharp"); 4215 \u0275\u0275advance(); 4216 \u0275\u0275textInterpolate1(" ", techData_r14.gps.status.available ? "Available" : "Unavailable", " "); 4217 \u0275\u0275advance(); 4218 \u0275\u0275conditional((techData_r14.gps.position == null ? null : techData_r14.gps.position.latitude) !== void 0 ? 10 : -1); 4219 \u0275\u0275advance(); 4220 \u0275\u0275conditional((techData_r14.gps.position == null ? null : techData_r14.gps.position.accuracyMeters) !== void 0 ? 11 : -1); 4221 \u0275\u0275advance(); 4222 \u0275\u0275conditional(techData_r14.gps.timeSinceLastMs !== null ? 12 : -1); 4223 \u0275\u0275advance(); 4224 \u0275\u0275conditional((techData_r14.gps.position == null ? null : techData_r14.gps.position.altitude) !== void 0 ? 13 : -1); 4225 \u0275\u0275advance(); 4226 \u0275\u0275conditional((techData_r14.gps.position == null ? null : techData_r14.gps.position.speed) !== void 0 ? 14 : -1); 4227 } 4228} 4229function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_10_Template(rf, ctx) { 4230 if (rf & 1) { 4231 const _r20 = \u0275\u0275getCurrentView(); 4232 \u0275\u0275elementStart(0, "div", 73)(1, "div", 74); 4233 \u0275\u0275listener("click", function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_10_Template_div_click_1_listener() { 4234 \u0275\u0275restoreView(_r20); 4235 const report_r10 = \u0275\u0275nextContext(3).$implicit; 4236 const ctx_r1 = \u0275\u0275nextContext(2);
4237 return \u0275\u0275resetView(ctx_r1.toggleTechSection(report_r10.id, "gps")); 4238 }); 4239 \u0275\u0275element(2, "ion-icon", 78); 4240 \u0275\u0275elementStart(3, "span"); 4241 \u0275\u0275text(4); 4242 \u0275\u0275pipe(5, "translate"); 4243 \u0275\u0275elementEnd(); 4244 \u0275\u0275element(6, "ion-icon", 38); 4245 \u0275\u0275elementEnd(); 4246 \u0275\u0275template(7, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_10_Conditional_7_Template, 15, 14, "div", 76); 4247 \u0275\u0275elementEnd(); 4248 } 4249 if (rf & 2) { 4250 const report_r10 = \u0275\u0275nextContext(3).$implicit; 4251 const ctx_r1 = \u0275\u0275nextContext(2); 4252 \u0275\u0275advance(4); 4253 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(5, 3, "bugReportAdmin.tech.gps")); 4254 \u0275\u0275advance(2); 4255 \u0275\u0275property("name", ctx_r1.isTechSectionExpanded(report_r10.id, "gps") ? "chevron-up-outline" : "chevron-down-outline"); 4256 \u0275\u0275advance(); 4257 \u0275\u0275conditional(ctx_r1.isTechSectionExpanded(report_r10.id, "gps") ? 7 : -1); 4258 } 4259} 4260function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_11_Conditional_6_Conditional_42_Template(rf, ctx) { 4261 if (rf & 1) { 4262 \u0275\u0275elementStart(0, "p", 89); 4263 \u0275\u0275text(1); 4264 \u0275\u0275elementEnd(); 4265 } 4266 if (rf & 2) { 4267 const rendering_r22 = \u0275\u0275nextContext(2); 4268 \u0275\u0275advance(); 4269 \u0275\u0275textInterpolate(rendering_r22.latestError); 4270 } 4271} 4272function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_11_Conditional_6_Template(rf, ctx) { 4273 if (rf & 1) { 4274 \u0275\u0275elementStart(0, "div", 76)(1, "div", 55)(2, "div", 56)(3, "span", 57); 4275 \u0275\u0275text(4, "Status"); 4276 \u0275\u0275elementEnd(); 4277 \u0275\u0275elementStart(5, "span", 58); 4278 \u0275\u0275text(6); 4279 \u0275\u0275elementEnd()(); 4280 \u0275\u0275elementStart(7, "div", 56)(8, "span", 57); 4281 \u0275\u0275text(9, "GPU"); 4282 \u0275\u0275elementEnd(); 4283 \u0275\u0275elementStart(10, "span", 59); 4284 \u0275\u0275text(11); 4285 \u0275\u0275elementEnd()(); 4286 \u0275\u0275elementStart(12, "div", 56)(13, "span", 57); 4287 \u0275\u0275text(14, "WebGL"); 4288 \u0275\u0275elementEnd(); 4289 \u0275\u0275elementStart(15, "span", 58); 4290 \u0275\u0275text(16); 4291 \u0275\u0275elementEnd()(); 4292 \u0275\u0275elementStart(17, "div", 56)(18, "span", 57); 4293 \u0275\u0275text(19, "Framebuffer"); 4294 \u0275\u0275elementEnd(); 4295 \u0275\u0275elementStart(20, "span", 58); 4296 \u0275\u0275text(21); 4297 \u0275\u0275elementEnd()(); 4298 \u0275\u0275elementStart(22, "div", 56)(23, "span", 57); 4299 \u0275\u0275text(24, "Labels"); 4300 \u0275\u0275elementEnd(); 4301 \u0275\u0275elementStart(25, "span", 58); 4302 \u0275\u0275text(26); 4303 \u0275\u0275elementEnd()(); 4304 \u0275\u0275elementStart(27, "div", 56)(28, "span", 57); 4305 \u0275\u0275text(29, "Label options"); 4306 \u0275\u0275elementEnd(); 4307 \u0275\u0275elementStart(30, "span", 58); 4308 \u0275\u0275text(31); 4309 \u0275\u0275elementEnd()(); 4310 \u0275\u0275elementStart(32, "div", 56)(33, "span", 57); 4311 \u0275\u0275text(34, "Context events"); 4312 \u0275\u0275elementEnd(); 4313 \u0275\u0275elementStart(35, "span", 58); 4314 \u0275\u0275text(36); 4315 \u0275\u0275elementEnd()(); 4316 \u0275\u0275elementStart(37, "div", 56)(38, "span", 57); 4317 \u0275\u0275text(39, "Actions"); 4318 \u0275\u0275elementEnd(); 4319 \u0275\u0275elementStart(40, "span", 58); 4320 \u0275\u0275text(41); 4321 \u0275\u0275elementEnd()()(); 4322 \u0275\u0275template(42, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_11_Conditional_6_Conditional_42_Template, 2, 1, "p", 89); 4323 \u0275\u0275elementEnd(); 4324 } 4325 if (rf & 2) { 4326 let tmp_22_0; 4327 const rendering_r22 = \u0275\u0275nextContext(); 4328 \u0275\u0275advance(6); 4329 \u0275\u0275textInterpolate(rendering_r22.status); 4330 \u0275\u0275advance(5); 4331 \u0275\u0275textInterpolate((rendering_r22.webgl == null ? null : rendering_r22.webgl.unmaskedRenderer) || (rendering_r22.webgl == null ? null : rendering_r22.webgl.renderer) || "\u2014"); 4332 \u0275\u0275advance(5); 4333 \u0275\u0275textInterpolate((rendering_r22.webgl == null ? null : rendering_r22.webgl.version) || "\u2014"); 4334 \u0275\u0275advance(5); 4335 \u0275\u0275textInterpolate3("", rendering_r22.drawingBuffer.width, "\xD7", rendering_r22.drawingBuffer.height, " \xB7 DPR ", rendering_r22.rendererPixelRatio, ""); 4336 \u0275\u0275advance(5); 4337 \u0275\u0275textInterpolate2("", (tmp_22_0 = rendering_r22.labels == null ? null : rendering_r22.labels.buildingCount) !== null && tmp_22_0 !== void 0 ? tmp_22_0 : 0, " building / ", (tmp_22_0 = rendering_r22.labels == null ? null : rendering_r22.labels.roomCount) !== null && tmp_22_0 !== void 0 ? tmp_22_0 : 0, " room"); 4338 \u0275\u0275advance(5); 4339 \u0275\u0275textInterpolate6("mip ", rendering_r22.options.generateLabelMipmaps ? "ON" : "OFF", " \xB7 ", rendering_r22.options.labelCanvasPixelRatio, "\xD7 \xB7 ", rendering_r22.options.forcePowerOfTwoLabelTextures ? "POT" : "native size", " \xB7 ", rendering_r22.options.labelTextureFilter || "linear", " \xB7 premultiply ", rendering_r22.options.premultiplyLabelAlp
4339ha ? "ON" : "OFF", " \xB7 vertex padding ", rendering_r22.options.padLabelVertexBuffer ? "ON" : "OFF", ""); 4340 \u0275\u0275advance(5); 4341 \u0275\u0275textInterpolate2("", rendering_r22.context.lossCount, " lost / ", rendering_r22.context.restorationCount, " restored"); 4342 \u0275\u0275advance(5); 4343 \u0275\u0275textInterpolate(rendering_r22.actionHistory.length); 4344 \u0275\u0275advance(); 4345 \u0275\u0275conditional(rendering_r22.latestError ? 42 : -1); 4346 } 4347} 4348function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_11_Template(rf, ctx) { 4349 if (rf & 1) { 4350 const _r21 = \u0275\u0275getCurrentView(); 4351 \u0275\u0275elementStart(0, "div", 73)(1, "div", 74); 4352 \u0275\u0275listener("click", function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_11_Template_div_click_1_listener() { 4353 \u0275\u0275restoreView(_r21); 4354 const report_r10 = \u0275\u0275nextContext(3).$implicit; 4355 const ctx_r1 = \u0275\u0275nextContext(2); 4356 return \u0275\u0275resetView(ctx_r1.toggleTechSection(report_r10.id, "rendering")); 4357 }); 4358 \u0275\u0275element(2, "ion-icon", 88); 4359 \u0275\u0275elementStart(3, "span"); 4360 \u0275\u0275text(4, "GPU Rendering"); 4361 \u0275\u0275elementEnd(); 4362 \u0275\u0275element(5, "ion-icon", 38); 4363 \u0275\u0275elementEnd(); 4364 \u0275\u0275template(6, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_11_Conditional_6_Template, 43, 18, "div", 76); 4365 \u0275\u0275elementEnd(); 4366 } 4367 if (rf & 2) { 4368 const report_r10 = \u0275\u0275nextContext(3).$implicit; 4369 const ctx_r1 = \u0275\u0275nextContext(2); 4370 \u0275\u0275advance(5); 4371 \u0275\u0275property("name", ctx_r1.isTechSectionExpanded(report_r10.id, "rendering") ? "chevron-up-outline" : "chevron-down-outline"); 4372 \u0275\u0275advance(); 4373 \u0275\u0275conditional(ctx_r1.isTechSectionExpanded(report_r10.id, "rendering") ? 6 : -1); 4374 } 4375} 4376function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_12_Conditional_7_Template(rf, ctx) { 4377 if (rf & 1) { 4378 \u0275\u0275elementStart(0, "div", 76)(1, "div", 55)(2, "div", 56)(3, "span", 57); 4379 \u0275\u0275text(4); 4380 \u0275\u0275pipe(5, "translate"); 4381 \u0275\u0275elementEnd(); 4382 \u0275\u0275elementStart(6, "span", 58); 4383 \u0275\u0275text(7); 4384 \u0275\u0275elementEnd()(); 4385 \u0275\u0275elementStart(8, "div", 56)(9, "span", 57); 4386 \u0275\u0275text(10); 4387 \u0275\u0275pipe(11, "translate"); 4388 \u0275\u0275elementEnd(); 4389 \u0275\u0275elementStart(12, "span", 58); 4390 \u0275\u0275text(13); 4391 \u0275\u0275elementEnd()(); 4392 \u0275\u0275elementStart(14, "div", 56)(15, "span", 57); 4393 \u0275\u0275text(16); 4394 \u0275\u0275pipe(17, "translate"); 4395 \u0275\u0275elementEnd(); 4396 \u0275\u0275elementStart(18, "span", 58); 4397 \u0275\u0275text(19); 4398 \u0275\u0275elementEnd()(); 4399 \u0275\u0275elementStart(20, "div", 56)(21, "span", 57); 4400 \u0275\u0275text(22); 4401 \u0275\u0275pipe(23, "translate"); 4402 \u0275\u0275elementEnd(); 4403 \u0275\u0275elementStart(24, "span", 58)(25, "span", 77); 4404 \u0275\u0275element(26, "ion-icon", 38); 4405 \u0275\u0275text(27); 4406 \u0275\u0275elementEnd()()(); 4407 \u0275\u0275elementStart(28, "div", 56)(29, "span", 57); 4408 \u0275\u0275text(30); 4409 \u0275\u0275pipe(31, "translate"); 4410 \u0275\u0275elementEnd(); 4411 \u0275\u0275elementStart(32, "span", 58)(33, "span", 77); 4412 \u0275\u0275element(34, "ion-icon", 38); 4413 \u0275\u0275text(35); 4414 \u0275\u0275elementEnd()()()()(); 4415 } 4416 if (rf & 2) { 4417 const techData_r14 = \u0275\u0275nextContext(2); 4418 \u0275\u0275advance(4); 4419 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(5, 20, "bugReportAdmin.tech.positioningMode")); 4420 \u0275\u0275advance(3); 4421 \u0275\u0275textInterpolate(techData_r14.settings.positioningMode); 4422 \u0275\u0275advance(3); 4423 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(11, 22, "bugReportAdmin.tech.locationMode")); 4424 \u0275\u0275advance(3); 4425 \u0275\u0275textInterpolate(techData_r14.settings.locationMode); 4426 \u0275\u0275advance(3); 4427 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(17, 24, "bugReportAdmin.tech.r
4427ssiFilter")); 4428 \u0275\u0275advance(3); 4429 \u0275\u0275textInterpolate(techData_r14.settings.rssiFilterType); 4430 \u0275\u0275advance(3); 4431 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(23, 26, "bugReportAdmin.tech.kalmanFilter")); 4432 \u0275\u0275advance(3); 4433 \u0275\u0275classProp("true", techData_r14.settings.kalmanEnabled)("false", !techData_r14.settings.kalmanEnabled); 4434 \u0275\u0275advance(); 4435 \u0275\u0275property("name", techData_r14.settings.kalmanEnabled ? "checkmark-outline" : "close-sharp"); 4436 \u0275\u0275advance(); 4437 \u0275\u0275textInterpolate1(" ", techData_r14.settings.kalmanEnabled ? "Enabled" : "Disabled", " "); 4438 \u0275\u0275advance(3); 4439 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(31, 28, "bugReportAdmin.tech.smartSwitching")); 4440 \u0275\u0275advance(3); 4441 \u0275\u0275classProp("true", techData_r14.settings.smartSwitchingEnabled)("false", !techData_r14.settings.smartSwitchingEnabled); 4442 \u0275\u0275advance(); 4443 \u0275\u0275property("name", techData_r14.settings.smartSwitchingEnabled ? "checkmark-outline" : "close-sharp"); 4444 \u0275\u0275advance(); 4445 \u0275\u0275textInterpolate1(" ", techData_r14.settings.smartSwitchingEnabled ? "Enabled" : "Disabled", " "); 4446 } 4447} 4448function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_12_Template(rf, ctx) { 4449 if (rf & 1) { 4450 const _r23 = \u0275\u0275getCurrentView(); 4451 \u0275\u0275elementStart(0, "div", 73)(1, "div", 74); 4452 \u0275\u0275listener("click", function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_12_Template_div_click_1_listener() { 4453 \u0275\u0275restoreView(_r23); 4454 const report_r10 = \u0275\u0275nextContext(3).$implicit; 4455 const ctx_r1 = \u0275\u0275nextContext(2); 4456 return \u0275\u0275resetView(ctx_r1.toggleTechSection(report_r10.id, "settings")); 4457 }); 4458 \u0275\u0275element(2, "ion-icon", 90); 4459 \u0275\u0275elementStart(3, "span"); 4460 \u0275\u0275text(4); 4461 \u0275\u0275pipe(5, "translate"); 4462 \u0275\u0275elementEnd(); 4463 \u0275\u0275element(6, "ion-icon", 38); 4464 \u0275\u0275elementEnd(); 4465 \u0275\u0275template(7, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_12_Conditional_7_Template, 36, 30, "div", 76); 4466 \u0275\u0275elementEnd(); 4467 } 4468 if (rf & 2) { 4469 const report_r10 = \u0275\u0275nextContext(3).$implicit; 4470 const ctx_r1 = \u0275\u0275nextContext(2); 4471 \u0275\u0275advance(4); 4472 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(5, 3, "bugReportAdmin.tech.settings")); 4473 \u0275\u0275advance(2); 4474 \u0275\u0275property("name", ctx_r1.isTechSectionExpanded(report_r10.id, "settings") ? "chevron-up-outline" : "chevron-down-outline"); 4475 \u0275\u0275advance(); 4476 \u0275\u0275conditional(ctx_r1.isTechSectionExpanded(report_r10.id, "settings") ? 7 : -1); 4477 } 4478} 4479function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_13_Conditional_7_Conditional_2_Template(rf, ctx) { 4480 if (rf & 1) { 4481 \u0275\u0275elementStart(0, "div", 56)(1, "span", 57); 4482 \u0275\u0275text(2); 4483 \u0275\u0275pipe(3, "translate"); 4484 \u0275\u0275elementEnd(); 4485 \u0275\u0275elementStart(4, "span", 59); 4486 \u0275\u0275text(5); 4487 \u0275\u0275elementEnd()(); 4488 } 4489 if (rf & 2) { 4490 const techData_r14 = \u0275\u0275nextContext(3); 4491 \u0275\u0275advance(2); 4492 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 2, "bugReportAdmin.route")); 4493 \u0275\u0275advance(3); 4494 \u0275\u0275textInterpolate(techData_r14.route); 4495 } 4496} 4497function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_13_Conditional_7_Conditional_3_Template(rf, ctx) { 4498 if (rf & 1) { 4499 \u0275\u0275elementStart(0, "div", 56)(1, "span", 57); 4500 \u0275\u0275text(2); 4501 \u0275\u0275pipe(3, "translate"); 4502 \u0275\u0275elementEnd(); 4503 \u0275\u0275elementStart(4, "span", 58); 4504 \u0275\u0275text(5); 4505 \u0275\u0275elementEnd()(); 4506 } 4507 if (rf & 2) { 4508 const techData_r14 = \u0275\u0275nextContext(3); 4509 const ctx_r1 = \u0275\u0275nextContext(4); 4510 \u0275\u0275advance(2); 4511 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(3, 2, "bugReportAdmin.tech.timestamp")); 4512 \u0275\u0275advance(3); 4513 \u0275\u0275textInterpolate(ctx_r1.formatTimestamp(techData_r14.timestamp)); 4514 } 4515} 4516function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_13_Conditional_7_Template(rf, ctx) { 4517 if (rf & 1) { 4518 \u0275\u0275elementStart(0, "div", 76)(1, "div", 55); 4519 \u0275\u0275template(2, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_13_Conditional_7_Conditional_2_Template, 6, 4, "div", 56)(3, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_13_Conditional_7_Conditional_3_Template, 6, 4, "div", 56); 4520 \u0275\u0275elementEnd()(); 4521 } 4522 if (rf & 2) { 4523 const techData_r14 = \u0275\u0275nextContext(2); 4524 \u0275\u0275advance(2); 4525 \u0275\u0275conditional(techData_r14.route ? 2 : -1); 4526 \u0275\u0275advance(); 4527 \u0275\u0275conditional(techData_r14.timestamp ? 3 : -1); 4528 } 4529} 4530function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_13_Template(rf, ctx) { 4531 if (rf & 1) { 4532 const _r24 = \u0275\u0275getCurrentView(); 4533 \u0275\u0275elementStart(0, "div", 73)(1, "div", 74); 4534 \u0275\u0275listener("click", function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_13_Template_div_click_1_listener() { 4535 \u0275\u0275restoreView(_r24); 4536 const report_r10 = \u0275\u0275nextContext(3).$implicit; 4537 const ctx_r1 = \u0275\u0275nextContext(2);
4538 return \u0275\u0275resetView(ctx_r1.toggleTechSection(report_r10.id, "meta")); 4539 }); 4540 \u0275\u0275element(2, "ion-icon", 91); 4541 \u0275\u0275elementStart(3, "span"); 4542 \u0275\u0275text(4); 4543 \u0275\u0275pipe(5, "translate"); 4544 \u0275\u0275elementEnd(); 4545 \u0275\u0275element(6, "ion-icon", 38); 4546 \u0275\u0275elementEnd(); 4547 \u0275\u0275template(7, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_13_Conditional_7_Template, 4, 2, "div", 76); 4548 \u0275\u0275elementEnd(); 4549 } 4550 if (rf & 2) { 4551 const report_r10 = \u0275\u0275nextContext(3).$implicit; 4552 const ctx_r1 = \u0275\u0275nextContext(2); 4553 \u0275\u0275advance(4); 4554 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(5, 3, "bugReportAdmin.tech.meta")); 4555 \u0275\u0275advance(2); 4556 \u0275\u0275property("name", ctx_r1.isTechSectionExpanded(report_r10.id, "meta") ? "chevron-up-outline" : "chevron-down-outline"); 4557 \u0275\u0275advance(); 4558 \u0275\u0275conditional(ctx_r1.isTechSectionExpanded(report_r10.id, "meta") ? 7 : -1); 4559 } 4560} 4561function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Template(rf, ctx) { 4562 if (rf & 1) { 4563 \u0275\u0275elementStart(0, "div", 54)(1, "h4"); 4564 \u0275\u0275element(2, "ion-icon", 72); 4565 \u0275\u0275text(3); 4566 \u0275\u0275pipe(4, "translate"); 4567 \u0275\u0275elementEnd(); 4568 \u0275\u0275template(5, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_5_Template, 8, 5, "div", 73)(6, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_6_Template, 8, 5, "div", 73)(7, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_7_Template, 8, 5, "div", 73)(8, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_8_Template, 8, 5, "div", 73)(9, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_9_Template, 8, 6, "div", 73)(10, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_10_Template, 8, 5, "div", 73)(11, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_11_Template, 7, 2, "div", 73)(12, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_12_Template, 8, 5, "div", 73)(13, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Conditional_13_Template, 8, 5, "div", 73); 4569 \u0275\u0275elementEnd(); 4570 } 4571 if (rf & 2) { 4572 let tmp_22_0; 4573 const techData_r14 = ctx; 4574 \u0275\u0275advance(3); 4575 \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(4, 10, "bugReportAdmin.technicalData"), " "); 4576 \u0275\u0275advance(2); 4577 \u0275\u0275conditional(techData_r14.navigation ? 5 : -1); 4578 \u0275\u0275advance(); 4579 \u0275\u0275conditional(techData_r14.position || techData_r14.confidence ? 6 : -1); 4580 \u0275\u0275advance(); 4581 \u0275\u0275conditional(techData_r14.position.kalmanState ? 7 : -1); 4582 \u0275\u0275advance(); 4583 \u0275\u0275conditional(techData_r14.position.stablePair.primaryBeaconId ? 8 : -1); 4584 \u0275\u0275advance(); 4585 \u0275\u0275conditional(techData_r14.beacons ? 9 : -1); 4586 \u0275\u0275advance(); 4587 \u0275\u0275conditional(techData_r14.gps ? 10 : -1); 4588 \u0275\u0275advance(); 4589 \u0275\u0275conditional((tmp_22_0 = techData_r14.rendering) ? 11 : -1, tmp_22_0); 4590 \u0275\u0275advance(); 4591 \u0275\u0275conditional(techData_r14.settings ? 12 : -1); 4592 \u0275\u0275advance(); 4593 \u0275\u0275conditional(techData_r14.route || techData_r14.timestamp ? 13 : -1); 4594 } 4595} 4596function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_34_Template(rf, ctx) { 4597 if (rf & 1) { 4598 \u0275\u0275elementStart(0, "div", 54)(1, "h4"); 4599 \u0275\u0275element(2, "ion-icon", 92); 4600 \u0275\u0275text(3); 4601 \u0275\u0275pipe(4, "translate"); 4602 \u0275\u0275elementEnd(); 4603 \u0275\u0275elementStart(5, "p", 93); 4604 \u0275\u0275text(6); 4605 \u0275\u0275elementEnd()(); 4606 } 4607 if (rf & 2) { 4608 const report_r10 = \u0275\u0275nextContext(2).$implicit; 4609 \u0275\u0275advance(3); 4610 \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(4, 2, "bugReportAdmin.adminNotes"), " "); 4611 \u0275\u0275advance(3); 4612 \u0275\u0275textInterpolate(report_r10.adminNotes); 4613 } 4614} 4615function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_36_Template(rf, ctx) { 4616 if (rf & 1) { 4617 const _r25 = \u0275\u0275getCurrentView(); 4618 \u0275\u0275elementStart(0, "ion-button", 62); 4619 \u0275\u0275listener("click", function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_36_Template_ion_button_click_0_listener() { 4620 \u0275\u0275restoreView(_r25); 4621 const report_r10 = \u0275\u0275nextContext(2).$implicit; 4622 const ctx_r1 = \u0275\u0275nextContext(2);
4623 return \u0275\u0275resetView(ctx_r1.downloadScreenshot(report_r10)); 4624 }); 4625 \u0275\u0275element(1, "ion-icon", 71); 4626 \u0275\u0275text(2); 4627 \u0275\u0275pipe(3, "translate"); 4628 \u0275\u0275elementEnd(); 4629 } 4630 if (rf & 2) { 4631 \u0275\u0275advance(2); 4632 \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(3, 1, "bugReportAdmin.downloadImage"), " "); 4633 } 4634} 4635function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_37_Template(rf, ctx) { 4636 if (rf & 1) { 4637 const _r26 = \u0275\u0275getCurrentView(); 4638 \u0275\u0275elementStart(0, "ion-button", 62); 4639 \u0275\u0275listener("click", function BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_37_Template_ion_button_click_0_listener() { 4640 \u0275\u0275restoreView(_r26); 4641 const report_r10 = \u0275\u0275nextContext(2).$implicit; 4642 const ctx_r1 = \u0275\u0275nextContext(2); 4643 return \u0275\u0275resetView(ctx_r1.downloadRecording(report_r10)); 4644 }); 4645 \u0275\u0275element(1, "ion-icon", 71); 4646 \u0275\u0275text(2); 4647 \u0275\u0275pipe(3, "translate"); 4648 \u0275\u0275elementEnd(); 4649 } 4650 if (rf & 2) { 4651 \u0275\u0275advance(2); 4652 \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(3, 1, "bugReportAdmin.downloadRecording"), " "); 4653 } 4654} 4655function BugReportsPage_Conditional_24_For_2_Conditional_23_Template(rf, ctx) { 4656 if (rf & 1) { 4657 const _r11 = \u0275\u0275getCurrentView(); 4658 \u0275\u0275elementStart(0, "ion-card-content", 50); 4659 \u0275\u0275template(1, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_1_Template, 6, 4, "div", 52)(2, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_2_Template, 9, 6, "div", 53); 4660 \u0275\u0275elementStart(3, "div", 54)(4, "h4"); 4661 \u0275\u0275element(5, "ion-icon", 47); 4662 \u0275\u0275text(6); 4663 \u0275\u0275pipe(7, "translate"); 4664 \u0275\u0275elementEnd(); 4665 \u0275\u0275elementStart(8, "div", 55)(9, "div", 56)(10, "span", 57); 4666 \u0275\u0275text(11); 4667 \u0275\u0275pipe(12, "translate"); 4668 \u0275\u0275elementEnd(); 4669 \u0275\u0275elementStart(13, "span", 58); 4670 \u0275\u0275text(14); 4671 \u0275\u0275elementEnd()(); 4672 \u0275\u0275elementStart(15, "div", 56)(16, "span", 57); 4673 \u0275\u0275text(17); 4674 \u0275\u0275pipe(18, "translate"); 4675 \u0275\u0275elementEnd(); 4676 \u0275\u0275elementStart(19, "span", 58); 4677 \u0275\u0275text(20); 4678 \u0275\u0275elementEnd()(); 4679 \u0275\u0275elementStart(21, "div", 56)(22, "span", 57); 4680 \u0275\u0275text(23); 4681 \u0275\u0275pipe(24, "translate"); 4682 \u0275\u0275elementEnd(); 4683 \u0275\u0275elementStart(25, "span", 58); 4684 \u0275\u0275text(26); 4685 \u0275\u0275elementEnd()(); 4686 \u0275\u0275elementStart(27, "div", 56)(28, "span", 57); 4687 \u0275\u0275text(29); 4688 \u0275\u0275pipe(30, "translate"); 4689 \u0275\u0275elementEnd(); 4690 \u0275\u0275elementStart(31, "span", 59); 4691 \u0275\u0275text(32); 4692 \u0275\u0275elementEnd()()()(); 4693 \u0275\u0275template(33, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_33_Template, 14, 12, "div", 54)(34, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_34_Template, 7, 4, "div", 54); 4694 \u0275\u0275elementStart(35, "div", 60); 4695 \u0275\u0275template(36, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_36_Template, 4, 3, "ion-button", 61)(37, BugReportsPage_Conditional_24_For_2_Conditional_23_Conditional_37_Template, 4, 3, "ion-button", 61); 4696 \u0275\u0275elementStart(38, "ion-button", 62); 4697 \u0275\u0275listener("click", function BugReportsPage_Conditional_24_For_2_Conditional_23_Template_ion_button_click_38_listener() { 4698 \u0275\u0275restoreView(_r11); 4699 const report_r10 = \u0275\u0275nextContext().$implicit; 4700 const ctx_r1 = \u0275\u0275nextContext(2); 4701 return \u0275\u0275resetView(ctx_r1.downloadReportJson(report_r10)); 4702 }); 4703 \u0275\u0275element(39, "ion-icon", 63); 4704 \u0275\u0275text(40); 4705 \u0275\u0275pipe(41, "translate"); 4706 \u0275\u0275elementEnd(); 4707 \u0275\u0275elementStart(42, "ion-button", 62); 4708 \u0275\u0275listener("click", function BugReportsPage_Conditional_24_For_2_Conditional_23_Template_ion_button_click_42_listener() { 4709 \u0275\u0275restoreView(_r11); 4710 const report_r10 = \u0275\u0275nextContext().$implicit; 4711 const ctx_r1 = \u0275\u0275nextContext(2);
4712 return \u0275\u0275resetView(ctx_r1.downloadZip(report_r10)); 4713 }); 4714 \u0275\u0275element(43, "ion-icon", 64); 4715 \u0275\u0275text(44); 4716 \u0275\u0275pipe(45, "translate"); 4717 \u0275\u0275elementEnd(); 4718 \u0275\u0275elementStart(46, "ion-button", 62); 4719 \u0275\u0275listener("click", function BugReportsPage_Conditional_24_For_2_Conditional_23_Template_ion_button_click_46_listener() { 4720 \u0275\u0275restoreView(_r11); 4721 const report_r10 = \u0275\u0275nextContext().$implicit; 4722 const ctx_r1 = \u0275\u0275nextContext(2); 4723 return \u0275\u0275resetView(ctx_r1.updateStatus(report_r10)); 4724 }); 4725 \u0275\u0275element(47, "ion-icon", 65); 4726 \u0275\u0275text(48); 4727 \u0275\u0275pipe(49, "translate"); 4728 \u0275\u0275elementEnd(); 4729 \u0275\u0275elementStart(50, "ion-button", 66); 4730 \u0275\u0275listener("click", function BugReportsPage_Conditional_24_For_2_Conditional_23_Template_ion_button_click_50_listener() { 4731 \u0275\u0275restoreView(_r11); 4732 const report_r10 = \u0275\u0275nextContext().$implicit; 4733 const ctx_r1 = \u0275\u0275nextContext(2); 4734 return \u0275\u0275resetView(ctx_r1.confirmDelete(report_r10)); 4735 }); 4736 \u0275\u0275element(51, "ion-icon", 67); 4737 \u0275\u0275text(52); 4738 \u0275\u0275pipe(53, "translate"); 4739 \u0275\u0275elementEnd()()(); 4740 } 4741 if (rf & 2) { 4742 let tmp_13_0; 4743 let tmp_24_0; 4744 const report_r10 = \u0275\u0275nextContext().$implicit; 4745 const ctx_r1 = \u0275\u0275nextContext(2); 4746 \u0275\u0275advance(); 4747 \u0275\u0275conditional((tmp_13_0 = ctx_r1.getScreenshotUrl(report_r10)) ? 1 : -1, tmp_13_0); 4748 \u0275\u0275advance(); 4749 \u0275\u0275conditional(ctx_r1.getRecordingUrl(report_r10) ? 2 : -1); 4750 \u0275\u0275advance(4); 4751 \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(7, 19, "bugReportAdmin.deviceInfo"), " "); 4752 \u0275\u0275advance(5); 4753 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(12, 21, "bugReportAdmin.device")); 4754 \u0275\u0275advance(3); 4755 \u0275\u0275textInterpolate(report_r10.deviceModel || "-"); 4756 \u0275\u0275advance(3); 4757 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(18, 23, "bugReportAdmin.os")); 4758 \u0275\u0275advance(3); 4759 \u0275\u0275textInterpolate(report_r10.osVersion || "-"); 4760 \u0275\u0275advance(3); 4761 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(24, 25, "bugReportAdmin.appVersion")); 4762 \u0275\u0275advance(3); 4763 \u0275\u0275textInterpolate(report_r10.appVersion); 4764 \u0275\u0275advance(3); 4765 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(30, 27, "bugReportAdmin.deviceId")); 4766 \u0275\u0275advance(3); 4767 \u0275\u0275textInterpolate(report_r10.deviceIdentifier); 4768 \u0275\u0275advance(); 4769 \u0275\u0275conditional((tmp_24_0 = ctx_r1.parseTechnicalData(report_r10.technicalDataJson)) ? 33 : -1, tmp_24_0); 4770 \u0275\u0275advance(); 4771 \u0275\u0275conditional(report_r10.adminNotes ? 34 : -1); 4772 \u0275\u0275advance(2); 4773 \u0275\u0275conditional(ctx_r1.getScreenshotUrl(report_r10) ? 36 : -1); 4774 \u0275\u0275advance(); 4775 \u0275\u0275conditional(ctx_r1.getRecordingUrl(report_r10) ? 37 : -1); 4776 \u0275\u0275advance(3); 4777 \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(41, 29, "bugReportAdmin.downloadJson"), " "); 4778 \u0275\u0275advance(4); 4779 \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(45, 31, "bugReportAdmin.downloadZip"), " "); 4780 \u0275\u0275advance(4); 4781 \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(49, 33, "bugReportAdmin.changeStatus"), " "); 4782 \u0275\u0275advance(4); 4783 \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(53, 35, "common.delete"), " "); 4784 } 4785} 4786function BugReportsPage_Conditional_24_For_2_Template(rf, ctx) { 4787 if (rf & 1) { 4788 const _r9 = \u0275\u0275getCurrentView(); 4789 \u0275\u0275elementStart(0, "ion-card", 34)(1, "ion-card-header", 35); 4790 \u0275\u0275listener("click", function BugReportsPage_Conditional_24_For_2_Template_ion_card_header_click_1_listener() { 4791 const report_r10 = \u0275\u0275restoreView(_r9).$implicit; 4792 const ctx_r1 = \u0275\u0275nextContext(2);
4793 return \u0275\u0275resetView(ctx_r1.toggleExpand(report_r10.id)); 4794 }); 4795 \u0275\u0275elementStart(2, "div", 36)(3, "div", 37); 4796 \u0275\u0275element(4, "ion-icon", 38); 4797 \u0275\u0275elementEnd(); 4798 \u0275\u0275elementStart(5, "div", 39)(6, "div", 40)(7, "ion-badge", 41); 4799 \u0275\u0275text(8); 4800 \u0275\u0275elementEnd(); 4801 \u0275\u0275elementStart(9, "ion-badge", 42); 4802 \u0275\u0275text(10); 4803 \u0275\u0275elementEnd(); 4804 \u0275\u0275elementStart(11, "span", 43); 4805 \u0275\u0275text(12); 4806 \u0275\u0275elementEnd()(); 4807 \u0275\u0275elementStart(13, "p", 44); 4808 \u0275\u0275text(14); 4809 \u0275\u0275elementEnd(); 4810 \u0275\u0275elementStart(15, "div", 45)(16, "span", 46); 4811 \u0275\u0275element(17, "ion-icon", 47); 4812 \u0275\u0275text(18); 4813 \u0275\u0275elementEnd(); 4814 \u0275\u0275template(19, BugReportsPage_Conditional_24_For_2_Conditional_19_Template, 3, 1, "span", 46); 4815 \u0275\u0275elementStart(20, "span", 48); 4816 \u0275\u0275text(21); 4817 \u0275\u0275elementEnd()()(); 4818 \u0275\u0275element(22, "ion-icon", 49); 4819 \u0275\u0275elementEnd()(); 4820 \u0275\u0275template(23, BugReportsPage_Conditional_24_For_2_Conditional_23_Template, 54, 37, "ion-card-content", 50); 4821 \u0275\u0275elementEnd(); 4822 } 4823 if (rf & 2) { 4824 const report_r10 = ctx.$implicit; 4825 const ctx_r1 = \u0275\u0275nextContext(2); 4826 \u0275\u0275classProp("expanded", ctx_r1.isExpanded(report_r10.id)); 4827 \u0275\u0275advance(3); 4828 \u0275\u0275property("ngClass", ctx_r1.getStatusClass(report_r10.status)); 4829 \u0275\u0275advance(); 4830 \u0275\u0275property("name", ctx_r1.getStatusIcon(report_r10.status)); 4831 \u0275\u0275advance(3); 4832 \u0275\u0275property("color", ctx_r1.getStatusColor(report_r10.status)); 4833 \u0275\u0275advance(); 4834 \u0275\u0275textInterpolate1(" ", ctx_r1.getStatusLabel(report_r10.status), " "); 4835 \u0275\u0275advance(2); 4836 \u0275\u0275textInterpolate1(" ", ctx_r1.getCategoryLabel(report_r10.category), " "); 4837 \u0275\u0275advance(2); 4838 \u0275\u0275textInterpolate(ctx_r1.formatDate(report_r10.createdAt)); 4839 \u0275\u0275advance(2); 4840 \u0275\u0275textInterpolate(report_r10.description); 4841 \u0275\u0275advance(4); 4842 \u0275\u0275textInterpolate1(" ", report_r10.deviceModel || "Unknown device", " "); 4843 \u0275\u0275advance(); 4844 \u0275\u0275conditional(report_r10.campusName ? 19 : -1); 4845 \u0275\u0275advance(2); 4846 \u0275\u0275textInterpolate1(" v", report_r10.appVersion, " "); 4847 \u0275\u0275advance(); 4848 \u0275\u0275property("name", ctx_r1.isExpanded(report_r10.id) ? "chevron-up-outline" : "chevron-down-outline"); 4849 \u0275\u0275advance(); 4850 \u0275\u0275conditional(ctx_r1.isExpanded(report_r10.id) ? 23 : -1); 4851 } 4852} 4853function BugReportsPage_Conditional_24_Conditional_3_Conditional_2_Template(rf, ctx) { 4854 if (rf & 1) { 4855 \u0275\u0275element(0, "ion-spinner", 95); 4856 } 4857} 4858function BugReportsPage_Conditional_24_Conditional_3_Conditional_3_Template(rf, ctx) { 4859 if (rf & 1) { 4860 \u0275\u0275element(0, "ion-icon", 96); 4861 \u0275\u0275text(1); 4862 \u0275\u0275pipe(2, "translate"); 4863 } 4864 if (rf & 2) { 4865 \u0275\u0275advance(); 4866 \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind1(2, 1, "bugReportAdmin.loadMore"), " "); 4867 } 4868} 4869function BugReportsPage_Conditional_24_Conditional_3_Template(rf, ctx) { 4870 if (rf & 1) { 4871 const _r27 = \u0275\u0275getCurrentView(); 4872 \u0275\u0275elementStart(0, "div", 33)(1, "ion-button", 94); 4873 \u0275\u0275listener("click", function BugReportsPage_Conditional_24_Conditional_3_Template_ion_button_click_1_listener() { 4874 \u0275\u0275restoreView(_r27); 4875 const ctx_r1 = \u0275\u0275nextContext(2); 4876 return \u0275\u0275resetView(ctx_r1.loadMore()); 4877 }); 4878 \u0275\u0275template(2, BugReportsPage_Conditional_24_Conditional_3_Conditional_2_Template, 1, 0, "ion-spinner", 95)(3, BugReportsPage_Conditional_24_Conditional_3_Conditional_3_Template, 3, 3); 4879 \u0275\u0275elementEnd()(); 4880 } 4881 if (rf & 2) { 4882 const ctx_r1 = \u0275\u0275nextContext(2); 4883 \u0275\u0275advance(); 4884 \u0275\u0275property("disabled", ctx_r1.isLoadingMore); 4885 \u0275\u0275advance(); 4886 \u0275\u0275conditional(ctx_r1.isLoadingMore ? 2 : 3); 4887 } 4888} 4889function BugReportsPage_Conditional_24_Template(rf, ctx) { 4890 if (rf & 1) { 4891 \u0275\u0275elementStart(0, "ion-list", 31); 4892 \u0275\u0275repeaterCreate(1, BugReportsPage_Conditional_24_For_2_Template, 24, 14, "ion-card", 32, _forTrack1); 4893 \u0275\u0275elementEnd(); 4894 \u0275\u0275template(3, BugReportsPage_Conditional_24_Conditional_3_Template, 4, 2, "div", 33); 4895 } 4896 if (rf & 2) { 4897 const ctx_r1 = \u0275\u0275nextContext(); 4898 \u0275\u0275advance(); 4899 \u0275\u0275repeater(ctx_r1.reports); 4900 \u0275\u0275advance(2); 4901 \u0275\u0275conditional(ctx_r1.hasMore ? 3 : -1); 4902 } 4903} 4904var _BugReportsPage = class _BugReportsPage { 4905 constructor(bugReportService, apiUrlService, alertController, loadingController, toastController, translate, userCampusService, activatedRoute) { 4906 this.bugReportService = bugReportService; 4907 this.apiUrlService = apiUrlService; 4908 this.alertController = alertController; 4909 this.loadingController = loadingController; 4910 this.toastController = toastController; 4911 this.translate = translate; 4912 this.userCampusService = userCampusService; 4913 this.activatedRoute = activatedRoute;
4914 this.breadcrumbItems = buildAdminBreadcrumbs("bug-reports"); 4915 this.destroy$ = new Subject(); 4916 this.reports = []; 4917 this.totalCount = 0; 4918 this.currentPage = 1; 4919 this.pageSize = 20; 4920 this.hasMore = false; 4921 this.isLoading = false; 4922 this.isLoadingMore = false; 4923 this.error = null; 4924 this.filterStatus = ""; 4925 this.filterCategory = ""; 4926 this.selectedCampusId = ""; 4927 this.accessibleCampuses = []; 4928 this.showFilters = false; 4929 this.expandedReportIds = /* @__PURE__ */ new Set(); 4930 this.expandedTechSections = /* @__PURE__ */ new Map(); 4931 this.categories = BUG_REPORT_CATEGORIES; 4932 this.statuses = BUG_REPORT_STATUSES; 4933 addIcons({ 4934 refreshOutline, 4935 filterOutline, 4936 searchOutline, 4937 imageOutline, 4938 chevronDownOutline, 4939 chevronUpOutline, 4940 pulseOutline, 4941 trashOutline, 4942 ellipsisVerticalOutline, 4943 bugOutline, 4944 alertCircleOutline, 4945 closeOutline, 4946 phonePortraitOutline, 4947 businessOutline, 4948 syncOutline, 4949 codeSlashOutline, 4950 documentTextOutline, 4951 addCircleOutline, 4952 eyeOutline, 4953 searchCircleOutline, 4954 checkmarkCircleOutline, 4955 closeCircleOutline, 4956 navigateOutline, 4957 locationOutline, 4958 analyticsOutline, 4959 bluetoothOutline, 4960 radioOutline, 4961 settingsOutline, 4962 timeOutline, 4963 checkmarkOutline, 4964 closeSharp, 4965 downloadOutline, 4966 documentOutline, 4967 archiveOutline 4968 }); 4969 this.apiBaseUrl = this.apiUrlService.getSelectedUrl(); 4970 } 4971 ngOnInit() { 4972 this.selectedCampusId = this.activatedRoute.snapshot.queryParamMap.get("campus") || ""; 4973 this.userCampusService.getMyAccessibleCampuses().pipe(takeUntil(this.destroy$)).subscribe({ 4974 next: (response) => { 4975 this.accessibleCampuses = response.campuses || []; 4976 if (this.selectedCampusId && !this.accessibleCampuses.some((campus) => campus.id === this.selectedCampusId)) { 4977 this.selectedCampusId = ""; 4978 } 4979 this.loadReports(); 4980 }, 4981 error: () => this.loadReports() 4982 }); 4983 } 4984 ngOnDestroy() { 4985 this.destroy$.next(); 4986 this.destroy$.complete(); 4987 } 4988 loadReports(showLoading = true) { 4989 return __async(this, null, function* () { 4990 if (showLoading) { 4991 this.isLoading = true; 4992 } 4993 this.error = null; 4994 this.currentPage = 1; 4995 this.bugReportService.getReportList({ 4996 status: this.filterStatus || void 0, 4997 category: this.filterCategory || void 0, 4998 campusId: this.selectedCampusId || void 0, 4999 page: this.currentPage, 5000 pageSize: this.pageSize 5001 }).pipe(takeUntil(this.destroy$), finalize(() => { 5002 this.isLoading = false; 5003 })).subscribe({ 5004 next: (response) => { 5005 this.reports = response.reports; 5006 this.totalCount = response.totalCount; 5007 this.hasMore = response.hasMore; 5008 }, 5009 error: (err) => { 5010 console.error("Failed to load bug reports:", err); 5011 this.error = err.message || "Failed to load bug reports"; 5012 } 5013 }); 5014 }); 5015 } 5016 loadMore() { 5017 return __async(this, null, function* () { 5018 if (this.isLoadingMore || !this.hasMore) 5019 return; 5020 this.isLoadingMore = true; 5021 this.currentPage++; 5022 this.bugReportService.getReportList({ 5023 status: this.filterStatus || void 0, 5024 category: this.filterCategory || void 0, 5025 campusId: this.selectedCampusId || void 0, 5026 page: this.currentPage, 5027 pageSize: this.pageSize 5028 }).pipe(takeUntil(this.destroy$), finalize(() => { 5029 this.isLoadingMore = false; 5030 })).subscribe({ 5031 next: (response) => { 5032 this.reports = [...this.reports, ...response.reports]; 5033 this.hasMore = response.hasMore; 5034 }, 5035 error: (err) => { 5036 console.error("Failed to load more bug reports:", err); 5037 this.currentPage--; 5038 } 5039 }); 5040 }); 5041 } 5042 toggleFilters() { 5043 this.showFilters = !this.showFilters; 5044 } 5045 onFilterChange() { 5046 this.loadReports(); 5047 } 5048 clearFilters() { 5049 this.filterStatus = ""; 5050 this.filterCategory = ""; 5051 this.selectedCampusId = ""; 5052 this.loadReports(); 5053 } 5054 toggleExpand(reportId) { 5055 if (this.expandedReportIds.has(reportId)) { 5056 this.expandedReportIds.delete(reportId); 5057 } else { 5058 this.expandedReportIds.add(reportId); 5059 } 5060 } 5061 isExpanded(reportId) { 5062 return this.expandedReportIds.has(reportId); 5063 } 5064 // Technical data section expansion 5065 toggleTechSection(reportId, section) { 5066 if (!this.expandedTechSections.has(reportId)) {
5067 this.expandedTechSections.set(reportId, /* @__PURE__ */ new Set()); 5068 } 5069 const sections = this.expandedTechSections.get(reportId); 5070 if (sections.has(section)) { 5071 sections.delete(section); 5072 } else { 5073 sections.add(section); 5074 } 5075 } 5076 isTechSectionExpanded(reportId, section) { 5077 var _a, _b; 5078 return (_b = (_a = this.expandedTechSections.get(reportId)) == null ? void 0 : _a.has(section)) != null ? _b : false; 5079 } 5080 updateStatus(report) { 5081 return __async(this, null, function* () { 5082 const inputs = this.statuses.map((s) => ({ 5083 name: "status", 5084 type: "radio", 5085 label: this.translate.instant(s.labelKey), 5086 value: s.value, 5087 checked: report.status === s.value 5088 })); 5089 const alert = yield this.alertController.create({ 5090 header: this.translate.instant("bugReportAdmin.updateStatus"), 5091 inputs, 5092 buttons: [ 5093 { 5094 text: this.translate.instant("common.cancel"), 5095 role: "cancel" 5096 }, 5097 { 5098 text: this.translate.instant("common.update"), 5099 handler: (data) => { 5100 if (data && data !== report.status) { 5101 this.doUpdateStatus(report, data); 5102 } 5103 } 5104 } 5105 ] 5106 }); 5107 yield alert.present(); 5108 }); 5109 } 5110 doUpdateStatus(report, newStatus) { 5111 return __async(this, null, function* () { 5112 const loading = yield this.loadingController.create({ 5113 message: this.translate.instant("bugReportAdmin.updating") 5114 }); 5115 yield loading.present(); 5116 this.bugReportService.updateReportStatus(report.id, newStatus, report.adminNotes).pipe(takeUntil(this.destroy$), finalize(() => loading.dismiss())).subscribe({ 5117 next: (updated) => { 5118 const idx = this.reports.findIndex((r) => r.id === report.id); 5119 if (idx !== -1) { 5120 this.reports[idx] = updated; 5121 } 5122 this.presentToast(this.translate.instant("bugReportAdmin.statusUpdated"), "success"); 5123 }, 5124 error: (err) => { 5125 console.error("Failed to update status:", err); 5126 this.presentToast(this.translate.instant("bugReportAdmin.updateFailed"), "danger"); 5127 } 5128 }); 5129 }); 5130 } 5131 confirmDelete(report) { 5132 return __async(this, null, function* () { 5133 const alert = yield this.alertController.create({ 5134 header: this.translate.instant("bugReportAdmin.confirmDelete"), 5135 message: this.translate.instant("bugReportAdmin.deleteMessage"), 5136 buttons: [ 5137 { 5138 text: this.translate.instant("common.cancel"), 5139 role: "cancel" 5140 }, 5141 { 5142 text: this.translate.instant("common.delete"), 5143 handler: () => this.doDelete(report) 5144 } 5145 ] 5146 }); 5147 yield alert.present(); 5148 }); 5149 } 5150 doDelete(report) { 5151 return __async(this, null, function* () { 5152 const loading = yield this.loadingController.create({ 5153 message: this.translate.instant("bugReportAdmin.deleting") 5154 }); 5155 yield loading.present(); 5156 this.bugReportService.deleteReport(report.id).pipe(takeUntil(this.destroy$), finalize(() => loading.dismiss())).subscribe({ 5157 next: () => { 5158 this.reports = this.reports.filter((r) => r.id !== report.id); 5159 this.totalCount--; 5160 this.presentToast(this.translate.instant("bugReportAdmin.deleted"), "success"); 5161 }, 5162 error: (err) => { 5163 console.error("Failed to delete report:", err); 5164 this.presentToast(this.translate.instant("bugReportAdmin.deleteFailed"), "danger"); 5165 } 5166 }); 5167 }); 5168 } 5169 presentToast(message, color) { 5170 return __async(this, null, function* () { 5171 const toast = yield this.toastController.create({ 5172 message, 5173 duration: 2e3, 5174 color, 5175 position: "bottom" 5176 }); 5177 yield toast.present(); 5178 }); 5179 } 5180 // Helpers 5181 getScreenshotUrl(report) { 5182 if (report.screenshotUrl) { 5183 return this.apiBaseUrl + report.screenshotUrl; 5184 } 5185 return null; 5186 } 5187 getRecordingUrl(report) { 5188 if (report.recordingUrl) { 5189 return this.apiBaseUrl + report.recordingUrl; 5190 } 5191 return null; 5192 } 5193 getStatusColor(status) { 5194 switch (status) { 5195 case "new": 5196 return "primary"; 5197 case "acknowledged": 5198 return "warning"; 5199 case "in_progress": 5200 return "tertiary"; 5201 case "resolved": 5202 return "success"; 5203 case "closed": 5204 return "medium"; 5205 default: 5206 return "medium"; 5207 } 5208 } 5209 getStatusClass(status) { 5210 switch (status) { 5211 case "new": 5212 return "status-new"; 5213 case "acknowledged": 5214 return "status-acknowledged"; 5215 case "in_progress": 5216 return "status-investigating"; 5217 case "resolved": 5218 return "status-resolved"; 5219 case "closed": 5220 return "status-closed"; 5221 default: 5222 return "status-new"; 5223 } 5224 } 5225 getStatusIcon(status) { 5226 switch (status) { 5227 case "new": 5228 return "add-circle-outline"; 5229 case "acknowledged": 5230 return "eye-outline"; 5231 case "in_progress": 5232 return "search-circle-outline"; 5233 case "resolved": 5234 return "checkmark-circle-outline"; 5235 case "closed": 5236 return "close-circle-outline"; 5237 default: 5238 return "bug-outline"; 5239 } 5240 } 5241 getCategoryLabel(category) { 5242 const cat = this.categories.find((c) => c.value === category); 5243 return cat ? this.translate.instant(cat.labelKey) : category; 5244 } 5245 getStatusLabel(status) { 5246 const s = this.statuses.find((st) => st.value === status); 5247 return s ? this.translate.instant(s.labelKey) : status; 5248 } 5249 formatDate(date) { 5250 const d = new Date(date); 5251 const now = /* @__PURE__ */ new Date(); 5252 const diff = now.getTime() - d.getTime(); 5253 if (diff < 24 * 60 * 60 * 1e3) { 5254 const hours = Math.floor(diff / (60 * 60 * 1e3)); 5255 if (hours < 1) { 5256 const minutes = Math.floor(diff / (60 * 1e3)); 5257 return `${minutes}m ago`; 5258 } 5259 return `${hours}h ago`; 5260 } 5261 if (diff < 7 * 24 * 60 * 60 * 1e3) { 5262 const days = Math.floor(diff / (24 * 60 * 60 * 1e3)); 5263 return `${days}d ago`; 5264 } 5265 return RigaDateTimeService.formatInRiga(d, { year: "numeric", month: "short", day: "
5265numeric" }); 5266 } 5267 parseTechnicalData(json) { 5268 if (!json) 5269 return null; 5270 try { 5271 return JSON.parse(json); 5272 } catch { 5273 return null; 5274 } 5275 } 5276 hasActiveFilters() { 5277 return !!this.filterStatus || !!this.filterCategory || !!this.selectedCampusId; 5278 } 5279 // Formatting helpers for technical data 5280 formatDistanceCm(cm) { 5281 if (cm === void 0 || cm === null) 5282 return "-"; 5283 if (cm >= 100) { 5284 return `${(cm / 100).toFixed(1)}m`; 5285 } 5286 return `${Math.round(cm)}cm`; 5287 } 5288 formatTimeSince(ms) { 5289 if (ms === void 0 || ms === null) 5290 return "-"; 5291 if (ms >= 1e3) { 5292 return `${(ms / 1e3).toFixed(1)}s`; 5293 } 5294 return `${Math.round(ms)}ms`; 5295 } 5296 formatCoord(val) { 5297 if (val === void 0 || val === null) 5298 return "-"; 5299 return Math.round(val).toString(); 5300 } 5301 formatConfidence(raw, adjusted) { 5302 if (raw === void 0 || raw === null) 5303 return "-"; 5304 const rawStr = raw.toFixed(2); 5305 if (adjusted !== void 0 && adjusted !== null) { 5306 return `${rawStr} (${adjusted.toFixed(2)})`; 5307 } 5308 return rawStr; 5309 } 5310 formatGpsCoord(val) { 5311 if (val === void 0 || val === null) 5312 return "-"; 5313 return val.toFixed(6); 5314 } 5315 formatTimestamp(ts) { 5316 if (!ts) 5317 return "-"; 5318 try { 5319 const d = new Date(ts); 5320 return RigaDateTimeService.formatInRiga(d, { 5321 year: "numeric", 5322 month: "short", 5323 day: "numeric", 5324 hour: "2-digit", 5325 minute: "2-digit", 5326 second: "2-digit" 5327 }); 5328 } catch { 5329 return ts; 5330 } 5331 } 5332 /** 5333 * Download screenshot image for a bug report 5334 */ 5335 downloadScreenshot(report) { 5336 return __async(this, null, function* () { 5337 var _a; 5338 const screenshotUrl = this.getScreenshotUrl(report); 5339 if (!screenshotUrl) 5340 return; 5341 try { 5342 const response = yield fetch(screenshotUrl); 5343 if (!response.ok) 5344 throw new Error(`HTTP ${response.status}`); 5345 const blob = yield response.blob(); 5346 const filename = `bugreport-${(_a = report.id) == null ? void 0 : _a.substring(0, 8)}-screenshot.jpg`; 5347 this.triggerDownload(blob, filename); 5348 this.presentToast(this.translate.instant("bugReportAdmin.downloadSuccess"), "success"); 5349 } catch (error) { 5350 console.error("Failed to download screenshot:", error); 5351 this.presentToast(this.translate.instant("bugReportAdmin.downloadFailed"), "danger"); 5352 } 5353 }); 5354 } 5355 /** 5356 * Download signal recording JSON for a bug report 5357 */ 5358 downloadRecording(report) { 5359 return __async(this, null, function* () { 5360 var _a; 5361 const recordingUrl = this.getRecordingUrl(report); 5362 if (!recordingUrl) 5363 return; 5364 try { 5365 const response = yield fetch(recordingUrl); 5366 if (!response.ok) 5367 throw new Error(`HTTP ${response.status}`); 5368 const blob = yield response.blob(); 5369 const filename = `bugreport-${(_a = report.id) == null ? void 0 : _a.substring(0, 8)}-recording.json`; 5370 this.triggerDownload(blob, filename); 5371 this.presentToast(this.translate.instant("bugReportAdmin.downloadSuccess"), "success"); 5372 } catch (error) { 5373 console.error("Failed to download signal recording:", error); 5374 this.presentToast(this.translate.instant("bugReportAdmin.downloadFailed"), "danger"); 5375 } 5376 }); 5377 } 5378 /** 5379 * Download full bug report as JSON 5380 */ 5381 downloadReportJson(report) { 5382 var _a; 5383 try { 5384 const exportData = { 5385 id: report.id, 5386 description: report.description, 5387 category: report.category, 5388 status: report.status, 5389 createdAt: report.createdAt, 5390 updatedAt: report.updatedAt, 5391 deviceIdentifier: report.deviceIdentifier, 5392 deviceModel: report.deviceModel, 5393 osVersion: report.osVersion, 5394 appVersion: report.appVersion, 5395 campusId: report.campusId, 5396 campusName: report.campusName, 5397 adminNotes: report.adminNotes, 5398 technicalData: this.parseTechnicalData(report.technicalDataJson) 5399 }; 5400 const json = JSON.stringify(exportData, null, 2); 5401 const blob = new Blob([json], { type: "application/json" }); 5402 const date = new Date(report.createdAt).toISOString().split("T")[0]; 5403 const filename = `bugreport-${(_a = report.id) == null ? void 0 : _a.substring(0, 8)}-${date}.json`; 5404 this.triggerDownload(blob, filename); 5405 this.presentToast(this.translate.instant("bugReportAdmin.downloadSuccess"), "success"); 5406 } catch (error) { 5407 console.error("Failed to download report JSON:", error); 5408 this.presentToast(this.translate.instant("bugReportAdmin.downloadFailed"), "danger"); 5409 } 5410 } 5411 /** 5412 * Download bug report as ZIP containing JSON and screenshot 5413 */ 5414 downloadZip(report) { 5415 return __async(this, null, function* () { 5416 var _a, _b;
5417 try { 5418 const zip = new import_jszip.default(); 5419 const idPrefix = (_b = (_a = report.id) == null ? void 0 : _a.substring(0, 8)) != null ? _b : "unknown"; 5420 const date = new Date(report.createdAt).toISOString().split("T")[0]; 5421 const exportData = { 5422 id: report.id, 5423 description: report.description, 5424 category: report.category, 5425 status: report.status, 5426 createdAt: report.createdAt, 5427 updatedAt: report.updatedAt, 5428 deviceIdentifier: report.deviceIdentifier, 5429 deviceModel: report.deviceModel, 5430 osVersion: report.osVersion, 5431 appVersion: report.appVersion, 5432 campusId: report.campusId, 5433 campusName: report.campusName, 5434 adminNotes: report.adminNotes, 5435 technicalData: this.parseTechnicalData(report.technicalDataJson) 5436 }; 5437 zip.file("report.json", JSON.stringify(exportData, null, 2)); 5438 const screenshotUrl = this.getScreenshotUrl(report); 5439 if (screenshotUrl) { 5440 const response = yield fetch(screenshotUrl); 5441 if (response.ok) { 5442 const blob = yield response.blob(); 5443 zip.file("screenshot.jpg", blob); 5444 } 5445 } 5446 const recordingUrl = this.getRecordingUrl(report); 5447 if (recordingUrl) { 5448 try { 5449 const response = yield fetch(recordingUrl); 5450 if (response.ok) { 5451 const blob = yield response.blob(); 5452 zip.file("signal-recording.json", blob); 5453 } 5454 } catch (recordingError) { 5455 console.warn("Failed to include signal recording in ZIP:", recordingError); 5456 } 5457 } 5458 const zipBlob = yield zip.generateAsync({ type: "blob" }); 5459 this.triggerDownload(zipBlob, `bugreport-${idPrefix}-${date}.zip`); 5460 this.presentToast(this.translate.instant("bugReportAdmin.downloadSuccess"), "success"); 5461 } catch (error) { 5462 console.error("Failed to create ZIP:", error); 5463 this.presentToast(this.translate.instant("bugReportAdmin.downloadFailed"), "danger"); 5464 } 5465 }); 5466 } 5467 /** 5468 * Trigger browser download for a blob 5469 */ 5470 triggerDownload(blob, filename) { 5471 const url = URL.createObjectURL(blob); 5472 const a = document.createElement("a"); 5473 a.href = url; 5474 a.download = filename; 5475 document.body.appendChild(a); 5476 a.click(); 5477 document.body.removeChild(a); 5478 URL.revokeObjectURL(url); 5479 } 5480}; 5481_BugReportsPage.\u0275fac = function BugReportsPage_Factory(__ngFactoryType__) { 5482 return new (__ngFactoryType__ || _BugReportsPage)(\u0275\u0275directiveInject(BugReportService), \u0275\u0275directiveInject(ApiUrlService), \u0275\u0275directiveInject(AlertController), \u0275\u0275directiveInject(LoadingController), \u0275\u0275directiveInject(ToastController), \u0275\u0275directiveInject(TranslateService), \u0275\u0275directiveInject(UserCampusService), \u0275\u0275directiveInject(ActivatedRoute)); 5483}; 5484_BugReportsPage.\u0275cmp = /* @__PURE__ */ \u0275\u0275defineComponent({ type: _BugReportsPage, selectors: [["app-bug-reports"]], decls: 25, vars: 24, consts: [[3, "fullscreen"], [1, "admin-navigation", 3, "items"], [1, "admin-content"], [1, "stats-bar"], [1, "stats-icon-wrapper"], ["name", "bug-outline"], [1, "stats-info"], [1, "stats-label"], [1, "stats-value"], [1, "admin-page-actions"], ["fill", "clear", 3, "click", "color"], ["slot", "icon-only", "name", "filter-outline"], ["fill", "clear", 3, "click"], ["slot", "icon-only", "name", "refresh-outline"], [1, "filter-toolbar"], [1, "loading-container"], [1, "error-container"], [1, "empty-state"], [1, "filter-row"], ["interface", "popover", 1, "filter-select", 3, "ngModelChange", "ionChange", "ngModel", "placeholder"], ["value", ""], [3, "value"], ["fill", "clear", "size", "small", 1, "clear-filters-btn"], ["fill", "clear", "size", "small", 1, "clear-filters-btn", 3, "click"], ["slot", "start", "name", "close-outline"], [1, "error-icon-wrapper"], ["name", "alert-circle-outline"], [3, "click"], ["slot", "start", "name", "refresh-outline"], [1, "empty-state-card"], [1, "empty-icon-wrapper"], [1, "report-list"], [1, "report-card", 3, "expanded"], [1, "load-more"], [1, "report-card"], [1, "report-header", 3, "click"], [1, "report-header-inner"], [1, "report-icon-wrapper", 3, "ngClass"], [3, "name"], [1, "report-header-content"], [1, "report-status-row"], [1, "status-badge", 3, "color"], ["color", "light", 1, "category-badge"], [1, "report-time"], [1, "report-description"], [1, "report-meta"], [1, "meta-item"], ["name", "phone-portrait-outline"], [1, "meta-item", "version"], [1, "expand-icon", 3, "name"], [1, "report-details"], ["name", "business-outline"], [1, "detail-section", "screenshot-section"], [1, "detail-section", "recording-section"], [1, "detail-section"], [1, "detail-grid"], [1, "detail-item"], [1, "detail-label"], [1, "detail-value"], [1, "detail-value", "device-id"], [1, "actions-row"], ["fill", "outline", "size", "small"], ["fill", "outline", "size", "small", 3, "click"], ["slot", "start", "name", "document-outline"], ["slot", "start", "name", "archive-outline"], ["slot", "start", "name", "sync-outline"], ["fill", "outline", "size", "small", "color", "danger", 3, "click"], ["slot", "start", "name", "trash-outline"], ["name", "image-outline"], ["alt", "Bug report screenshot", 1, "screenshot-img", 3, "src"], ["name", "pulse-outline"], ["slot", "start", "name", "download-outline"], ["name", "code-slash-outline"], [1, "tech-section"], [1, "tech-section-header", 3, "click"], ["name", "navigate-outline"], [1, "tech-section-content"], [1, "bool-indicator"], ["name", "location-outline"], [1, "source-badge", 3, "ngClass"], ["name", "anal
5484ytics-outline"], ["name", "radio-outline"], [1, "device-id"], ["name", "bluetooth-outline"], [1, "beacon-table-wrapper"], [1, "beacon-table"], [1, "beacon-name"], [1, "monospace"], ["name", "hardware-chip-outline"], [1, "error-message"], ["name", "settings-outline"], ["name", "time-outline"], ["name", "document-text-outline"], [1, "admin-notes"], ["fill", "outline", 3, "click", "disabled"], ["name", "crescent"], ["slot", "start", "name", "chevron-down-outline"]], template: function BugReportsPage_Template(rf, ctx) { 5485 if (rf & 1) { 5486 \u0275\u0275elementStart(0, "ion-content", 0); 5487 \u0275\u0275element(1, "app-breadcrumb-navigation", 1); 5488 \u0275\u0275elementStart(2, "div", 2)(3, "div", 3)(4, "div", 4); 5489 \u0275\u0275element(5, "ion-icon", 5); 5490 \u0275\u0275elementEnd(); 5491 \u0275\u0275elementStart(6, "div", 6)(7, "span", 7); 5492 \u0275\u0275text(8); 5493 \u0275\u0275pipe(9, "translate"); 5494 \u0275\u0275elementEnd(); 5495 \u0275\u0275elementStart(10, "span", 8); 5496 \u0275\u0275text(11); 5497 \u0275\u0275pipe(12, "translate"); 5498 \u0275\u0275elementEnd()(); 5499 \u0275\u0275elementStart(13, "div", 9)(14, "ion-button", 10); 5500 \u0275\u0275pipe(15, "translate"); 5501 \u0275\u0275listener("click", function BugReportsPage_Template_ion_button_click_14_listener() { 5502 return ctx.toggleFilters(); 5503 }); 5504 \u0275\u0275element(16, "ion-icon", 11); 5505 \u0275\u0275elementEnd(); 5506 \u0275\u0275elementStart(17, "ion-button", 12); 5507 \u0275\u0275pipe(18, "translate"); 5508 \u0275\u0275listener("click", function BugReportsPage_Template_ion_button_click_17_listener() { 5509 return ctx.loadReports(); 5510 }); 5511 \u0275\u0275element(19, "ion-icon", 13); 5512 \u0275\u0275elementEnd()()(); 5513 \u0275\u0275template(20, BugReportsPage_Conditional_20_Template, 24, 22, "div", 14)(21, BugReportsPage_Conditional_21_Template, 5, 3, "div", 15)(22, BugReportsPage_Conditional_22_Template, 11, 4, "div", 16)(23, BugReportsPage_Conditional_23_Template, 10, 4, "div", 17)(24, BugReportsPage_Conditional_24_Template, 4, 1); 5514 \u0275\u0275elementEnd()(); 5515 } 5516 if (rf & 2) { 5517 \u0275\u0275property("fullscreen", true); 5518 \u0275\u0275advance(); 5519 \u0275\u0275property("items", ctx.breadcrumbItems); 5520 \u0275\u0275advance(7); 5521 \u0275\u0275textInterpolate(\u0275\u0275pipeBind1(9, 12, "bugReportAdmin.title")); 5522 \u0275\u0275advance(3); 5523 \u0275\u0275textInterpolate1(" ", \u0275\u0275pipeBind2(12, 14, "bugReportAdmin.showingReports", \u0275\u0275pureFunction2(21, _c0, ctx.reports.length, ctx.totalCount)), " "); 5524 \u0275\u0275advance(3); 5525 \u0275\u0275property("color", ctx.hasActiveFilters() ? "primary" : ""); 5526 \u0275\u0275attribute("aria-label", \u0275\u0275pipeBind1(15, 17, "bugReportAdmin.toggleFilters")); 5527 \u0275\u0275advance(3); 5528 \u0275\u0275attribute("aria-label", \u0275\u0275pipeBind1(18, 19, "bugReportAdmin.refresh")); 5529 \u0275\u0275advance(3); 5530 \u0275\u0275conditional(ctx.showFilters ? 20 : -1); 5531 \u0275\u0275advance(); 5532 \u0275\u0275conditional(ctx.isLoading ? 21 : -1); 5533 \u0275\u0275advance(); 5534 \u0275\u0275conditional(ctx.error && !ctx.isLoading ? 22 : -1); 5535 \u0275\u0275advance(); 5536 \u0275\u0275conditional(!ctx.isLoading && !ctx.error && ctx.reports.length === 0 ? 23 : -1); 5537 \u0275\u0275advance(); 5538 \u0275\u0275conditional(!ctx.isLoading && !ctx.error && ctx.reports.length > 0 ? 24 : -1); 5539 } 5540}, dependencies: [CommonModule, NgClass, UpperCasePipe, FormsModule, NgControlStatus, NgModel, IonicModule, IonBadge, IonButton, IonCard, IonCardContent, IonCardHeader, IonContent, IonIcon, IonList, IonSelect, IonSelectOption, IonSpinner, SelectValueAccessorDirective, TranslateModule, TranslatePipe, BreadcrumbNavigationComponent], styles: ["\n\n.admin-navigation[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n z-index: 20;\n display: block;\n}\n.admin-page-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n margin-left: auto;\n flex-shrink: 0;\n}\n.admin-container[_ngcontent-%COMP%] {\n min-height: 100%;\n background: var(--ion-background-color);\n padding-top: constant(safe-area-inset-top);\n padding-top: env(safe-area-inset-top);\n padding-top: var(--safe-area-inset-top, 0px);\n}\n.admin-content[_ngcontent-%COMP%] {\n padding: 1rem;\n max-width: 900px;\n margin: 0 auto;\n}\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 200px;\n padding: 2rem;\n}\n.loading-container[_ngcontent-%COMP%] ion-spinner[_ngcontent-%COMP%] {\n margin-bottom: 1rem;\n width: 48px;\n height: 48px;\n --color: var(--ion-color-primary);\n}\n.loading-container[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n color: var(--ion-color-medium);\n font-size: 0.95rem;\n margin: 0;\n}\n.error-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 3rem 2rem;\n text-align: center;\n}\n.error-container[_ngcontent-%COMP%] .error-icon-wrapper[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background:\n linear-gradient(\n 135deg,\n rgba(239, 68, 68, 0.15) 0%,\n rgba(239, 68, 68, 0.05) 100%);\n border-radius: 50%;\n margin-bottom: 1.5rem;\n}\n.error-container[_ngcontent-%COMP%] .error-icon-wrapper[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n font-size: 40px;\n color: #ef4444;\n}\n.error-container[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 1.25rem;\n font-weight: 600;\n margin: 0 0 0.5rem;\n color: var(--ion-text-color);\n}\n.error-container[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n color: var(--ion-color-medium);\n margin: 0 0 1.5rem;\n font-size: 0.95rem;\n}\n.error-container[_ngcontent-%COMP%] ion-button[_ngcontent-%COMP%] {\n --box-sha
5540dow: 0 4px 12px rgba(var(--ion-color-primary-rgb), 0.3);\n}\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: calc(100vh - 350px);\n padding: 2rem;\n}\n.empty-state-card[_ngcontent-%COMP%] {\n text-align: center;\n max-width: 400px;\n}\n.empty-state-card[_ngcontent-%COMP%] .empty-icon-wrapper[_ngcontent-%COMP%] {\n width: 100px;\n height: 100px;\n display: flex;\n align-items: center;\n justify-content: center;\n background:\n linear-gradient(\n 135deg,\n rgba(var(--ion-color-medium-rgb), 0.1) 0%,\n rgba(var(--ion-color-medium-rgb), 0.05) 100%);\n border-radius: 24px;\n margin: 0 auto 1.5rem;\n}\n.empty-state-card[_ngcontent-%COMP%] .empty-icon-wrapper[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n color: var(--ion-color-medium);\n opacity: 0.6;\n}\n.empty-state-card[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 1.5rem;\n font-weight: 600;\n color: var(--ion-text-color);\n margin: 0 0 0.5rem;\n}\n.empty-state-card[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 1rem;\n color: var(--ion-color-medium);\n margin: 0 0 2rem;\n line-height: 1.5;\n}\n.empty-state-card[_ngcontent-%COMP%] ion-button[_ngcontent-%COMP%] {\n --box-shadow: 0 4px 12px rgba(var(--ion-color-primary-rgb), 0.3);\n --padding-start: 20px;\n --padding-end: 24px;\n --padding-top: 12px;\n --padding-bottom: 12px;\n font-weight: 600;\n font-size: 1rem;\n}\n.empty-state-card[_ngcontent-%COMP%] ion-button[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n --box-shadow: 0 6px 20px rgba(var(--ion-color-primary-rgb), 0.4);\n}\n.nav-card[_ngcontent-%COMP%] {\n margin-bottom: 1rem;\n border-radius: 16px;\n overflow: hidden;\n box-shadow: 0 4px 16px var(--shadow-color-light);\n cursor: pointer;\n transition: all 0.3s ease;\n}\n.nav-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 24px var(--shadow-color-light);\n}\n.nav-card[_ngcontent-%COMP%]:hover .nav-icon-wrapper[_ngcontent-%COMP%] {\n transform: scale(1.05);\n}\n.nav-card[_ngcontent-%COMP%] ion-card-content[_ngcontent-%COMP%] {\n padding: 0;\n}\n.nav-card-inner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 1rem;\n padding: 1.25rem;\n}\n.nav-icon-wrapper[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n display: flex;\n align-items: center;\n justify-content: center;\n background:\n linear-gradient(\n 135deg,\n var(--ion-color-primary),\n var(--ion-color-primary-shade));\n border-radius: 14px;\n flex-shrink: 0;\n transition: transform 0.3s ease;\n}\n.nav-icon-wrapper[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n font-size: 28px;\n color: white;\n}\n.nav-card-text[_ngcontent-%COMP%] {\n flex: 1;\n}\n.nav-card-text[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 4px;\n font-size: 1.1rem;\n font-weight: 600;\n color: var(--ion-text-color);\n}\n.nav-card-text[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.9rem;\n color: var(--ion-color-medium);\n line-height: 1.4;\n}\n.nav-arrow[_ngcontent-%COMP%] {\n color: var(--ion-color-medium);\n opacity: 0.5;\n font-size: 1.5rem;\n transition: transform 0.2s ease;\n}\n.nav-card[_ngcontent-%COMP%]:hover .nav-arrow[_ngcontent-%COMP%] {\n transform: translateX(4px);\n opacity: 0.8;\n}\n.section-card[_ngcontent-%COMP%] {\n margin-bottom: 1rem;\n border-radius: 16px;\n overflow: hidden;\n box-shadow: 0 4px 16px var(--shadow-color-light);\n}\n.section-card[_ngcontent-%COMP%] ion-card-header[_ngcontent-%COMP%] {\n padding: 1.25rem;\n background: var(--ion-item-background);\n}\n.section-card[_ngcontent-%COMP%] ion-card-content[_ngcontent-%COMP%] {\n padding: 1rem 1.25rem 1.25rem;\n}\n.section-header-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 1rem;\n flex-wrap: wrap;\n}\n.section-header-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 200px;\n}\n.section-header-info[_ngcontent-%COMP%] ion-card-title[_ngcontent-%COMP%] {\n font-size: 1.25rem;\n font-weight: 700;\n margin-bottom: 0.25rem;\n}\n.section-header-info[_ngcontent-%COMP%] ion-card-subtitle[_ngcontent-%COMP%] {\n font-size: 0.9rem;\n color: var(--ion-color-medium);\n}\n.section-header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 0.5rem;\n}\n.section-header-actions[_ngcontent-%COMP%] ion-button[_ngcontent-%COMP%] {\n --box-sha
5540dow: 0 2px 8px rgba(var(--ion-color-primary-rgb), 0.25);\n font-weight: 600;\n}\n.section-header-actions[_ngcontent-%COMP%] ion-button[_ngcontent-%COMP%]:hover {\n --box-shadow: 0 4px 12px rgba(var(--ion-color-primary-rgb), 0.35);\n}\n.info-notice[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 14px 16px;\n margin-bottom: 1rem;\n background:\n linear-gradient(\n 135deg,\n rgba(var(--ion-color-primary-rgb), 0.12) 0%,\n rgba(var(--ion-color-primary-rgb), 0.06) 100%);\n border-radius: 12px;\n border-left: 4px solid var(--ion-color-primary);\n}\n.info-notice[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n flex-shrink: 0;\n font-size: 1.5rem;\n color: var(--ion-color-primary);\n}\n.info-notice[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 0.9rem;\n color: var(--ion-text-color);\n line-height: 1.4;\n}\n.custom-searchbar[_ngcontent-%COMP%] {\n --background: var(--ion-item-background);\n --box-shadow: 0 2px 12px var(--shadow-color-light);\n --border-radius: 12px;\n --placeholder-opacity: 0.6;\n margin-bottom: 1rem;\n padding: 0;\n}\n.custom-searchbar.searchbar-has-value[_ngcontent-%COMP%] {\n --clear-button-color: var(--ion-color-medium);\n}\n.list-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n margin: 1.5rem 0 1rem;\n}\n.list-section-header[_ngcontent-%COMP%]:first-child {\n margin-top: 0;\n}\n.list-section-header[_ngcontent-%COMP%] .section-icon[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n color: var(--ion-color-primary);\n}\n.list-section-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n flex: 1;\n margin: 0;\n font-size: 1.1rem;\n font-weight: 600;\n color: var(--ion-text-color);\n}\n.list-section-header[_ngcontent-%COMP%] .count-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 32px;\n height: 28px;\n padding: 0 12px;\n background:\n linear-gradient(\n 135deg,\n rgba(var(--ion-color-primary-rgb), 0.15) 0%,\n rgba(var(--ion-color-primary-rgb), 0.08) 100%);\n color: var(--ion-color-primary);\n font-size: 0.85rem;\n font-weight: 600;\n border-radius: 14px;\n}\n.entity-list[_ngcontent-%COMP%] {\n background: transparent;\n margin-bottom: 1rem;\n padding: 0;\n}\n.entity-list[_ngcontent-%COMP%] ion-item[_ngcontent-%COMP%] {\n margin-bottom: 0.75rem;\n border-radius: 14px;\n overflow: hidden;\n box-shadow: 0 2px 12px var(--shadow-color-light);\n}\n.entity-item[_ngcontent-%COMP%] {\n --background: var(--ion-item-background);\n --padding-start: 1rem;\n --padding-end: 1rem;\n --inner-padding-end: 0;\n --min-height: 84px;\n --transition: all 0.2s ease;\n --border-color: transparent;\n position: relative;\n}\n.entity-item[_ngcontent-%COMP%]::part(native) {\n border-radius: 14px;\n}\n.entity-item[_ngcontent-%COMP%]:hover {\n --background: var(--ion-color-step-50);\n}\n.entity-item[_ngcontent-%COMP%]:hover .entity-icon-wrapper[_ngcontent-%COMP%] {\n transform: scale(1.05);\n}\n.entity-item[_ngcontent-%COMP%]:hover .entity-icon-wrapper[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n transform: scale(1.1);\n}\n.entity-item[_ngcontent-%COMP%] ion-label[_ngcontent-%COMP%] {\n margin: 0.75rem 0;\n}\n.entity-item[_ngcontent-%COMP%] ion-label[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 1.05rem;\n font-weight: 600;\n color: var(--ion-text-color);\n margin-bottom: 0.25rem;\n}\n.entity-item[_ngcontent-%COMP%] ion-label[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 0.9rem;\n color: var(--ion-color-medium);\n margin: 0.2rem 0;\n line-height: 1.4;\n}\n.entity-icon-wrapper[_ngcontent-%COMP%] {\n --icon-color: var(--ion-color-primary);\n --icon-rgb: var(--ion-color-primary-rgb);\n width: 56px;\n height: 56px;\n display: flex;\n align-items: center;\n justify-content: center;\n background:\n linear-gradient(\n 135deg,\n rgba(var(--icon-rgb), 0.15) 0%,\n rgba(var(--icon-rgb), 0.06) 100%);\n border-radius: 14px;\n margin-right: 1rem;\n flex-shrink: 0;\n transition: all 0.3s ease;\n}\n.entity-icon-wrapper[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n font-size: 1.75rem;\n color: var(--icon-color);\n transition: transform 0.3s ease;\n}\n.entity-icon-wrapper.role-superadmin[_ngcontent-%COMP%] {\n --icon-color: #6030ff;\n --icon-rgb:\n 96,\n 48,\n 255;\n}\n.entity-icon-wrapper.role-admin[_ngcontent-%COMP%] {\n --icon-color: #c5000f;\n --icon-rgb:\n 197,\n 0,\n 15;\n}
5540\n.entity-icon-wrapper.role-moderator[_ngcontent-%COMP%] {\n --icon-color: #f59e0b;\n --icon-rgb:\n 245,\n 158,\n 11;\n}\n.entity-icon-wrapper.role-user[_ngcontent-%COMP%] {\n --icon-color: var(--ion-color-primary);\n --icon-rgb: var(--ion-color-primary-rgb);\n}\n.role-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n border-radius: 6px;\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.02em;\n}\n.role-badge.role-superadmin[_ngcontent-%COMP%] {\n background: rgba(96, 48, 255, 0.15);\n color: #6030ff;\n}\n.role-badge.role-admin[_ngcontent-%COMP%] {\n background: rgba(197, 0, 15, 0.15);\n color: #c5000f;\n}\n.role-badge.role-moderator[_ngcontent-%COMP%] {\n background: rgba(245, 158, 11, 0.15);\n color: #f59e0b;\n}\n.role-badge.role-user[_ngcontent-%COMP%] {\n background: rgba(var(--ion-color-primary-rgb), 0.15);\n color: var(--ion-color-primary);\n}\n.meta-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 0.5rem;\n font-size: 0.85rem;\n color: var(--ion-color-medium);\n}\n.meta-info[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n font-size: 1rem;\n opacity: 0.7;\n}\n.action-buttons[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n}\n.action-buttons[_ngcontent-%COMP%] ion-button[_ngcontent-%COMP%] {\n --padding-start: 10px;\n --padding-end: 10px;\n --padding-top: 10px;\n --padding-bottom: 10px;\n margin: 0;\n}\n.action-buttons[_ngcontent-%COMP%] ion-button[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n font-size: 1.25rem;\n}\n.action-buttons[_ngcontent-%COMP%] ion-button[_ngcontent-%COMP%]:hover {\n --background-hover: var(--ion-color-light);\n}\n.action-buttons[_ngcontent-%COMP%] .desktop-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n}\n.action-buttons[_ngcontent-%COMP%] .mobile-menu-button[_ngcontent-%COMP%] {\n display: none;\n}\n.edit-form-card[_ngcontent-%COMP%] {\n border-radius: 16px;\n overflow: hidden;\n box-shadow: 0 4px 20px var(--shadow-color-light);\n}\n.edit-form-card[_ngcontent-%COMP%] ion-card-header[_ngcontent-%COMP%] {\n padding: 1.25rem;\n background:\n linear-gradient(\n 135deg,\n rgba(var(--ion-color-primary-rgb), 0.08) 0%,\n rgba(var(--ion-color-primary-rgb), 0.02) 100%);\n border-bottom: 1px solid var(--ion-border-color);\n}\n.edit-form-card[_ngcontent-%COMP%] ion-card-content[_ngcontent-%COMP%] {\n padding: 1.5rem;\n}\n.edit-form-card[_ngcontent-%COMP%] ion-item[_ngcontent-%COMP%] {\n --background: transparent;\n --border-color: var(--ion-border-color);\n margin-bottom: 1rem;\n}\n.edit-form-card[_ngcontent-%COMP%] ion-item[_ngcontent-%COMP%]:last-of-type {\n margin-bottom: 0;\n}\n.form-actions[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n gap: 1rem;\n padding-top: 1.5rem;\n margin-top: 1.5rem;\n border-top: 1px solid var(--ion-border-color);\n}\n.form-actions[_ngcontent-%COMP%] ion-button[_ngcontent-%COMP%] {\n min-width: 120px;\n}\n@keyframes _ngcontent-%COMP%_slideIn {\n from {\n opacity: 0;\n transform: translateX(-12px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n@keyframes _ngcontent-%COMP%_fadeIn {\n from {\n opacity: 0;\n transform: translateY(8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.entity-item[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_slideIn 0.35s ease-out;\n animation-fill-mode: both;\n}\n.entity-item[_ngcontent-%COMP%]:nth-child(1) {\n animation-delay: 0.04s;\n}\n.entity-item[_ngcontent-%COMP%]:nth-child(2) {\n animation-delay: 0.08s;\n}\n.entity-item[_ngcontent-%COMP%]:nth-child(3) {\n animation-delay: 0.12s;\n}\n.entity-item[_ngcontent-%COMP%]:nth-child(4) {\n animation-delay: 0.16s;\n}\n.entity-item[_ngcontent-%COMP%]:nth-child(5) {\n animation-delay: 0.2s;\n}\n.entity-item[_ngcontent-%COMP%]:nth-child(6) {\n animation-delay: 0.24s;\n}\n.entity-item[_ngcontent-%COMP%]:nth-child(7) {\n animation-delay: 0.28s;\n}\n.entity-item[_ngcontent-%COMP%]:nth-child(8) {\n animation-delay: 0.32s;\n}\n.entity-item[_ngcontent-%COMP%]:nth-child(9) {\n animation-delay: 0.36s;\n}\n.entity-item[_ngcontent-%COMP%]:nth-child(10) {\n animation-delay: 0.4s;\n}\n.entity-item[_ngcontent-%COMP%]:nth-child(11) {\n animation-delay: 0.44s;\n}\n.entity-item[_ngcontent-%COMP%]:nth-child(12) {\n animation-delay: 0.48s;\n}\n.entity-item[_ngcontent-%COMP%]:nth-child(13) {\n animation-delay: 0.52s;\n}\n.entity-item[_ngcontent-%COMP%]:nth-child(14) {\n animation-delay: 0.56s;\n}\n.entity-item[_ngcontent-%COMP%]:nth-child(15) {\n animation-delay: 0.6s;\n}
5540\n.entity-item[_ngcontent-%COMP%]:nth-child(16) {\n animation-delay: 0.64s;\n}\n.entity-item[_ngcontent-%COMP%]:nth-child(17) {\n animation-delay: 0.68s;\n}\n.entity-item[_ngcontent-%COMP%]:nth-child(18) {\n animation-delay: 0.72s;\n}\n.entity-item[_ngcontent-%COMP%]:nth-child(19) {\n animation-delay: 0.76s;\n}\n.entity-item[_ngcontent-%COMP%]:nth-child(20) {\n animation-delay: 0.8s;\n}\n.nav-card[_ngcontent-%COMP%], \n.section-card[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_fadeIn 0.4s ease-out;\n}\n@media (max-width: 768px) {\n .admin-content[_ngcontent-%COMP%] {\n padding: 0.75rem;\n }\n .section-header-row[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n gap: 0.75rem;\n }\n .section-header-actions[_ngcontent-%COMP%] {\n justify-content: flex-end;\n }\n .entity-item[_ngcontent-%COMP%] {\n --min-height: 76px;\n --padding-start: 0.75rem;\n --padding-end: 0.75rem;\n }\n .entity-icon-wrapper[_ngcontent-%COMP%] {\n width: 46px;\n height: 46px;\n margin-right: 0.75rem;\n border-radius: 12px;\n }\n .entity-icon-wrapper[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n font-size: 1.5rem;\n }\n .action-buttons[_ngcontent-%COMP%] {\n gap: 0;\n }\n .action-buttons[_ngcontent-%COMP%] .desktop-actions[_ngcontent-%COMP%] {\n display: none;\n }\n .action-buttons[_ngcontent-%COMP%] .mobile-menu-button[_ngcontent-%COMP%] {\n display: flex;\n }\n ion-label[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 1rem;\n }\n ion-label[_ngcontent-%COMP%] .meta-info[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n gap: 4px;\n }\n ion-label[_ngcontent-%COMP%] .meta-info[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n font-size: 0.9rem;\n }\n .nav-card-inner[_ngcontent-%COMP%] {\n padding: 1rem;\n }\n .nav-icon-wrapper[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: 12px;\n }\n .nav-icon-wrapper[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n font-size: 24px;\n }\n}\n@media (prefers-color-scheme: dark) {\n .nav-card[_ngcontent-%COMP%], \n .section-card[_ngcontent-%COMP%], \n .entity-list[_ngcontent-%COMP%] ion-item[_ngcontent-%COMP%] {\n box-shadow: 0 2px 12px rgba(0, 0, 0, 0.3);\n }\n .info-notice[_ngcontent-%COMP%] {\n background:\n linear-gradient(\n 135deg,\n rgba(var(--ion-color-primary-rgb), 0.2) 0%,\n rgba(var(--ion-color-primary-rgb), 0.1) 100%);\n }\n}\n.filter-toolbar[_ngcontent-%COMP%] {\n background: var(--ion-item-background, var(--ion-background-color, #ffffff));\n padding: 0.75rem 1rem;\n border: 1px solid var(--ion-border-color, var(--ion-color-step-200, #e2e8f0));\n border-radius: 12px;\n margin-bottom: 1rem;\n}\n.filter-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 0.75rem;\n align-items: center;\n flex-wrap: wrap;\n}\n.filter-select[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 140px;\n max-width: 200px;\n --padding-start: 12px;\n --padding-end: 12px;\n font-size: 14px;\n background: var(--ion-background-color);\n border-radius: 10px;\n border: 1px solid var(--ion-border-color);\n}\n.filter-select[_ngcontent-%COMP%]:hover {\n border-color: var(--ion-color-primary);\n}\n.clear-filters-btn[_ngcontent-%COMP%] {\n --color: var(--ion-color-medium);\n font-weight: 500;\n}\n.clear-filters-btn[_ngcontent-%COMP%]:hover {\n --color: var(--ion-color-primary);\n}\n.stats-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 1rem;\n padding: 1rem 1.25rem;\n background: var(--ion-item-background);\n border-radius: 14px;\n margin-bottom: 1rem;\n box-shadow: 0 2px 12px var(--shadow-color-light);\n}\n.stats-icon-wrapper[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n background:\n linear-gradient(\n 135deg,\n rgba(var(--ion-color-primary-rgb), 0.15) 0%,\n rgba(var(--ion-color-primary-rgb), 0.06) 100%);\n border-radius: 12px;\n flex-shrink: 0;\n}\n.stats-icon-wrapper[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n font-size: 1.5rem;\n color: var(--ion-color-primary);\n}\n.stats-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n.stats-label[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n color: var(--ion-color-medium);\n}\n.stats-value[_ngcontent-%COMP%] {\n font-size: 0.95rem;\n color: var(--ion-text-color);\n}\n.report-list[_ngcontent-%COMP%] {\n background: transparent;\n padding: 0;\n}\n.report-card[_ngcontent-%COMP%] {\n margin: 0 0 0.75rem 0;\n border-radius: 14px;\n overflow: hidden;\n box-shadow: 0 2px 12px var(--shadow-color-light);\n transition: all 0.3s ease;\n animation: _ngcontent-%COMP%_fadeSlideIn 0.35s ease-out;\n animation-fill-mode: both;\n}\n.report-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 4px 20px var(--shadow-color-light);\n}\n.report-card.expanded[_ngcontent-%COMP%] {\n box-shadow: 0 6px 24px var(--shadow-color-light);\n}
5540\n.report-card[_ngcontent-%COMP%]:nth-child(1) {\n animation-delay: 0.04s;\n}\n.report-card[_ngcontent-%COMP%]:nth-child(2) {\n animation-delay: 0.08s;\n}\n.report-card[_ngcontent-%COMP%]:nth-child(3) {\n animation-delay: 0.12s;\n}\n.report-card[_ngcontent-%COMP%]:nth-child(4) {\n animation-delay: 0.16s;\n}\n.report-card[_ngcontent-%COMP%]:nth-child(5) {\n animation-delay: 0.2s;\n}\n.report-card[_ngcontent-%COMP%]:nth-child(6) {\n animation-delay: 0.24s;\n}\n.report-card[_ngcontent-%COMP%]:nth-child(7) {\n animation-delay: 0.28s;\n}\n.report-card[_ngcontent-%COMP%]:nth-child(8) {\n animation-delay: 0.32s;\n}\n.report-card[_ngcontent-%COMP%]:nth-child(9) {\n animation-delay: 0.36s;\n}\n.report-card[_ngcontent-%COMP%]:nth-child(10) {\n animation-delay: 0.4s;\n}\n.report-card[_ngcontent-%COMP%]:nth-child(11) {\n animation-delay: 0.44s;\n}\n.report-card[_ngcontent-%COMP%]:nth-child(12) {\n animation-delay: 0.48s;\n}\n.report-card[_ngcontent-%COMP%]:nth-child(13) {\n animation-delay: 0.52s;\n}\n.report-card[_ngcontent-%COMP%]:nth-child(14) {\n animation-delay: 0.56s;\n}\n.report-card[_ngcontent-%COMP%]:nth-child(15) {\n animation-delay: 0.6s;\n}\n.report-card[_ngcontent-%COMP%]:nth-child(16) {\n animation-delay: 0.64s;\n}\n.report-card[_ngcontent-%COMP%]:nth-child(17) {\n animation-delay: 0.68s;\n}\n.report-card[_ngcontent-%COMP%]:nth-child(18) {\n animation-delay: 0.72s;\n}\n.report-card[_ngcontent-%COMP%]:nth-child(19) {\n animation-delay: 0.76s;\n}\n.report-card[_ngcontent-%COMP%]:nth-child(20) {\n animation-delay: 0.8s;\n}\n@keyframes _ngcontent-%COMP%_fadeSlideIn {\n from {\n opacity: 0;\n transform: translateY(8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.report-header[_ngcontent-%COMP%] {\n cursor: pointer;\n padding: 1rem 1.25rem;\n transition: background 0.2s ease;\n}\n.report-header[_ngcontent-%COMP%]:hover {\n background: var(--ion-color-step-50);\n}\n.report-header-inner[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 1rem;\n}\n.report-icon-wrapper[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n flex-shrink: 0;\n transition: transform 0.3s ease;\n}\n.report-icon-wrapper[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n font-size: 1.5rem;\n transition: transform 0.3s ease;\n}\n.report-header[_ngcontent-%COMP%]:hover .report-icon-wrapper[_ngcontent-%COMP%] {\n transform: scale(1.05);\n}\n.report-header[_ngcontent-%COMP%]:hover .report-icon-wrapper[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n transform: scale(1.1);\n}\n.report-icon-wrapper.status-new[_ngcontent-%COMP%] {\n background:\n linear-gradient(\n 135deg,\n rgba(59, 130, 246, 0.15) 0%,\n rgba(59, 130, 246, 0.06) 100%);\n}\n.report-icon-wrapper.status-new[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n color: #3b82f6;\n}\n.report-icon-wrapper.status-acknowledged[_ngcontent-%COMP%] {\n background:\n linear-gradient(\n 135deg,\n rgba(245, 158, 11, 0.15) 0%,\n rgba(245, 158, 11, 0.06) 100%);\n}\n.report-icon-wrapper.status-acknowledged[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n color: #f59e0b;\n}\n.report-icon-wrapper.status-investigating[_ngcontent-%COMP%] {\n background:\n linear-gradient(\n 135deg,\n rgba(139, 92, 246, 0.15) 0%,\n rgba(139, 92, 246, 0.06) 100%);\n}\n.report-icon-wrapper.status-investigating[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n color: #8b5cf6;\n}\n.report-icon-wrapper.status-resolved[_ngcontent-%COMP%] {\n background:\n linear-gradient(\n 135deg,\n rgba(16, 185, 129, 0.15) 0%,\n rgba(16, 185, 129, 0.06) 100%);\n}\n.report-icon-wrapper.status-resolved[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n color: #10b981;\n}\n.report-icon-wrapper.status-closed[_ngcontent-%COMP%] {\n background:\n linear-gradient(\n 135deg,\n rgba(107, 114, 128, 0.15) 0%,\n rgba(107, 114, 128, 0.06) 100%);\n}\n.report-icon-wrapper.status-closed[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n color: #6b7280;\n}\n.report-header-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n.report-status-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n margin-bottom: 8px;\n}\n.status-badge[_ngcontent-%COMP%] {\n font-size: 0.7rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n padding: 4px 10px;\n}\n.category-badge[_ngcontent-%COMP%] {\n font-size: 0.7rem;\n font-weight: 500;\n padding: 4px 10px;\n}
5540\n.report-time[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n color: var(--ion-color-medium);\n margin-left: auto;\n}\n.report-description[_ngcontent-%COMP%] {\n font-size: 0.95rem;\n line-height: 1.5;\n color: var(--ion-text-color);\n margin: 0 0 10px 0;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n.report-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n flex-wrap: wrap;\n}\n.meta-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 0.8rem;\n color: var(--ion-color-medium);\n}\n.meta-item[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n font-size: 1rem;\n opacity: 0.7;\n}\n.meta-item.version[_ngcontent-%COMP%] {\n padding: 2px 8px;\n background: var(--ion-color-light);\n border-radius: 4px;\n font-family: monospace;\n font-size: 0.75rem;\n}\n.expand-icon[_ngcontent-%COMP%] {\n font-size: 1.25rem;\n color: var(--ion-color-medium);\n opacity: 0.6;\n transition: transform 0.2s ease;\n flex-shrink: 0;\n margin-top: 4px;\n}\n.report-card.expanded[_ngcontent-%COMP%] .expand-icon[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n.report-details[_ngcontent-%COMP%] {\n border-top: 1px solid var(--ion-border-color);\n padding: 1.25rem;\n background: var(--ion-color-step-50);\n animation: _ngcontent-%COMP%_expandIn 0.3s ease-out;\n}\n@keyframes _ngcontent-%COMP%_expandIn {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.detail-section[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n}\n.detail-section[_ngcontent-%COMP%]:last-of-type {\n margin-bottom: 0;\n}\n.detail-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.8rem;\n font-weight: 600;\n color: var(--ion-color-medium);\n margin: 0 0 12px 0;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n.detail-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n font-size: 1.1rem;\n opacity: 0.8;\n}\n.screenshot-section[_ngcontent-%COMP%] .screenshot-img[_ngcontent-%COMP%] {\n width: 100%;\n max-width: 400px;\n border-radius: 12px;\n border: 1px solid var(--ion-border-color);\n box-shadow: 0 2px 12px var(--shadow-color-light);\n}\n.detail-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\n gap: 1rem;\n}\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 12px;\n background: var(--ion-item-background);\n border-radius: 10px;\n border: 1px solid var(--ion-border-color);\n}\n.detail-label[_ngcontent-%COMP%] {\n font-size: 0.7rem;\n font-weight: 600;\n color: var(--ion-color-medium);\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n.detail-value[_ngcontent-%COMP%] {\n font-size: 0.9rem;\n color: var(--ion-text-color);\n word-break: break-word;\n}\n.detail-value.device-id[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 0.8rem;\n}\n.admin-notes[_ngcontent-%COMP%] {\n font-size: 0.9rem;\n color: var(--ion-text-color);\n background: var(--ion-item-background);\n padding: 1rem;\n border-radius: 10px;\n border: 1px solid var(--ion-border-color);\n margin: 0;\n line-height: 1.5;\n}\n.actions-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 0.75rem;\n flex-wrap: wrap;\n padding-top: 1rem;\n margin-top: 1.5rem;\n border-top: 1px solid var(--ion-border-color);\n}\n.actions-row[_ngcontent-%COMP%] ion-button[_ngcontent-%COMP%] {\n --border-radius: 10px;\n font-weight: 500;\n}\n.load-more[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n padding: 1.5rem;\n}\n.load-more[_ngcontent-%COMP%] ion-button[_ngcontent-%COMP%] {\n --border-radius: 12px;\n --padding-start: 24px;\n --padding-end: 24px;\n font-weight: 500;\n}\n@media (max-width: 768px) {\n .filter-row[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n gap: 0.5rem;\n }\n .filter-select[_ngcontent-%COMP%] {\n max-width: none;\n }
5540\n .stats-bar[_ngcontent-%COMP%] {\n padding: 0.875rem 1rem;\n }\n .stats-icon-wrapper[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n }\n .stats-icon-wrapper[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n font-size: 1.25rem;\n }\n .report-header[_ngcontent-%COMP%] {\n padding: 0.875rem 1rem;\n }\n .report-icon-wrapper[_ngcontent-%COMP%] {\n width: 42px;\n height: 42px;\n }\n .report-icon-wrapper[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n font-size: 1.25rem;\n }\n .report-time[_ngcontent-%COMP%] {\n width: 100%;\n margin-left: 0;\n margin-top: 4px;\n order: 1;\n }\n .report-meta[_ngcontent-%COMP%] {\n gap: 10px;\n }\n .meta-item[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n }\n .detail-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n .report-details[_ngcontent-%COMP%] {\n padding: 1rem;\n }\n .actions-row[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n .actions-row[_ngcontent-%COMP%] ion-button[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n.tech-section[_ngcontent-%COMP%] {\n margin-bottom: 0.75rem;\n border: 1px solid var(--ion-border-color);\n border-radius: 10px;\n overflow: hidden;\n}\n.tech-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n.tech-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background: var(--ion-item-background);\n cursor: pointer;\n font-weight: 600;\n font-size: 0.8rem;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n color: var(--ion-color-medium);\n transition: background 0.2s ease;\n}\n.tech-section-header[_ngcontent-%COMP%]:hover {\n background: var(--ion-color-step-50);\n}\n.tech-section-header[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%]:first-child {\n font-size: 1.1rem;\n opacity: 0.8;\n}\n.tech-section-header[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%]:last-child {\n margin-left: auto;\n font-size: 1rem;\n opacity: 0.6;\n}\n.tech-section-content[_ngcontent-%COMP%] {\n padding: 12px;\n background: var(--ion-color-step-50);\n animation: _ngcontent-%COMP%_expandIn 0.2s ease-out;\n}\n.beacon-table-wrapper[_ngcontent-%COMP%] {\n overflow-x: auto;\n margin-top: 12px;\n border-radius: 8px;\n border: 1px solid var(--ion-border-color);\n}\n.beacon-table[_ngcontent-%COMP%] {\n width: 100%;\n font-size: 0.8rem;\n border-collapse: collapse;\n min-width: 500px;\n}\n.beacon-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n.beacon-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 8px 12px;\n text-align: left;\n white-space: nowrap;\n}\n.beacon-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background: var(--ion-color-step-100);\n font-weight: 600;\n text-transform: uppercase;\n font-size: 0.7rem;\n color: var(--ion-color-medium);\n letter-spacing: 0.03em;\n}\n.beacon-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--ion-border-color);\n background: var(--ion-item-background);\n}\n.beacon-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%] {\n border-bottom: none;\n}\n.beacon-table[_ngcontent-%COMP%] .monospace[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 0.75rem;\n}\n.beacon-table[_ngcontent-%COMP%] .beacon-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--ion-text-color);\n}\n.bool-indicator[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 0.85rem;\n}\n.bool-indicator[_ngcontent-%COMP%] ion-icon[_ngcontent-%COMP%] {\n font-size: 1rem;\n}\n.bool-indicator.true[_ngcontent-%COMP%] {\n color: var(--ion-color-success);\n}\n.bool-indicator.false[_ngcontent-%COMP%] {\n color: var(--ion-color-medium);\n}\n.source-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n.source-badge.beacon[_ngcontent-%COMP%] {\n background: rgba(59, 130, 246, 0.15);\n color: #3b82f6;\n}\n.source-badge.gps[_ngcontent-%COMP%] {\n background: rgba(16, 185, 129, 0.15);\n color: #10b981;\n}\n.source-badge.none[_ngcontent-%COMP%] {\n background: var(--ion-color-light);\n color: var(--ion-color-medium);\n}
5540\n@media (prefers-color-scheme: dark) {\n .stats-bar[_ngcontent-%COMP%], \n .report-card[_ngcontent-%COMP%] {\n box-shadow: 0 2px 12px rgba(0, 0, 0, 0.3);\n }\n .report-card.expanded[_ngcontent-%COMP%] {\n box-shadow: 0 6px 24px rgba(0, 0, 0, 0.4);\n }\n .report-details[_ngcontent-%COMP%] {\n background: var(--ion-color-step-100);\n }\n .detail-item[_ngcontent-%COMP%] {\n background: var(--ion-background-color);\n }\n .tech-section-content[_ngcontent-%COMP%] {\n background: var(--ion-color-step-100);\n }\n .beacon-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n background: var(--ion-background-color);\n }\n .beacon-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background: var(--ion-color-step-150);\n }\n}"] }); 5541var BugReportsPage = _BugReportsPage; 5542(() => { 5543 (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(BugReportsPage, [{ 5544 type: Component, 5545 args: [{ selector: "app-bug-reports", standalone: true, imports: [ 5546 CommonModule, 5547 FormsModule, 5548 IonicModule, 5549 TranslateModule, 5550 BreadcrumbNavigationComponent 5551 ], template: `<ion-content [fullscreen]="true"> 5552 <app-breadcrumb-navigation class="admin-navigation" [items]="breadcrumbItems"></app-breadcrumb-navigation> 5553 5554 <div class="admin-content"> 5555 <!-- Stats Bar --> 5556 <div class="stats-bar"> 5557 <div class="stats-icon-wrapper"> 5558 <ion-icon name="bug-outline"></ion-icon> 5559 </div> 5560 <div class="stats-info"> 5561 <span class="stats-label">{{ 'bugReportAdmin.title' | translate }}</span> 5562 <span class="stats-value"> 5563 {{ 'bugReportAdmin.showingReports' | translate: { count: reports.length, total: totalCount } }} 5564 </span> 5565 </div>
5566 <div class="admin-page-actions"> 5567 <ion-button fill="clear" (click)="toggleFilters()" [color]="hasActiveFilters() ? 'primary' : ''" [attr.aria-label]="'bugReportAdmin.toggleFilters' | translate"> 5568 <ion-icon slot="icon-only" name="filter-outline"></ion-icon> 5569 </ion-button> 5570 <ion-button fill="clear" (click)="loadReports()" [attr.aria-label]="'bugReportAdmin.refresh' | translate"> 5571 <ion-icon slot="icon-only" name="refresh-outline"></ion-icon> 5572 </ion-button> 5573 </div> 5574 </div> 5575 5576 <!-- Filters --> 5577 @if (showFilters) { 5578 <div class="filter-toolbar"> 5579 <div class="filter-row"> 5580 <ion-select 5581 [(ngModel)]="filterStatus" 5582 (ionChange)="onFilterChange()" 5583 [placeholder]="'bugReportAdmin.filterStatus' | translate" 5584 interface="popover" 5585 class="filter-select"> 5586 <ion-select-option value="">{{ 'bugReportAdmin.allStatuses' | translate }}</ion-select-option> 5587 @for (status of statuses; track status.value) { 5588 <ion-select-option [value]="status.value"> 5589 {{ status.labelKey | translate }} 5590 </ion-select-option> 5591 } 5592 </ion-select> 5593 5594 <ion-select 5595 [(ngModel)]="filterCategory" 5596 (ionChange)="onFilterChange()" 5597 [placeholder]="'bugReportAdmin.filterCategory' | translate" 5598 interface="popover" 5599 class="filter-select"> 5600 <ion-select-option value="">{{ 'bugReportAdmin.allCategories' | translate }}</ion-select-option> 5601 @for (cat of categories; track cat.value) { 5602 <ion-select-option [value]="cat.value"> 5603 {{ cat.labelKey | translate }} 5604 </ion-select-option> 5605 } 5606 </ion-select> 5607 5608 <ion-select 5609 [(ngModel)]="selectedCampusId" 5610 (ionChange)="onFilterChange()" 5611 [placeholder]="'admin.users.campusFilter' | translate" 5612 interface="popover" 5613 class="filter-select"> 5614 <ion-select-option value="">{{ 'admin.users.allCampuses' | translate }}</ion-select-option> 5615 @for (campus of accessibleCampuses; track campus.id) { 5616 <ion-select-option [value]="campus.id">{{ campus.name }}</ion-select-option> 5617 } 5618 </ion-select> 5619 5620 @if (hasActiveFilters()) { 5621 <ion-button fill="clear" size="small" (click)="clearFilters()" class="clear-filters-btn"> 5622 <ion-icon slot="start" name="close-outline"></ion-icon> 5623 {{ 'bugReportAdmin.clearFilters' | translate }} 5624 </ion-button> 5625 } 5626 </div> 5627 </div> 5628 } 5629 5630 <!-- Loading State --> 5631 @if (isLoading) { 5632 <div class="loading-container"> 5633 <ion-spinner></ion-spinner> 5634 <p>{{ 'bugReportAdmin.loading' | translate }}</p> 5635 </div> 5636 } 5637 5638 <!-- Error State --> 5639 @if (error && !isLoading) { 5640 <div class="error-container"> 5641 <div class="error-icon-wrapper"> 5642 <ion-icon name="alert-circle-outline"></ion-icon> 5643 </div> 5644 <h3>Unable to load reports</h3> 5645 <p>{{ error }}</p> 5646 <ion-button (click)="loadReports()"> 5647 <ion-icon slot="start" name="refresh-outline"></ion-icon> 5648 {{ 'common.retry' | translate }} 5649 </ion-button> 5650 </div> 5651 } 5652 5653 <!-- Empty State --> 5654 @if (!isLoading && !error && reports.length === 0) { 5655 <div class="empty-state"> 5656 <div class="empty-state-card"> 5657 <div class="empty-icon-wrapper"> 5658 <ion-icon name="bug-outline"></ion-icon> 5659 </div> 5660 <h3>{{ 'bugReportAdmin.noReports' | translate }}</h3> 5661 <p>No bug reports have been submitted yet.</p> 5662 @if (hasActiveFilters()) { 5663 <ion-button (click)="clearFilters()"> 5664 <ion-icon slot="start" name="close-outline"></ion-icon> 5665 {{ 'bugReportAdmin.clearFilters' | translate }} 5666 </ion-button> 5667 } 5668 </div> 5669 </div> 5670 } 5671 5672 <!-- Reports List --> 5673 @if (!isLoading && !error && reports.length > 0) { 5674 <ion-list class="report-list"> 5675 @for (report of reports; track report.id; let idx = $index) { 5676 <ion-card class="report-card" [class.expanded]="isExpanded(report.id!)"> 5677 <!-- Header Row --> 5678 <ion-card-header class="report-header" (click)="toggleExpand(report.id!)"> 5679 <div class="report-header-inner"> 5680 <!-- Status Icon --> 5681 <div class="report-icon-wrapper" [ngClass]="getStatusClass(report.status)"> 5682 <ion-icon [name]="getStatusIcon(report.status)"></ion-icon> 5683 </div> 5684 5685 <div class="report-header-content"> 5686 <!-- Status Row --> 5687 <div class="report-status-row"> 5688 <ion-badge [color]="getStatusColor(report.status)" class="status-badge"> 5689 {{ getStatusLabel(report.status) }} 5690 </ion-badge> 5691 <ion-badge color="light" class="category-badge"> 5692 {{ getCategoryLabel(report.category) }} 5693 </ion-badge>
5694 <span class="report-time">{{ formatDate(report.createdAt) }}</span> 5695 </div> 5696 5697 <!-- Description --> 5698 <p class="report-description">{{ report.description }}</p> 5699 5700 <!-- Meta Info --> 5701 <div class="report-meta"> 5702 <span class="meta-item"> 5703 <ion-icon name="phone-portrait-outline"></ion-icon> 5704 {{ report.deviceModel || 'Unknown device' }} 5705 </span> 5706 @if (report.campusName) { 5707 <span class="meta-item"> 5708 <ion-icon name="business-outline"></ion-icon> 5709 {{ report.campusName }} 5710 </span> 5711 } 5712 <span class="meta-item version"> 5713 v{{ report.appVersion }} 5714 </span> 5715 </div> 5716 </div> 5717 5718 <!-- Expand Icon --> 5719 <ion-icon 5720 [name]="isExpanded(report.id!) ? 'chevron-up-outline' : 'chevron-down-outline'" 5721 class="expand-icon"> 5722 </ion-icon> 5723 </div> 5724 </ion-card-header> 5725 5726 <!-- Expanded Content --> 5727 @if (isExpanded(report.id!)) { 5728 <ion-card-content class="report-details"> 5729 <!-- Screenshot --> 5730 @if (getScreenshotUrl(report); as screenshotUrl) { 5731 <div class="detail-section screenshot-section"> 5732 <h4> 5733 <ion-icon name="image-outline"></ion-icon> 5734 {{ 'bugReportAdmin.screenshot' | translate }} 5735 </h4> 5736 <img [src]="screenshotUrl" alt="Bug report screenshot" class="screenshot-img" /> 5737 </div> 5738 } 5739 5740 <!-- Signal Recording --> 5741 @if (getRecordingUrl(report)) { 5742 <div class="detail-section recording-section"> 5743 <h4> 5744 <ion-icon name="pulse-outline"></ion-icon> 5745 {{ 'bugReportAdmin.recording' | translate }} 5746 </h4> 5747 <ion-button fill="outline" size="small" (click)="downloadRecording(report)"> 5748 <ion-icon slot="start" name="download-outline"></ion-icon> 5749 {{ 'bugReportAdmin.downloadRecording' | translate }} 5750 </ion-button> 5751 </div> 5752 } 5753 5754 <!-- Device Info --> 5755 <div class="detail-section"> 5756 <h4> 5757 <ion-icon name="phone-portrait-outline"></ion-icon> 5758 {{ 'bugReportAdmin.deviceInfo' | translate }} 5759 </h4> 5760 <div class="detail-grid"> 5761 <div class="detail-item"> 5762 <span class="detail-label">{{ 'bugReportAdmin.device' | translate }}</span> 5763 <span class="detail-value">{{ report.deviceModel || '-' }}</span> 5764 </div> 5765 <div class="detail-item"> 5766 <span class="detail-label">{{ 'bugReportAdmin.os' | translate }}</span> 5767 <span class="detail-value">{{ report.osVersion || '-' }}</span> 5768 </div> 5769 <div class="detail-item"> 5770 <span class="detail-label">{{ 'bugReportAdmin.appVersion' | translate }}</span> 5771 <span class="detail-value">{{ report.appVersion }}</span> 5772 </div> 5773 <div class="detail-item"> 5774 <span class="detail-label">{{ 'bugReportAdmin.deviceId' | translate }}</span> 5775 <span class="detail-value device-id">{{ report.deviceIdentifier }}</span> 5776 </div> 5777 </div> 5778 </div> 5779 5780 <!-- Technical Data --> 5781 @if (parseTechnicalData(report.technicalDataJson); as techData) { 5782 <div class="detail-section"> 5783 <h4> 5784 <ion-icon name="code-slash-outline"></ion-icon> 5785 {{ 'bugReportAdmin.technicalData' | translate }} 5786 </h4> 5787 5788 <!-- Navigation Section --> 5789 @if (techData.navigation) { 5790 <div class="tech-section"> 5791 <div class="tech-section-header" (click)="toggleTechSection(report.id!, 'navigation')"> 5792 <ion-icon name="navigate-outline"></ion-icon>
5793 <span>{{ 'bugReportAdmin.tech.navigation' | translate }}</span> 5794 <ion-icon [name]="isTechSectionExpanded(report.id!, 'navigation') ? 'chevron-up-outline' : 'chevron-down-outline'"></ion-icon> 5795 </div> 5796 @if (isTechSectionExpanded(report.id!, 'navigation')) { 5797 <div class="tech-section-content"> 5798 <div class="detail-grid"> 5799 <div class="detail-item"> 5800 <span class="detail-label">{{ 'bugReportAdmin.tech.mode' | translate }}</span> 5801 <span class="detail-value">{{ techData.navigation.mode }}</span> 5802 </div> 5803 @if (techData.navigation.targetName) { 5804 <div class="detail-item"> 5805 <span class="detail-label">{{ 'bugReportAdmin.tech.target' | translate }}</span> 5806 <span class="detail-value">{{ techData.navigation.targetName }}</span> 5807 </div> 5808 } 5809 @if (techData.navigation.currentDirection) { 5810 <div class="detail-item"> 5811 <span class="detail-label">{{ 'bugReportAdmin.tech.direction' | translate }}</span> 5812 <span class="detail-value">{{ techData.navigation.currentDirection }}</span> 5813 </div> 5814 } 5815 @if (techData.navigation.distanceRemaining !== undefined) { 5816 <div class="detail-item"> 5817 <span class="detail-label">{{ 'bugReportAdmin.tech.distanceRemaining' | translate }}</span> 5818 <span class="detail-value">{{ formatDistanceCm(techData.navigation.distanceRemaining) }}</span> 5819 </div> 5820 } 5821 <div class="detail-item"> 5822 <span class="detail-label">{{ 'bugReportAdmin.tech.offRoute' | translate }}</span> 5823 <span class="detail-value"> 5824 <span class="bool-indicator" [class.true]="techData.navigation.isOffRoute" [class.false]="!techData.navigation.isOffRoute"> 5825 <ion-icon [name]="techData.navigation.isOffRoute ? 'checkmark-outline' : 'close-sharp'"></ion-icon> 5826 {{ techData.navigation.isOffRoute ? 'Yes' : 'No' }} 5827 </span> 5828 </span> 5829 </div> 5830 </div> 5831 </div> 5832 } 5833 </div> 5834 } 5835 5836 <!-- Position & Confidence Section --> 5837 @if (techData.position || techData.confidence) { 5838 <div class="tech-section"> 5839 <div class="tech-section-header" (click)="toggleTechSection(report.id!, 'position')"> 5840 <ion-icon name="location-outline"></ion-icon> 5841 <span>{{ 'bugReportAdmin.tech.position' | translate }}</span> 5842 <ion-icon [name]="isTechSectionExpanded(report.id!, 'position') ? 'chevron-up-outline' : 'chevron-down-outline'"></ion-icon> 5843 </div> 5844 @if (isTechSectionExpanded(report.id!, 'position')) { 5845 <div class="tech-section-content"> 5846 <div class="detail-grid"> 5847 @if (techData.position.x !== undefined && techData.position.y !== undefined) { 5848 <div class="detail-item"> 5849 <span class="detail-label">{{ 'bugReportAdmin.tech.coordinates' | translate }}</span>
5850 <span class="detail-value device-id">{{ formatCoord(techData.position.x) }}, {{ formatCoord(techData.position.y) }}</span> 5851 </div> 5852 } 5853 @if (techData.position.floorName) { 5854 <div class="detail-item"> 5855 <span class="detail-label">{{ 'bugReportAdmin.floor' | translate }}</span> 5856 <span class="detail-value">{{ techData.position.floorName }}</span> 5857 </div> 5858 } 5859 @if (techData.position.buildingName) { 5860 <div class="detail-item"> 5861 <span class="detail-label">{{ 'bugReportAdmin.building' | translate }}</span> 5862 <span class="detail-value">{{ techData.position.buildingName }}</span> 5863 </div> 5864 } 5865 @if (techData.position.activeSource) { 5866 <div class="detail-item"> 5867 <span class="detail-label">{{ 'bugReportAdmin.tech.activeSource' | translate }}</span> 5868 <span class="detail-value"> 5869 <span class="source-badge" [ngClass]="techData.position.activeSource">{{ techData.position.activeSource | uppercase }}</span> 5870 </span> 5871 </div> 5872 } 5873 @if (techData.confidence.beacon) { 5874 <div class="detail-item"> 5875 <span class="detail-label">{{ 'bugReportAdmin.tech.beaconConfidence' | translate }}</span> 5876 <span class="detail-value">{{ formatConfidence(techData.confidence.beacon.raw, techData.confidence.beacon.adjusted) }}</span> 5877 </div> 5878 } 5879 @if (techData.confidence.gps) { 5880 <div class="detail-item"> 5881 <span class="detail-label">{{ 'bugReportAdmin.tech.gpsConfidence' | translate }}</span> 5882 <span class="detail-value">{{ formatConfidence(techData.confidence.gps.raw, techData.confidence.gps.adjusted) }}</span> 5883 </div> 5884 } 5885 @if (techData.confidence.delta !== undefined) { 5886 <div class="detail-item"> 5887 <span class="detail-label">{{ 'bugReportAdmin.tech.delta' | translate }}</span> 5888 <span class="detail-value">{{ techData.confidence.delta.toFixed(2) }}</span> 5889 </div> 5890 } 5891 </div> 5892 </div> 5893 } 5894 </div> 5895 } 5896 5897 <!-- Kalman Filter Section --> 5898 @if (techData.position.kalmanState) { 5899 <div class="tech-section"> 5900 <div class="tech-section-header" (click)="toggleTechSection(report.id!, 'kalman')"> 5901 <ion-icon name="analytics-outline"></ion-icon> 5902 <span>{{ 'bugReportAdmin.tech.kalman' | translate }}</span> 5903 <ion-icon [name]="isTechSectionExpanded(report.id!, 'kalman') ? 'chevron-up-outline' : 'chevron-down-outline'"></ion-icon> 5904 </div> 5905 @if (isTechSectionExpanded(report.id!, 'kalman')) { 5906 <div class="tech-section-content"> 5907 <div class="detail-grid"> 5908 <div class="detail-item"> 5909 <span class="detail-label">{{ 'bugReportAdmin.tech.enabled' | translate }}</span>
5910 <span class="detail-value"> 5911 <span class="bool-indicator" [class.true]="techData.position.kalmanState.enabled" [class.false]="!techData.position.kalmanState.enabled"> 5912 <ion-icon [name]="techData.position.kalmanState.enabled ? 'checkmark-outline' : 'close-sharp'"></ion-icon> 5913 {{ techData.position.kalmanState.enabled ? 'Yes' : 'No' }} 5914 </span> 5915 </span> 5916 </div> 5917 <div class="detail-item"> 5918 <span class="detail-label">{{ 'bugReportAdmin.tech.speed' | translate }}</span> 5919 <span class="detail-value">{{ techData.position.kalmanState.speed.toFixed(4) }} cm/s</span> 5920 </div> 5921 <div class="detail-item"> 5922 <span class="detail-label">{{ 'bugReportAdmin.tech.velocityX' | translate }}</span> 5923 <span class="detail-value">{{ techData.position.kalmanState.velocityX.toFixed(4) }} cm/s</span> 5924 </div> 5925 <div class="detail-item"> 5926 <span class="detail-label">{{ 'bugReportAdmin.tech.velocityY' | translate }}</span> 5927 <span class="detail-value">{{ techData.position.kalmanState.velocityY.toFixed(4) }} cm/s</span> 5928 </div> 5929 <div class="detail-item"> 5930 <span class="detail-label">{{ 'bugReportAdmin.tech.uncertainty' | translate }}</span> 5931 <span class="detail-value">{{ techData.position.kalmanState.uncertainty.toFixed(2) }} cm</span> 5932 </div> 5933 </div> 5934 </div> 5935 } 5936 </div> 5937 } 5938 5939 <!-- Stable Beacon Pair Section --> 5940 @if (techData.position.stablePair.primaryBeaconId) { 5941 <div class="tech-section"> 5942 <div class="tech-section-header" (click)="toggleTechSection(report.id!, 'beaconPair')"> 5943 <ion-icon name="radio-outline"></ion-icon> 5944 <span>{{ 'bugReportAdmin.tech.beaconPair' | translate }}</span> 5945 <ion-icon [name]="isTechSectionExpanded(report.id!, 'beaconPair') ? 'chevron-up-outline' : 'chevron-down-outline'"></ion-icon> 5946 </div> 5947 @if (isTechSectionExpanded(report.id!, 'beaconPair')) { 5948 <div class="tech-section-content"> 5949 <div class="detail-grid"> 5950 <div class="detail-item"> 5951 <span class="detail-label">{{ 'bugReportAdmin.tech.primaryBeacon' | translate }}</span> 5952 <span class="detail-value"> 5953 {{ techData.position.stablePair.primaryBeaconName || '-' }} 5954 <br><span class="device-id">{{ techData.position.stablePair.primaryBeaconId }}</span> 5955 </span> 5956 </div> 5957 @if (techData.position.stablePair.secondaryBeaconId) { 5958 <div class="detail-item"> 5959 <span class="detail-label">{{ 'bugReportAdmin.tech.secondaryBeacon' | translate }}</span> 5960 <span class="detail-value"> 5961 {{ techData.position.stablePair.secondaryBeaconName || '-' }} 5962 <br><span class="device-id">{{ techData.position.stablePair.secondaryBeaconId }}</span> 5963 </span> 5964 </div> 5965 } 5966 </div> 5967 </div> 5968 } 5969 </div> 5970 } 5971 5972 <!-- Beacons Section --> 5973 @if (techData.beacons) { 5974 <div class="tech-section"> 5975 <div class="tech-section-header" (click)="toggleTechSection(report.id!, 'beacons')"> 5976 <ion-icon name="bluetooth-outline"></ion-icon>
5977 <span>{{ 'bugReportAdmin.tech.beacons' | translate }} ({{ techData.beacons.count }})</span> 5978 <ion-icon [name]="isTechSectionExpanded(report.id!, 'beacons') ? 'chevron-up-outline' : 'chevron-down-outline'"></ion-icon> 5979 </div> 5980 @if (isTechSectionExpanded(report.id!, 'beacons')) { 5981 <div class="tech-section-content"> 5982 <div class="detail-grid"> 5983 <div class="detail-item"> 5984 <span class="detail-label">{{ 'bugReportAdmin.tech.mode' | translate }}</span> 5985 <span class="detail-value">{{ techData.beacons.mode }}</span> 5986 </div> 5987 @if (techData.beacons.signalQuality?.strongestRssi !== undefined) { 5988 <div class="detail-item"> 5989 <span class="detail-label">{{ 'bugReportAdmin.tech.strongestSignal' | translate }}</span> 5990 <span class="detail-value">{{ techData.beacons.signalQuality?.strongestRssi }} dBm</span> 5991 </div> 5992 } 5993 @if (techData.beacons.signalQuality?.avgRssi !== undefined) { 5994 <div class="detail-item"> 5995 <span class="detail-label">{{ 'bugReportAdmin.tech.avgRssi' | translate }}</span> 5996 <span class="detail-value">{{ techData.beacons.signalQuality?.avgRssi }} dBm</span> 5997 </div> 5998 } 5999 @if (techData.beacons.timeSinceLastMs !== null) { 6000 <div class="detail-item"> 6001 <span class="detail-label">{{ 'bugReportAdmin.tech.lastUpdate' | translate }}</span> 6002 <span class="detail-value">{{ formatTimeSince(techData.beacons.timeSinceLastMs) }}</span> 6003 </div> 6004 } 6005 </div> 6006 <!-- Beacon Table --> 6007 @if (techData.beacons.activeBeacons.length) { 6008 <div class="beacon-table-wrapper"> 6009 <table class="beacon-table"> 6010 <thead> 6011 <tr> 6012 <th>{{ 'bugReportAdmin.tech.beacon' | translate }}</th> 6013 <th>{{ 'bugReportAdmin.tech.rssi' | translate }}</th> 6014 <th>{{ 'bugReportAdmin.tech.filteredRssi' | translate }}</th> 6015 <th>{{ 'bugReportAdmin.tech.distance' | translate }}</th> 6016 <th>{{ 'bugReportAdmin.tech.battery' | translate }}</th> 6017 <th>{{ 'bugReportAdmin.tech.lastSeen' | translate }}</th> 6018 </tr> 6019 </thead> 6020 <tbody> 6021 @for (beacon of techData.beacons.activeBeacons; track beacon.id) { 6022 <tr> 6023 <td class="beacon-name">{{ beacon.name }}</td> 6024 <td class="monospace">{{ beacon.rssi }} dBm</td> 6025 <td class="monospace">{{ beacon.filteredRssi.toFixed(1) }}</td> 6026 <td>{{ formatDistanceCm(beacon.distanceCm) }}</td> 6027 <td>{{ beacon.batteryPercent !== null ? beacon.batteryPercent + '%' : '-' }}</td> 6028 <td>{{ formatTimeSince(beacon.lastSeenMs) }}</td> 6029 </tr> 6030 } 6031 </tbody> 6032 </table> 6033 </div> 6034 } 6035 </div> 6036 } 6037 </div> 6038 } 6039 6040 <!-- GPS Section --> 6041 @if (techData.gps) { 6042 <div class="tech-section"> 6043 <div class="tech-section-header" (click)="toggleTechSection(report.id!, 'gps')"> 6044 <ion-icon name="location-outline"></ion-icon>
6045 <span>{{ 'bugReportAdmin.tech.gps' | translate }}</span> 6046 <ion-icon [name]="isTechSectionExpanded(report.id!, 'gps') ? 'chevron-up-outline' : 'chevron-down-outline'"></ion-icon> 6047 </div> 6048 @if (isTechSectionExpanded(report.id!, 'gps')) { 6049 <div class="tech-section-content"> 6050 <div class="detail-grid"> 6051 <div class="detail-item"> 6052 <span class="detail-label">{{ 'bugReportAdmin.tech.gpsStatus' | translate }}</span> 6053 <span class="detail-value"> 6054 <span class="bool-indicator" [class.true]="techData.gps.status.available" [class.false]="!techData.gps.status.available"> 6055 <ion-icon [name]="techData.gps.status.available ? 'checkmark-outline' : 'close-sharp'"></ion-icon> 6056 {{ techData.gps.status.available ? 'Available' : 'Unavailable' }} 6057 </span> 6058 </span> 6059 </div> 6060 @if (techData.gps.position?.latitude !== undefined) { 6061 <div class="detail-item"> 6062 <span class="detail-label">{{ 'bugReportAdmin.tech.coordinates' | translate }}</span> 6063 <span class="detail-value device-id">{{ formatGpsCoord(techData.gps.position?.latitude) }}, {{ formatGpsCoord(techData.gps.position?.longitude) }}</span> 6064 </div> 6065 } 6066 @if (techData.gps.position?.accuracyMeters !== undefined) { 6067 <div class="detail-item"> 6068 <span class="detail-label">{{ 'bugReportAdmin.tech.accuracy' | translate }}</span> 6069 <span class="detail-value">{{ techData.gps.position?.accuracyMeters }}m</span> 6070 </div> 6071 } 6072 @if (techData.gps.timeSinceLastMs !== null) { 6073 <div class="detail-item"> 6074 <span class="detail-label">{{ 'bugReportAdmin.tech.lastUpdate' | translate }}</span> 6075 <span class="detail-value">{{ formatTimeSince(techData.gps.timeSinceLastMs) }}</span> 6076 </div> 6077 } 6078 @if (techData.gps.position?.altitude !== undefined) { 6079 <div class="detail-item"> 6080 <span class="detail-label">{{ 'bugReportAdmin.tech.altitude' | translate }}</span> 6081 <span class="detail-value">{{ techData.gps.position?.altitude?.toFixed(1) }}m</span> 6082 </div> 6083 } 6084 @if (techData.gps.position?.speed !== undefined) { 6085 <div class="detail-item"> 6086 <span class="detail-label">{{ 'bugReportAdmin.tech.speed' | translate }}</span> 6087 <span class="detail-value">{{ techData.gps.position?.speed?.toFixed(2) }} m/s</span> 6088 </div> 6089 } 6090 </div> 6091 </div> 6092 } 6093 </div> 6094 } 6095 6096 @if (techData.rendering; as rendering) { 6097 <div class="tech-section"> 6098 <div class="tech-section-header" (click)="toggleTechSection(report.id!, 'rendering')"> 6099 <ion-icon name="hardware-chip-outline"></ion-icon> 6100 <span>GPU Rendering</span> 6101 <ion-icon [name]="isTechSectionExpanded(report.id!, 'rendering') ? 'chevron-up-outline' : 'chevron-down-outline'"></ion-icon> 6102 </div> 6103 @if (isTechSectionExpanded(report.id!, 'rendering')) { 6104 <div class="tech-section-content"> 6105 <div class="detail-grid"> 6106 <div class="detail-item"><span class="detail-label">Status</span><span class="detail-value">{{ rendering.status }}</span></div> 6107 <div class="detail-item"><span class="detail-label">GPU</span><span class="detail-value device-id">{{ rendering.webgl?.unmaskedRenderer || rendering.webgl?.renderer || '\u2014' }}</span></div> 6108 <div class="detail-item"><span class="detail-label">WebGL</span><span class="detail-value">{{ rendering.webgl?.version || '\u2014' }}</span></div> 6109 <div class="detail-item"><span class="detail-label">Framebuffer</span><span class="detail-value">{{ rendering.drawingBuffer.width }}\xD7{{ rendering.drawingBuffer.height }} \xB7 DPR {{ rendering.rendererPixelRatio }}</span></div> 6110 <div class="detail-item"><span class="detail-label">Labels</span><span class="detail-value">{{ rendering.labels?.buildingCount ?? 0 }} building / {{ rendering.labels?.roomCount ?? 0 }} room</span></div> 6111 <div class="detail-item"><span class="detail-label">Label options</span><span class="detail-value">mip {{ rendering.options.generateLabelMipmaps ? 'ON' : 'OFF' }} \xB7 {{ rendering.options.labelCanvasPixelRatio }}\xD7 \xB7 {{ rendering.options.forcePowerOfTwoLabelTextures ? 'POT' : 'native size' }} \xB7 {{ rendering.options.labelTextureFilter || 'linear' }}
6111 \xB7 premultiply {{ rendering.options.premultiplyLabelAlpha ? 'ON' : 'OFF' }} \xB7 vertex padding {{ rendering.options.padLabelVertexBuffer ? 'ON' : 'OFF' }}</span></div> 6112 <div class="detail-item"><span class="detail-label">Context events</span><span class="detail-value">{{ rendering.context.lossCount }} lost / {{ rendering.context.restorationCount }} restored</span></div> 6113 <div class="detail-item"><span class="detail-label">Actions</span><span class="detail-value">{{ rendering.actionHistory.length }}</span></div> 6114 </div> 6115 @if (rendering.latestError) { <p class="error-message">{{ rendering.latestError }}</p> } 6116 </div> 6117 } 6118 </div> 6119 } 6120 6121 <!-- Settings Section --> 6122 @if (techData.settings) { 6123 <div class="tech-section"> 6124 <div class="tech-section-header" (click)="toggleTechSection(report.id!, 'settings')"> 6125 <ion-icon name="settings-outline"></ion-icon> 6126 <span>{{ 'bugReportAdmin.tech.settings' | translate }}</span> 6127 <ion-icon [name]="isTechSectionExpanded(report.id!, 'settings') ? 'chevron-up-outline' : 'chevron-down-outline'"></ion-icon> 6128 </div> 6129 @if (isTechSectionExpanded(report.id!, 'settings')) { 6130 <div class="tech-section-content"> 6131 <div class="detail-grid"> 6132 <div class="detail-item"> 6133 <span class="detail-label">{{ 'bugReportAdmin.tech.positioningMode' | translate }}</span> 6134 <span class="detail-value">{{ techData.settings.positioningMode }}</span> 6135 </div> 6136 <div class="detail-item"> 6137 <span class="detail-label">{{ 'bugReportAdmin.tech.locationMode' | translate }}</span> 6138 <span class="detail-value">{{ techData.settings.locationMode }}</span> 6139 </div> 6140 <div class="detail-item"> 6141 <span class="detail-label">{{ 'bugReportAdmin.tech.rssiFilter' | translate }}</span> 6142 <span class="detail-value">{{ techData.settings.rssiFilterType }}</span> 6143 </div> 6144 <div class="detail-item"> 6145 <span class="detail-label">{{ 'bugReportAdmin.tech.kalmanFilter' | translate }}</span> 6146 <span class="detail-value"> 6147 <span class="bool-indicator" [class.true]="techData.settings.kalmanEnabled" [class.false]="!techData.settings.kalmanEnabled"> 6148 <ion-icon [name]="techData.settings.kalmanEnabled ? 'checkmark-outline' : 'close-sharp'"></ion-icon> 6149 {{ techData.settings.kalmanEnabled ? 'Enabled' : 'Disabled' }} 6150 </span> 6151 </span> 6152 </div> 6153 <div class="detail-item"> 6154 <span class="detail-label">{{ 'bugReportAdmin.tech.smartSwitching' | translate }}</span> 6155 <span class="detail-value"> 6156 <span class="bool-indicator" [class.true]="techData.settings.smartSwitchingEnabled" [class.false]="!techData.settings.smartSwitchingEnabled"> 6157 <ion-icon [name]="techData.settings.smartSwitchingEnabled ? 'checkmark-outline' : 'close-sharp'"></ion-icon> 6158 {{ techData.settings.smartSwitchingEnabled ? 'Enabled' : 'Disabled' }} 6159 </span> 6160 </span> 6161 </div> 6162 </div> 6163 </div> 6164 } 6165 </div> 6166 } 6167 6168 <!-- Meta Section (Route & Timestamp) --> 6169 @if (techData.route || techData.timestamp) { 6170 <div class="tech-section"> 6171 <div class="tech-section-header" (click)="toggleTechSection(report.id!, 'meta')"> 6172 <ion-icon name="time-outline"></ion-icon>
6173 <span>{{ 'bugReportAdmin.tech.meta' | translate }}</span> 6174 <ion-icon [name]="isTechSectionExpanded(report.id!, 'meta') ? 'chevron-up-outline' : 'chevron-down-outline'"></ion-icon> 6175 </div> 6176 @if (isTechSectionExpanded(report.id!, 'meta')) { 6177 <div class="tech-section-content"> 6178 <div class="detail-grid"> 6179 @if (techData.route) { 6180 <div class="detail-item"> 6181 <span class="detail-label">{{ 'bugReportAdmin.route' | translate }}</span> 6182 <span class="detail-value device-id">{{ techData.route }}</span> 6183 </div> 6184 } 6185 @if (techData.timestamp) { 6186 <div class="detail-item"> 6187 <span class="detail-label">{{ 'bugReportAdmin.tech.timestamp' | translate }}</span> 6188 <span class="detail-value">{{ formatTimestamp(techData.timestamp) }}</span> 6189 </div> 6190 } 6191 </div> 6192 </div> 6193 } 6194 </div> 6195 } 6196 </div> 6197 } 6198 6199 <!-- Admin Notes --> 6200 @if (report.adminNotes) { 6201 <div class="detail-section"> 6202 <h4> 6203 <ion-icon name="document-text-outline"></ion-icon> 6204 {{ 'bugReportAdmin.adminNotes' | translate }} 6205 </h4> 6206 <p class="admin-notes">{{ report.adminNotes }}</p> 6207 </div> 6208 } 6209 6210 <!-- Actions --> 6211 <div class="actions-row"> 6212 @if (getScreenshotUrl(report)) { 6213 <ion-button fill="outline" size="small" (click)="downloadScreenshot(report)"> 6214 <ion-icon slot="start" name="download-outline"></ion-icon> 6215 {{ 'bugReportAdmin.downloadImage' | translate }} 6216 </ion-button> 6217 } 6218 @if (getRecordingUrl(report)) { 6219 <ion-button fill="outline" size="small" (click)="downloadRecording(report)"> 6220 <ion-icon slot="start" name="download-outline"></ion-icon> 6221 {{ 'bugReportAdmin.downloadRecording' | translate }} 6222 </ion-button> 6223 } 6224 <ion-button fill="outline" size="small" (click)="downloadReportJson(report)"> 6225 <ion-icon slot="start" name="document-outline"></ion-icon> 6226 {{ 'bugReportAdmin.downloadJson' | translate }} 6227 </ion-button> 6228 <ion-button fill="outline" size="small" (click)="downloadZip(report)"> 6229 <ion-icon slot="start" name="archive-outline"></ion-icon> 6230 {{ 'bugReportAdmin.downloadZip' | translate }} 6231 </ion-button> 6232 <ion-button fill="outline" size="small" (click)="updateStatus(report)"> 6233 <ion-icon slot="start" name="sync-outline"></ion-icon> 6234 {{ 'bugReportAdmin.changeStatus' | translate }} 6235 </ion-button> 6236 <ion-button fill="outline" size="small" color="danger" (click)="confirmDelete(report)"> 6237 <ion-icon slot="start" name="trash-outline"></ion-icon> 6238 {{ 'common.delete' | translate }} 6239 </ion-button> 6240 </div> 6241 </ion-card-content> 6242 } 6243 </ion-card> 6244 } 6245 </ion-list> 6246 6247 <!-- Load More --> 6248 @if (hasMore) { 6249 <div class="load-more"> 6250 <ion-button 6251 fill="outline" 6252 (click)="loadMore()" 6253 [disabled]="isLoadingMore"> 6254 @if (isLoadingMore) { 6255 <ion-spinner name="crescent"></ion-spinner> 6256 } @else { 6257 <ion-icon slot="start" name="chevron-down-outline"></ion-icon> 6258 {{ 'bugReportAdmin.loadMore' | translate }} 6259 } 6260 </ion-button> 6261 </div> 6262 } 6263 } 6264 </div> 6265</ion-content> 6266`, styles: ["/* src/app/pages/admin/bug-reports/bug-reports.page.scss */\n.admin-navigation {\n position: sticky;\n top: 0;\n z-index: 20;\n display: block;\n}
6266\n.admin-page-actions {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n margin-left: auto;\n flex-shrink: 0;\n}\n.admin-container {\n min-height: 100%;\n background: var(--ion-background-color);\n padding-top: constant(safe-area-inset-top);\n padding-top: env(safe-area-inset-top);\n padding-top: var(--safe-area-inset-top, 0px);\n}\n.admin-content {\n padding: 1rem;\n max-width: 900px;\n margin: 0 auto;\n}\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 200px;\n padding: 2rem;\n}\n.loading-container ion-spinner {\n margin-bottom: 1rem;\n width: 48px;\n height: 48px;\n --color: var(--ion-color-primary);\n}\n.loading-container p {\n color: var(--ion-color-medium);\n font-size: 0.95rem;\n margin: 0;\n}\n.error-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 3rem 2rem;\n text-align: center;\n}\n.error-container .error-icon-wrapper {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background:\n linear-gradient(\n 135deg,\n rgba(239, 68, 68, 0.15) 0%,\n rgba(239, 68, 68, 0.05) 100%);\n border-radius: 50%;\n margin-bottom: 1.5rem;\n}\n.error-container .error-icon-wrapper ion-icon {\n font-size: 40px;\n color: #ef4444;\n}\n.error-container h3 {\n font-size: 1.25rem;\n font-weight: 600;\n margin: 0 0 0.5rem;\n color: var(--ion-text-color);\n}\n.error-container p {\n color: var(--ion-color-medium);\n margin: 0 0 1.5rem;\n font-size: 0.95rem;\n}\n.error-container ion-button {\n --box-shadow: 0 4px 12px rgba(var(--ion-color-primary-rgb), 0.3);\n}\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: calc(100vh - 350px);\n padding: 2rem;\n}\n.empty-state-card {\n text-align: center;\n max-width: 400px;\n}\n.empty-state-card .empty-icon-wrapper {\n width: 100px;\n height: 100px;\n display: flex;\n align-items: center;\n justify-content: center;\n background:\n linear-gradient(\n 135deg,\n rgba(var(--ion-color-medium-rgb), 0.1) 0%,\n rgba(var(--ion-color-medium-rgb), 0.05) 100%);\n border-radius: 24px;\n margin: 0 auto 1.5rem;\n}\n.empty-state-card .empty-icon-wrapper ion-icon {\n font-size: 48px;\n color: var(--ion-color-medium);\n opacity: 0.6;\n}\n.empty-state-card h3 {\n font-size: 1.5rem;\n font-weight: 600;\n color: var(--ion-text-color);\n margin: 0 0 0.5rem;\n}\n.empty-state-card p {\n font-size: 1rem;\n color: var(--ion-color-medium);\n margin: 0 0 2rem;\n line-height: 1.5;\n}\n.empty-state-card ion-button {\n --box-shadow: 0 4px 12px rgba(var(--ion-color-primary-rgb), 0.3);\n --padding-start: 20px;\n --padding-end: 24px;\n --padding-top: 12px;\n --padding-bottom: 12px;\n font-weight: 600;\n font-size: 1rem;\n}\n.empty-state-card ion-button:hover {\n transform: translateY(-2px);\n --box-shadow: 0 6px 20px rgba(var(--ion-color-primary-rgb), 0.4);\n}\n.nav-card {\n margin-bottom: 1rem;\n border-radius: 16px;\n overflow: hidden;\n box-shadow: 0 4px 16px var(--shadow-color-light);\n cursor: pointer;\n transition: all 0.3s ease;\n}\n.nav-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 24px var(--shadow-color-light);\n}\n.nav-card:hover .nav-icon-wrapper {\n transform: scale(1.05);\n}\n.nav-card ion-card-content {\n padding: 0;\n}\n.nav-card-inner {\n display: flex;\n align-items: center;\n gap: 1rem;\n padding: 1.25rem;\n}\n.nav-icon-wrapper {\n width: 56px;\n height: 56px;\n display: flex;\n align-items: center;\n justify-content: center;\n background:\n linear-gradient(\n 135deg,\n var(--ion-color-primary),\n var(--ion-color-primary-shade));\n border-radius: 14px;\n flex-shrink: 0;\n transition: transform 0.3s ease;\n}\n.nav-icon-wrapper ion-icon {\n font-size: 28px;\n color: white;\n}\n.nav-card-text {\n flex: 1;\n}\n.nav-card-text h3 {\n margin: 0 0 4px;\n font-size: 1.1rem;\n font-weight: 600;\n color: var(--ion-text-color);\n}\n.nav-card-text p {\n margin: 0;\n font-size: 0.9rem;\n color: var(--ion-color-medium);\n line-height: 1.4;\n}\n.nav-arrow {\n color: var(--ion-color-medium);\n opacity: 0.5;\n font-size: 1.5rem;\n transition: transform 0.2s ease;\n}\n.nav-card:hover .nav-arrow {\n transform: translateX(4px);\n opacity: 0.8;\n}\n.section-card {\n margin-bottom: 1rem;\n border-radius: 16px;\n overflow: hidden;\n box-shadow: 0 4px 16px var(--shadow-color-light);\n}\n.section-card ion-card-header {\n padding: 1.25rem;\n background: var(--ion-item-background);\n}\n.section-card ion-card-content {\n padding: 1rem 1.25rem 1.25rem;\n}\n.section-header-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 1rem;\n flex-wrap: wrap;\n}\n.section-header-info {\n flex: 1;\n min-width: 200px;\n}\n.section-header-info ion-card-title {\n font-size: 1.25rem;\n font-weight: 700;\n margin-bottom: 0.25rem;\n}\n.section-header-info ion-card-subtitle {\n font-size: 0.9rem;\n color: var(--ion-color-medium);\n}\n.section-header-actions {\n display: flex;\n gap: 0.5rem;\n}
6266\n.section-header-actions ion-button {\n --box-shadow: 0 2px 8px rgba(var(--ion-color-primary-rgb), 0.25);\n font-weight: 600;\n}\n.section-header-actions ion-button:hover {\n --box-shadow: 0 4px 12px rgba(var(--ion-color-primary-rgb), 0.35);\n}\n.info-notice {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 14px 16px;\n margin-bottom: 1rem;\n background:\n linear-gradient(\n 135deg,\n rgba(var(--ion-color-primary-rgb), 0.12) 0%,\n rgba(var(--ion-color-primary-rgb), 0.06) 100%);\n border-radius: 12px;\n border-left: 4px solid var(--ion-color-primary);\n}\n.info-notice ion-icon {\n flex-shrink: 0;\n font-size: 1.5rem;\n color: var(--ion-color-primary);\n}\n.info-notice span {\n font-size: 0.9rem;\n color: var(--ion-text-color);\n line-height: 1.4;\n}\n.custom-searchbar {\n --background: var(--ion-item-background);\n --box-shadow: 0 2px 12px var(--shadow-color-light);\n --border-radius: 12px;\n --placeholder-opacity: 0.6;\n margin-bottom: 1rem;\n padding: 0;\n}\n.custom-searchbar.searchbar-has-value {\n --clear-button-color: var(--ion-color-medium);\n}\n.list-section-header {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n margin: 1.5rem 0 1rem;\n}\n.list-section-header:first-child {\n margin-top: 0;\n}\n.list-section-header .section-icon {\n width: 28px;\n height: 28px;\n color: var(--ion-color-primary);\n}\n.list-section-header h3 {\n flex: 1;\n margin: 0;\n font-size: 1.1rem;\n font-weight: 600;\n color: var(--ion-text-color);\n}\n.list-section-header .count-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 32px;\n height: 28px;\n padding: 0 12px;\n background:\n linear-gradient(\n 135deg,\n rgba(var(--ion-color-primary-rgb), 0.15) 0%,\n rgba(var(--ion-color-primary-rgb), 0.08) 100%);\n color: var(--ion-color-primary);\n font-size: 0.85rem;\n font-weight: 600;\n border-radius: 14px;\n}\n.entity-list {\n background: transparent;\n margin-bottom: 1rem;\n padding: 0;\n}\n.entity-list ion-item {\n margin-bottom: 0.75rem;\n border-radius: 14px;\n overflow: hidden;\n box-shadow: 0 2px 12px var(--shadow-color-light);\n}\n.entity-item {\n --background: var(--ion-item-background);\n --padding-start: 1rem;\n --padding-end: 1rem;\n --inner-padding-end: 0;\n --min-height: 84px;\n --transition: all 0.2s ease;\n --border-color: transparent;\n position: relative;\n}\n.entity-item::part(native) {\n border-radius: 14px;\n}\n.entity-item:hover {\n --background: var(--ion-color-step-50);\n}\n.entity-item:hover .entity-icon-wrapper {\n transform: scale(1.05);\n}\n.entity-item:hover .entity-icon-wrapper ion-icon {\n transform: scale(1.1);\n}\n.entity-item ion-label {\n margin: 0.75rem 0;\n}\n.entity-item ion-label h2 {\n font-size: 1.05rem;\n font-weight: 600;\n color: var(--ion-text-color);\n margin-bottom: 0.25rem;\n}\n.entity-item ion-label p {\n font-size: 0.9rem;\n color: var(--ion-color-medium);\n margin: 0.2rem 0;\n line-height: 1.4;\n}\n.entity-icon-wrapper {\n --icon-color: var(--ion-color-primary);\n --icon-rgb: var(--ion-color-primary-rgb);\n width: 56px;\n height: 56px;\n display: flex;\n align-items: center;\n justify-content: center;\n background:\n linear-gradient(\n 135deg,\n rgba(var(--icon-rgb), 0.15) 0%,\n rgba(var(--icon-rgb), 0.06) 100%);\n border-radius: 14px;\n margin-right: 1rem;\n flex-shrink: 0;\n transition: all 0.3s ease;\n}\n.entity-icon-wrapper ion-icon {\n font-size: 1.75rem;\n color: var(--icon-color);\n transition: transform 0.3s ease;\n}\n.entity-icon-wrapper.role-superadmin {\n --icon-color: #6030ff;\n --icon-rgb:\n 96,\n 48,\n 255;\n}\n.entity-icon-wrapper.role-admin {\n --icon-color: #c5000f;\n --icon-rgb:\n 197,\n 0,\n 15;\n}\n.entity-icon-wrapper.role-moderator {\n --icon-color: #f59e0b;\n --icon-rgb:\n 245,\n 158,\n 11;\n}\n.entity-icon-wrapper.role-user {\n --icon-color: var(--ion-color-primary);\n --icon-rgb: var(--ion-color-primary-rgb);\n}\n.role-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n border-radius: 6px;\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.02em;\n}\n.role-badge.role-superadmin {\n background: rgba(96, 48, 255, 0.15);\n color: #6030ff;\n}\n.role-badge.role-admin {\n background: rgba(197, 0, 15, 0.15);\n color: #c5000f;\n}\n.role-badge.role-moderator {\n background: rgba(245, 158, 11, 0.15);\n color: #f59e0b;\n}\n.role-badge.role-user {\n background: rgba(var(--ion-color-primary-rgb), 0.15);\n color: var(--ion-color-primary);\n}\n.meta-info {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 0.5rem;\n font-size: 0.85rem;\n color: var(--ion-color-medium);\n}\n.meta-info ion-icon {\n font-size: 1rem;\n opacity: 0.7;\n}\n.action-buttons {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n}\n.action-buttons ion-button {\n --padding-start: 10px;\n --padding-end: 10px;\n --padding-top: 10px;\n --padding-bottom: 10px;\n margin: 0;\n}\n.action-buttons ion-button ion-icon {\n font-size: 1.25rem;\n}\n.action-buttons ion-button:hover {\n --background-hover: var(--ion-color-light);\n}\n.action-buttons .desktop-actions {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n}\n.action-buttons .mobile-menu-button {\n display: none;\n}\n.edit-form-card {\n border-radius: 16px;\n overflow: hidden;\n box-shadow: 0 4px 20px var(--shadow-color-light);\n}\n.edit-form-card ion-card-header {\n padding: 1.25rem;\n background:\n linear-gradient(\n 135deg,\n rgba(var(--ion-color-primary-rgb), 0.08) 0%,\n rgba(var(--ion-color-primary-rgb), 0.02) 100%);\n border-bottom: 1px solid var(--ion-border-color);\n}\n.edit-form-card ion-card-content {\n padding: 1.5rem;\n}\n.edit-form-card ion-item {\n --background: transparent;\n --border-color: var(--ion-border-color);\n margin-bottom: 1rem;\n}\n.edit-form-card ion-item:last-of-type {\n margin-bottom: 0;\n}\n.form-actions {\n display: flex;\n justify-content: flex-end;\n gap: 1rem;\n padding-top: 1.5rem;\n margin-top: 1.5rem;\n border-top: 1px solid var(--ion-border-color);\n}\n.form-actions ion-button {\n min-width: 120px;\n}\n@keyframes slideIn {\n from {\n opacity: 0;\n transform: translateX(-12px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n@keyframes fadeIn {\n from {\n opacity: 0;\n transform: translateY(8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.entity-item {\n animation: slideIn 0.35s ease-out;\n animation-fill-mode: both;\n}
6266\n.entity-item:nth-child(1) {\n animation-delay: 0.04s;\n}\n.entity-item:nth-child(2) {\n animation-delay: 0.08s;\n}\n.entity-item:nth-child(3) {\n animation-delay: 0.12s;\n}\n.entity-item:nth-child(4) {\n animation-delay: 0.16s;\n}\n.entity-item:nth-child(5) {\n animation-delay: 0.2s;\n}\n.entity-item:nth-child(6) {\n animation-delay: 0.24s;\n}\n.entity-item:nth-child(7) {\n animation-delay: 0.28s;\n}\n.entity-item:nth-child(8) {\n animation-delay: 0.32s;\n}\n.entity-item:nth-child(9) {\n animation-delay: 0.36s;\n}\n.entity-item:nth-child(10) {\n animation-delay: 0.4s;\n}\n.entity-item:nth-child(11) {\n animation-delay: 0.44s;\n}\n.entity-item:nth-child(12) {\n animation-delay: 0.48s;\n}\n.entity-item:nth-child(13) {\n animation-delay: 0.52s;\n}\n.entity-item:nth-child(14) {\n animation-delay: 0.56s;\n}\n.entity-item:nth-child(15) {\n animation-delay: 0.6s;\n}\n.entity-item:nth-child(16) {\n animation-delay: 0.64s;\n}\n.entity-item:nth-child(17) {\n animation-delay: 0.68s;\n}\n.entity-item:nth-child(18) {\n animation-delay: 0.72s;\n}\n.entity-item:nth-child(19) {\n animation-delay: 0.76s;\n}\n.entity-item:nth-child(20) {\n animation-delay: 0.8s;\n}\n.nav-card,\n.section-card {\n animation: fadeIn 0.4s ease-out;\n}\n@media (max-width: 768px) {\n .admin-content {\n padding: 0.75rem;\n }\n .section-header-row {\n flex-direction: column;\n align-items: stretch;\n gap: 0.75rem;\n }\n .section-header-actions {\n justify-content: flex-end;\n }\n .entity-item {\n --min-height: 76px;\n --padding-start: 0.75rem;\n --padding-end: 0.75rem;\n }\n .entity-icon-wrapper {\n width: 46px;\n height: 46px;\n margin-right: 0.75rem;\n border-radius: 12px;\n }\n .entity-icon-wrapper ion-icon {\n font-size: 1.5rem;\n }\n .action-buttons {\n gap: 0;\n }\n .action-buttons .desktop-actions {\n display: none;\n }\n .action-buttons .mobile-menu-button {\n display: flex;\n }\n ion-label h2 {\n font-size: 1rem;\n }\n ion-label .meta-info {\n font-size: 0.8rem;\n gap: 4px;\n }\n ion-label .meta-info ion-icon {\n font-size: 0.9rem;\n }\n .nav-card-inner {\n padding: 1rem;\n }\n .nav-icon-wrapper {\n width: 48px;\n height: 48px;\n border-radius: 12px;\n }\n .nav-icon-wrapper ion-icon {\n font-size: 24px;\n }\n}\n@media (prefers-color-scheme: dark) {\n .nav-card,\n .section-card,\n .entity-list ion-item {\n box-shadow: 0 2px 12px rgba(0, 0, 0, 0.3);\n }\n .info-notice {\n background:\n linear-gradient(\n 135deg,\n rgba(var(--ion-color-primary-rgb), 0.2) 0%,\n rgba(var(--ion-color-primary-rgb), 0.1) 100%);\n }\n}\n.filter-toolbar {\n background: var(--ion-item-background, var(--ion-background-color, #ffffff));\n padding: 0.75rem 1rem;\n border: 1px solid var(--ion-border-color, var(--ion-color-step-200, #e2e8f0));\n border-radius: 12px;\n margin-bottom: 1rem;\n}\n.filter-row {\n display: flex;\n gap: 0.75rem;\n align-items: center;\n flex-wrap: wrap;\n}\n.filter-select {\n flex: 1;\n min-width: 140px;\n max-width: 200px;\n --padding-start: 12px;\n --padding-end: 12px;\n font-size: 14px;\n background: var(--ion-background-color);\n border-radius: 10px;\n border: 1px solid var(--ion-border-color);\n}\n.filter-select:hover {\n border-color: var(--ion-color-primary);\n}\n.clear-filters-btn {\n --color: var(--ion-color-medium);\n font-weight: 500;\n}\n.clear-filters-btn:hover {\n --color: var(--ion-color-primary);\n}\n.stats-bar {\n display: flex;\n align-items: center;\n gap: 1rem;\n padding: 1rem 1.25rem;\n background: var(--ion-item-background);\n border-radius: 14px;\n margin-bottom: 1rem;\n box-shadow: 0 2px 12px var(--shadow-color-light);\n}\n.stats-icon-wrapper {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n background:\n linear-gradient(\n 135deg,\n rgba(var(--ion-color-primary-rgb), 0.15) 0%,\n rgba(var(--ion-color-primary-rgb), 0.06) 100%);\n border-radius: 12px;\n flex-shrink: 0;\n}\n.stats-icon-wrapper ion-icon {\n font-size: 1.5rem;\n color: var(--ion-color-primary);\n}\n.stats-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n.stats-label {\n font-size: 0.8rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n color: var(--ion-color-medium);\n}\n.stats-value {\n font-size: 0.95rem;\n color: var(--ion-text-color);\n}\n.report-list {\n background: transparent;\n padding: 0;\n}\n.report-card {\n margin: 0 0 0.75rem 0;\n border-radius: 14px;\n overflow: hidden;\n box-shadow: 0 2px 12px var(--shadow-color-light);\n transition: all 0.3s ease;\n animation: fadeSlideIn 0.35s ease-out;\n animation-fill-mode: both;\n}\n.report-card:hover {\n box-shadow: 0 4px 20px var(--shadow-color-light);\n}\n.report-card.expanded {\n box-shadow: 0 6px 24px var(--shadow-color-light);\n}
6266\n.report-card:nth-child(1) {\n animation-delay: 0.04s;\n}\n.report-card:nth-child(2) {\n animation-delay: 0.08s;\n}\n.report-card:nth-child(3) {\n animation-delay: 0.12s;\n}\n.report-card:nth-child(4) {\n animation-delay: 0.16s;\n}\n.report-card:nth-child(5) {\n animation-delay: 0.2s;\n}\n.report-card:nth-child(6) {\n animation-delay: 0.24s;\n}\n.report-card:nth-child(7) {\n animation-delay: 0.28s;\n}\n.report-card:nth-child(8) {\n animation-delay: 0.32s;\n}\n.report-card:nth-child(9) {\n animation-delay: 0.36s;\n}\n.report-card:nth-child(10) {\n animation-delay: 0.4s;\n}\n.report-card:nth-child(11) {\n animation-delay: 0.44s;\n}\n.report-card:nth-child(12) {\n animation-delay: 0.48s;\n}\n.report-card:nth-child(13) {\n animation-delay: 0.52s;\n}\n.report-card:nth-child(14) {\n animation-delay: 0.56s;\n}\n.report-card:nth-child(15) {\n animation-delay: 0.6s;\n}\n.report-card:nth-child(16) {\n animation-delay: 0.64s;\n}\n.report-card:nth-child(17) {\n animation-delay: 0.68s;\n}\n.report-card:nth-child(18) {\n animation-delay: 0.72s;\n}\n.report-card:nth-child(19) {\n animation-delay: 0.76s;\n}\n.report-card:nth-child(20) {\n animation-delay: 0.8s;\n}\n@keyframes fadeSlideIn {\n from {\n opacity: 0;\n transform: translateY(8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.report-header {\n cursor: pointer;\n padding: 1rem 1.25rem;\n transition: background 0.2s ease;\n}\n.report-header:hover {\n background: var(--ion-color-step-50);\n}\n.report-header-inner {\n display: flex;\n align-items: flex-start;\n gap: 1rem;\n}\n.report-icon-wrapper {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n flex-shrink: 0;\n transition: transform 0.3s ease;\n}\n.report-icon-wrapper ion-icon {\n font-size: 1.5rem;\n transition: transform 0.3s ease;\n}\n.report-header:hover .report-icon-wrapper {\n transform: scale(1.05);\n}\n.report-header:hover .report-icon-wrapper ion-icon {\n transform: scale(1.1);\n}\n.report-icon-wrapper.status-new {\n background:\n linear-gradient(\n 135deg,\n rgba(59, 130, 246, 0.15) 0%,\n rgba(59, 130, 246, 0.06) 100%);\n}\n.report-icon-wrapper.status-new ion-icon {\n color: #3b82f6;\n}\n.report-icon-wrapper.status-acknowledged {\n background:\n linear-gradient(\n 135deg,\n rgba(245, 158, 11, 0.15) 0%,\n rgba(245, 158, 11, 0.06) 100%);\n}\n.report-icon-wrapper.status-acknowledged ion-icon {\n color: #f59e0b;\n}\n.report-icon-wrapper.status-investigating {\n background:\n linear-gradient(\n 135deg,\n rgba(139, 92, 246, 0.15) 0%,\n rgba(139, 92, 246, 0.06) 100%);\n}\n.report-icon-wrapper.status-investigating ion-icon {\n color: #8b5cf6;\n}\n.report-icon-wrapper.status-resolved {\n background:\n linear-gradient(\n 135deg,\n rgba(16, 185, 129, 0.15) 0%,\n rgba(16, 185, 129, 0.06) 100%);\n}\n.report-icon-wrapper.status-resolved ion-icon {\n color: #10b981;\n}\n.report-icon-wrapper.status-closed {\n background:\n linear-gradient(\n 135deg,\n rgba(107, 114, 128, 0.15) 0%,\n rgba(107, 114, 128, 0.06) 100%);\n}\n.report-icon-wrapper.status-closed ion-icon {\n color: #6b7280;\n}\n.report-header-content {\n flex: 1;\n min-width: 0;\n}\n.report-status-row {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n margin-bottom: 8px;\n}\n.status-badge {\n font-size: 0.7rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n padding: 4px 10px;\n}\n.category-badge {\n font-size: 0.7rem;\n font-weight: 500;\n padding: 4px 10px;\n}\n.report-time {\n font-size: 0.8rem;\n color: var(--ion-color-medium);\n margin-left: auto;\n}\n.report-description {\n font-size: 0.95rem;\n line-height: 1.5;\n color: var(--ion-text-color);\n margin: 0 0 10px 0;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n.report-meta {\n display: flex;\n gap: 16px;\n flex-wrap: wrap;\n}\n.meta-item {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 0.8rem;\n color: var(--ion-color-medium);\n}\n.meta-item ion-icon {\n font-size: 1rem;\n opacity: 0.7;\n}\n.meta-item.version {\n padding: 2px 8px;\n background: var(--ion-color-light);\n border-radius: 4px;\n font-family: monospace;\n font-size: 0.75rem;\n}\n.expand-icon {\n font-size: 1.25rem;\n color: var(--ion-color-medium);\n opacity: 0.6;\n transition: transform 0.2s ease;\n flex-shrink: 0;\n margin-top: 4px;\n}\n.report-card.expanded .expand-icon {\n transform: rotate(180deg);\n}\n.report-details {\n border-top: 1px solid var(--ion-border-color);\n padding: 1.25rem;\n background: var(--ion-color-step-50);\n animation: expandIn 0.3s ease-out;\n}\n@keyframes expandIn {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.detail-section {\n margin-bottom: 1.5rem;\n}\n.detail-section:last-of-type {\n margin-bottom: 0;\n}\n.detail-section h4 {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.8rem;\n font-weight: 600;\n color: var(--ion-color-medium);\n margin: 0 0 12px 0;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n.detail-section h4 ion-icon {\n font-size: 1.1rem;\n opacity: 0.8;\n}\n.screenshot-section .screenshot-img {\n width: 100%;\n max-width: 400px;\n border-radius: 12px;\n border: 1px solid var(--ion-border-color);\n box-shadow: 0 2px 12px var(--shadow-color-light);\n}\n.detail-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\n gap: 1rem;\n}\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 12px;\n background: var(--ion-item-background);\n border-radius: 10px;\n border: 1px solid var(--ion-border-color);\n}\n.detail-label {\n font-size: 0.7rem;\n font-weight: 600;\n color: var(--ion-color-medium);\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n.detail-value {\n font-size: 0.9rem;\n color: var(--ion-text-color);\n word-break: break-word;\n}\n.detail-value.device-id {\n font-family: monospace;\n font-size: 0.8rem;\n}\n.admin-notes {\n font-size: 0.9rem;\n color: var(--ion-text-color);\n background: var(--ion-item-background);\n padding: 1rem;\n border-radius: 10px;\n border: 1px solid var(--ion-border-color);\n margin: 0;\n line-height: 1.5;\n}\n.actions-row {\n display: flex;\n gap: 0.75rem;\n flex-wrap: wrap;\n padding-top: 1rem;\n margin-top: 1.5rem;\n border-top: 1px solid var(--ion-border-color);\n}\n.actions-row ion-button {\n --border-radius: 10px;\n font-weight: 500;\n}\n.load-more {\n display: flex;\n justify-content: center;\n padding: 1.5rem;\n}\n.load-more ion-button {\n --border-radius: 12px;\n --padding-start: 24px;\n --padding-end: 24px;\n font-weight: 500;\n}\n@media (max-width: 768px) {\n .filter-row {\n flex-direction: column;
6266\n align-items: stretch;\n gap: 0.5rem;\n }\n .filter-select {\n max-width: none;\n }\n .stats-bar {\n padding: 0.875rem 1rem;\n }\n .stats-icon-wrapper {\n width: 40px;\n height: 40px;\n }\n .stats-icon-wrapper ion-icon {\n font-size: 1.25rem;\n }\n .report-header {\n padding: 0.875rem 1rem;\n }\n .report-icon-wrapper {\n width: 42px;\n height: 42px;\n }\n .report-icon-wrapper ion-icon {\n font-size: 1.25rem;\n }\n .report-time {\n width: 100%;\n margin-left: 0;\n margin-top: 4px;\n order: 1;\n }\n .report-meta {\n gap: 10px;\n }\n .meta-item {\n font-size: 0.75rem;\n }\n .detail-grid {\n grid-template-columns: 1fr;\n }\n .report-details {\n padding: 1rem;\n }\n .actions-row {\n flex-direction: column;\n }\n .actions-row ion-button {\n width: 100%;\n }\n}\n.tech-section {\n margin-bottom: 0.75rem;\n border: 1px solid var(--ion-border-color);\n border-radius: 10px;\n overflow: hidden;\n}\n.tech-section:last-child {\n margin-bottom: 0;\n}\n.tech-section-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background: var(--ion-item-background);\n cursor: pointer;\n font-weight: 600;\n font-size: 0.8rem;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n color: var(--ion-color-medium);\n transition: background 0.2s ease;\n}\n.tech-section-header:hover {\n background: var(--ion-color-step-50);\n}\n.tech-section-header ion-icon:first-child {\n font-size: 1.1rem;\n opacity: 0.8;\n}\n.tech-section-header ion-icon:last-child {\n margin-left: auto;\n font-size: 1rem;\n opacity: 0.6;\n}\n.tech-section-content {\n padding: 12px;\n background: var(--ion-color-step-50);\n animation: expandIn 0.2s ease-out;\n}\n.beacon-table-wrapper {\n overflow-x: auto;\n margin-top: 12px;\n border-radius: 8px;\n border: 1px solid var(--ion-border-color);\n}\n.beacon-table {\n width: 100%;\n font-size: 0.8rem;\n border-collapse: collapse;\n min-width: 500px;\n}\n.beacon-table th,\n.beacon-table td {\n padding: 8px 12px;\n text-align: left;\n white-space: nowrap;\n}\n.beacon-table th {\n background: var(--ion-color-step-100);\n font-weight: 600;\n text-transform: uppercase;\n font-size: 0.7rem;\n color: var(--ion-color-medium);\n letter-spacing: 0.03em;\n}\n.beacon-table td {\n border-bottom: 1px solid var(--ion-border-color);\n background: var(--ion-item-background);\n}\n.beacon-table tr:last-child td {\n border-bottom: none;\n}\n.beacon-table .monospace {\n font-family: monospace;\n font-size: 0.75rem;\n}\n.beacon-table .beacon-name {\n font-weight: 500;\n color: var(--ion-text-color);\n}\n.bool-indicator {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 0.85rem;\n}\n.bool-indicator ion-icon {\n font-size: 1rem;\n}\n.bool-indicator.true {\n color: var(--ion-color-success);\n}\n.bool-indicator.false {\n color: var(--ion-color-medium);\n}\n.source-badge {\n display: inline-block;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n.source-badge.beacon {\n background: rgba(59, 130, 246, 0.15);\n color: #3b82f6;\n}\n.source-badge.gps {\n background: rgba(16, 185, 129, 0.15);\n color: #10b981;\n}\n.source-badge.none {\n background: var(--ion-color-light);\n color: var(--ion-color-medium);\n}\n@media (prefers-color-scheme: dark) {\n .stats-bar,\n .report-card {\n box-shadow: 0 2px 12px rgba(0, 0, 0, 0.3);\n }\n .report-card.expanded {\n box-shadow: 0 6px 24px rgba(0, 0, 0, 0.4);\n }\n .report-details {\n background: var(--ion-color-step-100);\n }\n .detail-item {\n background: var(--ion-background-color);\n }\n .tech-section-content {\n background: var(--ion-color-step-100);\n }\n .beacon-table td {\n background: var(--ion-background-color);\n }\n .beacon-table th {\n background: var(--ion-color-step-150);\n }\n}\n"] }] 6267 }], () => [{ type: BugReportService }, { type: ApiUrlService }, { type: AlertController }, { type: LoadingController }, { type: ToastController }, { type: TranslateService }, { type: UserCampusService }, { type: ActivatedRoute }], null); 6268})(); 6269(() => { 6270 (typeof ngDevMode === "undefined" || ngDevMode) && \u0275setClassDebugInfo(BugReportsPage, { className: "BugReportsPage", filePath: "src/app/pages/admin/bug-reports/bug-reports.page.ts", lineNumber: 82 }); 6271})(); 6272export { 6273 BugReportsPage 6274};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.