1// ../../../viewers/slides/bindings/wasm/pkg/slides_wasm.js 2var SlideViewer = class { 3 __destroy_into_raw() { 4 const ptr = this.__wbg_ptr; 5 this.__wbg_ptr = 0; 6 SlideViewerFinalization.unregister(this); 7 return ptr; 8 } 9 free() { 10 const ptr = this.__destroy_into_raw(); 11 wasm.__wbg_slideviewer_free(ptr, 0); 12 } 13 /** 14 * @returns {number} 15 */ 16 frame_height() { 17 const ret = wasm.slideviewer_frame_height(this.__wbg_ptr); 18 return ret >>> 0; 19 } 20 /** 21 * @returns {number} 22 */ 23 frame_len() { 24 const ret = wasm.slideviewer_frame_len(this.__wbg_ptr); 25 return ret >>> 0; 26 } 27 /** 28 * Returns the address of the last drawn frame in linear memory, as tightly packed RGBA8. 29 * @returns {number} 30 */ 31 frame_ptr() { 32 const ret = wasm.slideviewer_frame_ptr(this.__wbg_ptr); 33 return ret >>> 0; 34 } 35 /** 36 * @returns {number} 37 */ 38 frame_width() { 39 const ret = wasm.slideviewer_frame_width(this.__wbg_ptr); 40 return ret >>> 0; 41 } 42 /** 43 * @returns {boolean} 44 */ 45 needs_redraw() { 46 const ret = wasm.slideviewer_needs_redraw(this.__wbg_ptr); 47 return ret !== 0; 48 } 49 /** 50 * Creates a viewer with nothing open. 51 */ 52 constructor() { 53 const ret = wasm.slideviewer_new(); 54 this.__wbg_ptr = ret; 55 SlideViewerFinalization.register(this, this.__wbg_ptr, this); 56 return this; 57 } 58 /** 59 * Drains queued events as an encoded `EventBatch`. 60 * @returns {Uint8Array} 61 */ 62 poll_events() { 63 const ret = wasm.slideviewer_poll_events(this.__wbg_ptr); 64 var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); 65 wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); 66 return v1; 67 } 68 /** 69 * Draws the current frame into linear memory. 70 * 71 * Read it with [`Self::frame_ptr`] and [`Self::frame_len`]. Rebuild the view first; see 72 * the crate docs. 73 */ 74 render() { 75 wasm.slideviewer_render(this.__wbg_ptr); 76 } 77 /** 78 * Sets the surface size in device pixels. 79 * @param {number} width 80 * @param {number} height 81 */ 82 set_size(width, height) { 83 wasm.slideviewer_set_size(this.__wbg_ptr, width, height); 84 } 85 /** 86 * Applies one encoded `Command` and returns an encoded `CommandResult`. 87 * @param {Uint8Array} command 88 * @returns {Uint8Array} 89 */ 90 submit(command) { 91 const ptr0 = passArray8ToWasm0(command, wasm.__wbindgen_malloc); 92 const len0 = WASM_VECTOR_LEN; 93 const ret = wasm.slideviewer_submit(this.__wbg_ptr, ptr0, len0); 94 var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); 95 wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); 96 return v2; 97 } 98 /** 99 * Advances background reading by one frame's worth. 100 */ 101 tick() { 102 wasm.slideviewer_tick(this.__wbg_ptr); 103 } 104}; 105if (Symbol.dispose) SlideViewer.prototype[Symbol.dispose] = SlideViewer.prototype.free; 106function abi_version() { 107 const ret = wasm.abi_version(); 108 return ret >>> 0; 109} 110function __wbg_get_imports() { 111 const import0 = { 112 __proto__: null, 113 __wbg___wbindgen_throw_5d9e815e6fdf150f: function(arg0, arg1) { 114 throw new Error(getStringFromWasm0(arg0, arg1)); 115 }, 116 __wbg_error_757e9472f8410341: function(arg0, arg1) { 117 let deferred0_0; 118 let deferred0_1; 119 try { 120 deferred0_0 = arg0; 121 deferred0_1 = arg1; 122 console.error(getStringFromWasm0(arg0, arg1)); 123 } finally { 124 wasm.__wbindgen_free(deferred0_0, deferred0_1, 1); 125 } 126 }, 127 __wbg_new_227d7c05414eb861: function() { 128 const ret = new Error(); 129 return ret; 130 }, 131 __wbg_stack_3b0d974bbf31e44f: function(arg0, arg1) { 132 const ret = arg1.stack; 133 const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); 134 const len1 = WASM_VECTOR_LEN; 135 getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); 136 getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); 137 }, 138 __wbindgen_init_externref_table: function() { 139 const table = wasm.__wbindgen_externrefs; 140 const offset = table.grow(4); 141 table.set(0, void 0); 142 table.set(offset + 0, void 0); 143 table.set(offset + 1, null); 144 table.set(offset + 2, true); 145 table.set(offset + 3, false); 146 } 147 }; 148 return { 149 __proto__: null, 150 "./slides_wasm_bg.js": import0 151 }; 152} 153var SlideViewerFinalization = typeof FinalizationRegistry === "undefined" ? { register: () => { 154}, unregister: () => { 155} } : new FinalizationRegistry((ptr) =>
155 wasm.__wbg_slideviewer_free(ptr, 1)); 156function getArrayU8FromWasm0(ptr, len) { 157 ptr = ptr >>> 0; 158 return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len); 159} 160var cachedDataViewMemory0 = null; 161function getDataViewMemory0() { 162 if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || cachedDataViewMemory0.buffer.detached === void 0 && cachedDataViewMemory0.buffer !== wasm.memory.buffer) { 163 cachedDataViewMemory0 = new DataView(wasm.memory.buffer); 164 } 165 return cachedDataViewMemory0; 166} 167function getStringFromWasm0(ptr, len) { 168 return decodeText(ptr >>> 0, len); 169} 170var cachedUint8ArrayMemory0 = null; 171function getUint8ArrayMemory0() { 172 if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { 173 cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); 174 } 175 return cachedUint8ArrayMemory0; 176} 177function passArray8ToWasm0(arg, malloc) { 178 const ptr = malloc(arg.length * 1, 1) >>> 0; 179 getUint8ArrayMemory0().set(arg, ptr / 1); 180 WASM_VECTOR_LEN = arg.length; 181 return ptr; 182} 183function passStringToWasm0(arg, malloc, realloc) { 184 if (realloc === void 0) { 185 const buf = cachedTextEncoder.encode(arg); 186 const ptr2 = malloc(buf.length, 1) >>> 0; 187 getUint8ArrayMemory0().subarray(ptr2, ptr2 + buf.length).set(buf); 188 WASM_VECTOR_LEN = buf.length; 189 return ptr2; 190 } 191 let len = arg.length; 192 let ptr = malloc(len, 1) >>> 0; 193 const mem = getUint8ArrayMemory0(); 194 let offset = 0; 195 for (; offset < len; offset++) { 196 const code = arg.charCodeAt(offset); 197 if (code > 127) break; 198 mem[ptr + offset] = code; 199 } 200 if (offset !== len) { 201 if (offset !== 0) { 202 arg = arg.slice(offset); 203 } 204 ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; 205 const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); 206 const ret = cachedTextEncoder.encodeInto(arg, view); 207 offset += ret.written; 208 ptr = realloc(ptr, len, offset, 1) >>> 0; 209 } 210 WASM_VECTOR_LEN = offset; 211 return ptr; 212} 213var cachedTextDecoder = new TextDecoder("utf-8", { ignoreBOM: true, fatal: true }); 214cachedTextDecoder.decode(); 215var MAX_SAFARI_DECODE_BYTES = 2146435072; 216var numBytesDecoded = 0; 217function decodeText(ptr, len) { 218 numBytesDecoded += len; 219 if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) { 220 cachedTextDecoder = new TextDecoder("utf-8", { ignoreBOM: true, fatal: true }); 221 cachedTextDecoder.decode(); 222 numBytesDecoded = len; 223 } 224 return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); 225} 226var cachedTextEncoder = new TextEncoder(); 227if (!("encodeInto" in cachedTextEncoder)) { 228 cachedTextEncoder.encodeInto = function(arg, view) { 229 const buf = cachedTextEncoder.encode(arg); 230 view.set(buf); 231 return { 232 read: arg.length, 233 written: buf.length 234 }; 235 }; 236} 237var WASM_VECTOR_LEN = 0; 238var wasmModule; 239var wasmInstance; 240var wasm; 241function __wbg_finalize_init(instance, module) { 242 wasmInstance = instance; 243 wasm = instance.exports; 244 wasmModule = module; 245 cachedDataViewMemory0 = null; 246 cachedUint8ArrayMemory0 = null; 247 wasm.__wbindgen_start(); 248 return wasm; 249} 250async function __wbg_load(module, imports) { 251 if (typeof Response === "function" && module instanceof Response) { 252 if (!module.ok) { 253 throw new Error(`failed to fetch Wasm: ${module.status} ${module.statusText} fetching '${module.url}'`); 254 } 255 if (typeof WebAssembly.instantiateStreaming === "function") { 256 try { 257 return await WebAssembly.instantiateStreaming(module, imports); 258 } catch (e) { 259 const validResponse = expectedResponseType(module.type); 260 if (validResponse && module.headers.get("Content-Type") !== "application/wasm") { 261 console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); 262 } else { 263 throw e; 264 } 265 } 266 } 267 const bytes = await module.arrayBuffer(); 268 return await WebAssembly.instantiate(bytes, imports); 269 } else { 270 const instance = await WebAssembly.instantiate(module, imports); 271 if (instance instanceof WebAssembly.Instance) { 272 return { instance, module }; 273 } else { 274 return instance; 275 } 276 } 277 function expectedResponseType(type) { 278 switch (type) { 279 case "basic": 280 case "cors": 281 case "default": 282 return true; 283 } 284 return false;
285 } 286} 287async function __wbg_init(module_or_path) { 288 if (wasm !== void 0) return wasm; 289 if (module_or_path !== void 0) { 290 if (Object.getPrototypeOf(module_or_path) === Object.prototype) { 291 ({ module_or_path } = module_or_path); 292 } else { 293 console.warn("using deprecated parameters for the initialization function; pass a single object instead"); 294 } 295 } 296 if (module_or_path === void 0) { 297 module_or_path = new URL("slides_wasm_bg.wasm", import.meta.url); 298 } 299 const imports = __wbg_get_imports(); 300 if (typeof module_or_path === "string" || typeof Request === "function" && module_or_path instanceof Request || typeof URL === "function" && module_or_path instanceof URL) { 301 module_or_path = fetch(module_or_path); 302 } 303 const { instance, module } = await __wbg_load(await module_or_path, imports); 304 return __wbg_finalize_init(instance, module); 305} 306
307// ../../../viewers/slides/proto/gen/slides_pb.js 308var encodeColorScheme = { 309 COLOR_SCHEME_UNSPECIFIED: 0, 310 COLOR_SCHEME_DARK: 1, 311 COLOR_SCHEME_LIGHT: 2 312}; 313var decodeColorScheme = { 314 0: "COLOR_SCHEME_UNSPECIFIED", 315 1: "COLOR_SCHEME_DARK", 316 2: "COLOR_SCHEME_LIGHT" 317}; 318var decodeDeckKind = { 319 0: "DECK_KIND_UNSPECIFIED", 320 1: "DECK_KIND_PRESENTATION", 321 2: "DECK_KIND_SLIDESHOW", 322 3: "DECK_KIND_TEMPLATE" 323}; 324var encodeViewMode = { 325 VIEW_MODE_UNSPECIFIED: 0, 326 VIEW_MODE_SLIDES: 1, 327 VIEW_MODE_GRID: 2 328}; 329var decodeViewMode = { 330 0: "VIEW_MODE_UNSPECIFIED", 331 1: "VIEW_MODE_SLIDES", 332 2: "VIEW_MODE_GRID" 333}; 334var decodeUnrendered = { 335 0: "UNRENDERED_UNSPECIFIED", 336 1: "UNRENDERED_CHART", 337 2: "UNRENDERED_SMART_ART", 338 3: "UNRENDERED_OLE_OBJECT", 339 4: "UNRENDERED_EQUATION", 340 5: "UNRENDERED_PICTURE_FORMAT", 341 6: "UNRENDERED_MEDIA", 342 7: "UNRENDERED_INK", 343 8: "UNRENDERED_MODEL_3D", 344 9: "UNRENDERED_OTHER" 345}; 346var encodeLane = { 347 LANE_UNSPECIFIED: 0, 348 LANE_BEFORE: 1, 349 LANE_AFTER: 2 350}; 351var decodeLane = { 352 0: "LANE_UNSPECIFIED", 353 1: "LANE_BEFORE", 354 2: "LANE_AFTER" 355}; 356var decodeSlideStatus = { 357 0: "SLIDE_STATUS_UNSPECIFIED", 358 1: "SLIDE_STATUS_SAME", 359 2: "SLIDE_STATUS_ADDED", 360 3: "SLIDE_STATUS_REMOVED", 361 4: "SLIDE_STATUS_CHANGED" 362}; 363var decodeMatchBasis = { 364 0: "MATCH_BASIS_UNSPECIFIED", 365 1: "MATCH_BASIS_IDS", 366 2: "MATCH_BASIS_CREATION_ID", 367 3: "MATCH_BASIS_SLIDE_ID", 368 4: "MATCH_BASIS_CONTENT" 369}; 370var decodeSlideAspect = { 371 0: "SLIDE_ASPECT_UNSPECIFIED", 372 1: "SLIDE_ASPECT_SHAPES", 373 2: "SLIDE_ASPECT_TEXT", 374 3: "SLIDE_ASPECT_PICTURES", 375 4: "SLIDE_ASPECT_NOTES", 376 5: "SLIDE_ASPECT_HIDDEN", 377 6: "SLIDE_ASPECT_INHERITED" 378}; 379var decodeShapeAspect = { 380 0: "SHAPE_ASPECT_UNSPECIFIED", 381 1: "SHAPE_ASPECT_ADDED", 382 2: "SHAPE_ASPECT_REMOVED", 383 3: "SHAPE_ASPECT_MOVED", 384 4: "SHAPE_ASPECT_RESIZED", 385 5: "SHAPE_ASPECT_ROTATED", 386 6: "SHAPE_ASPECT_TEXT", 387 7: "SHAPE_ASPECT_FORMATTING", 388 8: "SHAPE_ASPECT_PICTURE" 389}; 390var decodeTextSpanKind = { 391 0: "TEXT_SPAN_KIND_UNSPECIFIED", 392 1: "TEXT_SPAN_KIND_SAME", 393 2: "TEXT_SPAN_KIND_ADDED", 394 3: "TEXT_SPAN_KIND_REMOVED" 395}; 396var encodeCompareMode = { 397 COMPARE_MODE_UNSPECIFIED: 0, 398 COMPARE_MODE_SIDE_BY_SIDE: 1, 399 COMPARE_MODE_SLIDER: 2, 400 COMPARE_MODE_ONIONSKIN: 3 401}; 402var decodeCompareMode = { 403 0: "COMPARE_MODE_UNSPECIFIED", 404 1: "COMPARE_MODE_SIDE_BY_SIDE", 405 2: "COMPARE_MODE_SLIDER", 406 3: "COMPARE_MODE_ONIONSKIN" 407}; 408function _decodeByteRange(bb) { 409 let message = {}; 410 end_of_message: while (!isAtEnd(bb)) { 411 let tag = readVarint32(bb); 412 switch (tag >>> 3) { 413 case 0: 414 break end_of_message; 415 // optional uint64 offset = 1; 416 case 1: { 417 message.offset = readVarint64( 418 bb, 419 /* unsigned */ 420 true 421 ); 422 break; 423 } 424 // optional uint64 length = 2; 425 case 2: { 426 message.length = readVarint64( 427 bb, 428 /* unsigned */ 429 true 430 ); 431 break; 432 } 433 default: 434 skipUnknownField(bb, tag & 7); 435 } 436 } 437 return message; 438} 439function _decodeFontSubstitution(bb) { 440 let message = {}; 441 end_of_message: while (!isAtEnd(bb)) { 442 let tag = readVarint32(bb); 443 switch (tag >>> 3) { 444 case 0: 445 break end_of_message; 446 // optional string requested = 1; 447 case 1: { 448 message.requested = readString(bb, readVarint32(bb)); 449 break; 450 } 451 // optional string used = 2; 452 case 2: { 453 message.used = readString(bb, readVarint32(bb)); 454 break; 455 } 456 // optional bool metric_compatible = 3; 457 case 3: { 458 message.metric_compatible = !!readByte(bb); 459 break; 460 } 461 default: 462 skipUnknownField(bb, tag & 7); 463 } 464 } 465 return message; 466} 467function _decodeUnrenderedCount(bb) { 468 let message = {}; 469 end_of_message: while (!isAtEnd(bb)) { 470 let tag = readVarint32(bb); 471 switch (tag >>> 3) { 472 case 0: 473 break end_of_message; 474 // optional Unrendered kind = 1; 475 case 1: { 476 message.kind = decodeUnrendered[readVarint32(bb)]; 477 break; 478 } 479 // optional uint32 count = 2; 480 case 2: { 481 message.count = readVarint32(bb) >>> 0; 482 break; 483 } 484 default: 485 skipUnknownField(bb, tag & 7); 486 } 487 } 488 return message; 489} 490function _decodeSlideSummary(bb) { 491 let message = {}; 492 end_of_message: while (!isAtEnd(bb)) { 493 let tag = readVarint32(bb); 494 switch (tag >>> 3) { 495 case 0: 496 break end_of_message; 497 // optional uint32 number = 1; 498 case 1: { 499 message.number = readVarint32(bb) >>> 0; 500 break; 501 } 502 // optional bool hidden = 2; 503 case 2: { 504 message.hidden = !!readByte(bb); 505 break; 506 } 507 // optional string title = 3; 508 case 3: { 509 message.title = readString(bb, readVarint32(bb)); 510 break; 511 } 512 // optional bool has_notes = 4; 513 case 4: { 514 message.has_notes = !!readByte(bb); 515 break; 516 } 517 // optional bool unreadable = 5; 518 case 5: { 519 message.unreadable = !!readByte(bb); 520 break; 521 } 522 default: 523 skipUnknownField(bb, tag & 7); 524 } 525 } 526 return message; 527} 528function _decodeDeckInfo(bb) { 529 let message = {}; 530 end_of_message: while (!isAtEnd(bb)) { 531 let tag = readVarint32(bb); 532 switch (tag >>> 3) { 533 case 0: 534 break end_of_message; 535 // optional DeckKind kind = 1; 536 case 1: { 537 message.kind = decodeDeckKind[readVarint32(bb)]; 538 break; 539 } 540 // optional bool macro_enabled = 2; 541 case 2: { 542 message.macro_enabled = !!readByte(bb); 543 break; 544 } 545 // optional uint64 slide_width = 3; 546 case 3: { 547 message.slide_width = readVarint64( 548 bb, 549 /* unsigned */ 550 true 551 ); 552 break; 553 } 554 // optional uint64 slide_height = 4; 555 case 4: { 556 message.slide_height = readVarint64( 557 bb, 558 /* unsigned */ 559 true 560 ); 561 break; 562 } 563 // repeated SlideSummary slides = 5; 564 case 5: { 565 let limit = pushTemporaryLength(bb); 566 let values = message.slides || (message.slides = []); 567 values.push(_decodeSlideSummary(bb)); 568 bb.limit = limit; 569 break; 570 } 571 // optional string title = 6; 572 case 6: { 573 message.title = readString(bb, readVarint32(bb)); 574 break; 575 } 576 // optional string application = 7; 577 case 7: { 578 message.application = readString(bb, readVarint32(bb)); 579 break; 580 } 581 // repeated FontSubstitution fonts = 8; 582 case 8: { 583 let limit = pushTemporaryLength(bb); 584 let values = message.fonts || (message.fonts = []); 585 values.push(_decodeFontSubstitution(bb)); 586 bb.limit = limit; 587 break; 588 } 589 // repeated UnrenderedCount unrendered = 9; 590 case 9: { 591 let limit = pushTemporaryLength(bb); 592 let values = message.unrendered || (message.unrendered = []);
593 values.push(_decodeUnrenderedCount(bb)); 594 bb.limit = limit; 595 break; 596 } 597 // optional bool loading = 10; 598 case 10: { 599 message.loading = !!readByte(bb); 600 break; 601 } 602 default: 603 skipUnknownField(bb, tag & 7); 604 } 605 } 606 return message; 607} 608function _decodeSourceState(bb) { 609 let message = {}; 610 end_of_message: while (!isAtEnd(bb)) { 611 let tag = readVarint32(bb); 612 switch (tag >>> 3) { 613 case 0: 614 break end_of_message; 615 // optional uint64 bytes_total = 1; 616 case 1: { 617 message.bytes_total = readVarint64( 618 bb, 619 /* unsigned */ 620 true 621 ); 622 break; 623 } 624 // optional uint64 bytes_have = 2; 625 case 2: { 626 message.bytes_have = readVarint64( 627 bb, 628 /* unsigned */ 629 true 630 ); 631 break; 632 } 633 // repeated ByteRange have = 3; 634 case 3: { 635 let limit = pushTemporaryLength(bb); 636 let values = message.have || (message.have = []); 637 values.push(_decodeByteRange(bb)); 638 bb.limit = limit; 639 break; 640 } 641 // repeated ByteRange wanted = 4; 642 case 4: { 643 let limit = pushTemporaryLength(bb); 644 let values = message.wanted || (message.wanted = []); 645 values.push(_decodeByteRange(bb)); 646 bb.limit = limit; 647 break; 648 } 649 // optional bool complete = 5; 650 case 5: { 651 message.complete = !!readByte(bb); 652 break; 653 } 654 // optional Lane lane = 6; 655 case 6: { 656 message.lane = decodeLane[readVarint32(bb)]; 657 break; 658 } 659 default: 660 skipUnknownField(bb, tag & 7); 661 } 662 } 663 return message; 664} 665function _decodeViewState(bb) { 666 let message = {}; 667 end_of_message: while (!isAtEnd(bb)) { 668 let tag = readVarint32(bb); 669 switch (tag >>> 3) { 670 case 0: 671 break end_of_message; 672 // optional ViewMode mode = 1; 673 case 1: { 674 message.mode = decodeViewMode[readVarint32(bb)]; 675 break; 676 } 677 // optional uint32 current = 2; 678 case 2: { 679 message.current = readVarint32(bb) >>> 0; 680 break; 681 } 682 // optional uint32 first_visible = 3; 683 case 3: { 684 message.first_visible = readVarint32(bb) >>> 0; 685 break; 686 } 687 // optional uint32 last_visible = 4; 688 case 4: { 689 message.last_visible = readVarint32(bb) >>> 0; 690 break; 691 } 692 // optional uint32 columns = 5; 693 case 5: { 694 message.columns = readVarint32(bb) >>> 0; 695 break; 696 } 697 // optional float scroll_y = 6; 698 case 6: { 699 message.scroll_y = readFloat(bb); 700 break; 701 } 702 // optional float max_scroll_y = 7; 703 case 7: { 704 message.max_scroll_y = readFloat(bb); 705 break; 706 } 707 // optional float content_height = 8; 708 case 8: { 709 message.content_height = readFloat(bb); 710 break; 711 } 712 default: 713 skipUnknownField(bb, tag & 7); 714 } 715 } 716 return message; 717} 718function _decodeCurrentSlide(bb) { 719 let message = {}; 720 end_of_message: while (!isAtEnd(bb)) { 721 let tag = readVarint32(bb); 722 switch (tag >>> 3) { 723 case 0: 724 break end_of_message; 725 // optional uint32 index = 1; 726 case 1: { 727 message.index = readVarint32(bb) >>> 0; 728 break; 729 } 730 // optional uint32 number = 7; 731 case 7: { 732 message.number = readVarint32(bb) >>> 0; 733 break; 734 } 735 // optional string title = 2; 736 case 2: { 737 message.title = readString(bb, readVarint32(bb)); 738 break; 739 } 740 // optional string notes = 3; 741 case 3: { 742 message.notes = readString(bb, readVarint32(bb)); 743 break; 744 } 745 // optional bool hidden = 4; 746 case 4: { 747 message.hidden = !!readByte(bb); 748 break; 749 } 750 // optional string layout = 5; 751 case 5: { 752 message.layout = readString(bb, readVarint32(bb)); 753 break; 754 } 755 // repeated string links = 6; 756 case 6: { 757 let values = message.links || (message.links = []); 758 values.push(readString(bb, readVarint32(bb))); 759 break; 760 } 761 default: 762 skipUnknownField(bb, tag & 7); 763 } 764 } 765 return message; 766} 767function _decodeHoverState(bb) { 768 let message = {}; 769 end_of_message: while (!isAtEnd(bb)) { 770 let tag = readVarint32(bb); 771 switch (tag >>> 3) { 772 case 0: 773 break end_of_message; 774 // optional uint32 slide = 1; 775 case 1: { 776 message.slide = readVarint32(bb) >>> 0; 777 break; 778 } 779 // optional float x = 2; 780 case 2: { 781 message.x = readFloat(bb); 782 break; 783 } 784 // optional float y = 3; 785 case 3: { 786 message.y = readFloat(bb); 787 break; 788 } 789 // optional float width = 4; 790 case 4: { 791 message.width = readFloat(bb); 792 break; 793 } 794 // optional float height = 5; 795 case 5: { 796 message.height = readFloat(bb); 797 break; 798 } 799 default: 800 skipUnknownField(bb, tag & 7); 801 } 802 } 803 return message; 804} 805function _decodeRenderOptions(bb) { 806 let message = {}; 807 end_of_message: while (!isAtEnd(bb)) { 808 let tag = readVarint32(bb); 809 switch (tag >>> 3) { 810 case 0: 811 break end_of_message; 812 // optional ColorScheme color_scheme = 1; 813 case 1: { 814 message.color_scheme = decodeColorScheme[readVarint32(bb)]; 815 break; 816 } 817 // optional float ui_scale = 2; 818 case 2: { 819 message.ui_scale = readFloat(bb); 820 break; 821 } 822 default: 823 skipUnknownField(bb, tag & 7); 824 } 825 } 826 return message; 827} 828function _decodeSlidePair(bb) { 829 let message = {}; 830 end_of_message: while (!isAtEnd(bb)) { 831 let tag = readVarint32(bb); 832 switch (tag >>> 3) { 833 case 0: 834 break end_of_message; 835 // optional SlideStatus status = 1; 836 case 1: { 837 message.status = decodeSlideStatus[readVarint32(bb)]; 838 break; 839 } 840 // optional uint32 before = 2; 841 case 2: { 842 message.before = readVarint32(bb) >>> 0; 843 break; 844 } 845 // optional uint32 after = 3; 846 case 3: { 847 message.after = readVarint32(bb) >>> 0; 848 break; 849 } 850 // optional bool moved = 4; 851 case 4: { 852 message.moved = !!readByte(bb); 853 break; 854 } 855 // optional MatchBasis basis = 5; 856 case 5: { 857 message.basis = decodeMatchBasis[readVarint32(bb)]; 858 break; 859 } 860 // repeated SlideAspect aspects = 6; 861 case 6: { 862 let values = message.aspects || (message.aspects = []); 863 if ((tag & 7) === 2) { 864 let outerLimit = pushTemporaryLength(bb); 865 while (!isAtEnd(bb)) { 866 values.push(decodeSlideAspect[readVarint32(bb)]); 867 } 868 bb.limit = outerLimit; 869 } else { 870 values.push(decodeSlideAspect[readVarint32(bb)]); 871 } 872 break; 873 } 874 default: 875 skipUnknownField(bb, tag & 7); 876 } 877 } 878 return message; 879} 880function _decodeBasisCount(bb) { 881 let message = {}; 882 end_of_message: while (!isAtEnd(bb)) { 883 let tag = readVarint32(bb); 884 switch (tag >>> 3) { 885 case 0: 886 break end_of_message; 887 // optional MatchBasis basis = 1; 888 case 1: { 889 message.basis = decodeMatchBasis[readVarint32(bb)]; 890 break; 891 } 892 // optional uint32 count = 2; 893 case 2: { 894 message.count = readVarint32(bb) >>> 0; 895 break; 896 } 897 default: 898 skipUnknownField(bb, tag & 7); 899 } 900 } 901 return message; 902} 903function _decodeLaneError(bb) { 904 let message = {}; 905 end_of_message: while (!isAtEnd(bb)) { 906 let tag = readVarint32(bb); 907 switch (tag >>> 3) { 908 case 0: 909 break end_of_message; 910 // optional Lane lane = 1; 911 case 1: { 912 message.lane = decodeLane[readVarint32(bb)]; 913 break; 914 } 915 // optional uint32 code = 2; 916 case 2: { 917 message.code = readVarint32(bb) >>> 0; 918 break; 919 } 920 // optional string message = 3; 921 case 3: { 922 message.message = readString(bb, readVarint32(bb)); 923 break; 924 } 925 default: 926 skipUnknownField(bb, tag & 7); 927 } 928 } 929 return message; 930} 931function _decodeStatusSwatch(bb) { 932 let message = {}; 933 end_of_message: while (!isAtEnd(bb)) { 934 let tag = readVarint32(bb); 935 switch (tag >>> 3) { 936 case 0: 937 break end_of_message; 938 // optional SlideStatus status = 1; 939 case 1: { 940 message.status = decodeSlideStatus[readVarint32(bb)]; 941 break; 942 } 943 // optional string color = 2; 944 case 2: { 945 message.color = readString(bb, readVarint32(bb)); 946 break; 947 } 948 default: 949 skipUnknownField(bb, tag & 7); 950 } 951 } 952 return message; 953}
954function _decodeDiffState(bb) { 955 let message = {}; 956 end_of_message: while (!isAtEnd(bb)) { 957 let tag = readVarint32(bb); 958 switch (tag >>> 3) { 959 case 0: 960 break end_of_message; 961 // optional bool complete = 1; 962 case 1: { 963 message.complete = !!readByte(bb); 964 break; 965 } 966 // optional DeckInfo before = 2; 967 case 2: { 968 let limit = pushTemporaryLength(bb); 969 message.before = _decodeDeckInfo(bb); 970 bb.limit = limit; 971 break; 972 } 973 // optional uint32 same = 3; 974 case 3: { 975 message.same = readVarint32(bb) >>> 0; 976 break; 977 } 978 // optional uint32 added = 4; 979 case 4: { 980 message.added = readVarint32(bb) >>> 0; 981 break; 982 } 983 // optional uint32 removed = 5; 984 case 5: { 985 message.removed = readVarint32(bb) >>> 0; 986 break; 987 } 988 // optional uint32 changed = 6; 989 case 6: { 990 message.changed = readVarint32(bb) >>> 0; 991 break; 992 } 993 // optional uint32 moved = 7; 994 case 7: { 995 message.moved = readVarint32(bb) >>> 0; 996 break; 997 } 998 // repeated SlidePair rows = 8; 999 case 8: { 1000 let limit = pushTemporaryLength(bb); 1001 let values = message.rows || (message.rows = []); 1002 values.push(_decodeSlidePair(bb)); 1003 bb.limit = limit; 1004 break; 1005 } 1006 // repeated BasisCount matched_by = 9; 1007 case 9: { 1008 let limit = pushTemporaryLength(bb); 1009 let values = message.matched_by || (message.matched_by = []); 1010 values.push(_decodeBasisCount(bb)); 1011 bb.limit = limit; 1012 break; 1013 } 1014 // optional bool slide_size_changed = 10; 1015 case 10: { 1016 message.slide_size_changed = !!readByte(bb); 1017 break; 1018 } 1019 // optional uint32 inherited = 11; 1020 case 11: { 1021 message.inherited = readVarint32(bb) >>> 0; 1022 break; 1023 } 1024 // repeated LaneError errors = 12; 1025 case 12: { 1026 let limit = pushTemporaryLength(bb); 1027 let values = message.errors || (message.errors = []); 1028 values.push(_decodeLaneError(bb)); 1029 bb.limit = limit; 1030 break; 1031 } 1032 // optional bool before_absent = 13; 1033 case 13: { 1034 message.before_absent = !!readByte(bb); 1035 break; 1036 } 1037 // optional bool after_absent = 14; 1038 case 14: { 1039 message.after_absent = !!readByte(bb); 1040 break; 1041 } 1042 // repeated StatusSwatch legend = 15; 1043 case 15: { 1044 let limit = pushTemporaryLength(bb); 1045 let values = message.legend || (message.legend = []); 1046 values.push(_decodeStatusSwatch(bb)); 1047 bb.limit = limit; 1048 break; 1049 } 1050 default: 1051 skipUnknownField(bb, tag & 7); 1052 } 1053 } 1054 return message; 1055} 1056function _decodeShapeBox(bb) { 1057 let message = {}; 1058 end_of_message: while (!isAtEnd(bb)) { 1059 let tag = readVarint32(bb); 1060 switch (tag >>> 3) { 1061 case 0: 1062 break end_of_message; 1063 // optional double x = 1; 1064 case 1: { 1065 message.x = readDouble(bb); 1066 break; 1067 } 1068 // optional double y = 2; 1069 case 2: { 1070 message.y = readDouble(bb); 1071 break; 1072 } 1073 // optional double width = 3; 1074 case 3: { 1075 message.width = readDouble(bb); 1076 break; 1077 } 1078 // optional double height = 4; 1079 case 4: { 1080 message.height = readDouble(bb); 1081 break; 1082 } 1083 default: 1084 skipUnknownField(bb, tag & 7); 1085 } 1086 } 1087 return message; 1088} 1089function _decodeTextSpan(bb) { 1090 let message = {}; 1091 end_of_message: while (!isAtEnd(bb)) { 1092 let tag = readVarint32(bb); 1093 switch (tag >>> 3) { 1094 case 0: 1095 break end_of_message; 1096 // optional TextSpanKind kind = 1; 1097 case 1: { 1098 message.kind = decodeTextSpanKind[readVarint32(bb)]; 1099 break; 1100 } 1101 // optional string text = 2; 1102 case 2: { 1103 message.text = readString(bb, readVarint32(bb)); 1104 break; 1105 } 1106 default: 1107 skipUnknownField(bb, tag & 7); 1108 } 1109 } 1110 return message; 1111} 1112function _decodeShapeChange(bb) { 1113 let message = {}; 1114 end_of_message: while (!isAtEnd(bb)) { 1115 let tag = readVarint32(bb); 1116 switch (tag >>> 3) { 1117 case 0: 1118 break end_of_message; 1119 // optional string name = 1; 1120 case 1: { 1121 message.name = readString(bb, readVarint32(bb)); 1122 break; 1123 } 1124 // repeated ShapeAspect aspects = 2; 1125 case 2: { 1126 let values = message.aspects || (message.aspects = []); 1127 if ((tag & 7) === 2) { 1128 let outerLimit = pushTemporaryLength(bb); 1129 while (!isAtEnd(bb)) { 1130 values.push(decodeShapeAspect[readVarint32(bb)]); 1131 } 1132 bb.limit = outerLimit; 1133 } else { 1134 values.push(decodeShapeAspect[readVarint32(bb)]); 1135 } 1136 break; 1137 } 1138 // optional ShapeBox before = 3; 1139 case 3: { 1140 let limit = pushTemporaryLength(bb); 1141 message.before = _decodeShapeBox(bb); 1142 bb.limit = limit; 1143 break; 1144 } 1145 // optional ShapeBox after = 4;
1146 case 4: { 1147 let limit = pushTemporaryLength(bb); 1148 message.after = _decodeShapeBox(bb); 1149 bb.limit = limit; 1150 break; 1151 } 1152 // repeated TextSpan text = 5; 1153 case 5: { 1154 let limit = pushTemporaryLength(bb); 1155 let values = message.text || (message.text = []); 1156 values.push(_decodeTextSpan(bb)); 1157 bb.limit = limit; 1158 break; 1159 } 1160 default: 1161 skipUnknownField(bb, tag & 7); 1162 } 1163 } 1164 return message; 1165} 1166function _decodeComparedSlide(bb) { 1167 let message = {}; 1168 end_of_message: while (!isAtEnd(bb)) { 1169 let tag = readVarint32(bb); 1170 switch (tag >>> 3) { 1171 case 0: 1172 break end_of_message; 1173 // optional uint32 row = 1; 1174 case 1: { 1175 message.row = readVarint32(bb) >>> 0; 1176 break; 1177 } 1178 // optional SlidePair pair = 2; 1179 case 2: { 1180 let limit = pushTemporaryLength(bb); 1181 message.pair = _decodeSlidePair(bb); 1182 bb.limit = limit; 1183 break; 1184 } 1185 // optional CurrentSlide before = 3; 1186 case 3: { 1187 let limit = pushTemporaryLength(bb); 1188 message.before = _decodeCurrentSlide(bb); 1189 bb.limit = limit; 1190 break; 1191 } 1192 // optional CurrentSlide after = 4; 1193 case 4: { 1194 let limit = pushTemporaryLength(bb); 1195 message.after = _decodeCurrentSlide(bb); 1196 bb.limit = limit; 1197 break; 1198 } 1199 // repeated ShapeChange shapes = 5; 1200 case 5: { 1201 let limit = pushTemporaryLength(bb); 1202 let values = message.shapes || (message.shapes = []); 1203 values.push(_decodeShapeChange(bb)); 1204 bb.limit = limit; 1205 break; 1206 } 1207 // repeated TextSpan title = 6; 1208 case 6: { 1209 let limit = pushTemporaryLength(bb); 1210 let values = message.title || (message.title = []); 1211 values.push(_decodeTextSpan(bb)); 1212 bb.limit = limit; 1213 break; 1214 } 1215 // repeated TextSpan notes = 7; 1216 case 7: { 1217 let limit = pushTemporaryLength(bb); 1218 let values = message.notes || (message.notes = []); 1219 values.push(_decodeTextSpan(bb)); 1220 bb.limit = limit; 1221 break; 1222 } 1223 default: 1224 skipUnknownField(bb, tag & 7); 1225 } 1226 } 1227 return message; 1228} 1229function _decodeCompareState(bb) { 1230 let message = {}; 1231 end_of_message: while (!isAtEnd(bb)) { 1232 let tag = readVarint32(bb); 1233 switch (tag >>> 3) { 1234 case 0: 1235 break end_of_message; 1236 // optional CompareMode mode = 1; 1237 case 1: { 1238 message.mode = decodeCompareMode[readVarint32(bb)]; 1239 break; 1240 } 1241 // optional double slider_position = 2; 1242 case 2: { 1243 message.slider_position = readDouble(bb); 1244 break; 1245 } 1246 // optional double onion_opacity = 3; 1247 case 3: { 1248 message.onion_opacity = readDouble(bb); 1249 break; 1250 } 1251 // optional bool changes_only = 4; 1252 case 4: { 1253 message.changes_only = !!readByte(bb); 1254 break; 1255 } 1256 // optional bool mark_changes = 5; 1257 case 5: { 1258 message.mark_changes = !!readByte(bb); 1259 break; 1260 } 1261 default: 1262 skipUnknownField(bb, tag & 7); 1263 } 1264 } 1265 return message; 1266} 1267function _decodeViewerState(bb) { 1268 let message = {}; 1269 end_of_message: while (!isAtEnd(bb)) { 1270 let tag = readVarint32(bb); 1271 switch (tag >>> 3) { 1272 case 0: 1273 break end_of_message; 1274 // optional DeckInfo deck = 1; 1275 case 1: { 1276 let limit = pushTemporaryLength(bb); 1277 message.deck = _decodeDeckInfo(bb); 1278 bb.limit = limit; 1279 break; 1280 } 1281 // optional SourceState source = 2; 1282 case 2: { 1283 let limit = pushTemporaryLength(bb); 1284 message.source = _decodeSourceState(bb); 1285 bb.limit = limit; 1286 break; 1287 } 1288 // optional ViewState view = 3; 1289 case 3: { 1290 let limit = pushTemporaryLength(bb); 1291 message.view = _decodeViewState(bb); 1292 bb.limit = limit; 1293 break; 1294 } 1295 // optional CurrentSlide current = 4; 1296 case 4: { 1297 let limit = pushTemporaryLength(bb); 1298 message.current = _decodeCurrentSlide(bb); 1299 bb.limit = limit; 1300 break; 1301 } 1302 // optional HoverState hover = 5; 1303 case 5: { 1304 let limit = pushTemporaryLength(bb); 1305 message.hover = _decodeHoverState(bb); 1306 bb.limit = limit; 1307 break; 1308 } 1309 // optional RenderOptions render = 6; 1310 case 6: { 1311 let limit = pushTemporaryLength(bb); 1312 message.render = _decodeRenderOptions(bb); 1313 bb.limit = limit; 1314 break; 1315 } 1316 // repeated SourceState sources = 7; 1317 case 7: { 1318 let limit = pushTemporaryLength(bb); 1319 let values = message.sources || (message.sources = []); 1320 values.push(_decodeSourceState(bb)); 1321 bb.limit = limit; 1322 break; 1323 } 1324 // optional DiffState diff = 8; 1325 case 8: { 1326 let limit = pushTemporaryLength(bb);
1327 message.diff = _decodeDiffState(bb); 1328 bb.limit = limit; 1329 break; 1330 } 1331 // optional ComparedSlide compared = 9; 1332 case 9: { 1333 let limit = pushTemporaryLength(bb); 1334 message.compared = _decodeComparedSlide(bb); 1335 bb.limit = limit; 1336 break; 1337 } 1338 // optional CompareState compare = 10; 1339 case 10: { 1340 let limit = pushTemporaryLength(bb); 1341 message.compare = _decodeCompareState(bb); 1342 bb.limit = limit; 1343 break; 1344 } 1345 default: 1346 skipUnknownField(bb, tag & 7); 1347 } 1348 } 1349 return message; 1350} 1351function _encodeOpen(message, bb) { 1352 let $ext = message.ext; 1353 if ($ext !== void 0) { 1354 writeVarint32(bb, 10); 1355 writeString(bb, $ext); 1356 } 1357 let $total_bytes = message.total_bytes; 1358 if ($total_bytes !== void 0) { 1359 writeVarint32(bb, 16); 1360 writeVarint64(bb, $total_bytes); 1361 } 1362 let $initial = message.initial; 1363 if ($initial !== void 0) { 1364 writeVarint32(bb, 26); 1365 writeVarint32(bb, $initial.length), writeBytes(bb, $initial); 1366 } 1367} 1368function _encodeSupplyBytes(message, bb) { 1369 let $offset = message.offset; 1370 if ($offset !== void 0) { 1371 writeVarint32(bb, 8); 1372 writeVarint64(bb, $offset); 1373 } 1374 let $data = message.data; 1375 if ($data !== void 0) { 1376 writeVarint32(bb, 18); 1377 writeVarint32(bb, $data.length), writeBytes(bb, $data); 1378 } 1379 let $lane = message.lane; 1380 if ($lane !== void 0) { 1381 writeVarint32(bb, 24); 1382 writeVarint32(bb, encodeLane[$lane]); 1383 } 1384} 1385function _encodeLaneSource(message, bb) { 1386 let $ext = message.ext; 1387 if ($ext !== void 0) { 1388 writeVarint32(bb, 10); 1389 writeString(bb, $ext); 1390 } 1391 let $total_bytes = message.total_bytes; 1392 if ($total_bytes !== void 0) { 1393 writeVarint32(bb, 16); 1394 writeVarint64(bb, $total_bytes); 1395 } 1396 let $initial = message.initial; 1397 if ($initial !== void 0) { 1398 writeVarint32(bb, 26); 1399 writeVarint32(bb, $initial.length), writeBytes(bb, $initial); 1400 } 1401} 1402function _encodeOpenDiff(message, bb) { 1403 let $before = message.before; 1404 if ($before !== void 0) { 1405 writeVarint32(bb, 10); 1406 let nested = popByteBuffer(); 1407 _encodeLaneSource($before, nested); 1408 writeVarint32(bb, nested.limit); 1409 writeByteBuffer(bb, nested); 1410 pushByteBuffer(nested); 1411 } 1412 let $after = message.after; 1413 if ($after !== void 0) { 1414 writeVarint32(bb, 18); 1415 let nested = popByteBuffer(); 1416 _encodeLaneSource($after, nested); 1417 writeVarint32(bb, nested.limit); 1418 writeByteBuffer(bb, nested); 1419 pushByteBuffer(nested); 1420 } 1421} 1422function _encodeSetCompareOptions(message, bb) { 1423 let $mode = message.mode; 1424 if ($mode !== void 0) { 1425 writeVarint32(bb, 8); 1426 writeVarint32(bb, encodeCompareMode[$mode]); 1427 } 1428 let $slider_position = message.slider_position; 1429 if ($slider_position !== void 0) { 1430 writeVarint32(bb, 17); 1431 writeDouble(bb, $slider_position); 1432 } 1433 let $onion_opacity = message.onion_opacity; 1434 if ($onion_opacity !== void 0) { 1435 writeVarint32(bb, 25); 1436 writeDouble(bb, $onion_opacity); 1437 } 1438 let $changes_only = message.changes_only; 1439 if ($changes_only !== void 0) { 1440 writeVarint32(bb, 32); 1441 writeByte(bb, $changes_only ? 1 : 0); 1442 } 1443 let $mark_changes = message.mark_changes; 1444 if ($mark_changes !== void 0) { 1445 writeVarint32(bb, 40); 1446 writeByte(bb, $mark_changes ? 1 : 0); 1447 } 1448} 1449function _encodeUnload(message, bb) { 1450} 1451function _encodeSetView(message, bb) { 1452 let $mode = message.mode; 1453 if ($mode !== void 0) { 1454 writeVarint32(bb, 8); 1455 writeVarint32(bb, encodeViewMode[$mode]); 1456 } 1457 let $slide = message.slide; 1458 if ($slide !== void 0) { 1459 writeVarint32(bb, 16); 1460 writeVarint32(bb, $slide); 1461 } 1462 let $scroll_y = message.scroll_y; 1463 if ($scroll_y !== void 0) { 1464 writeVarint32(bb, 29); 1465 writeFloat(bb, $scroll_y); 1466 } 1467} 1468function _encodeStep(message, bb) { 1469 let $slides = message.slides; 1470 if ($slides !== void 0) { 1471 writeVarint32(bb, 8); 1472 writeVarint32ZigZag(bb, $slides); 1473 } 1474 let $rows = message.rows; 1475 if ($rows !== void 0) { 1476 writeVarint32(bb, 16); 1477 writeVarint32ZigZag(bb, $rows); 1478 } 1479 let $changes = message.changes; 1480 if ($changes !== void 0) { 1481 writeVarint32(bb, 24); 1482 writeVarint32ZigZag(bb, $changes); 1483 } 1484} 1485function _encodeSetRenderOptions(message, bb) { 1486 let $color_scheme = message.color_scheme; 1487 if ($color_scheme !== void 0) { 1488 writeVarint32(bb, 8); 1489 writeVarint32(bb, encodeColorScheme[$color_scheme]); 1490 } 1491 let $ui_scale = message.ui_scale; 1492 if ($ui_scale !== void 0) { 1493 writeVarint32(bb, 21); 1494 writeFloat(bb, $ui_scale); 1495 } 1496} 1497function _encodeResize(message, bb) { 1498 let $width = message.width; 1499 if ($width !== void 0) { 1500 writeVarint32(bb, 8); 1501 writeVarint32(bb, $width); 1502 } 1503 let $height = message.height; 1504 if ($height !== void 0) { 1505 writeVarint32(bb, 16); 1506 writeVarint32(bb, $height); 1507 } 1508} 1509function _encodePointerMove(message, bb) { 1510 let $x = message.x; 1511 if ($x !== void 0) { 1512 writeVarint32(bb, 13); 1513 writeFloat(bb, $x); 1514 } 1515 let $y = message.y; 1516 if ($y !== void 0) { 1517 writeVarint32(bb, 21); 1518 writeFloat(bb, $y); 1519 } 1520} 1521function _encodePointerButton(message, bb) { 1522 let $button = message.button; 1523 if ($button !== void 0) { 1524 writeVarint32(bb, 8); 1525 writeVarint32(bb, $button); 1526 } 1527 let $x = message.x; 1528 if ($x !== void 0) { 1529 writeVarint32(bb, 21); 1530 writeFloat(bb, $x); 1531 } 1532 let $y = message.y; 1533 if ($y !== void 0) { 1534 writeVarint32(bb, 29); 1535 writeFloat(bb, $y); 1536 } 1537 let $pressed = message.pressed; 1538 if ($pressed !== void 0) { 1539 writeVarint32(bb, 32); 1540 writeByte(bb, $pressed ? 1 : 0); 1541 } 1542} 1543function _encodePointerLeave(message, bb) { 1544} 1545function _encodeWheel(message, bb) { 1546 let $dx = message.dx; 1547 if ($dx !== void 0) { 1548 writeVarint32(bb, 13); 1549 writeFloat(bb, $dx); 1550 } 1551 let $dy = message.dy; 1552 if ($dy !== void 0) { 1553 writeVarint32(bb, 21); 1554 writeFloat(bb, $dy); 1555 } 1556} 1557function _encodeInput(message, bb) { 1558 let $pointer_move = message.pointer_move; 1559 if ($pointer_move !== void 0) { 1560 writeVarint32(bb, 10); 1561 let nested = popByteBuffer(); 1562 _encodePointerMove($pointer_move, nested); 1563 writeVarint32(bb, nested.limit); 1564 writeByteBuffer(bb, nested); 1565 pushByteBuffer(nested); 1566 } 1567 let $pointer_button = message.pointer_button; 1568 if ($pointer_button !== void 0) { 1569 writeVarint32(bb, 18); 1570 let nested = popByteBuffer(); 1571 _encodePointerButton($pointer_button, nested); 1572 writeVarint32(bb, nested.limit); 1573 writeByteBuffer(bb, nested); 1574 pushByteBuffer(nested); 1575 } 1576 let $pointer_leave = message.pointer_leave; 1577 if ($pointer_leave !== void 0) { 1578 writeVarint32(bb, 26); 1579 let nested = popByteBuffer(); 1580 _encodePointerLeave($pointer_leave, nested); 1581 writeVarint32(bb, nested.limit); 1582 writeByteBuffer(bb, nested); 1583 pushByteBuffer(nested); 1584 } 1585 let $wheel = message.wheel; 1586 if ($wheel !== void 0) { 1587 writeVarint32(bb, 34); 1588 let nested = popByteBuffer(); 1589 _encodeWheel($wheel, nested); 1590 writeVarint32(bb, nested.limit); 1591 writeByteBuffer(bb, nested); 1592 pushByteBuffer(nested); 1593 } 1594} 1595function _encodeGetState(message, bb) { 1596} 1597function encodeCommand(message) { 1598 let bb = popByteBuffer(); 1599 _encodeCommand(message, bb); 1600 return toUint8Array(bb); 1601} 1602function _encodeCommand(message, bb) { 1603 let $get_state = message.get_state; 1604 if ($get_state !== void 0) { 1605 writeVarint32(bb, 10); 1606 let nested = popByteBuffer(); 1607 _encodeGetState($get_state, nested); 1608 writeVarint32(bb, nested.limit); 1609 writeByteBuffer(bb, nested); 1610 pushByteBuffer(nested); 1611 } 1612 let $open = message.open; 1613 if ($open !== void 0) { 1614 writeVarint32(bb, 18); 1615 let nested = popByteBuffer(); 1616 _encodeOpen($open, nested); 1617 writeVarint32(bb, nested.limit); 1618 writeByteBuffer(bb, nested); 1619 pushByteBuffer(nested); 1620 } 1621 let $supply_bytes = message.supply_bytes; 1622 if ($supply_bytes !== void 0) { 1623 writeVarint32(bb, 26); 1624 let nested = popByteBuffer(); 1625 _encodeSupplyBytes($supply_bytes, nested); 1626 writeVarint32(bb, nested.limit); 1627 writeByteBuffer(bb, nested); 1628 pushByteBuffer(nested); 1629 } 1630 let $unload = message.unload; 1631 if ($unload !== void 0) { 1632 writeVarint32(bb, 34); 1633 let nested = popByteBuffer(); 1634 _encodeUnload($unload, nested); 1635 writeVarint32(bb, nested.limit); 1636 writeByteBuffer(bb, nested); 1637 pushByteBuffer(nested); 1638 } 1639 let $set_view = message.set_view; 1640 if ($set_view !== void 0) { 1641 writeVarint32(bb, 42); 1642 let nested = popByteBuffer(); 1643 _encodeSetView($set_view, nested); 1644 writeVarint32(bb, nested.limit); 1645 writeByteBuffer(bb, nested); 1646 pushByteBuffer(nested); 1647 } 1648 let $set_render_options = message.set_render_options; 1649 if ($set_render_options !== void 0) { 1650 writeVarint32(bb, 50); 1651 let nested = popByteBuffer(); 1652 _encodeSetRenderOptions($set_render_options, nested); 1653 writeVarint32(bb, nested.limit); 1654 writeByteBuffer(bb, nested); 1655 pushByteBuffer(nested); 1656 } 1657 let $resize = message.resize; 1658 if ($resize !== void 0) { 1659 writeVarint32(bb, 58); 1660 let nested = popByteBuffer(); 1661 _encodeResize($resize, nested); 1662 writeVarint32(bb, nested.limit); 1663 writeByteBuffer(bb, nested); 1664 pushByteBuffer(nested); 1665 } 1666 let $input = message.input; 1667 if ($input !== void 0) { 1668 writeVarint32(bb, 66); 1669 let nested = popByteBuffer(); 1670 _encodeInput($input, nested); 1671 writeVarint32(bb, nested.limit); 1672 writeByteBuffer(bb, nested); 1673 pushByteBuffer(nested); 1674 } 1675 let $step = message.step; 1676 if ($step !== void 0) { 1677 writeVarint32(bb, 74); 1678 let nested = popByteBuffer(); 1679 _encodeStep($step, nested); 1680 writeVarint32(bb, nested.limit); 1681 writeByteBuffer(bb, nested); 1682 pushByteBuffer(nested); 1683 } 1684 let $open_diff = message.open_diff; 1685 if ($open_diff !== void 0) { 1686 writeVarint32(bb, 82); 1687 let nested = popByteBuffer(); 1688 _encodeOpenDiff($open_diff, nested); 1689 writeVarint32(bb, nested.limit); 1690 writeByteBuffer(bb, nested); 1691 pushByteBuffer(nested); 1692 } 1693 let $set_compare_options = message.set_compare_options; 1694 if ($set_compare_options !== void 0) { 1695 writeVarint32(bb, 90); 1696 let nested = popByteBuffer(); 1697 _encodeSetCompareOptions($set_compare_options, nested); 1698 writeVarint32(bb, nested.limit); 1699 writeByteBuffer(bb, nested); 1700 pushByteBuffer(nested); 1701 } 1702} 1703function _decodeOk(bb) { 1704 let message = {}; 1705 end_of_message: while (!isAtEnd(bb)) { 1706 let tag = readVarint32(bb); 1707 switch (tag >>> 3) { 1708 case 0: 1709 break end_of_message; 1710 default: 1711 skipUnknownField(bb, tag & 7); 1712 } 1713 } 1714 return message; 1715} 1716function _decodeError(bb) { 1717 let message = {}; 1718 end_of_message: while (!isAtEnd(bb)) { 1719 let tag = readVarint32(bb); 1720 switch (tag >>> 3) { 1721 case 0: 1722 break end_of_message; 1723 // optional uint32 code = 1; 1724 case 1: { 1725 message.code = readVarint32(bb) >>> 0; 1726 break; 1727 } 1728 // optional string message = 2; 1729 case 2: { 1730 message.message = readString(bb, readVarint32(bb)); 1731 break; 1732 } 1733 default: 1734 skipUnknownField(bb, tag & 7); 1735 } 1736 } 1737 return message; 1738} 1739function decodeCommandResult(binary) { 1740 return _decodeCommandResult(wrapByteBuffer(binary)); 1741} 1742function _decodeCommandResult(bb) { 1743 let message = {}; 1744 end_of_message: while (!isAtEnd(bb)) { 1745 let tag = readVarint32(bb); 1746 switch (tag >>> 3) { 1747 case 0: 1748 break end_of_message; 1749 // optional Ok ok = 1; 1750 case 1: { 1751 let limit = pushTemporaryLength(bb); 1752 message.ok = _decodeOk(bb); 1753 bb.limit = limit; 1754 break; 1755 } 1756 // optional Error error = 2; 1757 case 2: { 1758 let limit = pushTemporaryLength(bb); 1759 message.error = _decodeError(bb); 1760 bb.limit = limit; 1761 break; 1762 } 1763 // optional ViewerState state = 3; 1764 case 3: { 1765 let limit = pushTemporaryLength(bb); 1766 message.state = _decodeViewerState(bb); 1767 bb.limit = limit; 1768 break; 1769 } 1770 default: 1771 skipUnknownField(bb, tag & 7); 1772 } 1773 } 1774 return message; 1775} 1776function _decodeReady(bb) { 1777 let message = {}; 1778 end_of_message: while (!isAtEnd(bb)) { 1779 let tag = readVarint32(bb); 1780 switch (tag >>> 3) { 1781 case 0: 1782 break end_of_message; 1783 default: 1784 skipUnknownField(bb, tag & 7); 1785 } 1786 } 1787 return message; 1788} 1789function _decodeDeckChanged(bb) { 1790 let message = {}; 1791 end_of_message: while (!isAtEnd(bb)) { 1792 let tag = readVarint32(bb); 1793 switch (tag >>> 3) { 1794 case 0: 1795 break end_of_message; 1796 // optional DeckInfo deck = 1; 1797 case 1: { 1798 let limit = pushTemporaryLength(bb); 1799 message.deck = _decodeDeckInfo(bb); 1800 bb.limit = limit; 1801 break; 1802 } 1803 default: 1804 skipUnknownField(bb, tag & 7); 1805 } 1806 } 1807 return message; 1808} 1809function _decodeSourceChanged(bb) { 1810 let message = {}; 1811 end_of_message: while (!isAtEnd(bb)) { 1812 let tag = readVarint32(bb); 1813 switch (tag >>> 3) { 1814 case 0: 1815 break end_of_message; 1816 // optional SourceState source = 1; 1817 case 1: { 1818 let limit = pushTemporaryLength(bb); 1819 message.source = _decodeSourceState(bb); 1820 bb.limit = limit; 1821 break; 1822 } 1823 // repeated SourceState sources = 2; 1824 case 2: { 1825 let limit = pushTemporaryLength(bb); 1826 let values = message.sources || (message.sources = []); 1827 values.push(_decodeSourceState(bb)); 1828 bb.limit = limit; 1829 break; 1830 } 1831 default: 1832 skipUnknownField(bb, tag & 7); 1833 } 1834 } 1835 return message; 1836} 1837function _decodeViewChanged(bb) { 1838 let message = {}; 1839 end_of_message: while (!isAtEnd(bb)) { 1840 let tag = readVarint32(bb); 1841 switch (tag >>> 3) { 1842 case 0: 1843 break end_of_message; 1844 // optional ViewState view = 1; 1845 case 1: { 1846 let limit = pushTemporaryLength(bb); 1847 message.view = _decodeViewState(bb); 1848 bb.limit = limit; 1849 break; 1850 } 1851 default: 1852 skipUnknownField(bb, tag & 7); 1853 } 1854 } 1855 return message; 1856} 1857function _decodeCurrentChanged(bb) { 1858 let message = {}; 1859 end_of_message: while (!isAtEnd(bb)) { 1860 let tag = readVarint32(bb); 1861 switch (tag >>> 3) { 1862 case 0: 1863 break end_of_message; 1864 // optional CurrentSlide current = 1; 1865 case 1: { 1866 let limit = pushTemporaryLength(bb); 1867 message.current = _decodeCurrentSlide(bb); 1868 bb.limit = limit; 1869 break; 1870 } 1871 default: 1872 skipUnknownField(bb, tag & 7); 1873 } 1874 } 1875 return message; 1876} 1877function _decodeHoverChanged(bb) { 1878 let message = {}; 1879 end_of_message: while (!isAtEnd(bb)) { 1880 let tag = readVarint32(bb); 1881 switch (tag >>> 3) { 1882 case 0: 1883 break end_of_message; 1884 // optional HoverState hover = 1; 1885 case 1: { 1886 let limit = pushTemporaryLength(bb); 1887 message.hover = _decodeHoverState(bb); 1888 bb.limit = limit; 1889 break; 1890 } 1891 default: 1892 skipUnknownField(bb, tag & 7); 1893 } 1894 } 1895 return message; 1896} 1897function _decodeRenderChanged(bb) { 1898 let message = {}; 1899 end_of_message: while (!isAtEnd(bb)) { 1900 let tag = readVarint32(bb); 1901 switch (tag >>> 3) { 1902 case 0: 1903 break end_of_message; 1904 // optional RenderOptions render = 1; 1905 case 1: { 1906 let limit = pushTemporaryLength(bb); 1907 message.render = _decodeRenderOptions(bb); 1908 bb.limit = limit; 1909 break; 1910 } 1911 default: 1912 skipUnknownField(bb, tag & 7); 1913 } 1914 } 1915 return message; 1916} 1917function _decodeDiffChanged(bb) { 1918 let message = {}; 1919 end_of_message: while (!isAtEnd(bb)) { 1920 let tag = readVarint32(bb); 1921 switch (tag >>> 3) { 1922 case 0: 1923 break end_of_message; 1924 // optional DiffState diff = 1; 1925 case 1: { 1926 let limit = pushTemporaryLength(bb);
1927 message.diff = _decodeDiffState(bb); 1928 bb.limit = limit; 1929 break; 1930 } 1931 default: 1932 skipUnknownField(bb, tag & 7); 1933 } 1934 } 1935 return message; 1936} 1937function _decodeComparedChanged(bb) { 1938 let message = {}; 1939 end_of_message: while (!isAtEnd(bb)) { 1940 let tag = readVarint32(bb); 1941 switch (tag >>> 3) { 1942 case 0: 1943 break end_of_message; 1944 // optional ComparedSlide compared = 1; 1945 case 1: { 1946 let limit = pushTemporaryLength(bb); 1947 message.compared = _decodeComparedSlide(bb); 1948 bb.limit = limit; 1949 break; 1950 } 1951 default: 1952 skipUnknownField(bb, tag & 7); 1953 } 1954 } 1955 return message; 1956} 1957function _decodeCompareChanged(bb) { 1958 let message = {}; 1959 end_of_message: while (!isAtEnd(bb)) { 1960 let tag = readVarint32(bb); 1961 switch (tag >>> 3) { 1962 case 0: 1963 break end_of_message; 1964 // optional CompareState compare = 1; 1965 case 1: { 1966 let limit = pushTemporaryLength(bb); 1967 message.compare = _decodeCompareState(bb); 1968 bb.limit = limit; 1969 break; 1970 } 1971 default: 1972 skipUnknownField(bb, tag & 7); 1973 } 1974 } 1975 return message; 1976} 1977function _decodeEvent(bb) { 1978 let message = {}; 1979 end_of_message: while (!isAtEnd(bb)) { 1980 let tag = readVarint32(bb); 1981 switch (tag >>> 3) { 1982 case 0: 1983 break end_of_message; 1984 // optional Ready ready = 1; 1985 case 1: { 1986 let limit = pushTemporaryLength(bb); 1987 message.ready = _decodeReady(bb); 1988 bb.limit = limit; 1989 break; 1990 } 1991 // optional Error error = 2; 1992 case 2: { 1993 let limit = pushTemporaryLength(bb); 1994 message.error = _decodeError(bb); 1995 bb.limit = limit; 1996 break; 1997 } 1998 // optional DeckChanged deck_changed = 3; 1999 case 3: { 2000 let limit = pushTemporaryLength(bb); 2001 message.deck_changed = _decodeDeckChanged(bb); 2002 bb.limit = limit; 2003 break; 2004 } 2005 // optional SourceChanged source_changed = 4; 2006 case 4: { 2007 let limit = pushTemporaryLength(bb); 2008 message.source_changed = _decodeSourceChanged(bb); 2009 bb.limit = limit; 2010 break; 2011 } 2012 // optional ViewChanged view_changed = 5; 2013 case 5: { 2014 let limit = pushTemporaryLength(bb); 2015 message.view_changed = _decodeViewChanged(bb); 2016 bb.limit = limit; 2017 break; 2018 } 2019 // optional CurrentChanged current_changed = 6; 2020 case 6: { 2021 let limit = pushTemporaryLength(bb); 2022 message.current_changed = _decodeCurrentChanged(bb); 2023 bb.limit = limit; 2024 break; 2025 } 2026 // optional HoverChanged hover_changed = 7; 2027 case 7: { 2028 let limit = pushTemporaryLength(bb); 2029 message.hover_changed = _decodeHoverChanged(bb); 2030 bb.limit = limit; 2031 break; 2032 } 2033 // optional RenderChanged render_changed = 8; 2034 case 8: { 2035 let limit = pushTemporaryLength(bb); 2036 message.render_changed = _decodeRenderChanged(bb); 2037 bb.limit = limit; 2038 break; 2039 } 2040 // optional DiffChanged diff_changed = 9; 2041 case 9: { 2042 let limit = pushTemporaryLength(bb); 2043 message.diff_changed = _decodeDiffChanged(bb); 2044 bb.limit = limit; 2045 break; 2046 } 2047 // optional ComparedChanged compared_changed = 10; 2048 case 10: { 2049 let limit = pushTemporaryLength(bb); 2050 message.compared_changed = _decodeComparedChanged(bb); 2051 bb.limit = limit; 2052 break; 2053 } 2054 // optional CompareChanged compare_changed = 11; 2055 case 11: { 2056 let limit = pushTemporaryLength(bb); 2057 message.compare_changed = _decodeCompareChanged(bb); 2058 bb.limit = limit; 2059 break; 2060 } 2061 default: 2062 skipUnknownField(bb, tag & 7); 2063 } 2064 } 2065 return message; 2066} 2067function decodeEventBatch(binary) { 2068 return _decodeEventBatch(wrapByteBuffer(binary)); 2069} 2070function _decodeEventBatch(bb) { 2071 let message = {}; 2072 end_of_message: while (!isAtEnd(bb)) { 2073 let tag = readVarint32(bb); 2074 switch (tag >>> 3) { 2075 case 0: 2076 break end_of_message; 2077 // repeated Event events = 1; 2078 case 1: { 2079 let limit = pushTemporaryLength(bb); 2080 let values = message.events || (message.events = []); 2081 values.push(_decodeEvent(bb)); 2082 bb.limit = limit; 2083 break; 2084 } 2085 default: 2086 skipUnknownField(bb, tag & 7); 2087 } 2088 } 2089 return message; 2090} 2091function pushTemporaryLength(bb) { 2092 let length = readVarint32(bb); 2093 let limit = bb.limit; 2094 bb.limit = bb.offset + length; 2095 return limit; 2096} 2097function skipUnknownField(bb, type) { 2098 switch (type) { 2099 case 0: 2100 while (readByte(bb) & 128) { 2101 } 2102 break; 2103 case 2: 2104 skip(bb, readVarint32(bb)); 2105 break; 2106 case 5: 2107 skip(bb, 4); 2108 break; 2109 case 1: 2110 skip(bb, 8); 2111 break; 2112 default: 2113 throw new Error("Unimplemented type: " + type); 2114 } 2115} 2116var f32 = new Float32Array(1); 2117var f32_u8 = new Uint8Array(f32.buffer); 2118var f64 = new Float64Array(1); 2119var f64_u8 = new Uint8Array(f64.buffer); 2120var bbStack = []; 2121function popByteBuffer() { 2122 const bb = bbStack.pop(); 2123 if (!bb) return { bytes: new Uint8Array(64), offset: 0, limit: 0 }; 2124 bb.offset = bb.limit = 0; 2125 return bb; 2126} 2127function pushByteBuffer(bb) { 2128 bbStack.push(bb); 2129} 2130function wrapByteBuffer(bytes) { 2131 return { bytes, offset: 0, limit: bytes.length }; 2132} 2133function toUint8Array(bb) { 2134 let bytes = bb.bytes; 2135 let limit = bb.limit; 2136 return bytes.length === limit ? bytes : bytes.subarray(0, limit); 2137} 2138function skip(bb, offset) { 2139 if (bb.offset + offset > bb.limit) { 2140 throw new Error("Skip past limit"); 2141 } 2142 bb.offset += offset; 2143} 2144function isAtEnd(bb) { 2145 return bb.offset >= bb.limit; 2146} 2147function grow(bb, count) { 2148 let bytes = bb.bytes; 2149 let offset = bb.offset; 2150 let limit = bb.limit; 2151 let finalOffset = offset + count; 2152 if (finalOffset > bytes.length) { 2153 let newBytes = new Uint8Array(finalOffset * 2); 2154 newBytes.set(bytes); 2155 bb.bytes = newBytes; 2156 } 2157 bb.offset = finalOffset; 2158 if (finalOffset > limit) { 2159 bb.limit = finalOffset; 2160 } 2161 return offset; 2162} 2163function advance(bb, count) { 2164 let offset = bb.offset; 2165 if (offset + count > bb.limit) { 2166 throw new Error("Read past limit"); 2167 } 2168 bb.offset += count; 2169 return offset; 2170} 2171function writeBytes(bb, buffer) { 2172 let offset = grow(bb, buffer.length); 2173 bb.bytes.set(buffer, offset); 2174} 2175function readString(bb, count) { 2176 let offset = advance(bb, count); 2177 let fromCharCode = String.fromCharCode; 2178 let bytes = bb.bytes; 2179 let invalid = "\uFFFD"; 2180 let text = ""; 2181 for (let i = 0; i < count; i++) {
2182 let c1 = bytes[i + offset], c2, c3, c4, c; 2183 if ((c1 & 128) === 0) { 2184 text += fromCharCode(c1); 2185 } else if ((c1 & 224) === 192) { 2186 if (i + 1 >= count) text += invalid; 2187 else { 2188 c2 = bytes[i + offset + 1]; 2189 if ((c2 & 192) !== 128) text += invalid; 2190 else { 2191 c = (c1 & 31) << 6 | c2 & 63; 2192 if (c < 128) text += invalid; 2193 else { 2194 text += fromCharCode(c); 2195 i++; 2196 } 2197 } 2198 } 2199 } else if ((c1 & 240) == 224) { 2200 if (i + 2 >= count) text += invalid; 2201 else { 2202 c2 = bytes[i + offset + 1]; 2203 c3 = bytes[i + offset + 2]; 2204 if (((c2 | c3 << 8) & 49344) !== 32896) text += invalid; 2205 else { 2206 c = (c1 & 15) << 12 | (c2 & 63) << 6 | c3 & 63; 2207 if (c < 2048 || c >= 55296 && c <= 57343) text += invalid; 2208 else { 2209 text += fromCharCode(c); 2210 i += 2; 2211 } 2212 } 2213 } 2214 } else if ((c1 & 248) == 240) { 2215 if (i + 3 >= count) text += invalid; 2216 else { 2217 c2 = bytes[i + offset + 1]; 2218 c3 = bytes[i + offset + 2]; 2219 c4 = bytes[i + offset + 3]; 2220 if (((c2 | c3 << 8 | c4 << 16) & 12632256) !== 8421504) text += invalid; 2221 else { 2222 c = (c1 & 7) << 18 | (c2 & 63) << 12 | (c3 & 63) << 6 | c4 & 63; 2223 if (c < 65536 || c > 1114111) text += invalid; 2224 else { 2225 c -= 65536; 2226 text += fromCharCode((c >> 10) + 55296, (c & 1023) + 56320); 2227 i += 3; 2228 } 2229 } 2230 } 2231 } else text += invalid; 2232 } 2233 return text; 2234} 2235function writeString(bb, text) { 2236 let n = text.length; 2237 let byteCount = 0; 2238 for (let i = 0; i < n; i++) {
2239 let c = text.charCodeAt(i); 2240 if (c >= 55296 && c <= 56319 && i + 1 < n) { 2241 c = (c << 10) + text.charCodeAt(++i) - 56613888; 2242 } 2243 byteCount += c < 128 ? 1 : c < 2048 ? 2 : c < 65536 ? 3 : 4; 2244 } 2245 writeVarint32(bb, byteCount); 2246 let offset = grow(bb, byteCount); 2247 let bytes = bb.bytes; 2248 for (let i = 0; i < n; i++) { 2249 let c = text.charCodeAt(i); 2250 if (c >= 55296 && c <= 56319 && i + 1 < n) { 2251 c = (c << 10) + text.charCodeAt(++i) - 56613888; 2252 } 2253 if (c < 128) { 2254 bytes[offset++] = c; 2255 } else { 2256 if (c < 2048) { 2257 bytes[offset++] = c >> 6 & 31 | 192; 2258 } else { 2259 if (c < 65536) { 2260 bytes[offset++] = c >> 12 & 15 | 224; 2261 } else { 2262 bytes[offset++] = c >> 18 & 7 | 240; 2263 bytes[offset++] = c >> 12 & 63 | 128; 2264 } 2265 bytes[offset++] = c >> 6 & 63 | 128; 2266 } 2267 bytes[offset++] = c & 63 | 128; 2268 } 2269 } 2270} 2271function writeByteBuffer(bb, buffer) { 2272 let offset = grow(bb, buffer.limit); 2273 let from = bb.bytes; 2274 let to = buffer.bytes; 2275 for (let i = 0, n = buffer.limit; i < n; i++) { 2276 from[i + offset] = to[i]; 2277 } 2278} 2279function readByte(bb) { 2280 return bb.bytes[advance(bb, 1)]; 2281} 2282function writeByte(bb, value) { 2283 let offset = grow(bb, 1); 2284 bb.bytes[offset] = value; 2285} 2286function readFloat(bb) { 2287 let offset = advance(bb, 4); 2288 let bytes = bb.bytes; 2289 f32_u8[0] = bytes[offset++]; 2290 f32_u8[1] = bytes[offset++]; 2291 f32_u8[2] = bytes[offset++]; 2292 f32_u8[3] = bytes[offset++]; 2293 return f32[0]; 2294} 2295function writeFloat(bb, value) { 2296 let offset = grow(bb, 4); 2297 let bytes = bb.bytes; 2298 f32[0] = value; 2299 bytes[offset++] = f32_u8[0]; 2300 bytes[offset++] = f32_u8[1]; 2301 bytes[offset++] = f32_u8[2]; 2302 bytes[offset++] = f32_u8[3]; 2303} 2304function readDouble(bb) { 2305 let offset = advance(bb, 8); 2306 let bytes = bb.bytes; 2307 f64_u8[0] = bytes[offset++]; 2308 f64_u8[1] = bytes[offset++]; 2309 f64_u8[2] = bytes[offset++]; 2310 f64_u8[3] = bytes[offset++]; 2311 f64_u8[4] = bytes[offset++]; 2312 f64_u8[5] = bytes[offset++]; 2313 f64_u8[6] = bytes[offset++]; 2314 f64_u8[7] = bytes[offset++]; 2315 return f64[0]; 2316} 2317function writeDouble(bb, value) { 2318 let offset = grow(bb, 8); 2319 let bytes = bb.bytes; 2320 f64[0] = value; 2321 bytes[offset++] = f64_u8[0]; 2322 bytes[offset++] = f64_u8[1]; 2323 bytes[offset++] = f64_u8[2]; 2324 bytes[offset++] = f64_u8[3]; 2325 bytes[offset++] = f64_u8[4]; 2326 bytes[offset++] = f64_u8[5]; 2327 bytes[offset++] = f64_u8[6]; 2328 bytes[offset++] = f64_u8[7]; 2329} 2330function readVarint32(bb) { 2331 let c = 0; 2332 let value = 0; 2333 let b; 2334 do { 2335 b = readByte(bb); 2336 if (c < 32) value |= (b & 127) << c; 2337 c += 7; 2338 } while (b & 128); 2339 return value; 2340} 2341function writeVarint32(bb, value) { 2342 value >>>= 0; 2343 while (value >= 128) { 2344 writeByte(bb, value & 127 | 128); 2345 value >>>= 7; 2346 } 2347 writeByte(bb, value); 2348} 2349function readVarint64(bb, unsigned) { 2350 let part0 = 0; 2351 let part1 = 0; 2352 let part2 = 0; 2353 let b; 2354 b = readByte(bb); 2355 part0 = b & 127; 2356 if (b & 128) { 2357 b = readByte(bb); 2358 part0 |= (b & 127) << 7; 2359 if (b & 128) { 2360 b = readByte(bb); 2361 part0 |= (b & 127) << 14; 2362 if (b & 128) { 2363 b = readByte(bb); 2364 part0 |= (b & 127) << 21; 2365 if (b & 128) { 2366 b = readByte(bb); 2367 part1 = b & 127; 2368 if (b & 128) { 2369 b = readByte(bb); 2370 part1 |= (b & 127) << 7; 2371 if (b & 128) { 2372 b = readByte(bb); 2373 part1 |= (b & 127) << 14; 2374 if (b & 128) { 2375 b = readByte(bb); 2376 part1 |= (b & 127) << 21; 2377 if (b & 128) { 2378 b = readByte(bb); 2379 part2 = b & 127; 2380 if (b & 128) { 2381 b = readByte(bb); 2382 part2 |= (b & 127) << 7; 2383 } 2384 } 2385 } 2386 } 2387 } 2388 } 2389 } 2390 } 2391 } 2392 return { 2393 low: part0 | part1 << 28, 2394 high: part1 >>> 4 | part2 << 24, 2395 unsigned 2396 }; 2397} 2398function writeVarint64(bb, value) { 2399 let part0 = value.low >>> 0; 2400 let part1 = (value.low >>> 28 | value.high << 4) >>> 0; 2401 let part2 = value.high >>> 24; 2402 let size = part2 === 0 ? part1 === 0 ? part0 < 1 << 14 ? part0 < 1 << 7 ? 1 : 2 : part0 < 1 << 21 ? 3 : 4 : part1 < 1 << 14 ? part1 < 1 << 7 ? 5 : 6 : part1 < 1 << 21 ? 7 : 8 : part2 < 1 << 7 ? 9 : 10; 2403 let offset = grow(bb, size); 2404 let bytes = bb.bytes; 2405 switch (size) { 2406 case 10: 2407 bytes[offset + 9] = part2 >>> 7 & 1; 2408 case 9: 2409 bytes[offset + 8] = size !== 9 ? part2 | 128 : part2 & 127; 2410 case 8: 2411 bytes[offset + 7] = size !== 8 ? part1 >>> 21 | 128 : part1 >>> 21 & 127; 2412 case 7: 2413 bytes[offset + 6] = size !== 7 ? part1 >>> 14 | 128 : part1 >>> 14 & 127; 2414 case 6: 2415 bytes[offset + 5] = size !== 6 ? part1 >>> 7 | 128 : part1 >>> 7 & 127; 2416 case 5: 2417 bytes[offset + 4] = size !== 5 ? part1 | 128 : part1 & 127; 2418 case 4: 2419 bytes[offset + 3] = size !== 4 ? part0 >>> 21 | 128 : part0 >>> 21 & 127; 2420 case 3: 2421 bytes[offset + 2] = size !== 3 ? part0 >>> 14 | 128 : part0 >>> 14 & 127; 2422 case 2: 2423 bytes[offset + 1] = size !== 2 ? part0 >>> 7 | 128 : part0 >>> 7 & 127; 2424 case 1: 2425 bytes[offset] = size !== 1 ? part0 | 128 : part0 & 127; 2426 } 2427} 2428function writeVarint32ZigZag(bb, value) { 2429 writeVarint32(bb, value << 1 ^ value >> 31); 2430} 2431
2432// ../../../viewers/slides/bindings/wasm/web-harness/slides-api.js 2433function longToNumber(v) { 2434 if (v === void 0 || v === null) return 0; 2435 if (typeof v === "number") return v; 2436 return (v.high >>> 0) * 4294967296 + (v.low >>> 0); 2437} 2438function toLong(n) { 2439 const v = Math.max(0, Math.trunc(Number(n) || 0)); 2440 return { low: v >>> 0, high: Math.floor(v / 4294967296) >>> 0, unsigned: true }; 2441} 2442function normRange(r) { 2443 return { offset: longToNumber(r.offset), length: longToNumber(r.length) }; 2444} 2445function normDeck(d) { 2446 if (!d) return null; 2447 return { 2448 kind: d.kind ?? "DECK_KIND_UNSPECIFIED", 2449 macroEnabled: d.macro_enabled ?? false, 2450 // EMU, 914400 to the inch. 2451 slideWidth: longToNumber(d.slide_width), 2452 slideHeight: longToNumber(d.slide_height), 2453 slides: (d.slides ?? []).map((s) => ({ 2454 number: s.number ?? 0, 2455 hidden: s.hidden ?? false, 2456 title: s.title ?? "", 2457 hasNotes: s.has_notes ?? false, 2458 unreadable: s.unreadable ?? false 2459 })), 2460 title: d.title ?? "", 2461 application: d.application ?? "", 2462 fonts: (d.fonts ?? []).map((f) => ({ 2463 requested: f.requested ?? "", 2464 used: f.used ?? "", 2465 metricCompatible: f.metric_compatible ?? false 2466 })), 2467 unrendered: (d.unrendered ?? []).map((u) => ({ 2468 kind: u.kind ?? "UNRENDERED_UNSPECIFIED", 2469 count: u.count ?? 0 2470 })), 2471 loading: d.loading ?? false 2472 }; 2473} 2474function normSource(s) { 2475 if (!s) return null; 2476 return { 2477 bytesTotal: longToNumber(s.bytes_total), 2478 bytesHave: longToNumber(s.bytes_have), 2479 have: (s.have ?? []).map(normRange), 2480 wanted: (s.wanted ?? []).map(normRange), 2481 complete: s.complete ?? false, 2482 lane: s.lane ?? "LANE_UNSPECIFIED" 2483 }; 2484} 2485function normView(v) { 2486 if (!v) return null; 2487 return { 2488 mode: v.mode ?? "VIEW_MODE_UNSPECIFIED", 2489 current: v.current ?? 0, 2490 firstVisible: v.first_visible ?? 0, 2491 lastVisible: v.last_visible ?? 0, 2492 columns: v.columns ?? 0, 2493 scrollY: v.scroll_y ?? 0, 2494 maxScrollY: v.max_scroll_y ?? 0, 2495 contentHeight: v.content_height ?? 0 2496 }; 2497} 2498function normCurrent(c) { 2499 if (!c) return null; 2500 return { 2501 index: c.index ?? 0, 2502 // 1-based, as the deck numbers it. 2503 number: c.number ?? (c.index ?? 0) + 1, 2504 title: c.title ?? "", 2505 notes: c.notes ?? "", 2506 hidden: c.hidden ?? false, 2507 layout: c.layout ?? "", 2508 links: c.links ?? [] 2509 }; 2510} 2511function normHover(h) { 2512 if (!h) return null; 2513 return { 2514 slide: h.slide ?? 0, 2515 x: h.x ?? 0, 2516 y: h.y ?? 0, 2517 width: h.width ?? 0, 2518 height: h.height ?? 0 2519 }; 2520} 2521function normRender(r) { 2522 if (!r) return null; 2523 return { 2524 colorScheme: r.color_scheme ?? "COLOR_SCHEME_UNSPECIFIED", 2525 uiScale: r.ui_scale ?? 0 2526 }; 2527} 2528function normPair(p) { 2529 if (!p) return null; 2530 return { 2531 status: p.status ?? "SLIDE_STATUS_UNSPECIFIED", 2532 before: p.before ?? null, 2533 after: p.after ?? null, 2534 moved: p.moved ?? false, 2535 basis: p.basis ?? "MATCH_BASIS_UNSPECIFIED", 2536 aspects: p.aspects ?? [] 2537 }; 2538} 2539function normSpans(spans) { 2540 return (spans ?? []).map((t) => ({ kind: t.kind ?? "TEXT_SPAN_KIND_UNSPECIFIED", text: t.text ?? "" })); 2541} 2542function normBox(b) { 2543 if (!b) return null; 2544 return { x: b.x ?? 0, y: b.y ?? 0, width: b.width ?? 0, height: b.height ?? 0 }; 2545} 2546function normDiff(d) { 2547 if (!d) return null; 2548 return { 2549 complete: d.complete ?? false, 2550 before: normDeck(d.before), 2551 same: d.same ?? 0, 2552 added: d.added ?? 0, 2553 removed: d.removed ?? 0, 2554 changed: d.changed ?? 0, 2555 moved: d.moved ?? 0, 2556 rows: (d.rows ?? []).map(normPair), 2557 matchedBy: (d.matched_by ?? []).map((b) => ({ 2558 basis: b.basis ?? "MATCH_BASIS_UNSPECIFIED", 2559 count: b.count ?? 0 2560 })), 2561 slideSizeChanged: d.slide_size_changed ?? false, 2562 inherited: d.inherited ?? 0, 2563 errors: (d.errors ?? []).map((e) => ({ 2564 lane: e.lane ?? "LANE_UNSPECIFIED", 2565 code: e.code ?? 0, 2566 message: e.message ?? "" 2567 })), 2568 beforeAbsent: d.before_absent ?? false, 2569 afterAbsent: d.after_absent ?? false, 2570 legend: (d.legend ?? []).map((l) => ({ 2571 status: l.status ?? "SLIDE_STATUS_UNSPECIFIED", 2572 color: l.color ?? "" 2573 })) 2574 }; 2575} 2576function normCompared(c) { 2577 if (!c) return null; 2578 return { 2579 row: c.row ?? 0, 2580 pair: normPair(c.pair), 2581 before: normCurrent(c.before), 2582 after: normCurrent(c.after), 2583 shapes: (c.shapes ?? []).map((s) => ({ 2584 name: s.name ?? "", 2585 aspects: s.aspects ?? [], 2586 before: normBox(s.before), 2587 after: normBox(s.after), 2588 text: normSpans(s.text) 2589 })), 2590 title: normSpans(c.title), 2591 notes: normSpans(c.notes) 2592 }; 2593} 2594function normCompare(c) { 2595 if (!c) return null; 2596 return { 2597 mode: c.mode ?? "COMPARE_MODE_UNSPECIFIED", 2598 sliderPosition: c.slider_position ?? 0, 2599 onionOpacity: c.onion_opacity ?? 0, 2600 changesOnly: c.changes_only ?? false, 2601 markChanges: c.mark_changes ?? false 2602 }; 2603} 2604function normState(s) { 2605 return { 2606 deck: normDeck(s.deck), 2607 source: normSource(s.source), 2608 view: normView(s.view), 2609 current: normCurrent(s.current), 2610 hover: normHover(s.hover), 2611 render: normRender(s.render), 2612 sources: (s.sources ?? []).map(normSource), 2613 diff: normDiff(s.diff), 2614 compared: normCompared(s.compared), 2615 compare: normCompare(s.compare) 2616 }; 2617} 2618function convertKeys(options, mapping, what) { 2619 const out = {}; 2620 for (const [key, value] of Object.entries(options ?? {})) { 2621 const field = mapping[key]; 2622 if (!field) { 2623 const near = Object.keys(mapping).find( 2624 (k) => k.toLowerCase() === String(key).toLowerCase().replace(/_/g, "") 2625 ); 2626 throw new TypeError( 2627 `${what}: unknown option "${key}"${near ? ` \u2014 did you mean "${near}"?` : ""}` 2628 ); 2629 } 2630 if (value !== void 0 && value !== null) out[field] = value; 2631 } 2632 return out; 2633} 2634function checkEnum(value, names, what) { 2635 if (value !== void 0 && !(value in names)) { 2636 throw new TypeError(`${what}: unknown value "${value}" (expected: ${Object.keys(names).join(", ")})`); 2637 } 2638} 2639function enumName(value, short, names, what) { 2640 if (value === void 0) return void 0; 2641 if (value in short) return short[value]; 2642 if (value in names && !String(value).endsWith("_UNSPECIFIED")) return value; 2643 const flat = String(value).toLowerCase().replace(/[_\s-]/g, ""); 2644 const near = Object.keys(short).find((k) => k.toLowerCase() === flat); 2645 throw new TypeError( 2646 `${what}: unknown value "${value}"${near ? ` \u2014 did you mean "${near}"?` : ""} (expected: ${Object.keys(short).join(", ")})` 2647 ); 2648} 2649var RENDER_KEYS = { colorScheme: "color_scheme", uiScale: "ui_scale" }; 2650var VIEW_KEYS = { mode: "mode", slide: "slide", scrollY: "scroll_y" }; 2651var STEP_KEYS = { slides: "slides", rows: "rows", changes: "changes" }; 2652var DIFF_KEYS = { before: "before", after: "after" }; 2653var SIDE_KEYS = { ext: "ext", bytes: "initial", totalBytes: "total_bytes" }; 2654var COMPARE_KEYS = { 2655 mode: "mode", 2656 sliderPosition: "slider_position", 2657 onionOpacity: "onion_opacity", 2658 changesOnly: "changes_only", 2659 markChanges: "mark_changes" 2660}; 2661var LANES = { before: "LANE_BEFORE", after: "LANE_AFTER" }; 2662var COMPARE_MODES = { 2663 sideBySide: "COMPARE_MODE_SIDE_BY_SIDE", 2664 slider: "COMPARE_MODE_SLIDER", 2665 onionskin: "COMPARE_MODE_ONIONSKIN" 2666}; 2667function wheelToDevicePixels(event, { lineHeight = 16, pageHeight = 800, dpr = 1 } = {}) { 2668 const unit = event.deltaMode === 1 ? lineHeight : event.deltaMode === 2 ? pageHeight : 1; 2669 return { dx: (event.deltaX ?? 0) * unit * dpr, dy: (event.deltaY ?? 0) * unit * dpr }; 2670} 2671function planOpen(bound, loaded) { 2672 if (!bound) return loaded ? "unload" : "none"; 2673 if (!loaded) return "open"; 2674 const isPair = (p) => "before" in p || "after" in p; 2675 const same = (a, b) => !a && !b || Boolean(a && b && a.bytes === b.bytes && a.name === b.name); 2676 if (isPair(bound) !== isPair(loaded)) return "open"; 2677 const unchanged = isPair(bound) ? same(bound.before, loaded.before) && same(bound.after, loaded.after) : same(bound, loaded); 2678 return unchanged ? "none" : "open"; 2679} 2680var wasmReady = null; 2681var wasmReadyUrl = null; 2682var memoryRef = null; 2683function boot({ wasmUrl } = {}) { 2684 if (wasmReady && wasmUrl && wasmUrl !== wasmReadyUrl) { 2685 console.warn( 2686 `slides viewer: ignoring wasm URL ${wasmUrl}; already instantiated from ${wasmReadyUrl ?? "the glue's default"}. One module per page.` 2687 ); 2688 } 2689 if (!wasmReady) { 2690 wasmReadyUrl = wasmUrl ?? null; 2691 wasmReady = __wbg_init(wasmUrl ? { module_or_path: wasmUrl } : void 0).then((exports) => { 2692 memoryRef = exports?.memory ?? null; 2693 return exports; 2694 }).catch((error) => { 2695 wasmReady = null; 2696 wasmReadyUrl = null; 2697 throw error; 2698 }); 2699 } 2700 return wasmReady; 2701} 2702var ABI_VERSION_REQUIRED = 1; 2703var SlideViewerApi = class _SlideViewerApi { 2704 #viewer; 2705 #canvas; 2706 #ctx; 2707 #handlers = { 2708 deck: [], 2709 source: [], 2710 view: [], 2711 current: [], 2712 hover: [], 2713 render: [], 2714 sources: [], 2715 diff: [], 2716 compared: [], 2717 compare: [], 2718 error: [], 2719 ready: [], 2720 any: [] 2721 }; 2722 #running = false;
2723 constructor(viewer, canvas) { 2724 this.#viewer = viewer; 2725 this.#canvas = canvas; 2726 this.#ctx = canvas.getContext("2d"); 2727 } 2728 /** 2729 * Creates a viewer that draws to a canvas through a 2-D context. The core rasterises on the CPU. 2730 * 2731 * `options.wasmUrl` is where the `.wasm` lives when it is not beside the glue; see `boot`. 2732 */ 2733 static async create(canvas, options = {}) { 2734 await boot(options); 2735 const version = abi_version(); 2736 if (version !== ABI_VERSION_REQUIRED) { 2737 throw new Error(`viewer ABI ${version}, host expects ${ABI_VERSION_REQUIRED}`); 2738 } 2739 const api = new _SlideViewerApi(new SlideViewer(), canvas); 2740 api.resize(canvas.width, canvas.height); 2741 api.#start(); 2742 return api; 2743 } 2744 #submit(command) { 2745 const reply = decodeCommandResult(this.#viewer.submit(encodeCommand(command))); 2746 if (reply.error) { 2747 const error = new Error(reply.error.message ?? "viewer error"); 2748 error.code = reply.error.code ?? 0; 2749 throw error; 2750 } 2751 return reply; 2752 } 2753 /** 2754 * Returns the whole viewer state. It never mutates and never emits. 2755 */ 2756 getState() { 2757 return normState(this.#submit({ get_state: {} }).state ?? {}); 2758 } 2759 /** 2760 * Opens one deck and replaces what was open, also on failure. 2761 * 2762 * `ext` is lowercase without the dot. Pass the whole file as `bytes` by default: `wanted` stays 2763 * empty and the pull loop never starts. Pass `totalBytes` with a partial `bytes` to drive the loop. 2764 */ 2765 open(ext, bytes, totalBytes) { 2766 this.#submit({ 2767 open: { 2768 ext: ext ?? "", 2769 total_bytes: toLong(totalBytes ?? 0), 2770 initial: bytes ?? new Uint8Array() 2771 } 2772 }); 2773 } 2774 /** 2775 * Compares two versions of a deck and replaces what was open. 2776 * 2777 * Each side is `{ ext, bytes, totalBytes }`, as {@link SlideViewerApi#open} takes them, or null. 2778 * No `before` is a deck added, and no `after` is a deck deleted. A side that does not open is 2779 * reported in `diff.errors`. 2780 * 2781 * @throws {Error} when neither side opens. 2782 */ 2783 openDiff(options) { 2784 const req = convertKeys(options, DIFF_KEYS, "openDiff"); 2785 const side = (value, name) => { 2786 if (!value) return void 0; 2787 const s = convertKeys(value, SIDE_KEYS, `openDiff: ${name}`); 2788 return { ext: s.ext ?? "", total_bytes: toLong(s.total_bytes ?? 0), initial: s.initial ?? new Uint8Array() }; 2789 }; 2790 this.#submit({ open_diff: { before: side(req.before, "before"), after: side(req.after, "after") } }); 2791 } 2792 /** 2793 * Supplies a range the core asked for. 2794 * 2795 * In a comparison `lane` is required: `"before"`, `"after"`, or the `lane` of the source that 2796 * asked. Route on that, not on a position in `sources`. Outside a comparison, omit it. 2797 */ 2798 supplyBytes(offset, data, lane) { 2799 const name = enumName(lane, LANES, encodeLane, "supplyBytes: lane") ?? "LANE_UNSPECIFIED"; 2800 this.#submit({ supply_bytes: { offset: toLong(offset), data, lane: name } }); 2801 } 2802 unload() { 2803 this.#submit({ unload: {} }); 2804 } 2805 /** 2806 * Moves the view. An omitted key keeps its current value. 2807 * 2808 * `slide` is 0-based, clamped by the core, and applied after `mode`, so 2809 * `{ mode: "VIEW_MODE_SLIDES", slide: 4 }` opens slide 5. `scrollY` is ignored when `slide` is set. 2810 */ 2811 setView(options) { 2812 const req = convertKeys(options, VIEW_KEYS, "setView"); 2813 checkEnum(req.mode, encodeViewMode, "setView: mode"); 2814 this.#submit({ set_view: req }); 2815 } 2816 /** 2817 * Moves the current slide by `slides`, by grid `rows`, or by `changes`, and brings it into view. 2818 * 2819 * A change is a comparison row that is added, removed, changed or moved. Keys call this, not 2820 * {@link SlideViewerApi#setView}. The core knows how many columns a grid row holds, and two 2821 * presses in one frame move two places. A host that sets `current + 1` from the last event moves 2822 * one. `changes` outside a comparison throws NotInDiffMode (5). 2823 */ 2824 step(options) { 2825 const req = convertKeys(options, STEP_KEYS, "step"); 2826 this.#submit({ step: { slides: req.slides ?? 0, rows: req.rows ?? 0, changes: req.changes ?? 0 } }); 2827 } 2828 /** 2829 * Sets how a comparison is drawn. An omitted key keeps its current value. 2830 * 2831 * `mode` is `"sideBySide"`, `"slider"` or `"onionskin"`. `sliderPosition` and `onionOpacity` 2832 * run 0 to 1 and the core clamps them. Throws NotInDiffMode (5) outside a comparison. 2833 */ 2834 setCompareOptions(options) { 2835 const req = convertKeys(options, COMPARE_KEYS, "setCompareOptions"); 2836 const mode = enumName(req.mode, COMPARE_MODES, encodeCompareMode, "setCompareOptions: mode"); 2837 if (mode) req.mode = mode; 2838 this.#submit({ set_compare_options: req }); 2839 } 2840 /** 2841 * Sets the colour scheme and UI scale. An omitted key keeps its current value. 2842 */ 2843 setRenderOptions(options) { 2844 const req = convertKeys(options, RENDER_KEYS, "setRenderOptions"); 2845 checkEnum(req.color_scheme, encodeColorScheme, "setRenderOptions: colorScheme"); 2846 this.#submit({ set_render_options: req }); 2847 } 2848 /** 2849 * Sets the surface size in device pixels, then presents. 2850 * 2851 * Assigning `canvas.width` clears the canvas, even to the same value. The guard stops a 2852 * `ResizeObserver` that fires with an unchanged size from wiping the picture. 2853 * 2854 * The present is unconditional. A same-size resize is a no-op in the viewer, which then reports 2855 * nothing to redraw, so the pump would never repaint a canvas that was just cleared. 2856 */ 2857 resize(width, height) { 2858 if (this.#canvas.width !== width || this.#canvas.height !== height) { 2859 this.#canvas.width = width; 2860 this.#canvas.height = height; 2861 } 2862 this.#submit({ resize: { width, height } }); 2863 this.present(); 2864 } 2865 pointerMove(x, y) { 2866 this.#submit({ input: { pointer_move: { x, y } } }); 2867 } 2868 pointerButton(button, x, y, pressed) { 2869 this.#submit({ input: { pointer_button: { button, x, y, pressed } } }); 2870 } 2871 pointerLeave() { 2872 this.#submit({ input: { pointer_leave: {} } }); 2873 } 2874 /** 2875 * Sends a scroll gesture in device pixels, positive down and right. C
2875onvert a DOM `WheelEvent` 2876 * with {@link wheelToDevicePixels} first. 2877 */ 2878 wheel(dx, dy) { 2879 this.#submit({ input: { wheel: { dx, dy } } }); 2880 } 2881 onDeckChange(fn) { 2882 return this.#on("deck", fn); 2883 } 2884 onSourceChange(fn) { 2885 return this.#on("source", fn); 2886 } 2887 onViewChange(fn) { 2888 return this.#on("view", fn); 2889 } 2890 onCurrentChange(fn) { 2891 return this.#on("current", fn); 2892 } 2893 onHoverChange(fn) { 2894 return this.#on("hover", fn); 2895 } 2896 onRenderChange(fn) { 2897 return this.#on("render", fn); 2898 } 2899 /** Subscribes to each side's source in a comparison. The payload is `[]` outside one. */ 2900 onSourcesChange(fn) { 2901 return this.#on("sources", fn); 2902 } 2903 /** Subscribes to what a comparison found. The payload is null when the comparison ends. */ 2904 onDiffChange(fn) { 2905 return this.#on("diff", fn); 2906 } 2907 /** Subscribes to a comparison's current row. The payload is null when there is none. */ 2908 onComparedChange(fn) { 2909 return this.#on("compared", fn); 2910 } 2911 /** Subscribes to how a comparison is drawn. The payload is null when the comparison ends. */ 2912 onCompareChange(fn) { 2913 return this.#on("compare", fn); 2914 } 2915 onError(fn) { 2916 return this.#on("error", fn); 2917 } 2918 onReady(fn) { 2919 return this.#on("ready", fn); 2920 } 2921 /** 2922 * Subscribes to every event as `{ domain, payload }`. 2923 */ 2924 onChange(fn) { 2925 return this.#on("any", fn); 2926 } 2927 #on(domain, fn) { 2928 this.#handlers[domain].push(fn); 2929 return () => { 2930 const at = this.#handlers[domain].indexOf(fn); 2931 if (at >= 0) this.#handlers[domain].splice(at, 1); 2932 }; 2933 } 2934 #emit(domain, payload) { 2935 for (const fn of this.#handlers[domain]) this.#call(fn, payload); 2936 for (const fn of this.#handlers.any) this.#call(fn, { domain, payload }); 2937 } 2938 // A drained batch is gone from the core, so one throwing handler must not lose the rest of it. 2939 #call(fn, payload) { 2940 try { 2941 fn(payload); 2942 } catch (cause) { 2943 console.error("slides: an event handler threw", cause); 2944 } 2945 } 2946 /** 2947 * Drains queued events and fans them out. The pump calls this once per frame. 2948 */ 2949 pollEvents() { 2950 const batch = decodeEventBatch(this.#viewer.poll_events()); 2951 for (const event of batch.events ?? []) { 2952 if (event.ready) this.#emit("ready", {}); 2953 else if (event.error) { 2954 this.#emit("error", { code: event.error.code ?? 0, message: event.error.message ?? "" }); 2955 } else if (event.deck_changed) this.#emit("deck", normDeck(event.deck_changed.deck)); 2956 else if (event.source_changed) { 2957 this.#emit("source", normSource(event.source_changed.source)); 2958 this.#emit("sources", (event.source_changed.sources ?? []).map(normSource)); 2959 } else if (event.view_changed) this.#emit("view", normView(event.view_changed.view)); 2960 else if (event.current_changed) { 2961 this.#emit("current", normCurrent(event.current_changed.current)); 2962 } else if (event.hover_changed) this.#emit("hover", normHover(event.hover_changed.hover)); 2963 else if (event.render_changed) { 2964 this.#emit("render", normRender(event.render_changed.render)); 2965 } else if (event.diff_changed) this.#emit("diff", normDiff(event.diff_changed.diff)); 2966 else if (event.compared_changed) { 2967 this.#emit("compared", normCompared(event.compared_changed.compared)); 2968 } else if (event.compare_changed) { 2969 this.#emit("compare", normCompare(event.compare_changed.compare)); 2970 } 2971 } 2972 } 2973 #start() { 2974 this.#running = true; 2975 const pump = () => { 2976 if (!this.#running) return; 2977 try { 2978 this.#viewer.tick(); 2979 this.pollEvents(); 2980 if (this.#viewer.needs_redraw()) this.present(); 2981 } finally { 2982 if (this.#running) requestAnimationFrame(pump); 2983 } 2984 }; 2985 requestAnimationFrame(pump); 2986 } 2987 /** 2988 * Draws the frame and copies it to the canvas. 2989 * 2990 * The `Uint8ClampedArray` is rebuilt on every call. Growing wasm memory detaches every view of it 2991 * without an error, and a detached view reads as empty. A cached view paints a blank canvas once 2992 * a large deck grows the heap. 2993 */ 2994 present() { 2995 this.#viewer.render(); 2996 const width = this.#viewer.frame_width(); 2997 const height = this.#viewer.frame_height(); 2998 if (width === 0 || height === 0) return; 2999 if (!memoryRef) throw new Error("wasm memory is not available; did create() run?"); 3000 const pixels = new Uint8ClampedArray( 3001 memoryRef.buffer, 3002 this.#viewer.frame_ptr(), 3003 this.#viewer.frame_len() 3004 ); 3005 this.#ctx.putImageData(new ImageData(pixels, width, height), 0, 0); 3006 } 3007 /** 3008 * Stops the pump and frees the viewer. Nothing else releases it. 3009 */ 3010 destroy() { 3011 this.#running = false;
3012 this.#viewer.free?.(); 3013 } 3014}; 3015export { 3016 ABI_VERSION_REQUIRED, 3017 SlideViewerApi, 3018 planOpen, 3019 wheelToDevicePixels 3020};
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.