1(function (global, factory) { 2 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : 3 typeof define === 'function' && define.amd ? define(['exports'], factory) : 4 (factory((global.StickySidebar = {}))); 5}(this, (function (exports) { 'use strict'; 6 7var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; 8 9 10 11function unwrapExports (x) { 12 return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; 13} 14 15function createCommonjsModule(fn, module) { 16 return module = { exports: {} }, fn(module, module.exports), module.exports; 17} 18 19var stickySidebar = createCommonjsModule(function (module, exports) { 20(function (global, factory) { 21 if (typeof undefined === "function" && undefined.amd) { 22 undefined(['exports'], factory); 23 } else { 24 factory(exports); 25 } 26})(commonjsGlobal, function (exports) { 27 Object.defineProperty(exports, "__esModule", { 28 value: true 29 }); 30 31 function _classCallCheck(instance, Constructor) { 32 if (!(instance instanceof Constructor)) { 33 throw new TypeError("Cannot call a class as a function"); 34 } 35 } 36 37 var _createClass = function () { 38 function defineProperties(target, props) { 39 for (var i = 0; i < props.length; i++) { 40 var descriptor = props[i]; 41 descriptor.enumerable = descriptor.enumerable || false; 42 descriptor.configurable = true; 43 if ("value" in descriptor) descriptor.writable = true; 44 Object.defineProperty(target, descriptor.key, descriptor); 45 } 46 } 47 48 return function (Constructor, protoProps, staticProps) { 49 if (protoProps) defineProperties(Constructor.prototype, protoProps); 50 if (staticProps) defineProperties(Constructor, staticProps); 51 return Constructor; 52 }; 53 }(); 54 55 /** 56 * Sticky Sidebar JavaScript Plugin. 57 * @version 3.3.4 58 * @author Ahmed Bouhuolia <[email protected]> 59 * @license The MIT License (MIT) 60 */ 61 var StickySidebar = function () { 62 63 // --------------------------------- 64 // # Define Constants 65 // --------------------------------- 66 // 67 var EVENT_KEY = '.stickySidebar'; 68 var DEFAULTS = { 69 /** 70 * Additional top spacing of the element when it becomes sticky. 71 * @type {Numeric|Function} 72 */ 73 topSpacing: 0, 74 75 /** 76 * Additional bottom spacing of the element when it becomes sticky. 77 * @type {Numeric|Function} 78 */ 79 bottomSpacing: 0, 80 81 /** 82 * Container sidebar selector to know what the beginning and end of sticky element. 83 * @type {String|False} 84 */ 85 containerSelector: false, 86 87 /** 88 * Inner wrapper selector. 89 * @type {String} 90 */ 91 innerWrapperSelector: '.inner-wrapper-sticky', 92 93 /** 94 * The name of CSS class to apply to elements when they have become stuck. 95 * @type {String|False} 96 */ 97 stickyClass: 'is-affixed', 98 99 /** 100 * Detect when sidebar and its container change height so re-calculate their dimensions. 101 * @type {Boolean} 102 */ 103 resizeSensor: true, 104 105 /** 106 * The sidebar returns to its normal position if its width below this value. 107 * @type {Numeric} 108 */ 109 minWidth: false 110 }; 111 112 // --------------------------------- 113 // # Class Definition 114 // --------------------------------- 115 // 116 /** 117 * Sticky Sidebar Class. 118 * @public 119 */ 120 121 var StickySidebar = function () { 122 123 /** 124 * Sticky Sidebar Constructor. 125 * @constructor 126 * @param {HTMLElement|String} sidebar - The sidebar element or sidebar selector. 127 * @param {Object} options - The options of sticky sidebar. 128 */ 129 function StickySidebar(sidebar) { 130 var _this = this; 131 132 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 133 134 _classCallCheck(this, StickySidebar); 135 136 this.options = StickySidebar.extend(DEFAULTS, options); 137 138 // Sidebar element query if there's no one, throw error. 139 this.sidebar = 'string' === typeof sidebar ? document.querySelector(sidebar) : sidebar; 140 if ('undefined' === typeof this.sidebar) throw new Error("There is no specific sidebar element."); 141 142 this.sidebarInner = false;
143 this.container = this.sidebar.parentElement; 144 145 // Current Affix Type of sidebar element. 146 this.affixedType = 'STATIC'; 147 this.direction = 'down'; 148 this.support = { 149 transform: false, 150 transform3d: false 151 }; 152 153 this._initialized = false; 154 this._reStyle = false; 155 this._breakpoint = false; 156 157 // Dimensions of sidebar, container and screen viewport. 158 this.dimensions = { 159 translateY: 0, 160 maxTranslateY: 0, 161 topSpacing: 0, 162 lastTopSpacing: 0, 163 bottomSpacing: 0, 164 lastBottomSpacing: 0, 165 sidebarHeight: 0, 166 sidebarWidth: 0, 167 containerTop: 0, 168 containerHeight: 0, 169 viewportHeight: 0, 170 viewportTop: 0, 171 lastViewportTop: 0 172 }; 173 174 // Bind event handlers for referencability. 175 ['handleEvent'].forEach(function (method) { 176 _this[method] = _this[method].bind(_this); 177 }); 178 179 // Initialize sticky sidebar for first time. 180 this.initialize(); 181 } 182 183 /**
184 * Initializes the sticky sidebar by adding inner wrapper, define its container, 185 * min-width breakpoint, calculating dimensions, adding helper classes and inline style. 186 * @private 187 */ 188 189 190 _createClass(StickySidebar, [{ 191 key: 'initialize', 192 value: function initialize() { 193 var _this2 = this; 194 195 this._setSupportFeatures(); 196 197 // Get sticky sidebar inner wrapper, if not found, will create one. 198 if (this.options.innerWrapperSelector) { 199 this.sidebarInner = this.sidebar.querySelector(this.options.innerWrapperSelector); 200 201 if (null === this.sidebarInner) this.sidebarInner = false; 202 } 203 204 if (!this.sidebarInner) { 205 var wrapper = document.createElement('div'); 206 wrapper.setAttribute('class', 'inner-wrapper-sticky'); 207 this.sidebar.appendChild(wrapper); 208 209 while (this.sidebar.firstChild != wrapper) { 210 wrapper.appendChild(this.sidebar.firstChild); 211 }this.sidebarInner = this.sidebar.querySelector('.inner-wrapper-sticky'); 212 } 213 214 // Container wrapper of the sidebar. 215 if (this.options.containerSelector) { 216 var containers = document.querySelectorAll(this.options.containerSelector);
217 containers = Array.prototype.slice.call(containers); 218 219 containers.forEach(function (container, item) { 220 if (!container.contains(_this2.sidebar)) return; 221 _this2.container = container; 222 }); 223 224 if (!containers.length) throw new Error("The container does not contains on the sidebar."); 225 } 226 227 // If top/bottom spacing is not function parse value to integer. 228 if ('function' !== typeof this.options.topSpacing) this.options.topSpacing = parseInt(this.options.topSpacing) || 0; 229 230 if ('function' !== typeof this.options.bottomSpacing) this.options.bottomSpacing = parseInt(this.options.bottomSpacing) || 0; 231 232 // Breakdown sticky sidebar if screen width below `options.minWidth`. 233 this._widthBreakpoint(); 234 235 // Calculate dimensions of sidebar, container and viewport. 236 this.calcDimensions(); 237 238 // Affix sidebar in proper position. 239 this.stickyPosition(); 240 241 // Bind all events. 242 this.bindEvents(); 243
vendor: 4,110 bytes, lines 244-341
244 // Inform other properties the sticky sidebar is initialized. 245 this._initialized = true; 246 } 247 }, { 248 key: 'bindEvents', 249 value: function bindEvents() { 250 window.addEventListener('resize', this, { passive: true, capture: false }); 251 window.addEventListener('scroll', this, { passive: true, capture: false }); 252 253 this.sidebar.addEventListener('update' + EVENT_KEY, this); 254 255 if (this.options.resizeSensor && 'undefined' !== typeof ResizeSensor) { 256 new ResizeSensor(this.sidebarInner, this.handleEvent); 257 new ResizeSensor(this.container, this.handleEvent); 258 } 259 } 260 }, { 261 key: 'handleEvent', 262 value: function handleEvent(event) { 263 this.updateSticky(event); 264 } 265 }, { 266 key: 'calcDimensions', 267 value: function calcDimensions() { 268 if (this._breakpoint) return; 269 var dims = this.dimensions; 270 271 // Container of sticky sidebar dimensions. 272 dims.containerTop = StickySidebar.offsetRelative(this.container).top; 273 dims.containerHeight = this.container.clientHeight; 274 dims.containerBottom = dims.containerTop + dims.containerHeight; 275 276 // Sidebar dimensions. 277 dims.sidebarHeight = this.sidebarInner.offsetHeight; 278 dims.sidebarWidth = this.sidebarInner.offsetWidth; 279 280 // Screen viewport dimensions. 281 dims.viewportHeight = window.innerHeight; 282 283 // Maximum sidebar translate Y. 284 dims.maxTranslateY = dims.containerHeight - dims.sidebarHeight; 285 286 this._calcDimensionsWithScroll(); 287 } 288 }, { 289 key: '_calcDimensionsWithScroll', 290 value: function _calcDimensionsWithScroll() { 291 var dims = this.dimensions; 292 293 dims.sidebarLeft = StickySidebar.offsetRelative(this.sidebar).left; 294 295 dims.viewportTop = document.documentElement.scrollTop || document.body.scrollTop; 296 dims.viewportBottom = dims.viewportTop + dims.viewportHeight; 297 dims.viewportLeft = document.documentElement.scrollLeft || document.body.scrollLeft; 298 299 dims.topSpacing = this.options.topSpacing; 300 dims.bottomSpacing = this.options.bottomSpacing; 301 302 if ('function' === typeof dims.topSpacing) dims.topSpacing = parseInt(dims.topSpacing(this.sidebar)) || 0; 303 304 if ('function' === typeof dims.bottomSpacing) dims.bottomSpacing = parseInt(dims.bottomSpacing(this.sidebar)) || 0; 305 306 if ('VIEWPORT-TOP' === this.affixedType) { 307 // Adjust translate Y in the case decrease top spacing value. 308 if (dims.topSpacing < dims.lastTopSpacing) { 309 dims.translateY += dims.lastTopSpacing - dims.topSpacing; 310 this._reStyle = true; 311 } 312 } else if ('VIEWPORT-BOTTOM' === this.affixedType) { 313 // Adjust translate Y in the case decrease bottom spacing value. 314 if (dims.bottomSpacing < dims.lastBottomSpacing) { 315 dims.translateY += dims.lastBottomSpacing - dims.bottomSpacing; 316 this._reStyle = true; 317 } 318 } 319 320 dims.lastTopSpacing = dims.topSpacing; 321 dims.lastBottomSpacing = dims.bottomSpacing; 322 } 323 }, { 324 key: 'isSidebarFitsViewport', 325 value: function isSidebarFitsViewport() { 326 var dims = this.dimensions; 327 var offset = this.scrollDirection === 'down' ? dims.lastBottomSpacing : dims.lastTopSpacing; 328 return this.dimensions.sidebarHeight + offset < this.dimensions.viewportHeight; 329 } 330 }, { 331 key: 'observeScrollDir', 332 value: function observeScrollDir() { 333 var dims = this.dimensions; 334 if (dims.lastViewportTop === dims.viewportTop) return; 335 336 var furthest = 'down' === this.direction ? Math.min : Math.max; 337 338 // If the browser is scrolling not in the same direction. 339 if (dims.viewportTop === furthest(dims.viewportTop, dims.lastViewportTop)) this.direction = 'down' === this.direction ? 'up' : 'down'; 340 } 341 }, {
342 key: 'getAffixType', 343 value: function getAffixType() { 344 this._calcDimensionsWithScroll(); 345 var dims = this.dimensions; 346 var colliderTop = dims.viewportTop + dims.topSpacing; 347 var affixType = this.affixedType; 348 349 if (colliderTop <= dims.containerTop || dims.containerHeight <= dims.sidebarHeight) { 350 dims.translateY = 0; 351 affixType = 'STATIC'; 352 } else { 353 affixType = 'up' === this.direction ? this._getAffixTypeScrollingUp() : this._getAffixTypeScrollingDown(); 354 } 355 356 // Make sure the translate Y is not bigger than container height. 357 dims.translateY = Math.max(0, dims.translateY); 358 dims.translateY = Math.min(dims.containerHeight, dims.translateY); 359 dims.translateY = Math.round(dims.translateY); 360 361 dims.lastViewportTop = dims.viewportTop; 362 return affixType; 363 } 364 }, { 365 key: '_getAffixTypeScrollingDown', 366 value: function _getAffixTypeScrollingDown() { 367 var dims = this.dimensions; 368 var sidebarBottom = dims.sidebarHeight + dims.containerTop; 369 var colliderTop = dims.viewportTop + dims.topSpacing; 370 var colliderBottom = dims.viewportBottom - dims.bottomSpacing; 371 var affixType = this.affixedType; 372 373 if (this.isSidebarFitsViewport()) { 374 if (dims.sidebarHeight + colliderTop >= dims.containerBottom) { 375 dims.translateY = dims.containerBottom - sidebarBottom; 376 affixType = 'CONTAINER-BOTTOM'; 377 } else if (colliderTop >= dims.containerTop) { 378 dims.translateY = colliderTop - dims.containerTop; 379 affixType = 'VIEWPORT-TOP'; 380 } 381 } else { 382 if (dims.containerBottom <= colliderBottom) { 383 dims.translateY = dims.containerBottom - sidebarBottom; 384 affixType = 'CONTAINER-BOTTOM'; 385 } else if (sidebarBottom + dims.translateY <= colliderBottom) { 386 dims.translateY = colliderBottom - sidebarBottom; 387 affixType = 'VIEWPORT-BOTTOM'; 388 } else if (dims.containerTop + dims.translateY <= colliderTop && 0 !== dims.translateY && dims.maxTranslateY !== dims.translateY) { 389 affixType = 'VIEWPORT-UNBOTTOM'; 390 } 391 } 392 393 return affixType; 394 } 395 }, { 396 key: '_getAffixTypeScrollingUp', 397 value: function _getAffixTypeScrollingUp() { 398 var dims = this.dimensions; 399 var sidebarBottom = dims.sidebarHeight + dims.containerTop; 400 var colliderTop = dims.viewportTop + dims.topSpacing; 401 var colliderBottom = dims.viewportBottom - dims.bottomSpacing; 402 var affixType = this.affixedType; 403 404 if (colliderTop <= dims.translateY + dims.containerTop) { 405 dims.translateY = colliderTop - dims.containerTop; 406 affixType = 'VIEWPORT-TOP'; 407 } else if (dims.containerBottom <= colliderBottom) { 408 dims.translateY = dims.containerBottom - sidebarBottom; 409 affixType = 'CONTAINER-BOTTOM'; 410 } else if (!this.isSidebarFitsViewport()) { 411 412 if (dims.containerTop <= colliderTop && 0 !== dims.translateY && dims.maxTranslateY !== dims.translateY) { 413 affixType = 'VIEWPORT-UNBOTTOM'; 414 } 415 } 416 417 return affixType; 418 } 419 }, { 420 key: '_getStyle', 421 value: function _getStyle(affixType) { 422 if ('undefined' === typeof affixType) return; 423 424 var style = { inner: {}, outer: {} }; 425 var dims = this.dimensions; 426 427 switch (affixType) { 428 case 'VIEWPORT-TOP': 429 style.inner = { position: 'fixed', top: dims.topSpacing, 430 left: dims.sidebarLeft - dims.viewportLeft, width: dims.sidebarWidth }; 431 break; 432 case 'VIEWPORT-BOTTOM': 433 style.inner = { position: 'fixed', top: 'auto', left: dims.sidebarLeft, 434 bottom: dims.bottomSpacing, width: dims.sidebarWidth }; 435 break; 436 case 'CONTAINER-BOTTOM': 437 case 'VIEWPORT-UNBOTTOM': 438 var translate = this._getTranslate(0, dims.translateY + 'px'); 439 440 if (translate) style.inner = { transform: translate };else style.inner = { position: 'absolute', top: dims.translateY, width: dims.sidebarWidth }; 441 break; 442 } 443 444 switch (affixType) { 445 case 'VIEWPORT-TOP': 446 case 'VIEWPORT-BOTTOM': 447 case 'VIEWPORT-UNBOTTOM': 448 case 'CONTAINER-BOTTOM': 449 style.outer = { height: dims.sidebarHeight, position: 'relative' }; 450 break; 451 } 452 453 style.outer = StickySidebar.extend({ height: '', position: '' }, style.outer); 454 style.inner = StickySidebar.extend({ position: 'relative', top: '', left: '', 455 bottom: '', width: '', transform: '' }, style.inner); 456 457 return style; 458 } 459 }, { 460 key: 'stickyPosition', 461 value: function stickyPosition(force) { 462 if (this._breakpoint) return; 463 464 force = this._reStyle || force || false; 465 466 var offsetTop = this.options.topSpacing; 467 var offsetBottom = this.options.bottomSpacing; 468
vendor: 8,290 bytes, lines 469-692
469 var affixType = this.getAffixType(); 470 var style = this._getStyle(affixType); 471 472 if ((this.affixedType != affixType || force) && affixType) { 473 var affixEvent = 'affix.' + affixType.toLowerCase().replace('viewport-', '') + EVENT_KEY; 474 StickySidebar.eventTrigger(this.sidebar, affixEvent); 475 476 if ('STATIC' === affixType) StickySidebar.removeClass(this.sidebar, this.options.stickyClass);else StickySidebar.addClass(this.sidebar, this.options.stickyClass); 477 478 for (var key in style.outer) { 479 var unit = 'number' === typeof style.outer[key] ? 'px' : ''; 480 this.sidebar.style[key] = style.outer[key] + unit; 481 } 482 483 for (var _key in style.inner) { 484 var _unit = 'number' === typeof style.inner[_key] ? 'px' : ''; 485 this.sidebarInner.style[_key] = style.inner[_key] + _unit; 486 } 487 488 var affixedEvent = 'affixed.' + affixType.toLowerCase().replace('viewport-', '') + EVENT_KEY; 489 StickySidebar.eventTrigger(this.sidebar, affixedEvent); 490 } else { 491 if (this._initialized) this.sidebarInner.style.left = style.inner.left; 492 } 493 494 this.affixedType = affixType; 495 } 496 }, { 497 key: '_widthBreakpoint', 498 value: function _widthBreakpoint() { 499 500 if (window.innerWidth <= this.options.minWidth) { 501 this._breakpoint = true; 502 this.affixedType = 'STATIC'; 503 504 this.sidebar.removeAttribute('style'); 505 StickySidebar.removeClass(this.sidebar, this.options.stickyClass); 506 this.sidebarInner.removeAttribute('style'); 507 } else { 508 this._breakpoint = false; 509 } 510 } 511 }, { 512 key: 'updateSticky', 513 value: function updateSticky() { 514 var _this3 = this; 515 516 var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 517 518 if (this._running) return; 519 this._running = true; 520 521 (function (eventType) { 522 requestAnimationFrame(function () { 523 switch (eventType) { 524 // When browser is scrolling and re-calculate just dimensions 525 // within scroll. 526 case 'scroll': 527 _this3._calcDimensionsWithScroll(); 528 _this3.observeScrollDir(); 529 _this3.stickyPosition(); 530 break; 531 532 // When browser is resizing or there's no event, observe width 533 // breakpoint and re-calculate dimensions. 534 case 'resize': 535 default: 536 _this3._widthBreakpoint(); 537 _this3.calcDimensions(); 538 _this3.stickyPosition(true); 539 break; 540 } 541 _this3._running = false; 542 }); 543 })(event.type); 544 } 545 }, { 546 key: '_setSupportFeatures', 547 value: function _setSupportFeatures() { 548 var support = this.support; 549 550 support.transform = StickySidebar.supportTransform(); 551 support.transform3d = StickySidebar.supportTransform(true); 552 } 553 }, { 554 key: '_getTranslate', 555 value: function _getTranslate() { 556 var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; 557 var x = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; 558 var z = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; 559 560 if (this.support.transform3d) return 'translate3d(' + y + ', ' + x + ', ' + z + ')';else if (this.support.translate) return 'translate(' + y + ', ' + x + ')';else return false; 561 } 562 }, { 563 key: 'destroy', 564 value: function destroy() { 565 window.removeEventListener('resize', this, { capture: false }); 566 window.removeEventListener('scroll', this, { capture: false }); 567 568 this.sidebar.classList.remove(this.options.stickyClass); 569 this.sidebar.style.minHeight = ''; 570 571 this.sidebar.removeEventListener('update' + EVENT_KEY, this); 572 573 var styleReset = { inner: {}, outer: {} }; 574 575 styleReset.inner = { position: '', top: '', left: '', bottom: '', width: '', transform: '' }; 576 styleReset.outer = { height: '', position: '' }; 577 578 for (var key in styleReset.outer) { 579 this.sidebar.style[key] = styleReset.outer[key]; 580 }for (var _key2 in styleReset.inner) { 581 this.sidebarInner.style[_key2] = styleReset.inner[_key2]; 582 }if (this.options.resizeSensor && 'undefined' !== typeof ResizeSensor) { 583 ResizeSensor.detach(this.sidebarInner, this.handleEvent); 584 ResizeSensor.detach(this.container, this.handleEvent); 585 } 586 } 587 }], [{ 588 key: 'supportTransform', 589 value: function supportTransform(transform3d) { 590 var result = false, 591 property = transform3d ? 'perspective' : 'transform', 592 upper = property.charAt(0).toUpperCase() + property.slice(1), 593 prefixes = ['Webkit', 'Moz', 'O', 'ms'], 594 support = document.createElement('support'), 595 style = support.style; 596 597 (property + ' ' + prefixes.join(upper + ' ') + upper).split(' ').forEach(function (property, i) { 598 if (style[property] !== undefined) { 599 result = property; 600 return false; 601 } 602 }); 603 return result; 604 } 605 }, { 606 key: 'eventTrigger', 607 value: function eventTrigger(element, eventName, data) { 608 try { 609 var event = new CustomEvent(eventName, { detail: data }); 610 } catch (e) { 611 var event = document.createEvent('CustomEvent'); 612 event.initCustomEvent(eventName, true, true, data); 613 } 614 element.dispatchEvent(event); 615 } 616 }, { 617 key: 'extend', 618 value: function extend(defaults, options) { 619 var results = {}; 620 for (var key in defaults) { 621 if ('undefined' !== typeof options[key]) results[key] = options[key];else results[key] = defaults[key]; 622 } 623 return results; 624 } 625 }, { 626 key: 'offsetRelative', 627 value: function offsetRelative(element) { 628 var result = { left: 0, top: 0 }; 629 630 do { 631 var offsetTop = element.offsetTop; 632 var offsetLeft = element.offsetLeft; 633 634 if (!isNaN(offsetTop)) result.top += offsetTop; 635 636 if (!isNaN(offsetLeft)) result.left += offsetLeft; 637 638 element = 'BODY' === element.tagName ? element.parentElement : element.offsetParent; 639 } while (element); 640 return result; 641 } 642 }, { 643 key: 'addClass', 644 value: function addClass(element, className) { 645 if (!StickySidebar.hasClass(element, className)) { 646 if (element.classList) element.classList.add(className);else element.className += ' ' + className; 647 } 648 } 649 }, { 650 key: 'removeClass', 651 value: function removeClass(element, className) { 652 if (StickySidebar.hasClass(element, className)) { 653 if (element.classList) element.classList.remove(className);else element.className = element.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' '); 654 } 655 } 656 }, { 657 key: 'hasClass', 658 value: function hasClass(element, className) { 659 if (element.classList) return element.classList.contains(className);else return new RegExp('(^| )' + className + '( |$)', 'gi').test(element.className); 660 } 661 }, { 662 key: 'defaults', 663 get: function () { 664 return DEFAULTS; 665 } 666 }]); 667 668 return StickySidebar; 669 }(); 670 671 return StickySidebar; 672 }(); 673 674 exports.default = StickySidebar; 675 676 677 // Global 678 // ------------------------- 679 window.StickySidebar = StickySidebar; 680}); 681}); 682 683var stickySidebar$1 = unwrapExports(stickySidebar); 684 685exports['default'] = stickySidebar$1; 686exports.__moduleExports = stickySidebar; 687 688Object.defineProperty(exports, '__esModule', { value: true }); 689 690}))); 691 692//# sourceMappingURL=sticky-sidebar.js.map
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.