Built for the Produce department · 25% shrink reduction 3% sales lift 7% turn improvement

Produce, perfected.

AI built specifically for produce, accounting for ripeness curves, weather, weekly ad lift, and holiday spikes. Cut shrink 25%. Lift sales 3%. Already running at 12,500+ fresh departments.

  • +Forecasts ripeness curves SKU-by-SKU
  • +Accounts for weather, ad cycles, holidays
  • +Three weeks to first store. Twelve to full chain.
WinCo LogoStater Bros LogoHeinen's LogoFresh Thyme LogoAlbertsons LogoSave Mart LogoCub LogoBashas's Logo

+3%

Sales increase

+25%

Shrink reduction

80%

Stockout reduction

+20%

Labor efficiency

+7%

Faster inventory turns

+94%

Adherence rate

Meet the
Produce engine.

Purpose-built for produce, Afresh goes beyond traditional demand forecasting and perpetual inventory. It models ripening curves, weather impact, weekly ad lift, and holiday spikes to drive optimal decisions in every department, every store, every day.

A new approach that deliver in fresh"})},o})(t.default);t.default.registerComponent("TimeDivider",o),n.default=o,e.exports=n.default},{"../../component.js":64}],91:[function(t,e,n){function o(t){return t&&t.__esModule?t:{default:t}}n.__esModule=!0;var r=o(t("../../slider/slider.js")),i=o(t("../../component.js")),s=(t=>{if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e})(t("../../utils/fn.js")),t=(o(t("./volume-level.js")),(n=>{var t=o,e=n;if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);function o(t,e){if(!(this instanceof o))throw new TypeError("Cannot call a class as a function");n.call(this,t,e),this.on(t,"volumechange",this.updateARIAAttributes),t.ready(s.bind(this,this.updateARIAAttributes))}return t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e),o.prototype.createEl=function(){return n.prototype.createEl.call(this,"div",{className:"vjs-volume-bar vjs-slider-bar"},{"aria-label":"volume level"})},o.prototype.handleMouseMove=function(t){this.player_.muted()&&this.player_.muted(!1),this.player_.volume(this.calculateDistance(t))},o.prototype.getPercent=function(){return this.player_.muted()?0:this.player_.volume()},o.prototype.stepForward=function(){this.player_.volume(this.player_.volume()+.1)},o.prototype.stepBack=function(){this.player_.volume(this.player_.volume()-.1)},o.prototype.updateARIAAttributes=function(){var t=(100*this.player_.volume()).toFixed(2);this.el_.setAttribute("aria-valuenow",t),this.el_.setAttribute("aria-valuetext",t+"%")},o})(r.default));t.prototype.options_={children:["volumeLevel"],barName:"volumeLevel"},t.prototype.playerEvent="volumechange",i.default.registerComponent("VolumeBar",t),n.default=t,e.exports=n.default},{"../../component.js":64,"../../slider/slider.js":109,"../../utils/fn.js":127,"./volume-level.js":93}],92:[function(t,e,n){function o(t){return t&&t.__esModule?t:{default:t}}n.__esModule=!0;var r=o(t("../../component.js")),t=(o(t("./volume-bar.js")),(n=>{var t=o,e=n;if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);function o(t,e){if(!(this instanceof o))throw new TypeError("Cannot call a class as a function");n.call(this,t,e),t.tech_&&!1===t.tech_.featuresVolumeControl&&this.addClass("vjs-hidden"),this.on(t,"loadstart",function(){!1===t.tech_.featuresVolumeControl?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")})}return t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e),o.prototype.createEl=function(){return n.prototype.createEl.call(this,"div",{className:"vjs-volume-control vjs-control"})},o})(r.default));t.prototype.options_={children:["volumeBar"]},r.default.registerComponent("VolumeControl",t),n.default=t,e.exports=n.default},{"../../component.js":64,"./volume-bar.js":91}],93:[function(t,e,n){n.__esModule=!0;var t=t("../../component.js"),t=(t=t)&&t.__esModule?t:{default:t},o=(n=>{var t=o,e=n;if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);function o(){var t=this,e=o;if(!(t instanceof e))throw new TypeError("Cannot call a class as a function");n.apply(this,arguments)}return t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e),o.prototype.createEl=function(){return n.prototype.createEl.call(this,"div",{className:"vjs-volume-level",innerHTML:''})},o})(t.default);t.default.registerComponent("VolumeLevel",o),n.default=o,e.exports=n.default},{"../../component.js":64}],94:[function(t,e,n){function o(t){return t&&t.__esModule?t:{default:t}}n.__esModule=!0;o(t("../button.js"));var r=o(t("../component.js")),a=o(t("../menu/menu.js")),i=o(t("../menu/menu-button.js")),l=o(t("./mute-toggle.js")),u=o(t("./volume-control/volume-bar.js")),t=(i=>{var t=s,e=i;if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);function s(t){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],n=this,o=s;if(!(n instanceof o))throw new TypeError("Cannot call a class as a function");function r(){t.tech_&&!1===t.tech_.featuresVolumeControl?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")}void 0===e.inline&&(e.inline=!0),void 0===e.vertical&&(e.inline?e.vertical=!1:e.vertical=!0),e.volumeBar=e.volumeBar||{},e.volumeBar.vertical=!!e.vertical,i.call(this,t,e),this.on(t,"volumechange",this.volumeUpdate),this.on(t,"loadstart",this.volumeUpdate),r.call(this),this.on(t,"loadstart",r),this.on(this.volumeBar,["slideractive","focus"],function(){this.addClass("vjs-slider-active")}),this.on(this.volumeBar,["sliderinactive","blur"],function(){this.removeClass("vjs-slider-active")})}return t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e),s.prototype.buildCSSClass=function(){var t="",t=this.options_.vertical?"vjs-volume-menu-button-vertical":"vjs-volume-menu-button-horizontal";return"vjs-volume-menu-button "+i.prototype.buildCSSClass.call(this)+" "+t},s.prototype.createMenu=function(){var t=new a.default(this.player_,{contentElType:"div"}),e=new u.default(this.player_,this.options_.volumeBar);return t.addChild(e),this.volumeBar=e,t},s.prototype.handleClick=function(){l.default.prototype.handleClick.call(this),i.prototype.handleClick.call(this)},s})(i.default);t.prototype.volumeUpdate=l.default.prototype.update,t.prototype.controlText_="Mute",r.default.registerComponent("VolumeMenuButton",t),n.default=t,e.exports=n.default},{"../button.js":62,"../component.js":64,"../menu/menu-button.js":101,"../menu/menu.js":103,"./mute-toggle.js":68,"./volume-control/volume-bar.js":91}],95:[function(t,e,n){function o(t){return t&&t.__esModule?t:{default:t}}n.__esModule=!0;var r=o(t("./component")),i=o(t("./modal-dialog")),t=((t=>{if(t&&t.__esModule)return;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);e.default=t})(t("./utils/dom")),o(t("./utils/merge-options"))),s=(n=>{var t=o,e=n;if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);function o(t,e){if(!(this instanceof o))throw new TypeError("Cannot call a class as a function");n.call(this,t,e),this.on(t,"error",this.open)}return t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e),o.prototype.buildCSSClass=function(){return"vjs-error-display "+n.prototype.buildCSSClass.call(this)},o.prototype.content=function(){var t=this.player().error();return t?this.localize(t.message):""},o})(i.default);s.prototype.options_=t.default(i.default.prototype.options_,{fillAlways:!0,uncloseable:!0}),r.default.registerComponent("ErrorDisplay",s),n.default=s,e.exports=n.default},{"./component":64,"./modal-dialog":104,"./utils/dom":125,"./utils/merge-options":131}],96:[function(t,e,n){n.__esModule=!0;function o(){}var r=(t=>{if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e})(t("./utils/events.js"));o.prototype.allowedEvents_={},o.prototype.addEventListener=o.prototype.on=function(t,e){var n=this.addEventListener;this.addEventListener=Function.prototype,r.on(this,t,e),this.addEventListener=n},o.prototype.removeEventListener=o.prototype.off=function(t,e){r.off(this,t,e)},o.prototype.one=function(t,e){r.one(this,t,e)},o.prototype.dispatchEvent=o.prototype.trigger=function(t){var e=t.type||t;t=r.fixEvent(t="string"==typeof t?{type:e}:t),this.allowedEvents_[e]&&this["on"+e]&&this["on"+e](t),r.trigger(this,t)},n.default=o,e.exports=n.default},{"./utils/events.js":126}],97:[function(t,e,n){n.__esModule=!0;var t=t("./utils/log"),s=(t=t)&&t.__esModule?t:{default:t};n.default=function(t){var e,n=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],o=function(){t.apply(this,arguments)},r={},n=("object"==typeof n?("function"==typeof n.init&&(s.default.warn("Constructor logic via init() is deprecated; please use constructor() instead."),n.constructor=n.init),n.constructor!==Object.prototype.constructor&&(o=n.constructor),r=n):"function"==typeof n&&(o=n),o),i=t;if("function"!=typeof i&&null!==i)throw new TypeError("Super expression must either be null or a function, not "+typeof i);for(e in n.prototype=Object.create(i&&i.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),i&&(n.super_=i),r)r.hasOwnProperty(e)&&(o.prototype[e]=r[e]);return o},e.exports=n.default},{"./utils/log":130}],98:[function(t,e,n){n.__esModule=!0;for(var t=t("global/document"),o=(t=t)&&t.__esModule?t:{default:t},r={},i=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],s=i[0],a=void 0,l=0;l{var t=o,e=n;if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);function o(){var t=this,e=o;if(!(t instanceof e))throw new TypeError("Cannot call a class as a function");n.apply(this,arguments)}return t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e),o.prototype.createEl=function(){return n.prototype.createEl.call(this,"div",{className:"vjs-loading-spinner"})},o})(t.default);t.default.registerComponent("LoadingSpinner",o),n.default=o,e.exports=n.default},{"./component":64}],100:[function(t,e,n){n.__esModule=!0;function o(t){"number"==typeof t?this.code=t:"string"==typeof t?this.message=t:"object"==typeof t&&r.default(this,t),this.message||(this.message=o.defaultMessages[this.code]||"")}var t=t("object.assign"),r=(t=t)&&t.__esModule?t:{default:t};o.prototype.code=0,o.prototype.message="",o.prototype.status=null,o.errorTypes=["MEDIA_ERR_CUSTOM","MEDIA_ERR_ABORTED","MEDIA_ERR_NETWORK","MEDIA_ERR_DECODE","MEDIA_ERR_SRC_NOT_SUPPORTED","MEDIA_ERR_ENCRYPTED"],o.defaultMessages={1:"You aborted the media playback",2:"A network error caused the media download to fail part-way.",3:"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.",4:"The media could not be loaded, either because the server or network failed or because the format is not supported.",5:"The media is encrypted and we do not have the keys to decrypt it."};for(var i=0;i{var t=i,e=r;if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);function i(t){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],n=this,o=i;if(!(n instanceof o))throw new TypeError("Cannot call a class as a function");r.call(this,t,e),this.update(),this.on("keydown",this.handleKeyPress),this.el_.setAttribute("aria-haspopup",!0),this.el_.setAttribute("role","button")}return t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e),i.prototype.update=function(){var t=this.createMenu();this.menu&&this.removeChild(this.menu),this.menu=t,this.addChild(t),this.buttonPressed_=!1,this.items&&0===this.items.length?this.hide():this.items&&1{var t=n,e=o;if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);function n(t,e){if(!(this instanceof n))throw new TypeError("Cannot call a class as a function");o.call(this,t,e),this.selected(e.selected)}return t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e),n.prototype.createEl=function(t,e,n){return o.prototype.createEl.call(this,"li",s.default({className:"vjs-menu-item",innerHTML:this.localize(this.options_.label)},e),n)},n.prototype.handleClick=function(){this.selected(!0)},n.prototype.selected=function(t){t?(this.addClass("vjs-selected"),this.el_.setAttribute("aria-selected",!0)):(this.removeClass("vjs-selected"),this.el_.setAttribute("aria-selected",!1))},n})(r.default);i.default.registerComponent("MenuItem",t),n.default=t,e.exports=n.default},{"../button.js":62,"../component.js":64,"object.assign":45}],103:[function(t,e,n){function o(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}n.__esModule=!0;var r=t("../component.js"),r=(r=r)&&r.__esModule?r:{default:r},i=o(t("../utils/dom.js")),s=o(t("../utils/fn.js")),a=o(t("../utils/events.js")),t=(n=>{var t=o,e=n;if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);function o(){var t=this,e=o;if(!(t instanceof e))throw new TypeError("Cannot call a class as a function");n.apply(this,arguments)}return t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e),o.prototype.addItem=function(t){this.addChild(t),t.on("click",s.bind(this,function(){this.unlockShowing()}))},o.prototype.createEl=function(){var t=this.options_.contentElType||"ul",t=(this.contentEl_=i.createEl(t,{className:"vjs-menu-content"}),n.prototype.createEl.call(this,"div",{append:this.contentEl_,className:"vjs-menu"}));return t.appendChild(this.contentEl_),a.on(t,"click",function(t){t.preventDefault(),t.stopImmediatePropagation()}),t},o})(r.default);r.default.registerComponent("Menu",t),n.default=t,e.exports=n.default},{"../component.js":64,"../utils/dom.js":125,"../utils/events.js":126,"../utils/fn.js":127}],104:[function(t,e,n){function o(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function r(t){return t&&t.__esModule?t:{default:t}}n.__esModule=!0;var i=r(t("global/document")),s=o(t("./utils/dom")),a=o(t("./utils/fn")),l=(r(t("./utils/log")),r(t("./component"))),u=(r(t("./close-button")),"vjs-modal-dialog"),t=(n=>{var t=o,e=n;if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);function o(t,e){if(!(this instanceof o))throw new TypeError("Cannot call a class as a function");n.call(this,t,e),this.opened_=this.hasBeenOpened_=this.hasBeenFilled_=!1,this.closeable(!this.options_.uncloseable),this.content(this.options_.content),this.contentEl_=s.createEl("div",{className:u+"-content"},{role:"document"}),this.descEl_=s.createEl("p",{className:u+"-description vjs-offscreen",id:this.el().getAttribute("aria-describedby")}),s.textContent(this.descEl_,this.description()),this.el_.appendChild(this.descEl_),this.el_.appendChild(this.contentEl_)}return t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e),o.prototype.createEl=function(){return n.prototype.createEl.call(this,"div",{className:this.buildCSSClass(),tabIndex:-1},{"aria-describedby":this.id()+"_description","aria-hidden":"true","aria-label":this.label(),role:"dialog"})},o.prototype.buildCSSClass=function(){return u+" vjs-hidden "+n.prototype.buildCSSClass.call(this)},o.prototype.handleKeyPress=function(t){27===t.which&&this.closeable()&&this.close()},o.prototype.label=function(){return this.options_.label||this.localize("Modal Window")},o.prototype.description=function(){var t=this.options_.description||this.localize("This is a modal window.");return this.closeable()&&(t+=" "+this.localize("This modal can be closed by pressing the Escape key or activating the close button.")),t},o.prototype.open=function(){var t;return this.opened_||(t=this.player(),this.trigger("beforemodalopen"),this.opened_=!0,!this.options_.fillAlways&&(this.hasBeenOpened_||this.hasBeenFilled_)||this.fill(),this.wasPlaying_=!t.paused(),this.wasPlaying_&&t.pause(),this.closeable()&&this.on(i.default,"keydown",a.bind(this,this.handleKeyPress)),t.controls(!1),this.show(),this.el().setAttribute("aria-hidden","false"),this.trigger("modalopen"),this.hasBeenOpened_=!0),this},o.prototype.opened=function(t){return"boolean"==typeof t&&this[t?"open":"close"](),this.opened_},o.prototype.close=function(){var t;return this.opened_&&(t=this.player(),this.trigger("beforemodalclose"),this.opened_=!1,this.wasPlaying_&&t.play(),this.closeable()&&this.off(i.default,"keydown",a.bind(this,this.handleKeyPress)),t.controls(!0),this.hide(),this.el().setAttribute("aria-hidden","true"),this.trigger("modalclose"),this.options_.temporary)&&this.dispose(),this},o.prototype.closeable=function(t){var e,n;return"boolean"==typeof t&&(t=this.closeable_=!!t,e=this.getChild("closeButton"),t&&!e&&(n=this.contentEl_,this.contentEl_=this.el_,e=this.addChild("closeButton"),this.contentEl_=n,this.on(e,"close",this.close)),!t)&&e&&(this.off(e,"close",this.close),this.removeChild(e),e.dispose()),this.closeable_},o.prototype.fill=function(){return this.fillWith(this.content())},o.prototype.fillWith=function(t){var e=this.contentEl(),n=e.parentNode,o=e.nextSibling;return this.trigger("beforemodalfill"),this.hasBeenFilled_=!0,n.removeChild(e),this.empty(),s.insertContent(e,t),this.trigger("modalfill"),o?n.insertBefore(e,o):n.appendChild(e),this},o.prototype.empty=function(){return this.trigger("beforemodalempty"),s.emptyEl(this.contentEl()),this.trigger("modalempty"),this},o.prototype.content=function(t){return void 0!==t&&(this.content_=t),this.content_},o})(l.default);t.prototype.options_={temporary:!0},l.default.registerComponent("ModalDialog",t),n.default=t,e.exports=n.default},{"./close-button":63,"./component":64,"./utils/dom":125,"./utils/fn":127,"./utils/log":130,"global/document":1}],105:[function(t,e,n){function o(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function r(t){return t&&t.__esModule?t:{default:t}}n.__esModule=!0;var l=r(t("./component.js")),i=r(t("global/document")),s=r(t("global/window")),u=o(t("./utils/events.js")),c=o(t("./utils/dom.js")),p=o(t("./utils/fn.js")),h=o(t("./utils/guid.js")),d=(o(t("./utils/browser.js")),r(t("./utils/log.js"))),f=r(t("./utils/to-title-case.js")),m=t("./utils/time-ranges.js"),y=t("./utils/buffer.js"),v=o(t("./utils/stylesheet.js")),g=r(t("./fullscreen-api.js")),b=r(t("./media-error.js")),_=r(t("safe-json-parse/tuple")),j=r(t("object.assign")),w=r(t("./utils/merge-options.js")),T=r(t("./tracks/text-track-list-converter.js")),x=(r(t("./tech/loader.js")),r(t("./poster-image.js")),r(t("./tracks/text-track-display.js")),r(t("./loading-spinner.js")),r(t("./big-play-button.js")),r(t("./control-bar/control-bar.js")),r(t("./error-display.js")),r(t("./tracks/text-track-settings.js")),r(t("./modal-dialog"))),t=(r(t("./tech/html5.js")),(s=>{var t=a,e=s;if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);function a(t,e,n){var o,r=this;if(!(this instanceof a))throw new TypeError("Cannot call a class as a function");if(t.id=t.id||"vjs_video_"+h.newGUID(),(e=j.default(a.getTagSettings(t),e)).initChildren=!1,e.createEl=!1,e.reportTouchActivity=!1,s.call(this,null,e,n),!this.options_||!this.options_.techOrder||!this.options_.techOrder.length)throw new Error("No techOrder specified. Did you overwrite videojs.options instead of just changing the properties you want to override?");this.tag=t,this.tagAttributes=t&&c.getElAttributes(t),this.language(this.options_.language),e.languages?(o={},Object.getOwnPropertyNames(e.languages).forEach(function(t){o[t.toLowerCase()]=e.languages[t]}),r.languages_=o):this.languages_=a.prototype.options_.languages,this.cache_={},this.poster_=e.poster||"",this.controls_=!!e.controls,t.controls=!1,this.scrubbing_=!1,this.el_=this.createEl();var i,n=w.default(this.options_);e.plugins&&(i=e.plugins,Object.getOwnPropertyNames(i).forEach(function(t){"function"==typeof this[t]?this[t](i[t]):d.default.error("Unable to find plugin:",t)},r)),this.options_.playerOptions=n,this.initChildren(),this.isAudio("audio"===t.nodeName.toLowerCase()),this.controls()?this.addClass("vjs-controls-enabled"):this.addClass("vjs-controls-disabled"),this.isAudio()&&this.addClass("vjs-audio"),this.flexNotSupported_()&&this.addClass("vjs-no-flex"),(a.players[this.id_]=this).userActive(!0),this.reportUserActivity(),this.listenForUserActivity_(),this.on("fullscreenchange",this.handleFullscreenChange_),this.on("stageclick",this.handleStageClick_)}return t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e),a.prototype.dispose=function(){this.trigger("dispose"),this.off("dispose"),this.styleEl_&&this.styleEl_.parentNode.removeChild(this.styleEl_),a.players[this.id_]=null,this.tag&&this.tag.player&&(this.tag.player=null),this.el_&&this.el_.player&&(this.el_.player=null),this.tech_&&this.tech_.dispose(),s.prototype.dispose.call(this)},a.prototype.createEl=function(){var e=this.el_=s.prototype.createEl.call(this,"div"),t=this.tag,n=(t.removeAttribute("width"),t.removeAttribute("height"),c.getElAttributes(t)),o=(Object.getOwnPropertyNames(n).forEach(function(t){"class"===t?e.className=n[t]:e.setAttribute(t,n[t])}),t.id+="_html5_api",t.className="vjs-tech",(t.player=e.player=this).addClass("vjs-paused"),this.styleEl_=v.createStyleElement("vjs-styles-dimensions"),i.default.querySelector(".vjs-styles-defaults")),r=i.default.querySelector("head");return r.insertBefore(this.styleEl_,o?o.nextSibling:r.firstChild),this.width(this.options_.width),this.height(this.options_.height),this.fluid(this.options_.fluid),this.aspectRatio(this.options_.aspectRatio),t.initNetworkState_=t.networkState,t.parentNode&&t.parentNode.insertBefore(e,t),c.insertElFirst(t,e),this.el_=e},a.prototype.width=function(t){return this.dimension("width",t)},a.prototype.height=function(t){return this.dimension("height",t)},a.prototype.dimension=function(t,e){var n=t+"_";if(void 0===e)return this[n]||0;if(""===e)this[n]=void 0;else{var o=parseFloat(e);if(isNaN(o))return d.default.error('Improper value "'+e+'" supplied for for '+t),this;this[n]=o}return this.updateStyleEl_(),this},a.prototype.fluid=function(t){if(void 0===t)return!!this.fluid_;this.fluid_=!!t,t?this.addClass("vjs-fluid"):this.removeClass("vjs-fluid")},a.prototype.aspectRatio=function(t){if(void 0===t)return this.aspectRatio_;if(!/^\d+\:\d+$/.test(t))throw new Error("Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.");this.aspectRatio_=t,this.fluid(!0),this.updateStyleEl_()},a.prototype.updateStyleEl_=function(){var t=void 0,e=void 0,n=(void 0!==this.aspectRatio_&&"auto"!==this.aspectRatio_?this.aspectRatio_:this.videoWidth()?this.videoWidth()+":"+this.videoHeight():"16:9").split(":"),n=n[1]/n[0],t=void 0!==this.width_?this.width_:void 0!==this.height_?this.height_/n:this.videoWidth()||300,e=void 0!==this.height_?this.height_:t*n,o=this.id()+"-dimensions";this.addClass(o),v.setTextContent(this.styleEl_,"\n ."+o+" {\n width: "+t+"px;\n height: "+e+"px;\n }\n\n ."+o+".vjs-fluid {\n padding-top: "+100*n+"%;\n }\n ")},a.prototype.loadTech_=function(t,e){this.tech_&&this.unloadTech_(),"Html5"!==t&&this.tag&&(l.default.getComponent("Html5").disposeMediaElement(this.tag),this.tag.player=null,this.tag=null),this.techName_=t,this.isReady_=!1;var n=j.default({nativeControlsForTouch:this.options_.nativeControlsForTouch,source:e,playerId:this.id(),techId:this.id()+"_"+t+"_api",textTracks:this.textTracks_,autoplay:this.options_.autoplay,preload:this.options_.preload,loop:this.options_.loop,muted:this.options_.muted,poster:this.poster(),language:this.language(),"vtt.js":this.options_["vtt.js"]},this.options_[t.toLowerCase()]),e=(this.tag&&(n.tag=this.tag),e&&(this.currentType_=e.type,e.src===this.cache_.src&&0{var t=o,e=n;if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);function o(t,e){if(!(this instanceof o))throw new TypeError("Cannot call a class as a function");n.call(this,t,e),this.update(),t.on("posterchange",a.bind(this,this.update))}return t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e),o.prototype.dispose=function(){this.player().off("posterchange",this.update),n.prototype.dispose.call(this)},o.prototype.createEl=function(){var t=l.createEl("div",{className:"vjs-poster",tabIndex:-1});return u.BACKGROUND_SIZE_SUPPORTED||(this.fallbackImg_=l.createEl("img"),t.appendChild(this.fallbackImg_)),t},o.prototype.update=function(){var t=this.player().poster();this.setSrc(t),t?this.show():this.hide()},o.prototype.setSrc=function(t){this.fallbackImg_?this.fallbackImg_.src=t:this.el_.style.backgroundImage=t?'url("'+t+'")':""},o.prototype.handleClick=function(){this.player_.paused()?this.player_.play():this.player_.pause()},o})(i.default);s.default.registerComponent("PosterImage",t),n.default=t,e.exports=n.default},{"./button.js":62,"./component.js":64,"./utils/browser.js":122,"./utils/dom.js":125,"./utils/fn.js":127}],108:[function(t,e,n){function o(t){return t&&t.__esModule?t:{default:t}}n.__esModule=!0;function s(t,e){u=e,setTimeout(i,t)}var r=(t=>{if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e})(t("./utils/events.js")),a=o(t("global/document")),t=o(t("global/window")),l=!1,u=void 0,i=function(){var t=a.default.getElementsByTagName("video"),e=a.default.getElementsByTagName("audio"),n=[];if(t&&0{if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e})(t("../utils/dom.js")),s=o(t("global/document")),a=o(t("object.assign")),t=(o=>{var t=n,e=o;if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);function n(t,e){if(!(this instanceof n))throw new TypeError("Cannot call a class as a function");o.call(this,t,e),this.bar=this.getChild(this.options_.barName),this.vertical(!!this.options_.vertical),this.on("mousedown",this.handleMouseDown),this.on("touchstart",this.handleMouseDown),this.on("focus",this.handleFocus),this.on("blur",this.handleBlur),this.on("click",this.handleClick),this.on(t,"controlsvisible",this.update),this.on(t,this.playerEvent,this.update)}return t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e),n.prototype.createEl=function(t){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],n=arguments.length<=2||void 0===arguments[2]?{}:arguments[2];return e.className=e.className+" vjs-slider",e=a.default({tabIndex:0},e),n=a.default({role:"slider","aria-valuenow":0,"aria-valuemin":0,"aria-valuemax":100,tabIndex:0},n),o.prototype.createEl.call(this,t,e,n)},n.prototype.handleMouseDown=function(t){t.preventDefault(),i.blockTextSelection(),this.addClass("vjs-sliding"),this.trigger("slideractive"),this.on(s.default,"mousemove",this.handleMouseMove),this.on(s.default,"mouseup",this.handleMouseUp),this.on(s.default,"touchmove",this.handleMouseMove),this.on(s.default,"touchend",this.handleMouseUp),this.handleMouseMove(t)},n.prototype.handleMouseMove=function(){},n.prototype.handleMouseUp=function(){i.unblockTextSelection(),this.removeClass("vjs-sliding"),this.trigger("sliderinactive"),this.off(s.default,"mousemove",this.handleMouseMove),this.off(s.default,"mouseup",this.handleMouseUp),this.off(s.default,"touchmove",this.handleMouseMove),this.off(s.default,"touchend",this.handleMouseUp),this.update()},n.prototype.update=function(){var t,e;this.el_&&(e=this.getPercent(),t=this.bar)&&(e=(100*(e="number"!=typeof e||e!=e||e<0||e===1/0?0:e)).toFixed(2)+"%",this.vertical()?t.el().style.height=e:t.el().style.width=e)},n.prototype.calculateDistance=function(t){t=i.getPointerPosition(this.el_,t);return this.vertical()?t.y:t.x},n.prototype.handleFocus=function(){this.on(s.default,"keydown",this.handleKeyPress)},n.prototype.handleKeyPress=function(t){37===t.which||40===t.which?(t.preventDefault(),this.stepBack()):38!==t.which&&39!==t.which||(t.preventDefault(),this.stepForward())},n.prototype.handleBlur=function(){this.off(s.default,"keydown",this.handleKeyPress)},n.prototype.handleClick=function(t){t.stopImmediatePropagation(),t.preventDefault()},n.prototype.vertical=function(t){return void 0===t?this.vertical_||!1:(this.vertical_=!!t,this.vertical_?this.addClass("vjs-slider-vertical"):this.addClass("vjs-slider-horizontal"),this)},n})(r.default);r.default.registerComponent("Slider",t),n.default=t,e.exports=n.default},{"../component.js":64,"../utils/dom.js":125,"global/document":1,"object.assign":45}],110:[function(t,e,n){n.__esModule=!0,n.default=function(n){return n.streamingFormats={"rtmp/mp4":"MP4","rtmp/flv":"FLV"},n.streamFromParts=function(t,e){return t+"&"+e},n.streamToParts=function(t){var e,n,o={connection:"",stream:""};return t&&(n=void 0,-1!==(e=t.indexOf("&"))?n=e+1:0===(e=n=t.lastIndexOf("/")+1)&&(e=n=t.length),o.connection=t.substring(0,e),o.stream=t.substring(n,t.length)),o},n.isStreamingType=function(t){return t in n.streamingFormats},n.RTMP_RE=/^rtmp[set]?:\/\//i,n.isStreamingSrc=function(t){return n.RTMP_RE.test(t)},n.rtmpSourceHandler={},n.rtmpSourceHandler.canPlayType=function(t){return n.isStreamingType(t)?"maybe":""},n.rtmpSourceHandler.canHandleSource=function(t){var e=n.rtmpSourceHandler.canPlayType(t.type);return e||(n.isStreamingSrc(t.src)?"maybe":"")},n.rtmpSourceHandler.handleSource=function(t,e){t=n.streamToParts(t.src);e.setRtmpConnection(t.connection),e.setRtmpStream(t.stream)},n.registerSourceHandler(n.rtmpSourceHandler),n},e.exports=n.default},{}],111:[function(t,e,n){function o(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function r(t){return t&&t.__esModule?t:{default:t}}n.__esModule=!0;var i=r(t("./tech")),s=o(t("../utils/dom.js")),a=o(t("../utils/url.js")),l=t("../utils/time-ranges.js"),u=r(t("./flash-rtmp")),c=r(t("../component")),p=r(t("global/window")),h=r(t("object.assign")),d=p.default.navigator,f=(n=>{var t=r,e=n;if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);function r(t,e){if(!(this instanceof r))throw new TypeError("Cannot call a class as a function");n.call(this,t,e),t.source&&this.ready(function(){this.setSource(t.source)},!0),t.startTime&&this.ready(function(){this.load(),this.play(),this.currentTime(t.startTime)},!0),p.default.videojs=p.default.videojs||{},p.default.videojs.Flash=p.default.videojs.Flash||{},p.default.videojs.Flash.onReady=r.onReady,p.default.videojs.Flash.onEvent=r.onEvent,p.default.videojs.Flash.onError=r.onError,this.on("seeked",function(){this.lastSeekTarget_=void 0})}return t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e),r.prototype.createEl=function(){var t=this.options_,e=(t.swf||(t.swf="//vjs.zencdn.net/swf/5.0.0-rc1/video-js.swf"),t.techId),n=h.default({readyFunction:"videojs.Flash.onReady",eventProxyFunction:"videojs.Flash.onEvent",errorEventProxyFunction:"videojs.Flash.onError",autoplay:t.autoplay,preload:t.preload,loop:t.loop,muted:t.muted},t.flashVars),o=h.default({wmode:"opaque",bgcolor:"#000000"},t.params),e=h.default({id:e,name:e,class:"vjs-tech"},t.attributes);return this.el_=r.embed(t.swf,n,o,e),(this.el_.tech=this).el_},r.prototype.play=function(){this.ended()&&this.setCurrentTime(0),this.el_.vjs_play()},r.prototype.pause=function(){this.el_.vjs_pause()},r.prototype.src=function(t){return void 0===t?this.currentSrc():this.setSrc(t)},r.prototype.setSrc=function(t){var e;t=a.getAbsoluteURL(t),this.el_.vjs_src(t),this.autoplay()&&(e=this).setTimeout(function(){e.play()},0)},r.prototype.seeking=function(){return void 0!==this.lastSeekTarget_},r.prototype.setCurrentTime=function(t){var e=this.seekable();e.length&&(t=(t=t>e.start(0)?t:e.start(0)){var t=e.charAt(0).toUpperCase()+e.slice(1);m["set"+t]=function(t){return this.el_.vjs_setProperty(e,t)}})(y[b]);for(b=0;b'}),o=h.default({data:t,width:"100%",height:"100%"},o),Object.getOwnPropertyNames(o).forEach(function(t){s+=t+'="'+o[t]+'" '}),'"+i+""},u.default(f),c.default.registerComponent("Flash",f),n.default=f,e.exports=n.default},{"../component":64,"../utils/dom.js":125,"../utils/time-ranges.js":133,"../utils/url.js":135,"./flash-rtmp":110,"./tech":114,"global/window":2,"object.assign":45}],112:[function(t,e,n){function o(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function r(t){return t&&t.__esModule?t:{default:t}}n.__esModule=!0;var i=r(t("./tech.js")),s=r(t("../component")),u=o(t("../utils/dom.js")),a=o(t("../utils/url.js")),c=o(t("../utils/fn.js")),p=r(t("../utils/log.js")),h=o(t("../utils/browser.js")),d=r(t("global/document")),f=r(t("global/window")),m=r(t("object.assign")),y=r(t("../utils/merge-options.js")),l=(a=>{var t=l,e=a;if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);function l(t,e){if(!(this instanceof l))throw new TypeError("Cannot call a class as a function");a.call(this,t,e);e=t.source;if(e&&(this.el_.currentSrc!==e.src||t.tag&&3===t.tag.initNetworkState_)?this.setSource(e):this.handleLateInit_(this.el_),this.el_.hasChildNodes()){for(var n=this.el_.childNodes,o=n.length,r=[];o--;){var i=n[o];"track"===i.nodeName.toLowerCase()&&(this.featuresNativeTextTracks?this.remoteTextTracks().addTrack_(i.track):r.push(i))}for(var s=0;s{function t(){n=!0}function e(){n||this.trigger("loadstart")}var n=!1;return o.on("loadstart",t),o.on("loadedmetadata",e),o.ready(function(){this.off("loadstart",t),this.off("loadedmetadata",e),n||this.trigger("loadstart")}),{v:void 0}})();if("object"==typeof e)return e.v}var n=["loadstart"];n.push("loadedmetadata"),2<=t.readyState&&n.push("loadeddata"),3<=t.readyState&&n.push("canplay"),4<=t.readyState&&n.push("canplaythrough"),this.ready(function(){n.forEach(function(t){this.trigger(t)},this)})}},l.prototype.proxyNativeTextTracks_=function(){var t=this.el().textTracks;t&&t.addEventListener&&(t.addEventListener("change",this.handleTextTrackChange_),t.addEventListener("addtrack",this.handleTextTrackAdd_),t.addEventListener("removetrack",this.handleTextTrackRemove_))},l.prototype.handleTextTrackChange=function(t){var e=this.textTracks();this.textTracks().trigger({type:"change",target:e,currentTarget:e,srcElement:e})},l.prototype.handleTextTrackAdd=function(t){this.textTracks().addTrack_(t.track)},l.prototype.handleTextTrackRemove=function(t){this.textTracks().removeTrack_(t.track)},l.prototype.play=function(){this.el_.play()},l.prototype.pause=function(){this.el_.pause()},l.prototype.paused=function(){return this.el_.paused},l.prototype.currentTime=function(){return this.el_.currentTime},l.prototype.setCurrentTime=function(t){try{this.el_.currentTime=t}catch(t){p.default(t,"Video is not ready. (Video.js)")}},l.prototype.duration=function(){return this.el_.duration||0},l.prototype.buffered=function(){return this.el_.buffered},l.prototype.volume=function(){return this.el_.volume},l.prototype.setVolume=function(t){this.el_.volume=t},l.prototype.muted=function(){return this.el_.muted},l.prototype.setMuted=function(t){this.el_.muted=t},l.prototype.width=function(){return this.el_.offsetWidth},l.prototype.height=function(){return this.el_.offsetHeight},l.prototype.supportsFullScreen=function(){if("function"==typeof this.el_.webkitEnterFullScreen){var t=f.default.navigator.userAgent;if(/Android/.test(t)||!/Chrome|Mac OS X 10.5/.test(t))return!0}return!1},l.prototype.enterFullScreen=function(){var t=this.el_;"webkitDisplayingFullscreen"in t&&this.one("webkitbeginfullscreen",function(){this.one("webkitendfullscreen",function(){this.trigger("fullscreenchange",{isFullscreen:!1})}),this.trigger("fullscreenchange",{isFullscreen:!0})}),t.paused&&t.networkState<=t.HAVE_METADATA?(this.el_.play(),this.setTimeout(function(){t.pause(),t.webkitEnterFullScreen()},0)):t.webkitEnterFullScreen()},l.prototype.exitFullScreen=function(){this.el_.webkitExitFullScreen()},l.prototype.src=function(t){if(void 0===t)return this.el_.src;this.setSrc(t)},l.prototype.setSrc=function(t){this.el_.src=t},l.prototype.load=function(){this.el_.load()},l.prototype.currentSrc=function(){return this.el_.currentSrc},l.prototype.poster=function(){return this.el_.poster},l.prototype.setPoster=function(t){this.el_.poster=t},l.prototype.preload=function(){return this.el_.preload},l.prototype.setPreload=function(t){this.el_.preload=t},l.prototype.autoplay=function(){return this.el_.autoplay},l.prototype.setAutoplay=function(t){this.el_.autoplay=t},l.prototype.controls=function(){return this.el_.controls},l.prototype.setControls=function(t){this.el_.controls=!!t},l.prototype.loop=function(){return this.el_.loop},l.prototype.setLoop=function(t){this.el_.loop=t},l.prototype.error=function(){return this.el_.error},l.prototype.seeking=function(){return this.el_.seeking},l.prototype.seekable=function(){return this.el_.seekable},l.prototype.ended=function(){return this.el_.ended},l.prototype.defaultMuted=function(){return this.el_.defaultMuted},l.prototype.playbackRate=function(){return this.el_.playbackRate},l.prototype.played=function(){return this.el_.played},l.prototype.setPlaybackRate=function(t){this.el_.playbackRate=t},l.prototype.networkState=function(){return this.el_.networkState},l.prototype.readyState=function(){return this.el_.readyState},l.prototype.videoWidth=function(){return this.el_.videoWidth},l.prototype.videoHeight=function(){return this.el_.videoHeight},l.prototype.textTracks=function(){return a.prototype.textTracks.call(this)},l.prototype.addTextTrack=function(t,e,n){return this.featuresNativeTextTracks?this.el_.addTextTrack(t,e,n):a.prototype.addTextTrack.call(this,t,e,n)},l.prototype.addRemoteTextTrack=function(){var t,e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];return this.featuresNativeTextTracks?(t=d.default.createElement("track"),e.kind&&(t.kind=e.kind),e.label&&(t.label=e.label),(e.language||e.srclang)&&(t.srclang=e.language||e.srclang),e.default&&(t.default=e.default),e.id&&(t.id=e.id),e.src&&(t.src=e.src),this.el().appendChild(t),this.remoteTextTracks().addTrack_(t.track),t):a.prototype.addRemoteTextTrack.call(this,e)},l.prototype.removeRemoteTextTrack=function(t){if(!this.featuresNativeTextTracks)return a.prototype.removeRemoteTextTrack.call(this,t);var e,n;for(this.remoteTextTracks().removeTrack_(t),n=(e=this.el().querySelectorAll("track")).length;n--;)t!==e[n]&&t!==e[n].track||this.el().removeChild(e[n])},l})(i.default),t=(l.TEST_VID=d.default.createElement("video"),d.default.createElement("track")),v=(t.kind="captions",t.srclang="en",t.label="English",l.TEST_VID.appendChild(t),l.isSupported=function(){try{l.TEST_VID.volume=.5}catch(t){return!1}return!!l.TEST_VID.canPlayType},i.default.withSourceHandlers(l),l.nativeSourceHandler={},l.nativeSourceHandler.canPlayType=function(t){try{return l.TEST_VID.canPlayType(t)}catch(t){return""}},l.nativeSourceHandler.canHandleSource=function(t){return t.type?l.nativeSourceHandler.canPlayType(t.type):t.src?(t=a.getFileExtension(t.src),l.nativeSourceHandler.canPlayType("video/"+t)):""},l.nativeSourceHandler.handleSource=function(t,e){e.setSrc(t.src)},l.nativeSourceHandler.dispose=function(){},l.registerSourceHandler(l.nativeSourceHandler),l.canControlVolume=function(){var t=l.TEST_VID.volume;return l.TEST_VID.volume=t/2+.1,t!==l.TEST_VID.volume},l.canControlPlaybackRate=function(){var t=l.TEST_VID.playbackRate;return l.TEST_VID.playbackRate=t/2+.1,t!==l.TEST_VID.playbackRate},l.supportsNativeTextTracks=function(){var t=!!l.TEST_VID.textTracks;return t=!(t=(t=t&&0{var t=l,e=a;if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);function l(t,e,n){if(!(this instanceof l))throw new TypeError("Cannot call a class as a function");if(a.call(this,t,e,n),e.playerOptions.sources&&0!==e.playerOptions.sources.length)t.src(e.playerOptions.sources);else for(var o=0,r=e.playerOptions.techOrder;o{if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e})(t("../utils/fn.js")),i=o(t("../utils/log.js")),u=t("../utils/time-ranges.js"),c=t("../utils/buffer.js"),p=o(t("../media-error.js")),h=o(t("global/window")),d=o(t("global/document")),t=(r=>{var t=i,e=r;if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);function i(){var t=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],e=arguments.length<=1||void 0===arguments[1]?function(){}:arguments[1],n=this,o=i;if(!(n instanceof o))throw new TypeError("Cannot call a class as a function");t.reportTouchActivity=!1,r.call(this,null,t,e),this.hasStarted_=!1,this.on("playing",function(){this.hasStarted_=!0}),this.on("loadstart",function(){this.hasStarted_=!1}),this.textTracks_=t.textTracks,this.featuresProgressEvents||this.manualProgressOn(),this.featuresTimeupdateEvents||this.manualTimeUpdatesOn(),!1!==t.nativeCaptions&&!1!==t.nativeTextTracks||(this.featuresNativeTextTracks=!1),this.featuresNativeTextTracks||this.on("ready",this.emulateTextTracks),this.initTextTrackListeners(),this.emitTapEvents()}return t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e),i.prototype.manualProgressOn=function(){this.on("durationchange",this.onDurationChange),this.manualProgress=!0,this.one("ready",this.trackProgress)},i.prototype.manualProgressOff=function(){this.manualProgress=!1,this.stopTrackingProgress(),this.off("durationchange",this.onDurationChange)},i.prototype.trackProgress=function(){this.stopTrackingProgress(),this.progressInterval=this.setInterval(l.bind(this,function(){var t=this.bufferedPercent();this.bufferedPercent_!==t&&this.trigger("progress"),1===(this.bufferedPercent_=t)&&this.stopTrackingProgress()}),500)},i.prototype.onDurationChange=function(){this.duration_=this.duration()},i.prototype.buffered=function(){return u.createTimeRange(0,0)},i.prototype.bufferedPercent=function(){return c.bufferedPercent(this.buffered(),this.duration_)},i.prototype.stopTrackingProgress=function(){this.clearInterval(this.progressInterval)},i.prototype.manualTimeUpdatesOn=function(){this.manualTimeUpdates=!0,this.on("play",this.trackCurrentTime),this.on("pause",this.stopTrackingCurrentTime)},i.prototype.manualTimeUpdatesOff=function(){this.manualTimeUpdates=!1,this.stopTrackingCurrentTime(),this.off("play",this.trackCurrentTime),this.off("pause",this.stopTrackingCurrentTime)},i.prototype.trackCurrentTime=function(){this.currentTimeInterval&&this.stopTrackingCurrentTime(),this.currentTimeInterval=this.setInterval(function(){this.trigger({type:"timeupdate",target:this,manuallyTriggered:!0})},250)},i.prototype.stopTrackingCurrentTime=function(){this.clearInterval(this.currentTimeInterval),this.trigger({type:"timeupdate",target:this,manuallyTriggered:!0})},i.prototype.dispose=function(){var t=this.textTracks();if(t)for(var e=t.length;e--;)this.removeRemoteTextTrack(t[e]);this.manualProgress&&this.manualProgressOff(),this.manualTimeUpdates&&this.manualTimeUpdatesOff(),r.prototype.dispose.call(this)},i.prototype.error=function(t){return void 0!==t&&(t instanceof p.default?this.error_=t:this.error_=new p.default(t),this.trigger("error")),this.error_},i.prototype.played=function(){return this.hasStarted_?u.createTimeRange(0,0):u.createTimeRange()},i.prototype.setCurrentTime=function(){this.manualTimeUpdates&&this.trigger({type:"timeupdate",target:this,manuallyTriggered:!0})},i.prototype.initTextTrackListeners=function(){var t=l.bind(this,function(){this.trigger("texttrackchange")}),e=this.textTracks();e&&(e.addEventListener("removetrack",t),e.addEventListener("addtrack",t),this.on("dispose",l.bind(this,function(){e.removeEventListener("removetrack",t),e.removeEventListener("addtrack",t)})))},i.prototype.emulateTextTracks=function(){var t,e,r=this.textTracks();r&&(h.default.WebVTT||null==this.el().parentNode||((t=d.default.createElement("script")).src=this.options_["vtt.js"]||"https://cdn.rawgit.com/gkatsev/vtt.js/vjs-v0.12.1/dist/vtt.min.js",this.el().parentNode.appendChild(t),h.default.WebVTT=!0),e=l.bind(this,function(){function t(){return e.trigger("texttrackchange")}var e=this;t();for(var n=0;n{if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e})(t("../utils/browser.js")),t=t("global/document"),i=(t=t)&&t.__esModule?t:{default:t};o.prototype.setCues_=function(t){function e(t){""+t in this||Object.defineProperty(this,""+t,{get:function(){return this.cues_[t]}})}var n=this.length||0,o=0,r=t.length;this.cues_=t,this.length_=t.length;if(n{if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e})(t("../utils/fn.js"))),a=(o(t("global/document")),o(t("global/window"))),l={monospace:"monospace",sansSerif:"sans-serif",serif:"serif",monospaceSansSerif:'"Andale Mono", "Lucida Console", monospace',monospaceSerif:'"Courier New", monospace',proportionalSansSerif:"sans-serif",proportionalSerif:"serif",casual:'"Comic Sans MS", Impact, fantasy',script:'"Monotype Corsiva", cursive',smallcaps:'"Andale Mono", "Lucida Console", monospace, sans-serif'},t=(n=>{var t=r,e=n;if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);function r(o,t,e){if(!(this instanceof r))throw new TypeError("Cannot call a class as a function");n.call(this,o,t,e),o.on("loadstart",i.bind(this,this.toggleDisplay)),o.on("texttrackchange",i.bind(this,this.updateDisplay)),o.ready(i.bind(this,function(){if(o.tech_&&o.tech_.featuresNativeTextTracks)this.hide();else{o.on("fullscreenchange",i.bind(this,this.updateDisplay));for(var t=this.options_.playerOptions.tracks||[],e=0;e{var t=o,e=n;if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);function o(t,e){if(!(this instanceof o))throw new TypeError("Cannot call a class as a function");n.call(this,t,e),this.hide(),void 0===e.persistTextTrackSettings&&(this.options_.persistTextTrackSettings=this.options_.playerOptions.persistTextTrackSettings),s.on(this.el().querySelector(".vjs-done-button"),"click",a.bind(this,function(){this.saveSettings(),this.hide()})),s.on(this.el().querySelector(".vjs-default-button"),"click",a.bind(this,function(){this.el().querySelector(".vjs-fg-color > select").selectedIndex=0,this.el().querySelector(".vjs-bg-color > select").selectedIndex=0,this.el().querySelector(".window-color > select").selectedIndex=0,this.el().querySelector(".vjs-text-opacity > select").selectedIndex=0,this.el().querySelector(".vjs-bg-opacity > select").selectedIndex=0,this.el().querySelector(".vjs-window-opacity > select").selectedIndex=0,this.el().querySelector(".vjs-edge-style select").selectedIndex=0,this.el().querySelector(".vjs-font-family select").selectedIndex=0,this.el().querySelector(".vjs-font-percent select").selectedIndex=2,this.updateDisplay()})),s.on(this.el().querySelector(".vjs-fg-color > select"),"change",a.bind(this,this.updateDisplay)),s.on(this.el().querySelector(".vjs-bg-color > select"),"change",a.bind(this,this.updateDisplay)),s.on(this.el().querySelector(".window-color > select"),"change",a.bind(this,this.updateDisplay)),s.on(this.el().querySelector(".vjs-text-opacity > select"),"change",a.bind(this,this.updateDisplay)),s.on(this.el().querySelector(".vjs-bg-opacity > select"),"change",a.bind(this,this.updateDisplay)),s.on(this.el().querySelector(".vjs-window-opacity > select"),"change",a.bind(this,this.updateDisplay)),s.on(this.el().querySelector(".vjs-font-percent select"),"change",a.bind(this,this.updateDisplay)),s.on(this.el().querySelector(".vjs-edge-style select"),"change",a.bind(this,this.updateDisplay)),s.on(this.el().querySelector(".vjs-font-family select"),"change",a.bind(this,this.updateDisplay)),this.options_.persistTextTrackSettings&&this.restoreSettings()}return t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e),o.prototype.createEl=function(){return n.prototype.createEl.call(this,"div",{className:"vjs-caption-settings vjs-modal-overlay",innerHTML:'
\n
\n
\n \n \n \n \n \n
\x3c!-- vjs-fg-color --\x3e\n
\n \n \n \n \n \n
\x3c!-- vjs-bg-color --\x3e\n
\n \n \n \n \n \n
\x3c!-- vjs-window-color --\x3e\n
\x3c!-- vjs-tracksettings --\x3e\n
\n
\n \n \n
\x3c!-- vjs-font-percent --\x3e\n
\n \n \n
\x3c!-- vjs-edge-style --\x3e\n
\n \n \n
\x3c!-- vjs-font-family --\x3e\n
\n
\n
\n \n \n
'})},o.prototype.getValues=function(){var t,e=this.el(),n=p(e.querySelector(".vjs-edge-style select")),o=p(e.querySelector(".vjs-font-family select")),r=p(e.querySelector(".vjs-fg-color > select")),i=p(e.querySelector(".vjs-text-opacity > select")),s=p(e.querySelector(".vjs-bg-color > select")),a=p(e.querySelector(".vjs-bg-opacity > select")),l=p(e.querySelector(".window-color > select")),u={backgroundOpacity:a,textOpacity:i,windowOpacity:p(e.querySelector(".vjs-window-opacity > select")),edgeStyle:n,fontFamily:o,color:r,backgroundColor:s,windowColor:l,fontPercent:c.default.parseFloat(p(e.querySelector(".vjs-font-percent > select")))};for(t in u)(""===u[t]||"none"===u[t]||"fontPercent"===t&&1===u[t])&&delete u[t];return u},o.prototype.setValues=function(t){var e=this.el();h(e.querySelector(".vjs-edge-style select"),t.edgeStyle),h(e.querySelector(".vjs-font-family select"),t.fontFamily),h(e.querySelector(".vjs-fg-color > select"),t.color),h(e.querySelector(".vjs-text-opacity > select"),t.textOpacity),h(e.querySelector(".vjs-bg-color > select"),t.backgroundColor),h(e.querySelector(".vjs-bg-opacity > select"),t.backgroundOpacity),h(e.querySelector(".window-color > select"),t.windowColor),h(e.querySelector(".vjs-window-opacity > select"),t.windowOpacity);t=(t=t.fontPercent)&&t.toFixed(2);h(e.querySelector(".vjs-font-percent > select"),t)},o.prototype.restoreSettings=function(){var t=u.default(c.default.localStorage.getItem("vjs-text-track-settings")),e=t[0],t=t[1];e&&l.default.error(e),t&&this.setValues(t)},o.prototype.saveSettings=function(){if(this.options_.persistTextTrackSettings){var t=this.getValues();try{0=t||r.startTime===r.endTime&&r.startTime<=t&&r.startTime+.5>=t)&&e.push(r)}if(c=!1,e.length!==this.activeCues_.length)c=!0;else for(n=0;n>>0;if(0!=o){e=+e||0;if(!(o<=(e=Math.abs(e)===1/0?0:e)))for(var r=Math.max(0<=e?e:o-Math.abs(e),0);r{var t=i.match(/OS (\d+)_/i);if(t&&t[1])return t[1]})()),u=(n.IOS_VERSION=l,/Android/i.test(i)),c=(n.IS_ANDROID=u,(a=i.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i))?(l=a[1]&&parseFloat(a[1]),c=a[2]&&parseFloat(a[2]),l&&c?parseFloat(a[1]+"."+a[2]):l||null):null),a=(n.ANDROID_VERSION=c,u&&/webkit/i.test(i)&&c<2.3),l=(n.IS_OLD_ANDROID=a,u&&c<5&&s<537),a=(n.IS_NATIVE_ANDROID=l,/Firefox/i.test(i)),u=(n.IS_FIREFOX=a,/Chrome/i.test(i)),s=(n.IS_CHROME=u,/MSIE\s8\.0/.test(i)),l=(n.IS_IE8=s,!!("ontouchstart"in t.default||t.default.DocumentTouch&&r.default instanceof t.default.DocumentTouch)),a=(n.TOUCH_ENABLED=l,"backgroundSize"in r.default.createElement("video").style);n.BACKGROUND_SIZE_SUPPORTED=a},{"global/document":1,"global/window":2}],123:[function(t,e,n){n.__esModule=!0,n.bufferedPercent=function(t,e){var n,o,r=0;if(!e)return 0;t&&t.length||(t=s.createTimeRange(0,0));for(var i=0;i{if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e})(t("./guid.js")),l=o(t("./log.js")),u=o(t("tsml"));var c={},p="vdata"+(new Date).getTime();function h(t,e){return-1!==(" "+t.className+" ").indexOf(" "+e+" ")}function d(t){var e,n,o,r=void 0;return(r=t.getBoundingClientRect&&t.parentNode?t.getBoundingClientRect():r)?(t=i.default.documentElement,o=i.default.body,n=t.clientLeft||o.clientLeft||0,e=s.default.pageXOffset||o.scrollLeft,e=r.left+e-n,n=t.clientTop||o.clientTop||0,t=s.default.pageYOffset||o.scrollTop,o=r.top+t-n,{left:Math.round(e),top:Math.round(o)}):{left:0,top:0}}function f(t){return!!t&&"object"==typeof t&&1===t.nodeType}function m(t){return!!t&&"object"==typeof t&&3===t.nodeType}function y(t){for(;t.firstChild;)t.removeChild(t.firstChild);return t}function v(t){return"function"==typeof t&&(t=t()),(Array.isArray(t)?t:[t]).map(function(t){return f(t="function"==typeof t?t():t)||m(t)?t:"string"==typeof t&&/\S/.test(t)?i.default.createTextNode(t):void 0}).filter(function(t){return t})}function g(e,t){return v(t).forEach(function(t){return e.appendChild(t)}),e}},{"./guid.js":129,"./log.js":130,"global/document":1,"global/window":2,tsml:54}],126:[function(t,e,n){function o(t){return t&&t.__esModule?t:{default:t}}function r(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}n.__esModule=!0,n.on=c,n.off=p,n.trigger=s,n.one=function t(e,n,o){if(Array.isArray(n))return f(t,e,n,o);var r=function t(){p(e,n,t),o.apply(this,arguments)};r.guid=o.guid=o.guid||i.newGUID();c(e,n,r)},n.fixEvent=h;var l=r(t("./dom.js")),i=r(t("./guid.js")),a=o(t("global/window")),u=o(t("global/document"));function c(s,t,e){if(Array.isArray(t))return f(c,s,t,e);var a=l.getElData(s);a.handlers||(a.handlers={}),a.handlers[t]||(a.handlers[t]=[]),e.guid||(e.guid=i.newGUID()),a.handlers[t].push(e),a.dispatcher||(a.disabled=!1,a.dispatcher=function(t,e){if(!a.disabled){t=h(t);var n=a.handlers[t.type];if(n)for(var o=n.slice(0),r=0,i=o.length;r',n=r.firstChild,r.setAttribute("style","display:none; position:absolute;"),a.default.body.appendChild(r)),{}),s=0;sx',t=e.firstChild.href),t},n.getFileExtension=function(t){if("string"==typeof t){t=/^(\/?)([\s\S]*?)((?:\.{1,2}|[^\/]+?)(\.([^\.\/\?]+)))(?:[\/]*|[\?].*)$/i.exec(t);if(t)return t.pop().toLowerCase()}return""};n.isCrossOrigin=function(t){var e=i.default.location,t=r(t);return(":"===t.protocol?e:t).protocol+t.host!==e.protocol+e.host}},{"global/document":1,"global/window":2}],136:[function(t,e,n){function o(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function r(t){return t&&t.__esModule?t:{default:t}}n.__esModule=!0;function i(t,e,n){var o;if("string"==typeof t){if(0===t.indexOf("#")&&(t=t.slice(1)),i.getPlayers()[t])return e&&b.default.warn('Player "'+t+'" is already initialised. Options will not be applied.'),n&&i.getPlayers()[t].ready(n),i.getPlayers()[t];o=_.getEl(t)}else o=t;if(o&&o.nodeName)return o.player||new h.default(o,e,n);throw new TypeError("The element or ID supplied is not valid. (videojs)")}var s=r(t("global/document")),a=o(t("./setup")),l=o(t("./utils/stylesheet.js")),u=r(t("./component")),c=r(t("./event-target")),p=o(t("./utils/events.js")),h=r(t("./player")),d=r(t("./plugins.js")),f=r(t("../../src/js/utils/merge-options.js")),m=o(t("./utils/fn.js")),y=r(t("./tracks/text-track.js")),v=(r(t("object.assign")),t("./utils/time-ranges.js")),g=r(t("./utils/format-time.js")),b=r(t("./utils/log.js")),_=o(t("./utils/dom.js")),j=o(t("./utils/browser.js")),w=o(t("./utils/url.js")),T=r(t("./extend.js")),x=r(t("lodash-compat/object/merge")),E=r(t("./utils/create-deprecation-proxy.js")),S=r(t("xhr")),t=(r(t("./tech/html5.js")),r(t("./tech/flash.js")),"undefined"==typeof HTMLVideoElement&&(s.default.createElement("video"),s.default.createElement("audio"),s.default.createElement("track")),s.default.querySelector(".vjs-styles-defaults"));t||(t=l.createStyleElement("vjs-styles-defaults"),(s=s.default.querySelector("head")).insertBefore(t,s.firstChild),l.setTextContent(t,"\n .video-js {\n width: 300px;\n height: 150px;\n }\n\n .vjs-fluid {\n padding-top: 56.25%\n }\n ")),a.autoSetupTimeout(1,i),i.VERSION="5.1.0",i.options=h.default.prototype.options_,i.getPlayers=function(){return h.default.players},i.players=E.default(h.default.players,{get:"Access to videojs.players is deprecated; use videojs.getPlayers instead",set:"Modification of videojs.players is deprecated"}),i.getComponent=u.default.getComponent,i.registerComponent=u.default.registerComponent,i.browser=j,i.TOUCH_ENABLED=j.TOUCH_ENABLED,i.extend=T.default,i.mergeOptions=f.default,i.bind=m.bind,i.plugin=d.default,i.addLanguage=function(t,e){var n;return t=(""+t).toLowerCase(),x.default(i.options.languages,((n={})[t]=e,n))[t]},i.log=b.default,i.createTimeRange=i.createTimeRanges=v.createTimeRanges,i.formatTime=g.default,i.parseUrl=w.parseUrl,i.isCrossOrigin=w.isCrossOrigin,i.EventTarget=c.default,i.on=p.on,i.one=p.one,i.off=p.off,i.trigger=p.trigger,i.xhr=S.default,i.TextTrack=y.default,"object"==typeof n&&"object"==typeof e&&(e.exports=i),n.default=i,e.exports=n.default},{"../../src/js/utils/merge-options.js":131,"./component":64,"./event-target":96,"./extend.js":97,"./player":105,"./plugins.js":106,"./setup":108,"./tech/flash.js":111,"./tech/html5.js":112,"./tracks/text-track.js":121,"./utils/browser.js":122,"./utils/create-deprecation-proxy.js":124,"./utils/dom.js":125,"./utils/events.js":126,"./utils/fn.js":127,"./utils/format-time.js":128,"./utils/log.js":130,"./utils/stylesheet.js":132,"./utils/time-ranges.js":133,"./utils/url.js":135,"global/document":1,"lodash-compat/object/merge":40,"object.assign":45,xhr:55}]},{},[136])(136)}),t=(p=this).vttjs={},e=t.VTTCue,n=t.VTTRegion,o=p.VTTCue,r=p.VTTRegion,t.shim=function(){t.VTTCue=e,t.VTTRegion=n},t.restore=function(){t.VTTCue=o,t.VTTRegion=r},s=(p=this).vttjs||{},_={"":!0,lr:!0,rl:!0},i={start:!0,middle:!0,end:!0,left:!0,right:!0},a.prototype.getCueAsHTML=function(){return WebVTT.convertCueToDOMTree(window,this.text)},p.VTTCue=p.VTTCue||a,s.VTTCue=a,s=(p=this).vttjs||{},l={"":!0,up:!0},p.VTTRegion=p.VTTRegion||c,s.VTTRegion=c;var p=this,h=(this.vttjs,Object.create||function(t){if(1!==arguments.length)throw new Error("Object.create shim only accepts one parameter.");return d.prototype=t,new d});function d(){}function f(t,e){this.name="ParsingError",this.code=t.code,this.message=e||t.message}function m(t){function e(t,e,n,o){return 3600*(0|t)+60*(0|e)+(0|n)+(0|o)/1e3}t=t.match(/^(\d+):(\d{2})(:\d{2})?\.(\d{3})/);return t?t[3]?e(t[1],t[2],t[3].replace(":",""),t[4]):59","‎":"‎","‏":"‏"," ":" "},b={c:"span",i:"i",b:"b",u:"u",ruby:"ruby",rt:"rt",v:"span",lang:"span"},T={v:"title",lang:"lang"},x={rt:"ruby"};function E(t,e){function n(t){return g[t]}for(var o,r,i,s,a,l,u,c=t.document.createElement("div"),p=c,h=[];null!==(u=void 0,u=e?(u=(u=e.match(/^([^<]*)(<[^>]+>?)?/))[1]||u[2],e=e.substr(u.length),u):null);)"<"===u[0]?"/"===u[1]?h.length&&h[h.length-1]===u.substr(2).replace(">","")&&(h.pop(),p=p.parentNode):(i=m(u.substr(1,u.length-2)))?(o=t.document.createProcessingInstruction("timestamp",i),p.appendChild(o)):(r=u.match(/^<([^.\s/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/))&&(i=r[1],s=r[3],l=a=void 0,l=b[i],o=l?((a=t.document.createElement(l)).localName=l,(l=T[i])&&s&&(a[l]=s.trim()),a):null)&&(i=p,x[(l=o).localName]&&x[l.localName]!==i.localName||(r[2]&&(o.className=r[2].substr(1).replace("."," ")),h.push(r[1]),p.appendChild(o),p=o)):p.appendChild(t.document.createTextNode((t=>{for(;r=t.match(/&(amp|lt|gt|lrm|rlm|nbsp);/);)t=t.replace(r[0],n);return t})(u)));return c}var S=[1470,1472,1475,1478,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1520,1521,1522,1523,1524,1544,1547,1549,1563,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1645,1646,1647,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1765,1766,1774,1775,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1807,1808,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1969,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2e3,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2036,2037,2042,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2074,2084,2088,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2142,2208,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,8207,64285,64287,64288,64289,64290,64291,64292,64293,64294,64295,64296,64298,64299,64300,64301,64302,64303,64304,64305,64306,64307,64308,64309,64310,64312,64313,64314,64315,64316,64318,64320,64321,64323,64324,64326,64327,64328,64329,64330,64331,64332,64333,64334,64335,64336,64337,64338,64339,64340,64341,64342,64343,64344,64345,64346,64347,64348,64349,64350,64351,64352,64353,64354,64355,64356,64357,64358,64359,64360,64361,64362,64363,64364,64365,64366,64367,64368,64369,64370,64371,64372,64373,64374,64375,64376,64377,64378,64379,64380,64381,64382,64383,64384,64385,64386,64387,64388,64389,64390,64391,64392,64393,64394,64395,64396,64397,64398,64399,64400,64401,64402,64403,64404,64405,64406,64407,64408,64409,64410,64411,64412,64413,64414,64415,64416,64417,64418,64419,64420,64421,64422,64423,64424,64425,64426,64427,64428,64429,64430,64431,64432,64433,64434,64435,64436,64437,64438,64439,64440,64441,64442,64443,64444,64445,64446,64447,64448,64449,64467,64468,64469,64470,64471,64472,64473,64474,64475,64476,64477,64478,64479,64480,64481,64482,64483,64484,64485,64486,64487,64488,64489,64490,64491,64492,64493,64494,64495,64496,64497,64498,64499,64500,64501,64502,64503,64504,64505,64506,64507,64508,64509,64510,64511,64512,64513,64514,64515,64516,64517,64518,64519,64520,64521,64522,64523,64524,64525,64526,64527,64528,64529,64530,64531,64532,64533,64534,64535,64536,64537,64538,64539,64540,64541,64542,64543,64544,64545,64546,64547,64548,64549,64550,64551,64552,64553,64554,64555,64556,64557,64558,64559,64560,64561,64562,64563,64564,64565,64566,64567,64568,64569,64570,64571,64572,64573,64574,64575,64576,64577,64578,64579,64580,64581,64582,64583,64584,64585,64586,64587,64588,64589,64590,64591,64592,64593,64594,64595,64596,64597,64598,64599,64600,64601,64602,64603,64604,64605,64606,64607,64608,64609,64610,64611,64612,64613,64614,64615,64616,64617,64618,64619,64620,64621,64622,64623,64624,64625,64626,64627,64628,64629,64630,64631,64632,64633,64634,64635,64636,64637,64638,64639,64640,64641,64642,64643,64644,64645,64646,64647,64648,64649,64650,64651,64652,64653,64654,64655,64656,64657,64658,64659,64660,64661,64662,64663,64664,64665,64666,64667,64668,64669,64670,64671,64672,64673,64674,64675,64676,64677,64678,64679,64680,64681,64682,64683,64684,64685,64686,64687,64688,64689,64690,64691,64692,64693,64694,64695,64696,64697,64698,64699,64700,64701,64702,64703,64704,64705,64706,64707,64708,64709,64710,64711,64712,64713,64714,64715,64716,64717,64718,64719,64720,64721,64722,64723,64724,64725,64726,64727,64728,64729,64730,64731,64732,64733,64734,64735,64736,64737,64738,64739,64740,64741,64742,64743,64744,64745,64746,64747,64748,64749,64750,64751,64752,64753,64754,64755,64756,64757,64758,64759,64760,64761,64762,64763,64764,64765,64766,64767,64768,64769,64770,64771,64772,64773,64774,64775,64776,64777,64778,64779,64780,64781,64782,64783,64784,64785,64786,64787,64788,64789,64790,64791,64792,64793,64794,64795,64796,64797,64798,64799,64800,64801,64802,64803,64804,64805,64806,64807,64808,64809,64810,64811,64812,64813,64814,64815,64816,64817,64818,64819,64820,64821,64822,64823,64824,64825,64826,64827,64828,64829,64848,64849,64850,64851,64852,64853,64854,64855,64856,64857,64858,64859,64860,64861,64862,64863,64864,64865,64866,64867,64868,64869,64870,64871,64872,64873,64874,64875,64876,64877,64878,64879,64880,64881,64882,64883,64884,64885,64886,64887,64888,64889,64890,64891,64892,64893,64894,64895,64896,64897,64898,64899,64900,64901,64902,64903,64904,64905,64906,64907,64908,64909,64910,64911,64914,64915,64916,64917,64918,64919,64920,64921,64922,64923,64924,64925,64926,64927,64928,64929,64930,64931,64932,64933,64934,64935,64936,64937,64938,64939,64940,64941,64942,64943,64944,64945,64946,64947,64948,64949,64950,64951,64952,64953,64954,64955,64956,64957,64958,64959,64960,64961,64962,64963,64964,64965,64966,64967,65008,65009,65010,65011,65012,65013,65014,65015,65016,65017,65018,65019,65020,65136,65137,65138,65139,65140,65142,65143,65144,65145,65146,65147,65148,65149,65150,65151,65152,65153,65154,65155,65156,65157,65158,65159,65160,65161,65162,65163,65164,65165,65166,65167,65168,65169,65170,65171,65172,65173,65174,65175,65176,65177,65178,65179,65180,65181,65182,65183,65184,65185,65186,65187,65188,65189,65190,65191,65192,65193,65194,65195,65196,65197,65198,65199,65200,65201,65202,65203,65204,65205,65206,65207,65208,65209,65210,65211,65212,65213,65214,65215,65216,65217,65218,65219,65220,65221,65222,65223,65224,65225,65226,65227,65228,65229,65230,65231,65232,65233,65234,65235,65236,65237,65238,65239,65240,65241,65242,65243,65244,65245,65246,65247,65248,65249,65250,65251,65252,65253,65254,65255,65256,65257,65258,65259,65260,65261,65262,65263,65264,65265,65266,65267,65268,65269,65270,65271,65272,65273,65274,65275,65276,67584,67585,67586,67587,67588,67589,67592,67594,67595,67596,67597,67598,67599,67600,67601,67602,67603,67604,67605,67606,67607,67608,67609,67610,67611,67612,67613,67614,67615,67616,67617,67618,67619,67620,67621,67622,67623,67624,67625,67626,67627,67628,67629,67630,67631,67632,67633,67634,67635,67636,67637,67639,67640,67644,67647,67648,67649,67650,67651,67652,67653,67654,67655,67656,67657,67658,67659,67660,67661,67662,67663,67664,67665,67666,67667,67668,67669,67671,67672,67673,67674,67675,67676,67677,67678,67679,67840,67841,67842,67843,67844,67845,67846,67847,67848,67849,67850,67851,67852,67853,67854,67855,67856,67857,67858,67859,67860,67861,67862,67863,67864,67865,67866,67867,67872,67873,67874,67875,67876,67877,67878,67879,67880,67881,67882,67883,67884,67885,67886,67887,67888,67889,67890,67891,67892,67893,67894,67895,67896,67897,67903,67968,67969,67970,67971,67972,67973,67974,67975,67976,67977,67978,67979,67980,67981,67982,67983,67984,67985,67986,67987,67988,67989,67990,67991,67992,67993,67994,67995,67996,67997,67998,67999,68e3,68001,68002,68003,68004,68005,68006,68007,68008,68009,68010,68011,68012,68013,68014,68015,68016,68017,68018,68019,68020,68021,68022,68023,68030,68031,68096,68112,68113,68114,68115,68117,68118,68119,68121,68122,68123,68124,68125,68126,68127,68128,68129,68130,68131,68132,68133,68134,68135,68136,68137,68138,68139,68140,68141,68142,68143,68144,68145,68146,68147,68160,68161,68162,68163,68164,68165,68166,68167,68176,68177,68178,68179,68180,68181,68182,68183,68184,68192,68193,68194,68195,68196,68197,68198,68199,68200,68201,68202,68203,68204,68205,68206,68207,68208,68209,68210,68211,68212,68213,68214,68215,68216,68217,68218,68219,68220,68221,68222,68223,68352,68353,68354,68355,68356,68357,68358,68359,68360,68361,68362,68363,68364,68365,68366,68367,68368,68369,68370,68371,68372,68373,68374,68375,68376,68377,68378,68379,68380,68381,68382,68383,68384,68385,68386,68387,68388,68389,68390,68391,68392,68393,68394,68395,68396,68397,68398,68399,68400,68401,68402,68403,68404,68405,68416,68417,68418,68419,68420,68421,68422,68423,68424,68425,68426,68427,68428,68429,68430,68431,68432,68433,68434,68435,68436,68437,68440,68441,68442,68443,68444,68445,68446,68447,68448,68449,68450,68451,68452,68453,68454,68455,68456,68457,68458,68459,68460,68461,68462,68463,68464,68465,68466,68472,68473,68474,68475,68476,68477,68478,68479,68608,68609,68610,68611,68612,68613,68614,68615,68616,68617,68618,68619,68620,68621,68622,68623,68624,68625,68626,68627,68628,68629,68630,68631,68632,68633,68634,68635,68636,68637,68638,68639,68640,68641,68642,68643,68644,68645,68646,68647,68648,68649,68650,68651,68652,68653,68654,68655,68656,68657,68658,68659,68660,68661,68662,68663,68664,68665,68666,68667,68668,68669,68670,68671,68672,68673,68674,68675,68676,68677,68678,68679,68680,126464,126465,126466,126467,126469,126470,126471,126472,126473,126474,126475,126476,126477,126478,126479,126480,126481,126482,126483,126484,126485,126486,126487,126488,126489,126490,126491,126492,126493,126494,126495,126497,126498,126500,126503,126505,126506,126507,126508,126509,126510,126511,126512,126513,126514,126516,126517,126518,126519,126521,126523,126530,126535,126537,126539,126541,126542,126543,126545,126546,126548,126551,126553,126555,126557,126559,126561,126562,126564,126567,126568,126569,126570,126572,126573,126574,126575,126576,126577,126578,126580,126581,126582,126583,126585,126586,126587,126588,126590,126592,126593,126594,126595,126596,126597,126598,126599,126600,126601,126603,126604,126605,126606,126607,126608,126609,126610,126611,126612,126613,126614,126615,126616,126617,126618,126619,126625,126626,126627,126629,126630,126631,126632,126633,126635,126636,126637,126638,126639,126640,126641,126642,126643,126644,126645,126646,126647,126648,126649,126650,126651,1114109];function C(t){var e=[],n="";if(t&&t.childNodes)for(s(e,t);n=function t(e){var n,o,r;return e&&e.length?(o=(n=e.pop()).textContent||n.innerText)?(r=o.match(/^.*(\n|\r)/))?r[e.length=0]:o:"ruby"===n.tagName?t(e):n.childNodes?(s(e,n),t(e)):void 0:null}(e);)for(var o=0;o{if("number"==typeof t.line&&(t.snapToLines||0<=t.line&&t.line<=100))return t.line;if(!t.track||!t.track.textTrackList||!t.track.textTrackList.mediaElement)return-1;for(var e=t.track,n=e.textTrackList,o=0,r=0;rp&&(c=c<0?-1:1,c*=Math.ceil(p/u)*u),i<0&&(c+=""===r.vertical?a.height:a.width,s=s.reverse()),o.move(h,c)}else{var d=o.lineHeight/a.height*100;switch(r.lineAlign){case"middle":i-=d/2;break;case"end":i-=d}switch(r.vertical){case"":e.applyStyles({top:e.formatStyle(i,"%")});break;case"rl":e.applyStyles({left:e.formatStyle(i,"%")});break;case"lr":e.applyStyles({right:e.formatStyle(i,"%")})}s=["+y","-x","+x","-y"],o=new P(e)}p=((t,e)=>{for(var n,o=new P(t),r=1,i=0;it.left&&this.topt.top},P.prototype.overlapsAny=function(t){for(var e=0;e=t.top&&this.bottom<=t.bottom&&this.left>=t.left&&this.right<=t.right},P.prototype.overlapsOppositeAxis=function(t,e){switch(e){case"+x":return this.leftt.right;case"+y":return this.topt.bottom}},P.prototype.intersectPercentage=function(t){return Math.max(0,Math.min(this.right,t.right)-Math.max(this.left,t.left))*Math.max(0,Math.min(this.bottom,t.bottom)-Math.max(this.top,t.top))/(this.height*this.width)},P.prototype.toCSSCompatValues=function(t){return{top:this.top-t.top,bottom:t.bottom-this.bottom,left:this.left-t.left,right:t.right-this.right,height:this.height,width:this.width}},P.getSimpleBoxPosition=function(t){var e=t.div?t.div.offsetHeight:t.tagName?t.offsetHeight:0,n=t.div?t.div.offsetWidth:t.tagName?t.offsetWidth:0,o=t.div?t.div.offsetTop:t.tagName?t.offsetTop:0;return{left:(t=t.div?t.div.getBoundingClientRect():t.tagName?t.getBoundingClientRect():t).left,right:t.right,top:t.top||o,height:t.height||e,bottom:t.bottom||o+(t.height||e),width:t.width||n}},A.StringDecoder=function(){return{decode:function(t){if(!t)return"";if("string"!=typeof t)throw new Error("Error - expected string data.");return decodeURIComponent(encodeURIComponent(t))}}},A.convertCueToDOMTree=function(t,e){return t&&e?E(t,e):null},A.processCues=function(t,e,n){if(!t||!e||!n)return null;for(;n.firstChild;)n.removeChild(n.firstChild);var o=t.document.createElement("div");if(o.style.position="absolute",o.style.left="0",o.style.right="0",o.style.top="0",o.style.bottom="0",o.style.margin="1.5%",n.appendChild(o),(t=>{for(var e=0;e{var n,s,o=e;function r(){var t=m(e);if(null===t)throw new f(f.Errors.BadTimeStamp,"Malformed timestamp: "+o);return e=e.replace(/^[^\sa-zA-Z-]+/,""),t}function a(){e=e.replace(/^\s+/,"")}if(a(),t.startTime=r(),a(),"--\x3e"!==e.substr(0,3))throw new f(f.Errors.BadTimeStamp,"Malformed time stamp (time stamps must be separated by '--\x3e'): "+o);e=e.substr(3),a(),t.endTime=r(),a(),n=e,t=t,s=new y,v(n,function(t,e){switch(t){case"region":for(var n=i.length-1;0<=n;n--)if(i[n].id===e){s.set(t,i[n].region);break}break;case"vertical":s.alt(t,e,["rl","lr"]);break;case"line":var o=e.split(","),r=o[0];s.integer(t,r),s.percent(t,r)&&s.set("snapToLines",!1),s.alt(t,r,["auto"]),2===o.length&&s.alt("lineAlign",o[1],["start","middle","end"]);break;case"position":o=e.split(","),s.percent(t,o[0]),2===o.length&&s.alt("positionAlign",o[1],["start","middle","end"]);break;case"size":s.percent(t,e);break;case"align":s.alt(t,e,["start","middle","end","left","right"])}},/:/,/\s/),t.region=s.get("region",null),t.vertical=s.get("vertical",""),t.line=s.get("line","auto"),t.lineAlign=s.get("lineAlign","start"),t.snapToLines=s.get("snapToLines",!0),t.size=s.get("size",100),t.align=s.get("align","middle"),t.position=s.get("position",{start:0,left:0,middle:50,end:100,right:100},t.align),t.positionAlign=s.get("positionAlign",{start:"start",left:"start",middle:"middle",end:"end",right:"end"},t.align)})(r,o.cue,o.regionList)}catch(t){o.reportOrThrowError(t),o.cue=null,o.state="BADCUE";continue}o.state="CUETEXT";continue;case"CUETEXT":var a=-1!==r.indexOf("--\x3e");if(!r||a&&(s=!0)){o.oncue&&o.oncue(o.cue),o.cue=null,o.state="ID";continue}o.cue.text&&(o.cue.text+="\n"),o.cue.text+=r;continue;case"BADCUE":r||(o.state="ID");continue}}}catch(t){o.reportOrThrowError(t),"CUETEXT"===o.state&&o.cue&&o.oncue&&o.oncue(o.cue),o.cue=null,o.state="INITIAL"===o.state?"BADWEBVTT":"BADCUE"}return this},flush:function(){var e=this;try{if(e.buffer+=e.decoder.decode(),!e.cue&&"HEADER"!==e.state||(e.buffer+="\n\n",e.parse()),"INITIAL"===e.state)throw new f(f.Errors.BadSignature)}catch(t){e.reportOrThrowError(t)}return e.onflush&&e.onflush(),this}},p.WebVTT=A}.call(this)}.call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],conf:[function(t,e,n){var o;(e=void 0===e?this.conf={}:e.exports).EMB_DEBUG=!1,e.EMB_HTTPS=!0,e.CDN_ORIGIN=(e.EMB_HTTPS?"https":"http")+"://cdn.embedly.com",e.CDN_BASE_URL=e.CDN_ORIGIN+"/",e.EMB_ASSET_VERSION="74fbf467",e.WIDGET_FRAME_SRC=e.CDN_ORIGIN+"/widgets/",e.SECURE_WIDGET_FRAME_SRC="https://cdn.embedly.com/widgets/",e.EMB_POST_MESSAGE=!!window.postMessage,e.EMB_PROGRESS=!0,e.APP_API_URL="https://app.embed.ly",e.PLATFORM_KEY="fd92ebbc52fc43fb98f69e50e7893c13",e.CHROMIE_URL="https://chromie.embed.ly",o=window.location.pathname.split(".")[0].split("/"),e.EMB_GROUP=o[o.length-1].toLowerCase(),e.PAGE_PROGRESS_DOMAINS=[]},{}]},{},[20]);
A new approach that delivers in fresh
Video Thumbnail
1:45

The Afresh advantage for produce.

Turn the complexity of produce (ripeness, weather, ad lift, supplier swaps) into coordinated, predictable performance with Afresh's award-winning AI.

Unify the fresh supply chain

From DC to backroom to on-shelf: one platform.

Connects produce buying, store ordering, ripening cycles.

Single source of truth for shrink reporting.

Navigate messy data

Weight-variable items, supplier substitutions, regional variability.

Produce data is the messiest in the store.

Afresh is engineered specifically for it.

Optimize real world decisions

Heirloom tomato turnover vs banana ripeness.

Prepared salad shelf life vs ad-driven bell pepper lift.

Balance sales, shrink, and labor across the department.

Empower fresh teams

Replaces the produce manager's gut and clipboard.

Daily, SKU-level guidance for every store.

Trains in hours, not weeks.

A fresh approach to produce.

Traditional replenishment tools were built for shelf-stable cans and boxes. They cannot model ripening curves, weather impact on demand, weekly ad lift, holiday spikes, supplier substitutions, or the gap between conventional and organic SKUs.
Afresh was engineered for produce from day one, turning that complexity into profitability, fewer dump bins, and lasting growth.

Industrialized food

Center store data

Consistent UPCs, pack sizes, and discrete units make center-store inventory clean and predictable.

Produce department data

Ripeness curves, weather swings, weekly ad lift, conventional vs organic, weight-variable items. Produce data shifts every hour.
Supermarket

Center store merchandising

Biannual planograms are mostly static, with the occasional endcap promotion.
fresh veggies

Produce merchandising 

Wet rack rotates daily. Holiday spikes (Cinco, July 4, Thanksgiving) reshape the entire department. Ad-driven SKUs lift 5x in a single week.
supermarket

Center store workflows

Consistent packaging and scannable barcodes make inventory management straightforward.
raw meat

Produce team workflows

Produce managers juggle hyper-perishables, supplier substitutions, random weights, and ripening windows, all before 8am.
More

Inside the produce engine

Why this matters for produceAlbertsons rolled Afresh out across all 2,200 banner produce departments. 25% shrink reduction at scale. The same engine, the same playbook is available to any produce VP today.

Albertsons Companies + Afresh: How fresh-first innovation creates chainwide value
Our customers know that they can find the freshest, highest-quality foods and a great assortment at Heinen’s. The partnership with Afresh enables us to continue to deliver on that promise of excellent food and the best in-stock rate.
Jeff Heinen
Jeff Heinen
,
Co-CEO of Heinen’s
We're still looking for those individuals who approach produce as an art. But with Afresh, if a produce manager leaves, the knowledge that you'll have an increase in cherry orders during the summer doesn't leave with them.
Jason Resner
Jason Resner
,
Meat Category Manager at Fresh Thyme
By partnering with Afresh, we are now able to better manage produce supply across all 2,200 stores, giving our department teams a tool to predict demand SKU-by-SKU, account for ripening windows, and monitor inventory in real time.
Susan Morris
Susan Morris
,
CEO at Albertsons Companies

Customers trust Afresh

Albertsons
Fruits

Less produce shrink. Less food in the dumpster.

Produce is the largest source of in-store food waste, and the highest-shrink department in any grocer. A 25% shrink reduction means tens of thousands of pounds of fruit and vegetables sold instead of dumped, every store, every year.
About Afresh

Produce, perfected. Three weeks to first store.

Pilot in three weeks. Full chain in twelve. 25% shrink reduction at every store.

fruits

More fresh ideas and tools.

Afresh Raises $34M to Scale AI Across the Grocery Industry — Driving Fresher Food, Stronger Margins, and Less Waste
  • Press
  • Article

Afresh Raises $34M to Scale AI Across the Grocery Industry — Driving Fresher Food, Stronger Margins, and Less Waste

Round co-led by Just Climate — the climate-led investment strategy of Generation Investment Management — and High Sage Ventures, as Afresh’s AI platform scales to 12,500+ departments with 70% year-over-year revenue growth in 2025.

Explore
Afresh Expands AI Platform to Cover Every Item in Stores
  • Press
  • Article

Afresh Expands AI Platform to Cover Every Item in Stores

Afresh's AI platform now manages replenishment, inventory, and DC buying decisions across center store and general merchandise—already ordering more than 320 million center store items annually.

Explore
Fixing the Hidden Layer Holding Back Fresh
  • Industry Insights
  • Article

Fixing the Hidden Layer Holding Back Fresh

For decades, fresh buying has relied on instinct and spreadsheets. Today, technology can finally match the pace of perishables.

Explore
Afresh Launches Industry’s First AI-Powered Fresh Buying Solution with Wakefern
  • Press
  • Article

Afresh Launches Industry’s First AI-Powered Fresh Buying Solution with Wakefern

Wakefern, the nation’s largest retailer-owned cooperative, will be among the first to deploy Afresh’s breakthrough Fresh Buying solution — the world's first technology designed to help fresh buyers take control of their entire day, replacing fragmented systems with one streamlined intelligent solution built for the pace of Fresh and the best in customer experience.

Explore
Afresh Completes AI-Powered Fresh Replenishment and Inventory Management Solution Roll Out Across All Albertsons Companies Fresh Departments
  • Press
  • Article

Afresh Completes AI-Powered Fresh Replenishment and Inventory Management Solution Roll Out Across All Albertsons Companies Fresh Departments

Afresh now powers the bakery and deli for Albertsons Cos. in addition to the retailer's meat, seafood and produce departments

Explore
More