From 02f9b4a93cbb2ccd31df996343a21d04520de88c Mon Sep 17 00:00:00 2001 From: Joshua Seigler Date: Mon, 6 May 2019 11:20:56 -0400 Subject: [PATCH] publish: add source and issues links to footer, update meta info generated from commit 70b54dae74516728fa616db9233bfb867be38df4 --- beastmaster/index.html | 2 +- bot-jock/index.html | 2 +- bundle.59655c37.js => bundle.280e2806.js | 2 +- bundle.59655c37.js.map => bundle.280e2806.js.map | 2 +- index.html | 2 +- operative/index.html | 2 +- siren/index.html | 2 +- sw.js | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) rename bundle.59655c37.js => bundle.280e2806.js (99%) rename bundle.59655c37.js.map => bundle.280e2806.js.map (99%) diff --git a/beastmaster/index.html b/beastmaster/index.html index 0a96f48..a913983 100644 --- a/beastmaster/index.html +++ b/beastmaster/index.html @@ -1 +1 @@ -Borderlands 3 Skill Planner \ No newline at end of file +Borderlands 3 Skill Planner \ No newline at end of file diff --git a/bot-jock/index.html b/bot-jock/index.html index 0a96f48..a913983 100644 --- a/bot-jock/index.html +++ b/bot-jock/index.html @@ -1 +1 @@ -Borderlands 3 Skill Planner \ No newline at end of file +Borderlands 3 Skill Planner \ No newline at end of file diff --git a/bundle.59655c37.js b/bundle.280e2806.js similarity index 99% rename from bundle.59655c37.js rename to bundle.280e2806.js index e4329bf..8dc3822 100644 --- a/bundle.59655c37.js +++ b/bundle.280e2806.js @@ -1,2 +1,2 @@ !function(e){function t(a){if(n[a])return n[a].exports;var r=n[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};t.m=e,t.c=n,t.d=function(e,n,a){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:a})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(t.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)t.d(a,r,function(t){return e[t]}.bind(null,r));return a},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="/",t(t.s=0)}({"/NXq":function(e,t,n){"use strict";(function(e){function a(t){return e(r.a,{name:"Moze",discipline:"Bot Jock",skills:i.a,path:t.path})}n.d(t,"a",function(){return a});var r=n("J3pd"),i=n("vY9S")}).call(this,n("gDde").h)},"/Yqc":function(e,t){function n(){return"serviceWorker"in navigator&&("https:"===window.location.protocol||"localhost"===window.location.hostname||0===window.location.hostname.indexOf("127."))}t.install=function(e){if(e||(e={}),n()){var t=navigator.serviceWorker.register("/sw.js",{}),a=function(e){function t(){switch(s.state){case"redundant":r("onUpdateFailed"),s.onstatechange=null;break;case"installing":a||r("onUpdating");break;case"installed":i||r("onUpdateReady");break;case"activated":r("onUpdated"),s.onstatechange=null}}function n(){switch(s.state){case"redundant":s.onstatechange=null;break;case"installing":case"installed":break;case"activated":r("onInstalled"),s.onstatechange=null}}var a,i,o,s=e.installing||e.waiting;s&&!s.onstatechange&&(e.active?(t(),o=t):(n(),o=n),a=!0,e.waiting&&(i=!0),s.onstatechange=o)},r=function(t){"function"==typeof e[t]&&e[t]({source:"ServiceWorker"})};t.then(function(e){e&&(a(e),e.onupdatefound=function(){a(e)})}).catch(function(e){return r("onError"),Promise.reject(e)})}},t.applyUpdate=function(e,t){n()&&navigator.serviceWorker.getRegistration().then(function(n){n&&n.waiting?(n.waiting.postMessage({action:"skipWaiting"}),e&&e()):t&&t()})},t.update=function(){n()&&navigator.serviceWorker.getRegistration().then(function(e){if(e)return e.update()})}},0:function(e,t,n){e.exports=n("QfWi")},"31cR":function(e){e.exports={skill:"_3JH8h",enabled:"_1mLSi",usable:"_1xemn",augment:"_3VkFk",actionSkill:"-z8wv",chevron:"_2t_-G",diamond:"_2ej0d",image:"_8ejWg",ranks:"_3DD7O",skillTitle:"_394yV",description:"_1S9-f",effect:"oiyDq"}},"9fQE":function(e,t,n){"use strict";(function(e){function a(t){var n=t.path;return e("nav",{class:o.a.nav},e("ul",{class:o.a.links},[{name:"Zane",path:"/operative"},{name:"Amara",path:"/siren"},{name:"FL4K",path:"/beastmaster"},{name:"Moze",path:"/bot-jock"}].map(function(t){return e("li",{class:o.a.link+" "+(n===t.path?o.a.current:"")},e(r.a,{href:t.path},t.name))})))}n.d(t,"a",function(){return a});var r=n("Y3FI"),i=n("Bx1b"),o=n.n(i)}).call(this,n("gDde").h)},Bx1b:function(e){e.exports={nav:"_1EyP2",links:"_2oe-I",link:"_3aviv",current:"TlaNZ"}},"Et/u":function(e,t,n){"use strict";var a=n("LMbI");t.a={Brawl:{0:{Phaseslam:{text:"Amara leaps into the air and Slams the ground, dealing damage to all nearby enemies and knocking them up.",effect:function(){return"Damage - 141, Cooldown: 26 Seconds"},type:a.a.ACTION_SKILL,ranks:0}},1:{"One With Nature":{ranks:5,text:"Gain Max Health and Elemental Damage Resistance to your Action Skill Element.",effect:function(e){return"Max Health +"+5*e+"%, Elemental Damage Reduction +"+12*e+"%"}},"Personal Space":{ranks:3,text:"Shots deal Bonus Damage based on distance to target - dealing more damage when close.",effect:function(e){return"Up to "+11*e+"% bonus damage"}},Clarity:{ranks:5,text:"Constantly regenerate health, increasing regeneration the lower your health is. Bonus is doubled after using an Action Skill.",effect:function(e){return"Health Regen up to +"+1*e+"% per second, Duration: 5 seconds"}}},2:{"Arms Deal":{ranks:5,text:"Deal increased Splash Damage, and take Reduced Splash Damage.",effect:function(e){return"Splash Damage +"+3*e+"%, Splash Damage Reduction +"+3*e+"%"}},"Root to Rise":{ranks:5,text:"Gain increased Max Health",effect:function(e){return"Max Health +"+5*e+"%"}},"Helping Hand(s)":{ranks:5,text:"After using Action Skill, Amara's arms remain active and grant Damage Reduction.",effect:function(e){return"Damage Reduction +"+4*e+"%, Duration 8 sec"}},"Blight Tiger":{ranks:0,text:"Converts Amara's Action Skill to Corrosive Damage. This does not take effect until after Amara uses her Action Skill.",effect:function(){return""},type:a.a.AUGMENT_DIAMOND}},3:{Fracture:{ranks:0,text:"Amara summons a Handful of Fists that erupt from the ground, dealing damage in front of Amara.",effect:function(){return"Damage 124, Cooldown 26 sec"},type:a.a.ACTION_SKILL},Mindfulness:{ranks:3,text:"When taking damage, gain a Stack of Mindfulness. For every Stack, gain improved Shield Regeneration Delay and Movement Speed. Stacks decay quickly.",effect:function(e){return"Movement Speed +"+1.4*e+"%, Shield Regeneration Delay -"+2.5*e+"%, 25 Max Mindfulness Stacks, Duration 5 sec"}},"Find Your Center":{ranks:1,text:"Gain increased Melee Damage. After using Action Skill, gain increased Melee Range.",effect:function(){return"Melee Damage +22%, Melee Range +50%, Duration 8 sec"}},Vigor:{ranks:3,text:"Killing an enemy with an Action Skill grants all allies increased Movement Speed, and can be stacked.",effect:function(e){return"Team Movement Speed +"+2*e+"%, Duration 8 sec"}},Revelation:{ranks:0,text:"Amara's Action Skill now creates a Nova when it damages enemies, dealing damage to all nearby enemies.",effect:function(){return"Nova Damage 41, Action Skill Damage -15%"},type:a.a.AUGMENT_CHEVRON}},4:{Downfall:{ranks:0,text:"Amara leaps into the air and shoots an Elemental Beam below her, followed by a Slam.",effect:function(){return"Damage 141, Beam Damage 21 per sec, Cooldown 36 sec"},type:a.a.ACTION_SKILL},Samsara:{ranks:3,text:"When dealing damage to an enemy with Action Skills, adds a Stack of Samsara. Every stack gains increased Gun Damage and Health Regeneration. Stacks decay quickly.",effect:function(e){return"Gun Damage +"+2*e+"% per enemy, Health Regen +"+1*e+"% of Max Health per stack, 25 Max Samsara Stacks, Duration 8 sec"}}},5:{"Do Unto Others":{ranks:1,text:"Upon taking damage, automatically throw an Energy Orb back at enemy, dealing Action Skill Elemental Damage.",effect:function(){return"Projectile Damage 17, Cooldown 8 sec"}},"Jab Cross":{ranks:5,text:"When dealing melee damage to an enemy, gain increased Action Skill Damage and increased Weapon Damage.",effect:function(e){return"Weapon Damage +"+10*e+"%, Action Skill Damage +"+11*e+"%, Duration 20 sec"}},"Guardian Angel":{ranks:1,text:"Upon entering Fight For Your Life, gain immediate Second Wind that restores health, and creates an Action Skill Elemental Nova that knocks back enemies.",effect:function(){return"Max Health Restored 100% of Max Health, Cooldown 60 sec"}},Glamour:{ranks:0,text:"Enemies damaged by Amara's Action Skill become confused and attack their allies, but Action Skill Cooldown is increased. If enemies are target of Phasegrasp, nearby enemies become confused.",effect:function(){return"Damage -60%, Confuse Duration 6 sec, Cooldown +20%"},type:a.a.AUGMENT_CHEVRON}},6:{Blitz:{ranks:1,text:"Press in on Right Stick for Melee Override, dashing a short distance forward to perform a special melee strike dealing Elemental Melee Damage. Cooldown instantly resets if enemy is killed by Blitz.",effect:function(){return"Cooldown 10 sec"}}}},"Mystical Assault":{0:{Phasecast:{text:"Phasecast - Amara sends forward an Astral Projection of herself, dealing damage to everything in its path.",effect:function(){return"Damage - 133, Cooldown: 22 Seconds"},type:a.a.ACTION_SKILL,ranks:0}},1:{"Do Harm":{ranks:5,text:"Grants Rush stacks after killing an enemy, which are consumed when using an Action Skill. Action Skill Damage is increased per stack of Rush consumed.",effect:function(e){return"Action Skill Damage +"+.6*e+"% per stack, 10 Max Rush Stacks, Duration 20 sec"}},"Fast Hands":{ranks:3,text:"Reload Speed, Weapon Swap Speed, and Mode Switch Speed are improved.",effect:function(e){return"Reload Speed +"+4*e+"%, Weapon Swap Speed +"+22*e+"%, Mode Switch Speed +"+21*e+"%"}},"Violent Tapestry":{ranks:5,text:"Applying Elemental Effects grant Rush Stacks. For every stack of Rush consumed from an Action Skill, Elemental Effect Chance is increased.",effect:function(e){return"Effect Chance +"+.6*e+"%, 10 Max Rush Stacks, Duration 20 sec"}}},2:{Alacrity:{ranks:5,text:"Gain increased Reload Speed for every stack of Rush. For every stack of Rush consumed from an Action Skill, this bonus is increased.",effect:function(e){return"Reload Speed +"+.4*e+"% per stack (+"+.6*e+"% after action skill), Duration 8 sec"}},Transcend:{ranks:3,text:"Gain increased Accuracy and Critical Hit Bonus after activating an Action Skill.",effect:function(e){return"Accuracy +"+11*e+"%, Critical Hit Bonus +"+9*e+"%, Duration 8 sec"}},Restless:{ranks:5,text:"Gain increased Action Skill Cooldown Rate.",effect:function(e){return"Cooldown Rate +"+4*e+"%"}},"Soul Sap":{ranks:0,text:"A portion of all damage dealt by Action Skills is returned to her or nearby allies as Health.",effect:function(){return"Life Steal +30% of Skill damage dealt"},type:a.a.AUGMENT_CHEVRON}},3:{Reverberation:{ranks:0,text:"Amara sends forward an Astral Projection of herself that damages everything in its path. Deals increased damage for every enemy hit.",effect:function(){return"Damage 116, Damage Bonus +50% per enemy hit, Cooldown 24 sec"},type:a.a.ACTION_SKILL},Ascendant:{ranks:1,text:"All Action Skill Augments gain increased effects.",effect:function(){return"Soul Sap Lifesteal +20%, Allure Radius +100%, Glamour Duration +50%, Bright Star Damage +25%, Stillness of Mind breaks 0.75 sec after being damaged"}},"Stillness of Mind":{ranks:0,text:"Enemies damaged by Action Skills becomes Phaselocked until they are damaged or duration ends, but Action Skill Cooldown is increased. If an enemy is the target of Phasegrasp, nearby enemies are also Phaselocked.",effect:function(){return"Damage -35%, Max Duration 6 sec, Cooldown +15%"},type:a.a.AUGMENT_CHEVRON}},4:{Deliverance:{ranks:0,text:"Amara sends forward an Astral Projection of herself that deals damage to everything in its path. Upon hitting enemies, it releases homing Elemental Projectiles that trigger Action Skill Elemental Effect on enemies.",effect:function(){return"Damage 124, Elemental Projectiles 3 per enemy hit, Cooldown 24 sec"},type:a.a.ACTION_SKILL},"From Rest":{ranks:3,text:"Gain improved Fire Rate and Charge Time.",effect:function(e){return"Fire Rate +"+4*e+"%, Charge Time +"+26*e+"%"}},"Laid Bare":{ranks:3,text:"Enemies take increased damage from all sources after being damaged by your Action Skill.",effect:function(e){return"Damage increase +"+5*e+"%, Duration 8 sec"}},Wrath:{ranks:3,text:"Gain increased Gun Damage. Effect is increased after activating Action Skill",effect:function(e){return"Gun Damage +"+3*e+"% (+"+5*e+"% after Action Skill Use), Duration 8 sec"}}},5:{Remnant:{ranks:3,text:"Creates a Homing Projectile after killing an enemy with a Gun or Action Skill, and deals Action Skill Elemental Damage plus Overkill Damage.",effect:function(e){return"Remnant Damage "+33*e}},Awakening:{ranks:3,text:"Rush stacks gain increased effectiveness.",effect:function(e){return"Rush Stack Effectiveness +"+10*e+"%"}},Tandava:{ranks:0,text:"Amara sends forward an Astral Projection of herself that explodes when it hits a target, damaging all nearby enemies.",effect:function(){return"Damage: 166, Cooldown 28 sec"},type:a.a.ACTION_SKILL}},6:{Avatar:{ranks:1,text:"Action Skills can be activated while cooling down. Can only be used once per completed cooldown. Increases Max Rush Stacks",effect:function(){return"Bonus Rush Stacks +10"}}}},"Fist of the Elements":{0:{Phasegrasp:{text:"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Enemies immune to being grasped take instant damage instead.",effect:function(){return"Skill Duration - 7 sec, Cooldown - 13 sec, Grasp Immune Damage - 40"},type:a.a.ACTION_SKILL,ranks:0}},1:{Anima:{ranks:5,text:"Elemental Effects deal increased damage over time and increase duration. Action Skill Elemental Effects deal increased damage.",effect:function(e){return"Elemental Effect Damage +"+2*e+"%, Elemental Effect Duration +"+10*e+"%, Action Skill Elemental Effect Damage +"+6*e+"%"}},"Steady Hands":{ranks:3,text:"Gain increased Weapon Handling and Accuracy.",effect:function(e){return"Handling +"+12*e+"%, Accuracy +"+10*e+"%"}},Infusion:{ranks:5,text:"Convert a portion of damage dealt by weapons into Action Skill Element.",effect:function(e){return"Converted Damage "+4*e+"%"}}},2:{Tempest:{ranks:5,text:"Deal increased Elemental Damage. Shock Damage is further increased.",effect:function(e){return"Shock Damage +"+8*e+"%, Elemental Damage +"+4*e+"%"}},"Illuminated Fist":{ranks:1,text:"Gain increased Melee Damage, and Melee Damage is converted to Action Skill Element.",effect:function(){return"Melee Damage +28%"}},Wildfire:{ranks:5,text:"Whenever Elemental Effects are applies to an enemy, increases chance to spread to a nearby enemy.",effect:function(e){return"Spread Chance "+8*e+"%"}},Soulfire:{ranks:0,text:"Converts Action Skill to Fire Damage. This does not take effect until after Action Skill is used.",type:a.a.AUGMENT_DIAMOND}},3:{"The Eternal Fist":{ranks:0,text:"Amara summons a giant fist that bursts into the ground and locks targeted enemy in place. If Grasped enemy is killed, up to 3 new targets can be Grasped as well.",effect:function(){return"Bonus Targets up to +4, Cooldown 23 sec, Grasp Immune Damage 66"},type:a.a.ACTION_SKILL},Dread:{ranks:1,text:"Gun Damage is increased after an enemy is Grasped. If a Grasped Enemy is killed, current weapon is instantly reloaded.",effect:function(){return"Weapon Damage +10%, Duration 8 sec"}},Allure:{ranks:0,text:"Amara's Action Skill creates singularities that pull in enemies.",effect:function(){return"Action Skill Damage -25%, Duration 2.5 sec"},type:a.a.AUGMENT_CHEVRON}},4:{Indiscriminate:{ranks:3,text:"Bullets that damage enemies have a chance to ricochet and deal decreased damage to nearby enemies. Chance and Damage are increased if target is affected by Phasegrasp or Stillness of Mind.",effect:function(e){return"Ricochet Chance "+10*e+"%, Ricochet Damage -"+(60-10*e)+"%, Action Skill Ricochet Chance "+20*e+"%, Action Skill Ricochet Damage -"+(30-5*e)+"%"}},"Deep Well":{ranks:1,text:"Gain increased Magazine Size with elemental weapons.",effect:function(){return"Magazine Size +20%"}},Catharsis:{ranks:3,text:"When Elemental Effect is applied on an enemy that dies, enemy explodes an deals attuned element damage along with any other inflicted elements.",effect:function(e){return"Damage "+13*e+", Cooldown 8 sec"}},"Ties That Bind":{ranks:0,text:"Amara summons a giant fist that bursts from the ground and locks targeted enemy in place. Enemies near Grasped target are linked, and any damage dealt to a linked target is shared between all links.",effect:function(){return"Link Damage 35% of damage dealt, Cooldown 17 sec, Grasp Immune Damage 80"},type:a.a.ACTION_SKILL}},5:{"Fist Over Matter":{ranks:0,text:"Amara summons a giant fist that bursts from the ground and locks targeted enemy in place. After Grasping, large fists appear to smash the area, dealing damage to nearby enemies.",effect:function(){return"Damage 21, Cooldown 31 sec, Grasp Immune Damage 93"},type:a.a.ACTION_SKILL},Sustainment:{ranks:5,text:"Gain Life Steal whenever Elemental Damage is dealt with weapon.",effect:function(e){return"Life Steal +"+4*e+"%"}},Conflux:{ranks:5,text:"When Elemental Effect is applied on an enemy, gain chance to randomly Electrocute, Burn, or Melt that enemy.",effect:function(e){return"Extra Effect Chance "+7*e+"%"}}},6:{"Forceful Expression":{ranks:1,text:"Guns deal Bonus Elemental Damage based on Action Skill Element",effect:function(){return"Bonus Elemental Damage 11% of damage dealt"}}}}}},Fl18:function(e,t,n){"use strict";(function(e){var a=n("laFY"),r=n.n(a),i=e("span",null,e("a",{href:"https://borderlands.com/"},"Official Borderlands website")," - ",e("a",{href:"https://github.com/seigler/bl3skills.com"},"Source Code")," - ",e("a",{href:"https://github.com/seigler/bl3skills.com/issues"},"Issues"));t.a=function(){return e("footer",{class:r.a.footer},i)}}).call(this,n("gDde").h)},G9Up:function(e,t,n){"use strict";(function(e){var a=n("Y3FI"),r=n("NZ6x"),i=n("cY+X"),o=n("rFP/"),s=n("x3c/"),l=n("/NXq"),c=e(a.b,null,e(r.a,{path:"/"}),e(i.a,{path:"/operative"}),e(o.a,{path:"/siren"}),e(s.a,{path:"/beastmaster"}),e(l.a,{path:"/bot-jock"}));t.a=function(){return c}}).call(this,n("gDde").h)},J3pd:function(e,t,n){"use strict";(function(e){function a(){return(a=Object.assign||function(e){for(var t=1;t=5*s-5,onChange:m(l,r,t,s)}))}))})))});return e("div",null,e(s.a,{path:p}),e("main",null,e("div",{class:d.a.VaultHunter,onContextMenu:r},e("h1",{class:d.a.title},l,e("div",{class:d.a.subtitle},"the ",f)),e("div",{class:d.a.trees},g))),h)},n}(i.Component)}).call(this,n("gDde").h)},LMbI:function(e,t){"use strict";t.a={ACTION_SKILL:1,AUGMENT_CHEVRON:2,AUGMENT_DIAMOND:3}},MKmk:function(e){e.exports={VaultHunter:"_2zgqJ",title:"_17kLY",subtitle:"_3J3hw",trees:"_3ek45",tier:"_3Ch4X",treeName:"_1WAM2",tree:"gRWZY",skills:"_2Su0b",green:"-Pl7G",blue:"_1nm1I",red:"_3T1pZ"}},NZ6x:function(e,t,n){"use strict";(function(e){var a=n("Y3FI"),r=n("Fl18"),i=n("odKX"),o=n.n(i),s=e("h1",null,"Borderlands 3 skill calculator"),l=e(r.a,null);t.a=function(){return e("div",null,e("div",{class:o.a.splash},e("div",{class:o.a.wrapper},s,[{name:"Zane",job:"the Operative",path:"/operative"},{name:"Amara",job:"the Siren",path:"/siren"},{name:"FL4K",job:"the Beastmaster",path:"/beastmaster"},{name:"Moze",job:"the Bot Jock",path:"/bot-jock"}].map(function(t){return e(a.a,{class:o.a.link,href:t.path},e("div",{class:o.a.name},t.name,e("div",{class:o.a.job},t.job)))}))),l)}}).call(this,n("gDde").h)},QfWi:function(e,t,n){"use strict";n.r(t);var a=n("gDde"),r=n("G9Up"),i=(n("pyAK"),document.querySelector("#app"));Object(a.render)(Object(a.h)(r.a,null),i,i.firstElementChild);n("/Yqc").install()},Y3FI:function(e,t,n){"use strict";function a(e,t){for(var n in t)e[n]=t[n];return e}function r(e,t){return e.rankt.rank?-1:e.index-t.index}function i(e,t){return e.index=t,e.rank=function(e){return e.attributes.default?0:(t=e.attributes.path,o(t).map(s).join(""));var t}(e),e.attributes}function o(e){return e.replace(/(^\/+|\/+$)/g,"").split("/")}function s(e){return":"==e.charAt(0)?1+"*+?".indexOf(e.charAt(e.length-1))||4:5}function l(){var e;return""+((e=k&&k.location?k.location:k&&k.getCurrentLocation?k.getCurrentLocation():"undefined"!=typeof location?location:S).pathname||"")+(e.search||"")}function c(e,t){return void 0===t&&(t=!1),"string"!=typeof e&&e.url&&(t=e.replace,e=e.url),function(e){for(var t=v.length;t--;)if(v[t].canRoute(e))return!0;return!1}(e)&&function(e,t){void 0===t&&(t="push"),k&&k[t]?k[t](e):"undefined"!=typeof history&&history[t+"State"]&&history[t+"State"](null,null,e)}(e,t?"replace":"push"),u(e)}function u(e){for(var t=!1,n=0;n0},t.prototype.routeTo=function(e){return this._didRoute=!1,this.setState({url:e}),this.updating?this.canRoute(e):(this.forceUpdate(),this._didRoute)},t.prototype.componentWillMount=function(){v.push(this),this.updating=!0},t.prototype.componentDidMount=function(){var e=this;k&&(this.unlisten=k.listen(function(t){e.routeTo(""+(t.pathname||"")+(t.search||""))})),this.updating=!1},t.prototype.componentWillUnmount=function(){"function"==typeof this.unlisten&&this.unlisten(),v.splice(v.indexOf(this),1)},t.prototype.componentWillUpdate=function(){this.updating=!0},t.prototype.componentDidUpdate=function(){this.updating=!1},t.prototype.getMatchingChildren=function(e,t,n){return e.filter(i).sort(r).map(function(e){var r=function(e,t,n){var a,r=/(?:\?([^#]*))?(#.*)?$/,i=e.match(r),s={};if(i&&i[1])for(var l=i[1].split("&"),c=0;c2;)N.push(arguments[i]);for(t&&null!=t.children&&(N.length||N.push(t.children),delete t.children);N.length;)if((a=N.pop())&&void 0!==a.pop)for(i=a.length;i--;)N.push(a[i]);else"boolean"==typeof a&&(a=null),(r="function"!=typeof e)&&(null==a?a="":"number"==typeof a?a+="":"string"!=typeof a&&(r=!1)),r&&n?o[o.length-1]+=a:o===R?o=[a]:o.push(a),n=r;var s=new A;return s.nodeName=e,s.children=o,s.attributes=null==t?void 0:t,s.key=null==t?void 0:t.key,void 0!==w.vnode&&w.vnode(s),s}function n(e,t){for(var n in t)e[n]=t[n];return e}function a(e,t){null!=e&&("function"==typeof e?e(t):e.current=t)}function r(e){!e.__d&&(e.__d=!0)&&1==T.push(e)&&(w.debounceRendering||M)(i)}function i(){for(var e;e=T.pop();)e.__d&&_(e)}function o(e,t,n){return"string"==typeof t||"number"==typeof t?void 0!==e.splitText:"string"==typeof t.nodeName?!e._componentConstructor&&s(e,t.nodeName):n||e._componentConstructor===t.nodeName}function s(e,t){return e.__n===t||e.nodeName.toLowerCase()===t.toLowerCase()}function l(e){var t=n({},e.attributes);t.children=e.children;var a=e.nodeName.defaultProps;if(void 0!==a)for(var r in a)void 0===t[r]&&(t[r]=a[r]);return t}function c(e){var t=e.parentNode;t&&t.removeChild(e)}function u(e,t,n,r,i){if("className"===t&&(t="class"),"key"===t);else if("ref"===t)a(n,null),a(r,e);else if("class"!==t||i)if("style"===t){if(r&&"string"!=typeof r&&"string"!=typeof n||(e.style.cssText=r||""),r&&"object"==typeof r){if("string"!=typeof n)for(var o in n)o in r||(e.style[o]="");for(var o in r)e.style[o]="number"==typeof r[o]&&!1===E.test(o)?r[o]+"px":r[o]}}else if("dangerouslySetInnerHTML"===t)r&&(e.innerHTML=r.__html||"");else if("o"==t[0]&&"n"==t[1]){var s=t!==(t=t.replace(/Capture$/,""));t=t.toLowerCase().substring(2),r?n||e.addEventListener(t,f,s):e.removeEventListener(t,f,s),(e.__l||(e.__l={}))[t]=r}else if("list"!==t&&"type"!==t&&!i&&t in e){try{e[t]=null==r?"":r}catch(e){}null!=r&&!1!==r||"spellcheck"==t||e.removeAttribute(t)}else{var l=i&&t!==(t=t.replace(/^xlink:?/,""));null==r||!1===r?l?e.removeAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase()):e.removeAttribute(t):"function"!=typeof r&&(l?e.setAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase(),r):e.setAttribute(t,r))}else e.className=r||""}function f(e){return this.__l[e.type](w.event&&w.event(e)||e)}function d(){for(var e;e=O.shift();)w.afterMount&&w.afterMount(e),e.componentDidMount&&e.componentDidMount()}function h(e,t,n,a,r,i){L++||(I=null!=r&&void 0!==r.ownerSVGElement,G=null!=e&&!("__preactattr_"in e));var o=p(e,t,n,a,i);return r&&o.parentNode!==r&&r.appendChild(o),--L||(G=!1,i||d()),o}function p(e,t,n,a,r){var i=e,o=I;if(null!=t&&"boolean"!=typeof t||(t=""),"string"==typeof t||"number"==typeof t)return e&&void 0!==e.splitText&&e.parentNode&&(!e._component||r)?e.nodeValue!=t&&(e.nodeValue=t):(i=document.createTextNode(t),e&&(e.parentNode&&e.parentNode.replaceChild(i,e),g(e,!0))),i.__preactattr_=!0,i;var l=t.nodeName;if("function"==typeof l)return D(e,t,n,a);if(I="svg"===l||"foreignObject"!==l&&I,l+="",(!e||!s(e,l))&&(i=function(e,t){var n=t?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e);return n.__n=e,n}(l,I),e)){for(;e.firstChild;)i.appendChild(e.firstChild);e.parentNode&&e.parentNode.replaceChild(i,e),g(e,!0)}var c=i.firstChild,u=i.__preactattr_,f=t.children;if(null==u){u=i.__preactattr_={};for(var d=i.attributes,h=d.length;h--;)u[d[h].name]=d[h].value}return!G&&f&&1===f.length&&"string"==typeof f[0]&&null!=c&&void 0!==c.splitText&&null==c.nextSibling?c.nodeValue!=f[0]&&(c.nodeValue=f[0]):(f&&f.length||null!=c)&&m(i,f,n,a,G||null!=u.dangerouslySetInnerHTML),v(i,t.attributes,u),I=o,i}function m(e,t,n,a,r){var i,s,l,u,f,d=e.childNodes,h=[],m={},k=0,v=0,y=d.length,S=0,b=t?t.length:0;if(0!==y)for(var _=0;_2?[].slice.call(arguments,2):e.children)},createRef:function(){return{}},Component:C,render:function(e,t,n){return h(n,e,{},!1,t,!1)},rerender:i,options:w}}()},gqmc:function(e,t,n){"use strict";function a(e){for(var t=0,n=[0,0,0],a=0,r=0,i=Object.values(e);rh.ranks)return!1;u+=h.invested||0}if(u>0&&o+5<5*s)return!1;o+=u,s+=1}n[a]=o,t+=o,a+=1}return!(t>48)&&n}function r(e){for(var t=1;t0)?o.a.usable:""].join(" "),onClick:n,onContextMenu:n},e("div",{class:o.a.image},function(e){switch((e.match(/\s/g)||[]).length+1){case 1:return e.slice(0,3);case 2:return(e.match(/^\w{1,2}|\s\w{1,2}/g)||[]).join("").replace(/\s/g,"");default:return(e.match(/^\w|\s\w/g)||[]).join("").replace(/\s/g,"")}}(i)),v&&u>0&&e("div",{class:o.a.ranks},d,"/",u),e("div",{class:o.a.description},e("h3",{class:o.a.skillTitle},i),l,e("div",{class:o.a.effect},p(Math.max(d,1)))))}n.d(t,"a",function(){return a});var r=n("LMbI"),i=n("31cR"),o=n.n(i)}).call(this,n("gDde").h)},"rFP/":function(e,t,n){"use strict";(function(e){function a(t){return e(r.a,{name:"Amara",discipline:"Siren",skills:i.a,path:t.path})}n.d(t,"a",function(){return a});var r=n("J3pd"),i=n("Et/u")}).call(this,n("gDde").h)},rcrJ:function(e,t,n){"use strict";function a(e){for(var t=[],n=0,a=Object.values(e);n\n );\n}\n","var appCacheIframe;\n\nfunction hasSW() {\n \n return 'serviceWorker' in navigator && (\n window.location.protocol === 'https:' ||\n window.location.hostname === 'localhost' ||\n window.location.hostname.indexOf('127.') === 0\n );\n \n}\n\nfunction install(options) {\n options || (options = {});\n\n \n if (hasSW()) {\n var registration = navigator.serviceWorker\n .register(\n \"/sw.js\", {\n \n \n }\n );\n\n \n var handleUpdating = function(registration) {\n var sw = registration.installing || registration.waiting;\n var ignoreInstalling;\n var ignoreWaiting;\n\n // No SW or already handled\n if (!sw || sw.onstatechange) return;\n\n var stateChangeHandler;\n\n // Already has SW\n if (registration.active) {\n onUpdateStateChange();\n stateChangeHandler = onUpdateStateChange;\n } else {\n onInstallStateChange();\n stateChangeHandler = onInstallStateChange;\n }\n\n ignoreInstalling = true;\n if (registration.waiting) {\n ignoreWaiting = true;\n }\n\n sw.onstatechange = stateChangeHandler;\n\n function onUpdateStateChange() {\n switch (sw.state) {\n case 'redundant': {\n sendEvent('onUpdateFailed');\n sw.onstatechange = null;\n } break;\n\n case 'installing': {\n if (!ignoreInstalling) {\n sendEvent('onUpdating');\n }\n } break;\n\n case 'installed': {\n if (!ignoreWaiting) {\n sendEvent('onUpdateReady');\n }\n } break;\n\n case 'activated': {\n sendEvent('onUpdated');\n sw.onstatechange = null;\n } break;\n }\n }\n\n function onInstallStateChange() {\n switch (sw.state) {\n case 'redundant': {\n // Failed to install, ignore\n sw.onstatechange = null;\n } break;\n\n case 'installing': {\n // Installing, ignore\n } break;\n\n case 'installed': {\n // Installed, wait activation\n } break;\n\n case 'activated': {\n sendEvent('onInstalled');\n sw.onstatechange = null;\n } break;\n }\n }\n };\n\n var sendEvent = function(event) {\n if (typeof options[event] === 'function') {\n options[event]({\n source: 'ServiceWorker'\n });\n }\n };\n\n registration.then(function(reg) {\n // WTF no reg?\n if (!reg) return;\n\n // Installed but Shift-Reloaded (page is not controller by SW),\n // update might be ready at this point (more than one tab opened).\n // Anyway, if page is hard-reloaded, then it probably already have latest version\n // but it's not controlled by SW yet. Applying update will claim this page\n // to be controlled by SW. Maybe set flag to not reload it?\n // if (!navigator.serviceWorker.controller) return;\n\n handleUpdating(reg);\n reg.onupdatefound = function() {\n handleUpdating(reg);\n };\n }).catch(function(err) {\n sendEvent('onError');\n return Promise.reject(err);\n });\n \n\n return;\n }\n \n\n \n}\n\nfunction applyUpdate(callback, errback) {\n \n if (hasSW()) {\n navigator.serviceWorker.getRegistration().then(function(registration) {\n if (!registration || !registration.waiting) {\n errback && errback();\n return;\n }\n\n registration.waiting.postMessage({\n action: 'skipWaiting'\n });\n\n callback && callback();\n });\n\n return;\n }\n \n\n \n}\n\nfunction update() {\n \n if (hasSW()) {\n navigator.serviceWorker.getRegistration().then(function(registration) {\n if (!registration) return;\n return registration.update();\n });\n }\n \n\n \n}\n\n\n\nexports.install = install;\nexports.applyUpdate = applyUpdate;\nexports.update = update;\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"skill\":\"_3JH8h\",\"enabled\":\"_1mLSi\",\"usable\":\"_1xemn\",\"augment\":\"_3VkFk\",\"actionSkill\":\"-z8wv\",\"chevron\":\"_2t_-G\",\"diamond\":\"_2ej0d\",\"image\":\"_8ejWg\",\"ranks\":\"_3DD7O\",\"skillTitle\":\"_394yV\",\"description\":\"_1S9-f\",\"effect\":\"oiyDq\"};","import { Link } from 'preact-router';\nimport style from './index.css';\n\nexport default function Nav ({ path }) {\n const pages = [\n { name: 'Zane', path: '/operative' },\n { name: 'Amara', path: '/siren' },\n { name: 'FL4K', path: '/beastmaster' },\n { name: 'Moze', path: '/bot-jock' },\n ];\n return (\n \n );\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"nav\":\"_1EyP2\",\"links\":\"_2oe-I\",\"link\":\"_3aviv\",\"current\":\"TlaNZ\"};","import SKILLS from '@constants/skills';\n\n/* eslint-disable quotes */\nconst skills = {\n \"Brawl\": {\n \"0\": {\n \"Phaseslam\": {\n text: \"Amara leaps into the air and Slams the ground, dealing damage to all nearby enemies and knocking them up.\",\n effect: rank => `Damage - 141, Cooldown: 26 Seconds`, // TODO damage scaling by level\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"One With Nature\": {\n ranks: 5,\n text: \"Gain Max Health and Elemental Damage Resistance to your Action Skill Element.\",\n effect: rank => `Max Health +${rank * 5}%, Elemental Damage Reduction +${rank * 12}%`,\n },\n \"Personal Space\": {\n ranks: 3,\n text: \"Shots deal Bonus Damage based on distance to target - dealing more damage when close.\",\n effect: rank => `Up to ${rank * 11}% bonus damage`,\n },\n \"Clarity\": {\n ranks: 5,\n text: \"Constantly regenerate health, increasing regeneration the lower your health is. Bonus is doubled after using an Action Skill.\",\n effect: rank => `Health Regen up to +${rank * 1}% per second, Duration: 5 seconds`,\n },\n },\n \"2\": {\n \"Arms Deal\": {\n ranks: 5,\n text: \"Deal increased Splash Damage, and take Reduced Splash Damage.\",\n effect: rank => `Splash Damage +${rank * 3}%, Splash Damage Reduction +${rank * 3}%`,\n },\n \"Root to Rise\": {\n ranks: 5,\n text: \"Gain increased Max Health\",\n effect: rank => `Max Health +${rank * 5}%`,\n },\n \"Helping Hand(s)\": {\n ranks: 5,\n text: \"After using Action Skill, Amara's arms remain active and grant Damage Reduction.\",\n effect: rank => `Damage Reduction +${rank * 4}%, Duration 8 sec`,\n },\n \"Blight Tiger\": {\n ranks: 0,\n text: \"Converts Amara's Action Skill to Corrosive Damage. This does not take effect until after Amara uses her Action Skill.\",\n effect: rank => ``,\n type: SKILLS.AUGMENT_DIAMOND,\n },\n },\n \"3\": {\n \"Fracture\": {\n ranks: 0,\n text: \"Amara summons a Handful of Fists that erupt from the ground, dealing damage in front of Amara.\",\n effect: rank => `Damage 124, Cooldown 26 sec`,\n type: SKILLS.ACTION_SKILL,\n },\n \"Mindfulness\": {\n ranks: 3,\n text: \"When taking damage, gain a Stack of Mindfulness. For every Stack, gain improved Shield Regeneration Delay and Movement Speed. Stacks decay quickly.\",\n effect: rank => `Movement Speed +${rank * 1.4}%, Shield Regeneration Delay -${rank * 2.5}%, 25 Max Mindfulness Stacks, Duration 5 sec`,\n },\n \"Find Your Center\": {\n ranks: 1,\n text: \"Gain increased Melee Damage. After using Action Skill, gain increased Melee Range.\",\n effect: rank => `Melee Damage +22%, Melee Range +50%, Duration 8 sec`,\n },\n \"Vigor\": {\n ranks: 3,\n text: \"Killing an enemy with an Action Skill grants all allies increased Movement Speed, and can be stacked.\",\n effect: rank => `Team Movement Speed +${rank * 2}%, Duration 8 sec`,\n },\n \"Revelation\": {\n ranks: 0,\n text: \"Amara's Action Skill now creates a Nova when it damages enemies, dealing damage to all nearby enemies.\",\n effect: rank => `Nova Damage 41, Action Skill Damage -15%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Downfall\": {\n ranks: 0,\n text: \"Amara leaps into the air and shoots an Elemental Beam below her, followed by a Slam.\",\n effect: rank => `Damage 141, Beam Damage 21 per sec, Cooldown 36 sec`,\n type: SKILLS.ACTION_SKILL,\n },\n \"Samsara\": {\n ranks: 3,\n text: \"When dealing damage to an enemy with Action Skills, adds a Stack of Samsara. Every stack gains increased Gun Damage and Health Regeneration. Stacks decay quickly.\",\n effect: rank => `Gun Damage +${rank * 2}% per enemy, Health Regen +${rank * 1}% of Max Health per stack, 25 Max Samsara Stacks, Duration 8 sec`,\n },\n },\n \"5\": {\n \"Do Unto Others\": {\n ranks: 1,\n text: \"Upon taking damage, automatically throw an Energy Orb back at enemy, dealing Action Skill Elemental Damage.\",\n effect: rank => `Projectile Damage 17, Cooldown 8 sec`,\n },\n \"Jab Cross\": {\n ranks: 5,\n text: \"When dealing melee damage to an enemy, gain increased Action Skill Damage and increased Weapon Damage.\",\n effect: rank => `Weapon Damage +${rank * 10}%, Action Skill Damage +${rank * 11}%, Duration 20 sec`,\n },\n \"Guardian Angel\": {\n ranks: 1,\n text: \"Upon entering Fight For Your Life, gain immediate Second Wind that restores health, and creates an Action Skill Elemental Nova that knocks back enemies.\",\n effect: rank => `Max Health Restored 100% of Max Health, Cooldown 60 sec`,\n },\n \"Glamour\": {\n ranks: 0,\n text: \"Enemies damaged by Amara's Action Skill become confused and attack their allies, but Action Skill Cooldown is increased. If enemies are target of Phasegrasp, nearby enemies become confused.\",\n effect: rank => `Damage -60%, Confuse Duration 6 sec, Cooldown +20%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"6\": {\n \"Blitz\": {\n ranks: 1,\n text: \"Press in on Right Stick for Melee Override, dashing a short distance forward to perform a special melee strike dealing Elemental Melee Damage. Cooldown instantly resets if enemy is killed by Blitz.\",\n effect: rank => `Cooldown 10 sec`,\n },\n },\n },\n \"Mystical Assault\": {\n \"0\": {\n \"Phasecast\": {\n text: \"Phasecast - Amara sends forward an Astral Projection of herself, dealing damage to everything in its path.\",\n effect: rank => `Damage - 133, Cooldown: 22 Seconds`, // TODO damage scaling by level\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Do Harm\": {\n ranks: 5,\n text: \"Grants Rush stacks after killing an enemy, which are consumed when using an Action Skill. Action Skill Damage is increased per stack of Rush consumed.\",\n effect: rank => `Action Skill Damage +${rank * 0.6}% per stack, 10 Max Rush Stacks, Duration 20 sec`,\n },\n \"Fast Hands\": {\n ranks: 3,\n text: \"Reload Speed, Weapon Swap Speed, and Mode Switch Speed are improved.\",\n effect: rank => `Reload Speed +${rank * 4}%, Weapon Swap Speed +${rank * 22}%, Mode Switch Speed +${rank * 21}%`,\n },\n \"Violent Tapestry\": {\n ranks: 5,\n text: \"Applying Elemental Effects grant Rush Stacks. For every stack of Rush consumed from an Action Skill, Elemental Effect Chance is increased.\",\n effect: rank => `Effect Chance +${rank * 0.6}%, 10 Max Rush Stacks, Duration 20 sec`,\n },\n },\n \"2\": {\n \"Alacrity\": {\n ranks: 5,\n text: \"Gain increased Reload Speed for every stack of Rush. For every stack of Rush consumed from an Action Skill, this bonus is increased.\",\n effect: rank => `Reload Speed +${rank * 0.4}% per stack (+${rank * 0.6}% after action skill), Duration 8 sec`,\n },\n \"Transcend\": {\n ranks: 3,\n text: \"Gain increased Accuracy and Critical Hit Bonus after activating an Action Skill.\",\n effect: rank => `Accuracy +${rank * 11}%, Critical Hit Bonus +${rank * 9}%, Duration 8 sec`,\n },\n \"Restless\": {\n ranks: 5,\n text: \"Gain increased Action Skill Cooldown Rate.\",\n effect: rank => `Cooldown Rate +${rank * 4}%`,\n },\n \"Soul Sap\": {\n ranks: 0,\n text: \"A portion of all damage dealt by Action Skills is returned to her or nearby allies as Health.\",\n effect: rank => `Life Steal +30% of Skill damage dealt`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"3\": {\n \"Reverberation\": {\n ranks: 0,\n text: \"Amara sends forward an Astral Projection of herself that damages everything in its path. Deals increased damage for every enemy hit.\",\n effect: rank => `Damage 116, Damage Bonus +50% per enemy hit, Cooldown 24 sec`,\n type: SKILLS.ACTION_SKILL,\n },\n \"Ascendant\": {\n ranks: 1,\n text: \"All Action Skill Augments gain increased effects.\",\n effect: rank => `Soul Sap Lifesteal +20%, Allure Radius +100%, Glamour Duration +50%, Bright Star Damage +25%, Stillness of Mind breaks 0.75 sec after being damaged`,\n },\n \"Stillness of Mind\": {\n ranks: 0,\n text: \"Enemies damaged by Action Skills becomes Phaselocked until they are damaged or duration ends, but Action Skill Cooldown is increased. If an enemy is the target of Phasegrasp, nearby enemies are also Phaselocked.\",\n effect: rank => `Damage -35%, Max Duration 6 sec, Cooldown +15%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Deliverance\": {\n ranks: 0,\n text: \"Amara sends forward an Astral Projection of herself that deals damage to everything in its path. Upon hitting enemies, it releases homing Elemental Projectiles that trigger Action Skill Elemental Effect on enemies.\",\n effect: rank => `Damage 124, Elemental Projectiles 3 per enemy hit, Cooldown 24 sec`,\n type: SKILLS.ACTION_SKILL,\n },\n \"From Rest\": {\n ranks: 3,\n text: \"Gain improved Fire Rate and Charge Time.\",\n effect: rank => `Fire Rate +${rank * 4}%, Charge Time +${rank * 26}%`,\n },\n \"Laid Bare\": {\n ranks: 3,\n text: \"Enemies take increased damage from all sources after being damaged by your Action Skill.\",\n effect: rank => `Damage increase +${rank * 5}%, Duration 8 sec`,\n },\n \"Wrath\": {\n ranks: 3,\n text: \"Gain increased Gun Damage. Effect is increased after activating Action Skill\",\n effect: rank => `Gun Damage +${rank * 3}% (+${rank * 5}% after Action Skill Use), Duration 8 sec`,\n },\n },\n \"5\": {\n \"Remnant\": {\n ranks: 3,\n text: \"Creates a Homing Projectile after killing an enemy with a Gun or Action Skill, and deals Action Skill Elemental Damage plus Overkill Damage.\",\n effect: rank => `Remnant Damage ${rank * 33}`, // TODO level scaling?\n },\n \"Awakening\": {\n ranks: 3,\n text: \"Rush stacks gain increased effectiveness.\",\n effect: rank => `Rush Stack Effectiveness +${rank * 10}%`,\n },\n \"Tandava\": {\n ranks: 0,\n text: \"Amara sends forward an Astral Projection of herself that explodes when it hits a target, damaging all nearby enemies.\",\n effect: rank => `Damage: 166, Cooldown 28 sec`,\n type: SKILLS.ACTION_SKILL,\n },\n },\n \"6\": {\n \"Avatar\": {\n ranks: 1,\n text: \"Action Skills can be activated while cooling down. Can only be used once per completed cooldown. Increases Max Rush Stacks\",\n effect: rank => `Bonus Rush Stacks +10`,\n },\n },\n },\n \"Fist of the Elements\": {\n \"0\": {\n \"Phasegrasp\": {\n text: \"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Enemies immune to being grasped take instant damage instead.\",\n effect: rank => `Skill Duration - 7 sec, Cooldown - 13 sec, Grasp Immune Damage - 40`, // TODO damage scaling by level\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Anima\": {\n ranks: 5,\n text: \"Elemental Effects deal increased damage over time and increase duration. Action Skill Elemental Effects deal increased damage.\",\n effect: rank => `Elemental Effect Damage +${rank * 2}%, Elemental Effect Duration +${rank * 10}%, Action Skill Elemental Effect Damage +${rank * 6}%`,\n },\n \"Steady Hands\": {\n ranks: 3,\n text: \"Gain increased Weapon Handling and Accuracy.\",\n effect: rank => `Handling +${rank * 12}%, Accuracy +${rank * 10}%`,\n },\n \"Infusion\": {\n ranks: 5,\n text: \"Convert a portion of damage dealt by weapons into Action Skill Element.\",\n effect: rank => `Converted Damage ${rank * 4}%`,\n },\n },\n \"2\": {\n \"Tempest\": {\n ranks: 5,\n text: \"Deal increased Elemental Damage. Shock Damage is further increased.\",\n effect: rank => `Shock Damage +${rank * 8}%, Elemental Damage +${rank * 4}%`,\n },\n \"Illuminated Fist\": {\n ranks: 1,\n text: \"Gain increased Melee Damage, and Melee Damage is converted to Action Skill Element.\",\n effect: rank => `Melee Damage +28%`,\n },\n \"Wildfire\": {\n ranks: 5,\n text: \"Whenever Elemental Effects are applies to an enemy, increases chance to spread to a nearby enemy.\",\n effect: rank => `Spread Chance ${rank * 8}%`,\n },\n \"Soulfire\": {\n ranks: 0,\n text: \"Converts Action Skill to Fire Damage. This does not take effect until after Action Skill is used.\",\n type: SKILLS.AUGMENT_DIAMOND,\n },\n },\n \"3\": {\n \"The Eternal Fist\": {\n ranks: 0,\n text: \"Amara summons a giant fist that bursts into the ground and locks targeted enemy in place. If Grasped enemy is killed, up to 3 new targets can be Grasped as well.\",\n effect: rank => `Bonus Targets up to +4, Cooldown 23 sec, Grasp Immune Damage 66`,\n type: SKILLS.ACTION_SKILL,\n },\n \"Dread\": {\n ranks: 1,\n text: \"Gun Damage is increased after an enemy is Grasped. If a Grasped Enemy is killed, current weapon is instantly reloaded.\",\n effect: rank => `Weapon Damage +10%, Duration 8 sec`,\n },\n \"Allure\": {\n ranks: 0,\n text: \"Amara's Action Skill creates singularities that pull in enemies.\",\n effect: rank => `Action Skill Damage -25%, Duration 2.5 sec`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Indiscriminate\": {\n ranks: 3,\n text: \"Bullets that damage enemies have a chance to ricochet and deal decreased damage to nearby enemies. Chance and Damage are increased if target is affected by Phasegrasp or Stillness of Mind.\",\n effect: rank => `Ricochet Chance ${rank * 10}%, Ricochet Damage -${60 - rank * 10}%, Action Skill Ricochet Chance ${rank * 20}%, Action Skill Ricochet Damage -${30 - rank * 5}%`, // TODO check this\n },\n \"Deep Well\": {\n ranks: 1,\n text: \"Gain increased Magazine Size with elemental weapons.\",\n effect: rank => `Magazine Size +20%`,\n },\n \"Catharsis\": {\n ranks: 3,\n text: \"When Elemental Effect is applied on an enemy that dies, enemy explodes an deals attuned element damage along with any other inflicted elements.\",\n effect: rank => `Damage ${rank * 13}, Cooldown 8 sec`, // TODO level scaling\n },\n \"Ties That Bind\": {\n ranks: 0,\n text: \"Amara summons a giant fist that bursts from the ground and locks targeted enemy in place. Enemies near Grasped target are linked, and any damage dealt to a linked target is shared between all links.\",\n effect: rank => `Link Damage 35% of damage dealt, Cooldown 17 sec, Grasp Immune Damage 80`,\n type: SKILLS.ACTION_SKILL,\n },\n },\n \"5\": {\n \"Fist Over Matter\": {\n ranks: 0,\n text: \"Amara summons a giant fist that bursts from the ground and locks targeted enemy in place. After Grasping, large fists appear to smash the area, dealing damage to nearby enemies.\",\n effect: rank => `Damage 21, Cooldown 31 sec, Grasp Immune Damage 93`,\n type: SKILLS.ACTION_SKILL,\n },\n \"Sustainment\": {\n ranks: 5,\n text: \"Gain Life Steal whenever Elemental Damage is dealt with weapon.\",\n effect: rank => `Life Steal +${rank * 4}%`,\n },\n \"Conflux\": {\n ranks: 5,\n text: \"When Elemental Effect is applied on an enemy, gain chance to randomly Electrocute, Burn, or Melt that enemy.\",\n effect: rank => `Extra Effect Chance ${rank * 7}%`,\n },\n },\n \"6\": {\n \"Forceful Expression\": {\n ranks: 1,\n text: \"Guns deal Bonus Elemental Damage based on Action Skill Element\",\n effect: rank => `Bonus Elemental Damage 11% of damage dealt`,\n },\n },\n },\n};\n\nexport default skills;\n","import style from './index.css';\n\nexport default function () {\n return (\n \n );\n}\n","import { Router } from 'preact-router';\n\nimport Home from '@pages/Home';\nimport Operative from '@pages/Operative';\nimport Siren from '@pages/Siren';\nimport Beastmaster from '@pages/Beastmaster';\nimport BotJock from '@pages/BotJock';\n\nconst App = () =>\n (\n \n \n \n \n \n );\n\nexport default App;\n","// import { useReducer } from 'preact/hooks'; // Downgraded from Preact 10 for compat with @pwa/cli\nimport { Component } from 'preact';\nimport Skill from '@components/Skill';\nimport Nav from '@components/Nav';\nimport Footer from '@components/Footer';\nimport { getHash } from './hashHandler';\nimport reducer from './reducer';\nimport style from './index.css';\n\nfunction contextKiller (event) {\n event.preventDefault();\n return false;\n}\n\nexport default class VaultHunter extends Component {\n constructor (props) {\n super(props);\n this.state = {\n invested: [0, 0, 0],\n skills: props.skills || {},\n };\n }\n\n componentDidMount () {\n this.setState(reducer(this.state, {\n type: 'loadSkills',\n skills: getHash(this.state.skills),\n }));\n }\n\n render ({\n name = 'Unnamed',\n discipline = 'Classless',\n path\n }) {\n const skillChangeListenerFactory = (skillName, treeIndex, treeName, tierIndex) => {\n return (oldValue, newValue) => {\n this.setState(reducer(this.state, {\n type: 'skillChange',\n skillName,\n treeIndex,\n treeName,\n tierIndex,\n newValue,\n oldValue,\n }));\n };\n };\n\n const trees =\n Object.keys(this.state.skills).map((treeName, treeIndex) => {\n return (\n
\n \n

{ treeName }

\n
\n { Object.keys(this.state.skills[treeName]).map((tier, tierIndex) =>\n
\n { Object.keys(this.state.skills[treeName][tier]).map(skillName =>\n = 5 * tierIndex - 5}\n onChange={skillChangeListenerFactory(skillName, treeIndex, treeName, tierIndex)}\n />\n ) }\n
\n ) }\n
\n
\n );\n });\n\n return (\n
\n
\n );\n }\n}\n","export default {\n ACTION_SKILL: 1,\n AUGMENT_CHEVRON: 2,\n AUGMENT_DIAMOND: 3,\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"VaultHunter\":\"_2zgqJ\",\"title\":\"_17kLY\",\"subtitle\":\"_3J3hw\",\"trees\":\"_3ek45\",\"tier\":\"_3Ch4X\",\"treeName\":\"_1WAM2\",\"tree\":\"gRWZY\",\"skills\":\"_2Su0b\",\"green\":\"-Pl7G\",\"blue\":\"_1nm1I\",\"red\":\"_3T1pZ\"};","import { Link } from 'preact-router';\nimport Footer from '@components/Footer';\nimport style from './index.css';\n\nexport default function () {\n const pages = [\n { name: 'Zane', job: 'the Operative', path: '/operative' },\n { name: 'Amara', job: 'the Siren', path: '/siren' },\n { name: 'FL4K', job: 'the Beastmaster', path: '/beastmaster' },\n { name: 'Moze', job: 'the Bot Jock', path: '/bot-jock' },\n ];\n return (\n
\n
\n
\n

Borderlands 3 skill calculator

\n { pages.map(page => {\n return (\n \n
\n {page.name}\n
\n {page.job}\n
\n
\n \n );\n }) }\n
\n
\n
\n
\n );\n}\n","import { h, render } from 'preact';\nimport App from '@components/App';\nimport './index.css';\n\nlet elem = document.querySelector('#app');\nlet root = render(, elem, elem.firstElementChild);\n\nif (process.env.NODE_ENV === 'development' && module.hot) {\n // enable preact devtools\n require('preact/debug');\n // respond to HMR updates\n module.hot.accept('@components/App', New => {\n New = require('@components/App').default;\n root = render(, elem, root);\n });\n} else if (process.env.NODE_ENV === 'production') {\n // Service Worker registration\n require('offline-plugin/runtime').install();\n}\n","import { Component, cloneElement, h } from 'preact';\n\nvar EMPTY$1 = {};\n\nfunction assign(obj, props) {\n\t// eslint-disable-next-line guard-for-in\n\tfor (var i in props) {\n\t\tobj[i] = props[i];\n\t}\n\treturn obj;\n}\n\nfunction exec(url, route, opts) {\n\tvar reg = /(?:\\?([^#]*))?(#.*)?$/,\n\t\tc = url.match(reg),\n\t\tmatches = {},\n\t\tret;\n\tif (c && c[1]) {\n\t\tvar p = c[1].split('&');\n\t\tfor (var i=0; i b.rank) ? -1 :\n\t\t(a.index - b.index)\n\t);\n}\n\n// filter out VNodes without attributes (which are unrankeable), and add `index`/`rank` properties to be used in sorting.\nfunction prepareVNodeForRanking(vnode, index) {\n\tvnode.index = index;\n\tvnode.rank = rankChild(vnode);\n\treturn vnode.attributes;\n}\n\nfunction segmentize(url) {\n\treturn url.replace(/(^\\/+|\\/+$)/g, '').split('/');\n}\n\nfunction rankSegment(segment) {\n\treturn segment.charAt(0)==':' ? (1 + '*+?'.indexOf(segment.charAt(segment.length-1))) || 4 : 5;\n}\n\nfunction rank(path) {\n\treturn segmentize(path).map(rankSegment).join('');\n}\n\nfunction rankChild(vnode) {\n\treturn vnode.attributes.default ? 0 : rank(vnode.attributes.path);\n}\n\nvar customHistory = null;\n\nvar ROUTERS = [];\n\nvar subscribers = [];\n\nvar EMPTY = {};\n\nfunction isPreactElement(node) {\n\treturn node.__preactattr_!=null || typeof Symbol!=='undefined' && node[Symbol.for('preactattr')]!=null;\n}\n\nfunction setUrl(url, type) {\n\tif ( type === void 0 ) type='push';\n\n\tif (customHistory && customHistory[type]) {\n\t\tcustomHistory[type](url);\n\t}\n\telse if (typeof history!=='undefined' && history[type+'State']) {\n\t\thistory[type+'State'](null, null, url);\n\t}\n}\n\n\nfunction getCurrentUrl() {\n\tvar url;\n\tif (customHistory && customHistory.location) {\n\t\turl = customHistory.location;\n\t}\n\telse if (customHistory && customHistory.getCurrentLocation) {\n\t\turl = customHistory.getCurrentLocation();\n\t}\n\telse {\n\t\turl = typeof location!=='undefined' ? location : EMPTY;\n\t}\n\treturn (\"\" + (url.pathname || '') + (url.search || ''));\n}\n\n\n\nfunction route(url, replace) {\n\tif ( replace === void 0 ) replace=false;\n\n\tif (typeof url!=='string' && url.url) {\n\t\treplace = url.replace;\n\t\turl = url.url;\n\t}\n\n\t// only push URL into history if we can handle it\n\tif (canRoute(url)) {\n\t\tsetUrl(url, replace ? 'replace' : 'push');\n\t}\n\n\treturn routeTo(url);\n}\n\n\n/** Check if the given URL can be handled by any router instances. */\nfunction canRoute(url) {\n\tfor (var i=ROUTERS.length; i--; ) {\n\t\tif (ROUTERS[i].canRoute(url)) { return true; }\n\t}\n\treturn false;\n}\n\n\n/** Tell all router instances to handle the given URL. */\nfunction routeTo(url) {\n\tvar didRoute = false;\n\tfor (var i=0; i 0;\n\t};\n\n\t/** Re-render children with a new URL to match against. */\n\tRouter.prototype.routeTo = function routeTo (url) {\n\t\tthis._didRoute = false;\n\t\tthis.setState({ url: url });\n\n\t\t// if we're in the middle of an update, don't synchronously re-route.\n\t\tif (this.updating) { return this.canRoute(url); }\n\n\t\tthis.forceUpdate();\n\t\treturn this._didRoute;\n\t};\n\n\tRouter.prototype.componentWillMount = function componentWillMount () {\n\t\tROUTERS.push(this);\n\t\tthis.updating = true;\n\t};\n\n\tRouter.prototype.componentDidMount = function componentDidMount () {\n\t\tvar this$1 = this;\n\n\t\tif (customHistory) {\n\t\t\tthis.unlisten = customHistory.listen(function (location) {\n\t\t\t\tthis$1.routeTo((\"\" + (location.pathname || '') + (location.search || '')));\n\t\t\t});\n\t\t}\n\t\tthis.updating = false;\n\t};\n\n\tRouter.prototype.componentWillUnmount = function componentWillUnmount () {\n\t\tif (typeof this.unlisten==='function') { this.unlisten(); }\n\t\tROUTERS.splice(ROUTERS.indexOf(this), 1);\n\t};\n\n\tRouter.prototype.componentWillUpdate = function componentWillUpdate () {\n\t\tthis.updating = true;\n\t};\n\n\tRouter.prototype.componentDidUpdate = function componentDidUpdate () {\n\t\tthis.updating = false;\n\t};\n\n\tRouter.prototype.getMatchingChildren = function getMatchingChildren (children, url, invoke) {\n\t\treturn children\n\t\t\t.filter(prepareVNodeForRanking)\n\t\t\t.sort(pathRankSort)\n\t\t\t.map( function (vnode) {\n\t\t\t\tvar matches = exec(url, vnode.attributes.path, vnode.attributes);\n\t\t\t\tif (matches) {\n\t\t\t\t\tif (invoke !== false) {\n\t\t\t\t\t\tvar newProps = { url: url, matches: matches };\n\t\t\t\t\t\tassign(newProps, matches);\n\t\t\t\t\t\tdelete newProps.ref;\n\t\t\t\t\t\tdelete newProps.key;\n\t\t\t\t\t\treturn cloneElement(vnode, newProps);\n\t\t\t\t\t}\n\t\t\t\t\treturn vnode;\n\t\t\t\t}\n\t\t\t}).filter(Boolean);\n\t};\n\n\tRouter.prototype.render = function render (ref, ref$1) {\n\t\tvar children = ref.children;\n\t\tvar onChange = ref.onChange;\n\t\tvar url = ref$1.url;\n\n\t\tvar active = this.getMatchingChildren(children, url, true);\n\n\t\tvar current = active[0] || null;\n\t\tthis._didRoute = !!current;\n\n\t\tvar previous = this.previousUrl;\n\t\tif (url!==previous) {\n\t\t\tthis.previousUrl = url;\n\t\t\tif (typeof onChange==='function') {\n\t\t\t\tonChange({\n\t\t\t\t\trouter: this,\n\t\t\t\t\turl: url,\n\t\t\t\t\tprevious: previous,\n\t\t\t\t\tactive: active,\n\t\t\t\t\tcurrent: current\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn current;\n\t};\n\n\treturn Router;\n}(Component));\n\nvar Link = function (props) { return (\n\th('a', assign({ onClick: handleLinkClick }, props))\n); };\n\nvar Route = function (props) { return h(props.component, props); };\n\nRouter.subscribers = subscribers;\nRouter.getCurrentUrl = getCurrentUrl;\nRouter.route = route;\nRouter.Router = Router;\nRouter.Route = Route;\nRouter.Link = Link;\n\nexport { subscribers, getCurrentUrl, route, Router, Route, Link };export default Router;\n//# sourceMappingURL=preact-router.es.js.map\n","import SKILLS from '@constants/skills';\n\nconst skills = {\n \"Tree One\": {\n \"0\": {\n \"?\": {\n text: \"?\",\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n effect: rank => `?`,\n },\n },\n },\n \"Tree Two\": {\n \"0\": {\n \"?\": {\n text: \"?\",\n type: SKILLS.ACTION_SKILL,\n effect: rank => `?`,\n },\n },\n },\n \"Tree Three\": {\n \"0\": {\n \"?\": {\n text: \"?\",\n type: SKILLS.ACTION_SKILL,\n effect: rank => `?`,\n },\n },\n },\n};\n\nexport default skills;\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function Operative ({ path }) {\n return (\n \n );\n}\n","!function(){\"use strict\";function e(e,t){var n,o,r,i,l=W;for(i=arguments.length;i-- >2;)P.push(arguments[i]);t&&null!=t.children&&(P.length||P.push(t.children),delete t.children);while(P.length)if((o=P.pop())&&void 0!==o.pop)for(i=o.length;i--;)P.push(o[i]);else\"boolean\"==typeof o&&(o=null),(r=\"function\"!=typeof e)&&(null==o?o=\"\":\"number\"==typeof o?o+=\"\":\"string\"!=typeof o&&(r=!1)),r&&n?l[l.length-1]+=o:l===W?l=[o]:l.push(o),n=r;var a=new T;return a.nodeName=e,a.children=l,a.attributes=null==t?void 0:t,a.key=null==t?void 0:t.key,void 0!==M.vnode&&M.vnode(a),a}function t(e,t){for(var n in t)e[n]=t[n];return e}function n(e,t){null!=e&&(\"function\"==typeof e?e(t):e.current=t)}function o(n,o){return e(n.nodeName,t(t({},n.attributes),o),arguments.length>2?[].slice.call(arguments,2):n.children)}function r(e){!e.__d&&(e.__d=!0)&&1==V.push(e)&&(M.debounceRendering||D)(i)}function i(){var e;while(e=V.pop())e.__d&&x(e)}function l(e,t,n){return\"string\"==typeof t||\"number\"==typeof t?void 0!==e.splitText:\"string\"==typeof t.nodeName?!e._componentConstructor&&a(e,t.nodeName):n||e._componentConstructor===t.nodeName}function a(e,t){return e.__n===t||e.nodeName.toLowerCase()===t.toLowerCase()}function u(e){var n=t({},e.attributes);n.children=e.children;var o=e.nodeName.defaultProps;if(void 0!==o)for(var r in o)void 0===n[r]&&(n[r]=o[r]);return n}function c(e,t){var n=t?document.createElementNS(\"http://www.w3.org/2000/svg\",e):document.createElement(e);return n.__n=e,n}function p(e){var t=e.parentNode;t&&t.removeChild(e)}function s(e,t,o,r,i){if(\"className\"===t&&(t=\"class\"),\"key\"===t);else if(\"ref\"===t)n(o,null),n(r,e);else if(\"class\"!==t||i)if(\"style\"===t){if(r&&\"string\"!=typeof r&&\"string\"!=typeof o||(e.style.cssText=r||\"\"),r&&\"object\"==typeof r){if(\"string\"!=typeof o)for(var l in o)l in r||(e.style[l]=\"\");for(var l in r)e.style[l]=\"number\"==typeof r[l]&&!1===E.test(l)?r[l]+\"px\":r[l]}}else if(\"dangerouslySetInnerHTML\"===t)r&&(e.innerHTML=r.__html||\"\");else if(\"o\"==t[0]&&\"n\"==t[1]){var a=t!==(t=t.replace(/Capture$/,\"\"));t=t.toLowerCase().substring(2),r?o||e.addEventListener(t,_,a):e.removeEventListener(t,_,a),(e.__l||(e.__l={}))[t]=r}else if(\"list\"!==t&&\"type\"!==t&&!i&&t in e){try{e[t]=null==r?\"\":r}catch(e){}null!=r&&!1!==r||\"spellcheck\"==t||e.removeAttribute(t)}else{var u=i&&t!==(t=t.replace(/^xlink:?/,\"\"));null==r||!1===r?u?e.removeAttributeNS(\"http://www.w3.org/1999/xlink\",t.toLowerCase()):e.removeAttribute(t):\"function\"!=typeof r&&(u?e.setAttributeNS(\"http://www.w3.org/1999/xlink\",t.toLowerCase(),r):e.setAttribute(t,r))}else e.className=r||\"\"}function _(e){return this.__l[e.type](M.event&&M.event(e)||e)}function f(){var e;while(e=A.shift())M.afterMount&&M.afterMount(e),e.componentDidMount&&e.componentDidMount()}function d(e,t,n,o,r,i){H++||(R=null!=r&&void 0!==r.ownerSVGElement,B=null!=e&&!(\"__preactattr_\"in e));var l=h(e,t,n,o,i);return r&&l.parentNode!==r&&r.appendChild(l),--H||(B=!1,i||f()),l}function h(e,t,n,o,r){var i=e,l=R;if(null!=t&&\"boolean\"!=typeof t||(t=\"\"),\"string\"==typeof t||\"number\"==typeof t)return e&&void 0!==e.splitText&&e.parentNode&&(!e._component||r)?e.nodeValue!=t&&(e.nodeValue=t):(i=document.createTextNode(t),e&&(e.parentNode&&e.parentNode.replaceChild(i,e),v(e,!0))),i.__preactattr_=!0,i;var u=t.nodeName;if(\"function\"==typeof u)return N(e,t,n,o);if(R=\"svg\"===u||\"foreignObject\"!==u&&R,u+=\"\",(!e||!a(e,u))&&(i=c(u,R),e)){while(e.firstChild)i.appendChild(e.firstChild);e.parentNode&&e.parentNode.replaceChild(i,e),v(e,!0)}var p=i.firstChild,s=i.__preactattr_,_=t.children;if(null==s){s=i.__preactattr_={};for(var f=i.attributes,d=f.length;d--;)s[f[d].name]=f[d].value}return!B&&_&&1===_.length&&\"string\"==typeof _[0]&&null!=p&&void 0!==p.splitText&&null==p.nextSibling?p.nodeValue!=_[0]&&(p.nodeValue=_[0]):(_&&_.length||null!=p)&&m(i,_,n,o,B||null!=s.dangerouslySetInnerHTML),y(i,t.attributes,s),R=l,i}function m(e,t,n,o,r){var i,a,u,c,s,_=e.childNodes,f=[],d={},m=0,b=0,y=_.length,g=0,w=t?t.length:0;if(0!==y)for(var C=0;C skill.ranks) { return false; }\n tierTotal += skill.invested || 0;\n };\n if (tierTotal > 0 && treeTotal + 5 < tierIndex * 5) { return false; }\n treeTotal += tierTotal;\n tierIndex += 1;\n };\n treeTotals[treeIndex] = treeTotal;\n totalSpent += treeTotal;\n treeIndex += 1;\n };\n if (totalSpent > 48) { return false; }\n return treeTotals;\n}\n","import deepmerge from 'deepmerge';\nimport investmentValidator from './investmentValidator';\nimport { setHash } from './hashHandler';\n\nexport default function reducer (state, action) {\n switch (action.type) {\n case 'skillChange':\n var newSkills = deepmerge(state.skills, {\n [action.treeName]: {\n [action.tierIndex + '']: {\n [action.skillName]: {\n invested: action.newValue,\n }\n }\n }\n });\n const skillChangeTotals = investmentValidator(newSkills);\n if (skillChangeTotals) {\n setHash(newSkills);\n return {\n ...state,\n invested: skillChangeTotals,\n skills: newSkills,\n };\n } else {\n return state;\n }\n case 'loadSkills':\n const loadSkillsTotals = investmentValidator(action.skills);\n if (loadSkillsTotals) {\n return {\n ...state,\n invested: loadSkillsTotals,\n skills: deepmerge(state.skills, action.skills),\n };\n } else {\n return state;\n }\n }\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"footer\":\"Eq4mJ\",\"heart\":\"_37Gl6\",\"moveHeart\":\"_34mPq\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"splash\":\"_2_d3x\",\"wrapper\":\"vMurv\",\"link\":\"_3lx8i\",\"name\":\"_1SiOU\",\"job\":\"_3chgr\"};","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.deepmerge = factory());\n}(this, (function () { 'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tObject.keys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tObject.keys(source).forEach(function(key) {\n\t\tif (!options.isMergeableObject(source[key]) || !target[key]) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nreturn deepmerge_1;\n\n})));\n","import SKILLS from '@constants/skills';\nimport style from './index.css';\n\nfunction getInitials (string) {\n const numWords = (string.match(/\\s/g) || []).length + 1;\n switch (numWords) {\n case 1:\n return string.slice(0, 3);\n case 2:\n return (string.match(/^\\w{1,2}|\\s\\w{1,2}/g) || []).join('').replace(/\\s/g, '');\n default:\n return (string.match(/^\\w|\\s\\w/g) || []).join('').replace(/\\s/g, '');\n }\n}\n\nexport default function Skill ({\n name = '?',\n text = 'Long description',\n ranks = 0,\n invested = 0,\n effect = rank => `Rank ${rank} effect`,\n type = null,\n enabled = true,\n onChange = (oldValue, newValue) => null,\n}) {\n const isAugment = [\n SKILLS.AUGMENT_CHEVRON,\n SKILLS.AUGMENT_DIAMOND,\n SKILLS.ACTION_SKILL,\n ].includes(type);\n let shapeStyle = null;\n if (type === SKILLS.AUGMENT_CHEVRON) { shapeStyle = style.chevron; }\n if (type === SKILLS.AUGMENT_DIAMOND) { shapeStyle = style.diamond; }\n if (type === SKILLS.ACTION_SKILL) { shapeStyle = style.actionSkill; }\n function clickListener (event) {\n var newValue;\n if (event.type === 'click') {\n newValue = Math.min(invested + 1, ranks);\n } else { // (event.type === 'contextmenu')\n newValue = Math.max(invested - 1, 0);\n }\n if (enabled && invested !== newValue) {\n onChange(invested, newValue);\n }\n event.preventDefault();\n return false;\n }\n return (\n 0) ? style.usable : '',\n ].join(' ')}\n onClick={clickListener}\n onContextMenu={clickListener}\n >\n
{getInitials(name)}
\n { enabled && ranks > 0 &&
{invested}/{ranks}
}\n
\n

{name}

\n {text}\n
\n {effect(Math.max(invested, 1))}\n
\n
\n \n );\n}\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function Siren ({ path }) {\n return (\n \n );\n}\n","export function setHash (skillsState) {\n const hashparts = [];\n for (let tree of Object.values(skillsState)) {\n for (let tier of Object.values(tree)) {\n for (let skill of Object.values(tier)) {\n if (skill.type == null) {\n hashparts.push(skill.invested || 0);\n }\n };\n };\n };\n const url = window.location.href.split('#')[0] + '#' + hashparts.join('');\n window.location.replace(url);\n};\n\nexport function getHash (skillsState) {\n const hash = window.location.href.split('#')[1] || '';\n const hashparts = hash.match(/./g) || [];\n const skills = JSON.parse(JSON.stringify(skillsState));\n for (let tree of Object.keys(skills)) {\n for (let tier of Object.keys(skills[tree])) {\n for (let skill of Object.keys(skills[tree][tier])) {\n if (skills[tree][tier][skill].type == null) {\n skills[tree][tier][skill] = { invested: parseInt(hashparts.shift() || 0) };\n } else {\n skills[tree][tier][skill] = {};\n }\n };\n };\n };\n return skills;\n};\n","import SKILLS from '@constants/skills';\n\nconst skills = {\n \"Tree One\": {\n \"0\": {\n \"?\": {\n text: \"?\",\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n effect: rank => `?`,\n },\n },\n },\n \"Tree Two\": {\n \"0\": {\n \"?\": {\n text: \"?\",\n type: SKILLS.ACTION_SKILL,\n effect: rank => `?`,\n },\n },\n },\n \"Tree Three\": {\n \"0\": {\n \"?\": {\n text: \"?\",\n type: SKILLS.ACTION_SKILL,\n effect: rank => `?`,\n },\n },\n },\n};\n\nexport default skills;\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function Beastmaster ({ path }) {\n return (\n \n );\n}\n","import SKILLS from '@constants/skills';\n\nconst skills = {\n \"Under Cover\": {\n \"0\": {\n \"Barrier\": {\n text: \"Drop a deployable Barrier that blocks incoming projectiles. Zane and his allies can shooter through the Barrier, dealing increased Gun Damage. Pressing LB or RB (controller) while Barrier is active picks up and holds the Barrier, but the size and bonuses are decreased.\",\n effect: rank => `Duration - 9 sec, Cooldown - 18 sec, Damage Amp +20%`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Adrenaline\": {\n text: \"Zane gains increased Action Skill Cooldown Rate. This bonus is based on the amount of shield he has. The more percent full, the greater the bonus.\",\n ranks: 5,\n effect: rank => `Action Skill Cooldown Rate - Up to +${rank * 4}%`,\n },\n \"Hearty Stock\": {\n text: \"Zane gains increased Maximum Shield Capacity.\",\n ranks: 5,\n effect: rank => `Max Shield +${rank * 6}%`,\n },\n \"Ready for Action\": {\n text: \"Zane gains improved Shield Recharge Rate and Shield Recharge Delay.\",\n ranks: 5,\n effect: rank => `Shield Recharge Rate +${rank * 6}%, Shield Recharge Delay -${rank * 8}%`,\n },\n },\n \"2\": {\n \"Charged Relay\": {\n text: \"Whenever Zane or an ally touches the Barrier, they gain increased Movement Speed and Fire Rate for a few seconds.\",\n ranks: 0,\n effect: rank => `Fire Rate +13%, Movement Speed +11%, Duration 8 sec after moving away from barrier`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Brainfreeze\": {\n text: \"Whenever Zane scores a Critical Hit on an enemy, there's a chance they will be Slowed.\",\n ranks: 5,\n effect: rank => `Slow Chance ${rank * 2.5}%`,\n },\n \"Stiff Upper Lip\": {\n text: \"Whenever Zane is damaged, he gains Damage Resistance against that damage type.\",\n ranks: 3,\n effect: rank => `Damage Resistance +${rank * 5}%`,\n },\n \"Rise to the Occasion\": {\n text: \"Zane gains Health Regeneration. The lower his shield is, the higher the bonus. While Zane's shields are full, he does not receive any health regeneration.\",\n ranks: 5,\n effect: rank => `Health Regeneration up to +${rank * 1}% of Max Health`,\n },\n },\n \"3\": {\n \"Nanites or Some Shite\": {\n text: \"Zane and his allies gain Health Regeneration, increased Reload Speed, and greatly improved Shield Recharge Delay while near his Barrier. The lower their health, the more health is regenerated.\",\n ranks: 0,\n effect: rank => `Health Regeneration up to 4% of Max Health, Shield Recharge Delay -33%, Reload Speed +11%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Confident Competence\": {\n text: \"While Zane's shields are active, he gains increased Gun Damage and Accuracy. This bonus is based on the amount of shields he has. The more percent full, the greater the bonus.\",\n ranks: 1,\n effect: rank => `Gun Damage up to +10%, Accuracy up to +22%`,\n },\n \"All-rounder\": {\n text: \"Zane's Barrier becomes a dome, covering all sides.\",\n ranks: 0,\n effect: rank => `Barrier cooldown +20%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Redistribution\": {\n text: \"Zane and allies near the Barrier gain increased Gun Damage for a few seconds after the Barrier takes damage.\",\n ranks: 0,\n effect: rank => `Gun Damage +9%, Duration 3 sec`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Really Expensive Jacket\": {\n text: \"Elemental damage over time effects applied to Zane have reduced duration.\",\n ranks: 1,\n effect: rank => `Elemental Effect Duration -50%`,\n },\n \"Best Served Cold\": {\n text: \"Whenever Zane kills an enemy, they create a Cryo Nova, dealing damage to all nearby enemies. This skill has a short cooldown.\",\n ranks: 5,\n effect: rank => `Damage ${rank * 3}, Cooldown 3 sec`, // TODO level scaling\n },\n \"Futility Belt\": {\n text: \"Zane gains resistance to non-elemental damage. Kill Skill - All elemental damage Zane takes is converted to non-elemental damage.\",\n ranks: 1,\n effect: rank => `Damage Reduction +22%, Duration 8 sec`,\n },\n \"Deterrence Field\": {\n text: \"Enemies that touch the Barrier take Shock Damage and are staggered.\",\n ranks: 0,\n effect: rank => `Shock Damage 18`, // TODO level scaling?\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"5\": {\n \"Refreshment\": {\n text: \"Whenever Zane damages a frozen enemy with his weapon, he gains some of that damage back as health.\",\n ranks: 3,\n effect: rank => `Life Steal ${rank * 8}% of damage dealt`,\n },\n \"Calm, Cool, Collected\": {\n text: \"Whenever Zane Freezes an enemy, his shield instantly begins recharging. If Zane's shields are already full, he regenerates health for a few seconds. If Zane's health is already full, his Action Skill Cooldowns and Durations are immediately reset.\",\n ranks: 1,\n effect: rank => `Health Regeneration up to 4% max health, Regeneration Duration 3 sec`,\n },\n \"Nerves of Steel\": {\n text: \"Zane gains increasing Accuracy and Handling. The longer his shield is full, the greater the bonus.\",\n ranks: 3,\n effect: rank => `Accuracy +${rank * 2}% per sec, Handling +${rank * 2.5}% per sec, 99 Max Stacks`,\n },\n },\n \"6\": {\n \"Distributed Denial\": {\n text: \"Zane's barrier gains the effects of his currently equipped Shield Mod. Additionally, shield effects are applied to all allies near the barrier. Bonuses to Zane are reduced.\",\n ranks: 1,\n },\n },\n },\n \"Hitman\": {\n \"0\": {\n \"SNTNL\": {\n text: \"Send into battle an automated SNTL drone that continually flies through the environment and attacks enemies with its Machine Guns. Pressing LB or RB (controller) while SNTNL is active causes it to attack the enemy under Zane's crosshairs, if any.\",\n effect: rank => `Machine Gun Damage - 10, Duration - 24 sec, Cooldown - 36 sec`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n }\n },\n \"1\": {\n \"Violent Speed\": {\n text: \"After killing an enemy, Zane gains increased Movement Speed for a few seconds.\",\n ranks: 5,\n effect: rank => `Movement Speed +${rank * 4}%, Duration 8 sec`,\n },\n \"Cold Bore\": {\n text: \"Zane gains increased Weapon Swap Speed. The next shot fired after swapping weapons deals Bonus Cryo Damage.\",\n ranks: 5,\n effect: rank => `Weapon Swap Speed +${rank * 15}%, Bonus Cryo Damage ${rank * 6}%`,\n },\n \"Violent Momentum\": {\n text: \"Zane's Gun Damage is increased while moving. The quicker he moves, the greater the Gun Damage bonus.\",\n ranks: 5,\n effect: rank => `Gun Damage +${rank * 6}% at regular walk speed`,\n },\n },\n \"2\": {\n \"Winter's Drone\": {\n text: \"Converts SNTNL's primary weapons to Cryo Damage.\",\n ranks: 0,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Cool Hand\": {\n text: \"Zane gains increased Reload Speed. After killing an enemy, Zane's Reload Speed is increased for a few seconds.\",\n ranks: 5,\n effect: rank => `Reload Speed +${rank * 2}% (+${rank * 3}% after kill), Duration 8 sec `,\n },\n \"Drone Delivery\": {\n text: \"SNTRY will occasionally drop a free grenade based on your current grenade mod while attacking enemies.\",\n ranks: 1,\n effect: rank => `Cooldown 15 sec`,\n },\n \"Salvation\": {\n text: \"After killing an enemy, Zane's weapons gain Life Steal for a few seconds.\",\n ranks: 5,\n effect: rank => `Life Steal ${rank * 4}% of damage, Duration 8 sec`,\n },\n },\n \"3\": {\n \"Bad Dose\": {\n text: \"SNTNL occasionally shoots out a beam of Radiation that weakens enemies and buffs Zane.\",\n ranks: 0,\n effect: rank => `Fire Rate +3% per enemy, Movement Speed +6% per enemy, Damage 2, Duration 12 sec, Cooldown 8 sec`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Seein' Red\": {\n text: \"Activating an Action Skill automatically activates all of Zane's kill skills.\",\n ranks: 1,\n },\n \"Static Field\": {\n text: \"SNTNL emits a static field that sends a Shock beam to nearby enemies, draining their shields and replenishing Zane's.\",\n ranks: 0,\n effect: rank => `Shield Damage 2 per sec, Cooldown 2 sec`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Boomsday\": {\n text: \"SNTNL adds a rocket pod to its primary weapons, allowing it to shoot rockets as well as machine guns.\",\n ranks: 0,\n effect: rank => `Rocket Damage 50`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Violent Violence\": {\n text: \"After killing an enemy, Zane gains increased Fire Rate for a few seconds.\",\n ranks: 5,\n effect: rank => `Fire Rate +${rank * 4}%, Cooldown 8 sec`,\n },\n \"Playing Dirty\": {\n text: \"After killing an enemy, Zane's next five shots all have a chance to fire an additional projectile.\",\n ranks: 5,\n effect: rank => `Extra Shot Chance ${rank * 10}%`,\n },\n \"Almighty Ordnance\": {\n text: \"Hold down LB or RB (controller) while SNTNL is deployed to paint a target area. SNTNL fires a missile barrage at that area, and if an enemy is killed, Almighty Ordnance's duration is reset. This can only be used once per Action Skill use.\",\n ranks: 0,\n effect: rank => `Missile Damage 25, 5 Missiles per Barrage`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"5\": {\n \"Good Misfortune\": {\n text: \"Killing an enemy increases Zane's Action Skill Duration. This skill has diminishing returns.\",\n ranks: 3,\n effect: rank => `Kill skill, initial action skill bonus duration +${rank * 5}%`,\n },\n },\n \"6\": {\n \"Death Follows Close\": {\n text: \"All of Zane's kill skills gain increased effect and duration.\",\n ranks: 1,\n effect: rank => `Kill Skill Effect +40%, Kill Skill Duration +4 sec`,\n },\n }\n },\n \"Doubled Agent\": {\n \"0\": {\n \"Digi-Clone\": {\n text: \"Spawn a Digi-Clone of Zane. The clone stays in place, but distracts and fires at enemies. Pressing LB or RB (controller) while the Clone is active causes Zane and the Clone to swap places.\",\n effect: rank => `Duration - 18 seconds, Cooldown - 26 sec`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Synchronicity\": {\n text: \"Whenever one or more of Zane's action skills are active, he gains increased Gun Damage for each active action skill.\",\n ranks: 5,\n effect: rank => `Gun Damage +${rank * 2}% per active action skill`,\n },\n \"Praemunitus\": {\n text: \"Zane and his Dig-Clone gain increased Magazine Size.\",\n ranks: 3,\n effect: rank => `Magazine Size +${rank * 4}%`,\n },\n \"Borrowed Time\": {\n text: \"Zane gains increased Action Skill Duration for every active action skill.\",\n ranks: 5,\n effect: rank => `Action Skill Duration +${rank * 4}% per active action skill`,\n },\n },\n \"2\": {\n \"Binary System\": {\n text: \"Whenever Zane swaps places with his Clone, a Cryo Nova is triggered around Zane and his Clone.\",\n ranks: 0,\n effect: rank => `Nova Damage 66`, // TODO scale with level?\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Donnybrook\": {\n text: \"Whenever Zane kills an enemy ,he and his Digi-Clone receive increased Gun Damage and gain Health Regeneration for a few seconds.\",\n ranks: 5,\n effect: rank => `Gun Damage +${rank * 2}%, Health Regen ${rank * 0.5}% of missing health, Duration 8 sec`,\n },\n \"Fractal Frags\": {\n text: \"The Digi-Clone throws a copy of Zane's current grenade mod when it is first activated. If the Digi-Clone is killed, it drops a free grenade. Killing an enemy while the Digi-Clone is active gives the Clone a chance to throw a grenade.\",\n ranks: 1,\n effect: rank => `Grenade Chance 30%`,\n },\n \"Duct Tape Mod\": {\n text: \"The first shot fired from Zane's gun has a chance to also fire a grenade. The more grenades in his capacity, the higher the chance.\",\n ranks: 5,\n effect: rank => `Grenade Chance up to ${rank * 5}%`,\n },\n },\n \"3\": {\n \"Schadenfreude\": {\n text: \"Whenever the Clone takes damage, Zane's shield is restored by a portion of that damage.\",\n ranks: 0,\n effect: rank => `Shields Restored +11% of damage`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Quick Breather\": {\n text: \"Whenever Zane swaps places with his Clone, his shield immediately begins recharging.\",\n ranks: 1,\n },\n \"Which One's Real?\": {\n text: \"Enemies are more likely to target the Clone for a few seconds after it's summoned and after swapping places.\",\n ranks: 0,\n effect: rank => `Duration 6 sec`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Dopplebanger\": {\n text: \"Hold down LB or RB (controller) to end the action skill early. When Zane's Action Skill is ended, the Clone explodes, dealing Fire Damage to all nearby enemies. The more Action Skill time remaining, the greater the damage.\",\n ranks: 0,\n effect: rank => `Damage Up to 1,326`, // TODO scale with level?\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Pocket Full of Grenades\": {\n text: \"After killing an enemy, Zane gains Grenade Regeneration for a few seconds.\",\n ranks: 3,\n effect: rank => `Grenade Regeneration ${rank * 5}%, Duration 8 sec`,\n },\n \"Old-U\": {\n text: \"Press LB or RB (controller) during Fight for Your Life if Digi-Clone is active to destroy the clone and immediately gain a Second Wind with full health.\",\n ranks: 1,\n },\n \"Supersonic Man\": {\n text: \"Whenever one or more of Zane's Action Skills are active, he gains increased Movement Speed for each active Action Skill.\",\n ranks: 3,\n effect: rank => `Movement Speed +${rank * 4}% per active action skill`,\n },\n \"Digital Distribution\": {\n text: \"If Zane takes health damage while the Clone is active, a portion of that damage is shared to his Clone instead.\",\n ranks: 0,\n effect: rank => `Shared Health Damage +75%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"5\": {\n \"Like a Ghost\": {\n text: \"Zane and his Digi-Clone gain a chance to ignore bullets. This chance is increased for a few seconds after activating an action skill. This effect stacks.\",\n ranks: 3,\n effect: rank => `Ignore Bullet Chance ${rank * 4}%, Additional Ignore Bullet Chance +${rank * 1}%, Duration 8 sec`,\n },\n \"Boom. Enhance.\": {\n text: \"Whenever Zane summons his Digi-Clone, it consumes up to 3 grenades. For every grenade consumed, the Digi-Clone gains increased Gun Damage, Max Health, Fire Rate, and Reload Speed.\",\n ranks: 1,\n effect: rank => `Gun Damage +11% per grenade, Max Health +17% per grenade, Fire Rate +17% per grenade, Reload Speed +12% per grenade`,\n },\n \"Trick of the Light\": {\n text: \"Zane deals Bonus Shock Damage to enemies that aren't targeting him.\",\n ranks: 3,\n effect: rank => `Bonus Damage ${rank * 6}% of damage dealt`,\n },\n },\n \"6\": {\n \"Double Barrel\": {\n text: \"The Clone is equipped with a copy of Zane's Current Weapon when activated. Swapping places with the Clone causes Zane and his clone to gain increased Gun Damage.\",\n ranks: 1,\n effect: rank => `Gun Damage +10%, Item Duping +100%`,\n },\n },\n },\n};\n\nexport default skills;\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./pages/BotJock/index.js","webpack:///../node_modules/offline-plugin/runtime.js","webpack:///./components/Skill/index.css","webpack:///./components/Nav/index.js","webpack:///./components/Nav/index.css","webpack:///./pages/Siren/skills.js","webpack:///./components/Footer/index.js","webpack:///./components/App/index.js","webpack:///./components/VaultHunter/index.js","webpack:///./constants/skills.js","webpack:///./components/VaultHunter/index.css","webpack:///./pages/Home/index.js","webpack:///./index.js","webpack:///../node_modules/preact-router/dist/preact-router.es.js","webpack:///./pages/Beastmaster/skills.js","webpack:///./pages/Operative/index.js","webpack:///../node_modules/preact/dist/preact.min.js","webpack:///./components/VaultHunter/investmentValidator.js","webpack:///./components/VaultHunter/reducer.js","webpack:///./components/Footer/index.css","webpack:///./pages/Home/index.css","webpack:///../node_modules/deepmerge/dist/umd.js","webpack:///./components/Skill/index.js","webpack:///./pages/Siren/index.js","webpack:///./components/VaultHunter/hashHandler.js","webpack:///./pages/BotJock/skills.js","webpack:///./pages/Beastmaster/index.js","webpack:///./pages/Operative/skills.js"],"names":["__webpack_require__","moduleId","installedModules","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","h","BotJock","_ref","_components_VaultHunter__WEBPACK_IMPORTED_MODULE_0__","discipline","skills","path","__webpack_exports__","_skills_js__WEBPACK_IMPORTED_MODULE_1__","hasSW","navigator","window","location","protocol","hostname","indexOf","install","options","registration","serviceWorker","register","handleUpdating","onUpdateStateChange","sw","state","sendEvent","onstatechange","ignoreInstalling","ignoreWaiting","onInstallStateChange","stateChangeHandler","installing","waiting","active","event","source","then","reg","onupdatefound","catch","err","Promise","reject","applyUpdate","callback","errback","getRegistration","postMessage","action","update","skill","enabled","usable","augment","actionSkill","chevron","diamond","image","ranks","skillTitle","description","effect","Nav","class","style","nav","links","map","page","link","current","preact_router__WEBPACK_IMPORTED_MODULE_0__","href","_index_css__WEBPACK_IMPORTED_MODULE_1__","_index_css__WEBPACK_IMPORTED_MODULE_1___default","_constants_skills__WEBPACK_IMPORTED_MODULE_0__","Brawl","0","Phaseslam","text","type","SKILLS","ACTION_SKILL","1","One With Nature","rank","Personal Space","Clarity","2","Arms Deal","Root to Rise","Helping Hand(s)","Blight Tiger","AUGMENT_DIAMOND","3","Fracture","Mindfulness","Find Your Center","Vigor","Revelation","AUGMENT_CHEVRON","4","Downfall","Samsara","5","Do Unto Others","Jab Cross","Guardian Angel","Glamour","6","Blitz","Mystical Assault","Phasecast","Do Harm","Fast Hands","Violent Tapestry","Alacrity","Transcend","Restless","Soul Sap","Reverberation","Ascendant","Stillness of Mind","Deliverance","From Rest","Laid Bare","Wrath","Remnant","Awakening","Tandava","Avatar","Fist of the Elements","Phasegrasp","Anima","Steady Hands","Infusion","Tempest","Illuminated Fist","Wildfire","Soulfire","The Eternal Fist","Dread","Allure","Indiscriminate","Deep Well","Catharsis","Ties That Bind","Fist Over Matter","Sustainment","Conflux","Forceful Expression","_index_css__WEBPACK_IMPORTED_MODULE_0__","_index_css__WEBPACK_IMPORTED_MODULE_0___default","footer","_pages_Home__WEBPACK_IMPORTED_MODULE_1__","_pages_Operative__WEBPACK_IMPORTED_MODULE_2__","_pages_Siren__WEBPACK_IMPORTED_MODULE_3__","_pages_Beastmaster__WEBPACK_IMPORTED_MODULE_4__","_pages_BotJock__WEBPACK_IMPORTED_MODULE_5__","App","contextKiller","preventDefault","_components_Footer__WEBPACK_IMPORTED_MODULE_3__","VaultHunter","props","_this","_Component","this","invested","componentDidMount","setState","reducer","getHash","render","_this2","_ref$name","_ref$discipline","skillChangeListenerFactory","skillName","treeIndex","treeName","tierIndex","oldValue","newValue","trees","keys","tree","green","blue","red","tier","_components_Skill__WEBPACK_IMPORTED_MODULE_1__","_extends","onChange","_components_Nav__WEBPACK_IMPORTED_MODULE_2__","onContextMenu","title","subtitle","_ref2","Component","_components_Footer__WEBPACK_IMPORTED_MODULE_1__","_index_css__WEBPACK_IMPORTED_MODULE_2__","_index_css__WEBPACK_IMPORTED_MODULE_2___default","splash","wrapper","job","preact__WEBPACK_IMPORTED_MODULE_0__","_components_App__WEBPACK_IMPORTED_MODULE_1__","elem","document","querySelector","firstElementChild","require","assign","obj","pathRankSort","a","b","index","prepareVNodeForRanking","vnode","attributes","default","segmentize","rankSegment","join","rankChild","url","replace","split","segment","charAt","length","getCurrentUrl","customHistory","getCurrentLocation","EMPTY","pathname","search","route","ROUTERS","canRoute","history","setUrl","routeTo","didRoute","i$1","subscribers","routeFromLink","node","getAttribute","target","match","handleLinkClick","e","button","currentTarget","prevent","stopImmediatePropagation","stopPropagation","delegateLinkHandler","ctrlKey","metaKey","altKey","shiftKey","String","nodeName","toUpperCase","__preactattr_","for","hasAttribute","parentNode","Router","Link","EMPTY$1","eventListenersInitialized","Component$$1","addEventListener","__proto__","constructor","shouldComponentUpdate","static","getMatchingChildren","children","_didRoute","updating","forceUpdate","componentWillMount","push","this$1","unlisten","listen","componentWillUnmount","splice","componentWillUpdate","componentDidUpdate","invoke","filter","sort","matches","opts","ret","decodeURIComponent","slice","max","Math","param","flags","plus","star","val","exec","newProps","ref","Boolean","ref$1","previous","previousUrl","router","onClick","Route","component","Tree One","?","Tree Two","Tree Three","Operative","W","arguments","P","pop","T","M","__d","V","debounceRendering","D","x","splitText","_componentConstructor","__n","toLowerCase","u","defaultProps","removeChild","cssText","E","test","innerHTML","__html","substring","_","removeEventListener","__l","removeAttribute","removeAttributeNS","setAttributeNS","setAttribute","className","f","A","shift","afterMount","H","R","ownerSVGElement","B","appendChild","_component","nodeValue","createTextNode","replaceChild","v","N","createElementNS","createElement","firstChild","nextSibling","dangerouslySetInnerHTML","y","childNodes","g","w","C","k","__k","trim","insertBefore","lastChild","previousSibling","F","U","__b","__x","__r","getDerivedStateFromProps","base","componentWillReceiveProps","context","__c","__p","syncComponentUpdates","__s","S","getChildContext","getSnapshotBeforeUpdate","L","__u","afterUpdate","__h","beforeUnmount","resolve","setTimeout","cloneElement","createRef","rerender","investmentValidator","totalSpent","treeTotals","_i","_Object$values","values","treeTotal","_i2","_Object$values2","tierTotal","_i3","_Object$values3","_action$treeName","_deepmerge","newSkills","deepmerge","skillChangeTotals","setHash","_objectSpread","loadSkillsTotals","heart","moveHeart","isSpecial","stringValue","toString","$$typeof","REACT_ELEMENT_TYPE","isReactElement","cloneUnlessOtherwiseSpecified","clone","isMergeableObject","Array","isArray","defaultArrayMerge","concat","element","mergeObject","destination","forEach","customMerge","getMergeFunction","arrayMerge","sourceIsArray","targetIsArray","sourceAndTargetTypesMatch","isNonNullObject","all","array","Error","reduce","prev","next","factory","Skill","clickListener","min","_ref$text","_ref$ranks","_ref$invested","_ref$effect","_ref$type","_ref$enabled","_ref$onChange","isAugment","includes","shapeStyle","string","getInitials","Siren","skillsState","hashparts","JSON","parse","stringify","_i4","_Object$keys","_i5","_Object$keys2","_i6","_Object$keys3","parseInt","Beastmaster","Under Cover","Barrier","Adrenaline","Hearty Stock","Ready for Action","Charged Relay","Brainfreeze","Stiff Upper Lip","Rise to the Occasion","Nanites or Some Shite","Confident Competence","All-rounder","Redistribution","Really Expensive Jacket","Best Served Cold","Futility Belt","Deterrence Field","Refreshment","Calm, Cool, Collected","Nerves of Steel","Distributed Denial","Hitman","SNTNL","Violent Speed","Cold Bore","Violent Momentum","Winter's Drone","Cool Hand","Drone Delivery","Salvation","Bad Dose","Seein' Red","Static Field","Boomsday","Violent Violence","Playing Dirty","Almighty Ordnance","Good Misfortune","Death Follows Close","Doubled Agent","Digi-Clone","Synchronicity","Praemunitus","Borrowed Time","Binary System","Donnybrook","Fractal Frags","Duct Tape Mod","Schadenfreude","Quick Breather","Which One's Real?","Dopplebanger","Pocket Full of Grenades","Old-U","Supersonic Man","Digital Distribution","Like a Ghost","Boom. Enhance.","Trick of the Light","Double Barrel"],"mappings":"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","file":"bundle.280e2806.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function BotJock ({ path }) {\n return (\n \n );\n}\n","var appCacheIframe;\n\nfunction hasSW() {\n \n return 'serviceWorker' in navigator && (\n window.location.protocol === 'https:' ||\n window.location.hostname === 'localhost' ||\n window.location.hostname.indexOf('127.') === 0\n );\n \n}\n\nfunction install(options) {\n options || (options = {});\n\n \n if (hasSW()) {\n var registration = navigator.serviceWorker\n .register(\n \"/sw.js\", {\n \n \n }\n );\n\n \n var handleUpdating = function(registration) {\n var sw = registration.installing || registration.waiting;\n var ignoreInstalling;\n var ignoreWaiting;\n\n // No SW or already handled\n if (!sw || sw.onstatechange) return;\n\n var stateChangeHandler;\n\n // Already has SW\n if (registration.active) {\n onUpdateStateChange();\n stateChangeHandler = onUpdateStateChange;\n } else {\n onInstallStateChange();\n stateChangeHandler = onInstallStateChange;\n }\n\n ignoreInstalling = true;\n if (registration.waiting) {\n ignoreWaiting = true;\n }\n\n sw.onstatechange = stateChangeHandler;\n\n function onUpdateStateChange() {\n switch (sw.state) {\n case 'redundant': {\n sendEvent('onUpdateFailed');\n sw.onstatechange = null;\n } break;\n\n case 'installing': {\n if (!ignoreInstalling) {\n sendEvent('onUpdating');\n }\n } break;\n\n case 'installed': {\n if (!ignoreWaiting) {\n sendEvent('onUpdateReady');\n }\n } break;\n\n case 'activated': {\n sendEvent('onUpdated');\n sw.onstatechange = null;\n } break;\n }\n }\n\n function onInstallStateChange() {\n switch (sw.state) {\n case 'redundant': {\n // Failed to install, ignore\n sw.onstatechange = null;\n } break;\n\n case 'installing': {\n // Installing, ignore\n } break;\n\n case 'installed': {\n // Installed, wait activation\n } break;\n\n case 'activated': {\n sendEvent('onInstalled');\n sw.onstatechange = null;\n } break;\n }\n }\n };\n\n var sendEvent = function(event) {\n if (typeof options[event] === 'function') {\n options[event]({\n source: 'ServiceWorker'\n });\n }\n };\n\n registration.then(function(reg) {\n // WTF no reg?\n if (!reg) return;\n\n // Installed but Shift-Reloaded (page is not controller by SW),\n // update might be ready at this point (more than one tab opened).\n // Anyway, if page is hard-reloaded, then it probably already have latest version\n // but it's not controlled by SW yet. Applying update will claim this page\n // to be controlled by SW. Maybe set flag to not reload it?\n // if (!navigator.serviceWorker.controller) return;\n\n handleUpdating(reg);\n reg.onupdatefound = function() {\n handleUpdating(reg);\n };\n }).catch(function(err) {\n sendEvent('onError');\n return Promise.reject(err);\n });\n \n\n return;\n }\n \n\n \n}\n\nfunction applyUpdate(callback, errback) {\n \n if (hasSW()) {\n navigator.serviceWorker.getRegistration().then(function(registration) {\n if (!registration || !registration.waiting) {\n errback && errback();\n return;\n }\n\n registration.waiting.postMessage({\n action: 'skipWaiting'\n });\n\n callback && callback();\n });\n\n return;\n }\n \n\n \n}\n\nfunction update() {\n \n if (hasSW()) {\n navigator.serviceWorker.getRegistration().then(function(registration) {\n if (!registration) return;\n return registration.update();\n });\n }\n \n\n \n}\n\n\n\nexports.install = install;\nexports.applyUpdate = applyUpdate;\nexports.update = update;\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"skill\":\"_3JH8h\",\"enabled\":\"_1mLSi\",\"usable\":\"_1xemn\",\"augment\":\"_3VkFk\",\"actionSkill\":\"-z8wv\",\"chevron\":\"_2t_-G\",\"diamond\":\"_2ej0d\",\"image\":\"_8ejWg\",\"ranks\":\"_3DD7O\",\"skillTitle\":\"_394yV\",\"description\":\"_1S9-f\",\"effect\":\"oiyDq\"};","import { Link } from 'preact-router';\nimport style from './index.css';\n\nexport default function Nav ({ path }) {\n const pages = [\n { name: 'Zane', path: '/operative' },\n { name: 'Amara', path: '/siren' },\n { name: 'FL4K', path: '/beastmaster' },\n { name: 'Moze', path: '/bot-jock' },\n ];\n return (\n \n );\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"nav\":\"_1EyP2\",\"links\":\"_2oe-I\",\"link\":\"_3aviv\",\"current\":\"TlaNZ\"};","import SKILLS from '@constants/skills';\n\n/* eslint-disable quotes */\nconst skills = {\n \"Brawl\": {\n \"0\": {\n \"Phaseslam\": {\n text: \"Amara leaps into the air and Slams the ground, dealing damage to all nearby enemies and knocking them up.\",\n effect: rank => `Damage - 141, Cooldown: 26 Seconds`, // TODO damage scaling by level\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"One With Nature\": {\n ranks: 5,\n text: \"Gain Max Health and Elemental Damage Resistance to your Action Skill Element.\",\n effect: rank => `Max Health +${rank * 5}%, Elemental Damage Reduction +${rank * 12}%`,\n },\n \"Personal Space\": {\n ranks: 3,\n text: \"Shots deal Bonus Damage based on distance to target - dealing more damage when close.\",\n effect: rank => `Up to ${rank * 11}% bonus damage`,\n },\n \"Clarity\": {\n ranks: 5,\n text: \"Constantly regenerate health, increasing regeneration the lower your health is. Bonus is doubled after using an Action Skill.\",\n effect: rank => `Health Regen up to +${rank * 1}% per second, Duration: 5 seconds`,\n },\n },\n \"2\": {\n \"Arms Deal\": {\n ranks: 5,\n text: \"Deal increased Splash Damage, and take Reduced Splash Damage.\",\n effect: rank => `Splash Damage +${rank * 3}%, Splash Damage Reduction +${rank * 3}%`,\n },\n \"Root to Rise\": {\n ranks: 5,\n text: \"Gain increased Max Health\",\n effect: rank => `Max Health +${rank * 5}%`,\n },\n \"Helping Hand(s)\": {\n ranks: 5,\n text: \"After using Action Skill, Amara's arms remain active and grant Damage Reduction.\",\n effect: rank => `Damage Reduction +${rank * 4}%, Duration 8 sec`,\n },\n \"Blight Tiger\": {\n ranks: 0,\n text: \"Converts Amara's Action Skill to Corrosive Damage. This does not take effect until after Amara uses her Action Skill.\",\n effect: rank => ``,\n type: SKILLS.AUGMENT_DIAMOND,\n },\n },\n \"3\": {\n \"Fracture\": {\n ranks: 0,\n text: \"Amara summons a Handful of Fists that erupt from the ground, dealing damage in front of Amara.\",\n effect: rank => `Damage 124, Cooldown 26 sec`,\n type: SKILLS.ACTION_SKILL,\n },\n \"Mindfulness\": {\n ranks: 3,\n text: \"When taking damage, gain a Stack of Mindfulness. For every Stack, gain improved Shield Regeneration Delay and Movement Speed. Stacks decay quickly.\",\n effect: rank => `Movement Speed +${rank * 1.4}%, Shield Regeneration Delay -${rank * 2.5}%, 25 Max Mindfulness Stacks, Duration 5 sec`,\n },\n \"Find Your Center\": {\n ranks: 1,\n text: \"Gain increased Melee Damage. After using Action Skill, gain increased Melee Range.\",\n effect: rank => `Melee Damage +22%, Melee Range +50%, Duration 8 sec`,\n },\n \"Vigor\": {\n ranks: 3,\n text: \"Killing an enemy with an Action Skill grants all allies increased Movement Speed, and can be stacked.\",\n effect: rank => `Team Movement Speed +${rank * 2}%, Duration 8 sec`,\n },\n \"Revelation\": {\n ranks: 0,\n text: \"Amara's Action Skill now creates a Nova when it damages enemies, dealing damage to all nearby enemies.\",\n effect: rank => `Nova Damage 41, Action Skill Damage -15%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Downfall\": {\n ranks: 0,\n text: \"Amara leaps into the air and shoots an Elemental Beam below her, followed by a Slam.\",\n effect: rank => `Damage 141, Beam Damage 21 per sec, Cooldown 36 sec`,\n type: SKILLS.ACTION_SKILL,\n },\n \"Samsara\": {\n ranks: 3,\n text: \"When dealing damage to an enemy with Action Skills, adds a Stack of Samsara. Every stack gains increased Gun Damage and Health Regeneration. Stacks decay quickly.\",\n effect: rank => `Gun Damage +${rank * 2}% per enemy, Health Regen +${rank * 1}% of Max Health per stack, 25 Max Samsara Stacks, Duration 8 sec`,\n },\n },\n \"5\": {\n \"Do Unto Others\": {\n ranks: 1,\n text: \"Upon taking damage, automatically throw an Energy Orb back at enemy, dealing Action Skill Elemental Damage.\",\n effect: rank => `Projectile Damage 17, Cooldown 8 sec`,\n },\n \"Jab Cross\": {\n ranks: 5,\n text: \"When dealing melee damage to an enemy, gain increased Action Skill Damage and increased Weapon Damage.\",\n effect: rank => `Weapon Damage +${rank * 10}%, Action Skill Damage +${rank * 11}%, Duration 20 sec`,\n },\n \"Guardian Angel\": {\n ranks: 1,\n text: \"Upon entering Fight For Your Life, gain immediate Second Wind that restores health, and creates an Action Skill Elemental Nova that knocks back enemies.\",\n effect: rank => `Max Health Restored 100% of Max Health, Cooldown 60 sec`,\n },\n \"Glamour\": {\n ranks: 0,\n text: \"Enemies damaged by Amara's Action Skill become confused and attack their allies, but Action Skill Cooldown is increased. If enemies are target of Phasegrasp, nearby enemies become confused.\",\n effect: rank => `Damage -60%, Confuse Duration 6 sec, Cooldown +20%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"6\": {\n \"Blitz\": {\n ranks: 1,\n text: \"Press in on Right Stick for Melee Override, dashing a short distance forward to perform a special melee strike dealing Elemental Melee Damage. Cooldown instantly resets if enemy is killed by Blitz.\",\n effect: rank => `Cooldown 10 sec`,\n },\n },\n },\n \"Mystical Assault\": {\n \"0\": {\n \"Phasecast\": {\n text: \"Phasecast - Amara sends forward an Astral Projection of herself, dealing damage to everything in its path.\",\n effect: rank => `Damage - 133, Cooldown: 22 Seconds`, // TODO damage scaling by level\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Do Harm\": {\n ranks: 5,\n text: \"Grants Rush stacks after killing an enemy, which are consumed when using an Action Skill. Action Skill Damage is increased per stack of Rush consumed.\",\n effect: rank => `Action Skill Damage +${rank * 0.6}% per stack, 10 Max Rush Stacks, Duration 20 sec`,\n },\n \"Fast Hands\": {\n ranks: 3,\n text: \"Reload Speed, Weapon Swap Speed, and Mode Switch Speed are improved.\",\n effect: rank => `Reload Speed +${rank * 4}%, Weapon Swap Speed +${rank * 22}%, Mode Switch Speed +${rank * 21}%`,\n },\n \"Violent Tapestry\": {\n ranks: 5,\n text: \"Applying Elemental Effects grant Rush Stacks. For every stack of Rush consumed from an Action Skill, Elemental Effect Chance is increased.\",\n effect: rank => `Effect Chance +${rank * 0.6}%, 10 Max Rush Stacks, Duration 20 sec`,\n },\n },\n \"2\": {\n \"Alacrity\": {\n ranks: 5,\n text: \"Gain increased Reload Speed for every stack of Rush. For every stack of Rush consumed from an Action Skill, this bonus is increased.\",\n effect: rank => `Reload Speed +${rank * 0.4}% per stack (+${rank * 0.6}% after action skill), Duration 8 sec`,\n },\n \"Transcend\": {\n ranks: 3,\n text: \"Gain increased Accuracy and Critical Hit Bonus after activating an Action Skill.\",\n effect: rank => `Accuracy +${rank * 11}%, Critical Hit Bonus +${rank * 9}%, Duration 8 sec`,\n },\n \"Restless\": {\n ranks: 5,\n text: \"Gain increased Action Skill Cooldown Rate.\",\n effect: rank => `Cooldown Rate +${rank * 4}%`,\n },\n \"Soul Sap\": {\n ranks: 0,\n text: \"A portion of all damage dealt by Action Skills is returned to her or nearby allies as Health.\",\n effect: rank => `Life Steal +30% of Skill damage dealt`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"3\": {\n \"Reverberation\": {\n ranks: 0,\n text: \"Amara sends forward an Astral Projection of herself that damages everything in its path. Deals increased damage for every enemy hit.\",\n effect: rank => `Damage 116, Damage Bonus +50% per enemy hit, Cooldown 24 sec`,\n type: SKILLS.ACTION_SKILL,\n },\n \"Ascendant\": {\n ranks: 1,\n text: \"All Action Skill Augments gain increased effects.\",\n effect: rank => `Soul Sap Lifesteal +20%, Allure Radius +100%, Glamour Duration +50%, Bright Star Damage +25%, Stillness of Mind breaks 0.75 sec after being damaged`,\n },\n \"Stillness of Mind\": {\n ranks: 0,\n text: \"Enemies damaged by Action Skills becomes Phaselocked until they are damaged or duration ends, but Action Skill Cooldown is increased. If an enemy is the target of Phasegrasp, nearby enemies are also Phaselocked.\",\n effect: rank => `Damage -35%, Max Duration 6 sec, Cooldown +15%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Deliverance\": {\n ranks: 0,\n text: \"Amara sends forward an Astral Projection of herself that deals damage to everything in its path. Upon hitting enemies, it releases homing Elemental Projectiles that trigger Action Skill Elemental Effect on enemies.\",\n effect: rank => `Damage 124, Elemental Projectiles 3 per enemy hit, Cooldown 24 sec`,\n type: SKILLS.ACTION_SKILL,\n },\n \"From Rest\": {\n ranks: 3,\n text: \"Gain improved Fire Rate and Charge Time.\",\n effect: rank => `Fire Rate +${rank * 4}%, Charge Time +${rank * 26}%`,\n },\n \"Laid Bare\": {\n ranks: 3,\n text: \"Enemies take increased damage from all sources after being damaged by your Action Skill.\",\n effect: rank => `Damage increase +${rank * 5}%, Duration 8 sec`,\n },\n \"Wrath\": {\n ranks: 3,\n text: \"Gain increased Gun Damage. Effect is increased after activating Action Skill\",\n effect: rank => `Gun Damage +${rank * 3}% (+${rank * 5}% after Action Skill Use), Duration 8 sec`,\n },\n },\n \"5\": {\n \"Remnant\": {\n ranks: 3,\n text: \"Creates a Homing Projectile after killing an enemy with a Gun or Action Skill, and deals Action Skill Elemental Damage plus Overkill Damage.\",\n effect: rank => `Remnant Damage ${rank * 33}`, // TODO level scaling?\n },\n \"Awakening\": {\n ranks: 3,\n text: \"Rush stacks gain increased effectiveness.\",\n effect: rank => `Rush Stack Effectiveness +${rank * 10}%`,\n },\n \"Tandava\": {\n ranks: 0,\n text: \"Amara sends forward an Astral Projection of herself that explodes when it hits a target, damaging all nearby enemies.\",\n effect: rank => `Damage: 166, Cooldown 28 sec`,\n type: SKILLS.ACTION_SKILL,\n },\n },\n \"6\": {\n \"Avatar\": {\n ranks: 1,\n text: \"Action Skills can be activated while cooling down. Can only be used once per completed cooldown. Increases Max Rush Stacks\",\n effect: rank => `Bonus Rush Stacks +10`,\n },\n },\n },\n \"Fist of the Elements\": {\n \"0\": {\n \"Phasegrasp\": {\n text: \"Amara summons a giant fist that bursts from the ground and locks the targeted enemy in place for a few seconds. Enemies immune to being grasped take instant damage instead.\",\n effect: rank => `Skill Duration - 7 sec, Cooldown - 13 sec, Grasp Immune Damage - 40`, // TODO damage scaling by level\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Anima\": {\n ranks: 5,\n text: \"Elemental Effects deal increased damage over time and increase duration. Action Skill Elemental Effects deal increased damage.\",\n effect: rank => `Elemental Effect Damage +${rank * 2}%, Elemental Effect Duration +${rank * 10}%, Action Skill Elemental Effect Damage +${rank * 6}%`,\n },\n \"Steady Hands\": {\n ranks: 3,\n text: \"Gain increased Weapon Handling and Accuracy.\",\n effect: rank => `Handling +${rank * 12}%, Accuracy +${rank * 10}%`,\n },\n \"Infusion\": {\n ranks: 5,\n text: \"Convert a portion of damage dealt by weapons into Action Skill Element.\",\n effect: rank => `Converted Damage ${rank * 4}%`,\n },\n },\n \"2\": {\n \"Tempest\": {\n ranks: 5,\n text: \"Deal increased Elemental Damage. Shock Damage is further increased.\",\n effect: rank => `Shock Damage +${rank * 8}%, Elemental Damage +${rank * 4}%`,\n },\n \"Illuminated Fist\": {\n ranks: 1,\n text: \"Gain increased Melee Damage, and Melee Damage is converted to Action Skill Element.\",\n effect: rank => `Melee Damage +28%`,\n },\n \"Wildfire\": {\n ranks: 5,\n text: \"Whenever Elemental Effects are applies to an enemy, increases chance to spread to a nearby enemy.\",\n effect: rank => `Spread Chance ${rank * 8}%`,\n },\n \"Soulfire\": {\n ranks: 0,\n text: \"Converts Action Skill to Fire Damage. This does not take effect until after Action Skill is used.\",\n type: SKILLS.AUGMENT_DIAMOND,\n },\n },\n \"3\": {\n \"The Eternal Fist\": {\n ranks: 0,\n text: \"Amara summons a giant fist that bursts into the ground and locks targeted enemy in place. If Grasped enemy is killed, up to 3 new targets can be Grasped as well.\",\n effect: rank => `Bonus Targets up to +4, Cooldown 23 sec, Grasp Immune Damage 66`,\n type: SKILLS.ACTION_SKILL,\n },\n \"Dread\": {\n ranks: 1,\n text: \"Gun Damage is increased after an enemy is Grasped. If a Grasped Enemy is killed, current weapon is instantly reloaded.\",\n effect: rank => `Weapon Damage +10%, Duration 8 sec`,\n },\n \"Allure\": {\n ranks: 0,\n text: \"Amara's Action Skill creates singularities that pull in enemies.\",\n effect: rank => `Action Skill Damage -25%, Duration 2.5 sec`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Indiscriminate\": {\n ranks: 3,\n text: \"Bullets that damage enemies have a chance to ricochet and deal decreased damage to nearby enemies. Chance and Damage are increased if target is affected by Phasegrasp or Stillness of Mind.\",\n effect: rank => `Ricochet Chance ${rank * 10}%, Ricochet Damage -${60 - rank * 10}%, Action Skill Ricochet Chance ${rank * 20}%, Action Skill Ricochet Damage -${30 - rank * 5}%`, // TODO check this\n },\n \"Deep Well\": {\n ranks: 1,\n text: \"Gain increased Magazine Size with elemental weapons.\",\n effect: rank => `Magazine Size +20%`,\n },\n \"Catharsis\": {\n ranks: 3,\n text: \"When Elemental Effect is applied on an enemy that dies, enemy explodes an deals attuned element damage along with any other inflicted elements.\",\n effect: rank => `Damage ${rank * 13}, Cooldown 8 sec`, // TODO level scaling\n },\n \"Ties That Bind\": {\n ranks: 0,\n text: \"Amara summons a giant fist that bursts from the ground and locks targeted enemy in place. Enemies near Grasped target are linked, and any damage dealt to a linked target is shared between all links.\",\n effect: rank => `Link Damage 35% of damage dealt, Cooldown 17 sec, Grasp Immune Damage 80`,\n type: SKILLS.ACTION_SKILL,\n },\n },\n \"5\": {\n \"Fist Over Matter\": {\n ranks: 0,\n text: \"Amara summons a giant fist that bursts from the ground and locks targeted enemy in place. After Grasping, large fists appear to smash the area, dealing damage to nearby enemies.\",\n effect: rank => `Damage 21, Cooldown 31 sec, Grasp Immune Damage 93`,\n type: SKILLS.ACTION_SKILL,\n },\n \"Sustainment\": {\n ranks: 5,\n text: \"Gain Life Steal whenever Elemental Damage is dealt with weapon.\",\n effect: rank => `Life Steal +${rank * 4}%`,\n },\n \"Conflux\": {\n ranks: 5,\n text: \"When Elemental Effect is applied on an enemy, gain chance to randomly Electrocute, Burn, or Melt that enemy.\",\n effect: rank => `Extra Effect Chance ${rank * 7}%`,\n },\n },\n \"6\": {\n \"Forceful Expression\": {\n ranks: 1,\n text: \"Guns deal Bonus Elemental Damage based on Action Skill Element\",\n effect: rank => `Bonus Elemental Damage 11% of damage dealt`,\n },\n },\n },\n};\n\nexport default skills;\n","import style from './index.css';\n\nexport default function () {\n return (\n \n );\n}\n","import { Router } from 'preact-router';\n\nimport Home from '@pages/Home';\nimport Operative from '@pages/Operative';\nimport Siren from '@pages/Siren';\nimport Beastmaster from '@pages/Beastmaster';\nimport BotJock from '@pages/BotJock';\n\nconst App = () =>\n (\n \n \n \n \n \n );\n\nexport default App;\n","// import { useReducer } from 'preact/hooks'; // Downgraded from Preact 10 for compat with @pwa/cli\nimport { Component } from 'preact';\nimport Skill from '@components/Skill';\nimport Nav from '@components/Nav';\nimport Footer from '@components/Footer';\nimport { getHash } from './hashHandler';\nimport reducer from './reducer';\nimport style from './index.css';\n\nfunction contextKiller (event) {\n event.preventDefault();\n return false;\n}\n\nexport default class VaultHunter extends Component {\n constructor (props) {\n super(props);\n this.state = {\n invested: [0, 0, 0],\n skills: props.skills || {},\n };\n }\n\n componentDidMount () {\n this.setState(reducer(this.state, {\n type: 'loadSkills',\n skills: getHash(this.state.skills),\n }));\n }\n\n render ({\n name = 'Unnamed',\n discipline = 'Classless',\n path\n }) {\n const skillChangeListenerFactory = (skillName, treeIndex, treeName, tierIndex) => {\n return (oldValue, newValue) => {\n this.setState(reducer(this.state, {\n type: 'skillChange',\n skillName,\n treeIndex,\n treeName,\n tierIndex,\n newValue,\n oldValue,\n }));\n };\n };\n\n const trees =\n Object.keys(this.state.skills).map((treeName, treeIndex) => {\n return (\n
\n \n

{ treeName }

\n
\n { Object.keys(this.state.skills[treeName]).map((tier, tierIndex) =>\n
\n { Object.keys(this.state.skills[treeName][tier]).map(skillName =>\n = 5 * tierIndex - 5}\n onChange={skillChangeListenerFactory(skillName, treeIndex, treeName, tierIndex)}\n />\n ) }\n
\n ) }\n
\n
\n );\n });\n\n return (\n
\n
\n );\n }\n}\n","export default {\n ACTION_SKILL: 1,\n AUGMENT_CHEVRON: 2,\n AUGMENT_DIAMOND: 3,\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"VaultHunter\":\"_2zgqJ\",\"title\":\"_17kLY\",\"subtitle\":\"_3J3hw\",\"trees\":\"_3ek45\",\"tier\":\"_3Ch4X\",\"treeName\":\"_1WAM2\",\"tree\":\"gRWZY\",\"skills\":\"_2Su0b\",\"green\":\"-Pl7G\",\"blue\":\"_1nm1I\",\"red\":\"_3T1pZ\"};","import { Link } from 'preact-router';\nimport Footer from '@components/Footer';\nimport style from './index.css';\n\nexport default function () {\n const pages = [\n { name: 'Zane', job: 'the Operative', path: '/operative' },\n { name: 'Amara', job: 'the Siren', path: '/siren' },\n { name: 'FL4K', job: 'the Beastmaster', path: '/beastmaster' },\n { name: 'Moze', job: 'the Bot Jock', path: '/bot-jock' },\n ];\n return (\n
\n
\n
\n

Borderlands 3 skill calculator

\n { pages.map(page => {\n return (\n \n
\n {page.name}\n
\n {page.job}\n
\n
\n \n );\n }) }\n
\n
\n
\n
\n );\n}\n","import { h, render } from 'preact';\nimport App from '@components/App';\nimport './index.css';\n\nlet elem = document.querySelector('#app');\nlet root = render(, elem, elem.firstElementChild);\n\nif (process.env.NODE_ENV === 'development' && module.hot) {\n // enable preact devtools\n require('preact/debug');\n // respond to HMR updates\n module.hot.accept('@components/App', New => {\n New = require('@components/App').default;\n root = render(, elem, root);\n });\n} else if (process.env.NODE_ENV === 'production') {\n // Service Worker registration\n require('offline-plugin/runtime').install();\n}\n","import { Component, cloneElement, h } from 'preact';\n\nvar EMPTY$1 = {};\n\nfunction assign(obj, props) {\n\t// eslint-disable-next-line guard-for-in\n\tfor (var i in props) {\n\t\tobj[i] = props[i];\n\t}\n\treturn obj;\n}\n\nfunction exec(url, route, opts) {\n\tvar reg = /(?:\\?([^#]*))?(#.*)?$/,\n\t\tc = url.match(reg),\n\t\tmatches = {},\n\t\tret;\n\tif (c && c[1]) {\n\t\tvar p = c[1].split('&');\n\t\tfor (var i=0; i b.rank) ? -1 :\n\t\t(a.index - b.index)\n\t);\n}\n\n// filter out VNodes without attributes (which are unrankeable), and add `index`/`rank` properties to be used in sorting.\nfunction prepareVNodeForRanking(vnode, index) {\n\tvnode.index = index;\n\tvnode.rank = rankChild(vnode);\n\treturn vnode.attributes;\n}\n\nfunction segmentize(url) {\n\treturn url.replace(/(^\\/+|\\/+$)/g, '').split('/');\n}\n\nfunction rankSegment(segment) {\n\treturn segment.charAt(0)==':' ? (1 + '*+?'.indexOf(segment.charAt(segment.length-1))) || 4 : 5;\n}\n\nfunction rank(path) {\n\treturn segmentize(path).map(rankSegment).join('');\n}\n\nfunction rankChild(vnode) {\n\treturn vnode.attributes.default ? 0 : rank(vnode.attributes.path);\n}\n\nvar customHistory = null;\n\nvar ROUTERS = [];\n\nvar subscribers = [];\n\nvar EMPTY = {};\n\nfunction isPreactElement(node) {\n\treturn node.__preactattr_!=null || typeof Symbol!=='undefined' && node[Symbol.for('preactattr')]!=null;\n}\n\nfunction setUrl(url, type) {\n\tif ( type === void 0 ) type='push';\n\n\tif (customHistory && customHistory[type]) {\n\t\tcustomHistory[type](url);\n\t}\n\telse if (typeof history!=='undefined' && history[type+'State']) {\n\t\thistory[type+'State'](null, null, url);\n\t}\n}\n\n\nfunction getCurrentUrl() {\n\tvar url;\n\tif (customHistory && customHistory.location) {\n\t\turl = customHistory.location;\n\t}\n\telse if (customHistory && customHistory.getCurrentLocation) {\n\t\turl = customHistory.getCurrentLocation();\n\t}\n\telse {\n\t\turl = typeof location!=='undefined' ? location : EMPTY;\n\t}\n\treturn (\"\" + (url.pathname || '') + (url.search || ''));\n}\n\n\n\nfunction route(url, replace) {\n\tif ( replace === void 0 ) replace=false;\n\n\tif (typeof url!=='string' && url.url) {\n\t\treplace = url.replace;\n\t\turl = url.url;\n\t}\n\n\t// only push URL into history if we can handle it\n\tif (canRoute(url)) {\n\t\tsetUrl(url, replace ? 'replace' : 'push');\n\t}\n\n\treturn routeTo(url);\n}\n\n\n/** Check if the given URL can be handled by any router instances. */\nfunction canRoute(url) {\n\tfor (var i=ROUTERS.length; i--; ) {\n\t\tif (ROUTERS[i].canRoute(url)) { return true; }\n\t}\n\treturn false;\n}\n\n\n/** Tell all router instances to handle the given URL. */\nfunction routeTo(url) {\n\tvar didRoute = false;\n\tfor (var i=0; i 0;\n\t};\n\n\t/** Re-render children with a new URL to match against. */\n\tRouter.prototype.routeTo = function routeTo (url) {\n\t\tthis._didRoute = false;\n\t\tthis.setState({ url: url });\n\n\t\t// if we're in the middle of an update, don't synchronously re-route.\n\t\tif (this.updating) { return this.canRoute(url); }\n\n\t\tthis.forceUpdate();\n\t\treturn this._didRoute;\n\t};\n\n\tRouter.prototype.componentWillMount = function componentWillMount () {\n\t\tROUTERS.push(this);\n\t\tthis.updating = true;\n\t};\n\n\tRouter.prototype.componentDidMount = function componentDidMount () {\n\t\tvar this$1 = this;\n\n\t\tif (customHistory) {\n\t\t\tthis.unlisten = customHistory.listen(function (location) {\n\t\t\t\tthis$1.routeTo((\"\" + (location.pathname || '') + (location.search || '')));\n\t\t\t});\n\t\t}\n\t\tthis.updating = false;\n\t};\n\n\tRouter.prototype.componentWillUnmount = function componentWillUnmount () {\n\t\tif (typeof this.unlisten==='function') { this.unlisten(); }\n\t\tROUTERS.splice(ROUTERS.indexOf(this), 1);\n\t};\n\n\tRouter.prototype.componentWillUpdate = function componentWillUpdate () {\n\t\tthis.updating = true;\n\t};\n\n\tRouter.prototype.componentDidUpdate = function componentDidUpdate () {\n\t\tthis.updating = false;\n\t};\n\n\tRouter.prototype.getMatchingChildren = function getMatchingChildren (children, url, invoke) {\n\t\treturn children\n\t\t\t.filter(prepareVNodeForRanking)\n\t\t\t.sort(pathRankSort)\n\t\t\t.map( function (vnode) {\n\t\t\t\tvar matches = exec(url, vnode.attributes.path, vnode.attributes);\n\t\t\t\tif (matches) {\n\t\t\t\t\tif (invoke !== false) {\n\t\t\t\t\t\tvar newProps = { url: url, matches: matches };\n\t\t\t\t\t\tassign(newProps, matches);\n\t\t\t\t\t\tdelete newProps.ref;\n\t\t\t\t\t\tdelete newProps.key;\n\t\t\t\t\t\treturn cloneElement(vnode, newProps);\n\t\t\t\t\t}\n\t\t\t\t\treturn vnode;\n\t\t\t\t}\n\t\t\t}).filter(Boolean);\n\t};\n\n\tRouter.prototype.render = function render (ref, ref$1) {\n\t\tvar children = ref.children;\n\t\tvar onChange = ref.onChange;\n\t\tvar url = ref$1.url;\n\n\t\tvar active = this.getMatchingChildren(children, url, true);\n\n\t\tvar current = active[0] || null;\n\t\tthis._didRoute = !!current;\n\n\t\tvar previous = this.previousUrl;\n\t\tif (url!==previous) {\n\t\t\tthis.previousUrl = url;\n\t\t\tif (typeof onChange==='function') {\n\t\t\t\tonChange({\n\t\t\t\t\trouter: this,\n\t\t\t\t\turl: url,\n\t\t\t\t\tprevious: previous,\n\t\t\t\t\tactive: active,\n\t\t\t\t\tcurrent: current\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn current;\n\t};\n\n\treturn Router;\n}(Component));\n\nvar Link = function (props) { return (\n\th('a', assign({ onClick: handleLinkClick }, props))\n); };\n\nvar Route = function (props) { return h(props.component, props); };\n\nRouter.subscribers = subscribers;\nRouter.getCurrentUrl = getCurrentUrl;\nRouter.route = route;\nRouter.Router = Router;\nRouter.Route = Route;\nRouter.Link = Link;\n\nexport { subscribers, getCurrentUrl, route, Router, Route, Link };export default Router;\n//# sourceMappingURL=preact-router.es.js.map\n","import SKILLS from '@constants/skills';\n\nconst skills = {\n \"Tree One\": {\n \"0\": {\n \"?\": {\n text: \"?\",\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n effect: rank => `?`,\n },\n },\n },\n \"Tree Two\": {\n \"0\": {\n \"?\": {\n text: \"?\",\n type: SKILLS.ACTION_SKILL,\n effect: rank => `?`,\n },\n },\n },\n \"Tree Three\": {\n \"0\": {\n \"?\": {\n text: \"?\",\n type: SKILLS.ACTION_SKILL,\n effect: rank => `?`,\n },\n },\n },\n};\n\nexport default skills;\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function Operative ({ path }) {\n return (\n \n );\n}\n","!function(){\"use strict\";function e(e,t){var n,o,r,i,l=W;for(i=arguments.length;i-- >2;)P.push(arguments[i]);t&&null!=t.children&&(P.length||P.push(t.children),delete t.children);while(P.length)if((o=P.pop())&&void 0!==o.pop)for(i=o.length;i--;)P.push(o[i]);else\"boolean\"==typeof o&&(o=null),(r=\"function\"!=typeof e)&&(null==o?o=\"\":\"number\"==typeof o?o+=\"\":\"string\"!=typeof o&&(r=!1)),r&&n?l[l.length-1]+=o:l===W?l=[o]:l.push(o),n=r;var a=new T;return a.nodeName=e,a.children=l,a.attributes=null==t?void 0:t,a.key=null==t?void 0:t.key,void 0!==M.vnode&&M.vnode(a),a}function t(e,t){for(var n in t)e[n]=t[n];return e}function n(e,t){null!=e&&(\"function\"==typeof e?e(t):e.current=t)}function o(n,o){return e(n.nodeName,t(t({},n.attributes),o),arguments.length>2?[].slice.call(arguments,2):n.children)}function r(e){!e.__d&&(e.__d=!0)&&1==V.push(e)&&(M.debounceRendering||D)(i)}function i(){var e;while(e=V.pop())e.__d&&x(e)}function l(e,t,n){return\"string\"==typeof t||\"number\"==typeof t?void 0!==e.splitText:\"string\"==typeof t.nodeName?!e._componentConstructor&&a(e,t.nodeName):n||e._componentConstructor===t.nodeName}function a(e,t){return e.__n===t||e.nodeName.toLowerCase()===t.toLowerCase()}function u(e){var n=t({},e.attributes);n.children=e.children;var o=e.nodeName.defaultProps;if(void 0!==o)for(var r in o)void 0===n[r]&&(n[r]=o[r]);return n}function c(e,t){var n=t?document.createElementNS(\"http://www.w3.org/2000/svg\",e):document.createElement(e);return n.__n=e,n}function p(e){var t=e.parentNode;t&&t.removeChild(e)}function s(e,t,o,r,i){if(\"className\"===t&&(t=\"class\"),\"key\"===t);else if(\"ref\"===t)n(o,null),n(r,e);else if(\"class\"!==t||i)if(\"style\"===t){if(r&&\"string\"!=typeof r&&\"string\"!=typeof o||(e.style.cssText=r||\"\"),r&&\"object\"==typeof r){if(\"string\"!=typeof o)for(var l in o)l in r||(e.style[l]=\"\");for(var l in r)e.style[l]=\"number\"==typeof r[l]&&!1===E.test(l)?r[l]+\"px\":r[l]}}else if(\"dangerouslySetInnerHTML\"===t)r&&(e.innerHTML=r.__html||\"\");else if(\"o\"==t[0]&&\"n\"==t[1]){var a=t!==(t=t.replace(/Capture$/,\"\"));t=t.toLowerCase().substring(2),r?o||e.addEventListener(t,_,a):e.removeEventListener(t,_,a),(e.__l||(e.__l={}))[t]=r}else if(\"list\"!==t&&\"type\"!==t&&!i&&t in e){try{e[t]=null==r?\"\":r}catch(e){}null!=r&&!1!==r||\"spellcheck\"==t||e.removeAttribute(t)}else{var u=i&&t!==(t=t.replace(/^xlink:?/,\"\"));null==r||!1===r?u?e.removeAttributeNS(\"http://www.w3.org/1999/xlink\",t.toLowerCase()):e.removeAttribute(t):\"function\"!=typeof r&&(u?e.setAttributeNS(\"http://www.w3.org/1999/xlink\",t.toLowerCase(),r):e.setAttribute(t,r))}else e.className=r||\"\"}function _(e){return this.__l[e.type](M.event&&M.event(e)||e)}function f(){var e;while(e=A.shift())M.afterMount&&M.afterMount(e),e.componentDidMount&&e.componentDidMount()}function d(e,t,n,o,r,i){H++||(R=null!=r&&void 0!==r.ownerSVGElement,B=null!=e&&!(\"__preactattr_\"in e));var l=h(e,t,n,o,i);return r&&l.parentNode!==r&&r.appendChild(l),--H||(B=!1,i||f()),l}function h(e,t,n,o,r){var i=e,l=R;if(null!=t&&\"boolean\"!=typeof t||(t=\"\"),\"string\"==typeof t||\"number\"==typeof t)return e&&void 0!==e.splitText&&e.parentNode&&(!e._component||r)?e.nodeValue!=t&&(e.nodeValue=t):(i=document.createTextNode(t),e&&(e.parentNode&&e.parentNode.replaceChild(i,e),v(e,!0))),i.__preactattr_=!0,i;var u=t.nodeName;if(\"function\"==typeof u)return N(e,t,n,o);if(R=\"svg\"===u||\"foreignObject\"!==u&&R,u+=\"\",(!e||!a(e,u))&&(i=c(u,R),e)){while(e.firstChild)i.appendChild(e.firstChild);e.parentNode&&e.parentNode.replaceChild(i,e),v(e,!0)}var p=i.firstChild,s=i.__preactattr_,_=t.children;if(null==s){s=i.__preactattr_={};for(var f=i.attributes,d=f.length;d--;)s[f[d].name]=f[d].value}return!B&&_&&1===_.length&&\"string\"==typeof _[0]&&null!=p&&void 0!==p.splitText&&null==p.nextSibling?p.nodeValue!=_[0]&&(p.nodeValue=_[0]):(_&&_.length||null!=p)&&m(i,_,n,o,B||null!=s.dangerouslySetInnerHTML),y(i,t.attributes,s),R=l,i}function m(e,t,n,o,r){var i,a,u,c,s,_=e.childNodes,f=[],d={},m=0,b=0,y=_.length,g=0,w=t?t.length:0;if(0!==y)for(var C=0;C skill.ranks) { return false; }\n tierTotal += skill.invested || 0;\n };\n if (tierTotal > 0 && treeTotal + 5 < tierIndex * 5) { return false; }\n treeTotal += tierTotal;\n tierIndex += 1;\n };\n treeTotals[treeIndex] = treeTotal;\n totalSpent += treeTotal;\n treeIndex += 1;\n };\n if (totalSpent > 48) { return false; }\n return treeTotals;\n}\n","import deepmerge from 'deepmerge';\nimport investmentValidator from './investmentValidator';\nimport { setHash } from './hashHandler';\n\nexport default function reducer (state, action) {\n switch (action.type) {\n case 'skillChange':\n var newSkills = deepmerge(state.skills, {\n [action.treeName]: {\n [action.tierIndex + '']: {\n [action.skillName]: {\n invested: action.newValue,\n }\n }\n }\n });\n const skillChangeTotals = investmentValidator(newSkills);\n if (skillChangeTotals) {\n setHash(newSkills);\n return {\n ...state,\n invested: skillChangeTotals,\n skills: newSkills,\n };\n } else {\n return state;\n }\n case 'loadSkills':\n const loadSkillsTotals = investmentValidator(action.skills);\n if (loadSkillsTotals) {\n return {\n ...state,\n invested: loadSkillsTotals,\n skills: deepmerge(state.skills, action.skills),\n };\n } else {\n return state;\n }\n }\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"footer\":\"Eq4mJ\",\"heart\":\"_37Gl6\",\"moveHeart\":\"_34mPq\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"splash\":\"_2_d3x\",\"wrapper\":\"vMurv\",\"link\":\"_3lx8i\",\"name\":\"_1SiOU\",\"job\":\"_3chgr\"};","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.deepmerge = factory());\n}(this, (function () { 'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tObject.keys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tObject.keys(source).forEach(function(key) {\n\t\tif (!options.isMergeableObject(source[key]) || !target[key]) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nreturn deepmerge_1;\n\n})));\n","import SKILLS from '@constants/skills';\nimport style from './index.css';\n\nfunction getInitials (string) {\n const numWords = (string.match(/\\s/g) || []).length + 1;\n switch (numWords) {\n case 1:\n return string.slice(0, 3);\n case 2:\n return (string.match(/^\\w{1,2}|\\s\\w{1,2}/g) || []).join('').replace(/\\s/g, '');\n default:\n return (string.match(/^\\w|\\s\\w/g) || []).join('').replace(/\\s/g, '');\n }\n}\n\nexport default function Skill ({\n name = '?',\n text = 'Long description',\n ranks = 0,\n invested = 0,\n effect = rank => `Rank ${rank} effect`,\n type = null,\n enabled = true,\n onChange = (oldValue, newValue) => null,\n}) {\n const isAugment = [\n SKILLS.AUGMENT_CHEVRON,\n SKILLS.AUGMENT_DIAMOND,\n SKILLS.ACTION_SKILL,\n ].includes(type);\n let shapeStyle = null;\n if (type === SKILLS.AUGMENT_CHEVRON) { shapeStyle = style.chevron; }\n if (type === SKILLS.AUGMENT_DIAMOND) { shapeStyle = style.diamond; }\n if (type === SKILLS.ACTION_SKILL) { shapeStyle = style.actionSkill; }\n function clickListener (event) {\n var newValue;\n if (event.type === 'click') {\n newValue = Math.min(invested + 1, ranks);\n } else { // (event.type === 'contextmenu')\n newValue = Math.max(invested - 1, 0);\n }\n if (enabled && invested !== newValue) {\n onChange(invested, newValue);\n }\n event.preventDefault();\n return false;\n }\n return (\n 0) ? style.usable : '',\n ].join(' ')}\n onClick={clickListener}\n onContextMenu={clickListener}\n >\n
{getInitials(name)}
\n { enabled && ranks > 0 &&
{invested}/{ranks}
}\n
\n

{name}

\n {text}\n
\n {effect(Math.max(invested, 1))}\n
\n
\n \n );\n}\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function Siren ({ path }) {\n return (\n \n );\n}\n","export function setHash (skillsState) {\n const hashparts = [];\n for (let tree of Object.values(skillsState)) {\n for (let tier of Object.values(tree)) {\n for (let skill of Object.values(tier)) {\n if (skill.type == null) {\n hashparts.push(skill.invested || 0);\n }\n };\n };\n };\n const url = window.location.href.split('#')[0] + '#' + hashparts.join('');\n window.location.replace(url);\n};\n\nexport function getHash (skillsState) {\n const hash = window.location.href.split('#')[1] || '';\n const hashparts = hash.match(/./g) || [];\n const skills = JSON.parse(JSON.stringify(skillsState));\n for (let tree of Object.keys(skills)) {\n for (let tier of Object.keys(skills[tree])) {\n for (let skill of Object.keys(skills[tree][tier])) {\n if (skills[tree][tier][skill].type == null) {\n skills[tree][tier][skill] = { invested: parseInt(hashparts.shift() || 0) };\n } else {\n skills[tree][tier][skill] = {};\n }\n };\n };\n };\n return skills;\n};\n","import SKILLS from '@constants/skills';\n\nconst skills = {\n \"Tree One\": {\n \"0\": {\n \"?\": {\n text: \"?\",\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n effect: rank => `?`,\n },\n },\n },\n \"Tree Two\": {\n \"0\": {\n \"?\": {\n text: \"?\",\n type: SKILLS.ACTION_SKILL,\n effect: rank => `?`,\n },\n },\n },\n \"Tree Three\": {\n \"0\": {\n \"?\": {\n text: \"?\",\n type: SKILLS.ACTION_SKILL,\n effect: rank => `?`,\n },\n },\n },\n};\n\nexport default skills;\n","import VaultHunter from '@components/VaultHunter';\n\nimport skills from './skills.js';\n\nexport default function Beastmaster ({ path }) {\n return (\n \n );\n}\n","import SKILLS from '@constants/skills';\n\nconst skills = {\n \"Under Cover\": {\n \"0\": {\n \"Barrier\": {\n text: \"Drop a deployable Barrier that blocks incoming projectiles. Zane and his allies can shooter through the Barrier, dealing increased Gun Damage. Pressing LB or RB (controller) while Barrier is active picks up and holds the Barrier, but the size and bonuses are decreased.\",\n effect: rank => `Duration - 9 sec, Cooldown - 18 sec, Damage Amp +20%`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Adrenaline\": {\n text: \"Zane gains increased Action Skill Cooldown Rate. This bonus is based on the amount of shield he has. The more percent full, the greater the bonus.\",\n ranks: 5,\n effect: rank => `Action Skill Cooldown Rate - Up to +${rank * 4}%`,\n },\n \"Hearty Stock\": {\n text: \"Zane gains increased Maximum Shield Capacity.\",\n ranks: 5,\n effect: rank => `Max Shield +${rank * 6}%`,\n },\n \"Ready for Action\": {\n text: \"Zane gains improved Shield Recharge Rate and Shield Recharge Delay.\",\n ranks: 5,\n effect: rank => `Shield Recharge Rate +${rank * 6}%, Shield Recharge Delay -${rank * 8}%`,\n },\n },\n \"2\": {\n \"Charged Relay\": {\n text: \"Whenever Zane or an ally touches the Barrier, they gain increased Movement Speed and Fire Rate for a few seconds.\",\n ranks: 0,\n effect: rank => `Fire Rate +13%, Movement Speed +11%, Duration 8 sec after moving away from barrier`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Brainfreeze\": {\n text: \"Whenever Zane scores a Critical Hit on an enemy, there's a chance they will be Slowed.\",\n ranks: 5,\n effect: rank => `Slow Chance ${rank * 2.5}%`,\n },\n \"Stiff Upper Lip\": {\n text: \"Whenever Zane is damaged, he gains Damage Resistance against that damage type.\",\n ranks: 3,\n effect: rank => `Damage Resistance +${rank * 5}%`,\n },\n \"Rise to the Occasion\": {\n text: \"Zane gains Health Regeneration. The lower his shield is, the higher the bonus. While Zane's shields are full, he does not receive any health regeneration.\",\n ranks: 5,\n effect: rank => `Health Regeneration up to +${rank * 1}% of Max Health`,\n },\n },\n \"3\": {\n \"Nanites or Some Shite\": {\n text: \"Zane and his allies gain Health Regeneration, increased Reload Speed, and greatly improved Shield Recharge Delay while near his Barrier. The lower their health, the more health is regenerated.\",\n ranks: 0,\n effect: rank => `Health Regeneration up to 4% of Max Health, Shield Recharge Delay -33%, Reload Speed +11%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Confident Competence\": {\n text: \"While Zane's shields are active, he gains increased Gun Damage and Accuracy. This bonus is based on the amount of shields he has. The more percent full, the greater the bonus.\",\n ranks: 1,\n effect: rank => `Gun Damage up to +10%, Accuracy up to +22%`,\n },\n \"All-rounder\": {\n text: \"Zane's Barrier becomes a dome, covering all sides.\",\n ranks: 0,\n effect: rank => `Barrier cooldown +20%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Redistribution\": {\n text: \"Zane and allies near the Barrier gain increased Gun Damage for a few seconds after the Barrier takes damage.\",\n ranks: 0,\n effect: rank => `Gun Damage +9%, Duration 3 sec`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Really Expensive Jacket\": {\n text: \"Elemental damage over time effects applied to Zane have reduced duration.\",\n ranks: 1,\n effect: rank => `Elemental Effect Duration -50%`,\n },\n \"Best Served Cold\": {\n text: \"Whenever Zane kills an enemy, they create a Cryo Nova, dealing damage to all nearby enemies. This skill has a short cooldown.\",\n ranks: 5,\n effect: rank => `Damage ${rank * 3}, Cooldown 3 sec`, // TODO level scaling\n },\n \"Futility Belt\": {\n text: \"Zane gains resistance to non-elemental damage. Kill Skill - All elemental damage Zane takes is converted to non-elemental damage.\",\n ranks: 1,\n effect: rank => `Damage Reduction +22%, Duration 8 sec`,\n },\n \"Deterrence Field\": {\n text: \"Enemies that touch the Barrier take Shock Damage and are staggered.\",\n ranks: 0,\n effect: rank => `Shock Damage 18`, // TODO level scaling?\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"5\": {\n \"Refreshment\": {\n text: \"Whenever Zane damages a frozen enemy with his weapon, he gains some of that damage back as health.\",\n ranks: 3,\n effect: rank => `Life Steal ${rank * 8}% of damage dealt`,\n },\n \"Calm, Cool, Collected\": {\n text: \"Whenever Zane Freezes an enemy, his shield instantly begins recharging. If Zane's shields are already full, he regenerates health for a few seconds. If Zane's health is already full, his Action Skill Cooldowns and Durations are immediately reset.\",\n ranks: 1,\n effect: rank => `Health Regeneration up to 4% max health, Regeneration Duration 3 sec`,\n },\n \"Nerves of Steel\": {\n text: \"Zane gains increasing Accuracy and Handling. The longer his shield is full, the greater the bonus.\",\n ranks: 3,\n effect: rank => `Accuracy +${rank * 2}% per sec, Handling +${rank * 2.5}% per sec, 99 Max Stacks`,\n },\n },\n \"6\": {\n \"Distributed Denial\": {\n text: \"Zane's barrier gains the effects of his currently equipped Shield Mod. Additionally, shield effects are applied to all allies near the barrier. Bonuses to Zane are reduced.\",\n ranks: 1,\n },\n },\n },\n \"Hitman\": {\n \"0\": {\n \"SNTNL\": {\n text: \"Send into battle an automated SNTL drone that continually flies through the environment and attacks enemies with its Machine Guns. Pressing LB or RB (controller) while SNTNL is active causes it to attack the enemy under Zane's crosshairs, if any.\",\n effect: rank => `Machine Gun Damage - 10, Duration - 24 sec, Cooldown - 36 sec`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n }\n },\n \"1\": {\n \"Violent Speed\": {\n text: \"After killing an enemy, Zane gains increased Movement Speed for a few seconds.\",\n ranks: 5,\n effect: rank => `Movement Speed +${rank * 4}%, Duration 8 sec`,\n },\n \"Cold Bore\": {\n text: \"Zane gains increased Weapon Swap Speed. The next shot fired after swapping weapons deals Bonus Cryo Damage.\",\n ranks: 5,\n effect: rank => `Weapon Swap Speed +${rank * 15}%, Bonus Cryo Damage ${rank * 6}%`,\n },\n \"Violent Momentum\": {\n text: \"Zane's Gun Damage is increased while moving. The quicker he moves, the greater the Gun Damage bonus.\",\n ranks: 5,\n effect: rank => `Gun Damage +${rank * 6}% at regular walk speed`,\n },\n },\n \"2\": {\n \"Winter's Drone\": {\n text: \"Converts SNTNL's primary weapons to Cryo Damage.\",\n ranks: 0,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Cool Hand\": {\n text: \"Zane gains increased Reload Speed. After killing an enemy, Zane's Reload Speed is increased for a few seconds.\",\n ranks: 5,\n effect: rank => `Reload Speed +${rank * 2}% (+${rank * 3}% after kill), Duration 8 sec `,\n },\n \"Drone Delivery\": {\n text: \"SNTRY will occasionally drop a free grenade based on your current grenade mod while attacking enemies.\",\n ranks: 1,\n effect: rank => `Cooldown 15 sec`,\n },\n \"Salvation\": {\n text: \"After killing an enemy, Zane's weapons gain Life Steal for a few seconds.\",\n ranks: 5,\n effect: rank => `Life Steal ${rank * 4}% of damage, Duration 8 sec`,\n },\n },\n \"3\": {\n \"Bad Dose\": {\n text: \"SNTNL occasionally shoots out a beam of Radiation that weakens enemies and buffs Zane.\",\n ranks: 0,\n effect: rank => `Fire Rate +3% per enemy, Movement Speed +6% per enemy, Damage 2, Duration 12 sec, Cooldown 8 sec`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Seein' Red\": {\n text: \"Activating an Action Skill automatically activates all of Zane's kill skills.\",\n ranks: 1,\n },\n \"Static Field\": {\n text: \"SNTNL emits a static field that sends a Shock beam to nearby enemies, draining their shields and replenishing Zane's.\",\n ranks: 0,\n effect: rank => `Shield Damage 2 per sec, Cooldown 2 sec`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Boomsday\": {\n text: \"SNTNL adds a rocket pod to its primary weapons, allowing it to shoot rockets as well as machine guns.\",\n ranks: 0,\n effect: rank => `Rocket Damage 50`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Violent Violence\": {\n text: \"After killing an enemy, Zane gains increased Fire Rate for a few seconds.\",\n ranks: 5,\n effect: rank => `Fire Rate +${rank * 4}%, Cooldown 8 sec`,\n },\n \"Playing Dirty\": {\n text: \"After killing an enemy, Zane's next five shots all have a chance to fire an additional projectile.\",\n ranks: 5,\n effect: rank => `Extra Shot Chance ${rank * 10}%`,\n },\n \"Almighty Ordnance\": {\n text: \"Hold down LB or RB (controller) while SNTNL is deployed to paint a target area. SNTNL fires a missile barrage at that area, and if an enemy is killed, Almighty Ordnance's duration is reset. This can only be used once per Action Skill use.\",\n ranks: 0,\n effect: rank => `Missile Damage 25, 5 Missiles per Barrage`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"5\": {\n \"Good Misfortune\": {\n text: \"Killing an enemy increases Zane's Action Skill Duration. This skill has diminishing returns.\",\n ranks: 3,\n effect: rank => `Kill skill, initial action skill bonus duration +${rank * 5}%`,\n },\n },\n \"6\": {\n \"Death Follows Close\": {\n text: \"All of Zane's kill skills gain increased effect and duration.\",\n ranks: 1,\n effect: rank => `Kill Skill Effect +40%, Kill Skill Duration +4 sec`,\n },\n }\n },\n \"Doubled Agent\": {\n \"0\": {\n \"Digi-Clone\": {\n text: \"Spawn a Digi-Clone of Zane. The clone stays in place, but distracts and fires at enemies. Pressing LB or RB (controller) while the Clone is active causes Zane and the Clone to swap places.\",\n effect: rank => `Duration - 18 seconds, Cooldown - 26 sec`,\n type: SKILLS.ACTION_SKILL,\n ranks: 0,\n },\n },\n \"1\": {\n \"Synchronicity\": {\n text: \"Whenever one or more of Zane's action skills are active, he gains increased Gun Damage for each active action skill.\",\n ranks: 5,\n effect: rank => `Gun Damage +${rank * 2}% per active action skill`,\n },\n \"Praemunitus\": {\n text: \"Zane and his Dig-Clone gain increased Magazine Size.\",\n ranks: 3,\n effect: rank => `Magazine Size +${rank * 4}%`,\n },\n \"Borrowed Time\": {\n text: \"Zane gains increased Action Skill Duration for every active action skill.\",\n ranks: 5,\n effect: rank => `Action Skill Duration +${rank * 4}% per active action skill`,\n },\n },\n \"2\": {\n \"Binary System\": {\n text: \"Whenever Zane swaps places with his Clone, a Cryo Nova is triggered around Zane and his Clone.\",\n ranks: 0,\n effect: rank => `Nova Damage 66`, // TODO scale with level?\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Donnybrook\": {\n text: \"Whenever Zane kills an enemy ,he and his Digi-Clone receive increased Gun Damage and gain Health Regeneration for a few seconds.\",\n ranks: 5,\n effect: rank => `Gun Damage +${rank * 2}%, Health Regen ${rank * 0.5}% of missing health, Duration 8 sec`,\n },\n \"Fractal Frags\": {\n text: \"The Digi-Clone throws a copy of Zane's current grenade mod when it is first activated. If the Digi-Clone is killed, it drops a free grenade. Killing an enemy while the Digi-Clone is active gives the Clone a chance to throw a grenade.\",\n ranks: 1,\n effect: rank => `Grenade Chance 30%`,\n },\n \"Duct Tape Mod\": {\n text: \"The first shot fired from Zane's gun has a chance to also fire a grenade. The more grenades in his capacity, the higher the chance.\",\n ranks: 5,\n effect: rank => `Grenade Chance up to ${rank * 5}%`,\n },\n },\n \"3\": {\n \"Schadenfreude\": {\n text: \"Whenever the Clone takes damage, Zane's shield is restored by a portion of that damage.\",\n ranks: 0,\n effect: rank => `Shields Restored +11% of damage`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Quick Breather\": {\n text: \"Whenever Zane swaps places with his Clone, his shield immediately begins recharging.\",\n ranks: 1,\n },\n \"Which One's Real?\": {\n text: \"Enemies are more likely to target the Clone for a few seconds after it's summoned and after swapping places.\",\n ranks: 0,\n effect: rank => `Duration 6 sec`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"4\": {\n \"Dopplebanger\": {\n text: \"Hold down LB or RB (controller) to end the action skill early. When Zane's Action Skill is ended, the Clone explodes, dealing Fire Damage to all nearby enemies. The more Action Skill time remaining, the greater the damage.\",\n ranks: 0,\n effect: rank => `Damage Up to 1,326`, // TODO scale with level?\n type: SKILLS.AUGMENT_CHEVRON,\n },\n \"Pocket Full of Grenades\": {\n text: \"After killing an enemy, Zane gains Grenade Regeneration for a few seconds.\",\n ranks: 3,\n effect: rank => `Grenade Regeneration ${rank * 5}%, Duration 8 sec`,\n },\n \"Old-U\": {\n text: \"Press LB or RB (controller) during Fight for Your Life if Digi-Clone is active to destroy the clone and immediately gain a Second Wind with full health.\",\n ranks: 1,\n },\n \"Supersonic Man\": {\n text: \"Whenever one or more of Zane's Action Skills are active, he gains increased Movement Speed for each active Action Skill.\",\n ranks: 3,\n effect: rank => `Movement Speed +${rank * 4}% per active action skill`,\n },\n \"Digital Distribution\": {\n text: \"If Zane takes health damage while the Clone is active, a portion of that damage is shared to his Clone instead.\",\n ranks: 0,\n effect: rank => `Shared Health Damage +75%`,\n type: SKILLS.AUGMENT_CHEVRON,\n },\n },\n \"5\": {\n \"Like a Ghost\": {\n text: \"Zane and his Digi-Clone gain a chance to ignore bullets. This chance is increased for a few seconds after activating an action skill. This effect stacks.\",\n ranks: 3,\n effect: rank => `Ignore Bullet Chance ${rank * 4}%, Additional Ignore Bullet Chance +${rank * 1}%, Duration 8 sec`,\n },\n \"Boom. Enhance.\": {\n text: \"Whenever Zane summons his Digi-Clone, it consumes up to 3 grenades. For every grenade consumed, the Digi-Clone gains increased Gun Damage, Max Health, Fire Rate, and Reload Speed.\",\n ranks: 1,\n effect: rank => `Gun Damage +11% per grenade, Max Health +17% per grenade, Fire Rate +17% per grenade, Reload Speed +12% per grenade`,\n },\n \"Trick of the Light\": {\n text: \"Zane deals Bonus Shock Damage to enemies that aren't targeting him.\",\n ranks: 3,\n effect: rank => `Bonus Damage ${rank * 6}% of damage dealt`,\n },\n },\n \"6\": {\n \"Double Barrel\": {\n text: \"The Clone is equipped with a copy of Zane's Current Weapon when activated. Swapping places with the Clone causes Zane and his clone to gain increased Gun Damage.\",\n ranks: 1,\n effect: rank => `Gun Damage +10%, Item Duping +100%`,\n },\n },\n },\n};\n\nexport default skills;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/index.html b/index.html index 0a96f48..a913983 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -Borderlands 3 Skill Planner \ No newline at end of file +Borderlands 3 Skill Planner \ No newline at end of file diff --git a/operative/index.html b/operative/index.html index 0a96f48..a913983 100644 --- a/operative/index.html +++ b/operative/index.html @@ -1 +1 @@ -Borderlands 3 Skill Planner \ No newline at end of file +Borderlands 3 Skill Planner \ No newline at end of file diff --git a/siren/index.html b/siren/index.html index 0a96f48..a913983 100644 --- a/siren/index.html +++ b/siren/index.html @@ -1 +1 @@ -Borderlands 3 Skill Planner \ No newline at end of file +Borderlands 3 Skill Planner \ No newline at end of file diff --git a/sw.js b/sw.js index cdacb70..101f892 100644 --- a/sw.js +++ b/sw.js @@ -1,3 +1,3 @@ -var __wpo = {"assets":{"main":["/45598562077bdc84281b5330ff4d283e.png","/6274c9808eb08785f146a2b78283b5f6.jpg","/bundle.636ae.css","/bundle.59655c37.js","/assets/favicon.png","/assets/hunters/fl4k.png","/assets/manifest.json","/assets/robots.txt","/"],"additional":[],"optional":[]},"externals":[],"hashesMap":{"6e148698d382b2c0806ba60a00e5e3e431d7232f":"/45598562077bdc84281b5330ff4d283e.png","507dda73c3ff7f9e08f8788d03b518bb39678b85":"/6274c9808eb08785f146a2b78283b5f6.jpg","c29a0ccf8a103eadeba921642d9eba1a0106b38e":"/bundle.636ae.css","2694a85c8d305cb0b80d46ce5ffd5a62813ae05a":"/bundle.59655c37.js","67af5559591f22ffba90d13299f3df513e5cbc52":"/assets/favicon.png","dd512257c8c0c3b649954b0b3dd8c5ad04324ded":"/assets/hunters/fl4k.png","3a03eb4a327cd89d096bd1ed9f95366649e8e259":"/assets/manifest.json","c47ccf1a49c24cc5842430aa75c72ef491292412":"/assets/robots.txt","5f063589555fd2b2b7d4f74d09750b5852510566":"/"},"strategy":"changed","responseStrategy":"cache-first","version":"5/6/2019, 11:05:32 AM","name":"webpack-offline","pluginVersion":"5.0.7","relativePaths":false}; +var __wpo = {"assets":{"main":["/45598562077bdc84281b5330ff4d283e.png","/6274c9808eb08785f146a2b78283b5f6.jpg","/bundle.636ae.css","/bundle.280e2806.js","/assets/favicon.png","/assets/hunters/fl4k.png","/assets/manifest.json","/assets/robots.txt","/"],"additional":[],"optional":[]},"externals":[],"hashesMap":{"6e148698d382b2c0806ba60a00e5e3e431d7232f":"/45598562077bdc84281b5330ff4d283e.png","507dda73c3ff7f9e08f8788d03b518bb39678b85":"/6274c9808eb08785f146a2b78283b5f6.jpg","c29a0ccf8a103eadeba921642d9eba1a0106b38e":"/bundle.636ae.css","d6e88785352ab7af07ce8010893c1d64ff7bc5b0":"/bundle.280e2806.js","67af5559591f22ffba90d13299f3df513e5cbc52":"/assets/favicon.png","dd512257c8c0c3b649954b0b3dd8c5ad04324ded":"/assets/hunters/fl4k.png","3a03eb4a327cd89d096bd1ed9f95366649e8e259":"/assets/manifest.json","c47ccf1a49c24cc5842430aa75c72ef491292412":"/assets/robots.txt","aae8a3f7216af4b82cec4332d9c5123204e3114b":"/"},"strategy":"changed","responseStrategy":"cache-first","version":"5/6/2019, 11:20:53 AM","name":"webpack-offline","pluginVersion":"5.0.7","relativePaths":false}; !function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var t={};n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(n){return e[n]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="/",n(n.s="+N4f")}({"+N4f":function(e,n,t){"use strict";function r(e,n){return caches.match(e,{cacheName:n}).then(function(t){return o(t)?t:i(t).then(function(t){return caches.open(n).then(function(n){return n.put(e,t)}).then(function(){return t})})}).catch(function(){})}function o(e){return!e||!e.redirected||!e.ok||"opaqueredirect"===e.type}function i(e){return o(e)?Promise.resolve(e):("body"in e?Promise.resolve(e.body):e.blob()).then(function(n){return new Response(n,{headers:e.headers,status:e.status})})}function a(e,n){console.groupCollapsed("[SW]:",e),n.forEach(function(e){console.log("Asset:",e)}),console.groupEnd()}var c,s,u;if(c=ExtendableEvent.prototype.waitUntil,s=FetchEvent.prototype.respondWith,u=new WeakMap,ExtendableEvent.prototype.waitUntil=function(e){var n=this,t=u.get(n);if(!t)return t=[Promise.resolve(e)],u.set(n,t),c.call(n,Promise.resolve().then(function e(){var r=t.length;return Promise.all(t.map(function(e){return e.catch(function(){})})).then(function(){return t.length!=r?e():(u.delete(n),Promise.all(t))})}));t.push(Promise.resolve(e))},FetchEvent.prototype.respondWith=function(e){return this.waitUntil(e),s.call(this,e)},void 0===f)var f=!1;!function(e,n){function t(n){var t=w[n];return caches.open(q).then(function(r){return h(r,t,{bust:e.version,request:b,failAll:"main"===n})}).then(function(){a("Cached assets: "+n,t)}).catch(function(e){throw console.error(e),e})}function o(n){return caches.keys().then(function(e){for(var n=e.length,t=void 0;n--&&0!==(t=e[n]).indexOf(P););if(t){var r=void 0;return caches.open(t).then(function(e){return r=e,e.match(new URL(R,location).toString())}).then(function(e){if(e)return Promise.all([r,r.keys(),e.json()])})}}).then(function(r){if(!r)return t(n);var o=r[0],i=r[1],c=r[2],s=c.hashmap;if(!c.hashmap||c.version===e.version)return t(n);var u=Object.keys(s).map(function(e){return s[e]}),f=i.map(function(e){var n=new URL(e.url);return n.search="",n.hash="",n.toString()}),l=w[n],d=[],p=l.filter(function(e){return-1===f.indexOf(e)||-1===u.indexOf(e)});Object.keys(y).forEach(function(e){var n=y[e];if(-1!==l.indexOf(n)&&-1===p.indexOf(n)&&-1===d.indexOf(n)){var t=s[e];t&&-1!==f.indexOf(t)?d.push([t,n]):p.push(n)}}),a("Changed assets: "+n,p),a("Moved assets: "+n,d);var v=Promise.all(d.map(function(e){return o.match(e[0]).then(function(n){return[e[1],n]})}));return caches.open(q).then(function(t){var r=v.then(function(e){return Promise.all(e.map(function(e){return t.put(e[0],e[1])}))});return Promise.all([r,h(t,p,{bust:e.version,request:b,failAll:"main"===n,deleteFirst:"main"!==n})])})})}function c(){return caches.keys().then(function(e){var n=e.map(function(e){if(0===e.indexOf(P)&&0!==e.indexOf(q))return console.log("[SW]:","Delete cache:",e),caches.delete(e)});return Promise.all(n)})}function s(){return caches.open(q).then(function(n){var t=new Response(JSON.stringify({version:e.version,hashmap:y}));return n.put(new URL(R,location).toString(),t)})}function u(e,n,t){return function(e){if(v&&"function"==typeof v.map&&e.preloadResponse&&"navigate"===e.request.mode){var n=v.map(new URL(e.request.url),e.request);n&&function(e,n){var t=new URL(e,location),r=n.preloadResponse;x.set(r,{url:t,response:r});var o=function(){return x.has(r)},i=r.then(function(e){if(e&&o()){var n=e.clone();return caches.open(O).then(function(e){if(o())return e.put(t,n).then(function(){if(!o())return caches.open(O).then(function(e){return e.delete(t)})})})}});n.waitUntil(i)}(n,e)}}(e),r(t,q).then(function(r){return r?(f&&console.log("[SW]:","URL ["+t+"]("+n+") from cache"),r):fetch(e.request).then(function(r){return r.ok?(f&&console.log("[SW]:","URL ["+n+"] from network"),t===n&&(o=r.clone(),i=caches.open(q).then(function(e){return e.put(n,o)}).then(function(){console.log("[SW]:","Cache asset: "+n)}),e.waitUntil(i)),r):(f&&console.log("[SW]:","URL ["+n+"] wrong response: ["+r.status+"] "+r.type),r);var o,i})})}function l(e){var n=new URL(e.request.url);if(self.registration.navigationPreload&&v&&v.test&&v.test(n,e.request)){var t=function(e){if(x){var n=void 0,t=void 0;return x.forEach(function(r,o){r.url.href===e.href&&(n=r.response,t=o)}),n?(x.delete(t),n):void 0}}(n),o=e.request;return t?(e.waitUntil(caches.open(O).then(function(e){return e.delete(o)})),t):r(o,O).then(function(n){return n&&e.waitUntil(caches.open(O).then(function(e){return e.delete(o)})),n||fetch(e.request)})}}function h(e,n,t){n=n.slice();var r=t.bust,o=!1!==t.failAll,a=!0===t.deleteFirst,c=t.request||{credentials:"omit",mode:"cors"},s=Promise.resolve();return a&&(s=Promise.all(n.map(function(n){return e.delete(n).catch(function(){})}))),Promise.all(n.map(function(e){var n,t,o;return r&&(t=r,o=-1!==(n=e).indexOf("?"),e=n+(o?"&":"?")+"__uncache="+encodeURIComponent(t)),fetch(e,c).then(i).then(function(e){return e.ok?{response:e}:{error:!0}},function(){return{error:!0}})})).then(function(t){return o&&t.some(function(e){return e.error})?Promise.reject(new Error("Wrong response status")):(o||(t=t.filter(function(e,t){return!e.error||(n.splice(t,1),!1)})),s.then(function(){var r=t.map(function(t,r){return e.put(n[r],t.response)});return Promise.all(r)}))})}function d(e){return e.preloadResponse&&!0===v?e.preloadResponse.then(function(n){return n||fetch(e.request)}):fetch(e.request)}var p=n.cacheMaps,v=n.navigationPreload,m=e.strategy,g=e.responseStrategy,w=e.assets,y=e.hashesMap,U=e.externals,b=e.prefetchRequest||{credentials:"same-origin",mode:"cors"},P=e.name,q=P+":"+e.version,O=P+"$preload",R="__offline_webpack__data";Object.keys(w).forEach(function(e){w[e]=w[e].map(function(e){var n=new URL(e,location);return n.hash="",-1===U.indexOf(e)&&(n.search=""),n.toString()})}),y=Object.keys(y).reduce(function(e,n){var t=new URL(y[n],location);return t.search="",t.hash="",e[n]=t.toString(),e},{}),U=U.map(function(e){var n=new URL(e,location);return n.hash="",n.toString()});var S=[].concat(w.main,w.additional,w.optional);self.addEventListener("install",function(e){console.log("[SW]:","Install event");var n=void 0;n="changed"===m?o("main"):t("main"),e.waitUntil(n)}),self.addEventListener("activate",function(e){console.log("[SW]:","Activate event");var n=w.additional.length?(f&&console.log("[SW]:","Caching additional"),("changed"===m?o("additional"):t("additional")).catch(function(){console.error("[SW]:","Cache section `additional` failed to load")})):Promise.resolve();n=(n=(n=n.then(s)).then(c)).then(function(){if(self.clients&&self.clients.claim)return self.clients.claim()}),v&&self.registration.navigationPreload&&(n=Promise.all([n,self.registration.navigationPreload.enable()])),e.waitUntil(n)}),self.addEventListener("fetch",function(e){if("GET"===e.request.method&&("only-if-cached"!==e.request.cache||"same-origin"===e.request.mode)){var n=new URL(e.request.url);n.hash="";var t=n.toString();-1===U.indexOf(t)&&(n.search="",t=n.toString());var o=-1!==S.indexOf(t),i=t;if(!o){var a=function(e){var n=e.url,t=new URL(n),r=void 0;r=function(e){return"navigate"===e.mode||e.headers.get("Upgrade-Insecure-Requests")||-1!==(e.headers.get("Accept")||"").indexOf("text/html")}(e)?"navigate":t.origin===location.origin?"same-origin":"cross-origin";for(var o=0;o